]> git.sur5r.net Git - bacula/rescue/commitdiff
Initial revision
authorKern Sibbald <kern@sibbald.com>
Mon, 11 Apr 2005 07:57:12 +0000 (07:57 +0000)
committerKern Sibbald <kern@sibbald.com>
Mon, 11 Apr 2005 07:57:12 +0000 (07:57 +0000)
172 files changed:
rescue/.cvsignore [new file with mode: 0644]
rescue/Makefile.in [new file with mode: 0755]
rescue/freebsd/.cvsignore [new file with mode: 0644]
rescue/freebsd/Makefile.in [new file with mode: 0755]
rescue/freebsd/backup.etc.list [new file with mode: 0644]
rescue/freebsd/getdiskinfo [new file with mode: 0755]
rescue/freebsd/make_rescue_disk [new file with mode: 0755]
rescue/freebsd/restore_etc [new file with mode: 0755]
rescue/freebsd/run_grub [new file with mode: 0755]
rescue/freebsd/run_lilo [new file with mode: 0755]
rescue/freebsd/sfdisk.bz2 [new file with mode: 0644]
rescue/linux/.cvsignore [new file with mode: 0644]
rescue/linux/Makefile.in [new file with mode: 0644]
rescue/linux/cdrom/.cvsignore [new file with mode: 0644]
rescue/linux/cdrom/Makefile.in [new file with mode: 0644]
rescue/linux/cdrom/README [new file with mode: 0644]
rescue/linux/cdrom/dev.tar.gz [new file with mode: 0644]
rescue/linux/cdrom/makebinaries [new file with mode: 0755]
rescue/linux/cdrom/makeinitrd [new file with mode: 0755]
rescue/linux/cdrom/makekernel [new file with mode: 0755]
rescue/linux/cdrom/mkbootdisk [new file with mode: 0755]
rescue/linux/cdrom/mkinitrd [new file with mode: 0755]
rescue/linux/cdrom/rootetc.list [new file with mode: 0644]
rescue/linux/cdrom/rootetc.list.save [new file with mode: 0644]
rescue/linux/cdrom/rootsbin.list [new file with mode: 0644]
rescue/linux/cdrom/rootsbin.list.save [new file with mode: 0644]
rescue/linux/cdrom/roottree/.cvsignore [new file with mode: 0644]
rescue/linux/cdrom/roottree/README [new file with mode: 0644]
rescue/linux/cdrom/roottree/etc/.cvsignore [new file with mode: 0644]
rescue/linux/cdrom/roottree/etc/fonts.cgz [new file with mode: 0644]
rescue/linux/cdrom/roottree/etc/inittab [new file with mode: 0644]
rescue/linux/cdrom/roottree/etc/issue [new file with mode: 0644]
rescue/linux/cdrom/roottree/etc/keymaps.gz [new file with mode: 0644]
rescue/linux/cdrom/roottree/etc/lang-table [new file with mode: 0644]
rescue/linux/cdrom/roottree/etc/lilo.conf [new file with mode: 0644]
rescue/linux/cdrom/roottree/etc/load_eth0 [new file with mode: 0755]
rescue/linux/cdrom/roottree/etc/mount_cdrom [new file with mode: 0755]
rescue/linux/cdrom/roottree/etc/mtab [new file with mode: 0644]
rescue/linux/cdrom/roottree/etc/nsswitch.conf [new file with mode: 0644]
rescue/linux/cdrom/roottree/etc/profile [new file with mode: 0644]
rescue/linux/cdrom/roottree/etc/rc.d/rc [new file with mode: 0755]
rescue/linux/cdrom/roottree/etc/securetty [new file with mode: 0644]
rescue/linux/cdrom/roottree/etc/start_network.sh [new file with mode: 0755]
rescue/linux/cdrom/roottree/etc/sysinit [new file with mode: 0755]
rescue/linux/cdrom/roottree/etc/termcap [new file with mode: 0644]
rescue/linux/cdrom/roottree/init [new file with mode: 0755]
rescue/linux/cdrom/roottree/init.new [new file with mode: 0755]
rescue/linux/cdrom/roottree/linuxrc [new file with mode: 0755]
rescue/linux/cdrom/roottree/root/.bash_history [new file with mode: 0644]
rescue/linux/cdrom/roottree/root/.bash_logout [new file with mode: 0644]
rescue/linux/cdrom/roottree/root/.bash_profile [new file with mode: 0644]
rescue/linux/cdrom/roottree/root/.bashrc [new file with mode: 0644]
rescue/linux/cdrom/roottree/root/ntfsresize [new file with mode: 0755]
rescue/linux/cdrom/yaird-0.0.5.tar.gz [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/AUTHORS [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/COPYING [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/ChangeLog [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/INSTALL [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/Makefile [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/Makefile.am [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/Makefile.in [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/Makefile.incl [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/NEWS [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/README [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/TODO [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/aclocal.m4 [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/bootstrap.sh [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/config.log [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/config.status [new file with mode: 0755]
rescue/linux/cdrom/yaird-0.0.5/configure [new file with mode: 0755]
rescue/linux/cdrom/yaird-0.0.5/configure.in [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/depcomp [new file with mode: 0755]
rescue/linux/cdrom/yaird-0.0.5/doc/Makefile [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/Makefile.am [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/Makefile.in [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/authors.xml [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/concepts.xml [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/figures/console.dia [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/figures/console.png [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/input.xml [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/intro.xml [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/kernel.xml [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/license.xml [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/raid.xml [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/security.xml [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/shlibs.xml [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/spec.xml [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/tools.xml [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/yaird.html [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/yaird.xml [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/doc/yaird.xml.in [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/exec/.deps/findlibs.Po [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/exec/.deps/run_init.Po [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/exec/Makefile [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/exec/Makefile.am [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/exec/Makefile.in [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/exec/findlibs [new file with mode: 0755]
rescue/linux/cdrom/yaird-0.0.5/exec/findlibs.c [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/exec/run_init [new file with mode: 0755]
rescue/linux/cdrom/yaird-0.0.5/exec/run_init.c [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/include/config.h [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/include/config.h.in [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/include/stamp-h1 [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/install-sh [new file with mode: 0755]
rescue/linux/cdrom/yaird-0.0.5/missing [new file with mode: 0755]
rescue/linux/cdrom/yaird-0.0.5/perl/ActionList.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/ActiveBlockDev.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/ActiveBlockDevTab.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/Base.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/Blacklist.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/BlockSpecialFile.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/BlockSpecialFileTab.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/Conf.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/Conf.pm.in [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/FsEntry.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/FsOpts.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/FsTab.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/Hardware.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/IdeDev.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/Image.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/Input.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/InputTab.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/KConfig.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/LabeledPartition.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/LabeledPartitionTab.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/LogicalVolume.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/LvmTab.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/Makefile [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/Makefile.am [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/Makefile.in [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/ModDep.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/ModDepTab.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/Obj.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/Pack.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/PciDev.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/PciMapEntry.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/PciTab.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/PhysicalVolume.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/Plan.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/RaidDev.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/RaidTab.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/ScsiDev.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/SharedLibraries.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/TestSet.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/UsbDev.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/UsbMapEntry.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/UsbTab.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/VolumeGroup.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/main.pl [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/perl/yaird [new file with mode: 0755]
rescue/linux/cdrom/yaird-0.0.5/templates/Debian.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/templates/Fedora.pm [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/templates/Makefile [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/templates/Makefile.am [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/templates/Makefile.in [new file with mode: 0644]
rescue/linux/cdrom/yaird-0.0.5/templates/Template.pm [new file with mode: 0644]
rescue/linux/floppy/.cvsignore [new file with mode: 0644]
rescue/linux/floppy/Makefile.in [new file with mode: 0755]
rescue/linux/floppy/backup.etc.list [new file with mode: 0644]
rescue/linux/floppy/format_floppy [new file with mode: 0755]
rescue/linux/floppy/getdiskinfo [new file with mode: 0755]
rescue/linux/floppy/make_rescue_disk [new file with mode: 0755]
rescue/linux/floppy/restore_etc [new file with mode: 0755]
rescue/linux/floppy/run_grub [new file with mode: 0755]
rescue/linux/floppy/run_lilo [new file with mode: 0755]
rescue/linux/floppy/sfdisk.bz2 [new file with mode: 0644]
rescue/solaris/.cvsignore [new file with mode: 0644]
rescue/solaris/Makefile.in [new file with mode: 0755]
rescue/solaris/SysAudit [new file with mode: 0755]
rescue/solaris/backup.etc.list [new file with mode: 0644]
rescue/solaris/getdiskinfo [new file with mode: 0755]
rescue/solaris/make_rescue_disk [new file with mode: 0755]

diff --git a/rescue/.cvsignore b/rescue/.cvsignore
new file mode 100644 (file)
index 0000000..f3c7a7c
--- /dev/null
@@ -0,0 +1 @@
+Makefile
diff --git a/rescue/Makefile.in b/rescue/Makefile.in
new file mode 100755 (executable)
index 0000000..0fc4e81
--- /dev/null
@@ -0,0 +1,56 @@
+# 
+# Bootstrap Makefile.in
+#
+# Version $Id$
+# 
+@MCOMMON@
+
+working_dir=@working_dir@
+
+srcdir =       @srcdir@
+VPATH =        @srcdir@
+.PATH:         @srcdir@
+topdir = ..
+thisdir = bootstrap
+
+
+first_rule: all
+dummy:
+
+MKDIR = $(topdir)/autoconf/mkinstalldirs
+
+#-------------------------------------------------------------------------
+
+all: Makefile
+
+
+depend:
+       
+
+#-------------------------------------------------------------------------
+
+
+install:
+
+uninstall:
+
+Makefile: Makefile.in
+       cd $(topdir) \
+           && CONFIG_FILES=$(thisdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+Makefiles:
+       $(SHELL) config.status
+
+clean:
+       @$(RMF) *~ 1 2 3
+
+# clean for distribution
+distclean: clean
+       @$(RMF) -r CVS
+
+devclean: clean
+       @for subdir in freebsd linux solaris; do \
+           if [ -f $${subdir}/Makefile ]; then \
+                    (cd $${subdir}; $(MAKE) devclean) \
+           fi; \
+# ------------------------------------------------------------------------
diff --git a/rescue/freebsd/.cvsignore b/rescue/freebsd/.cvsignore
new file mode 100644 (file)
index 0000000..ee40e78
--- /dev/null
@@ -0,0 +1,10 @@
+Makefile
+diskinfo
+format.hda
+mount_drives
+partition.hda
+sfdisk
+start_network
+1
+bacula-fd
+bacula-fd.conf
diff --git a/rescue/freebsd/Makefile.in b/rescue/freebsd/Makefile.in
new file mode 100755 (executable)
index 0000000..bbb2368
--- /dev/null
@@ -0,0 +1,57 @@
+# 
+# bootstrap/freebsd Makefile.in
+#
+# Version $Id$
+# 
+@MCOMMON@
+
+working_dir=@working_dir@
+
+srcdir =       @srcdir@
+VPATH =        @srcdir@
+.PATH:         @srcdir@
+topdir = ../..
+thisdir = freebsd
+
+
+first_rule: all
+dummy:
+
+MKDIR = $(topdir)/autoconf/mkinstalldirs
+
+#-------------------------------------------------------------------------
+
+all: Makefile
+
+depend:
+       
+
+#-------------------------------------------------------------------------
+
+
+install:
+
+uninstall:
+
+Makefile: Makefile.in
+       cd $(topdir) \
+           && CONFIG_FILES=$(thisdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+Makefiles:
+       $(SHELL) config.status
+
+clean:
+       @$(RMF) *~ 1 2 3
+       @$(RMF) format.* partition.* start_network mount_drives
+       @$(RMF) sfdisk bacula-fd bacula-fd.gz bacula-fd.conf
+       @$(RMF) -r diskinfo
+
+# clean for distribution
+distclean: clean
+       @$(RMF) Makefile
+       @$(RMF) -r CVS
+
+devclean: clean
+       @$(RMF) Makefile
+
+# ------------------------------------------------------------------------
diff --git a/rescue/freebsd/backup.etc.list b/rescue/freebsd/backup.etc.list
new file mode 100644 (file)
index 0000000..43855e6
--- /dev/null
@@ -0,0 +1,13 @@
+/etc/exports
+/etc/fstab
+/etc/group
+/etc/gshadow
+/etc/host.conf
+/etc/hosts
+/etc/hosts.allow
+/etc/hosts.deny
+/etc/modules.conf
+/etc/passwd
+/etc/resolv.conf
+/etc/shadow
+/etc/sysconfig
diff --git a/rescue/freebsd/getdiskinfo b/rescue/freebsd/getdiskinfo
new file mode 100755 (executable)
index 0000000..6c813a3
--- /dev/null
@@ -0,0 +1,204 @@
+#!/bin/sh
+#
+# Create bootstrap information files -- prelude to creating a
+#   Bacula Rescue Disk
+#
+#   Kern Sibbald, December MMII
+#      This source distributed under the GPL
+#
+di=diskinfo
+cwd=`pwd`
+host=`uname -s`
+case $host in
+ Linux)
+  ;;
+ FreeBSD | SunOS | IRIX)
+   echo ""
+   echo "This code is not yet adapted to this OS"     
+   exit 1
+   ;;
+ *)
+   echo ""
+   echo "Unknown operating system type: $host"     
+   exit 1
+   ;;
+esac
+if [ ! `whoami` = "root" ] ; then
+  echo ""
+  echo "You need to be root to run this, otherwise"
+  echo "sfdisk produces no output. Continuing anyway ..."
+  echo ""
+fi
+
+#
+#  First collect information
+#
+echo "Begin collecting system info"
+mkdir -p $di
+cd $di
+mount -l >mount.bsi
+mount -l -t ext2 >mount.ext2.bsi
+mount -l -t ext3 >mount.ext3.bsi
+cp /etc/fstab fstab.bsi
+cp /etc/mtab  mtab.bsi     
+df -Tl >df.bsi
+sfdisk -s >sfdisk.disks.bsi
+grep "^/dev/" sfdisk.disks.bsi | sed -n 's/\(^.*\):.*$/\1/p' >disks.bsi
+for i in `cat disks.bsi`; do
+   j=`echo $i | cut -c6-`
+   sfdisk -l $i >sfdisk.$j.bsi 
+   sfdisk -d $i >sfdisk.make.$j.bsi
+done
+route -n >route.bsi
+ifconfig >ifconfig.bsi
+echo "Done collecting info. Building scripts ..."
+
+#
+# Done collecting information
+#
+
+
+#
+# First create partitioning script(s)
+#
+for i in `cat disks.bsi`; do
+  j=`echo $i | cut -c6-`
+  cat >$cwd/partition.$j <<END_OF_DATA
+#!/bin/sh
+#
+#  Partition disk $i  -- created by getdiskinfo
+echo ""
+echo "This script will repartition disk $i."
+echo ""
+echo "IT WILL DESTROY ALL DATA ON DISK $i !!!!"
+echo ""
+echo -n "Are you sure you want to continue? (yes/no): "
+read a
+if [ x\$a != xyes ] ; then
+   exit 1
+fi 
+echo "Partitioning disk $i"
+# zap partition info
+dd if=/dev/zero of=$i bs=512 count=2
+# repartition
+sfdisk $i <$di/sfdisk.make.$j.bsi | less
+echo ""
+echo "The previous partitioning was:"
+cat $di/sfdisk.$j.bsi
+#
+echo ""
+echo "The new partitioning is:"
+sfdisk -l $i
+echo ""
+echo "If the disk is correctly partitioned, you should"
+echo "now run the \"format.$j\" script."
+echo ""
+END_OF_DATA
+
+  chmod 755 $cwd/partition.$j
+done
+
+#
+# Create formatting script(s)
+#
+for i in `cat disks.bsi`; do
+  j=`echo $i | cut -c6-`
+  cat >$cwd/format.$j <<END_OF_DATA
+#!/bin/sh
+#
+#  Format all partitions on disk $i -- created by getdiskinfo
+#
+echo ""
+echo "This script will format all partitions on disk $i."
+echo ""
+echo "IT WILL DESTROY ALL DATA ON DISK $i !!!!"
+echo ""
+echo -n "Are you sure you want to continue? (yes/no): "
+read a
+if [ x\$a != xyes ] ; then
+   exit 1
+fi 
+echo "Do you want to do a disk check for bad blocks?"
+echo -n "It is recommended, but takes time. (yes/no): "
+read a
+if [ x\$a = xyes ] ; then
+   check="-c"
+else
+   check=
+fi
+END_OF_DATA
+
+   # Find swap partitions in output from sfdisk
+   k=`grep "^$i.*82  Linux swap" sfdisk.$j.bsi | cut -d ' ' -f 1`
+   for disk in $k; do
+      echo "echo \"Formatting $disk -- swap partition\"" >>$cwd/format.$j
+      echo "mkswap $check $disk" >>$cwd/format.$j
+      echo "echo \"\"" >>$cwd/format.$j
+   done
+   # Find ext2 partitions in mount output
+   k=`grep "^$i" mount.ext2.bsi | cut -d ' ' -f 1`
+   for disk in $k; do
+      echo "echo \"Formating $disk -- ext2 partition\"" >>$cwd/format.$j
+      label=`grep "^$disk" mount.ext2.bsi | cut -d ' ' -f 7 | cut -c2- | cut -d ] -f 1`
+      if [ x$label = x ] ; then
+         echo "mke2fs -v \$check $disk" >>$cwd/format.$j
+      else
+         echo "mke2fs -v \$check -L $label $disk" >>$cwd/format.$j
+      fi
+      echo "echo \"\"" >>$cwd/format.$j
+   done
+   # Find ext3 partitions in mount output
+   k=`grep "^$i" mount.ext3.bsi | cut -d ' ' -f 1`
+   for disk in $k; do
+      echo "echo \"Formating $disk -- ext3 partition\"" >>$cwd/format.$j
+      label=`grep "^$disk" mount.ext3.bsi | cut -d ' ' -f 7 | cut -c2- | cut -d ] -f 1`
+      if [ x$label = x ] ; then
+         echo "mke2fs -v -j \$check $disk" >>$cwd/format.$j
+      else
+         echo "mke2fs -v -j \$check -L $label $disk" >>$cwd/format.$j
+      fi
+      echo "echo \"\"" >>$cwd/format.$j
+   done
+   chmod 755 $cwd/format.$j
+done
+
+cd $cwd
+
+#
+# Create network start script
+#
+host=`hostname`
+ip=`host $host | cut -d ' ' -f 4`
+cat >start_network <<END_OF_DATA
+#!/bin/sh
+#
+#  Start network -- created by getdiskinfo
+#
+ip=$ip
+dev=eth0
+ifconfig lo up
+ifconfig \$dev up \$ip
+route add default gw \$ip dev \$dev
+END_OF_DATA
+
+chmod 755 start_network
+
+cat >mount_drives <<END_OF_DATA
+#!/bin/sh
+#
+#  Mount disk drives  -- created by getdiskinfo
+#
+END_OF_DATA
+sed -n 's/\(^.*\)\ on\ \(.*\)\ type.*$/mkdir -p \/mnt\/disk\2/p' $di/mount.ext2.bsi >>mount_drives
+sed -n 's/\(^.*\)\ on\ \(.*\)\ type.*$/mkdir -p \/mnt\/disk\2/p' $di/mount.ext3.bsi >>mount_drives
+echo "#" >>mount_drives
+sed -n 's/\(^.*\)\ on\ \(.*\)\ type.*$/mount \1 \/mnt\/disk\2/p' $di/mount.ext2.bsi >/tmp/1$$     
+sed -n 's/\(^.*\)\ on\ \(.*\)\ type.*$/mount \1 \/mnt\/disk\2/p' $di/mount.ext3.bsi >>/tmp/1$$
+# sort so that root is mounted first
+sort -k 3 </tmp/1$$ >>mount_drives
+rm -f /tmp/1$$
+
+chmod 755 mount_drives
+
+# copy sfdisk so we will have it
+cp -f /sbin/sfdisk .
diff --git a/rescue/freebsd/make_rescue_disk b/rescue/freebsd/make_rescue_disk
new file mode 100755 (executable)
index 0000000..db52f73
--- /dev/null
@@ -0,0 +1,99 @@
+#!/bin/sh
+#
+# Script to make a Bacula "rescue" disk
+#
+device=/mnt/floppy
+dev=/dev/fd0
+
+# Print Usage message
+usage () {
+   cat <<END_OF_DATA
+Usage: make_rescue_disk
+  -h, --help             print this message
+  --make-static-bacula   make static File daemon and add to diskette
+  --copy-static-bacula   copy static File daemon to diskette
+  --copy-etc-files       copy files in etc list to diskette
+END_OF_DATA
+}
+
+# defaults
+make_bacula=no
+copy_bacula=no
+copy_etc=no
+
+#
+# Process command line options
+#
+for option in "$@" ; do
+   case "$option" in
+   -h | --help)
+      usage
+      exit 0
+      ;;
+   --make-static-bacula)
+      make_bacula=yes
+      copy_bacula=yes
+      ;;
+   --copy-static-bacula)
+      copy_bacula=yes
+      ;;
+   --copy-etc-files)
+      copy_etc=yes
+      ;;
+   *)
+      echo "Unknown option specified: $option"
+      usage
+      exit 1
+      ;;
+   esac
+done
+
+echo ""
+echo "Place a blank diskette in your floppy drive."
+echo "It will be formatted and all data will be lost."
+echo ""
+echo -n "Press return when ready: "
+read a
+umount $device 2>&1 >/dev/null
+if [ $? = 0 ] ; then
+   mounted=1
+else
+   mounted=0
+fi
+mke2fs $dev
+mount $dev $device 2>&1 >/dev/null
+
+if [ x$make_bacula = "xyes" ] ; then
+   ./make_static_bacula
+fi
+
+if [ x$copy_bacula = "xyes" -a ! -e bacula-fd ] ; then
+   echo " "
+   echo "bacula-fd not found. If you want Bacula on this"                 
+   echo "rescue disk please run \"make_static_bacula\" first."
+   echo "Continuing anyway ..."
+   echo " "
+   exit 1
+   have_bacula=no
+else
+  echo "Stripping and compressing Bacula"
+  strip bacula-fd
+  gzip bacula-fd
+  have_bacula=yes
+fi
+
+echo "Copying files to $device" 
+cp -a . $device
+
+if [ x$copy_etc = "xyes" ] ; then
+   echo "Tarring /etc files to $device"
+   tar --create --gzip --file $device/etc.gz --files-from backup.etc.list
+fi
+
+if [ x$have_bacula = "xyes" ] ; then
+   rm -f bacula-fd.gz bacula-fd.conf
+fi
+sync
+if [ $mounted = 0 ] ; then
+   umount $device
+fi
diff --git a/rescue/freebsd/restore_etc b/rescue/freebsd/restore_etc
new file mode 100755 (executable)
index 0000000..0f43410
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+#
+# Note, this creates the directory etc, so if you want
+# the files to go into the real /etc, you must be one
+# level up when executing it. Otherwise you end up with 
+# a /etc/etc directory.
+#
+device=/mnt/floppy
+tar -v -z -f $device/etc.gz
diff --git a/rescue/freebsd/run_grub b/rescue/freebsd/run_grub
new file mode 100755 (executable)
index 0000000..b76b48b
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/sh
+#
+# Script to run grub to recreate the MBR
+#
+# Find boot partition if any
+bootp=`grep "^/dev/.*\ on\ /boot" diskinfo/mount.bsi | cut -d ' ' -f 1`
+# find boot device
+if [ x$bootp != x ] ; then
+   bootdev=`echo $bootp | cut -c1-8`
+else
+   bootdev=`grep "^/dev/.*\ on\ /" diskinfo/mount.bsi | cut -c1-8`
+fi
+chroot /mnt/disk /sbin/grub-install $bootdev
+sync
diff --git a/rescue/freebsd/run_lilo b/rescue/freebsd/run_lilo
new file mode 100755 (executable)
index 0000000..1f3f040
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/sh
+#
+# Script to run lilo and re-create the MBR 
+#
+chroot /mnt/disk /sbin/lilo -v -C /etc/lilo.conf
+sync
diff --git a/rescue/freebsd/sfdisk.bz2 b/rescue/freebsd/sfdisk.bz2
new file mode 100644 (file)
index 0000000..3e269c3
Binary files /dev/null and b/rescue/freebsd/sfdisk.bz2 differ
diff --git a/rescue/linux/.cvsignore b/rescue/linux/.cvsignore
new file mode 100644 (file)
index 0000000..ee40e78
--- /dev/null
@@ -0,0 +1,10 @@
+Makefile
+diskinfo
+format.hda
+mount_drives
+partition.hda
+sfdisk
+start_network
+1
+bacula-fd
+bacula-fd.conf
diff --git a/rescue/linux/Makefile.in b/rescue/linux/Makefile.in
new file mode 100644 (file)
index 0000000..cca1530
--- /dev/null
@@ -0,0 +1,12 @@
+
+all:
+
+install:
+
+uninstall:
+
+clean:
+
+distclean:
+
+depend:
diff --git a/rescue/linux/cdrom/.cvsignore b/rescue/linux/cdrom/.cvsignore
new file mode 100644 (file)
index 0000000..49303d6
--- /dev/null
@@ -0,0 +1,3 @@
+bootcd.iso
+Makefile
+cdtree
diff --git a/rescue/linux/cdrom/Makefile.in b/rescue/linux/cdrom/Makefile.in
new file mode 100644 (file)
index 0000000..977fce9
--- /dev/null
@@ -0,0 +1,83 @@
+
+.PATH:         .
+
+
+first_rule: all
+dummy:
+
+#-------------------------------------------------------------------------
+
+# Make an iso boot image
+iso:
+       rm -f bootcd.iso
+       mkisofs -A "Bacula Rescue Disk" -V "Bacula Rescue Disk" \
+         -J -R -T -o bootcd.iso \
+         -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
+         -no-emul-boot -boot-load-size 4 -boot-info-table cdtree
+
+# try booting it with qemu emulator
+boot:
+       qemu -cdrom bootcd.iso
+
+initrd:
+       ./makeinitrd
+
+kernel:
+       ./makekernel
+
+binaries:
+       ./makebinaries
+
+static-bacula: dummy
+       @(cd bacula; make copy-static-fd)
+
+bacula: dummy
+       @(cd bacula; make)
+
+all:   kernel binaries bacula initrd iso
+
+copy-static-fd: kernel binaries static-bacula initrd iso
+
+
+# This needs to be customized for your burner.
+burn:
+       cdrecord dev=@CDSTL@ gracetime=2 fs=4096k driveropts=burnfree -v \
+        -useinfo speed=48 -dao -eject -pad -data "bootcd.iso"
+
+# Blank the CDROM assuming it is +rw
+blank:
+       cdrecord dev=@CDSTL@ gracetime=2 -v blank=fast -useinfo speed=48
+
+scan:
+       cdrecord -scanbus
+
+distclean:
+clean:
+#
+# Clean out files that are rebuilt
+#
+       @rm -f bootcd.iso   
+       @rm -f 1 2 3 4
+       @rm -rf mnt
+       @rm -rf roottree/bin roottree/proc roottree/boot
+       @rm -rf roottree/lib roottree/sbin roottree/dev
+       @rm -rf roottree/dev roottree/sys roottree/sysroot
+       @rm -rf roottree/sys              
+       @rm -rf roottree/initrd roottree/cdrom roottree/mnt
+       @rm -rf roottree/tmp roottree/var          
+       @rm -f roottree/etc/services roottree/etc/exports
+       @rm -f roottree/etc/gshadow roottree/etc/shadow 
+       @rm -f roottree/etc/passwd  roottree/etc/group
+       @rm -f roottree/etc/hosts roottree/etc/bashrc
+       @rm -f roottree/etc/filesystems roottree/etc/fstab 
+       @rm -f roottree/etc/protocols roottree/etc/localtime
+       @rm -f roottree/etc/ld.so.cache
+       @rm -f roottree/etc/modules.conf roottree/etc/syslog.conf
+       @rm -rf roottree/etc/pam.d roottree/etc/ssh
+       @rm -rf roottree/etc/security roottree/etc/init.d
+       @rm -rf roottree/bacula-*
+       @rm -f cdtree/boot/isolinux/initrd.img
+       @rm -f cdtree/boot/isolinux/isolinux.cfg
+       @rm -f cdtree/boot/isolinux/vmlinuz
+       @rm -f cdtree/boot/isolinux/map
+       @(cd bacula; make distclean)
diff --git a/rescue/linux/cdrom/README b/rescue/linux/cdrom/README
new file mode 100644 (file)
index 0000000..473765c
--- /dev/null
@@ -0,0 +1,193 @@
+
+This is the Bacula Rescue CD source directory.  The some of the
+scripts in this directory were dervied from Martin L. Purschke's
+"Roll your own Linux Rescue or Setup CD".  See:
+http://www.phenix.bnl.gov/~purschke/RescueCD/ for more details.
+This information was invaluable in creating this rescue disk.
+However, not much of the original code (if any) remains.
+
+The idea is to build a boot CD that contains a copy of your
+current system that can be booted in an emergency to either
+repair your filesystem, or to load Bacula to restore your
+filesystem.  Even though this boot CD is built from your system,
+it can be booted on almost any system.
+
+Requirements:
+- A Linux system (known to work with RedHat Enterprise 3.0)
+- It will boot and run on any hardware that isolinux can boot
+  from.
+
+To build an ISO image for burning a CD, you do the following:
+
+  cd <bacula-source>
+  ./configure (your-options)
+  make
+  cd <bacula-source>/rescue/linux/cdrom
+  su
+  make all
+
+to burn it, do:
+
+  make burn
+
+to cleanup, do:
+
+  make clean
+
+When running these scripts, you should have few or no warnings.
+
+You will probably also have a number of "Could not finds" under
+updating binaries.                                           
+
+As long as the script runs to completion, you can probably ignore
+any such warnings.   
+
+The Makefile will copy your kernel and some files it needs, then copy
+your binary files as well as the shared libraries they need to run, and
+finally, it will copy certain configuration components from your /etc
+directory including your passwd file. And finally, it will collect the
+information necessary to restore all your harddisks. You can find that
+information in /bacula after the disk has booted.  /bacula/bin will
+contain a statically linked version of the current beta Bacula fd and
+a default bacula-fd.conf file.
+
+The ISO image will be left in:
+
+  <rescue>/bootcd.iso
+
+When you boot the CD, always choose the default by hitting return.
+When the system finishes booting you will be presented with a login 
+prompt at which point, you should login as root using the root password
+from your system. Boot options other than the default have not be tested  
+(actually, I am going to remove them), and logging into any user other
+than root is not likely to work.    
+
+What do you have when you boot?
+- Your kernel will be booted in a simplifed environment.
+- Everything is running in a RAM disk file.
+- Access to the CDROM in /cdrom and anything you put in cdtree will
+  be in the /cdrom directory.
+- You will start in /root, with nothing unless you put it in
+  roottree/root before making the ISO.
+- You will have a good number of standard Unix programs available.
+  Do an "ls -l /sbin" to see the list. To add more add them to
+  rootsbin.list
+- A /lib containing all the shared libraries used by the programs in
+  /sbin. If you add more programs other than to rootsbin.list, you
+  will need to manually add any required shared libraries.
+- A /lib/modules/kernel-name/ with all your kernel modules.
+- An /etc directory containing a stripped down and modified version
+  of your system files. Everything is *vastly* simplified, and probably
+  not in the usual places, but many things such as your passwd file
+  will be there.
+- A /bacula-hostname directory containing the basic rescue disk contents
+  mentioned in the manual concerning the floppy rescue.  Note,
+  hostname is the name of the host on which you built the CDROM
+  (this allows having multiple rescues on a single CDROM).
+- A /bacula-hostname/bin directory containing a statically linked Bacula
+  from the current development stream, and a bacula-fd.conf file.
+  With this and the contents of the /bacula-hostname directory, you have
+  all the scripts necessary to reconstruct your hard disks, and to
+  launch a Bacula File daemon for restoring the system.
+
+Adding your own files:
+- Anything you put in the directory roottree will be 
+  put into the initial ram disk, and loaded into memory.
+  This is the normal way to add files. However, the size of
+  the ramdisk file is limited to your machine's total 
+  memory size. Currently, with the contents of a single
+  machine (you can actually put multiple machines on a 
+  single CD), the size is about 50MB. Most machines today
+  should handle this.
+- Anything you put in the directory cdtree will go on the
+  CDROM, but will not be loaded in memory. This means that
+  you must be able to mount the CDROM to read it -- normally
+  the CDROM should be automatically mounted when the system
+  boots, but the detection is not yet too good, so you may
+  need to manually mount it. On the other hand, anything you
+  add to cdtree can be read without booting it by simply
+  mounting the CDROM -- it also does not use precious 
+  RAM.
+
+
+Other make targets:
+- make kernel    --- rebuild the kernel files
+- make binaries  --- rebuild the binary files
+- make bacula    --- rebuild a static Bacula File daemon
+                     and make a snapshot of your hard disk
+                     layout. 
+- make initrd    --- make a new ram disk image.
+- make iso       --- make a new ISO image.
+- make scan      --- use cdrecord to scan your scsi drivers for
+                     a cd burner.
+- make blank     --- blank a CD-RW disk (you may need to adjust
+                     the dev= specification using the "make scan"
+                     output.
+- make burn      --- burn the ISO (you may need to adjust the 
+                     dev= specification using the "make scan" output).
+
+
+Work to be done:
+- Test with SCSI boot.
+- Look at doing some hardware detection in the second half of
+  the boot process.
+
+The boot process works as follows:
+- isolinux puts up the boot screen. According to what options you
+  select, it will boot.
+- The whole roottree is in the initrd.img and will be loaded in
+  memory. It may take more time than you are used to to load.
+- The script "linuxrc" in /roottree is run. This script is *very*
+  simple and doesn't do much other than mounting /proc and
+  remounting the root (/) read/write.
+
+- When booting is complete, the init process is started and it calls
+  the script /etc/sysinit (in roottree) as determined by the setting
+  in /etc/inittab (i.e. the si entry).
+
+- sysinit mounts the root filesystem as read write, sets up a few system
+  files, turns on logging, attempts to the cdrom on /cdrom. This is very
+  likely to fail. It is nothing to worry about, but means that unless
+  you manually mount the cdrom, you will not be able to access it.
+  To run the standard Bacula restore, there is no need to access the
+  cdrom after the boot. Then sysinit calls the
+  /etc/load_eth0 script, and finally, sysinit sets up the loop back interface.
+
+- load_eth0 attempts to find and load the ethernet kernel module.
+  It does not, however, start the network.
+
+- Then init follows the instructions in inittab for the run level
+  chosen (default 2), which is to call /etc/rc.d/rc 2
+
+- rc tells init to switch to single user mode 
+
+- If the run level is greater than 2, rc calls /etc/start_network.sh,
+  which attempts to setup the network with dhcp. (some work needed here) 
+
+On a standard Linux system, the boot is almost the same. The root filesystem 
+and all the other files, including /linuxrc, that go in the initial ram image
+(initrd) are made by the script /sbin/mkinitrd. Note, this is not used here,
+we do the work ourselves in makeinitrd.
+
+Reading an ISO image:
+
+ mkdir mnt
+ su
+ mount -o loop xxx.iso mnt
+ ls -l mnt
+ ...
+ umount mnt
+ rm -rf mnt
+
+Unpacking in initrd.img:
+ mkdir mnt
+ su
+ mount -o loop xxx.iso mnt
+ cp mnt/isolinux/initrd.img initrd.gz
+ unmount mnt
+ gunzip initrd.gz
+ mount -o loop initrd mnt
+
+mkbootdisk --device bootcd.iso --iso 2.6.10-1.770_FC3
+
+http://www.xs4all.nl/~ekonijn/yaird/
diff --git a/rescue/linux/cdrom/dev.tar.gz b/rescue/linux/cdrom/dev.tar.gz
new file mode 100644 (file)
index 0000000..6c5c2b2
Binary files /dev/null and b/rescue/linux/cdrom/dev.tar.gz differ
diff --git a/rescue/linux/cdrom/makebinaries b/rescue/linux/cdrom/makebinaries
new file mode 100755 (executable)
index 0000000..ea638c6
--- /dev/null
@@ -0,0 +1,131 @@
+#!/bin/sh
+
+# this script finds all binaries and updates them with the ones 
+# from your system, in order to maintain them more easily.
+# Be careful. If you have specially made binaries (perhaps lean ones),
+# they will be overwritten.
+
+TOPDIR=`pwd`
+R=roottree
+PATH="/sbin:/bin:/usr/sbin:/usr/bin:$PATH"
+
+
+
+rm -rf $R/sbin
+mkdir -p $R/etc $R/initrd $R/lib $R/mnt $R/mnt/cdrom
+mkdir -p $R/proc $R/root $R/sbin $R/tmp $R/var 
+mkdir -p $R/dev $R/sys $R/initrd $R/sysroot
+mkdir -p $R/etc/terminfo $R/etc/terminfo/l
+mkdir -p $R/var/lib $R/var/log $R/var/run $R/var/state
+mkdir -p $R/var/lib/nfs 
+mkdir -p $R/var/log/news
+touch $R/var/log/news/news.crit $R/var/log/news/news.err $R/var/log/news.notice
+
+cd $R
+ln -sf sbin bin
+cd $TOPDIR
+
+echo "Building root /sbin. Some Could not find messages are normal ..."
+for file in `cat rootsbin.list` ; do
+    command=`basename $file`
+    fullfile=`which $command 2> /dev/null`
+    if [ x$fullfile != x ] ; then
+#       echo "updating $command in roottree with $fullfile"
+        cp -fpd $fullfile $file
+        if [ $? != 0 ] ; then
+           echo "Update failed."
+           exit 1
+        fi
+        strip $file 2>/dev/null
+    else
+        echo "==== Could not find $command on your system ===="
+        rm -f $file
+    fi
+done
+# Special cases
+cd roottree/sbin
+ln -sf halt reboot
+cd $TOPDIR
+
+# Copy all needed shared libraries
+echo "Building root shared libaries ..."
+rm -f `find roottree/lib/ -maxdepth 1 -type f 2>/dev/null`
+#
+# Statically linked binaries create an error
+# message from ldd, so we ignore those
+#
+for lib in `find roottree/sbin/ -type f -exec ldd {} \; | awk '{print $3}' | sort | uniq` ; do
+  if [ -e $lib ] ; then
+     cp -fp $lib roottree/lib/
+     if [ $? != 0 ] ; then
+        echo "Update failed."
+        exit 1
+     fi
+  fi
+done
+strip `find roottree/lib/ -maxdepth 1 -type f` 2>/dev/null
+
+
+cp -p /etc/services roottree/etc/
+if [ $? != 0 ] ; then
+   echo "Update failed."
+   exit 1
+fi
+
+#
+# Get a bunch of stuff from /etc
+#
+echo "Building /etc ..."
+for file in `cat rootetc.list` ; do
+   if [ -e $file ] ; then
+      cp -fp $file roottree/etc/
+   else
+      echo "==== Could not find $file in /etc ===="
+   fi
+done
+if [ -e /etc/modules.conf ] ; then
+   cp -fp /etc/modules.conf roottree/etc/
+fi
+if [ -e /etc/modprobe.conf ] ; then
+   cp -fp /etc/modprobe.conf roottree/etc/
+fi
+rm -rf roottree/etc/pam.d
+if [ -e /etc/pam.d ] ; then
+   cp -a /etc/pam.d roottree/etc/
+   if [ -e /etc/pam.conf ] ; then
+      cp -fp /etc/pam.conf roottree/etc/
+   fi
+fi
+
+if [ -e /etc/init.d ] ; then
+   rm -rf roottree/etc/init.d
+   cp -aL /etc/init.d roottree/etc/
+fi
+
+if [ -e /etc/udev ] ; then
+   rm -rf roottree/etc/udev
+   cp -aL /etc/udev roottree/etc/
+fi
+
+
+if [ -e /etc/ssh ] ; then
+   cp -a /etc/ssh roottree/etc/
+   echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+   echo "!!!!                                             !!!!"
+   echo "!!!! Warning your /etc/ssh directory was copied. !!!!"
+   echo "!!!! Keep this directory and the CDROM secure.   !!!!"
+   echo "!!!!                                             !!!!"
+   echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
+fi
+if [ -e /etc/security ] ; then
+  cp -a /etc/security roottree/etc/
+fi
+
+#
+# Pull a few files needed by PAM
+#
+if [ -e /lib/libnss_files.so.1 ] ; then
+  cp -fp /lib/libnss_files.so.1 roottree/lib/
+fi
+cp -fp /lib/libnss_files.so.2 roottree/lib/
+cp -a /lib/security roottree/lib/
diff --git a/rescue/linux/cdrom/makeinitrd b/rescue/linux/cdrom/makeinitrd
new file mode 100755 (executable)
index 0000000..e7ca4c5
--- /dev/null
@@ -0,0 +1,108 @@
+#!/bin/sh
+
+TOPDIR=`pwd`
+
+# mkdir -p /mnt/loop1 /mnt/loop2
+
+# we need to set aside a few loop devices. I chose (in reverse order of their appearance)
+# -- loop1 for the boot image
+# -- loop2 for the RAM disk image
+# since the loop1 choice is reflected in the lilo.loopfix file, 
+# you should not change that (or you need to change the file).
+# I had used loop0 first, but I found that this is used by the Samba daemon.
+# Also, I assume that the mount points are /mnt/loop{1,2}.
+# In principle we could do with one, but it comes in handy to be able to
+# leave one mounted, so I took two different ones. 
+
+# Assume that everything to be loaded into memory with the
+# RAM disk image (initrd) is is in the roottree directory. 
+
+echo "Creating the Initial RAM disk image.... "
+
+# first find out how much space we need. 
+ISIZE=`du -s -k  roottree/ | awk '{print $1}'`
+
+# add 2 Meg for extra   
+ISIZE=`expr $ISIZE + 2048`
+echo "Initial RAM disk contents will be $ISIZE KB"
+
+# delete the existing RAM disk image, if there is one
+rm -f root
+
+# dd if=/dev/zero of=$TOPDIR/root bs=1k count=$ISIZE
+
+# umount /mnt/loop2  2>/dev/null >/dev/null
+# losetup -d /dev/loop2 2>/dev/null >/dev/null
+
+# # associate it with /dev/loop2
+# losetup /dev/loop2 $TOPDIR/root
+
+# # make an ext2 filesystem on it. Set reserve to 0
+# mke2fs -q -m 0 /dev/loop2 $ISIZE
+# if [ $? != 0 ] ; then
+#   echo "Build failed."
+#   exit 1
+# fi
+
+# # we mount it...
+# mount /dev/loop2 /mnt/loop2 
+
+# # ... and delete the lost+found directory 
+# rm -rf /mnt/loop2/lost+found 
+
+# # then we copy the contents of our roottree to this filesystem
+# cp -dpR roottree/* /mnt/loop2/
+# if [ $? != 0 ] ; then
+#   echo "RAM disk build failed."
+#   exit 1
+# fi
+
+# # and unmount and divorce /dev/loop2
+# umount /mnt/loop2
+# losetup -d /dev/loop2 
+
+(cd roottree; find . | cpio --quiet -c -o) >root
+
+echo "Building initial RAM disk done"
+
+# Now we have the image of the RAM disk in $TOPDIR/loopfiles/root. We
+# compress this one and write the compressed image to the boot tree:
+
+echo "Compressing the RAM disk image.... "
+
+# delete any existing one
+rm -f cdtree/boot/isolinux/initrd.img
+
+# and gzip our RAM disk image and put it in the right place.
+# gzip -9 -c root >cdtree/boot/isolinux/initrd.img
+gzip -9 < root >cdtree/boot/isolinux/initrd.img
+if [ $? != 0 ] ; then
+  echo "Build failed"
+  exit 1
+fi
+
+rdsize=`expr $ISIZE \* 1024`
+echo "Ramdisk size is $rdsize"
+
+echo "Making isolinux.cfg"
+cat >cdtree/boot/isolinux/isolinux.cfg <<END_OF_DATA
+default linux
+prompt 1
+display boot.msg
+timeout 300
+F1 boot.msg
+F2 options.msg
+F3 general.msg
+F4 kernel.msg
+label linux
+  kernel vmlinuz
+  append ramdisk_size=$rdsize initrd=initrd.img
+label memtest86
+  kernel memtest
+  append -
+END_OF_DATA
+
+# we are done with the RAM disk image, delete it
+rm -f root
+
+echo "Initial RAM disk initrd.img is built."
diff --git a/rescue/linux/cdrom/makekernel b/rescue/linux/cdrom/makekernel
new file mode 100755 (executable)
index 0000000..f6a5860
--- /dev/null
@@ -0,0 +1,40 @@
+#! /bin/sh
+
+# This script updates the kernel and modules from your
+#   current system. 
+#
+
+TOPDIR=`pwd`
+KERNEL=`uname -r` 
+KERNEL=2.6.10-1.770_FC3
+
+rm -rf roottree/dev
+tar xfz dev.tar.gz -C roottree
+if [ $? != 0 ] ; then
+   echo "Update failed."
+   exit 1
+fi
+
+#
+# Update modules in root RAM disk
+#  Keep kernel directory structure
+#
+echo "Updating modules in root RAM disk"
+rm -rf roottree/lib/modules
+mkdir -p roottree/lib/modules
+cp -af /lib/modules/$KERNEL/ roottree/lib/modules/
+
+kernel="/boot/vmlinuz-$KERNEL"
+echo "Coping $kernel to $TOPDIR/cdtree/boot/isolinux/vmlinuz"
+cp -f $kernel $TOPDIR/cdtree/boot/isolinux/vmlinuz
+if [ $? != 0 ] ; then
+   echo "Could not find kernel. Update failed."
+   exit 1
+fi
+if [ -e /boot/map ] ; then
+   cp -f /boot/map $TOPDIR/cdtree/boot/isolinux/map
+   if [ $? != 0 ] ; then
+      echo "Update failed."
+      exit 1
+   fi
+fi
diff --git a/rescue/linux/cdrom/mkbootdisk b/rescue/linux/cdrom/mkbootdisk
new file mode 100755 (executable)
index 0000000..243a77e
--- /dev/null
@@ -0,0 +1,224 @@
+#!/bin/bash
+
+# mkbootdisk
+#
+# Written by Erik Troan <ewt@redhat.com>
+
+pause=yes
+unset kernel
+device=bootcd.iso
+unset verbose
+unset kernelargs
+unset mountopts
+unset isoimage
+unset realdev
+size=1440
+failed=0
+isoimage=1
+verbose=1
+
+MOUNTDIR=`mktemp -d /tmp/mkbootdisk.XXXXXX`
+PATH=/sbin:$PATH
+export PATH
+
+VERSION=1.5.2
+
+usage () {
+    cat >&2 <<EOF
+usage: `basename $0` [--version] [--noprompt] [--device <devicefile>] 
+       [--verbose -v] [--iso] [--kernelargs <args>] [--size <size>]  <kernel>
+       (ex: `basename $0` --device /dev/fd1 2.0.31)
+EOF
+    exit $1
+}
+
+while [ $# -gt 0 ]; do
+    case $1 in
+        --device)
+            shift
+            device=$1
+            ;;
+        --kernelargs)
+            shift
+            kernelargs=$1
+            ;;
+        --help)
+            usage 0
+            ;;
+        --iso)
+            isoimage=1
+            ;;
+        --size)
+            shift
+            size=$1
+            ;;
+        --noprompt)
+            unset pause
+            ;;
+        -v)
+            verbose=true
+            ;;
+        --verbose)
+            verbose=true
+            ;;
+        --version)
+            echo "mkbootdisk: version $VERSION"
+            exit 0
+            ;;
+        *)
+            if [ -z "$kernel" ]; then
+                kernel=$1
+            else
+                usage
+            fi
+            ;;
+    esac
+
+    shift
+done
+
+[ -z "$kernel" ] && usage 1
+
+[ -d /lib/modules/$kernel ] || {
+    echo "/lib/modules/$kernel is not a directory." >&2
+    exit 1
+}
+
+[ -f /boot/vmlinuz-$kernel ] || {
+    echo "/boot/vmlinuz-$kernel does not exist." >&2
+    exit 1
+}
+
+
+rootdev=`awk '$1 ~ /^[^#]/ && $2 ~ /^\/$/ { print $1 ; exit }' /etc/fstab`
+
+if [ $(echo $rootdev | cut -c1-6) = "LABEL=" ]; then
+    rootlabel=$(echo $rootdev | cut -c7-)
+
+    # whee, now we have to look through every partition looking for
+    # the thing called $rootlabel, which could be raid. Ick.
+
+    list=$(tail +3 /proc/partitions | awk '{ print $4 '} | grep '^md')
+    list="$list $(tail +3 /proc/partitions | 
+                        awk '{ print $4 '} | grep -v '^md')"
+    rootdev=""
+    for dev in $list; do
+        if tune2fs -l /dev/$dev >/dev/null 2>/dev/null; then
+            label=$(tune2fs -l /dev/$dev 2>/dev/null | 
+                grep "Filesystem volume name" | awk '{print $4}')
+            if [ "$label" = $rootlabel ]; then
+                rootdev=/dev/$dev
+                break
+            fi
+        fi
+    done
+fi
+
+if [ -z "$kernelargs" -a -x /sbin/grubby -a -f /boot/grub/grub.conf ]; then
+    # sed gross... this grep's for the args= line and removes the args=" and "$
+    defkernel=$(grubby --default-kernel)
+    if [ -n "$defkernel" ]; then
+        kernelargs=$(grubby --info "$defkernel" |
+                     sed -n '/^args=/{s/^args="//;s/"$//;p;}')
+    fi
+fi
+
+[ -z "$rootdev" ] && {
+    echo 'Cannot find root partition in /etc/fstab.' >&2
+    exit 1
+}
+
+rm -rf $MOUNTDIR
+mkdir $MOUNTDIR || {
+    echo "Failed to create $MOUNTDIR" >&2
+    exit 1
+}
+[ -d $MOUNTDIR ] || {
+    echo "$MOUNTDIR is not a directory!" >&2
+    exit 1
+}
+
+cfgfile=$MOUNTDIR/isolinux/isolinux.cfg
+bootmsg=$MOUNTDIR/isolinux/boot.msg
+
+# create an iso image; the directory is all we need
+[ -n "$verbose" ] && echo -n "Installing isolinux... "
+mkdir $MOUNTDIR/isolinux
+cp /usr/lib/syslinux/isolinux.bin $MOUNTDIR/isolinux
+[ -n "$verbose" ] && echo done
+
+
+BOOTDESTDIR=$MOUNTDIR/isolinux
+
+[ -n "$verbose" ] && echo -n "Copying /boot/vmlinuz-$kernel... "
+cp -p /boot/vmlinuz-$kernel $BOOTDESTDIR/vmlinuz
+[ $? = 0 ] || failed=1
+[ -n "$verbose" ] && echo "done."
+
+[ -n "$verbose" ] && echo -n "Copying /boot/initrd-$kernel.img... "
+if [ -f /boot/initrd-$kernel.img ]; then
+  cp -p /boot/initrd-$kernel.img $BOOTDESTDIR/initrd.img
+fi
+[ $? = 0 ] || failed=1
+[ -n "$verbose" ] && echo "done."
+
+[ -n "$verbose" ] && echo -n "Configuring bootloader... "
+
+[ -f $BOOTDESTDIR/initrd.img ] && INITRDARG="initrd=initrd.img"
+
+if [ $(echo $rootdev | cut -b 6-9) = "loop" ]; then
+    rootdev=$(ls -l $rootdev | sed 's/,//' | awk '{ printf("%02x%02x\n", $5, $6); }')
+fi
+
+cat > $cfgfile <<EOF
+default linux
+prompt 1
+display boot.msg
+timeout 100
+label linux
+        kernel vmlinuz
+        append $INITRDARG $kernelargs root=$rootdev
+EOF
+
+[ $? = 0 ] || failed=1
+
+[ -n "$verbose" ] && echo "append $INITRDARG kernelargs=$kernlargs root=$rootdev"
+
+
+chmod 644 $cfgfile
+
+if [ -f /etc/redhat-release ]; then
+    title="$(sed 's/ release.*$//' < /etc/redhat-release)"
+else
+    title="Red Hat Linux"
+fi
+
+
+cat >> $bootmsg <<EOF
+
+Press <return> (or wait 10 seconds) to boot your $title system from
+$rootdev. You may override the default linux kernel parameters by typing
+"linux <params>", followed by <return> if you like.
+
+EOF
+
+[ $? = 0 ] || failed=1
+
+[ -n "$verbose" ] && echo "done."
+
+mkisofs \
+    -A "Red Hat Linux Boot CD" \
+    -V "Red Hat Linux Boot CD" \
+    -J -R -T -quiet \
+    -o $device \
+    -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot \
+       -boot-load-size 4 -boot-info-table $MOUNTDIR
+rm -rf $MOUNTDIR/*
+rmdir $MOUNTDIR
+
+
+if [ $failed -eq 1 ]; then
+  exit 1
+else
+  exit 0
+fi
diff --git a/rescue/linux/cdrom/mkinitrd b/rescue/linux/cdrom/mkinitrd
new file mode 100755 (executable)
index 0000000..9bbf268
--- /dev/null
@@ -0,0 +1,741 @@
+#!/bin/bash
+
+# mkinitrd
+#
+# Written by Erik Troan <ewt@redhat.com>
+#
+# Contributors:
+#       Elliot Lee <sopwith@cuc.edu>
+#       Miguel de Icaza <miguel@nuclecu.unam.mx>
+#       Christian 'Dr. Disk' Hechelmann <drdisk@ds9.au.s.shuttle.de>
+#       Michael K. Johnson <johnsonm@redhat.com>
+#       Pierre Habraken <Pierre.Habraken@ujf-grenoble.fr>
+#       Jakub Jelinek <jakub@redhat.com>
+#       Carlo Arenas Belon (carenas@chasqui.lared.net.pe>
+#       Keith Owens <kaos@ocs.com.au>
+#       Bernhard Rosenkraenzer <bero@redhat.com>
+#       Matt Wilson <msw@redhat.com>
+#       Trond Eivind Glomsrød <teg@redhat.com>
+#       Jeremy Katz <katzj@redhat.com>
+#       Preston Brown <pbrown@redhat.com>
+#       Bill Nottingham <notting@redhat.com>
+#       Guillaume Cottenceau <gc@mandrakesoft.com>
+
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin:$PATH
+export PATH
+
+VERSION=4.1.18
+
+compress=1
+allowmissing=""
+target="cdtree/boot/isolinux/initrd.img"
+kernel=2.6.10-1.770_FC3
+force=""
+verbose=""
+MODULES=""
+img_vers=""
+builtins=""
+pivot=1
+initramfs="1"
+modulefile=/etc/modules.conf
+rc=0
+
+IMAGESIZE=8000
+PRESCSIMODS="scsi_mod sd_mod unknown"
+fstab="/etc/fstab"
+
+rm -f $target
+if [ -f /etc/udev/udev.conf ]; then
+    USE_UDEV="yes"
+    UDEV_TMPFS="yes"
+    UDEV_KEEP_DEV="yes"
+    . /etc/udev/udev.conf
+    [ -x /sbin/udev.static ] || USE_UDEV=
+fi
+
+usage () {
+    echo "usage: `basename $0` [--version] [-v] [-f] [--preload <module>]" >&2
+    echo "       [--omit-scsi-modules] [--omit-raid-modules] [--omit-lvm-modules]" >&2
+    echo "       [--with=<module>] [--image-version] [--fstab=<fstab>] [--nocompress]" >&2
+    echo "       [--builtin=<module>] [--nopivot] <initrd-image> <kernel-version>" >&2
+    echo "" >&2
+    echo "       (ex: `basename $0` /boot/initrd-2.2.5-15.img 2.2.5-15)" >&2
+    exit 1
+}
+
+moduledep() {
+    if [ ! -f "/lib/modules/$kernel/modules.dep" ]; then
+        echo "No dep file found for kernel $kernel" >&2
+        exit 1
+    fi
+
+    [ -n "$verbose" ] && echo -n "Looking for deps of module $1"
+    deps=$(awk 'BEGIN { searched=ARGV[2]; ARGV[2]=""; rc=1 } \
+                function modname(filename) { match(filename, /\/([^\/]+)\.k?o:?$/, ret); return ret[1] } \
+                function show() { if (orig == searched) { print dep; orig=""; rc=0; exit } } \
+                /^\/lib/ { show(); \
+                           orig=modname($1); dep=""; \
+                           if ($2) { for (i = 2; i <= NF; i++) { dep=sprintf("%s %s", dep, modname($i)); } } } \
+                /^      / { dep=sprintf("%s %s", dep, modname($1));  } \
+                END      { show(); exit(rc) }' /lib/modules/$kernel/modules.dep $1)
+    [ -n "$verbose" ] && echo -e "\t$deps"
+}
+
+findmodule() {
+    skiperrors=""
+
+    if [ $1 == "--skiperrors" ]; then
+        skiperrors=--skiperrors
+        shift
+    fi
+
+    local modName=$1
+
+    if [ "$modName" = "off" -o "$modName" = "null" ]; then
+        return
+    fi
+
+    if [ $(echo $modName | cut -b1) = "-" ]; then
+        skiperrors=--skiperrors
+        modName=$(echo $modName | cut -b2-)
+    fi
+
+    if echo $builtins | egrep -q '(^| )'$modName'( |$)' ; then
+        [ -n "$verbose" ] && echo "module $modName assumed to be built in"
+        set +x
+        return
+    fi
+
+    # special cases
+    if [ "$modName" = "i2o_block" ]; then
+        findmodule i2o_core
+        findmodule -i2o_pci
+        modName="i2o_block"
+    elif [ "$modName" = "ppa" ]; then
+        findmodule parport
+        findmodule parport_pc
+        modName="ppa"
+    elif [ "$modName" = "sbp2" ]; then
+        findmodule ieee1394
+        findmodule ohci1394
+        modName="sbp2"
+    else
+        moduledep $modName
+        for i in $deps; do
+            findmodule $i
+        done
+    fi
+
+    for modExt in o.gz o ko ; do
+        if [ -d /lib/modules/$kernel/updates ]; then
+            fmPath=`(cd /lib/modules/$kernel/updates; echo find . -name $modName.$modExt -type f | /sbin/nash --quiet) | /bin/awk {'print $1; exit;'}`
+        fi
+        
+        if [ -f /lib/modules/$kernel/updates/$fmPath ]; then
+            fmPath=updates/$fmPath
+            break
+        fi
+
+        fmPath=`(cd /lib/modules/$kernel; echo find . -name $modName.$modExt -type f | /sbin/nash --quiet) | /bin/awk {'print $1; exit;'}`
+        if [ -f /lib/modules/$kernel/$fmPath ]; then
+            break
+        fi
+    done
+
+    if [ ! -f /lib/modules/$kernel/$fmPath ]; then
+        if [ -n "$skiperrors" ]; then
+            return
+        fi
+
+        # ignore the absence of the scsi modules
+        for n in $PRESCSIMODS; do
+            if [ "$n" = "$modName" ]; then
+                return;
+            fi
+        done;
+
+        if [ -n "$allowmissing" ]; then
+            echo "WARNING: No module $modName found for kernel $kernel, continuing anyway" >&2
+            return
+        fi
+    
+        echo "No module $modName found for kernel $kernel, aborting." >&2
+        exit 1
+    fi
+
+    # only need to add each module once
+    if ! echo $MODULES | grep -q "$fmPath" 2>/dev/null ; then
+        MODULES="$MODULES $fmPath"
+    fi
+}
+
+inst() {
+    if [ "$#" != "2" ];then
+        echo "usage: inst <file> <destination>"
+        return
+    fi 
+    [ -n "$verbose" ] && echo "$1 -> $2"
+    cp $1 $2
+}
+
+while [ $# -gt 0 ]; do
+    case $1 in
+        --fstab*)
+            if echo $1 | grep -q '=' ; then
+                fstab=`echo $1 | sed 's/^--fstab=//'`
+            else
+                fstab=$2
+                shift
+            fi              
+            ;;
+
+        --with-usb)
+            withusb=yes
+            ;;
+
+        --with*)
+            if echo $1 | grep -q '=' ; then
+                modname=`echo $1 | sed 's/^--with=//'`
+            else
+                modname=$2
+                shift
+            fi              
+
+            basicmodules="$basicmodules $modname"
+            ;;
+
+        --builtin*)
+            if echo $1 | grep -q '=' ; then
+                modname=`echo $1 | sed 's/^--builtin=//'`
+            else
+                modname=$2
+                shift
+            fi              
+            builtins="$builtins $modname"
+            ;;
+
+        --version)
+            echo "mkinitrd: version $VERSION"
+            exit 0
+            ;;
+
+        -v)
+            verbose=-v
+            ;;
+
+        --nocompress)
+            compress=""
+            ;;
+
+        --nopivot)
+            pivot=""
+            ;;
+
+        --ifneeded)
+            # legacy
+            ;;
+
+        -f)
+            force=1
+            ;;
+        --preload*)
+            if echo $1 | grep -q '=' ; then
+                modname=`echo $1 | sed 's/^--preload=//'`
+            else
+                modname=$2
+                shift
+            fi              
+            PREMODS="$PREMODS $modname"
+            ;;
+        --omit-scsi-modules)
+            PRESCSIMODS=""
+            noscsi=1;
+            ;;
+        --omit-raid-modules)
+            noraid=1;
+            ;;
+        --omit-lvm-modules)
+            nolvm=1
+            ;;
+        --image-version)
+            img_vers=yes
+            ;;
+        --noudev)
+            USE_UDEV=
+            ;;
+        --allow-missing)
+            allowmissing=yes
+            ;;
+        *)
+            if [ -z "$target" ]; then
+                target=$1
+            elif [ -z "$kernel" ]; then
+                kernel=$1
+            else
+                usage
+            fi
+            ;;
+    esac
+
+    shift
+done
+
+if [ -z "$target" -o -z "$kernel" ]; then
+    usage
+fi
+
+if [ -n "$img_vers" ]; then
+    target="$target-$kernel"
+fi
+
+if [ -z "$force" -a -f $target ]; then
+    echo "$target already exists." >&2
+    exit 1
+fi
+
+if [ ! -d /lib/modules/$kernel ]; then
+    echo "/lib/modules/$kernel is not a directory." >&2
+    exit 1
+fi
+
+if [ $UID != 0 ]; then
+    echo "mkinitrd must be run as root"
+    exit 1
+fi
+
+kernelmajor=`echo $kernel | cut -d . -f 1,2`
+
+if [ "$kernelmajor" == "2.4" ]; then
+    if [ -n "$verbose" ]; then echo "Creating old-style initrd"; fi
+    USE_UDEV=
+else
+    if [ -n "$verbose" ]; then echo "Creating initramfs"; fi
+    modulefile=/etc/modprobe.conf
+    initramfs=1
+    pivot=""
+fi
+
+# if we're not using udev, don't set any of the other bits
+[ -z "$USE_UDEV" ] && UDEV_TMPFS= && UDEV_KEEP_DEV=
+
+# find a temporary directory which doesn't use tmpfs
+TMPDIR=""
+for t in /tmp /var/tmp /root ${PWD}; do
+    if [ ! -d $t ]; then continue; fi
+    if ! echo access -w $t | /sbin/nash --quiet; then continue; fi
+
+    fs=$(df -T $t 2>/dev/null | awk '{line=$1;} END {printf $2;}')
+    if [ "$fs" != "tmpfs" ]; then 
+        TMPDIR=$t
+        break
+    fi
+done
+
+if [ -z "$TMPDIR" ]; then
+    echo "no temporary directory could be found" >&2
+    exit 1
+fi
+
+if [ $TMPDIR = "/root" -o $TMPDIR = "${PWD}" ]; then 
+    echo "WARNING: using $TMPDIR for temporary files" >&2
+fi
+
+for n in $PREMODS; do
+        findmodule $n
+done
+
+needusb=""
+if [ -n "$withusb" ]; then
+    # If / or /boot is on a USB device include the driver. With root by
+    # label we could still get some odd behaviors
+    for fs in / /boot ; do
+        esc=$(echo $fs | sed 's,/,\\/,g')
+        dev=$(mount | awk "/ on ${esc} / { print \$1 }" | sed 's/[0-9]*$//' | cut -d/ -f3)
+        if [ "$(echo $dev | cut -c1-2)" = sd ]; then
+          if [ `which kudzu 2>/dev/null` ]; then
+            host=$(kudzu --probe -b scsi |
+              gawk '/^device: '${dev}'/,/^host:/ { if (/^host/) { print $2; exit; } }')
+            if [ -d /proc/scsi/usb-storage-${host} -o -f /proc/scsi/usb-storage/${host} ]; then
+                needusb=1
+            fi
+          fi
+        fi
+    done
+fi
+
+if [ -n "$needusb" ]; then
+    drivers=$(awk '/^alias[[:space:]]+usb-controller[0-9]* / { print $3}' < $modulefile)
+    if [ -n "$drivers" ]; then
+        for driver in $drivers; do
+            findmodule $driver
+        done
+        findmodule scsi_mod
+        findmodule sd_mod
+        findmodule usb-storage
+    fi
+fi
+
+if [ -z "$noscsi" ]; then
+    if [ ! -f $modulefile ]; then
+        modulefile=/etc/conf.modules
+    fi
+
+    if [ -f $modulefile ]; then
+        scsimodules=`grep "alias[[:space:]]\+scsi_hostadapter" $modulefile | grep -v '^[        ]*#' | LC_ALL=C sort -u | awk '{ print $3 }'`
+
+        if [ -n "$scsimodules" ]; then
+            for n in $PRESCSIMODS; do
+                findmodule $n
+            done
+
+            for n in $scsimodules; do
+    # for now allow scsi modules to come from anywhere.  There are some
+    # RAID controllers with drivers in block/
+                findmodule $n
+            done
+        fi
+    fi
+fi
+
+# If we have ide devices and module ide, do the right thing
+ide=/proc/ide/ide*
+if [ -n "$ide" ]; then
+    findmodule -ide-disk
+fi
+
+# If we use LVM, include lvm-mod
+if [ -z "$nolvm" ]; then
+    if [ -f /proc/lvm/global  ]; then
+        if  grep -q '^VG:' /proc/lvm/global ; then
+            if [ "$kernelmajor" == "2.4" ]; then
+                findmodule -lvm-mod
+            else
+                findmodule -dm-mod
+            fi
+        fi
+    fi
+
+    if [ -x /sbin/dmsetup -a -e /dev/mapper/control ]; then
+        dmout=$(/sbin/dmsetup ls 2>/dev/null)
+        if [ "$dmout" != "No devices found" -a "$dmout" != "" ]; then
+            findmodule -dm-mod
+        fi
+    fi
+fi
+
+# If we have dasd devices, include the necessary modules (S/390)
+if [ -d /proc/dasd ]; then
+    findmodule -dasd_mod
+    findmodule -dasd_eckd_mod
+    findmodule -dasd_fba_mod
+fi
+
+if [ -z "$noraid" -a -f /proc/mdstat ]; then
+    # load appropriate raid devices if necessary -- we'll load whatever
+    # /proc/mdstat suggests
+
+    # note that the awk below contains a space and a tab
+    for level in $(awk '/^md[0-9][0-9]*[        ]*:/ { print $4 }' \
+                    /proc/mdstat | sort -u); do
+        case $level in
+        linear)
+            findmodule linear
+            startraid=1
+            ;;
+        multipath)
+            findmodule multipath
+            startraid=1
+            ;;
+        raid[01456])
+            findmodule $level
+            startraid=1
+            ;;
+        *)
+            echo "raid level $level (in /proc/mdstat) not recognized" >&2
+            ;;
+        esac
+    done
+
+    if [ -n "$startraid" ]; then
+        raiddevices=$(awk '/^md[0-9][0-9]*[        ]*:/ { print $1 }' \
+                            /proc/mdstat | sort)
+    fi
+fi
+
+# check to see if we need to set up a loopback filesystem
+rootdev=$(awk '/^[ \t]*[^#]/ { if ($2 == "/") { print $1; }}' $fstab)
+if echo $rootdev | cut -d/ -f3 | grep -q loop ; then
+    key="^# $(echo $rootdev | cut -d/ -f3 | tr '[a-z]' '[A-Z]'):"
+    if ! grep "$key" $fstab > /dev/null; then
+        echo "The root filesystem is on a $rootdev, but there is no magic entry in $fstab" 1>&2
+        echo "for this device. Consult the mkinitrd man page for more information" 2>&2
+        exit 1
+    fi
+
+    line=$(grep "$key" $fstab)
+    loopDev=$(echo $line | awk '{print $3}')
+    loopFs=$(echo $line | awk '{print $4}')
+    loopFile=$(echo $line | awk '{print $5}')
+
+    basicmodules="$basicmodules -loop"
+    if [ "$loopFs" = "vfat" -o "$loopFs" = "msdos" ]; then
+        basicmodules="$basicmodules -fat"
+    fi
+    basicmodules="$basicmodules -${loopFs}"
+# check if the root fs is on a logical volume
+elif ! echo $rootdev | cut -c1-6 |grep -q "LABEL=" ; then
+    rootdev=$(echo "readlink $rootdev" | /sbin/nash --quiet)
+    major=`ls -l $rootdev | sed -e "s/.* \\([0-9]\+\\), *[0-9]\+.*/\\1/"`
+    [ "$major" != "58" ] || root_lvm=1
+    if echo $rootdev |grep -q /dev/mapper 2>/dev/null ; then root_lvm=1 ; fi
+fi
+
+rootfs=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $3; }}' $fstab)
+rootopts=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $4; }}' $fstab)
+
+# in case the root filesystem is modular
+findmodule -${rootfs}
+
+if [ -n "$root_lvm" ]; then
+    if [ "$kernelmajor" == "2.4" ]; then    
+        findmodule -lvm-mod
+    else
+        findmodule -dm-mod
+        # DM requires all of these to be there in case someone used the
+        # feature.  broken.  (#132001)
+        findmodule -dm-mirror
+        findmodule -dm-zero
+        findmodule -dm-snapshot
+    fi
+fi
+
+for n in $basicmodules; do 
+    findmodule $n
+done
+
+if [ -n "$verbose" ]; then
+    echo "Using modules: $MODULES"
+fi
+
+
+MNTIMAGE=roottree
+IMAGE=root
+RCFILE=$MNTIMAGE/init
+
+if [ -z "$MNTIMAGE" -o -z "$IMAGE" ]; then
+    echo "Error creating temporaries.  Try again" >&2
+    exit 1
+fi
+
+mkdir -p $MNTIMAGE
+mkdir -p $MNTIMAGE/lib
+mkdir -p $MNTIMAGE/bin
+mkdir -p $MNTIMAGE/etc
+mkdir -p $MNTIMAGE/dev
+mkdir -p $MNTIMAGE/loopfs
+mkdir -p $MNTIMAGE/proc
+mkdir -p $MNTIMAGE/sys
+mkdir -p $MNTIMAGE/sysroot
+ln -s bin $MNTIMAGE/sbin
+
+inst /sbin/nash "$MNTIMAGE/bin/nash"
+inst /sbin/insmod.static "$MNTIMAGE/bin/insmod"
+ln -s /sbin/nash $MNTIMAGE/sbin/modprobe
+
+if [ -n "$USE_UDEV" ]; then
+    inst /sbin/udev.static $MNTIMAGE/sbin/udev
+    ln -s udev $MNTIMAGE/sbin/udevstart
+    mkdir -p $MNTIMAGE/etc/udev
+    inst /etc/udev/udev.conf $MNTIMAGE/etc/udev/udev.conf
+    ln -s /sbin/nash $MNTIMAGE/sbin/hotplug
+fi
+
+for MODULE in $MODULES; do
+    if [ -x /usr/bin/strip ]; then
+        /usr/bin/strip -g $verbose /lib/modules/$kernel/$MODULE -o $MNTIMAGE/lib/$(basename $MODULE)
+    else
+        cp $verbose -a /lib/modules/$kernel/$MODULE $MNTIMAGE/lib
+    fi
+done
+
+# mknod'ing the devices instead of copying them works both with and
+# without devfs...
+mknod $MNTIMAGE/dev/console c 5 1
+mknod $MNTIMAGE/dev/null c 1 3
+mknod $MNTIMAGE/dev/ram b 1 1
+mknod $MNTIMAGE/dev/systty c 4 0
+for i in 1 2 3 4; do
+    mknod $MNTIMAGE/dev/tty$i c 4 $i
+done
+
+# FIXME -- this won't work if you're using devfs
+if [ -n "$root_lvm" -a "$kernelmajor" == "2.4" ]; then
+    pvs=$(/sbin/pvscan | grep " PV " | /bin/awk {'print $5;'} |sed 's/"//g')
+    for pv in $pvs; do
+        cp $verbose --parents -a $pv $MNTIMAGE/
+    done
+
+    inst /sbin/vgwrapper "$MNTIMAGE/bin/vgwrapper"
+    ln "$MNTIMAGE/bin/vgwrapper" "$MNTIMAGE/bin/vgscan"
+    ln "$MNTIMAGE/bin/vgwrapper" "$MNTIMAGE/bin/vgchange"
+
+    mknod $MNTIMAGE/dev/lvm b 109 0
+fi
+
+if [ -n "$root_lvm" -a "$kernelmajor" == "2.6" ]; then
+    inst /sbin/lvm.static "$MNTIMAGE/bin/lvm"
+    if [ -f /etc/lvm/lvm.conf ]; then
+        cp $verbose --parents /etc/lvm/lvm.conf $MNTIMAGE/
+    fi
+fi
+
+echo "#!/bin/nash" > $RCFILE
+echo "" >> $RCFILE
+
+echo "mount -t proc /proc /proc" >> $RCFILE
+echo "setquiet" >> $RCFILE
+echo "echo Mounted /proc filesystem" >> $RCFILE
+
+if [ "$kernelmajor" != "2.4" ]; then
+    echo "echo Mounting sysfs" >> $RCFILE
+    echo "mount -t sysfs none /sys" >> $RCFILE
+fi
+
+if [ -n "$USE_UDEV" ]; then
+    if [ -n "$UDEV_TMPFS" ]; then
+        cat >> $RCFILE <<EOF
+echo Creating /dev
+mount -o mode=0755 -t tmpfs none /dev
+mknod /dev/console c 5 1
+mknod /dev/null c 1 3
+mknod /dev/zero c 1 5
+mkdir /dev/pts
+mkdir /dev/shm
+EOF
+    fi
+    cat >> $RCFILE <<EOF
+echo Starting udev
+/sbin/udevstart
+echo -n "/sbin/hotplug" > /proc/sys/kernel/hotplug
+EOF
+fi
+
+for MODULE in $MODULES; do
+    text=""
+    module=`echo $MODULE | sed "s|.*/||" | sed "s/.k\?o$//"`
+    fullmodule=`echo $MODULE | sed "s|.*/||"`
+
+    options=`sed -n -e "s/^options[     ][      ]*$module[      ][      ]*//p" $modulefile 2>/dev/null`
+
+    if [ -n "$verbose" ]; then
+        if [ -n "$options" ]; then
+            text=" with options $options"
+        fi
+        echo "Loading module $module$text"
+    fi
+    echo "echo \"Loading $fullmodule module\"" >> $RCFILE
+    echo "insmod /lib/$fullmodule $options" >> $RCFILE
+
+    # Hack - we need a delay after loading usb-storage to give things
+    #        time to settle down before we start looking a block devices
+    if [ "$module" = "usb-storage" ]; then
+        echo "sleep 5" >> $RCFILE
+    fi
+    if [ "$module" = "zfcp" -a -f /etc/zfcp.conf ]; then
+        echo "sleep 2" >> $RCFILE
+        cat /etc/zfcp.conf | grep -v "^#" | tr "A-Z" "a-z" | while read DEVICE SCSIID WWPN SCSILUN FCPLUN; do
+            echo "echo -n $WWPN > /sys/bus/ccw/drivers/zfcp/${DEVICE/0x/}/port_add" >>$RCFILE
+            echo "echo -n $FCPLUN > /sys/bus/ccw/drivers/zfcp/${DEVICE/0x/}/$WWPN/unit_add" >>$RCFILE
+            echo "echo -n 1 > /sys/bus/ccw/drivers/zfcp/${DEVICE/0x/}/online" >>$RCFILE
+        done
+    fi
+done
+
+# HACK: module loading + device creation isn't necessarily synchronous...
+# this will make sure that we have all of our devices before trying
+# things like RAID or LVM
+if [ -n "$USE_UDEV" ]; then
+  echo "/sbin/udevstart" >> $RCFILE
+fi
+
+if [ -n "$startraid" ]; then
+    for dev in $raiddevices; do
+        cp -a /dev/${dev} $MNTIMAGE/dev
+        echo "raidautorun /dev/${dev}" >> $RCFILE
+    done
+fi
+
+if [ -z "$USE_UDEV" ]; then
+    echo "echo Creating block devices" >> $RCFILE
+    echo "mkdevices /dev" >> $RCFILE
+fi
+
+if [ -n "$loopDev" ]; then
+    mkdir /initrd
+    cp -a $loopDev $MNTIMAGE/dev
+    cp -a $rootdev $MNTIMAGE/dev
+    echo "echo Mounting device containing loopback root filesystem" >> $RCFILE
+    echo "mount -t $loopFs $loopDev /loopfs" >> $RCFILE
+    echo "echo Setting up loopback device $rootdev" >> $RCFILE
+    echo "losetup $rootdev /loopfs$loopFile" >> $RCFILE
+elif [ -n "$root_lvm" ]; then
+  if [ "$kernelmajor" == "2.4" ]; then
+    echo "echo Scanning logical volumes" >> $RCFILE
+    echo "vgscan" >> $RCFILE
+    echo "echo Activating logical volumes" >> $RCFILE
+    echo "vgchange -ay" >> $RCFILE
+  else
+    echo "echo Making device-mapper control node" >> $RCFILE
+    echo "mkdmnod" >> $RCFILE
+    echo "echo Scanning logical volumes" >> $RCFILE
+    echo "lvm vgscan" >> $RCFILE
+    echo "echo Activating logical volumes" >> $RCFILE
+    echo "lvm vgchange -ay" >> $RCFILE
+    echo "echo Making device nodes" >> $RCFILE
+    echo "lvm vgmknodes" >> $RCFILE
+  fi
+fi
+
+echo "echo Creating root device" >> $RCFILE
+echo "mkrootdev /dev/root" >> $RCFILE
+rootdev=/dev/root
+
+if [ "$kernelmajor" != "2.4" ]; then
+    echo "umount /sys" >> $RCFILE
+fi
+
+if [ -n "$initramfs" ]; then
+    echo "echo Mounting root filesystem" >> $RCFILE
+    echo "mount -o $rootopts --ro -t $rootfs $rootdev /sysroot" >> $RCFILE
+
+    [  -n "$UDEV_KEEP_DEV" ] && echo "mount -t tmpfs --bind /dev /sysroot/dev" >> $RCFILE
+
+    echo "echo Switching to new root" >> $RCFILE
+    echo "switchroot /sysroot" >> $RCFILE
+else 
+  if [ -n "$pivot" ]; then
+    echo "echo 0x0100 > /proc/sys/kernel/real-root-dev" >> $RCFILE
+
+    echo "echo Mounting root filesystem" >> $RCFILE
+    echo "mount -o $rootopts --ro -t $rootfs $rootdev /sysroot" >> $RCFILE
+
+    echo "pivot_root /sysroot /sysroot/initrd" >> $RCFILE
+    echo "umount /initrd/proc" >> $RCFILE
+  else
+    echo "umount /proc" >> $RCFILE
+  fi
+fi
+
+[ -n "$UDEV_TMPFS" ] && echo "umount /initrd/dev" >> $RCFILE
+chmod +x $RCFILE
+
+  (cd $MNTIMAGE; find . | cpio --quiet -c -o) > $IMAGE || exit 1
+
+if [ -n "$compress" ]; then
+    gzip -9 < $IMAGE > $target || rc=1
+else
+    cp -a $IMAGE $target || rc=1
+fi
+
+exit $rc
diff --git a/rescue/linux/cdrom/rootetc.list b/rescue/linux/cdrom/rootetc.list
new file mode 100644 (file)
index 0000000..18a2844
--- /dev/null
@@ -0,0 +1,13 @@
+/etc/bashrc
+/etc/exports
+/etc/gshadow
+/etc/shadow
+/etc/passwd
+/etc/group
+/etc/hosts
+/etc/filesystems
+/etc/fstab
+/etc/protocols
+/etc/localtime
+/etc/ld.so.cache
+/etc/syslog.conf
diff --git a/rescue/linux/cdrom/rootetc.list.save b/rescue/linux/cdrom/rootetc.list.save
new file mode 100644 (file)
index 0000000..18a2844
--- /dev/null
@@ -0,0 +1,13 @@
+/etc/bashrc
+/etc/exports
+/etc/gshadow
+/etc/shadow
+/etc/passwd
+/etc/group
+/etc/hosts
+/etc/filesystems
+/etc/fstab
+/etc/protocols
+/etc/localtime
+/etc/ld.so.cache
+/etc/syslog.conf
diff --git a/rescue/linux/cdrom/rootsbin.list b/rescue/linux/cdrom/rootsbin.list
new file mode 100644 (file)
index 0000000..035649e
--- /dev/null
@@ -0,0 +1,175 @@
+roottree/sbin/arp
+roottree/sbin/ash
+roottree/sbin/awk
+roottree/sbin/badblocks
+roottree/sbin/basename
+roottree/sbin/bash
+roottree/sbin/bunzip2
+roottree/sbin/bzip2
+roottree/sbin/cat
+roottree/sbin/cdrecord
+roottree/sbin/chattr
+roottree/sbin/chgrp
+roottree/sbin/chkconfig
+roottree/sbin/chmod
+roottree/sbin/chown
+roottree/sbin/chroot
+roottree/sbin/clear
+roottree/sbin/consoletype
+roottree/sbin/cp
+roottree/sbin/cut
+roottree/sbin/date
+roottree/sbin/dd
+roottree/sbin/debugfs
+roottree/sbin/df
+roottree/sbin/dhclient
+roottree/sbin/dhcpd
+roottree/sbin/diff
+roottree/sbin/dig
+roottree/sbin/dmesg
+roottree/sbin/dosfsck
+roottree/sbin/du
+roottree/sbin/dump
+roottree/sbin/e2fsck
+roottree/sbin/egrep
+roottree/sbin/eject
+roottree/sbin/false
+roottree/sbin/fdisk
+roottree/sbin/fgrep
+roottree/sbin/file
+roottree/sbin/find
+roottree/sbin/findfs
+roottree/sbin/free
+roottree/sbin/fsck
+roottree/sbin/fsck.cramfs
+roottree/sbin/fsck.ext2
+roottree/sbin/fsck.ext3
+roottree/sbin/fsck.jfs
+roottree/sbin/fsck.msdos
+roottree/sbin/fsck.vfat
+roottree/sbin/ftp
+roottree/sbin/gdb
+roottree/sbin/getkey
+roottree/sbin/grep
+roottree/sbin/grub
+roottree/sbin/gunzip
+roottree/sbin/gzip
+roottree/sbin/halt
+roottree/sbin/hdparm
+roottree/sbin/head
+roottree/sbin/hostname
+roottree/sbin/hotplug
+roottree/sbin/id
+roottree/sbin/ifconfig
+roottree/sbin/init
+roottree/sbin/insmod
+roottree/sbin/insmod.static
+roottree/sbin/ipcalc
+roottree/sbin/kill
+roottree/sbin/killall
+roottree/sbin/killall5
+roottree/sbin/klogd
+roottree/sbin/last
+roottree/sbin/ldd
+roottree/sbin/less
+roottree/sbin/lilo
+roottree/sbin/ln
+roottree/sbin/loadkeys
+roottree/sbin/login
+roottree/sbin/losetup
+roottree/sbin/ls
+roottree/sbin/lsmod
+roottree/sbin/lsof
+roottree/sbin/lspci
+roottree/sbin/lsusb
+roottree/sbin/ltrace
+roottree/sbin/mail
+roottree/sbin/md5sum
+roottree/sbin/mgetty
+roottree/sbin/mingetty
+roottree/sbin/mkbootdisk
+roottree/sbin/mkdir
+roottree/sbin/mkdosfs
+roottree/sbin/mke2fs
+roottree/sbin/mkfs
+roottree/sbin/mkfs.cramfs
+roottree/sbin/mkfs.ext2
+roottree/sbin/mkfs.ext3
+roottree/sbin/mkfs.jfs
+roottree/sbin/mkfs.msdos
+roottree/sbin/mkfs.vfat
+roottree/sbin/mkinitrd
+roottree/sbin/mkisofs
+roottree/sbin/mknod
+roottree/sbin/mkreiserfs
+roottree/sbin/mkswap
+roottree/sbin/modinfo
+roottree/sbin/mktemp
+roottree/sbin/modprobe
+roottree/sbin/more
+roottree/sbin/mount
+roottree/sbin/mt
+roottree/sbin/mv
+roottree/sbin/nash
+roottree/sbin/netstat
+roottree/sbin/nice
+roottree/sbin/nm
+roottree/sbin/nmap
+roottree/sbin/nologin
+roottree/sbin/od
+roottree/sbin/passwd
+roottree/sbin/ping
+roottree/sbin/portmap
+roottree/sbin/printenv
+roottree/sbin/ps
+roottree/sbin/pwd
+roottree/sbin/raidstart
+roottree/sbin/reboot
+roottree/sbin/reiserfsck
+roottree/sbin/rm
+roottree/sbin/rmt
+roottree/sbin/rmdir
+roottree/sbin/rmmod
+roottree/sbin/route
+roottree/sbin/rpc.lockd
+roottree/sbin/rpc.statd
+roottree/sbin/runlevel
+roottree/sbin/scp
+roottree/sbin/script
+roottree/sbin/scsi_info
+roottree/sbin/sfdisk
+roottree/sbin/sh
+roottree/sbin/shutdown
+roottree/sbin/sleep
+roottree/sbin/sort
+roottree/sbin/ssh
+roottree/sbin/ssh-keygen
+roottree/sbin/strace
+roottree/sbin/strings
+roottree/sbin/stty
+roottree/sbin/su
+roottree/sbin/swapoff
+roottree/sbin/swapon
+roottree/sbin/sync
+roottree/sbin/sysctl
+roottree/sbin/syslogd
+roottree/sbin/tail
+roottree/sbin/tar
+roottree/sbin/telinit
+roottree/sbin/test
+roottree/sbin/top
+roottree/sbin/touch
+roottree/sbin/tput
+roottree/sbin/true
+roottree/sbin/tune2fs
+roottree/sbin/udev
+roottree/sbin/udevstart
+roottree/sbin/umount
+roottree/sbin/uname
+roottree/sbin/usleep
+roottree/sbin/vi
+roottree/sbin/w
+roottree/sbin/which
+roottree/sbin/who
+roottree/sbin/whoami
+roottree/sbin/zcat
diff --git a/rescue/linux/cdrom/rootsbin.list.save b/rescue/linux/cdrom/rootsbin.list.save
new file mode 100644 (file)
index 0000000..035649e
--- /dev/null
@@ -0,0 +1,175 @@
+roottree/sbin/arp
+roottree/sbin/ash
+roottree/sbin/awk
+roottree/sbin/badblocks
+roottree/sbin/basename
+roottree/sbin/bash
+roottree/sbin/bunzip2
+roottree/sbin/bzip2
+roottree/sbin/cat
+roottree/sbin/cdrecord
+roottree/sbin/chattr
+roottree/sbin/chgrp
+roottree/sbin/chkconfig
+roottree/sbin/chmod
+roottree/sbin/chown
+roottree/sbin/chroot
+roottree/sbin/clear
+roottree/sbin/consoletype
+roottree/sbin/cp
+roottree/sbin/cut
+roottree/sbin/date
+roottree/sbin/dd
+roottree/sbin/debugfs
+roottree/sbin/df
+roottree/sbin/dhclient
+roottree/sbin/dhcpd
+roottree/sbin/diff
+roottree/sbin/dig
+roottree/sbin/dmesg
+roottree/sbin/dosfsck
+roottree/sbin/du
+roottree/sbin/dump
+roottree/sbin/e2fsck
+roottree/sbin/egrep
+roottree/sbin/eject
+roottree/sbin/false
+roottree/sbin/fdisk
+roottree/sbin/fgrep
+roottree/sbin/file
+roottree/sbin/find
+roottree/sbin/findfs
+roottree/sbin/free
+roottree/sbin/fsck
+roottree/sbin/fsck.cramfs
+roottree/sbin/fsck.ext2
+roottree/sbin/fsck.ext3
+roottree/sbin/fsck.jfs
+roottree/sbin/fsck.msdos
+roottree/sbin/fsck.vfat
+roottree/sbin/ftp
+roottree/sbin/gdb
+roottree/sbin/getkey
+roottree/sbin/grep
+roottree/sbin/grub
+roottree/sbin/gunzip
+roottree/sbin/gzip
+roottree/sbin/halt
+roottree/sbin/hdparm
+roottree/sbin/head
+roottree/sbin/hostname
+roottree/sbin/hotplug
+roottree/sbin/id
+roottree/sbin/ifconfig
+roottree/sbin/init
+roottree/sbin/insmod
+roottree/sbin/insmod.static
+roottree/sbin/ipcalc
+roottree/sbin/kill
+roottree/sbin/killall
+roottree/sbin/killall5
+roottree/sbin/klogd
+roottree/sbin/last
+roottree/sbin/ldd
+roottree/sbin/less
+roottree/sbin/lilo
+roottree/sbin/ln
+roottree/sbin/loadkeys
+roottree/sbin/login
+roottree/sbin/losetup
+roottree/sbin/ls
+roottree/sbin/lsmod
+roottree/sbin/lsof
+roottree/sbin/lspci
+roottree/sbin/lsusb
+roottree/sbin/ltrace
+roottree/sbin/mail
+roottree/sbin/md5sum
+roottree/sbin/mgetty
+roottree/sbin/mingetty
+roottree/sbin/mkbootdisk
+roottree/sbin/mkdir
+roottree/sbin/mkdosfs
+roottree/sbin/mke2fs
+roottree/sbin/mkfs
+roottree/sbin/mkfs.cramfs
+roottree/sbin/mkfs.ext2
+roottree/sbin/mkfs.ext3
+roottree/sbin/mkfs.jfs
+roottree/sbin/mkfs.msdos
+roottree/sbin/mkfs.vfat
+roottree/sbin/mkinitrd
+roottree/sbin/mkisofs
+roottree/sbin/mknod
+roottree/sbin/mkreiserfs
+roottree/sbin/mkswap
+roottree/sbin/modinfo
+roottree/sbin/mktemp
+roottree/sbin/modprobe
+roottree/sbin/more
+roottree/sbin/mount
+roottree/sbin/mt
+roottree/sbin/mv
+roottree/sbin/nash
+roottree/sbin/netstat
+roottree/sbin/nice
+roottree/sbin/nm
+roottree/sbin/nmap
+roottree/sbin/nologin
+roottree/sbin/od
+roottree/sbin/passwd
+roottree/sbin/ping
+roottree/sbin/portmap
+roottree/sbin/printenv
+roottree/sbin/ps
+roottree/sbin/pwd
+roottree/sbin/raidstart
+roottree/sbin/reboot
+roottree/sbin/reiserfsck
+roottree/sbin/rm
+roottree/sbin/rmt
+roottree/sbin/rmdir
+roottree/sbin/rmmod
+roottree/sbin/route
+roottree/sbin/rpc.lockd
+roottree/sbin/rpc.statd
+roottree/sbin/runlevel
+roottree/sbin/scp
+roottree/sbin/script
+roottree/sbin/scsi_info
+roottree/sbin/sfdisk
+roottree/sbin/sh
+roottree/sbin/shutdown
+roottree/sbin/sleep
+roottree/sbin/sort
+roottree/sbin/ssh
+roottree/sbin/ssh-keygen
+roottree/sbin/strace
+roottree/sbin/strings
+roottree/sbin/stty
+roottree/sbin/su
+roottree/sbin/swapoff
+roottree/sbin/swapon
+roottree/sbin/sync
+roottree/sbin/sysctl
+roottree/sbin/syslogd
+roottree/sbin/tail
+roottree/sbin/tar
+roottree/sbin/telinit
+roottree/sbin/test
+roottree/sbin/top
+roottree/sbin/touch
+roottree/sbin/tput
+roottree/sbin/true
+roottree/sbin/tune2fs
+roottree/sbin/udev
+roottree/sbin/udevstart
+roottree/sbin/umount
+roottree/sbin/uname
+roottree/sbin/usleep
+roottree/sbin/vi
+roottree/sbin/w
+roottree/sbin/which
+roottree/sbin/who
+roottree/sbin/whoami
+roottree/sbin/zcat
diff --git a/rescue/linux/cdrom/roottree/.cvsignore b/rescue/linux/cdrom/roottree/.cvsignore
new file mode 100644 (file)
index 0000000..018f582
--- /dev/null
@@ -0,0 +1,10 @@
+var
+tmp
+sbin
+proc
+mnt
+lib
+initrd
+dev
+cdrom
+bacula-rufus
diff --git a/rescue/linux/cdrom/roottree/README b/rescue/linux/cdrom/roottree/README
new file mode 100644 (file)
index 0000000..222d34a
--- /dev/null
@@ -0,0 +1,14 @@
+
+This directory contains the root directory structure that will
+be loaded once Linux is in memory and the CDROM has been detected.
+It is loaded as a RAM disk and replaces the initrd. It is in fact a
+quite complete set of commands, and you can quite liberally add to 
+it. Do so by adding the files you want to either rootsbin.list (note
+/bin and /sbin are in the same directory).
+
+Quite a few files will be added to this directory automatically either
+by the makekernel script or by the makebinaries script.  Be a bit
+careful about what files you add to /etc as it is somewhat tailored to
+be a streamlined boot process. In fact, the normal RedHat files in
+rc.d, ... are probably not there -- it is rather simplified and reminiscent
+of an old Unix system.
diff --git a/rescue/linux/cdrom/roottree/etc/.cvsignore b/rescue/linux/cdrom/roottree/etc/.cvsignore
new file mode 100644 (file)
index 0000000..042cf66
--- /dev/null
@@ -0,0 +1,13 @@
+init.d
+terminfo
+ssh
+shadow 
+security
+passwd
+pam.d
+ld.so.cache
+gshadow
+group
+protocols
+services
+syslog.conf
diff --git a/rescue/linux/cdrom/roottree/etc/fonts.cgz b/rescue/linux/cdrom/roottree/etc/fonts.cgz
new file mode 100644 (file)
index 0000000..ebe6e36
Binary files /dev/null and b/rescue/linux/cdrom/roottree/etc/fonts.cgz differ
diff --git a/rescue/linux/cdrom/roottree/etc/inittab b/rescue/linux/cdrom/roottree/etc/inittab
new file mode 100644 (file)
index 0000000..73c67cf
--- /dev/null
@@ -0,0 +1,45 @@
+#
+# inittab       This file describes how the INIT process should set up
+#               the system in a certain run-level.
+#
+# Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
+#               Modified for RHS Linux by Marc Ewing and Donnie Barnes
+#
+
+# Default runlevel. The runlevels used by RHS are:
+#   0 - halt (Do NOT set initdefault to this)
+#   1 - Single user mode
+#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
+#   3 - Full multiuser mode
+#   4 - unused
+#   5 - X11
+#   6 - reboot (Do NOT set initdefault to this)
+# 
+id:2:initdefault:
+
+# System initialization.
+si::sysinit:/etc/sysinit
+
+#shutdown
+l0:0:wait:/sbin/halt -fd  
+
+# normal run levels
+l1:1:wait:/bin/bash -i -l
+l2:2:wait:/etc/rc.d/rc 2
+l3:3:wait:/etc/rc.d/rc 3
+l4:4:wait:/etc/rc.d/rc 4
+l5:5:wait:/etc/rc.d/rc 5
+
+# reboot
+l6:6:wait:/sbin/reboot -fd
+
+# Trap CTRL-ALT-DELETE
+ca::ctrlaltdel:/sbin/halt -d
+
+
+# Run gettys in standard runlevels
+1:2345:respawn:/sbin/mingetty tty1
+2:2345:respawn:/sbin/mingetty tty2
+3:2345:respawn:/sbin/mingetty tty3
+4:2345:respawn:/sbin/mingetty tty4
+5:2345:respawn:/sbin/mingetty tty5
diff --git a/rescue/linux/cdrom/roottree/etc/issue b/rescue/linux/cdrom/roottree/etc/issue
new file mode 100644 (file)
index 0000000..0808fc5
--- /dev/null
@@ -0,0 +1,6 @@
+
+Welcome to the Bacula Rescue CDROM
+
+\r \v
+
+Please login using root and your root password ...
diff --git a/rescue/linux/cdrom/roottree/etc/keymaps.gz b/rescue/linux/cdrom/roottree/etc/keymaps.gz
new file mode 100644 (file)
index 0000000..fbf9f6c
Binary files /dev/null and b/rescue/linux/cdrom/roottree/etc/keymaps.gz differ
diff --git a/rescue/linux/cdrom/roottree/etc/lang-table b/rescue/linux/cdrom/roottree/etc/lang-table
new file mode 100644 (file)
index 0000000..d274ae3
--- /dev/null
@@ -0,0 +1,18 @@
+Czech          cs      lat2-sun16      iso02           cs_CZ           cz-lat2         Europe/Prague
+English                en      None            None            en_US           us              America/New_York
+Danish         da      lat0-sun16      iso15           da_DK           us              Europe/Copenhagen
+French         fr      None            None            fr_FR           fr-latin1       Europe/Paris
+German         de      None            None            de_DE           de-latin1       Europe/Berlin
+Hungarian      hu      lat2-sun16      iso02           hu_HU           hu              Europe/Budapest
+Icelandic      is      lat0-sun16      iso15           is_IS           is-latin1       Atlantic/Reykjavik
+Italian                it      lat0-sun16      iso15           it_IT           it              Europe/Rome
+Norwegian      no      lat0-sun16      iso15           no_NO           no-latin1       Europe/Oslo
+Romanian       ro      lat2-sun16      iso02           ro_RO           ro              Europe/Bucharest
+Russian        ru      cyr-sun16       koi8-r          ru_RU.KOI8-R    ru              Europe/Moscow
+Serbian                sr      cyr-sun16       iso05           sr_YU           us              Europe/Belgrade
+Slovak         sk      lat2-sun16      iso02           sk_SK           sk-qwerty       Europe/Bratislava
+Slovenian      sl      lat2-sun16      iso02           sl_SI           slovene         Europe/Ljubljana
+Spanish                es      None            None            es_ES           es              Europe/Madrid
+Swedish        sv      lat0-sun16      iso15           sv_SE           se-latin1       Europe/Stockholm
+Turkish                tr      lat5-sun16      iso09           tr_TR           trq             Europe/Istanbul
+Ukrainian      uk      cyr-sun16       koi8-u          uk_UA.KOI8-U    uk              Europe/Kiev
diff --git a/rescue/linux/cdrom/roottree/etc/lilo.conf b/rescue/linux/cdrom/roottree/etc/lilo.conf
new file mode 100644 (file)
index 0000000..07a77f3
--- /dev/null
@@ -0,0 +1,13 @@
+boot=/dev/hda
+map=/bdisk/boot/map
+install=/bdisk/boot/boot.b
+backup=/dev/null
+prompt
+timeout=300
+default=linux
+
+image=/boot/vmlinuz
+       label=linux
+       read-only
+       root=/dev/hda1
+
diff --git a/rescue/linux/cdrom/roottree/etc/load_eth0 b/rescue/linux/cdrom/roottree/etc/load_eth0
new file mode 100755 (executable)
index 0000000..c21c74b
--- /dev/null
@@ -0,0 +1,27 @@
+#! /bin/sh
+#
+# Attempt to load the ethernet card module
+#
+
+XPWD=`pwd`
+cd /lib/modules/*/kernel/drivers/net
+
+echo "Finding network module"
+
+modprobe mii 2>/dev/null >/dev/null
+modprobe 8390 2>/dev/null >/dev/null
+
+for card in *.o */*.o; do
+  if insmod ${card} >/dev/null 2>&1 ; then                                
+     if ifconfig eth0 >/dev/null 2>&1 ; then
+        cat >>/etc/modules.conf <<EOF
+alias eth0 $card
+EOF
+         echo "Ethernet card eth0 is a $card"
+         sleep 2
+         exit
+      fi
+  fi
+done
+echo "Sorry no ethernet card module found."
+sleep 3
diff --git a/rescue/linux/cdrom/roottree/etc/mount_cdrom b/rescue/linux/cdrom/roottree/etc/mount_cdrom
new file mode 100755 (executable)
index 0000000..f34e2ca
--- /dev/null
@@ -0,0 +1,43 @@
+#!/bin/sh 
+#
+# Try mounting the CDROM drive
+#
+
+echo "Doing mount_cdrom ..."
+modprobe nls_iso8859-1 2>/dev/null >/dev/null
+modprobe cdrom 2>/dev/null >/dev/null
+modprobe scsi_mod 2>/dev/null >/dev/null
+
+DISKS="/dev/hd?"
+if [ -f /proc/scsi/scsi ] ; then 
+  HAVE_SCSI="yes"
+  DISKS="$DISKS /dev/scd? /dev/scd?? /dev/sd?[1-9] /dev/sd?[1-9][1-9]"
+else
+  HAVE_SCSI="no"
+fi
+DISKS="$DISKS /dev/hd?[1-9] /dev/hd?[1-9][1-9]"
+
+echo "Trying to find CDROM on ..."
+for disk in $DISKS; do
+   if [ x$DEBUG = xyes ] ; then
+      echo "Trying to mount device $disk"
+   fi
+   if test -b $disk && mount -t iso9660 -o ro -n $disk /mnt/cdrom 2>/dev/null >/dev/null ; then
+#  if test -b $disk && mount -t iso9660 -o ro -n $disk /mnt/cdrom ; then
+       if [ -e /mnt/cdrom/BaculaRescueCD ] ; then
+          echo "Found the Bacula Rescue CDROM on $disk"
+          sleep 3
+          exit
+       else
+         umount /mnt/cdrom
+       fi
+   else 
+      if [ x$DEBUG = xyes ] ; then
+         cat /proc/modules
+         sleep 2
+      fi
+   fi
+done
+
+echo "Sorry could not find the CDROM"
+sleep 5
diff --git a/rescue/linux/cdrom/roottree/etc/mtab b/rescue/linux/cdrom/roottree/etc/mtab
new file mode 100644 (file)
index 0000000..c21560b
--- /dev/null
@@ -0,0 +1,2 @@
+/dev/root / ext2 rw 0 0
+/dev/cdrom /mnt/cdrom iso9660 ro 0 0
diff --git a/rescue/linux/cdrom/roottree/etc/nsswitch.conf b/rescue/linux/cdrom/roottree/etc/nsswitch.conf
new file mode 100644 (file)
index 0000000..2b77a18
--- /dev/null
@@ -0,0 +1,44 @@
+#
+# /etc/nsswitch.conf
+#
+# An example Name Service Switch config file. This file should be
+# sorted with the most-used services at the beginning.
+#
+# The entry '[NOTFOUND=return]' means that the search for an
+# entry should stop if the search in the previous entry turned
+# up nothing. Note that if the search failed due to some other reason
+# (like no NIS server responding) then the search continues with the
+# next entry.
+#
+# Legal entries are:
+#
+#       nisplus or nis+         Use NIS+ (NIS version 3)
+#       nis or yp               Use NIS (NIS version 2), also called YP
+#       dns                     Use DNS (Domain Name Service)
+#       files                   Use the local files
+#       db                      Use the local database (.db) files
+#       compat                  Use NIS on compat mode
+#       hesiod                  Use Hesiod for user lookups
+#       [NOTFOUND=return]       Stop searching if not found so far
+#
+
+# To use db, put the "db" in front of "files" for entries you want to be
+# looked up first in the databases
+#
+# Example:
+
+passwd:     files
+shadow:     files
+group:      files
+hosts:      files
+bootparams: files
+ethers:     files
+netmasks:   files
+networks:   files
+protocols:  files
+rpc:        files
+services:   files
+netgroup:   files
+publickey:  files
+automount:  files
+aliases:    files
diff --git a/rescue/linux/cdrom/roottree/etc/profile b/rescue/linux/cdrom/roottree/etc/profile
new file mode 100644 (file)
index 0000000..92c3742
--- /dev/null
@@ -0,0 +1,49 @@
+# /etc/profile
+
+# System wide environment and startup programs, for login setup
+# Functions and aliases go in /etc/bashrc
+
+pathmunge () {
+       if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
+          if [ "$2" = "after" ] ; then
+             PATH=$PATH:$1
+          else
+             PATH=$1:$PATH
+          fi
+       fi
+}
+
+# Path manipulation
+if [ `id -u` = 0 ]; then
+       pathmunge /sbin
+       pathmunge /usr/sbin
+       pathmunge /usr/local/sbin
+fi
+
+pathmunge /usr/X11R6/bin after
+
+unset pathmunge
+
+# No core files by default
+ulimit -S -c 0 > /dev/null 2>&1
+
+USER="`id -un`"
+LOGNAME=$USER
+MAIL="/var/spool/mail/$USER"
+
+HOSTNAME=`/bin/hostname`
+HISTSIZE=1000
+
+if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then
+    INPUTRC=/etc/inputrc
+fi
+
+export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
+
+for i in /etc/profile.d/*.sh ; do
+    if [ -r "$i" ]; then
+       . $i
+    fi
+done
+
+unset i
diff --git a/rescue/linux/cdrom/roottree/etc/rc.d/rc b/rescue/linux/cdrom/roottree/etc/rc.d/rc
new file mode 100755 (executable)
index 0000000..c10de84
--- /dev/null
@@ -0,0 +1,8 @@
+#! /bin/sh -v
+#
+
+argv1="$1"
+
+if [ $argv1 -eq 1 ] ; then
+   exec init -t1 S
+fi
diff --git a/rescue/linux/cdrom/roottree/etc/securetty b/rescue/linux/cdrom/roottree/etc/securetty
new file mode 100644 (file)
index 0000000..525f4de
--- /dev/null
@@ -0,0 +1,23 @@
+console
+vc/1
+vc/2
+vc/3
+vc/4
+vc/5
+vc/6
+vc/7
+vc/8
+vc/9
+vc/10
+vc/11
+tty1
+tty2
+tty3
+tty4
+tty5
+tty6
+tty7
+tty8
+tty9
+tty10
+tty11
diff --git a/rescue/linux/cdrom/roottree/etc/start_network.sh b/rescue/linux/cdrom/roottree/etc/start_network.sh
new file mode 100755 (executable)
index 0000000..65a22fe
--- /dev/null
@@ -0,0 +1,23 @@
+#! /bin/sh
+#
+# This script is not used by Bacula. You should try the script
+#  in bacula-hostname/start_network.
+# We leave this here because it could be useful if you are 
+#  getting an IP address with DHCP.  You might need to change
+#  dhcpcd below to dhclient if you are running RedHat
+#
+
+if ifconfig eth0 >/dev/null 2>&1 ; then
+
+    echo "Setting up network..."
+    /bin/dhcpcd $eth0
+
+    echo "done"
+
+    ifconfig
+    exit
+
+fi
+
+echo "No network card present, cannot configure network"
+sleep 3
diff --git a/rescue/linux/cdrom/roottree/etc/sysinit b/rescue/linux/cdrom/roottree/etc/sysinit
new file mode 100755 (executable)
index 0000000..da71eca
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+echo "Start sysinit ..."
+
+PATH="/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin"
+export PATH
+
+echo "Remounting root filesystem read-write"
+mount -o remount,rw /dev/root /
+
+mount -t proc none /proc
+mount -t devpts none /dev/pts
+[ -d /proc/bus/usb ] && mount -n -t usbfs /proc/bus/usb /proc/bus/usb
+mount -n -t sysfs /sys /sys >/dev/null 2>&1
+
+[ -x /sbin/start_udev ] && /sbin/start_udev
+
+# Clear mtab
+(> /etc/mtab) &> /dev/null
+
+# Enter root, /proc and (potentially) /proc/bus/usb and devfs into mtab.
+mount -f /
+mount -f /proc
+mount -f /sys >/dev/null 2>&1
+mount -f /dev/pts
+[ -f /proc/bus/usb/devices ] && mount -f -t usbfs usbfs /proc/bus/usb
+[ -e /dev/.devfsd ] && mount -f -t devfs devfs /dev
+
+
+touch  /var/run/utmp /var/run/wtmp /var/log/wtmp
+chgrp utmp /var/run/utmp /var/log/wtmp
+chmod 0664 /var/run/utmp /var/log/wtmp
+
+syslogd -m 0
+klogd -x 
+
+echo "Attempting to mount CDDOM..."
+/etc/mount_cdrom
+
+echo "Loading the ethernet driver module"
+/etc/load_eth0
+
+ifconfig lo 127.0.0.1 netmask 255.0.0.0 up
+
+/bin/hostname RescueCD
+
+echo "Boot complete."
+sleep 3 # give time to read messages
diff --git a/rescue/linux/cdrom/roottree/etc/termcap b/rescue/linux/cdrom/roottree/etc/termcap
new file mode 100644 (file)
index 0000000..b765d99
--- /dev/null
@@ -0,0 +1,5522 @@
+
+
+
+dumb|80-column dumb tty:\
+       :am:\
+       :co#80:\
+       :bl=^G:cr=^M:do=^J:sf=^J:
+unknown|unknown terminal type:\
+       :gn:tc=dumb:
+lpr|printer|line printer:\
+       :hc:os:\
+       :co#132:li#66:\
+       :bl=^G:cr=^M:do=^J:ff=^L:le=^H:sf=^J:
+
+
+klone+acs|alternate character set for ansi.sys displays:\
+       :ac=`\004a\261f\370g\361h\260j\331k\277l\332m\300n\305o~q\304r\362s_t\303u\264v\301w\302x\263y\371z\372{\373|\374}\375~\376.\031-\030\054\021+^P0\333p\304r\304y\363z\362{\343|\330}\234:\
+       :ae=\E[10m:as=\E[11m:
+
+klone+sgr|attribute control for ansi.sys displays:\
+       :S2=\E[11m:S3=\E[10m:ae=\E[11m:as=\E11m:mb=\E[5m:\
+       :md=\E[1m:me=\E[0;10m:mk=\E[8m:mr=\E[7m:\
+       :..sa=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m:\
+       :se=\E[m:so=\E[7m:ue=\E[m:us=\E[4m:
+
+klone+sgr-dumb|attribute control for ansi.sys displays (no ESC [ 11 m):\
+       :ae=\E[12m:as=\E12m:mb=\E[5m:md=\E[1m:me=\E[0;10m:\
+       :mk=\E[8m:mr=\E[7m:\
+       :..sa=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;12%;m:\
+       :se=\E[m:so=\E[7m:ue=\E[m:us=\E[4m:
+
+klone+color|color control for ansi.sys and ISO6429-compatible displays:\
+       :Co#8:NC#3:pa#64:\
+       :AB=\E[4%p1%dm:AF=\E[3%p1%dm:Sb=\E[%+(m:Sf=\E[%+^^m:\
+       :op=\E[37;40m:
+
+ibcs2|Intel Binary Compatibility Standard prescriptions:\
+       :AL=\E[%dL:DC=\E[%dP:DO=\E[%dB:IC=\E[%d@:LE=\E[%dD:\
+       :RA=\E[?7l:RI=\E[%dC:S1=\E=%p1%dg:SA=\E[?7h:\
+       :SF=\E[%dS:SR=\E[%dT:UP=\E[%dA:bt=\E[Z:ch=\E[%i%dG:\
+       :cl=\Ec:cm=\E[%i%d;%dH:ct=\E[g:cv=\E[%i%dd:ec=\E[%dX:\
+       :ei=:im=:rc=\E8:sc=\E7:st=\EH:
+
+
+ansi-mini|any ansi terminal with pessimistic assumptions:\
+       :am:bs:\
+       :co#80:it#8:li#24:\
+       :ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:do=\E[B:ho=\E[H:\
+       :le=\E[D:nd=\E[C:ta=^I:up=\E[A:
+
+pcansi-m|pcansi-mono|ibm-pc terminal programs claiming to be ansi (mono mode):\
+       :am:bs:mi:ms:\
+       :co#80:it#8:li#24:\
+       :al=\E[L:bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
+       :cm=\E[%i%d;%dH:cr=^M:ct=\E[2g:dc=\E[P:dl=\E[M:\
+       :do=\E[B:ho=\E[H:kb=^H:kd=\E[B:kh=\E[H:kl=\E[D:\
+       :kr=\E[C:ku=\E[A:le=\E[D:nd=\E[C:sf=^J:st=\EH:ta=^I:\
+       :up=\E[A:tc=klone+sgr-dumb:
+pcansi-25-m|pcansi25m|ibm-pc terminal programs with 25 lines (mono mode):\
+       :li#25:tc=pcansi-m:
+pcansi-33-m|pcansi33m|ibm-pc terminal programs with 33 lines (mono mode):\
+       :li#33:tc=pcansi-m:
+pcansi-43-m|ansi43m|ibm-pc terminal programs with 43 lines (mono mode):\
+       :li#43:tc=pcansi-m:
+pcansi|ibm-pc terminal programs claiming to be ansi:\
+       :tc=klone+color:tc=pcansi-m:
+pcansi-25|pcansi25|ibm-pc terminal programs with 25 lines:\
+       :li#25:tc=pcansi:
+pcansi-33|pcansi33|ibm-pc terminal programs with 33 lines:\
+       :li#33:tc=pcansi:
+pcansi-43|pcansi43|ibm-pc terminal programs with 43 lines:\
+       :li#43:tc=pcansi:
+
+ansi-m|ansi-mono|ANSI X3.64-1979 terminal with ANSI.SYS compatible attributes:\
+       :5i:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RI=\E[%dC:SF=\E[%dS:SR=\E[%dT:UP=\E[%dA:\
+       :cb=\E[1K:ch=\E[%i%dG:ct=\E[2g:cv=\E[%i%dd:ec=\E[%dX:\
+       :ei=:im=:kB=\E[Z:kI=\E[L:kb=^H:kd=\E[B:kl=\E[D:\
+       :kr=\E[C:ku=\E[A:nw=\r\E[S:pf=\E[4i:po=\E[5i:\
+       :..rp=%p1%c\E[%p2%{1}%-%db:s0=\E(B:s1=\E)B:s2=\E*B:\
+       :s3=\E+B:ta=\E[I:tc=pcansi-m:
+
+ansi|ansi/pc-term compatible with color:\
+       :u6=\E[%i%d;%dR:u7=\E[6n:..u8=\E[?%[;0123456789]c:\
+       :u9=\E[c:tc=klone+color:tc=klone+acs:tc=klone+sgr:tc=ansi-m:
+
+ansi.sys-old|ANSI.SYS under PC-DOS 2.1:\
+       :am:mi:ms:xo:\
+       :co#80:li#25:\
+       :RA=\E[?7l:SA=\E[?7h:ce=\E[k:cl=\E[2J:cm=\E[%i%d;%dH:\
+       :do=\E[B:ho=\E[H:is=\E[m\E[?7h:kd=^J:kh=^^:kl=^H:\
+       :kr=^L:ku=^K:le=^H:nd=\E[C:pk=\E[0;%+:;"%s":rc=\E[u:\
+       :sc=\E[s:u6=\E[%i%d;%dR:u7=\E[6n:up=\E[A:tc=klone+color:tc=klone+acs:tc=klone+sgr:
+ansi.sys|ANSI.SYS 3.1 and later versions:\
+       :ce=\E[K:tc=ansi.sys-old:
+
+ansi.sysk|ansisysk|PC-DOS 3.1 ANSI.SYS with keypad redefined for vi:\
+       :is=U2 PC-DOS 3.1 ANSI.SYS with keypad redefined for vi 9-29-86\n\E[;75;8p:\
+       :ke=\E[;71;0;71p\E[;72;0;72p\E[;73;0;73p\E[;77;0;77p\E[;80;0;80p\E[;81;0;81p\E[;82;0;82p\E[;83;0;83p:\
+       :ks=\E[;71;30p\E[;72;11p\E[;73;27;21p\E[;77;12p\E[;80;10p\E[;81;27;4p\E[;82;27;27;105p\E[;83;127p:tc=ansi.sys:
+nansi.sys|nansisys|PC-DOS Public Domain NANSI.SYS:\
+       :al=\E[1L:dc=\E[1P:dl=\E[1M:ei=:ic=\E[1@:im=:\
+       :is=U3 PC-DOS Public Domain NANSI.SYS 9-23-86\n:tc=ansi.sys:
+nansi.sysk|nansisysk|PC-DOS Public Domain NANSI.SYS with keypad redefined for vi:\
+       :al=\E[1L:dc=\E[1P:dl=\E[1M:ei=:ic=\E[1@:im=:\
+       :is=U4 PC-DOS Public Domain NANSI.SYS with keypad redefined for vi 9-29-86\n\E[;75;8p:tc=ansi.sysk:
+
+
+linux|linux-lat|linux console:\
+       :am:eo:mi:ms:ut:xn:xo:\
+       :co#80:it#8:li#25:\
+       :&7=^Z:@7=\E[4~:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:\
+       :F1=\E[23~:F2=\E[24~:F3=\E[25~:F4=\E[26~:F5=\E[28~:\
+       :F6=\E[29~:F7=\E[31~:F8=\E[32~:F9=\E[33~:FA=\E[34~:\
+       :IC=\E[%d@:K2=\E[G:al=\E[L:bl=^G:cd=\E[J:ce=\E[K:\
+       :ch=\E[%i%dG:cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:\
+       :cs=\E[%i%d;%dr:ct=\E[3g:cv=\E[%i%dd:dc=\E[P:dl=\E[M:\
+       :do=^J:ei=\E[4l:ho=\E[H:ic=\E[@:im=\E[4h:k1=\E[[A:\
+       :k2=\E[[B:k3=\E[[C:k4=\E[[D:k5=\E[[E:k6=\E[17~:\
+       :k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:kB=\E[Z:\
+       :kD=\E[3~:kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=^H:kd=\E[B:\
+       :kh=\E[1~:kl=\E[D:kr=\E[C:ku=\E[A:le=^H:mr=\E[7m:\
+       :nd=\E[C:nw=^M^J:r1=\Ec:rc=\E8:sc=\E7:sf=^J:sr=\EM:\
+       :st=\EH:ta=^I:u6=\E[%i%d;%dR:u7=\E[6n:u8=\E[?6c:\
+       :u9=\E[c:up=\E[A:vb=200\E[?5h\E[?5l:ve=\E[?25h:\
+       :vi=\E[?25l:tc=klone+sgr:tc=klone+color:tc=klone+acs:
+linux-m|Linux console no color:\
+       :Co@:pa@:\
+       :AB@:AF@:Sb@:Sf@:tc=linux:
+
+linux-nic|linux with ich/ich1 suppressed for non-curses programs:\
+       :IC@:ei=:ic@:im=:tc=linux:
+
+scoansi|SCO Extended ANSI standard crt:\
+       :am:bs:eo:xo:\
+       :co#80:it#8:li#25:\
+       :@7=\E[F:ae=\E[10m:al=\E[L:as=\E[12m:bt=\E[Z:cd=\E[J:\
+       :ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:dc=\E[P:dl=\E[M:\
+       :do=\E[B:ei=:ho=\E[H:ic=\E[@:im=:k1=\E[M:k2=\E[N:\
+       :k3=\E[O:k4=\E[P:k5=\E[Q:k6=\E[R:k7=\E[S:k8=\E[T:\
+       :k9=\E[U:k;=\E[V:kN=\E[G:kP=\E[I:kb=^H:kd=\E[B:\
+       :kh=\E[H:kl=\E[D:kr=\E[C:ku=\E[A:le=\E[D:mb=\E[5m:\
+       :md=\E[1m:me=\E[m:nd=\E[C:se=\E[m:sf=\E[S:so=\E[7m:\
+       :sr=\E[T:ta=^I:ue=\E[m:up=\E[A:us=\E[4m:
+
+att6386|at386|386at|AT&T WGS 6386 console:\
+       :am:bw:eo:xo:\
+       :co#80:it#8:li#25:\
+       :@7=\E[Y:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:\
+       :F1=\EOZ:F2=\EOA:IC=\E[%d@:LE=\E[%dD:RI=\E[%dC:\
+       :SF=\E[%dS:SR=\E[%dT:UP=\E[%dA:\
+       :ac=``a1fxgqh0jYk?lZm@nEooppqDrrsstCu4vAwBx3yyzz{{||}}~~:\
+       :ae=\E[10m:al=\E[1L:as=\E[12m:bl=^G:bt=\E[Z:cd=\E[J:\
+       :ce=\E[K:ch=\E[%i%dG:cl=\E[2J\E[H:cm=\E[%i%d;%dH:\
+       :cr=^M:ct=\E[2g:cv=\E[%i%dd:dc=\E[P:dl=\E[1M:do=\E[B:\
+       :ec=\E[%dX:ei=:ho=\E[H:ic=\E[1@:im=:is=\E[0;10;39m:\
+       :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOT:k6=\EOU:\
+       :k7=\EOV:k8=\EOW:k9=\EOX:k;=\EOY:kB=^]:kD=\E[P:\
+       :kI=\E[@:kM=\E0:kN=\E[U:kP=\E[V:kb=^H:kd=\E[B:\
+       :kh=\E[H:kl=\E[D:kr=\E[C:ku=\E[A:le=\E[D:mb=\E[5m:\
+       :md=\E[1m:me=\E[0;10m:mh=\E[2m:mk=\E[9m:mr=\E[7m:\
+       :nd=\E[C:nw=\r\E[S:rc=\E8:\
+       :..sa=\E[10m\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p4%t;5%;%?%p5%t;2%;?%p6%t;1%;%?%p9%t;12%e;10%;%?%p7%t;9%;m:\
+       :sc=\E7:se=\E[m:sf=\E[S:so=\E[7m:sr=\E[T:st=\EH:\
+       :ta=^I:ue=\E[m:up=\E[A:us=\E[4m:ve=\E[=1C:vi=\E[=C:tc=klone+color:
+pc6300plus|AT&T 6300 plus:\
+       :am:xo:\
+       :co#80:li#24:\
+       :al=\E[1L:bl=^G:cd=\E[0J:ce=\E[0K:cl=\E[2J\E[H:\
+       :cm=\E[%i%2;%2H:cr=^M:ct=\E[3g:dc=\E[1P:dl=\E[1M:\
+       :do=\E[B:ei=:ho=\E[H:ic=\E[1@:im=:k1=\EOc:k2=\EOd:\
+       :k3=\EOe:k4=\EOf:k5=\EOg:k6=\EOh:k7=\EOi:k8=\EOj:\
+       :k9=\EOk:k;=\EOu:kb=^H:kd=\E[B:kl=\E[D:kr=\E[C:\
+       :ku=\E[A:le=^H:mb=\E[5m:md=\E[1m:me=\E[m:mh=\E[2m:\
+       :mk=\E[9m:mr=\E[7m:nd=\E[C:nw=^M^J:se=\E[m:sf=^J:\
+       :so=\E[7m:st=\EH:ue=\E[m:up=\E[A:us=\E[4m:ve=\E[=1C:\
+       :vi=\E[=C:
+
+att7300|unixpc|pc7300|3b1|s4|AT&T UNIX PC Model 7300:\
+       :am:xn:xo:\
+       :co#80:it#8:li#24:\
+       :AL=\E[%dL:DL=\E[%dM:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:\
+       :UP=\E[%dA:ae=\E[10m:al=\E[L:as=\E[11m:bl=^G:bt=\E^I:\
+       :cd=\E[0J:ce=\E[0K:cl=\E[2J\E[H:cm=\E[%i%d;%dH:cr=^M:\
+       :dc=\E[P:dl=\E[M:do=\E[B:ei=:ho=\E[H:i1=^O:ic=\E[@:\
+       :im=:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E5:k6=\E6:\
+       :k7=\E7:k8=\E8:kD=\Edc:kI=\Eim:kN=\Epg:kP=\EPG:kb=^H:\
+       :kd=\E[B:kh=\Ehm:kl=\E[D:kr=\E[C:ku=\E[A:md=\E[7m:\
+       :me=\E[0;10m:mh=\E[2m:mr=\E[7m:nd=\E[C:nw=\EE:\
+       :se=\E[m:sf=^J:so=\E[7m:sr=\EM:ue=\E[m:up=\E[A:\
+       :us=\E[4m:ve=\E[=1C:vi=\E[=C:
+
+iris-ansi|iris-ansi-net|IRIS emulating ANSI terminal:\
+       :am:\
+       :co#80:it#8:li#40:\
+       :!2=\E[218q:#2=\E[143q:#4=\E[158q:%9=\E[209q:\
+       :%f=\E[210q:%i=\E[167q:&7=\E[217q:*4=\E[P:*7=\E[147q:\
+       :@7=\E[146q:@8=^M:AL=\E[%dL:DL=\E[%dM:DO=\E[%dB:\
+       :F1=\EOR:F2=\EOS:LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:\
+       :SA=\E[?7h:UP=\E[%dA:al=\E[L:bl=^G:cb=\E[1K:cd=\E[J:\
+       :ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=^M:ct=\E[3g:\
+       :dl=\E[M:do=^J:ho=\E[H:\
+       :is=\E[?1l\E>\E[?7h\E[100g\E[0m\E7\E[r\E8:k1=\E[001q:\
+       :k2=\E[002q:k3=\E[003q:k4=\E[004q:k5=\E[005q:\
+       :k6=\E[006q:k7=\E[007q:k8=\E[008q:k9=\EOP:k;=\EOQ:\
+       :kB=\E[Z:kD=\177:kI=\E[139q:kM=\E[146q:kN=\E[154q:\
+       :kP=\E[150q:kb=^H:kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:\
+       :ku=\E[A:le=\E[D:md=\E[1m:me=\E[m:mr=\E[7m:nd=\E[C:\
+       :nw=\EE:pk=\EP101;%d.y%s\E\\:rc=\E8:sc=\E7:se=\E[m:\
+       :sf=\ED:so=\E[1;7m:sr=\EM:st=\EH:ta=^I:ue=\E[m:\
+       :up=\E[A:us=\E[4m:ve=\E[9/y\E[12/y\E[=6l:\
+       :vs=\E[10/y\E[=1h\E[=2l\E[=6h:
+
+pcix|PC/IX console:\
+       :am:bw:eo:\
+       :co#80:li#24:\
+       :cd=\E[J:ce=\E[K:cl=\Ec:cm=\E[%i%2;%2H:do=\E[B:\
+       :ho=\E[H:le=^H:nd=\E[C:se=\E[m:so=\E[7m:ue=\E[m:\
+       :up=\E[A:us=\E[4m:
+
+ibmpcx|xenix|ibmx|IBM PC xenix console display:\
+       :am:ms:\
+       :co#80:li#25:\
+       :@7=\E[d:al=\E[L:cd=\E[J:ce=\E[K:cl=^L:cm=\E[%d;%dH:\
+       :dc=\E[P:dl=\E[M:do=\E[B:ei=:ho=\E[H:ic=\E[@:im=:\
+       :k1=\E[K:k2=\E[L:k3=\E[M:k4=\E[N:kN=\E[e:kP=\E[Z:\
+       :kb=^H:kd=\E[B:kh=\E[Y:kl=\E[D:kr=\E[C:ku=\E[A:le=^H:\
+       :nd=\E[C:up=\E[A:tc=klone+acs:tc=klone+sgr:
+
+
+qnx|qnx4|qnx console:\
+       :am:km:mi:ms:xt:\
+       :co#80:it#4:li#25:\
+       :al=\EE:bl=^G:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :\
+       :cr=^M:dc=\Ef:dl=\EF:do=^J:ei=:ho=\EH:ic=\Ee:im=:\
+       :k1=\377\201:k2=\377\202:k3=\377\203:k4=\377\204:\
+       :k5=\377\205:k6=\377\206:k7=\377\207:k8=\377\210:\
+       :k9=\377\211:kD=\377\254:kI=\377\253:kN=\377\252:\
+       :kP=\377\242:kd=\377\251:kh=\377\240:kl=\377\244:\
+       :kr=\377\246:ku=\377\241:le=^H:mb=\E{:md=\E<:\
+       :me=\E}\E]\E>\E):mr=\E(:nd=\EC:rp=\Eg%r%+ %.:se=\E):\
+       :sf=^J:so=\E(:sr=\EI:ta=^I:te=\ER:ue=\E]:up=\EA:\
+       :us=\E[:ve=\Ey1:vi=\Ey0:vs=\Ey2:
+
+
+pcvtXX|pcvt vt200 emulator (DEC VT220):\
+       :am:km:mi:ms:xn:\
+       :it#8:vt#3:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:SA=\E[?7h:SF=\E[%dS:\
+       :SR=\E[%dT:UP=\E[%dA:\
+       :ac=llmmkkjjuuttvvwwqqxxnnoosspprr``aaffgg~~..--++\054\054hhII00yyzz:\
+       :ae=\E(B:al=\E[L:as=\E(0:bl=^G:cb=\E[1K:cd=\E[J:\
+       :ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:\
+       :cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=\E[B:\
+       :ei=\E[4l:ho=\E[H:\
+       :i1=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:im=\E[4h:\
+       :k1=\E[17~:k2=\E[18~:k3=\E[19~:k4=\E[20~:k5=\E[21~:\
+       :k6=\E[23~:k7=\E[24~:k8=\E[25~:kD=\E[3~:kH=\E[4~:\
+       :kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=\177:kd=\EOB:\
+       :ke=\E[?1l\E>:kh=\E[1~:kl=\EOD:kr=\EOC:ks=\E[?1h\E=:\
+       :ku=\EOA:le=^H:mb=\E[5m:md=\E[1m:me=\E[m:mr=\E[7m:\
+       :nd=\E[C:nw=\EE:\
+       :r1=\Ec\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:rc=\E8:\
+       :rf=/usr/share/tabset/vt100:sc=\E7:se=\E[27m:sf=\ED:\
+       :so=\E[7m:sr=\EM:st=\EH:ta=^I:ue=\E[24m:up=\E[A:\
+       :us=\E[4m:
+
+pcvt25|dec vt220 emulation with 25 lines:\
+       :co#80:li#25:\
+       :is=\E[1;25r\E[25;1H:tc=pcvtXX:
+pcvt28|dec vt220 emulation with 28 lines:\
+       :co#80:li#28:\
+       :is=\E[1;28r\E[28;1H:tc=pcvtXX:
+pcvt35|dec vt220 emulation with 35 lines:\
+       :co#80:li#35:\
+       :is=\E[1;35r\E[35;1H:tc=pcvtXX:
+pcvt40|dec vt220 emulation with 40 lines:\
+       :co#80:li#40:\
+       :is=\E[1;40r\E[40;1H:tc=pcvtXX:
+pcvt43|dec vt220 emulation with 43 lines:\
+       :co#80:li#43:\
+       :is=\E[1;43r\E[43;1H:tc=pcvtXX:
+pcvt50|dec vt220 emulation with 50 lines:\
+       :co#80:li#50:\
+       :is=\E[1;50r\E[50;1H:tc=pcvtXX:
+
+pcvt25w|dec vt220 emulation with 25 lines and 132 cols:\
+       :co#132:li#25:\
+       :is=\E[1;25r\E[25;1H:tc=pcvtXX:
+pcvt28w|dec vt220 emulation with 28 lines and 132 cols:\
+       :co#132:li#28:\
+       :is=\E[1;28r\E[28;1H:tc=pcvtXX:
+pcvt35w|dec vt220 emulation with 35 lines and 132 cols:\
+       :co#132:li#35:\
+       :is=\E[1;35r\E[35;1H:tc=pcvtXX:
+pcvt40w|dec vt220 emulation with 40 lines and 132 cols:\
+       :co#132:li#40:\
+       :is=\E[1;40r\E[40;1H:tc=pcvtXX:
+pcvt43w|dec vt220 emulation with 43 lines and 132 cols:\
+       :co#132:li#43:\
+       :is=\E[1;43r\E[43;1H:tc=pcvtXX:
+pcvt50w|dec vt220 emulation with 50 lines and 132 cols:\
+       :co#132:li#50:\
+       :is=\E[1;50r\E[50;1H:tc=pcvtXX:
+
+
+origpc3|origibmpc3|IBM PC 386BSD Console:\
+       :am:bw:eo:xo:\
+       :co#80:li#25:\
+       :ac=l\332q\304k\277x\263j\331m\300w\302u\264v\301t\303n\305:\
+       :cd=\E[J:ce=\E[K:cl=\Ec:cm=\E[%i%2;%2H:do=\E[B:\
+       :ho=\E[H:kd=\E[B:kh=\E[Y:kl=\E[D:kr=\E[C:ku=\E[A:\
+       :le=^H:md=\E[7m:me=\E[m\E[1;0x\E[2;7x:nd=\E[C:\
+       :se=\E[1;0x\E[2;7x:sf=\E[S:so=\E[1;7x\E[2;0x:sr=\E[T:\
+       :ue=\E[1;0x\E[2;7x:up=\E[A:us=\E[1;7x\E[2;0x:
+
+oldpc3|oldibmpc3|old IBM PC BSD/386 Console:\
+       :km:\
+       :li#25:\
+       :al=\E[L:bl=^G:cr=^M:dl=\E[M:do=^J:kH=\E[F:kI=\E[L:\
+       :kN=\E[G:kP=\E[I:kb=^H:kd=\E[B:kh=\E[H:kl=\E[D:\
+       :kr=\E[C:ku=\E[A:md=\E[=15F:me=\E[=R:mh=\E[=8F:\
+       :nw=^M^J:sf=^J:ta=^I:
+
+bsdos|BSD/OS console:\
+       :am:bw:eo:km:xo:\
+       :co#80:it#8:li#25:\
+       :AL=\E[%dL:DL=\E[%dM:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:\
+       :UP=\E[%dA:al=\E[L:bl=^G:cd=\E[J:ce=\E[K:cl=\Ec:\
+       :cm=\E[%i%d;%dH:cr=^M:dl=\E[M:do=^J:ho=\E[H:kH=\E[F:\
+       :kI=\E[L:kN=\E[G:kP=\E[I:kb=^H:kd=\E[B:kh=\E[H:\
+       :kl=\E[D:kr=\E[C:ku=\E[A:le=^H:mb=\E[5m:md=\E[1m:\
+       :me=\E[0m:mh=\E[=8F:mr=\E[7m:nd=\E[C:nw=^M^J:rc=\E8:\
+       :sc=\E7:se=\E[0m:sf=^J:so=\E[7m:ta=^I:up=\E[A:
+bsdos-bold|IBM PC BSD/386 Console with bold instead of underline:\
+       :ue=\E[0m:us=\E[1m:tc=bsdos:
+
+pc3|IBM PC BSD/386 Console:\
+       :tc=bsdos:
+ibmpc3|pc3-bold|IBM PC BSD/386 Console with bold instead of underline:\
+       :us=\E[1m:tc=bsdos-bold:
+
+
+vt52|dec vt52:\
+       :co#80:it#8:li#24:\
+       :bl=^G:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :cr=^M:\
+       :do=\EB:ho=\EH:kb=^H:kd=\EB:kl=\ED:kr=\EC:ku=\EA:\
+       :le=\ED:nd=\EC:nw=^M^J:sf=^J:sr=\EI:ta=^I:up=\EA:
+
+vt100|vt100-am|dec vt100 (w/advanced video):\
+       :am:ms:xn:xo:\
+       :co#80:it#8:li#24:vt#3:\
+       :@8=\EOM:DO=\E[%dB:K1=\EOq:K2=\EOr:K3=\EOs:K4=\EOp:\
+       :K5=\EOn:LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:SA=\E[?7h:\
+       :UP=\E[%dA:\
+       :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~:\
+       :ae=^O:as=^N:bl=^G:cb=\E[1K:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:\
+       :ct=\E[3g:do=^J:eA=\E(B\E)0:ho=\E[H:k0=\EOy:k1=\EOP:\
+       :k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOt:k6=\EOu:k7=\EOv:\
+       :k8=\EOl:k9=\EOw:k;=\EOx:kb=^H:kd=\EOB:ke=\E[?1l\E>:\
+       :kl=\EOD:kr=\EOC:ks=\E[?1h\E=:ku=\EOA:le=^H:mb=\E[5m:\
+       :md=\E[1m:me=\E[m\017:mr=\E[7m:nd=\E[C:\
+       :r2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:rc=\E8:\
+       :..sa=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;:\
+       :sc=\E7:se=\E[m:sf=^J:so=\E[7m:sr=\EM:st=\EH:ta=^I:\
+       :ue=\E[m:up=\E[A:us=\E[4m:
+vt100nam|vt100-nam|vt100 no automargins:\
+       :am@:xn@:tc=vt100-am:
+
+vt100-w|vt100-w-am|dec vt100 132 cols (w/advanced video):\
+       :co#132:li#24:\
+       :r2=\E>\E[?3h\E[?4l\E[?5l\E[?8h:tc=vt100-am:
+vt100-w-nam|vt100-nam-w|dec vt100 132 cols (w/advanced video no automargin):\
+       :co#132:li#14:vt@:\
+       :r2=\E>\E[?3h\E[?4l\E[?5l\E[?8h:tc=vt100-nam:
+
+vt100-nav|vt100 without advanced video option:\
+       :sg#1:\
+       :mb@:md@:me@:mr@:sa@:se=\E[m:so=\E[7m:ue@:us@:tc=vt100:
+vt100-nav-w|vt100-w-nav|dec vt100 132 cols 14 lines (no advanced video option):\
+       :co#132:li#14:tc=vt100-nav:
+
+vt100-s|vt100-s-top|vt100-top-s|vt100 for use with top sysline:\
+       :es:hs:\
+       :li#23:\
+       :cl=\E[2;1H\E[J:cm=\E[%i%+^A;%dH:cs=\E[%i%i%d;%dr:\
+       :ds=\E7\E[1;24r\E8:fs=\E8:ho=\E[2;1H:\
+       :is=\E7\E[2;24r\E8:ts=\E7\E[1;%p1%dH\E[1K:tc=vt100-am:
+
+vt100-s-bot|vt100-bot-s|vt100 for use with bottom sysline:\
+       :es:hs:\
+       :li#23:\
+       :ds=\E7\E[1;24r\E8:fs=\E8:is=\E[1;23r\E[23;1H:\
+       :ts=\E7\E[24;%p1%dH\E[1K:tc=vt100-am:
+
+vt102|dec vt102:\
+       :mi:\
+       :al=\E[L:dc=\E[P:dl=\E[M:ei=\E[4l:im=\E[4h:tc=vt100:
+vt102-w|dec vt102 in wide mode:\
+       :li#132:\
+       :r3=\E[?3h:tc=vt102:
+
+vt102-nsgr|vt102 no sgr (use if you see snowflakes after highlight changes):\
+       :me=\E[m:sa@:tc=vt102:
+
+vt125|vt125 graphics terminal:\
+       :cl=\E[H\E[2J\EPpS(E)\E\\:tc=vt100:
+
+vt131|dec vt131:\
+       :am:xn:\
+       :co#80:it#8:li#24:vt#3:\
+       :RA=\E[?7h:bl=^G:cd=50\E[J:ce=3\E[K:cl=50\E[;H\E[2J:\
+       :cm=5\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:do=^J:ho=\E[H:\
+       :is=\E[1;24r\E[24;1H:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\
+       :kb=^H:kd=\EOB:ke=\E[?1l\E>:kl=\EOD:kr=\EOC:\
+       :ks=\E[?1h\E=:ku=\EOA:le=^H:mb=2\E[5m:md=2\E[1m:\
+       :me=2\E[m:mr=2\E[7m:nd=2\E[C:nw=^M^J:\
+       :r1=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:rc=\E8:sc=\E7:\
+       :se=2\E[m:so=2\E[7m:sr=5\EM:ta=^I:ue=2\E[m:up=2\E[A:\
+       :us=2\E[4m:
+
+vt132|DEC vt132:\
+       :xn:\
+       :al=\E[L:dc=\E[P:dl=\E[M:ei=\E[4h:im=\E[4l:ip=:sf=\n:tc=vt100:
+
+vt220|vt200|DEC VT220 in vt100 emulation mode:\
+       :am:mi:xn:xo:\
+       :co#80:li#24:vt#3:\
+       :@7=\E[4~:RA=\E[?7l:SA=\E[?7h:\
+       :ac=kkllmmjjnnwwqquuttvvxx:ae=\E(B:al=\E[L:as=\E(0:\
+       :bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:\
+       :cr=^M:cs=\E[%i%d;%dr:dc=\E[P:dl=\E[M:do=\E[B:\
+       :ei=\E[4l:ho=\E[H:if=/usr/lib/tabset/vt100:im=\E[4h:\
+       :is=\E[1;24r\E[24;1H:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\
+       :k5=\E[17~:k6=\E[18~:k7=\E[19~:k8=\E[20~:k9=\E[21~:\
+       :k;=\E[29~:kD=\E[3~:kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=^H:\
+       :kd=\E[B:kh=\E[1~:kl=\E[D:kr=\E[C:ku=\E[A:le=^H:\
+       :mb=\E[5m:md=\E[1m:me=\E[m:mr=\E[7m:nd=\E[C:\
+       :r2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:rc=\E8:\
+       :rf=/usr/lib/tabset/vt100:\
+       :..sa=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;:\
+       :sc=\E7:se=\E[27m:sf=20\ED:so=\E[7m:sr=14\EM:ta=^I:\
+       :ue=\E[24m:up=\E[A:us=\E[4m:ve=\E[?25h:vi=\E[?25l:
+vt220-w|vt200-w|DEC vt220 in wide mode:\
+       :co#132:\
+       :r3=\E[?3h:tc=vt220:
+
+vt220d|DEC VT220 in vt100 mode with DEC function key labeling:\
+       :F1=\E[23~:F2=\E[24~:F3=\E[25~:F4=\E[26~:F5=\E[28~:\
+       :F6=\E[29~:F7=\E[31~:F8=\E[32~:F9=\E[33~:FA=\E[34~:\
+       :k5@:k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:\
+       :k;=\E[21~:tc=vt220:
+
+vt220-nam|v200-nam|VT220 in vt100 mode with no auto margins:\
+       :am@:\
+       :r2=\E>\E[?3l\E[?4l\E[?5l\E[?7l\E[?8h:tc=vt220:
+
+vt220-8|dec vt220 8 bit terminal:\
+       :am:mi:ms:xn:xo:\
+       :co#80:it#8:li#24:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:ae=^O:al=\E[L:as=^N:\
+       :bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:\
+       :cr=^M:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=^J:\
+       :ec=\E[%dX:ei=\E[4l:ho=\E[H:if=/usr/lib/tabset/vt100:\
+       :im=\E[4h:is=\E[?7h\E[>\E[?1h\E F\E[?4l:k1=\EOP:\
+       :k2=\EOQ:k3=\EOR:k4=\EOS:k6=\E[17~:k7=\E[18~:\
+       :k8=\E[19~:k9=\E[20~:kI=\E[2~:kN=\E[6~:kP=\E[5~:\
+       :kb=^H:kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:ku=\E[A:le=^H:\
+       :mb=\E[5m:md=\E[1m:me=\E[m:mr=\E[7m:nd=\E[C:nw=\EE:\
+       :rc=\E8:sc=\E7:se=\E[27m:sf=\ED:so=\E[7m:sr=\EM:\
+       :st=\EH:ta=^I:ue=\E[24m:up=\E[A:us=\E[4m:\
+       :vb=\E[?5h\E[?5l:
+
+
+vt320nam|v320n|DEC VT320 in vt100 emul. mode with NO AUTO WRAP mode:\
+       :am@:\
+       :r2=\E>\E[?3l\E[?4l\E[?5l\E[?7l\E[?8h:tc=vt220:
+
+vt320|vt300|dec vt320 7 bit terminal:\
+       :am:es:hs:mi:ms:xn:\
+       :co#80:li#24:ws#80:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :K1=\EOw:K2=\EOu:K3=\EOy:K4=\EOq:K5=\EOs:LE=\E[%dD:\
+       :RI=\E[%dC:UP=\E[%dA:ae=\E(B:al=\E[L:as=\E(0:bl=^G:\
+       :cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=^M:\
+       :cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=^J:\
+       :ec=\E[%dX:ei=\E[4l:ho=\E[H:im=\E[4h:\
+       :is=\E>\E[?3l\E[?4l\E[5?l\E[?7h\E[?8h\E[1;24r\E[24;1H:\
+       :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k6=\E[17~:k7=\E[18~:\
+       :k8=\E[19~:k9=\E[20~:kD=\E[3~:kI=\E[2~:kN=\E[6~:\
+       :kP=\E[5~:kb=\177:kd=\EOB:ke=\E[?1l\E>:kh=\E[1~:\
+       :kl=\EOD:kr=\EOC:ks=\E[?1h\E=:ku=\EOA:le=^H:mb=\E[5m:\
+       :md=\E[1m:me=\E[m:mr=\E[7m:nd=\E[C:nw=\EE:rc=\E8:\
+       :sc=\E7:se=\E[m:sf=\ED:so=\E[7m:sr=\EM:st=\EH:ta=^I:\
+       :ts=\E[1$}\E[H\E[K:ue=\E[m:up=\E[A:us=\E[4m:\
+       :ve=\E[?25h:vi=\E[?25l:
+vt320-nam|vt300-nam|dec vt320 7 bit terminal with no am to make SAS happy:\
+       :am@:\
+       :is=\E>\E[?3l\E[?4l\E[5?l\E[?7l\E[?8h\E[1;24r\E[24;1H:\
+       :r2=\E>\E[?3l\E[?4l\E[5?l\E[?7l\E[?8h\E[1;24r\E[24;1H:tc=vt320:
+vt320-w|vt300-w|dec vt320 wide 7 bit terminal:\
+       :co#132:ws#132:\
+       :is=\E>\E[?3h\E[?4l\E[5?l\E[?7h\E[?8h\E[1;24r\E[24;1H:\
+       :r2=\E>\E[?3h\E[?4l\E[5?l\E[?7h\E[?8h\E[1;24r\E[24;1H:tc=vt320:
+vt320-w-nam|vt300-w-nam|dec vt320 wide 7 bit terminal with no am:\
+       :am@:\
+       :is=\E>\E[?3h\E[?4l\E[5?l\E[?7l\E[?8h\E[1;24r\E[24;1H:\
+       :r2=\E>\E[?3h\E[?4l\E[5?l\E[?7l\E[?8h\E[1;24r\E[24;1H:tc=vt320-w:
+
+vt340|dec-vt340|vt330|dec-vt330|dec vt340 graphics terminal with 24 line page:\
+       :am:es:hs:mi:ms:xn:xo:\
+       :co#80:it#8:li#24:vt#3:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:SA=\E[?7h:UP=\E[%dA:\
+       :ae=^O:al=\E[L:as=^N:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
+       :cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:ct=\E[3g:\
+       :dc=\E[P:dl=\E[M:do=^J:ds=\E[2$~\r\E[1$}\E[K\E[$}:\
+       :ei=\E[4l:fs=\E[$}:ho=\E[H:im=\E[4h:\
+       :is=\E<\E F\E>\E[?1h\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r\E[24;1H:\
+       :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k6=\E[17~:k7=\E[18~:\
+       :k8=\E[19~:k9=\E[20~:kb=^H:kd=\EOB:ke=\E[?1l\E>:\
+       :kl=\EOD:kr=\EOC:ks=\E[?1h\E=:ku=\EOA:l1=pf1:l2=pf2:\
+       :l3=pf3:l4=pf4:le=^H:mb=\E[5m:md=\E[1m:me=\E[m:\
+       :mr=\E[7m:nd=\E[C:nw=^M\ED:r1=\E[?3l:rc=\E8:\
+       :rf=/usr/lib/tabset/vt100:sc=\E7:se=\E[27m:sf=\ED:\
+       :so=\E[7m:sr=\EM:st=\EH:ta=^I:\
+       :ts=\E[2$~\E[1$}\E[1;%dH:ue=\E[24m:up=\E[A:us=\E[4m:\
+       :vb=200\E[?5h\E[?5l:ve=\E[?25h:vi=\E[?25l:vs=\E[?25h:
+
+vt400|vt400-24|dec-vt400|dec vt400 24x80 column autowrap:\
+       :am:es:hs:mi:ms:xn:xo:\
+       :co#80:it#8:li#24:vt#3:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:SA=\E[?7h:UP=\E[%dA:\
+       :ae=^O:al=\E[L:as=^N:cd=10\E[J:ce=4\E[K:\
+       :cl=10\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:\
+       :ct=\E[3g:dc=\E[P:dl=\E[M:do=^J:\
+       :ds=\E[2$~\r\E[1$}\E[K\E[$}:ei=\E[4l:fs=\E[$}:\
+       :ho=\E[H:ic=\E[@:im=\E[4h:\
+       :is=\E<\E F\E>\E[?1h\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r\E[24;1H:\
+       :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k6=\E[17~:k7=\E[18~:\
+       :k8=\E[19~:k9=\E[20~:kb=^H:kd=\EOB:ke=\E[?1l\E>:\
+       :kl=\EOD:kr=\EOC:ks=\E[?1h\E=:ku=\EOA:l1=pf1:l2=pf2:\
+       :l3=pf3:l4=pf4:le=^H:mb=\E[5m:md=\E[1m:me=\E[m:\
+       :mr=\E[7m:nd=\E[C:nw=^M\ED:r1=\E<\E[?3l\E[!p\E[?7h:\
+       :rc=\E8:rf=/usr/lib/tabset/vt100:sc=\E7:se=\E[27m:\
+       :sf=\ED:so=\E[7m:sr=\EM:st=\EH:ta=^I:\
+       :ts=\E[2$~\E[1$}\E[1;%dH:ue=\E[24m:up=\E[A:us=\E[4m:\
+       :vb=200\E[?5h\E[?5l:ve=\E[?25h:vi=\E[?25l:vs=\E[?25h:
+
+vt420|DEC VT420:\
+       :am:mi:xn:xo:\
+       :co#80:li#24:vt#3:\
+       :*6=\E[4~:@0=\E[1~:RA=\E[?7l:\
+       :S5=\E[?0;0r\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:\
+       :SA=\E[?7h:\
+       :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~:\
+       :ae=\E(B:al=\E[L:as=\E(0:bl=^G:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:\
+       :dc=\E[P:dl=\E[M:do=\E[B:ei=\E[4l:ho=\E[H:\
+       :i2=\E[?67h\E[64;1"p:if=/usr/lib/tabset/vt100:\
+       :im=\E[4h:is=\E[1;24r\E[24;1H:k1=\EOP:k2=\EOQ:\
+       :k3=\EOR:k4=\EOS:k5=\E[17~:k6=\E[18~:k7=\E[19~:\
+       :k8=\E[20~:k9=\E[21~:k;=\E[29~:kD=\E[3~:kI=\E[2~:\
+       :kN=\E[6~:kP=\E[5~:kb=^H:kd=\E[B:ke=\E>:kl=\E[D:\
+       :kr=\E[C:ks=\E=:ku=\E[A:le=^H:mb=\E[5m:md=\E[1m:\
+       :me=\E[m:mr=\E[7m:nd=\E[C:r3=\E[?67h\E[64;1"p:rc=\E8:\
+       :rf=/usr/lib/tabset/vt100:\
+       :..sa=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;:\
+       :se=\E[m:sf=\ED:so=\E[7m:sr=\EM:ta=^I:ue=\E[m:\
+       :up=\E[A:us=\E[4m:
+
+vt420pc|DEC VT420 w/PC keyboard:\
+       :@7=\E[4~:F1=\E[23~:F2=\E[24~:F3=\E[11;2~:\
+       :F4=\E[12;2~:F5=\E[13;2~:F6=\E[14;2~:F7=\E[15;2~:\
+       :F8=\E[17;2~:F9=\E[18;2~:FA=\E[19;2~:FB=\E[20;2~:\
+       :FC=\E[21;2~:FD=\E[23;2~:FE=\E[24;2~:FF=\E[23~:\
+       :FG=\E[24~:FH=\E[25~:FI=\E[26~:FJ=\E[28~:FK=\E[29~:\
+       :FL=\E[31~:FM=\E[32~:FN=\E[33~:FO=\E[34~:FP=\E[35~:\
+       :FQ=\E[36~:FR=\E[23;2~:FS=\E[24;2~:FT=\E[25;2~:\
+       :FU=\E[26;2~:FV=\E[28;2~:FW=\E[29;2~:FX=\E[31;2~:\
+       :FY=\E[32;2~:FZ=\E[33;2~:Fa=\E[34;2~:Fb=\E[35;2~:\
+       :Fc=\E[36;2~:S6=USR_TERM\072vt420pcdos\072:k1=\E[11~:\
+       :k2=\E[12~:k3=\E[13~:k4=\E[14~:k5=\E[15~:k6=\E[17~:\
+       :k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:kD=\177:\
+       :kh=\E[H:\
+       :..px=\EP1;1|%?%{16}%p1%>%t%{0}%e%{21}%p1%>%t%{1}%e%{25}%p1%>%t%{2}%e%{27}%p1%>%t%{3}%e%{30}%p1%>%t%{4}%e%{5}%;%p1%+%d/%p2%s\E\\:tc=vt420:
+
+vt420pcdos|DEC VT420 w/PC for DOS Merge:\
+       :li#25:\
+       :S1=%?%p2%{19}%=%t\E\023\021%e%p2%{32}%<%t\E%p2%c%e%p2%{127}%=%t\E\177%e%p2%c%;:\
+       :S4=\E[?1;2r\E[34h:\
+       :S5=\E[?0;0r\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:S6@:\
+       :me=\E[m:sa@:tc=vt420pc:
+
+vt420f|DEC VT420 with VT kbd; VT400 mode; F1-F5 used as Fkeys:\
+       :F1=\E[23~:F2=\E[24~:F3=\E[25~:F4=\E[26~:F5=\E[28~:\
+       :F6=\E[29~:F7=\E[31~:F8=\E[32~:F9=\E[33~:FA=\E[34~:\
+       :k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~:k5=\E[15~:\
+       :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:\
+       :kD=\177:kh=\E[H:l1=\EOP:l2=\EOQ:l3=\EOR:l4=\EOS:tc=vt420:
+
+vt510|DEC VT510:\
+       :tc=vt420:
+vt510pc|DEC VT510 w/PC keyboard:\
+       :tc=vt420pc:
+vt510pcdos|DEC VT510 w/PC for DOS Merge:\
+       :tc=vt420pcdos:
+
+vt520|DEC VT520:\
+       :am:mi:xn:xo:\
+       :co#80:li#24:vt#3:\
+       :*6=\E[4~:@0=\E[1~:RA=\E[?7l:\
+       :S5=\E[?0;0r\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:\
+       :SA=\E[?7h:\
+       :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~:\
+       :ae=\E(B:al=\E[L:as=\E(0:bl=^G:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:\
+       :dc=\E[P:dl=\E[M:do=\E[B:ei=\E[4l:ho=\E[H:\
+       :i2=\E[?67h\E[64;1"p:if=/usr/lib/tabset/vt100:\
+       :im=\E[4h:is=\E[1;24r\E[24;1H:k0=\E[29~:k1=\EOP:\
+       :k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[17~:k6=\E[18~:\
+       :k7=\E[19~:k8=\E[20~:k9=\E[21~:k;=\E[29~:kD=\E[3~:\
+       :kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=^H:kd=\E[B:kl=\E[D:\
+       :kr=\E[C:ku=\E[A:le=^H:mb=\E[5m:md=\E[1m:me=\E[m:\
+       :mr=\E[7m:nd=\E[C:\
+       :..px=\EP1;1|%?%{16}%p1%>%t%{0}%e%{21}%p1%>%t%{1}%e%{25}%p1%>%t%{2}%e%{27}%p1%>%t%{3}%e%{30}%p1%>%t%{4}%e%{5}%;%p1%+%d/%p2%s\E\\:\
+       :r3=\E[?67h\E[64;1"p:rc=\E8:rf=/usr/lib/tabset/vt100:\
+       :..sa=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;:\
+       :se=\E[m:sf=\ED:so=\E[7m:sr=\EM:ta=^I:ue=\E[m:\
+       :up=\E[A:us=\E[4m:
+
+vt525|DEC VT525:\
+       :am:mi:xn:xo:\
+       :co#80:li#24:vt#3:\
+       :*6=\E[4~:@0=\E[1~:RA=\E[?7l:\
+       :S5=\E[?0;0r\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:\
+       :SA=\E[?7h:\
+       :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~:\
+       :ae=\E(B:al=\E[L:as=\E(0:bl=^G:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:\
+       :dc=\E[P:dl=\E[M:do=\E[B:ei=\E[4l:ho=\E[H:\
+       :i2=\E[?67h\E[64;1"p:if=/usr/lib/tabset/vt100:\
+       :im=\E[4h:is=\E[1;24r\E[24;1H:k0=\E[29~:k1=\EOP:\
+       :k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[17~:k6=\E[18~:\
+       :k7=\E[19~:k8=\E[20~:k9=\E[21~:k;=\E[29~:kD=\E[3~:\
+       :kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=^H:kd=\E[B:kl=\E[D:\
+       :kr=\E[C:ku=\E[A:le=^H:mb=\E[5m:md=\E[1m:me=\E[m:\
+       :mr=\E[7m:nd=\E[C:\
+       :..px=\EP1;1|%?%{16}%p1%>%t%{0}%e%{21}%p1%>%t%{1}%e%{25}%p1%>%t%{2}%e%{27}%p1%>%t%{3}%e%{30}%p1%>%t%{4}%e%{5}%;%p1%+%d/%p2%s\E\\:\
+       :r3=\E[?67h\E[64;1"p:rc=\E8:rf=/usr/lib/tabset/vt100:\
+       :..sa=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;:\
+       :se=\E[m:sf=\ED:so=\E[7m:sr=\EM:ta=^I:ue=\E[m:\
+       :up=\E[A:us=\E[4m:
+
+
+dec-vt100|EWAN telnet's vt100 emulation:\
+       :tc=vt102-nsgr:
+
+z340|zstem vt340 terminal emulator 132col 42line:\
+       :li#42:\
+       :is=\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h\E[1;42r\E[42;1H:\
+       :r2=\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h\E[1;42r\E[42;1H:tc=vt320-w:
+z340-nam|zstem vt340 terminal emulator 132col 42line:\
+       :am@:\
+       :is=\E>\E[?3h\E[?4l\E[?5l\E[?7l\E[?8h\E[1;42r\E[42;1H:\
+       :r2=\E>\E[?3h\E[?4l\E[?5l\E[?7l\E[?8h\E[1;42r\E[42;1H:tc=z340:
+
+
+x10term|vs100-x10|xterm terminal emulator (X10 window system):\
+       :am:km:mi:ms:xn:xo:\
+       :co#80:it#8:li#65:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:RA=\E[?7l:SA=\E[?7h:\
+       :al=\E[L:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:\
+       :cs=\E[%i%d;%dr:dc=\E[P:dl=\E[M:do=^J:ei=\E[4l:\
+       :ho=\E[H:im=\E[4h:is=\E\E[m\E[?7h\E[?1;4l:k1=\EOP:\
+       :k2=\EOQ:k3=\EOR:k4=\EOS:kb=^H:kd=\EOB:ke=\E[?1l\E>:\
+       :kl=\EOD:kr=\EOC:ks=\E[?1h\E=:ku=\EOA:le=^H:md=\E[1m:\
+       :me=\E[m:mr=\E[7m:nd=\E[C:\
+       :rs=\E[r\E<\E[m\E[H\E[2J\E[?7h\E[?1;3;4;6l:se=\E[m:\
+       :sf=^J:so=\E[7m:sr=\EM:ta=^I:ue=\E[m:up=\E[A:\
+       :us=\E[4m:
+xterm|vs100|xterm terminal emulator (X11R6 Window System):\
+       :am:km:mi:ms:xn:xo:\
+       :co#80:it#8:li#65:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:ae=^O:al=\E[L:as=^N:\
+       :bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:\
+       :cr=^M:cs=\E[%i%d;%dr:ct=\E[3k:dc=\E[P:dl=\E[M:do=^J:\
+       :ei=\E[4l:ho=\E[H:ic=\E[@:im=\E[4h:\
+       :is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l:\
+       :k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~:k5=\E[15~:\
+       :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:kI=\E[2~:\
+       :kN=\E[6~:kP=\E[5~:kb=^H:kd=\EOB:ke=\E[?1l\E>:\
+       :kh=\E[@:kl=\EOD:kr=\EOC:ks=\E[?1h\E=:ku=\EOA:le=^H:\
+       :md=\E[1m:me=\E[m:mr=\E[7m:nd=\E[C:rc=\E8:sc=\E7:\
+       :se=\E[m:sf=^J:so=\E[7m:sr=\EM:ta=^I:\
+       :te=\E[2J\E[?47l\E8:ti=\E7\E[?47h:ue=\E[m:up=\E[A:\
+       :us=\E[4m:
+xterm-bold|xterm terminal emulator (X11R6 Window System) standout w/bold:\
+       :so=\E[1m:tc=xterm:
+xterms|vs100s|xterm terminal emulator (small screen 24x80):\
+       :co#80:li#24:tc=xterm:
+kterm|kterm kanji terminal emulator (X window system):\
+       :es:hs:\
+       :cs=\E[%i%d;%dr:ds=\E[?H:fs=\E[?F:rc=\E8:sc=\E7:\
+       :ts=\E[?E\E[?%i%dT:tc=xterm:
+
+xterm-nic|xterm with ich/ich1 suppressed for non-curses programs:\
+       :IC@:ei=:ic@:im=:tc=xterm:
+
+xterm-color|xterm with color support:\
+       :tc=xterm:tc=klone+color:
+
+xterm-pcolor|xterm with color used for highlights and status line:\
+       :hs:\
+       :ws#40:\
+       :ds=\E]0;\007:fs=^G:md=\E[1m\E[43m:mr=\E[7m\E[34m:\
+       :so=\E[7m\E[31m:ts=\E]0;:us=\E[4m\E[42m:tc=xterm:
+
+hpterm|X-hpterm|hp X11 terminal emulator:\
+       :am:da:db:mi:xs:\
+       :Nl#8:co#80:lh#2:li#24:lm#0:lw#8:pb#9600:sg#0:\
+       :LF=\E&j@:LO=\E&jB:ae=^O:al=\EL:as=^N:bl=^G:bt=\Ei:\
+       :cd=\EJ:ce=\EK:ch=\E&a%dC:cl=\E&a0y0C\EJ:\
+       :cm=\E&a%dy%dC:cr=^M:ct=\E3:cv=\E&a%dY:dc=\EP:dl=\EM:\
+       :do=\EB:ei=\ER:im=\EQ:k1=\Ep:k2=\Eq:k3=\Er:k4=\Es:\
+       :k5=\Et:k6=\Eu:k7=\Ev:k8=\Ew:kA=\EL:kC=\EJ:kD=\EP:\
+       :kE=\EK:kF=\ES:kH=\EF:kI=\EQ:kL=\EM:kM=\ER:kN=\EU:\
+       :kP=\EV:kR=\ET:kS=\EJ:kT=\E1:ka=\E3:kb=^H:kd=\EB:\
+       :ke=\E&s0A:kh=\Eh:kl=\ED:kr=\EC:ks=\E&s1A:kt=\E2:\
+       :ku=\EA:le=^H:md=\E&dB:me=\E&d@:mh=\E&dH:ml=\El:\
+       :mr=\E&dB:mu=\Em:nd=\EC:..pk=\E&f%p1%dk%p2%l%dL%p2%s:\
+       :..pl=\E&f1a%p1%dk%p2%l%dL%p2%s:\
+       :..pn=\E&f%p1%dk%p2%l%dd0L%p2%s:\
+       :..px=\E&f2a%p1%dk%p2%l%dL%p2%s:\
+       :..sa=\E&d%?%p7%t%'s'%c%;%p1%p3%|%p6%|%{2}%*%p2%{4}%*%+%p4%+%p5%{8}%*%+%'@'%+%c%?%p9%t%'\016'%c%e%'\017'%c%;:\
+       :se=\E&d@:sf=^J:so=\E&dJ:sr=\ET:st=\E1:ta=^I:\
+       :ue=\E&d@:up=\EA:us=\E&dD:
+
+emu|emu native mode:\
+       :mi:ms:xo:\
+       :Co#15:co#80:it#8:li#24:pa#64:vt#200:\
+       :*6=\Esel:@0=\Efind:@8=^M:\
+       :AB=\Es%i%p1%d; setaf=\Er%i%p1%d;:AL=\EQ%d;:\
+       :DC=\EI%d;:DL=\ER%d;:DO=\Ep%d;:F1=\EF11:F2=\EF12:\
+       :F3=\EF13:F4=\EF14:F5=\EF15:F6=\EF16:F7=\EF17:\
+       :F8=\EF18:F9=\EF19:FA=\EF20:LE=\Eq-%d;:RI=\Eq%d;:\
+       :UP=\Ep-%d;:\
+       :ac=a\202f\260g261j\213k\214l\215m\216n\217o\220q\222s\224t\225u\226v\227w\230x\231~\244:\
+       :ae=\200:al=\EQ1;:as=\200:bl=^G:cb=\EL:ce=\EK:\
+       :cl=\EP\EE0;0;:cm=\EE%d;%d;:cr=^M:cs=\Ek%d;%d;:\
+       :ct=\Ej:dc=\EI1;:dl=\ER1;:do=\EB:eA=\200:\
+       :ec=\Ej%d;\ned=\EN:ei=\EX:ho=\EE0;0;:if=\200:im=\EY:\
+       :is=\ES\Er0;\Es0;:k0=\EF00:k1=\EF01:k2=\EF02:\
+       :k3=\EF03:k4=\EF04:k5=\EF05:k6=\EF06:k7=\EF07:\
+       :k8=\EF08:k9=\EF09:k;=\EF10:kD=\177:kI=\Eins:\
+       :kN=\Enext:kP=\Eprior:kb=^H:kd=\EB:kl=\EC:kr=\ED:\
+       :ku=\EA:le=^H:mb=\ES\EW:md=\ES\EU:me=\ES:mr=\ES\ET:\
+       :nd=\ED:oc=\Es0;\Er0;:r2=\ES\Es0;\Er0;:se=\ES:sf=\EG:\
+       :so=\ES\ET:sr=\EF:st=\Eh:ta=^I:ue=\ES:up=\EA:\
+       :us=\ES\EV:ve=\Ea:vi=\EZ:vs=\Ea:
+
+
+cbunix|cb unix virtual terminal:\
+       :am:da:db:\
+       :co#80:li#24:lm#0:\
+       :al=\EP:bl=^G:cd=\EL:ce=\EK:cl=\EL:cm=\EG%r%.%.:\
+       :cr=^M:dc=\EM:dl=\EN:do=^J:ei=:ic=\EO:im=:kd=\EB:\
+       :kh=\EE:kl=\ED:kr=\EC:ku=\EA:le=^H:nd=\EC:se=\Eb^D:\
+       :sf=^J:so=\Ea^D:ue=\Eb^A:up=\EA:us=\Ea^A:
+vremote|virtual remote terminal:\
+       :am@:\
+       :co#79:tc=cbunix:
+pty|4bsd pseudo teletype:\
+       :cm=\EG%+ %+ :se=\Eb$:so=\Ea$:ue=\Eb!:us=\Ea!:tc=cbunix:
+
+
+screen|VT 100/ANSI X3.64 virtual terminal:\
+       :am:km:mi:ms:xn:\
+       :co#80:it#8:li#24:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:F1=\E[23~:\
+       :F2=\E[24~:IC=\E[%d@:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:\
+       :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~..--++\054\054hhII00:\
+       :ae=^O:al=\E[L:as=^N:bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:\
+       :ct=\E[3g:dc=\E[P:dl=\E[M:do=^J:ei=\E[4l:ho=\E[H:\
+       :im=\E[4h:is=\E)0:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\
+       :k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:\
+       :k;=\E[21~:kD=\E[3~:kH=\E[4~:kI=\E[2~:kN=\E[6~:\
+       :kP=\E[5~:kb=^H:kd=\EOB:ke=\E[?1l\E>:kh=\E[1~:\
+       :kl=\EOD:kr=\EOC:ks=\E[?1h\E=:ku=\EOA:le=^H:mb=\E[5m:\
+       :md=\E[1m:me=\E[m:mr=\E[7m:nd=\E[C:nw=\EE:r2=\Ec:\
+       :rc=\E8:sc=\E7:se=\E[23m:sf=^J:so=\E[3m:sr=\EM:\
+       :st=\EH:ta=^I:ue=\E[24m:up=\EM:us=\E[4m:
+screen-w|VT 100/ANSI X3.64 virtual terminal with 132 cols:\
+       :co#132:tc=screen:
+
+screen2|VT 100/ANSI X3.64 virtual terminal:\
+       :co#80:it#8:li#24:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:al=\E[L:bt=\E[Z:\
+       :cd=\E[J:ce=\E[K:cl=\E[2J\E[H:cm=\E[%i%d;%dH:cr=^M:\
+       :ct=\E[3g:dc=\E[P:dl=\E[M:do=\E[B:ei=\E[4l:ic=:\
+       :im=\E[4h:k0=\E~:k1=\ES:k2=\ET:k3=\EU:k4=\EV:k5=\EW:\
+       :k6=\EP:k7=\EQ:k8=\ER:k9=\E0I:kb=^H:kd=\EB:kh=\EH:\
+       :kl=\ED:kr=\EC:ku=\EA:le=^H:nd=\E[C:nw=^M^J:r1=\Ec:\
+       :rc=\E8:sc=\E7:se=\E[23m:sf=^J:so=\E[3m:sr=\EM:\
+       :st=\EH:ta=^I:ue=\E[24m:up=\E[A:us=\E[4m:
+screen3|VT 100/ANSI X3.64 virtual terminal:\
+       :km:mi:ms:\
+       :co#80:it#8:li#24:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:al=\E[L:bl=^G:bt=\E[Z:\
+       :cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:\
+       :cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=^J:\
+       :ei=\E[4l:ho=\E[H:im=\E[4h:is=\E)0:k1=\EOP:k2=\EOQ:\
+       :k3=\EOR:k4=\EOS:kb=^H:kd=\EOB:ke=\E>:kl=\EOD:\
+       :kr=\EOC:ks=\E=:ku=\EOA:le=^H:mb=\E[5m:md=\E[1m:\
+       :me=\E[m:mr=\E[7m:nd=\E[C:nw=\EE:r1=\Ec:rc=\E8:\
+       :sc=\E7:se=\E[23m:sf=^J:so=\E[3m:sr=\EM:st=\EH:ta=^I:\
+       :ue=\E[24m:up=\EM:us=\E[4m:
+
+
+
+oldsun|Sun Microsystems Workstation console:\
+       :am:km:mi:ms:\
+       :co#80:it#8:li#34:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:IC=\E[%d@:al=\E[L:\
+       :bl=^G:cd=\E[J:ce=\E[K:cl=^L:cm=\E[%i%d;%dH:cr=^M:\
+       :dc=\E[P:dl=\E[M:do=\E[B:ei=:i1=\E[1r:ic=\E[@:im=:\
+       :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:kd=\E[B:kh=\E[H:\
+       :kl=\E[D:kr=\E[C:ku=\E[A:le=^H:nd=\E[C:se=\E[m:sf=^J:\
+       :so=\E[7m:ta=^I:up=\E[A:
+sun|sun1|sun2|Sun Microsystems Inc. workstation console:\
+       :am:km:ms:\
+       :co#80:li#35:\
+       :%7=\E[194z:&5=\E[193z:&8=\E[195z:@7=\E[220z:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:F1=\E[234z:F2=\E[235z:\
+       :IC=\E[%d@:K2=\E[218z:al=\E[L:bl=^G:cd=\E[J:ce=\E[K:\
+       :cl=^L:cm=\E[%i%d;%dH:cr=^M:dc=\E[P:dl=\E[M:do=^J:\
+       :ei=:ic=\E[@:im=:k1=\E[224z:k2=\E[225z:k3=\E[226z:\
+       :k4=\E[227z:k5=\E[228z:k6=\E[229z:k7=\E[230z:\
+       :k8=\E[231z:k9=\E[232z:k;=\E[233z:kD=\177:kN=\E[222z:\
+       :kP=\E[216z:kb=^H:kd=\E[B:kh=\E[214z:kl=\E[D:kr=\E[C:\
+       :ku=\E[A:le=^H:md=\E[1m:me=\E[m:mr=\E[7m:nd=\E[C:\
+       :r2=\E[s:\
+       :..sa=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;m:\
+       :se=\E[m:sf=^J:so=\E[7m:ta=^I:ue=\E[m:up=\E[A:\
+       :us=\E[4m:
+sun-s|Sun Microsystems Workstation window with status line:\
+       :hs:\
+       :li#34:\
+       :ds=\E]l\E\\:fs=\E\\:ts=\E]l:tc=sun:
+sun-e-s|sun-s-e|Sun Microsystems Workstation with status hacked for emacs:\
+       :hs:\
+       :ds=\E]l\E\\:fs=\E\\:ts=\E]l:tc=sun-e:
+sun-48|Sun 48-line window:\
+       :co#80:li#48:tc=sun:
+sun-34|Sun 34-line window:\
+       :co#80:li#34:tc=sun:
+sun-24|Sun 24-line window:\
+       :co#80:li#24:tc=sun:
+sun-17|Sun 17-line window:\
+       :co#80:li#17:tc=sun:
+sun-12|Sun 12-line window:\
+       :co#80:li#12:tc=sun:
+sun-1|Sun 1-line window for sysline:\
+       :es:hs:\
+       :co#80:li#1:\
+       :ds=^L:fs=\E[K:ts=^M:tc=sun:
+sun-e|sun-nic|sune|Sun Microsystems Workstation without insert character:\
+       :ei@:ic@:im@:tc=sun:
+sun-c|sun-cmd|Sun Microsystems Workstation console with scrollable history:\
+       :te=\E[>4h:ti=\E[>4l:tc=sun:
+
+
+wsiris|iris40|iris emulating a 40 line visual 50 (approximately):\
+       :am:\
+       :co#80:it#8:li#40:\
+       :al=\EL:cd=\EJ:ce=\EK:cl=\Ev:cm=\EY%+ %+ :dl=\EM:\
+       :ho=\EH:is=\E7B0\E7F7\E7C2\E7R3:k0=\E0:k1=\E1:k2=\E2:\
+       :k3=\E3:k4=\E4:k5=\E5:k6=\E6:k7=\E7:k8=\E8:k9=\E9:\
+       :kd=\EB:kl=\ED:kr=\EC:ku=\EA:le=^H:nd=\EC:se=\E0@:\
+       :so=\E9P:sr=\EI:ta=^I:ue=\E7R3\E0@:up=\EA:\
+       :us=\E7R2\E9P:ve=\E>:vs=\E;:
+
+
+psterm|psterm-basic|NeWS psterm-80x34:\
+       :am:bs:hs:km:ul:\
+       :co#80:it#8:li#34:\
+       :al=\EA:cd=\EB:ce=\EC:cl=^L:cm=\E%d;%d;:cs=\EE%d;%d;:\
+       :dc=\EF:dl=\EK:do=\EP:ei=\ENi:fs=\ENl:ho=\ER:i1=\EN*:\
+       :im=\EOi:kd=\E[B:kl=\E[D:kr=\E[C:ku=\E[A:le=\ET:\
+       :ll=\EU:mb=\EOb:md=\EOd:me=\EN*:mr=\EOr:nd=\EV:rc=^\:\
+       :sc=^]:se=\ENo:sf=\EW:so=\EOo:sr=\EX:ta=^I:te=\ENt:\
+       :ti=\EOt:ts=\EOl:ue=\ENu:up=\EY:us=\EOu:vb=\EZ:
+psterm-96x48|NeWS psterm 96x48:\
+       :co#96:li#48:tc=psterm:
+psterm-90x28|NeWS psterm 90x28:\
+       :co#90:li#28:tc=psterm:
+psterm-80x24|NeWS psterm 80x24:\
+       :co#80:li#24:tc=psterm:
+psterm-fast|NeWS psterm fast version (flaky ctrl chars):\
+       :am:bs:hs:km:ul:\
+       :co#80:it#8:li#34:\
+       :al=^A:cd=^B:ce=^C:cl=^L:cm=\004%d;%d;:cs=\005%d;%d;:\
+       :dc=^F:dl=^K:do=^P:ei=^Ni:fs=^Nl:ho=^R:i1=^N*:im=^Oi:\
+       :kd=\E[B:kl=\E[D:kr=\E[C:ku=\E[A:le=^T:ll=^U:mb=^Ob:\
+       :md=^Od:me=^N*:mr=^Or:nd=^V:rc=^\:sc=^]:se=^No:sf=^W:\
+       :so=^Oo:sr=^X:ta=^I:te=^Nt:ti=^Ot:ts=^Ol:ue=^Nu:\
+       :up=^Y:us=^Ou:vb=^Z:
+
+
+apollo|apollo console:\
+       :am:mi:\
+       :co#88:li#53:\
+       :al=\EI:cd=\EJ:ce=\EK:ch=\EN%d:cl=^L:cm=\EM%+ %d):\
+       :cv=\EO+ :dc=\EP:dl=\EL:do=\EB:ei=\ER:im=\EQ:le=^H:\
+       :nd=\EC:se=\ET:sf=\EE:so=\ES:sr=\ED:te=\EX:ti=\EW:\
+       :ue=\EV:up=\EA:us=\EU:
+
+apollo_15P|apollo 15 inch display:\
+       :ei@:im@:tc=vt132:
+apollo_19L|apollo 19 inch display:\
+       :ei@:im@:tc=vt132:
+apollo_color|apollo color display:\
+       :ei@:im@:tc=vt132:
+
+
+fos|fortune|Fortune system:\
+       :am:bw:\
+       :co#80:li#25:\
+       :@7=^Ak\r:@8=^Aq:ac=l m"k(j*v%w#q&x-:ae=^O:al=\034E:\
+       :as=\Eo:bl=^G:cd=\034Y:ce=^\Z:cl=\014:cm=\034C%+ %+ :\
+       :cr=^M:dc=\034W:dl=\034R:do=\n:ei=:ho=\036:ic=\034Q:\
+       :im=:is=^_..:k1=^Aa\r:k2=^Ab\r:k3=^Ac\r:k4=^Ad\r:\
+       :k5=^Ae\r:k6=^Af\r:k7=^Ag\r:k8=^Ah\r:kN=^Ao\r:\
+       :kP=^An\r:kb=^H:kd=^Ay\r:kh=^A?\r:kl=^Aw\r:kr=^Az\r:\
+       :ku=^Ax\r:le=^H:mb=\EN:me=\EI:mr=\EH:nw=^M^J:se=^\I`:\
+       :sf=^J:so=^\H`:ta=^Z:ue=^\IP:up=\013:us=^\HP:ve=\E\\:\
+       :vi=\E]:vs=\E\072:
+
+
+
+altos2|alt2|altos-2|altos II:\
+       :co#80:it#8:li#24:sg#0:\
+       :*5=^Am\r:*8=^An\r:DL=\E[M:FM=^A`\r:FN=^Aa\r:\
+       :FO=^Ab\r:FP=^Ac\r:FQ=^Ad\r:FR=^Ae\r:FS=^Af\r:\
+       :FT=^Ag\r:FU=^Ah\r:FV=^Ai\r:FW=^Aj\r:FX=^Ak\r:\
+       :RA=\E[?7l:SA=\E[?7h:al=\E[L:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=^M:dc=\E[P:do=\E[1B:\
+       :ei=:ho=\E[H:ic=\E[@:if=/usr/share/lib/tabset/vt100:\
+       :im=:is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:k0=^AI\r:\
+       :k1=^A@\r:k2=^AA\r:k3=^AB\r:k4=^AC\r:k5=^AD\r:\
+       :k6=^AE\r:k7=^AF\r:k8=^AG\r:k9=^AH\r:kA=^AJ\r:\
+       :kB=^AK\r:kC=^AL\r:kD=^AM\r:kE=^AN\r:kF=^AO\r:kb=^H:\
+       :kd=\E[B:kh=\E[f:kl=\E[D:kr=\E[C:ku=\E[A:le=^H:\
+       :nd=\E[1C:nw=^M^J:se=\E[m:sf=^J:so=\E[7m:ta=^I:\
+       :ue=\E[m:up=\E[1A:us=\E[4m:
+altos3|altos5|alt3|alt5|altos-3|altos-5|altos III or V:\
+       :mb=\E[5p:me=\E[p:sr=\EM:tc=altos2:
+altos4|alt4|altos-4|altos IV:\
+       :tc=wy50:
+altos7|alt7|altos VII:\
+       :am:mi:\
+       :co#80:li#24:sg#0:\
+       :*5=^Am\r:*8=^An\r:DL=\ER:FM=^A`\r:FN=^Aa\r:FO=^Ab\r:\
+       :FP=^Ac\r:FQ=^Ad\r:FR=^Ae\r:FS=^Af\r:FT=^Ag\r:\
+       :FU=^Ah\r:FV=^Ai\r:FW=^Aj\r:FX=^Ak\r:\
+       :ac=l2m1k3j5t4u9v=w0q\072x6n8\nblink=\EG2:al=\EE:\
+       :cd=\EY:ce=\ET:cl=\E+^^:cm=\E=%+ %+ :cr=^M:dc=\EW:\
+       :do=^J:ei=\Er:ho=^^:im=\Eq:\
+       :is=\E`\072\Ee(\EO\Ee6\Ec41\E~4\Ec21\Eu\E~2:k0=^AI\r:\
+       :k1=^A@\r:k2=^AA\r:k3=^AB\r:k4=^AC\r:k5=^AD\r:\
+       :k6=^AE\r:k7=^AF\r:k8=^AG\r:k9=^AH\r:kA=^AJ\r:\
+       :kB=^AK\r:kC=^AL\r:kD=^AM\r:kE=^AN\r:kF=^AO\r:kN=\EK:\
+       :kP=\EJ:kb=^H:kd=^J:kh=^^:kl=^H:kr=^L:ku=^K:le=^H:\
+       :md=\EGt:me=\EG0:mh=\EGp:mk=\EG1:mr=\EG4:nd=^L:\
+       :nw=^M^J:pf=\EJ:po=\Ed#:se=\EG0:sf=^J:so=\EG4:sr=\Ej:\
+       :ta=^I:ue=\EG0:up=^K:us=\EG8:
+altos7pc|alt7pc|altos PC VII:\
+       :@7=\ET:tc=altos7:
+
+
+hpgeneric|hp|hewlett-packard generic terminal:\
+       :am:da:db:mi:xs:\
+       :co#80:li#24:lm#0:vt#6:\
+       :al=\EL:bl=^G:cd=\EJ:ce=\EK:ch=\E&a%dC:cl=\EH\EJ:\
+       :cm=\E&a%r%dc%dY:cr=^M:ct=\E3:cv=\E&a%dY:dc=\EP:\
+       :dl=\EM:do=^J:ei=\ER:im=\EQ:kB=\Ei:kb=^H:le=^H:\
+       :nd=\EC:se=\E&d@:sf=^J:so=\E&dJ:st=\E1:ta=^I:\
+       :ue=\E&d@:up=\EA:us=\E&dD:
+
+hp110|hewlett-packard model 110 portable:\
+       :li#16:tc=hpgeneric:
+
+hp+pfk+cr|hp function keys with CR:\
+       :k1=\Ep\r:k2=\Eq\r:k3=\Er\r:k4=\Es\r:k5=\Et\r:\
+       :k6=\Eu\r:k7=\Ev\r:k8=\Ew\r:
+
+hp+pfk-cr|hp function keys w/o CR:\
+       :k1=\Ep:k2=\Eq:k3=\Er:k4=\Es:k5=\Et:k6=\Eu:k7=\Ev:\
+       :k8=\Ew:
+
+hp+pfk+arrows|hp alternate arrow definitions:\
+       :k1@:k2@:k3@:k4@:k5@:k6@:k7@:k8@:kF=\Er\r:kH=\Eq\r:\
+       :kR=\Es\r:kd=\Ew\r:kh=\Ep\r:kl=\Eu\r:kr=\Ev\r:\
+       :ku=\Et\r:
+
+hp+arrows|hp arrow definitions:\
+       :kF=\ES:kH=\EF:kR=\ET:kd=\EB:kh=\Eh:kl=\ED:kr=\EC:\
+       :ku=\EA:
+
+hp262x|HP 262x terminals:\
+       :xs:\
+       :cd=\EJ:dc=\EP:ip=:kA=\EL:kD=\EP:kE=\EK:kF=\ES:\
+       :kI=\EQ:kL=\EM:kM=\ER:kN=\EU:kP=\EV:kR=\ET:kS=\EJ:\
+       :kd=\EB:ke=\E&s0A:kh=\Eh:kl=\ED:kr=\EC:ks=\E&s1A:\
+       :ku=\EA:mb=\E&dA:me=\E&d@:mk=\E&dS:mr=\E&dB:\
+       :..sa=\E&d%'@'%?%p1%t%'B'%|%;%?%p2%t%'D'%|%;%?%p3%t%'B'%|%;%?%p4%t%'A'%|%;%c:\
+       :se=\E&d@:sf=\ES:so=\E&dB:ta=\011:ue=\E&d@:us=\E&dD:
+
+hp2621-ba|2621-ba|2621 w/new rom and strap A set:\
+       :ke@:ks@:tc=hp+arrows:tc=hp2621:
+
+hp2621|hp2621a|hp2621A|2621|2621a|2621A|hp2621-wl|2621-wl|hp 2621 w/labels:\
+       :is=\E&jA\r:ke=\E&jA:tc=hp2621-fl:
+hp2621-fl|2621-fl|hp 2621:\
+       :xo:xs@:\
+       :pb#19200:\
+       :bt=\Ei:cm=\E&a%r%dc%dY:dc=\EP:ip=:is=\E&j@\r:\
+       :ke=\E&j@:ks=\E&jB:me=\E&d@:se=\E&d@:so=\E&dD:\
+       :ta=\011:ue=\E&d@:us=\E&dD:tc=hp+pfk+cr:tc=hpgeneric:
+
+hp2621p|2621p|2621P|hp 2621 with printer:\
+       :pf=\E&p13C:po=\E&p11C:tc=hp2621:
+
+hp2621p-a|2621p-a|hp2621p with fn as arrows:\
+       :tc=hp+pfk+arrows:tc=hp2621p:
+
+hp2621-k45|hp2621k45|2621k45|k45|hp 2621 with 45 keyboard:\
+       :kb=^H:kd=\EB:ke=\E&s0A:kh=\Eh:kl=\ED:kr=\EC:\
+       :ks=\E&s1A:ku=\EA:tc=hp2621:
+
+hp2621-48|48 line 2621:\
+       :li#48:\
+       :cm=\E&a%r%dc%dR:cv=\E&a%dR:ho=\EH:tc=hp2621:
+
+hp2621-nl|hp 2621 with no labels:\
+       :kd@:ke@:kh@:kl@:kr@:ks@:ku@:tc=hp2621-fl:
+
+hp2621-nt|hp 2621 w/no tabs:\
+       :ta@:tc=hp2621:
+
+hp2624|hp2624a|hp2624b|hp2624b-4p|2624-4p|2624|2624a|2624b|Hewlett Packard 2624 B:\
+       :da:db:\
+       :lm#96:\
+       :vb=\E&w13F\E&w12F\E&w13F\E&w12F:tc=hp+labels:tc=scrhp:
+
+hp2626|hp2626a|hp2626p|2626|2626a|2626p|2626A|2626P|hp 2626:\
+       :da:db:\
+       :lm#0:pb#19200:\
+       :SF=\E&r%dD:SR=\E&r%dU:cd=\ED\EJ\EC:ip=:is=\E&j@\r:tc=hp+pfk+cr:tc=hp+labels:tc=scrhp:
+
+hp2626-s|2626-s|hp 2626 using only 23 lines:\
+       :es:hs:\
+       :li#23:\
+       :fs=\E&d@\E&w7f2p1I\E&w4f1I:\
+       :i1=\E&q3t0{0H \E&w0f115n1I \E&w0f1n2I\n\E&w2f1i0d0u22l0S \E&w2f2i0d23u23l0S \E&w7f2p1I \r:\
+       :ts=\E&w7f2p2I\E&w4f2I\r\EK\E&a%p1%dC:tc=hp2626:
+hp2626-ns|2626-ns|hp 2626 using all 24 lines:\
+       :i1=\E&q3t0{0H \E&w0f118n1I \E&w0f1n2I\n\E&w2f1i0d0u23l0S \E&w3f2I \E&w7f2p1I \r:tc=hp2626:
+hp2626-12|2626-12|hewlett-packard 2626 12 lines:\
+       :li#12:tc=hp2626:
+hp2626-12x40|2626-12x40|hewlett-packard 2626 12 lines 40 columns:\
+       :co#40:li#12:tc=hp2626:
+hp2626-x40|2626-x40|hewlett-packard 2626 40 columns:\
+       :co#40:tc=hp2626:
+hp2626-12-s|2626-12-s|hewlett-packard 2626 11 lines plus status:\
+       :li#11:tc=hp2626-s:
+
+hp2627a-rev|hp 2627 with reverse video colors:\
+       :cr=^M:do=^J:\
+       :is=\E&v0m1a0b0c1x1y1z1i0a0b1c1x1y1z0i0S\E&j@\r\E3\r:\
+       :kb=^H:kd=^J:kl=^H:nw=^M^J:sf=^J:ta=^I:\
+       :ue=\E&v0S\E&d@:us=\E&dD\E&v1S:tc=hp2621-nl:
+hp2627a|2627|hp 2627 color terminal with no labels:\
+       :cr=^M:do=^J:\
+       :is=\E&v0m1a1b0c1i0a1b1c2i1a0b0c0i0S\E&j@\r\E3\r:\
+       :kb=^H:kd=^J:kl=^H:nw=^M^J:se=\E&v0S:sf=^J:so=\E&v2S:\
+       :ta=^I:ue=\E&v0S\E&d@:us=\E&dD\E&v1S:tc=hp2621-nl:
+hp2627c|hp 2627 color (cyan) terminal with no labels:\
+       :cr=^M:do=^J:\
+       :is=\E&v0m1a0b0c2i1a1b0c1i0a1b1c0i0S\E&j@\r\E3\r:\
+       :kb=^H:kd=^J:kl=^H:nw=^M^J:sf=^J:ta=^I:tc=hp2627a:
+
+hp2640a|2640a|hp 2640a:\
+       :cm@:ke@:ks@:tc=hp2645:
+
+hp2640b|hp2644a|hp 264x series:\
+       :ke@:ks@:tc=hp2645:
+
+hp2645|hp45|HP 2645 series:\
+       :pb#9600:\
+       :cr=\r:kA=\EL:kD=\EP:kE=\EK:kF=\ES:kI=\EQ:kL=\EM:\
+       :kM=\ER:kN=\EU:kP=\EV:kR=\ET:kS=\EJ:kT=\E1:kd=\EB:\
+       :ke=\E&s0A:kh=\Eh:kl=\ED:kr=\EC:ks=\E&s1A:kt=\E2:\
+       :ku=\EA:mb=\E&dA:me=\E&d@:mh=\E&dH:mr=\E&dB:\
+       :..sa=\E&d%'@'%?%p1%t%'B'%|%;%?%p2%t%'D'%|%;%?%p3%t%'B'%|%;%?%p4%t%'A'%|%;%?%p5%t%'H'%|%;%?%p6%t%'B'%|%;%c:\
+       :us=\E&dD:tc=hpgeneric:
+hp2648|hp2648a|2648a|2648A|2648|HP 2648a graphics terminal:\
+       :cl=\EH\EJ:cm=\E&a%r%dc%dY:dc=\EP:ip=:tc=hp2645:
+
+hp150|hewlett packard Model 150:\
+       :tc=hp2622:
+
+hp2382a|hp2382|hewlett packard 2382a:\
+       :da:db:\
+       :lh#1:lm#48:\
+       :ac@:ae@:as@:me=\E&d@:\
+       :..pn=\E&f0a%p1%dk%p2%l%Pa%?%ga%t%ga%d%e1%;d0L%?%ga%!%t %;%p2%s:\
+       :..sa=\E&d%{0}%Pa%?%p4%t%{1}%ga%+%Pa%;%?%p1%p3%|%p6%|%t%{2}%ga%+%Pa%;%?%p2%p6%|%t%{4}%ga%+%Pa%;%?%p1%p5%|%t%{8}%ga%+%Pa%;%?%p7%t%?%ga%ts%ga%'@'%+%e%'S'%;%e%?%ga%t%ga%'@'%+%e%'@'%;%;%c:tc=hp+labels:tc=scrhp:
+
+hp2621-a|hp2621a-a|2621-a|hp2621 with fn as arrows:\
+       :tc=hp+pfk+arrows:tc=hp2621-fl:
+
+
+newhpkeyboard|generic entry for HP extended keyboard:\
+       :kA=\EL:kB=\Ei:kC=\EJ:kD=\EP:kE=\EK:kF=\ET:kH=\EF:\
+       :kI=\EQ:kL=\EM:kM=\ER:kN=\EU:kP=\EV:kR=\ES:kS=\EJ:\
+       :kb=^H:kd=\EB:ke=\E&s0A:kh=\Eh:kl=\ED:kr=\EC:\
+       :ks=\E&s1A:ku=\EA:tc=hp+pfk-cr:
+
+newhp|generic entry for new hewlett packard terminals:\
+       :am:bw:mi:xo:xs:\
+       :co#80:li#24:pb#4800:\
+       :ac=T1R!U2S"W3O#V4P$t5u6w7v8\072'9(LQKWlRkT5I3@2[MAJSmFjGdHQ;Y+Z*X\0724>q\\\054x.n/:\
+       :ae=^O:al=\EL:as=^N:bl=^G:bt=\Ei:cd=\EJ:ce=\EK:cr=^M:\
+       :ct=\E3:dc=\EP:dl=\EM:do=^J:ei=\ER:i1=\E&jB:im=\EQ:\
+       :ip=:le=^H:mb=\E&dA:md=\E&dF:me=\E&d@\017:mh=\E&dH:\
+       :mk=\E&dS:mr=\E&dB:nd=\EC:nw=^M^J:\
+       :..pk=\E&f0a%p1%dk0d%p2%l%dL%p2%s:\
+       :..pl=\E&f1a%p1%dk0d%p2%l%dL%p2%s:\
+       :..px=\E&f2a%p1%dk0d%p2%l%dL%p2%s:r1=\Eg:\
+       :..sa=\E&d%{0}%Pa%?%p4%t%{1}%ga%+%Pa%;%?%p1%p3%|%p6%|%t%{2}%ga%+%Pa%;%?%p2%p6%|%t%{4}%ga%+%Pa%;%?%p1%p5%|%t%{8}%ga%+%Pa%;%?%p7%t%?%ga%ts%ga%'@'%+%e%'S'%;%e%?%ga%t%ga%'@'%+%e%'@'%;%;%c%?%p9%t\016%e\017%;:\
+       :se=\E&d@:sf=^J:so=\E&dJ:sr=\ET:st=\E1:ta=\011:\
+       :ue=\E&d@:up=\EA:us=\E&dD:tc=newhpkeyboard:
+
+memhp|memory relative addressing for new HP ttys:\
+       :vt#6:\
+       :CM=\E&a%p1%dr%p2%dC:DO=\E&a+%dR:LE=\E&a-%dC:\
+       :RI=\E&a+%dC:UP=\E&a-%dR:ch=\E&a%dC:cl=\EH\EJ:\
+       :cm=\E&a%dr%dC:cv=\E&a%dR:ho=\EH:ll=\E&a23R\r:tc=newhp:
+
+scrhp|screen relative addressing for new HP ttys:\
+       :CM=\E&a%p1%dr%p2%dC:DO=\E&a+%dR:LE=\E&a-%dC:\
+       :RI=\E&a+%dC:UP=\E&a-%dR:ch=\E&a%dC:cl=\E&a0c0Y\EJ:\
+       :cm=\E&a%dy%dC:cv=\E&a%dY:ho=\E&a0y0C:ll=\E&a0y0C\EA:tc=newhp:
+
+hp+labels|"standard" label info for new HP ttys:\
+       :Nl#8:lh#2:lw#8:\
+       :LO=\E&jB:\
+       :..pn=\E&f2a%p1%dk%p2%l%Pa%?%ga%t%ga%d%e1%;d0L%?%ga%!%t %;%p2%s:
+
+hp+printer|"standard" printer info for HP ttys:\
+       :ff=\E&p4u0C:pf=\E&p13C:po=\E&p11C:ps=\EH\E&p4dF:
+
+
+hp2621b|2621b|hp 2621b with old style keyboard:\
+       :Nl#8:lh#1:lm#48:lw#8:\
+       :LO=\E&jB:kF=\ET:kH=\EF:kR=\ES:kd=\EB:kh=\Eh:kl=\ED:\
+       :kr=\EC:ku=\EA:\
+       :..pn=\E&f0a%p1%dk%p2%l%Pa%?%ga%t%ga%d%e1%;d3L%?%ga%!%t%{32}%c%;%p2%s\E%'o'%p1%+%c\r:tc=hp2621:
+
+hp2621b-p|2621b-p|hp 2621b with printer:\
+       :tc=hp+printer:tc=hp2621b:
+
+hp2621b-kx|2621b-kx|hp 2621b with extended keyboard:\
+       :tc=newhpkeyboard:tc=hp2621b:
+
+hp2621b-kx-p|2621b-kx-p|hp 2621b with new keyboard & printer:\
+       :tc=hp+printer:tc=hp2621b-kx:
+
+hp2622|hp2622a|2622|2622a|hp 2622:\
+       :da:db:\
+       :lm#0:pb#19200:\
+       :is=\E&dj@\r:tc=hp+pfk+cr:tc=hp+labels:tc=scrhp:
+
+hp2623|hp2623a|2623|2623a|hp 2623:\
+       :tc=hp2622:
+
+hp2624b-p|hp2624b-4p-p|hewlett packard 2624 B with printer:\
+       :tc=hp+printer:tc=hp2624:
+
+hp2624-10p|hp2624a-10p|hp2624b-10p|2624-10p|2624a-10p|2624b-10p|hewlett packard 2624 B w/ 10 pages of memory:\
+       :lm#240:tc=hp2624:
+
+hp2624b-10p-p|hewlett packard 2624 B w/ extra memory & printer:\
+       :lm#240:tc=hp2624b-p:
+
+hp+color|hp with colors:\
+       :cc:\
+       :Co#16:NC#17:pa#7:\
+       :..Ip=\E&v%?%p2%{1000}%=%t1%e.%p2%d%;a\n%?%p3%{1000}%=%t1%e.%p3%d%;b\n%?%p4%{1000}%=%t1%e.%p4%d%;c\n%?%p5%{1000}%=%t1%e.%p5%d%;x\n%?%p6%{1000}%=%t1%e.%p6%d%;y\n%?%p7%{1000}%=%t1%e.%p7%d%;z\n%p1%dI:\
+       :oc=\E&v0m1a1b1c0I\E&v1a1I\E&v1b2I\E&v1a1b3I\E&v1c4I\E&v1a1c5I\E&v1b1c6I\E&v1x1y7I:\
+       :op=\E&v0S:sp=\E&v%dS:
+
+hp2397a|2397a|hp2397|2397|hewlett packard 2397A color terminal:\
+       :is=\E&w6f80X:tc=memhp:tc=hp+labels:tc=hp+color:
+
+hpansi|hp700|hewlett packard 700/44 in HP-PCterm mode:\
+       :am:eo:xn:xo:\
+       :co#80:li#25:\
+       :@7=\E[4~:RA=\E[?7l:S4=\E[>11h\EPO**x0/65;1/67\E\\:\
+       :S5=\E[>11l\EP1**x0/11;1/13\E[m\E\\:SA=\E[?7h:XF=g:\
+       :XN=e:\
+       :ac=k\277l\332m\300j\331n\305w\302q\304u\264t\303v\301x\263:\
+       :al=\E[L:bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:cl=\E[2J\E[H:\
+       :cm=\E[%i%d;%dH:cr=^M:dc=\E[P:dl=\E[M:do=\E[B:ei=:\
+       :ho=\E[H:ic=\E[@:im=:\
+       :is=\E[44"p\E[?7h\E[>10h\E[>12h\EP1;1|3/7F\E\\:\
+       :k1=\E[17~:k2=\E[18~:k3=\E[19~:k4=\E[20~:k5=\E[21~:\
+       :k6=\E[23~:k7=\E[24~:k8=\E[25~:k9=\E[26~:k;=\E[28~:\
+       :kB=\E[Z:kN=\E[6~:kP=\E[5~:kb=^H:kd=\E[B:kh=\E[1~:\
+       :kl=\E[D:kr=\E[C:ku=\E[A:le=\E[D:nd=\E[C:se=\E[m:\
+       :sf=^J:so=\E[7m:ta=^I:ue=\E[m:up=\E[A:us=\E[4m:\
+       :ve=\E[?25h:vi=\E[?25l:
+hp2392|2392|2393|239x series:\
+       :co#80:\
+       :bt=\Ei:cm=\E&a%dy%dC:cv=\E&a%dY:im=\EQ:k1=\Ep\r:\
+       :k2=\Eq\r:k3=\Er\r:k4=\Es\r:k5=\Et\r:k6=\Eu\r:\
+       :k7=\Ev\r:k8=\Ew\r:kF=\EU:kN=\Eu:kP=\Ev:kR=\EV:\
+       :kh=\Eh:ue=\E&d@:us=\E&dD:tc=hpsub:
+
+hpsub|hp terminals -- capability subset:\
+       :am:da:db:mi:xo:xs:\
+       :li#24:\
+       :al=\EL:bl=^G:cd=\EJ:ce=\EK:ch=\E&a%dC:cl=\EH\EJ:\
+       :cr=^M:dc=\EP:dl=\EM:do=\EB:ei=\ER:\
+       :if=/usr/lib/tabset/stdcrt:is=\E&s1A\E<\E&k0\\:kb=^H:\
+       :kd=\EB:ke=\E&s0A:kh=\Eh:kl=\ED:kr=\EC:ks=\E&s1A:\
+       :ku=\EA:le=^H:nd=\EC:se=\E&d@:sf=^J:so=\E&dB:ta=^I:\
+       :up=\EA:
+
+hpex|hp extended capabilites:\
+       :cm=\E&a%dy%dC:cr=^M:cv=\E&a%dY:do=^J:im=\EQ:kb=^H:\
+       :kd=^J:kl=^H:nw=^M^J:sf=^J:ta=^I:ue=\E&d@:us=\E&dD:tc=hpsub:
+
+hp236|hp236 internal terminal emulator:\
+       :am:\
+       :co#80:li#24:\
+       :al=\EG:ce=\EK:cl=\EF:cm=\EE%+ %+ :dc=\EJ:dl=\EH:ei=:\
+       :ic=\EI:im=:le=^H:se=\ECI:so=\EBI:up=^K:ve=\EDE:\
+       :vs=\EDB:
+
+hp300h|HP Catseye console:\
+       :am:da:db:mi:xs:\
+       :co#128:li#51:lm#0:sg#0:\
+       :al=\EL:bl=^G:bt=\Ei:cd=\EJ:ce=\EK:ch=\E&a%dC:\
+       :cl=\E&a0y0C\EJ:cm=\E&a%dy%dC:cr=^M:ct=\E3:\
+       :cv=\E&a%dY:dc=\EP:dl=\EM:do=\EB:ei=\ER:\
+       :if=/usr/share/tabset/stdcrt:im=\EQ:kb=^H:kd=\EB:\
+       :ke=\E&s0A:kh=\Eh:kl=\ED:kr=\EC:ks=\E&s1A:ku=\EA:\
+       :le=^H:me=\E&d@:nd=\EC:se=\E&d@:sf=^J:so=\E&dB:ta=^I:\
+       :ue=\E&d@:up=\EA:us=\E&dD:
+hp9837|hp98720|hp98721|HP 9000/300 workstations:\
+       :am:da:db:mi:xs:\
+       :co#128:it#8:li#46:lm#0:\
+       :al=\EL:bl=^G:bt=\Ei:cd=\EJ:ce=\EK:ch=\E&a%dC:\
+       :cl=\E&a0y0C\EJ:cm=\E&a%dy%dC:ct=\E3:cv=\E&a%dY:\
+       :dc=\EP:dl=\EM:do=\EB:ei=\ER:im=\EQ:is=\E&v0m1b0i&j@:\
+       :kA=\EL:kD=\EP:kE=\EK:kI=\EQ:kL=\EM:kN=\EU:kP=\EV:\
+       :kS=\EJ:kb=^H:kd=\EB:ke=\E&s0A:kh=\Eh:kl=\ED:kr=\EC:\
+       :ks=\E&s1A:ku=\EA:le=^H:me=\E&d@:nd=\EC:se=\E&v0S:\
+       :sf=^J:so=\E&v5S:st=\E1:ta=^I:ue=\E&d@:up=\EA:\
+       :us=\E&dD:
+hp98550|hp98550a|HP 9000 Series 300 color console:\
+       :am:da:db:mi:xs:\
+       :co#128:it#8:li#49:lm#0:\
+       :ae=^O:al=\EL:as=^N:bl=^G:bt=\Ei:cd=\EJ:ce=\EK:\
+       :ch=\E&a%dC:cl=\EH\EJ:cm=\E&a%dy%dC:cr=^M:ct=\E3:\
+       :cv=\E&a%dY:dc=\EP:dl=\EM:do=^J:ei=\ER:\
+       :if=/usr/share/tabset/9837:im=\EQ:k1=\Ep:k2=\Eq:\
+       :k3=\Er:k4=\Es:k5=\Et:k6=\Eu:k7=\Ev:k8=\Ew:kA=\EL:\
+       :kC=\EJ:kD=\EP:kE=\EK:kF=\ES:kH=\EF:kI=\EQ:kL=\EM:\
+       :kM=\ER:kN=\EU:kP=\EV:kR=\ET:kS=\EJ:kT=\E1:ka=\E3:\
+       :kb=^H:kd=\EB:ke=\E&s0A:kh=\Eh:kl=\ED:kr=\EC:\
+       :ks=\E&s1A:kt=\E2:ku=\EA:le=^H:mb=\E&dA:md=\E&dJ:\
+       :me=\E&d@:mh=\E&dH:mk=\E&ds:mr=\E&dJ:nd=\EC:se=\E&d@:\
+       :sf=^J:so=\E&dJ:st=\E1:ta=^I:ue=\E&d@:up=\EA:\
+       :us=\E&dD:ve=\E*dQ:vi=\E*dR:
+hp700-wy|HP700/41 emulating wyse30:\
+       :am:bw:mi:ms:\
+       :co#80:it#8:li#24:sg#1:ug#1:\
+       :al=0.7*\EE:bt=\EI:cd=\EY:ce=10\ET:cl=^Z:\
+       :cm=\E=%+ %+ :cr=^M:ct=\E0:cv=\E[%+ :dc=\EW:dl=\ER:\
+       :do=^V:ei=\Er:ho=^^:i1=\E~"\EC\Er\E(\EG0\003\E`9\E`1:\
+       :if=/usr/share/tabset/hp700-wy:im=\Eq:kB=\EI:kC=^Z:\
+       :kE=\ET:kI=\Eq:kM=\Er:kS=\EY:kT=\EI:kb=\177:kd=^V:\
+       :kh=^^:kl=^H:kr=^L:ku=^K:le=^H:ll=^^^K:nd=^L:\
+       :se=10\EG0:so=10\EG4:sr=\Ej:ta=\011\nhts=\E1:\
+       :ue=10\EG0:up=^K:us=10\EG8:
+hp70092|70092a|70092A|hp70092a|hp70092A|HP 700/92:\
+       :am:da:db:xs:\
+       :Nl#8:co#80:lh#2:li#24:lm#0:lw#8:\
+       :LF=\E&j@:LO=\E&jB:ae=^O:al=\EL:as=^N:bl=^G:bt=\Ei:\
+       :ce=\EK:ch=\E&a%dC:cl=\E&a0y0C\EJ:cm=\E&a%dy%dC:\
+       :cr=^M:ct=\E3:cv=\E&a%dY:dc=\EP:dl=\EM:do=\EB:ei=\ER:\
+       :im=\EQ:k1=\Ep:k2=\Eq:k3=\Er:k4=\Es:k5=\Et:k6=\Eu:\
+       :k7=\Ev:k8=\Ew:kA=\EL:kC=\EJ:kD=\EP:kE=\EK:kF=\ES:\
+       :kH=\EF:kI=\EQ:kL=\EM:kM=\ER:kN=\EU:kP=\EV:kR=\ET:\
+       :kS=\EJ:kT=\E1:ka=\E3:kb=^H:kd=\EB:ke=\E&s0A:kh=\Eh:\
+       :kl=\ED:kr=\EC:ks=\E&s1A:kt=\E2:ku=\EA:le=^H:\
+       :mb=\E&dA:md=\E&dB:me=\E&d@:mh=\E&dH:mr=\E&dB:nd=\EC:\
+       :se=\E&d@:so=\E&dJ:sr=\ET:st=\E1:ta=^I:ue=\E&d@:\
+       :up=\EA:us=\E&dD:
+
+bobcat|sbobcat|HP 9000 model 300 console:\
+       :am:da:db:mi:xs:\
+       :co#128:it#8:li#47:sg#0:\
+       :al=10*\EL:bt=\Ei:cd=\EJ:ce=\EK:ch=6\E&a%dC:\
+       :cl=\EH\EJ:cm=6\E&a%dy%dC:cr=^M:cv=6\E&a%dY:dc=\EP:\
+       :dl=10*\EM:do=\EB:ei=\ER:im=\EQ:kb=^H:kd=\EB:\
+       :ke=\E&s0A:kh=\Eh:kl=\ED:kr=\EC:ks=\E&s1A:ku=\EA:\
+       :le=^H:nd=\EC:nw=^M^J:se=\E&d@:sf=^J:so=\E&dB:ta=^I:\
+       :ue=\E&d@:up=\EA:us=\E&dD:
+gator-t|HP 9000 model 237 emulating extra-tall AAA:\
+       :li#94:tc=gator:
+gator|HP 9000 model 237 emulating AAA:\
+       :bw:km:mi:ul:\
+       :co#128:it#8:li#47:\
+       :AL=1*\E[%dL:DC=4\E[%dP:DL=1*\E[%dM:IC=4\E[%d@:\
+       :al=\E[L:bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:ch=\E[%i%d`:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:dc=\E[P:dl=\E[M:\
+       :do=^J:ei=:ho=\E[H:ic=\E[@:im=:kb=^H:kd=^J:kl=^H:\
+       :le=^H:me=\E[m:mr=\E[7m:nd=\E[C:nw=^M^J:\
+       :rp=1*%.\E[%db:se=\E[m:so=\E[7m:ta=^I:ue=\E[m:up=\EM:\
+       :us=\E[4m:
+gator-52|HP 9000 model 237 emulating VT52:\
+       :co#128:li#47:tc=vt52:
+gator-52t|HP 9000 model 237 emulating extra-tall VT52:\
+       :li#94:tc=gator-52:
+
+
+dku7003-dumb|Honeywell Bull DKU 7003 dumb mode:\
+       :co#80:li#25:\
+       :cd=^_:ce=\E[K:cl=^]^_:cm=\E[%i%d;%dH:cr=^M:do=^K:\
+       :ho=^]:kb=^H:kd=^K:kh=^]:kl=^Y:kr=^X:ku=^Z:le=^Y:\
+       :nd=^X:nw=^M^J:sf=^J:ta=^I:up=^Z:vb=\E[2h\E[2l:
+dku7003|Honeywell Bull DKU 7003 all features described:\
+       :ms:\
+       :sg#1:ug#1:\
+       :mb=\E[5m:md=\E[7m:me=\E[m:mh=\E[2m:mr=\E[7m:se=\E[m:\
+       :so=\E[7m:ue=\E[m:us=\E[4m:tc=dku7003-dumb:
+
+
+adm1a|adm1|lsi adm1a:\
+       :am:\
+       :co#80:li#24:\
+       :bl=^G:cl=\E;:cm=\E=%+ %+ :cr=^M:do=^J:ho=^^:le=^H:\
+       :nd=^L:sf=^J:up=^K:
+adm2|lsi adm2:\
+       :am:\
+       :co#80:li#24:\
+       :al=\EE:bl=^G:cd=\EY:ce=\ET:cl=\E;:cm=\E=%+ %+ :\
+       :cr=^M:dc=\EW:dl=\ER:do=^J:ei=:ho=^^:ic=\EQ:im=:\
+       :kd=^J:kh=^^:kl=^H:kr=^L:ku=^K:le=^H:nd=^L:sf=^J:\
+       :up=^K:
+adm3|lsi adm3:\
+       :am:\
+       :co#80:li#24:\
+       :bl=^G:cl=^Z:cr=^M:do=^J:le=^H:sf=^J:
+adm3a|lsi adm3a:\
+       :am:\
+       :co#80:li#24:\
+       :bl=^G:cl=\032:cm=\E=%+ %+ :cr=^M:do=^J:ho=^^:le=^H:\
+       :nd=^L:sf=^J:up=^K:
+adm3a+|adm3a plus:\
+       :kd=^J:kl=^H:kr=^L:ku=^K:tc=adm3a:
+adm5|lsi adm5:\
+       :sg#1:\
+       :bl=^G:cd=\EY:ce=\ET:cr=^M:do=^J:kb=^H:kh=^^:se=\EG:\
+       :so=\EG:tc=adm3a+:
+adm11|lsi adm11:\
+       :am:hs:\
+       :co#80:li#24:\
+       :bl=^G:cd=\EY:ce=\ET:cl=^Z:cm=\E=%+ %+ :cr=^M:do=^J:\
+       :ds=\Eh:fs=\E(\r:kb=^H:kd=^J:kh=^^:kl=^H:kr=^L:ku=^K:\
+       :le=^H:nd=^L:se=\E(:so=\E):ts=\EF\E):up=^K:
+adm12|lsi adm12:\
+       :am:mi:\
+       :co#80:li#24:\
+       :al=\EE:bl=^G:cd=\EY:ce=\ET:cl=^Z:cm=\E=%+ %+ :cr=^M:\
+       :dc=\EW:dl=\ER:do=^J:ei=\Er:ho=^^:im=\Eq:is=\Eq:\
+       :k0=^A0\r:k1=^A1\r:k2=^A2\r:k3=^A3\r:k4=^A4\r:\
+       :k5=^A5\r:k6=^A6\r:k7=^A7\r:k8=^A8\r:k9=^A9\r:kd=^J:\
+       :kl=^H:kr=^L:ku=^K:le=^H:mk=\EG1:nd=^L:se=\EG0:\
+       :so=\EG4:ue=\EG0:up=^K:us=\EG8:
+adm20|lear siegler adm20:\
+       :am:\
+       :co#80:it#8:li#24:\
+       :al=\EE:bl=^G:bt=\EI:cd=\EY:ce=\ET:cl=^Z:\
+       :cm=\E=%i%r%+^_%+^_:cr=^M:dc=\EW:dl=\ER:ei=:ho=^^:\
+       :ic=\EQ:im=:k1=^A:k2=^B:k3=^W:k4=^D:k5=^E:k6=^X:\
+       :k7=^Z:le=^H:nd=^L:se=\E(:so=\E):ta=^I:up=^K:
+adm21|lear siegler adm21:\
+       :sg#1:ug#1:\
+       :al=30*\EE:bl=^G:cd=\EY:ce=\ET:cr=^M:dc=\EW:\
+       :dl=30*\ER:do=^J:ei=:ic=\EQ:im=:kb=^H:kd=^J:kh=^^:\
+       :kl=^H:kr=^L:ku=^K:se=\EG0:sf=^J:so=\EG4:ue=\EG0:\
+       :us=\EG8:tc=adm3a:
+adm22|lsi adm22:\
+       :am:\
+       :co#80:li#24:\
+       :al=\EE:bl=^G:bt=\EI:cd=\Ey:ce=\Et:cl=\E+:\
+       :cm=\E=%+ %+ :cr=^M:dc=\EW:dl=\ER:do=^J:ei=:ho=^^:\
+       :ic=\EQ:im=:\
+       :is=\E%\014\014\014\016\003\200\003\002\003\002\200\200\200\200\200\200\200\200\200\200\200:\
+       :k1=^A@\r:k2=^AA\r:k3=^AB\r:k4=^AC\r:k5=^AD\r:\
+       :k6=^AE\r:k7=^AF\r:kb=^H:kd=^J:kh=^^:kl=^H:kr=^L:\
+       :ku=^K:l1=F1:l2=F2:l3=F3:l4=F4:l5=F5:l6=F6:l7=F7:\
+       :le=^H:nd=^L:se=\E(:so=\E):ta=\Ei:up=^K:
+adm31|lsi adm31:\
+       :am:mi:\
+       :co#80:li#24:\
+       :al=\EE:bl=^G:cd=\EY:ce=\ET:cl=\E*:cm=\E=%+ %+ :\
+       :cr=^M:dc=\EW:dl=\ER:do=^J:ei=\Er:ho=^^:im=\Eq:\
+       :is=\Eu\E0:k0=^A0\r:k1=^A1\r:k2=^A2\r:k3=^A3\r:\
+       :k4=^A4\r:k5=^A5\r:k6=^A6\r:k7=^A7\r:k8=^A8\r:\
+       :k9=^A9\r:kd=^J:kl=^H:kr=^L:ku=^K:le=^H:nd=^L:\
+       :se=\EG0:sf=^J:so=\EG1:ue=\EG0:up=^K:us=\EG1:
+adm31-old|o31|old adm31:\
+       :so=\EG4:ue@:us@:tc=adm31:
+adm36|lsi adm36:\
+       :am:mi:\
+       :co#80:li#24:\
+       :RA=\E[?7l:SA=\E[?7h:al=\E[1L:cd=\E[0J:ce=\E[0K:\
+       :cl=\E[H\E[2J:cm=\E[%i%d;%dH:dl=\E[1M:ei=\E[4l:\
+       :im=\E[4h:is=\E[6;?7h\E[4;20;?1;?3;?6;?4l\E(B\E)B\E>:\
+       :kd=\EB:kl=\ED:kr=\EC:ku=\E[A:le=^H:nd=\E[D:up=\E[A:
+adm42|lsi adm42:\
+       :am:\
+       :co#80:li#24:\
+       :al=\EE:bl=^G:bt=\EI:cd=\EY:ce=\ET:cl=\E;:\
+       :cm=\E=%+ %+ :cr=^M:dc=\EW:dl=\ER:do=^J:ei=\Er:\
+       :im=\Eq:ip=:kd=^J:kh=^^:kl=^H:kr=^L:ku=^K:le=^H:\
+       :nd=^L:pc=\177:se=\EG0:sf=^J:so=\EG4:ta=^I:up=^K:\
+       :vs=\EC\E3 \E3(:
+adm42-ns|lsi adm-42 with no system line:\
+       :al=\EE\EF \011:bt=\EI\EF \011:cd=\EY\EF \011:\
+       :ce=\ET\EF \011:cl=\E;\EF \011:cm=\E=%+ %+ \EF \011:\
+       :dc=\EW\EF \011:dl=\ER\EF \011:ei=\Er\EF \011:\
+       :im=\Eq\EF \011:tc=adm42:
+
+
+pt100|pt200|wren|fenix|prime pt100/pt200:\
+       :am:bw:mi:ms:\
+       :co#80:it#8:li#24:\
+       :DC=\E[%dP:DL=\E[M:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:\
+       :UP=\E[%dA:al=\E[L\E[t:bt=\E[Z:cd=\E[J\E[r:\
+       :ce=\E[K\E[t:cl=\E?:cm=\E0%+!%+!:cr=^M:dc=\E[P:\
+       :do=\ED:ei=\E[4l:ho=\E$B:im=\E[4h:kb=^H:kd=\E[B:\
+       :ke=\E[>13l:kh=\E$A:kl=\E[D:kr=\E[C:ks=\E[>13h:\
+       :ku=\E[A:le=^H:nd=\E[C:nw=^M^J:se=\E[m:sf=^J:\
+       :so=\E[2;7m:ta=^I:\
+       :ti=\E[>1l\E[>2l\E[>16l\E[4l\E[>9l\E[20l\E[>3l\E[>7h\E[>12l\E[1Q:\
+       :ue=\E[m:up=\EM:us=\E[4m:vb=\E$\E$P:
+pt100w|pt200w|wrenw|fenixw|prime pt100/pt200 in 132-column mode:\
+       :co#132:\
+       :cm=\E[%i%d;%dH:tc=pt100:
+pt250|Prime PT250:\
+       :so@:tc=pt100:
+pt250w|Prime PT250 in 132-column mode:\
+       :so@:tc=pt100w:
+
+
+qvt101|qvt108|qume qvt 101 and QVT 108:\
+       :sg#1:\
+       :se=\EG0:so=\EG4:tc=qvt101+:
+
+qvt101+|qvt101p|qume qvt 101 PLUS product:\
+       :am:bw:hs:ul:\
+       :co#80:li#24:sg#0:\
+       :al=\EE:bl=^G:bt=\EI:cd=\EY:ce=\ET:cl=^Z:\
+       :cm=\E=%+ %+ :cr=^M:ct=\E3:dc=\EW:dl=\ER:do=^J:\
+       :ds=\Eg\Ef\r:ei=:fs=^M:ho=^^:ic=\EQ:im=:k1=^A@\r:\
+       :k2=^AA\r:k3=^AB\r:k4=^AC\r:k5=^AD\r:k6=^AE\r:\
+       :k7=^AF\r:k8=^AG\r:k9=^AH\r:k;=^AI\r:kA=\EE:kB=\EI:\
+       :kE=\ET:kI=\EQ:kL=\ER:kS=\EY:kb=^H:kd=^J:kh=^^:kl=^H:\
+       :kr=^L:ku=^K:le=^H:mr=\EG4:nd=^L:pf=\EA:po=\E@:\
+       :se=\E(:sf=^J:so=\E0P\E):st=\E1:ta=^I:ts=\Eg\Ef:\
+       :ue=\EG0:up=^K:us=\EG8:vb=\Eb\Ed:ve=\E.4:
+qvt102|qume qvt 102:\
+       :ve=\E.:tc=qvt101:
+qvt103|qume qvt 103:\
+       :am:xn:xo:\
+       :co#80:it#8:li#24:vt#3:\
+       :DO=\E[%dB:LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:SA=\E[?7h:\
+       :UP=\E[%dA:bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:\
+       :cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:ct=\E[3g:do=^J:\
+       :ho=\E[H:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:kb=^H:\
+       :kd=\EOB:ke=\E[?1l\E>:kl=\EOD:kr=\EOC:ks=\E[?1h\E=:\
+       :ku=\EOA:le=^H:mb=\E[5m:md=\E[1m:me=\E[m:mr=\E[7m:\
+       :nd=\E[C:r2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:rc=\E8:\
+       :..sa=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m:\
+       :sc=\E7:se=\E[m:sf=^J:so=\E[7m:sr=\EM:st=\EH:ta=^I:\
+       :ue=\E[m:up=\E[A:us=\E[4m:
+qvt103-w|qume qvt103 132 cols:\
+       :co#132:li#24:\
+       :r2=\E>\E[?3h\E[?4l\E[?5l\E[?8h:tc=qvt103:
+qvt119+|qvt119p|qvt119|qume qvt 119 and 119PLUS terminals:\
+       :am:hs:mi:ms:\
+       :co#80:li#24:sg#0:\
+       :al=\EE:bl=^G:bt=\EI:cd=\Ey:ce=\Et:cl=\E*1:\
+       :cm=\E=%+ %+ :cr=^M:ct=\E3:dc=\EW:dl=\ER:do=^J:\
+       :ds=\Eg\Ef\r:ei=\Er:fs=^M:ho=^^:im=\Eq:\
+       :is=\EDF\EC\EG0\Er\E(\E%EX:k0=^AI\r:k1=^A@\r:\
+       :k2=^AA\r:k3=^AB\r:k4=^AC\r:k5=^AD\r:k6=^AE\r:\
+       :k7=^AF\r:k8=^AG\r:k9=^AH\r:kb=^H:kd=^J:kh=^^:kl=^H:\
+       :kr=^L:ku=^K:le=^H:nd=^L:pf=\EA:po=\E@:se=\EG0:sf=^J:\
+       :so=\EG4:sr=\EJ:st=\E1:ta=^I:ts=\Eg\Ef:ue=\EG0:up=^K:\
+       :us=\EG8:vb=\En0\En1:ve=\E.4:vs=\E.2:
+qvt119+-25|qvt119p-25|QVT 119 PLUS with 25 data lines:\
+       :li#25:tc=qvt119+:
+qvt119+-w|qvt119p-w|qvt119-w|QVT 119 and 119 PLUS in 132 column mode:\
+       :co#132:\
+       :is=\EDF\EC\EG0\Er\E(\E%\EX\En4:tc=qvt119+:
+qvt119+-25-w|qvt119p-25-w|qvt119-25-w|QVT 119 and 119 PLUS 132 by 25:\
+       :li#25:tc=qvt119+:
+qvt203|qvt203+|qume qvt 203 Plus:\
+       :al=\E[L:dc=\E[P:dl=\E[M:ei=\E[4l:im=\E[4h:ip=:\
+       :k0=\E[29~:k1=\E[17~:k2=\E[18~:k3=\E[19~:k4=\E[20~:\
+       :k5=\E[21~:k6=\E[23~:k7=\E[24~:k8=\E[25~:k9=\E[28~:\
+       :sf=\n:tc=qvt103:
+qvt203-w|qvt203-w-am|qume qvt 203 PLUS in 132 cols (w/advanced video):\
+       :co#132:li#24:\
+       :r2=\E>\E[?3h\E[?4l\E[?5l\E[?8h:tc=qvt203:
+qvt203-25|QVT 203 PLUS with 25 by 80 column mode:\
+       :co#80:li#25:\
+       :is=\E[=40h\E[?3l:tc=qvt203:
+qvt203-25-w|QVT 203 PLUS with 25 by 132 columns:\
+       :co#132:li#25:\
+       :r2=\E[?3h\E[=40h:tc=qvt203:
+
+
+tvi803|televideo 803:\
+       :cl=\E*:tc=tvi950:
+
+tvi910|televideo model 910:\
+       :am:ms:\
+       :co#80:it#8:li#24:sg#1:ug#1:\
+       :bl=^G:bt=\EI:cd=\EY:ce=\ET:ch=\E]%+ :cl=^Z:\
+       :cm=\E=%+ %+ :cr=^M:cv=\E[%+ :do=^J:ho=\E=\001\001:\
+       :if=/usr/share/tabset/stdcrt:k0=^AI\r:k1=^A@\r:\
+       :k2=^AA\r:k3=^AB\r:k4=^AC\r:k5=^AD\r:k6=^AE\r:\
+       :k7=^AF\r:k8=^AG\r:k9=^AH\r:kb=^H:kd=^J:kh=^^:kl=^H:\
+       :kr=^L:ku=^K:le=^H:nd=^L:se=\EG0:sf=^J:so=\EG4:ta=^I:\
+       :ue=\EG0:up=^K:us=\EG8:
+tvi910+|910+|televideo 910+:\
+       :al=\EE:dc=\EW:dl=\ER:ei=:ho=^^:ic=\EQ:im=:k0=^A@\r:\
+       :k1=^AA\r:k2=^AB\r:k3=^AC\r:k4=^AD\r:k5=^AE\r:\
+       :k6=^AF\r:k7=^AG\r:k8=^AH\r:k9=^AI\r:ll=\E=7 :tc=tvi910:
+
+tvi912|tvi914|tvi920|old televideo 912/914/920:\
+       :am:\
+       :co#80:it#8:li#24:sg#1:ug#1:\
+       :al=\EE:bl=^G:cd=\Ey:ce=\ET:cl=^Z:cm=\E=%+ %+ :cr=^M:\
+       :ct=\E3:dc=\EW:dl=\ER:do=^J:ei=:ho=^^:ic=\EQ:\
+       :if=/usr/share/tabset/stdcrt:im=:k0=^AI\r:k1=^A@\r:\
+       :k2=^AA\r:k3=^AB\r:k4=^AC\r:k5=^AD\r:k6=^AE\r:\
+       :k7=^AF\r:k8=^AG\r:k9=^AH\r:kb=^H:kd=^J:kl=^H:kr=^L:\
+       :ku=^K:le=^H:nd=^L:se=\Ek:sf=^J:so=\Ej:st=\E1:ta=^I:\
+       :ue=\Em:up=^K:us=\El:
+tvi912c|tvi912b|912c|912b|tvi|new televideo 912:\
+       :al=\EE:dl=\ER:tc=tvi912:
+tvi912-2p|tvi920-2p|912-2p|920-2p|tvi-2p|televideo w/2 pages:\
+       :te=\E-07 :ti=\E-17 :tc=tvi912:
+tvi912cc|tvi912 at cowell college:\
+       :cm@:tc=tvi912c:
+
+tvi920b|tvi920c|new televideo 920:\
+       :al=\EE:dl=\ER:k0=^AI\r:k1=^A@\r:k2=^AA\r:k3=^AB\r:\
+       :k4=^AC\r:k5=^AD\r:k6=^AE\r:k7=^AF\r:k8=^AG\r:\
+       :k9=^AH\r:tc=tvi912:
+
+tvi921|televideo model 921 with sysline same as page & real vi function:\
+       :am:hs:xn:xs:\
+       :co#80:li#24:sg#0:\
+       :ae=\E%:al=\EE:as=\E$:cd=\EY:ce=\ET:cl=^Z:\
+       :cm=3\E=%+ %+ :cr=^M:dc=\EW:dl=1*\ER:do=^V:\
+       :ds=\Ef\r\Eg:ei=:fs=\Eg:ho=^^:ic=\EQ:\
+       :if=/usr/lib/tabset/stdcrt:im=:\
+       :is=\El\E"\EF1\E.3\017\EA\E<:kA=\EE:kC=^Z:kD=\EW:\
+       :kE=\ET:kI=\EQ:kL=1*\ER:kS=\EY:kb=^H:kd=^V:kl=^H:\
+       :kr=^L:ku=^K:le=^H:nd=^L:nw=^M^J:se=\EG0:sf=^J:\
+       :so=\EG4:ta=^I:ts=\Ef\EG0:ue=\EG0:up=^K:us=\EG8:\
+       :ve=\E.3:vs=\E.2:
+tvi92B|televideo model 921 with sysline same as page & real vi function:\
+       :am:hs:xn:xs:\
+       :co#80:li#24:sg#0:\
+       :ae=\E%:al=\EE:as=\E$:cd=\EY:ce=\ET:cl=^Z:\
+       :cm=3\E=%+ %+ :cr=^M:dc=\EW:dl=1*\ER:do=^V:\
+       :ds=\Ef\r\Eg:ei=:fs=\Eg:ho=^^:ic=\EQ:\
+       :if=/usr/lib/tabset/stdcrt:im=:\
+       :is=\El\E"\EF1\E.3\017\EA\E<:kA=\EE:kC=^Z:kD=\EW:\
+       :kE=\ET:kI=\EQ:kL=1*\ER:kS=\EY:kb=^H:kd=^V:kl=^H:\
+       :kr=^L:ku=^K:le=^H:nd=^L:nw=^M^J:se=\EG0:sf=^J:\
+       :so=\EG4:ta=^I:ts=\Ef\EG0:ue=\EG0:up=^K:us=\EG8:\
+       :vb=\Eb\Ed:ve=\E.3:vs=\E.2:
+tvi92D|tvi92B with DTR instead of XON/XOFF & better padding:\
+       :al=2*\EE:dl=2*\ER:is=\El\E"\EF1\E.3\016\EA\E<:\
+       :kA=2*\EE:kL=2*\ER:tc=tvi92B:
+
+tvi924|televideo tvi924:\
+       :am:bw:hs:in:mi:ms:xn:xo:\
+       :co#80:it#8:li#24:sg#0:ws#80:\
+       :F1=^AK\r:F2=^AL\r:F3=^AM\r:F4=^AN\r:F5=^AO\r:al=\EE:\
+       :bl=^G:bt=\EI:cd=\Ey:ce=\Et:cl=\E*0:cm=\E=%+ %+ :\
+       :cr=^M:cs=\E_%+ %+ :ct=\E3:dc=\EW:dl=\ER:do=^V:\
+       :ds=\Es0\Ef\031:ei=:fs=\031\Es1:ho=^^:\
+       :i1=\017\E%\E'\E(\EDF\EC\EG0\EN0\Es0\Ev0:ic=\EQ:\
+       :if=/usr/lib/tabset/stdcrt:im=:k0=^A@\r:k1=^AA\r:\
+       :k2=^AB\r:k3=^AC\r:k4=^AD\r:k5=^AE\r:k6=^AF\r:\
+       :k7=^AG\r:k8=^AH\r:k9=^AI\r:k;=^AJ\r:kA=\EE:kC=\E*0:\
+       :kD=\EW:kE=\Et:kI=\EQ:kL=\ER:kS=\Ey:kb=^H:kd=^V:\
+       :kh=^^:kl=^H:kr=^L:ku=^K:l0=F1:l1=F2:l2=F3:l3=F4:\
+       :l4=F5:l5=F6:l6=F7:l7=F8:l8=F9:l9=F10:la=F11:le=^H:\
+       :mb=\EG2:me=\EG0:mk=\EG1:nd=^L:pk=\E|%+1%s\031:\
+       :se=\EG0:sf=^J:so=\EG4:sr=\Ej:st=\E1:ta=^I:ts=\Ef:\
+       :ue=\EG0:up=^K:us=\EG8:vb=\Eb\Ed:ve=\E.3:vi=\E.0:\
+       :vs=\E.1:
+
+tvi925|925|televideo 925:\
+       :am:bw:hs:ul:\
+       :co#80:li#24:sg#1:ug#1:\
+       :al=\EE:bl=^G:bt=\EI:cd=\EY:ce=\ET:cl=^Z:\
+       :cm=\E=%+ %+ :cr=^M:ct=\E3:dc=\EW:dl=\ER:do=^V:\
+       :ds=\Eh:ei=:fs=^M\Eg:ho=^^:ic=\EQ:im=:\
+       :is=\El\E"\nkclr=\032:k0=^AI\r:k1=^A@\r:k2=^AA\r:\
+       :k3=^AB\r:k4=^AC\r:k5=^AD\r:k6=^AE\r:k7=^AF\r:\
+       :k8=^AG\r:k9=^AH\r:kA=\EE:kD=\EW:kE=\ET:kI=\EQ:\
+       :kL=\ER:kS=\EY:kb=^H:kd=^V:kh=^^:kl=^H:kr=^L:ku=^K:\
+       :le=^H:nd=^L:se=\EG0:sf=^J:so=\EG4:sr=\Ej:st=\E1:\
+       :ta=^I:ts=\Eh\Ef:ue=\EG0:up=^K:us=\EG8:vb=\Eb\Ed:\
+       :ve=\E.4:vs=\E.2:
+
+tvi950|950|televideo 950:\
+       :am:hs:mi:ms:xn:xo:\
+       :co#80:it#8:li#24:sg#1:ug#1:\
+       :ac=d\rc\014e\nb\011i\013:ae=^X:al=\EE:as=^U:bl=^G:\
+       :bt=\EI:cd=\Ey:ce=\Et:cl=\E*:cm=\E=%+ %+ :cr=^M:\
+       :ct=\E3:dc=\EW:dl=\ER:do=^J:ds=\Eg\Ef\r:ei=\Er:fs=^M:\
+       :ho=^^:ic=\EQ:im=\Eq:\
+       :is=\EDF\EC\Ed\EG0\Eg\Er\EO\E'\E(\E%\Ew\EX\Ee \017\011\El\E016\E004\Ex0\200\200\Ex1\200\200\Ex2\200\200\011\Ex3\200\200\Ex4\r\200\Ef\r:\
+       :k0=^A0\r:k1=^A@\r:k2=^AA\r:k3=^AB\r:k4=^AC\r:\
+       :k5=^AD\r:k6=^AE\r:k7=^AF\r:k8=^AG\r:k9=^AH\r:kA=\EE:\
+       :kB=\EI:kC=\E*:kD=\EW:kE=\Et:kI=\EQ:kL=\ER:kS=\Ey:\
+       :kb=^H:kd=^V:kh=^^:kl=^H:kr=^L:ku=^K:le=^H:nd=^L:\
+       :pf=\Ea:po=\E`:se=\EG0:sf=^J:so=\EG4:sr=\Ej:st=\E1:\
+       :ta=^I:ts=\Eg\Ef:ue=\EG0:up=^K:us=\EG8:vb=\Eb\Ed:
+tvi950-2p|950-2p|televideo950 w/2 pages:\
+       :is=\EDF\EC\Ed\EG0\Eg\Er\EO\E'\E(\E%\Ew\EX\Ee \017\011\Ek\E016\E004\Ex0\200\200\Ex1\200\200\Ex2\200\200\011\Ex3\200\200\Ex4\r\200\E\\2\E-07 \011:\
+       :ke=\Ek:ks=\El:te=\E\\2\E-07 :ti=\E\\1\E-07 :tc=tvi950:
+tvi950-4p|950-4p|televideo950 w/4 pages:\
+       :is=\EDF\EC\Ed\EG0\Eg\Er\EO\E'\E(\E%\Ew\EX\Ee \017\011\Ek\E016\E004\Ex0\200\200\Ex1\200\200\Ex2\200\200\011\Ex3\200\200\Ex4\r\200\E\\3\E-07 \011:\
+       :ke=\Ek:ks=\El:te=\E\\3\E-07 :ti=\E\\1\E-07 :tc=tvi950:
+tvi950-rv|950-rv|televideo950 rev video:\
+       :is=\EDF\EC\Eb\EG0\Eg\Er\EO\E'\E(\E%\Ew\EX\Ee \017\011\El\E016\E004\Ex0\200\200\Ex1\200\200\Ex2\200\200\011\Ex3\200\200\Ex4\r\200:\
+       :vb=\Ed\Eb:tc=tvi950:
+
+tvi950-rv-2p|950-rv-2p|televideo950 rev video w/2 pages:\
+       :is=\EDF\EC\Eb\EG0\Eg\Er\EO\E'\E(\E%\Ew\EX\Ee \017\011\Ek\E016\E004\Ex0\200\200\Ex1\200\200\Ex2\200\200\011\Ex3\200\200\Ex4\r\200\E\\2\E-07 :\
+       :ke=\Ek:ks=\El:te=\E\\2\E-07 :ti=\E\\1\E-07 :\
+       :vb=\Ed\Eb:tc=tvi950:
+
+tvi950-rv-4p|950-rv-4p|televideo950 rev video w/4 pages:\
+       :is=\EDF\EC\Eb\EG0\Er\EO\E'\E(\E%\Ew\EX\Ee \017\011\Ek\E016\E004\Ex0\200\200\Ex1\200\200\Ex2\200\200\011\Ex3\200\200\Ex4\r\200\E\\3\E-07 :\
+       :ke=\Ek:ks=\El:te=\E\\3\E-07 :ti=\E\\1\E-07 :\
+       :vb=\Ed\Eb:tc=tvi950:
+tvi955|televideo 955:\
+       :5i:ms@:\
+       :it#8:sg@:\
+       :RA=\E[=7l:RX=^N:SA=\E[=7h:SX=^O:\
+       :ac=0_`RjHkGlFmEnIoPqKsQtMuLvOwNxJ:ae=\E%:as=\E$:\
+       :cm=\E[%i%d;%dH:do=^V:\
+       :is=\E[=3l\EF1\Ed\EG0\E[=5l\E%\El:kM=\EQ:kN=\EK:\
+       :kP=\EJ:kT=\E1:ka=\E3:kt=\E2:mb=\EG2:me=\EG0\E[=5l:\
+       :mh=\E[=5h:mk=\EG1:mr=\EG4:ps=\EP:\
+       :r1=\EDF\EC\Eg\Er\EO\E'\E(\Ew\EX\Ee \017\E0P\E6\200\E0p\E4\200\Ef\r:\
+       :sf@:ve=\E.2:vi=\E.0:vs=\E.1:tc=tvi950:
+tvi955-w|955-w|televideo955 w/132 cols:\
+       :co#132:\
+       :is=\E[=3h\EF1\Ed\EG0\E[=5l\E%\El:tc=tvi955:
+tvi955-hb|955-hb|televideo955 half-bright:\
+       :is=\E[=3l\EF1\Ed\EG0\E[=5h\E%\El:md=\E[=5l:\
+       :me=\EG0\E[=5h:mh@:tc=tvi955:
+tvi970|televideo 970:\
+       :da:db:mi:ms:\
+       :co#80:it#8:li#24:\
+       :ae=\E(B:al=\E[L:as=\E(B:bt=\E[Z:cd=\E[0J:ce=\E[0K:\
+       :cl=\E[H\E[2J:cm=\E[%i%d;%df:dc=\E[P:dl=\E[M:do=\ED:\
+       :ds=\Eg\Ef\r:ei=\E[4l:im=\E[4h:\
+       :is=\E<\E[?21l\E[19h\E[1Q\E[10l\E[7l\E[H\E[2J:\
+       :k1=\E?a:k2=\E?b:k3=\E?c:k4=\E?d:k5=\E?e:k6=\E?f:\
+       :k7=\E?g:k8=\E?h:k9=\E?i:kb=^H:kd=\E[B:kh=\E[H:\
+       :kl=\E[D:kr=\E[C:ku=\E[A:le=^H:nd=\E[C:se=\E[m:\
+       :so=\E[7m:sr=\EM:ta=^I:ue=\E[m:up=\EM:us=\E[4m:\
+       :vb=\E[5;m\E[0;m:vs=\E[1Q:
+tvipt|televideo personal terminal:\
+       :am:\
+       :co#80:li#24:\
+       :SA=\Ev:al=\EE:bt=\EI:ce=\ET:cl=^Z:cm=\E=%+ %+ :\
+       :dl=\ER:ho=^^:if=/usr/share/tabset/stdcrt:\
+       :is=\Ev\Eu\EK:kb=^H:kd=^J:kl=^H:kr=^L:ku=^K:le=^H:\
+       :nd=^L:se=\EF:so=\EG1@A\EH:ue=\EF:up=^K:us=\EG1B@\EH:
+
+
+vi50|visual 50:\
+       :am:ms:\
+       :co#80:it#8:li#24:\
+       :al=\EL:bt=4\Ez:cd=\Ek:ce=16\EK:cl=\Ev:cm=\EY%+ %+ :\
+       :cr=^M:dl=3*\EM:do=\EB:ho=\EH:k1=\EP:k2=\EQ:k3=\ER:\
+       :k4=\EV:k5=\EE:k6=\E]:k7=\EL:k8=\Ev:k9=\EM:kb=^H:\
+       :kd=\EB:kh=\EH:kl=\ED:kr=\EC:ku=\EA:le=^H:nd=\EC:\
+       :nw=^M^J:sf=^J:ta=^I:up=\EA:
+vi50adm|visual 50 in adm3a mode:\
+       :am:ms:\
+       :co#80:it#8:li#24:\
+       :al=\EL:bl=^G:cd=\Ek:ce=\EK:cl=^Z:cm=\E=%+ %+ :cr=^M:\
+       :dl=\EM:do=^J:ho=\EH:kb=^H:kd=\EB:kh=\EH:kl=\ED:\
+       :kr=\EC:ku=\EA:le=^H:nd=^L:se=\ET:sf=^J:so=\EU:ta=^I:\
+       :up=^K:
+vi55|Visual 55:\
+       :am:mi:ms:\
+       :co#80:it#8:li#24:\
+       :al=\EL:cd=\EJ:ce=\EK:cl=\Ev:cm=\EY%+ %+ :\
+       :cs=\E_%+A%+A:dc=\Ew:dl=\EM:do=^J:ei=\Eb:ho=\EH:\
+       :im=\Ea:is=\Ev\E_AX\Eb\EW\E9P\ET:kb=^H:kd=\EB:kl=\ED:\
+       :kr=\EC:ku=\EA:le=^H:nd=\EC:se=\ET:so=\EU:sr=\EI:\
+       :ta=^I:up=\EA:
+
+vi200|vis200|visual 200 with function keys:\
+       :am:\
+       :co#80:it#8:li#24:\
+       :al=\EL:bl=^G:cd=\Ey:ce=\Ex:cl=\Ev:cm=\EY%+ %+ :\
+       :cr=^M:dc=\EO:dl=\EM:do=^J:ei=\Ej:ho=\EH:im=\Ei:\
+       :is=\E3\Eb\Ej\E\\\El\EG\Ec\Ek:k0=\EP:k1=\EQ:k2=\ER:\
+       :k3=\E :k4=\E!:k5=\E":k6=\E#:k7=\E$:k8=\E%:k9=\E&:\
+       :kd=\EB:kh=\EH:kl=\ED:kr=\EC:ku=\EA:le=^H:nd=\EC:\
+       :se=\E3:sf=^J:so=\E4:sr=\EI:ta=^I:up=\EA:ve=\Ec:\
+       :vs=\Ed:
+vi200-f|visual|visual 200 no function keys:\
+       :is=\E3\Eb\Ej\E\\\El\EG\Ed\Ek:k0=\E?p:k1=\E?q:\
+       :k2=\E?r:k3=\E?s:k4=\E?t:k5=\E?u:k6=\E?v:k7=\E?w:\
+       :k8=\E?x:k9=\E?y:ke=\E>:ks=\E=:se@:so@:tc=vi200:
+vi200-rv|visual 200 reverse video:\
+       :se=\E3:so=\E4:sr@:ve@:vs@:tc=vi200:
+
+vi300|visual 300 ansi x3.64:\
+       :am:bw:mi:xn:\
+       :co#80:li#24:\
+       :RA=\E[?7l:SA=\E[?7h:al=\E[L:bl=^G:bt=\E[Z:cd=\E[J:\
+       :ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=^M:dc=\E[P:\
+       :dl=\E[M:do=\E[B:ei=\E[4l:ho=\E[H:im=\E[4h:\
+       :is=\E[7s\E[2;3;4;20;?5;?6l\E[12;?7h\E[1Q\E[0;1(D\E[8s:\
+       :k1=\E_A\E\\:k2=\E_B\E\\:k3=\E_C\E\\:k4=\E_D\E\\:\
+       :k5=\E_E\E\\:k6=\E_F\E\\:k7=\E_G\E\\:k8=\E_H\E\\:\
+       :k9=\E_I\E\\:kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:ku=\E[A:\
+       :le=^H:nd=\E[C:se=\E[m:sf=^J:so=\E[1m:sr=\EM:ta=^I:\
+       :ue=\E[m:up=\E[A:us=\E[4m:
+vi300-old|visual 300 with old firmware (set edit extent reversed):\
+       :is=\E[7s\E[2;3;4;20;?5;?6l\E[12;?7h\E[2Q\E[0;1(D\E[8s:tc=vi300:
+
+vi500|visual 500:\
+       :am:mi:ms:\
+       :co#80:it#8:li#33:\
+       :ae=^O:al=3*\EL\Ex:as=^N:bt=4\Ez:cd=3*\Ey:ce=16\Ex:\
+       :cl=6*\Ev:cm=\EY%+ %+ :cr=^M:cs=\E(%+ %+ :dc=3*\EO:\
+       :dl=3*\EM:do=\EB:ei=\Ej:ho=\EH:im=\Ei:\
+       :is=\E3\E\001\E\007\E\003\Ek\EG\Ed\EX\El\E>\Eb\E\\:\
+       :kb=^H:kd=\EB:kh=\EH:kl=\ED:kr=\EC:ku=\EA:le=^H:\
+       :nd=\EC:nw=^M^J:se=\E^G:sf=^J:so=\E^H:ta=8\011:\
+       :ue=\E^C:up=\EA:us=\E^D:
+
+vi550|visual 550 ansi x3.64:\
+       :li#33:\
+       :cl=\030\E[H\E[2J:tc=vi300:
+
+vi603|visual603|visual 603:\
+       :hs:mi:\
+       :al=\E[L:bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
+       :cm=\E[%i%d;%dH:cs=\E[%i%d;%dr:dc=\E[P:dl=\E[M:\
+       :ds=\EP2;1~\E\\:ei=\E[4l:fs=\E\\:\
+       :i1=\E>\E[?3l\E[?4l\E[?7h\E[?8h\E[1;24r:im=\E[4h:\
+       :mb=\E[5m:md=\E[1m:me=\E[m:mr=\E[7m:nd=\E[C:\
+       :se=\E[27m:sf=\ED:so=\E[7m:sr=\EM:ts=\EP2~:ue=\E[24m:\
+       :up=\E[A:us=\E[4m:tc=vt100:
+
+
+wy30|wyse30|Wyse 30:\
+       :5i:am:bw:hs:mi:ms:xo:\
+       :Nl#8:co#80:lh#1:li#24:lw#8:ma#1:ws#45:\
+       :#2=\E{:&3=\Er:@8=\E7:LF=\EA11:LO=\EA10:\
+       :ac=0wa_h[jukslrmqnxqzttuyv]wpxv:ae=\EH^C:al=\EE:\
+       :as=\EH^B:bl=^G:bt=\EI:cd=\EY:ce=\ET:cl=\E+:\
+       :cm=\E=%+ %+ :cr=^M:ct=\E0:dc=\EW:dl=\ER:do=^J:\
+       :ds=\EF\r:ei=\Er:fs=^M:ho=^^:im=\Eq:ip=:\
+       :is=\E'\E(\E^3\E`9\016\024:k1=^A@\r:k2=^AA\r:\
+       :k3=^AB\r:k4=^AC\r:k5=^AD\r:k6=^AE\r:k7=^AF\r:\
+       :k8=^AG\r:kA=\EE:kB=\EI:kD=\EW:kE=\ET:kI=\EQ:kL=\ER:\
+       :kN=\EK:kP=\EJ:kS=\EY:kb=^H:kd=^J:kh=^^:kl=^H:kr=^L:\
+       :ku=^K:le=^H:ll=^^^K:me=\E(\EH\003:mh=\E`7\E):\
+       :mp=\E`7\E):nd=^L:nw=^M^J:pf=^T:pn=\Ez%+/%s\r:po=^X:\
+       :ps=\EP:px=\Ez%+?%s\177:\
+       :..sa=%?%p1%p5%p8%|%|%t\E`7\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;:\
+       :se=\E(:sf=\n:so=\E`7\E):sr=\Ej:st=\E1:ta=\011:\
+       :ts=\EF:up=^K:vb=\E`8\E`9:ve=\E`1:vi=\E`0:
+wy30-mc|wyse30-mc|wyse 30 with magic cookies:\
+       :ms@:\
+       :ma@:sg#1:ug#1:\
+       :ae=\EG0\EH\003:as=\EG0\EH\002:mb=\EG2:\
+       :me=\EG0\E(\EH\003:mh=\EGp:mk=\EG1:mp=\EG0\E):\
+       :mr=\EG4:\
+       :..sa=\EG%'0'%?%p2%p6%|%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c%?%p8%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;:\
+       :se=\EG0:so=\EG4:te=\EG0:ue=\EG0:us=\EG8:tc=wy30:
+wy30-vb|wyse30-vb|wyse 30 visible bell:\
+       :bl@:tc=wy30:
+wy50|wyse50|Wyse 50:\
+       :5i:am:bw:hs:mi:ms:xo:\
+       :Nl#8:co#80:lh#1:li#24:lw#8:ma#1:ws#45:\
+       :#2=\E{:%9=\EP:&3=\Er:@8=\E7:F1=^AJ\r:F2=^AK\r:\
+       :F3=^AL\r:F4=^AM\r:F5=^AN\r:F6=^AO\r:LF=\EA11:\
+       :LO=\EA10:ac=0wa_h[jukslrmqnxqzttuyv]wpxv:ae=\EH^C:\
+       :al=\EE:as=\EH^B:bl=^G:bt=\EI:cd=\EY:ce=\ET:cl=\E+:\
+       :cm=\E=%+ %+ :cr=^M:ct=\E0:dc=\EW:dl=\ER:do=^J:\
+       :ds=\EF\r:ei=\Er:fs=^M:ho=^^:i1=\E`\072\E`9:im=\Eq:\
+       :ip=:is=\016\024\E'\E(:k1=^A@\r:k2=^AA\r:k3=^AB\r:\
+       :k4=^AC\r:k5=^AD\r:k6=^AE\r:k7=^AF\r:k8=^AG\r:\
+       :k9=^AH\r:k;=^AI\r:kA=\EE:kB=\EI:kD=\EW:kE=\ET:\
+       :kI=\EQ:kL=\ER:kN=\EK:kP=\EJ:kS=\EY:kb=^H:kd=^J:\
+       :kh=^^:kl=^H:kr=^L:ku=^K:le=^H:ll=^^^K:me=\E(\EH\003:\
+       :mh=\E`7\E):mp=\E`7\E):mr=\E`6\E):nd=^L:nw=^M^J:\
+       :pf=^T:pn=\Ez%+/%s\r:po=^X:ps=\EP:px=\Ez%+?%s\177:\
+       :..sa=%?%p1%p3%|%t\E`6\E)\n%e%p5%p8%|%t\E`7\E)%e\E(%;\n%?%p9%t\EH\002%e\EH\003%;:\
+       :se=\E(:sf=\n:so=\E`6\E):sr=\Ej:st=\E1:ta=^I:ts=\EF:\
+       :up=^K:vb=\E`8\E`9:ve=\E`1:vi=\E`0:
+wy50-mc|wyse50-mc|wyse 50 with magic cookies:\
+       :ms@:\
+       :ma@:sg#1:ug#1:\
+       :ae=\EG0\EH\003:as=\EG0\EH\002:mb=\EG2:\
+       :me=\EG0\E(\EH\003:mh=\EGp:mk=\EG1:mp=\EG0\E):\
+       :mr=\EG4:\
+       :..sa=\EG%'0'%?%p2%p6%|%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c%?%p8%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;:\
+       :se=\EG0:so=\EGt:te=\EG0:ue=\EG0:us=\EG8:tc=wy50:
+wy50-vb|wyse50-vb|wyse 50 visible bell:\
+       :bl@:tc=wy50:
+wy50-w|wyse50-w|wyse 50 132-column:\
+       :Nl#16:co#132:lw#7:ws#97:\
+       :cm=\Ea%i%dR%dC:dc=\EW:i1=\E`;\E`9:tc=wy50:
+wy50-wvb|wyse50-wvb|wyse 50 132-column visible bell:\
+       :bl@:tc=wy50-w:
+wy350|wyse350|Wyse 350:\
+       :5i:am:bw:hs:mi:xo:\
+       :Co#8:NC#55:Nl#8:co#80:lh#1:li#24:lw#8:pa#8:sg#1:\
+       :ug#1:ws#45:\
+       :#2=\E{:%9=\EP:&3=\Er:@8=\E7:F1=^AJ\r:F2=^AK\r:\
+       :F3=^AL\r:F4=^AM\r:F5=^AN\r:F6=^AO\r:LF=\EA11:\
+       :LO=\EA10:Sb= :ac=0wa_h[jukslrmqnxqzttuyv]wpxv:\
+       :ae=\EG0\EH\003:al=\EE:as=\EG0\EH\002:bl=^G:bt=\EI:\
+       :cd=\EY:ce=\ET:cl=\E+:cm=\E=%+ %+ :cr=^M:ct=\E0:\
+       :dc=\EW:dl=\ER:do=^J:ds=\EF\r:ei=\Er:fs=^M:ho=^^:\
+       :i1=\E`\072\E`9:i2=\E%?:im=\Eq:ip=:is=\016\024\E'\E(:\
+       :k1=^A@\r:k2=^AA\r:k3=^AB\r:k4=^AC\r:k5=^AD\r:\
+       :k6=^AE\r:k7=^AF\r:k8=^AG\r:k9=^AH\r:k;=^AI\r:kA=\EE:\
+       :kB=\EI:kD=\EW:kE=\ET:kI=\EQ:kL=\ER:kN=\EK:kP=\EJ:\
+       :kS=\EY:kb=^H:kd=^J:kh=^^:kl=^H:kr=^L:ku=^K:le=^H:\
+       :ll=^^^K:mb=\EG2:me=\EG0\E(\EH\003%{0}%PA%{0}%PC:\
+       :mh=\EGp:mk=\EG1:mp=\EG0\E):mr=\EG4:nd=^L:nw=^M^J:\
+       :oc=\E%?:op=\EG0:pf=^T:pn=\Ez%+/%s\r:po=^X:ps=\EP:\
+       :px=\Ez%+?%s\177:se=\EG0:sf=\n:so=\EG4:sr=\Ej:st=\E1:\
+       :ta=^I:ts=\EF:ue=\EG0:up=^K:us=\EG8:vb=\E`8\E`9:\
+       :ve=\E`1:vi=\E`0:
+wy350-vb|wyse350-vb|wyse 350 visible bell:\
+       :bl@:tc=wy350:
+wy350-w|wyse350-w|wyse 350 132-column:\
+       :Nl#16:co#132:lw#7:ws#97:\
+       :cm=\Ea%i%dR%dC:dc=\EW:i1=\E`;\E`9:tc=wy350:
+wy350-wvb|wyse350-wvb|wyse 350 132-column visible bell:\
+       :bl@:tc=wy350-w:
+wy100|wyse 100:\
+       :hs:mi:\
+       :co#80:li#24:sg#1:ug#1:\
+       :al=\EE:bl=^G:cd=\EY:ce=\ET:cl=\E;:cm=\E=%+ %+ :\
+       :cr=^M:dc=\EW:dl=\ER:do=^J:ds=\EA31:ei=\Er:fs=^M:\
+       :im=\Eq:is=\Eu\E0:k1=^A@\r:k2=^AA\r:k3=^AB\r:\
+       :k4=^AC\r:k5=^AD\r:k6=^AE\r:k7=^AF\r:k8=^AG\r:kb=^H:\
+       :kd=^J:kh=\E{:kl=^H:kr=^L:ku=^K:le=^H:nd=^L:se=\EG0:\
+       :sf=^J:so=\EG4:ts=\EF:ue=\EG0:up=^K:us=\EG8:
+wy120|wyse120|wy150|wyse150|Wyse 120/150:\
+       :am:bw:hs:km:mi:ms:xo:\
+       :co#80:it#8:li#24:pb#9601:ws#45:\
+       :ae=\EcD:al=\EE:as=\EcE:bl=^G:bt=\EI:cd=\EY:ce=\ET:\
+       :cl=\E+:cm=\E=%+ %+ :cr=^M:dc=\EW:dl=\ER:do=^J:\
+       :ds=\EF\r:ei=\Er:fs=^M:ho=^^:i1=\EcB0\EcC1:\
+       :i2=\EwJ\Ew1:im=\Eq:ip=:\
+       :is=\Ed$\EcD\E'\Er\EH\003\Ed/\EO\Ee1\Ed*\E`@\E`9\E`1\016\024\El:\
+       :k1=^A@\r:k2=^AA\r:k3=^AB\r:k4=^AC\r:k5=^AD\r:\
+       :k6=^AE\r:k7=^AF\r:k8=^AG\r:k9=^AH\r:kD=\EW:kI=\EQ:\
+       :kN=\EK:kP=\EJ:kb=^H:kd=^J:kh=^^:kl=^H:kr=^L:ku=^K:\
+       :le=^H:ll=^^^K:mb=\EG2:me=\E(\EH\003\EG0\EcD:mh=\EGp:\
+       :mr=\EG4:nd=^L:nw=\r\n:se=\EG0:sf=\n:so=\EGt:sr=\Ej:\
+       :st=\E1:ta=\011:te=\Ew1:ti=\Ew0:ts=\EF:ue=\EG0:up=^K:\
+       :us=\EG8:vb=\E`8\E`9:ve=\E`1:vi=\E`0:
+wy120-w|wyse120-w|wy150-w|wyse150-w|wyse 120/150 132-column:\
+       :Nl#16:co#132:lw#7:ws#97:\
+       :cm=\Ea%i%dR%dC:dc=\EW:ip=:r2=\E`;:tc=wy120:
+wy120-25|wyse120-25|wy150-25|wyse150-25|wyse 120/150 80-column 25-lines:\
+       :Nl@:lh@:li#25:lw@:\
+       :pn@:r3=\EwG\Ee):tc=wy120:
+wy120-25-w|wyse120-25-w|wy150-25-w|wyse150-25-w|wyse 120/150 132-column 25-lines:\
+       :Nl@:lh@:li#25:lw@:\
+       :pn@:r3=\EwG\Ee):tc=wy120-w:
+wy120-vb|wyse120-vb|wy150-vb|wyse150-vb|Wyse 120/150 visible bell:\
+       :bl@:tc=wy120:
+wy120-w-vb|wy120-wvb|wyse120-wvb|wy150-w-vb|wyse150-w-vb|Wyse 120/150 132-column visible bell:\
+       :bl@:tc=wy120-w:
+wy60|wyse60|Wyse 60:\
+       :am:bw:hs:km:mi:ms:\
+       :co#80:li#24:ws#45:\
+       :ae=\EcD:al=\EE:as=\EcE:bl=^G:bt=\EI:cd=\EY:ce=\ET:\
+       :cl=\E+:cm=\E=%+ %+ :cr=^M:ct=\E0:dc=\EW:dl=\ER:\
+       :do=^J:ds=\EF\r:ei=\Er:fs=^M:ho=\E{:i1=\EcB0\EcC1:\
+       :i2=\EwJ\Ew1:im=\Eq:ip=:\
+       :is=\Ed$\EcD\E'\Er\EH\003\Ed/\EO\Ee1\Ed*\E`@\E`9\E`1\016\024\El:\
+       :k1=^A@\r:k2=^AA\r:k3=^AB\r:k4=^AC\r:k5=^AD\r:\
+       :k6=^AE\r:k7=^AF\r:k8=^AG\r:k9=^AH\r:kD=\EW:kI=\EQ:\
+       :kN=\EK:kP=\EJ:kb=^H:kd=^J:kh=^^:kl=^H:kr=^L:ku=^K:\
+       :le=^H:ll=\E{^K:mb=\EG2:me=\E(\EH\003\EG0\EcD:\
+       :mh=\EGp:mr=\EG4:nd=^L:nw=\r\n:se=\EG0:sf=\n:so=\EGt:\
+       :sr=\Ej:st=\E1:ta=\011:te=\Ew1:ti=\Ew0:ts=\EF:\
+       :ue=\EG0:up=^K:us=\EG8:vb=\E`8\E`9:ve=\E`1:vi=\E`0:
+wy60-w|wyse60-w|wyse 60 132-column:\
+       :Nl#16:co#132:lw#7:ws#97:\
+       :cm=\Ea%i%dR%dC:dc=\EW:ip=:r2=\EeF\E`;:tc=wy60:
+wy60-25|wyse60-25|wyse 60 80-column 25-lines:\
+       :Nl@:lh@:li#25:lw@:\
+       :pn@:r3=\EwG\Ee):tc=wy60:
+wy60-25-w|wyse60-25-w|wyse 60 132-column 25-lines:\
+       :Nl@:lh@:li#25:lw@:\
+       :pn@:r3=\EwG\Ee):tc=wy60-w:
+wy60-42|wyse60-42|wyse 60 80-column 42-lines:\
+       :li#42:\
+       :al=\EE:cd=\Ey:cl=\E+:cm=\E=%+ %+ :dc=\EW:dl=\ER:\
+       :i1=\EcB2\EcC3:ip=:nw=\r\n:r3=\Ee*:sf=\n:sr=\Ej:tc=wy60:
+wy60-42-w|wyse60-42-w|wyse 60 132-column 42-lines:\
+       :Nl#16:co#132:lw#7:ws#97:\
+       :cd=\Ey:cl=\E+:cm=\Ea%i%dR%dC:dc=\EW:ho=\036:ip=:\
+       :nw=\r\n:r2=\EeF\E`;:tc=wy60-42:
+wy60-43|wyse60-43|wyse 60 80-column 43-lines:\
+       :Nl@:lh@:li#43:lw@:\
+       :pn@:r3=\Ee+:tc=wy60-42:
+wy60-43-w|wyse60-43-w|wyse 60 132-column 43-lines:\
+       :Nl@:lh@:li#43:lw@:\
+       :pn@:r3=\Ee+:tc=wy60-42-w:
+wy60-vb|wyse60-vb|Wyse 60 visible bell:\
+       :bl@:tc=wy60:
+wy60-w-vb|wy60-wvb|wyse60-wvb|Wyse 60 132-column visible bell:\
+       :bl@:tc=wy60-w:
+
+wy99gt|wyse99gt|Wyse 99gt:\
+       :ms@:\
+       :al=\EE:cd=\Ey:ce=\Et:cl=\E+:dc=\EW:dl=\ER:i2=\Ew0:\
+       :ip=:nw@:r2=\E`\072:sf=\n:sr=\Ej:ta=\011:te=\Ew0:\
+       :ti=\Ew1:u0=\E~>\E8:u1=\E[42h:vb=\E`8\E`9:tc=wy60:
+wy99gt-w|wyse99gt-w|wyse 99gt 132-column:\
+       :Nl#16:co#132:lw#7:ws#97:\
+       :cd=\Ey:cl=\E+:cm=\Ea%i%dR%dC:dc=\EW:ip=:r2=\E`;:tc=wy99gt:
+wy99gt-25|wyse99gt-25|wyse 99gt 80-column 25-lines:\
+       :Nl@:lh@:li#25:lw@:\
+       :pn@:r2=\E`\072:r3=\EwG\Ee):tc=wy99gt:
+wy99gt-25-w|wyse99gt-25-w|wyse 99gt 132-column 25-lines:\
+       :Nl@:lh@:li#25:lw@:\
+       :pn@:r2=\E`;:tc=wy99gt-w:
+wy99gt-vb|wyse99gt-vb|Wyse 99gt visible bell:\
+       :bl@:tc=wy99gt:
+wy99gt-w-vb|wy99gt-wvb|wyse99gt-wvb|Wyse 99gt 132-column visible bell:\
+       :bl@:tc=wy99gt-w:
+wy160|wyse160|Wyse 160:\
+       :am:bw:hs:km:mi:ms:\
+       :co#80:li#24:ws#38:\
+       :ae=\EcD:al=\EE:as=\EcE:bl=^G:bt=\EI:cd=\EY:ce=\ET:\
+       :cl=\E+:cm=\E=%+ %+ :cr=^M:ct=\E0:dc=\EW:dl=\ER:\
+       :do=^J:ds=\EF\r:ei=\Er:fs=^M:ho=\E{:i1=\EcB0\EcC1:\
+       :i2=\Ew0:im=\Eq:ip=:\
+       :is=\Ed$\EcD\E'\Er\EH\003\Ed/\EO\Ee1\Ed*\E`@\E`9\E`1\016\024\El:\
+       :k1=^A@\r:k2=^AA\r:k3=^AB\r:k4=^AC\r:k5=^AD\r:\
+       :k6=^AE\r:k7=^AF\r:k8=^AG\r:k9=^AH\r:kD=\EW:kI=\EQ:\
+       :kN=\EK:kP=\EJ:kb=^H:kd=^J:kh=^^:kl=^H:kr=^L:ku=^K:\
+       :le=^H:ll=\E{^K:mb=\EG2:me=\E(\EH\003\EG0\EcD:\
+       :mh=\EGp:mr=\EG4:nd=^L:nw=\r\n:se=\EG0:sf=\n:so=\EGt:\
+       :sr=\Ej:st=\E1:ta=^I:te=\Ew0:ti=\Ew1:ts=\EF:ue=\EG0:\
+       :up=^K:us=\EG8:vb=\E`8\E`9:ve=\E`1:vi=\E`0:
+wy160-w|wyse160-w|wyse 160 132-column:\
+       :Nl#16:co#132:lw#7:ws#90:\
+       :cm=\Ea%i%dR%dC:dc=\EW:r2=\EeF\E`;:tc=wy160:
+wy160-25|wyse160-25|wyse 160 80-column 25-lines:\
+       :Nl@:lh@:li#25:lw@:\
+       :pn@:r3=\EwG\Ee):tc=wy160:
+wy160-25-w|wyse160-25-w|wyse 160 132-column 25-lines:\
+       :Nl@:lh@:li#25:lw@:\
+       :pn@:r3=\EwG\Ee):tc=wy160-w:
+wy160-42|wyse160-42|wyse 160 80-column 42-lines:\
+       :li#42:\
+       :al=\EE:cd=\Ey:cl=\E+:dl=\ER:i1=\EcB2\EcC3:nw=\r\n:\
+       :r3=\Ee*:sf=\n:sr=\Ej:tc=wy160:
+wy160-42-w|wyse160-42-w|wyse 160 132-column 42-lines:\
+       :Nl#16:co#132:lw#7:ws#90:\
+       :cm=\Ea%i%dR%dC:dc=\EW:ip=:r2=\EeF\E`;:tc=wy160-42:
+wy160-43|wyse160-43|wyse 160 80-column 43-lines:\
+       :Nl@:lh@:li#43:lw@:\
+       :pn@:r3=\Ee+:tc=wy160-42:
+wy160-43-w|wyse160-43-w|wyse 160 132-column 43-lines:\
+       :Nl@:lh@:li#43:lw@:\
+       :pn@:r3=\Ee+:tc=wy160-42-w:
+wy160-vb|wyse160-vb|Wyse 160 visible bell:\
+       :bl@:tc=wy160:
+wy160-w-vb|wy160-wvb|wyse160-wvb|Wyse 160 132-column visible bell:\
+       :bl@:tc=wy160-w:
+wy75|wyse75|wyse 75:\
+       :am:hs:mi:ms:xn:xo:\
+       :co#80:li#24:ma#1:pb#1201:ws#78:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :K1=\EOw:K2=\EOu:K3=\EOy:K4=\EOq:K5=\EOs:LE=\E[%dD:\
+       :RI=\E[%dC:UP=\E[%dA:ae=^O:al=\E[L:as=^N:bl=^G:\
+       :bt=\E[Z:cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:\
+       :cr=^M:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=^J:\
+       :ds=\E[>\\\054\001\001\E[>-\001\001:ec=\E[%dX:\
+       :ei=\E[4l:fs=^A:ho=\E[H:\
+       :i1=\E[2;4;20;30l\E[?1;10l\E[12h\E[?7;8;25h:i2=\E[m:\
+       :im=\E[4h:ip=:is=\E>\E(B\E)0\017:k1=\E[?5i:k2=\E[?3i:\
+       :k3=\E[2i:k4=\E[@:k5=\E[M:k6=\E[17~:k7=\E[18~:\
+       :k8=\E[19~:k9=\E[20~:kI=\E[@:kN=\E[6~:kP=\E[5~:kb=^H:\
+       :kd=\E[B:ke=\E>:kh=\E[H:kl=\E[D:kr=\E[C:\
+       :ks=\E[?1l\E[?7h\E=:ku=\E[A:le=^H:me=\E[m\017:\
+       :mh=\E[0t\E[2m:mr=\E[1t\E[7m:nd=\E[C:rc=\E8:sc=\E7:\
+       :se=\E[m:sf=\n:so=\E[1t\E[7m:sr=\EM:st=\EH:ta=^I:\
+       :ts=\E[>\\\054\001:ue=\E[m:up=\E[A:us=\E[2t\E[4m:\
+       :vb=\E[30h\E\\\054\E[30l:ve=\E[?25h:vi=\E[?25l:
+wy75-mc|wyse75-mc|wyse 75 with magic cookies:\
+       :ms@:\
+       :ma@:sg#1:ug#1:\
+       :ae=\E[0p\017:as=\E[0p\016:i2=\E[m\E[p:mb=\E[2p:\
+       :me=\E[0p\017:mh=\E[1p:mk=\E[4p:mr=\E[16p:\
+       :..sa=\E[%{0}%?%p2%p6%|%t%{8}%|%;%?%p1%p3%|%p6%|%t%{16}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{1}%|%;%?%p7%t%{4}%|%;%dp%?%p9%t\016%e\017%;:\
+       :se=\E[0p:so=\E[17p:ue=\E[0p:us=\E[8p:tc=wy75:
+wy75-vb|wyse75-vb|wyse 75 with visible bell:\
+       :pb@:\
+       :bl@:tc=wy75:
+wy75-w|wyse75-w|wyse 75 in 132 column mode:\
+       :co#132:ws#130:\
+       :r2=\E[35h\E[?3h:tc=wy75:
+wy75-wvb|wyse75-wvb|wyse 75 with visible bell 132 columns:\
+       :pb@:\
+       :bl@:tc=wy75-w:
+wy85|wyse85|wyse 85:\
+       :am:hs:mi:ms:xn:xo:\
+       :co#80:it#8:li#24:ws#80:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :K1=\EOw:K2=\EOu:K3=\EOy:K4=\EOq:K5=\EOs:LE=\E[%dD:\
+       :RI=\E[%dC:UP=\E[%dA:ae=^O:al=\E[L:as=^N:bl=^G:\
+       :bt=\E[Z:cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:\
+       :cr=^M:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=^J:\
+       :ds=\E[40l:ec=\E[%dX:ei=\E[4l:fs=\E[1;24r\E8:ho=\E[H:\
+       :i1=\E[62;1"p\E[?5W:i2=\E>\E(B\E)0\017\E[m:im=\E[4h:\
+       :ip=:is=\E[2;4;20;30l\E[?1;4;10;16l\E[12h\E[?7;8;25h:\
+       :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k6=\E[17~:k7=\E[18~:\
+       :k8=\E[19~:k9=\E[20~:kD=\E[3~:kI=\E[2~:kN=\E[6~:\
+       :kP=\E[5~:kb=^H:kd=\E[B:ke=\E>:kh=\E[26~:kl=\E[D:\
+       :kr=\E[C:ks=\E[?1l\E=:ku=\E[A:le=^H:mb=\E[5m:\
+       :md=\E[1m:me=\E[m\017:mh=\E[2m:mr=\E[7m:nd=\E[C:\
+       :rc=\E8:sc=\E7:se=\E[m:sf=\n:so=\E[7m:sr=\EM:st=\EH:\
+       :ta=\011:ts=\E[40h\E7\E[25;%i%p1%dH:ue=\E[m:up=\E[A:\
+       :us=\E[4m:vb=\E[30h\E\\\054\E[30l:ve=\E[?25h:\
+       :vi=\E[?25l:
+wy85-vb|wyse85-vb|wyse 85 with visible bell:\
+       :bl@:vb=\E[30h\E\\\054\E[30l:tc=wy85:
+wy85-w|wyse85-w|wyse 85 in 132-column mode:\
+       :co#132:ws#132:\
+       :r2=\E[35h\E[?3h:tc=wy85:
+wy85-wvb|wyse85-wvb|wyse 85 with visible bell 132-columns:\
+       :bl@:tc=wy85-w:
+wy185|wyse185|wyse 185:\
+       :am:hs:km:mi:ms:xn:xo:\
+       :co#80:it#8:li#24:ws#80:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :K1=\EOw:K2=\EOu:K3=\EOy:K4=\EOq:K5=\EOs:LE=\E[%dD:\
+       :RI=\E[%dC:UP=\E[%dA:ae=^O:al=\E[L:as=^N:bl=^G:\
+       :bt=\E[Z:cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:\
+       :cr=^M:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=^J:\
+       :ds=\E7\E[99;0H\E[K\E8:ec=\E[%dX:ei=\E[4l:\
+       :fs=\E[1;24r\E8:ho=\E[H:i1=\E[?5W:\
+       :i2=\E>\E(B\E)0\017\E[m:im=\E[4h:ip=:\
+       :is=\E[2;4;20;30l\E[?1;4;10;16l\E[12h\E[?7;8;25h:\
+       :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k6=\E[17~:k7=\E[18~:\
+       :k8=\E[19~:k9=\E[20~:kD=\E[3~:kI=\E[2~:kN=\E[6~:\
+       :kP=\E[5~:kb=^H:kd=\E[B:ke=\E>:kh=\E[26~:kl=\E[D:\
+       :kr=\E[C:ks=\E[?1l\E=:ku=\E[A:le=^H:mb=\E[5m:\
+       :md=\E[1m:me=\E[m\017:mh=\E[2m:mr=\E[7m:nd=\E[C:\
+       :rc=\E8:sc=\E7:se=\E[27m:sf=\n:so=\E[7m:sr=\EM:\
+       :st=\EH:ta=^I:te=\E[ R:ti=\E[ Q:ts=\E7\E[99;%i%p1%dH:\
+       :ue=\E[24m:up=\E[A:us=\E[4m:vb=\E[30h\E\\\054\E[30l:\
+       :ve=\E[34h\E[?25h:vi=\E[?25l:vs=\E[?25h\E[34l:
+wy185-24|wyse185-24|wyse 185 with 24 data lines:\
+       :hs@:\
+       :ds@:fs@:r3=\E[?5l\E[47h\E[40l\E[1;24r:ts@:tc=wy185:
+wy185-vb|wyse185-vb|wyse 185+flash:\
+       :bl@:tc=wy185:
+wy185-w|wyse185-w|wyse 185 in 132-column mode:\
+       :co#132:ws#132:\
+       :DC=\E[%dP:IC=\E[%d@:dc=\E[P:ei=:im=:ip=:\
+       :r2=\E[35h\E[?3h:tc=wy185:
+wy185-wvb|wyse185-wvb|wyse 185+flash+132 cols:\
+       :bl@:tc=wy185-w:
+
+
+wy325|wyse325|Wyse epc:\
+       :am:bw:hs:mi:\
+       :co#80:li#24:pb#9601:ws#45:\
+       :ae=\EcD:al=\EE:as=\EcE:bl=^G:bt=\EI:cd=\EY:ce=\ET:\
+       :cl=\E+:cm=\E=%+ %+ :cr=^M:ct=\E0:dc=\EW:dl=\ER:\
+       :do=^J:ds=\EF\r:ei=\Er:fs=^M:ho=^^:i1=\EcB0\EcC1:\
+       :i2=\Ew0:im=\Eq:ip=:\
+       :is=\EcD\E'\Er\EH\003\Ed/\EO\Ee1\Ed*\E`@\E`9\E`1\016\024\El:\
+       :k1=^A@\r:k2=^AA\r:k3=^AB\r:k4=^AC\r:k5=^AD\r:\
+       :k6=^AE\r:k7=^AF\r:k8=^AG\r:k9=^AH\r:kD=\EW:kI=\Eq:\
+       :kN=\EK:kP=\EJ:kb=^H:kd=^J:kh=^^:kl=^H:kr=^L:ku=^K:\
+       :le=^H:ll=^^^K:mb=\EG2:me=\E(\EH\003\EG0\EcD:mh=\EGp:\
+       :mr=\EG4:nd=^L:se=\EG0:sf=\n:so=\EGt:sr=\Ej:st=\E1:\
+       :ta=^I:te=\Ew0:ti=\Ew1:ts=\EF:ue=\EG0:up=^K:us=\EG8:\
+       :vb=\E`8\E`9:ve=\E`1:vi=\E`0:
+
+wy325-vb|wyse325-vb|wyse-325 with visual bell:\
+       :bl@:tc=wy325:
+
+wy325-w|wyse325-w|wy325w-24|wyse-325 in wide mode:\
+       :Nl#16:co#132:lw#7:ws#97:\
+       :cm=\Ea%i%dR%dC:dc=\EW:ip=:r2=\E`;:tc=wy325:
+wy325-25|wyse325-25|wy325-80|wyse-325|wyse-325 25 lines:\
+       :Nl@:lh@:li#25:lw@:\
+       :pn@:r3=\EwG\Ee):tc=wy325:
+wy325-25w|wyse325-25w|wy325 132 columns:\
+       :Nl@:lh@:li#25:lw@:\
+       :pn@:r3=\EwG\Ee):tc=wy325-w:
+wy325-w-vb|wy325-wvb|wyse325-wvb|wyse-325 wide mode reverse video:\
+       :bl@:tc=wy325-w:
+
+wy325-42|wyse325-42|wyse-325 42 lines:\
+       :Nl@:lh@:li#42:lw@:\
+       :pn@:r3=\EwG\Ee):tc=wy325:
+wy325-42w|wyse325-42w|wyse-325 42 lines wide mode:\
+       :Nl@:lh@:li#42:lw@:\
+       :pn@:r3=\EwG\Ee):tc=wy325-w:
+wy325-42w-vb|wy325-42wvb|wyse-325 42 lines wide mode visual bell:\
+       :bl@:tc=wy325-w:
+wy325-43|wyse325-43|wyse-325 43 lines:\
+       :Nl@:lh@:li#43:lw@:\
+       :pn@:tc=wy325:
+wy325-43w|wyse325-43w|wyse-325 43 lines wide mode:\
+       :Nl@:lh@:li#43:lw@:\
+       :pn@:r3=\EwG\Ee):tc=wy325-w:
+wy325-43w-vb|wy325-43wvb|wyse-325 43 lines wide mode visual bell:\
+       :bl@:tc=wy325-w:
+
+wy370-nk|wyse 370 without function keys:\
+       :am:hs:mi:ms:xn:xo:\
+       :co#80:it#8:li#24:ws#80:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:ae=^O:al=\E[L:as=^N:\
+       :bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
+       :cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:ct=\E[3g:\
+       :dc=\E[P:dl=\E[M:do=^J:ds=\E[40l:ec=\E[%dX:ei=\E[4l:\
+       :fs=\E[1;24r\E8:ho=\E[H:i1=\E[90;1"p\E[?5W:\
+       :i2=\E>\017\E)0\E(B\E[63;0w\E[m:im=\E[4h:ip=:\
+       :is=\E[2;4;20;30;40l\E[?1;10;16l\E[12h\E[?7;8;25h:\
+       :ke=\E>:ks=\E[?1l\E=:le=^H:mb=\E[5m:md=\E[1m:\
+       :me=\E[m\017:mh=\E[2m:mr=\E[7m:nd=\E[C:rc=\E8:sc=\E7:\
+       :se=\E[27m:sf=\n:so=\E[7m:sr=\EM:st=\EH:ta=\011:\
+       :te=\E[ R:ti=\E[ Q:ts=\E[40l\E[40h\E7\E[99;%i%p1%dH:\
+       :ue=\E[24m:up=\E[A:us=\E[4m:vb=\E[30h\E\\\054\E[30l:\
+       :ve=\E[34h\E[?25h:vi=\E[?25l:vs=\E[?25h\E[34l:
+wy370|wyse370|wy370-101k|Wyse 370 with 101 key keyboard:\
+       :@8=\EOM:F1=\E[23~:F2=\E[24~:F3=\E[25~:F4=\E[26~:\
+       :F5=\E[28~:F6=\E[29~:k1=\E[?4i:k2=\E[?3i:k3=\E[2i:\
+       :k4=\E[@:k5=\E[M:k6=\E[17~:k7=\E[18~:k8=\E[19~:\
+       :k9=\E[20~:k;=\E[21~:kA=\EOP:kB=\E[Z:kD=\EOQ:kI=\EOP:\
+       :kL=\EOQ:kN=\E[U:kP=\E[V:kb=^H:kd=\E[B:kh=\E[H:\
+       :kl=\E[D:kr=\E[C:ku=\E[A:tc=wy370-nk:
+wy370-105k|Wyse 370 with 105 key keyboard:\
+       :%1=\E[28~:*6=\E[4~:@0=\E[1~:@8=\EOM:F1=\E[23~:\
+       :F2=\E[24~:F3=\E[25~:F4=\E[26~:F5=\E[28~:F6=\E[29~:\
+       :F7=\E[31~:F8=\E[32~:F9=\E[33~:FA=\E[34~:K1=\EOw:\
+       :K2=\EOu:K3=\EOy:K4=\EOq:K5=\EOs:k1=\EOP:k2=\EOQ:\
+       :k3=\EOR:k4=\EOS:k6=\E[17~:k7=\E[18~:k8=\E[19~:\
+       :k9=\E[20~:k;=\E[21~:kD=\E[3~:kI=\E[2~:kN=\E[6~:\
+       :kP=\E[5~:kb=^H:kd=\E[B:kh=\E[26~:kl=\E[D:kr=\E[C:\
+       :ku=\E[A:l1=PF1:l2=PF2:l3=PF3:l4=PF4:tc=wy370-nk:
+wy370-EPC|Wyse 370 with 102 key keyboard:\
+       :@7=\E[1~:@8=\EOM:F1=\E[23~:F2=\E[24~:k1=\EOP:\
+       :k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[M:k6=\E[17~:k7=\E[18~:\
+       :k8=\E[19~:k9=\E[20~:k;=\E[21~:kB=\E[Z:kI=\E[2~:\
+       :kN=\E[U:kP=\E[V:kb=^H:kd=\E[B:kh=\E[H:kl=\E[D:\
+       :kr=\E[C:ku=\E[A:tc=wy370-nk:
+wy370-vb|Wyse 370 with visible bell:\
+       :bl@:tc=wy370:
+wy370-w|Wyse 370 in 132-column mode:\
+       :co#132:ws#132:\
+       :r2=\E[35h\E[?3h:tc=wy370:
+wy370-wvb|Wyse 370 with visible bell 132-columns:\
+       :vb=\E[30h\E\\\054\E[30l:tc=wy370-w:
+wy370-rv|Wyse 370 reverse video:\
+       :r3=\E[32h\E[?5h:tc=wy370:
+wy99gt-tek|Wyse 99gt Tektronix 4010/4014 emulator:\
+       :am:os:\
+       :co#74:li#35:\
+       :bl=^G:cl=\E^L:\
+       :..cm=\035%{3040}%{89}%p1%*%-%Py\n%p2%{55}%*%Px\n%gy%{128}%/%{31}%&%{32}%+%c\n%gy%{3}%&%{4}%*%gx%{3}%&%+%{96}%+%c\n%gy%{004}%/%{31}%&%{96}%+%c\n%gx%{128}%/%{31}%&%{32}%+%c\n%gx%{004}%/%{31}%&%{64}%+%c\037:\
+       :cr=^M:do=^J:ff=^L:\
+       :hd=\036HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\037:\
+       :ho=^]7`x @\037:\
+       :hu=\036DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD\037:\
+       :is=\E8:le=^H:nd= :nw=^M^J:u0=\E~>\E8:u1=\E[42h:\
+       :up=^K:
+wy160-tek|Wyse 160 Tektronix 4010/4014 emulator:\
+       :..cm=\035%{3103}%{91}%p1%*%-%Py\n%p2%{55}%*%Px\n%gy%{128}%/%{31}%&%{32}%+%c\n%gy%{3}%&%{4}%*%gx%{3}%&%+%{96}%+%c\n%gy%{004}%/%{31}%&%{96}%+%c\n%gx%{128}%/%{31}%&%{32}%+%c\n%gx%{004}%/%{31}%&%{64}%+%c\037:\
+       :ho=^]8`g @\037:tc=wy99gt-tek:
+wy370-tek|Wyse 370 Tektronix 4010/4014 emulator:\
+       :am:os:\
+       :co#80:li#36:\
+       :bl=^G:cl=\E^L:\
+       :..cm=\035%{775}%{108}%p1%*%{5}%/%-%Py\n%p2%{64}%*%{4}%+%{5}%/%Px\n%gy%{32}%/%{31}%&%{32}%+%c\n%gy%{31}%&%{96}%+%c\n%gx%{32}%/%{31}%&%{32}%+%c\n%gx%{31}%&%{64}%+%c\037:\
+       :cr=^M:do=^J:ff=^L:\
+       :hd=\036HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH\037:\
+       :ho=^]8g @\037:\
+       :hu=\036DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD\037:\
+       :is=\E8:kb=^H:kd=^J:kl=^H:kr=^I:ku=^K:le=^H:nd= :\
+       :nw=^M^J:u0=\E[?38h\E8:u1=\E[?38l\E)0:up=^K:
+
+
+wyse-vp|wyse|Wyse 50 in ADDS Viewpoint emulation mode with "enhance" on:\
+       :am:\
+       :co#80:it#8:li#24:\
+       :al=\EM:bl=^G:cd=\Ek:ce=\EK:cl=^L:cm=\EY%+ %+ :cr=^M:\
+       :dc=\EW:dl=\El:do=^J:ei=\Er:ho=^A:\
+       :if=/usr/share/tabset/wyse-adds:im=\Eq:\
+       :is=\E`\072\E`9\017\Er:kb=^H:kd=^J:kh=^A:kl=^U:kr=^F:\
+       :ku=^Z:le=^H:ll=^A^Z:nd=^F:nw=^M^J:\
+       :r1=\E`\072\E`9\017\Er:se=^O:sf=^J:so=^N:ta=^I:ue=^O:\
+       :up=^Z:us=^N:
+
+wy75ap|wyse75ap|wy-75ap|wyse-75ap|Wyse WY-75 Applications and Cursor keypad:\
+       :is=\E[1;24r\E[?10;3l\E[?1;25h\E[4l\E[m\E(B\E=:kb=^H:\
+       :kd=\EOB:ke=10\E[?1l\E>:kh=\EOH:kl=\EOD:kr=\EOC:\
+       :ks=10\E[?1h\E=:ku=\EOA:tc=wy75:
+
+wy100q|Wyse 100 for Quotron:\
+       :co#80:li#24:sg#1:ug#1:\
+       :al=\EE:bt=\EI:cd=\EY:ce=\ET:cl=^Z:cm=\E=%+ %+ :\
+       :dc=\EW:dl=\ER:do=^J:ei=\Er:ho=^^:im=\Eq:\
+       :is=\E`\072\200\EC\EDF\E0\E'\E(\EA21:kd=^J:kl=^H:\
+       :kr=^L:ku=^K:le=^H:nd=^L:se=\EG0:so=\EG4:sr=\Ej:\
+       :ue=\EG0:up=^K:us=\EG8:
+
+
+kermit|standard kermit:\
+       :co#80:li#24:\
+       :cd=\EJ:ce=\EK:cl=\EE:cm=\EY%+ %+ :ho=\EH:\
+       :is=K0 Standard Kermit  9-25-84\n:kd=^J:kh=^^:kl=^H:\
+       :kr=^L:ku=^K:le=^H:nd=\EC:up=\EA:
+kermit-am|standard kermit plus auto-margin:\
+       :am:\
+       :is=K1 Standard Kermit plus Automatic Margins\n:tc=kermit:
+pckermit|pckermit12|UCB IBMPC Kermit 1.2:\
+       :am:\
+       :li#25:\
+       :cd@:ce@:cl=\EH\EJ:\
+       :is=K2 UCB IBMPC Kermit 1.2  8-30-84\n:tc=kermit:
+pckermit120|UCB IBMPC Kermit 1.20:\
+       :it#8:li#24:\
+       :al=\EL:dc=\EN:dl=\EM:do=\EB:ei@:im@:\
+       :is=\EO\Eq\EJ\EY7 K3 UCB IBMPC Kermit 1.20  12-19-84\n:\
+       :se=\Eq:so=\Ep:ta=^I:vs=\EO\Eq\EEK3:tc=kermit:
+msk227|mskermit227|MS-DOS Kermit 2.27 for the IBMPC:\
+       :am@:\
+       :co#80:it#8:li#24:\
+       :al=\EL:cd=\EJ:ce=\EK:cl=\EE:cm=\EY%+ %+ :dc=\EN:\
+       :dl=\EM:do=\EB:ei=\EO:ho=\EH:im=\E@:\
+       :is=\EO\Eq\EG\Ew\EJ\EY7 K4 MS Kermit 2.27 for the IBMPC 3-17-85\n:\
+       :kd=^J:kh=^^:kl=^H:kr=^L:ku=^K:le=^H:nd=\EC:rc=\Ek:\
+       :sc=\Ej:se=\Eq:so=\Ep:ta=^I:up=\EA:vs=\EO\Eq\EG\EwK4:
+msk227am|mskermit227am|UCB MS-DOS Kermit 2.27 with automatic margins:\
+       :am:\
+       :is=\EO\Eq\EG\Ev\EJ\EY7 K5 MS Kermit 2.27 +automatic margins 3-17-85\n:\
+       :vs=\EO\Eq\EG\EvK5:tc=msk227:
+msk22714|mskermit22714|UCB MS-DOS Kermit 2.27 UCB 227.14 IBM PC:\
+       :am:\
+       :is=\EO\Eq\EG\Ev\EJ\EY7 K6 MS Kermit 2.27 UCB 227.14 IBM PC 3-17-85\n:\
+       :k0=\E0:k1=\E1:k2=\E2:k3=\E3:k4=\E4:k5=\E5:k6=\E6:\
+       :k7=\E7:k8=\E8:k9=\E9:md=\E[1m:me=\E[m:mr=\E[7m:\
+       :se=\E[m:so=\E[1m:ue=\E[m:us=\E[4m:vs=\EO\Eq\EG\EvK6:tc=mskermit227:
+vt320-k3|MS-Kermit 3.00's vt320 emulation:\
+       :am:es:hs:km:mi:ms:xn:\
+       :co#80:it#8:li#49:pb#9600:vt#3:\
+       :AL=\E[%dL:CC=\E:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:\
+       :IC=\E[%d@:LE=\E[%dD:RI=\E[%dC:SR=\E[%dL:UP=\E[%dA:\
+       :ae=\E(B:al=\E[L:as=\E(0:bl=^G:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:\
+       :ct=\E[3g:dc=\E[P:dl=\E[M:do=^J:ds=\E[0$~:ec=\E[%dX:\
+       :ei=\E[4l:fs=\E[0$}:ho=\E[H:im=\E[4h:\
+       :is=\E>\E F\E[?1l\E[?7h\E[r\E[2$~:k0=\E[21~:k1=\EOP:\
+       :k2=\EOQ:k3=\EOR:k4=\EOS:k6=\E[17~:k7=\E[18~:\
+       :k8=\E[19~:k9=\E[20~:kI=\E[2~:kN=\E[6~:kP=\E[5~:\
+       :kb=^H:kd=\EOB:ke=\E[?1l\E>:kl=\EOD:kr=\EOC:\
+       :ks=\E[?1h\E=:ku=\EOA:le=^H:mb=\E[5m:md=\E[1m:\
+       :me=\E[m:mr=\E[7m:nd=\E[C:nw=^M^J:rc=\E8:sc=\E7:\
+       :se=\E[27m:sf=^J:so=\E[7m:sr=\EM:st=\EH:ta=^I:\
+       :ts=\E[1$}\r\E[K:ue=\E[24m:up=\E[A:us=\E[4m:\
+       :vb=\E[?5h\E[?5l\E[?5h\E[?5l\E[?5h\E[?5l:ve=\E[?25h:\
+       :vi=\E[?25l:
+vt320-k311|dec vt320 series as defined by kermit 3.11:\
+       :am:es:hs:mi:ms:xn:xo:\
+       :co#80:it#8:li#24:vt#3:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:SA=\E[?7h:UP=\E[%dA:\
+       :al=3\E[L:bl=^G:cd=\E[J:ce=\E[K:cl=\E[;H\E[2J:\
+       :cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:ct=\E[3g:\
+       :dc=\E[P:dl=\E[M:do=^J:ds=\E[2$~\r\E[1$}\E[K\E[$}:\
+       :ei=\E[4l:fs=\E[$}:ho=\E[H:im=\E[4h:\
+       :is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;24r\E[24;1H:\
+       :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k6=\E[17~:k7=\E[18~:\
+       :k8=\E[19~:k9=\E[20~:kb=^H:kd=\EOB:ke=\E[?1l\E>:\
+       :kl=\EOD:kr=\EOC:ks=\E[?1h\E=:ku=\EOA:l1=pf1:l2=pf2:\
+       :l3=pf3:l4=pf4:le=^H:mb=\E[5m:md=\E[1m:me=\E[m:\
+       :mr=\E[7m:nd=\E[C:nw=^M\ED:r1=\E[?3l:rc=\E8:\
+       :rf=/usr/lib/tabset/vt100:sc=\E7:se=\E[27m:sf=\ED:\
+       :so=\E[7m:sr=\EM:st=\EH:ta=^I:\
+       :ts=\E[2$~\E[1$}\E[1;%dH:ue=\E[24m:up=\E[A:us=\E[4m:\
+       :vb=\E[?5h\E[?5l:ve=\E[?25h:vi=\E[?25l:vs=\E[?25h:
+
+
+avatar0|avatar terminal emulator level 0:\
+       :am:ms:ut:\
+       :co#80:it#8:li#25:\
+       :as=:ce=^V^G:cm=\026\010%.%.:cr=^M:do=^V^D:le=^V^E:\
+       :mb=^A^V\177:md=^V^A^P:me=^V^A^G:mk=^V^A\200:\
+       :mr=^A^Vp:nd=^V^F:r2=^L:rp=\031%.%d:\
+       :..sa=\026\001%{0}%?%p1%t%{112}%|%;%?%p2%t%{1}%|%;%?%p3%t%{112}%|%;%?%p4%t{128}%|%;%?%p6%t%{16}%|%;:\
+       :sf=^J:so=^A^Vp:up=^V^C:us=^V^A:tc=klone+acs:
+avatar0+|avatar terminal emulator level 0+:\
+       :dc=^V^N:ei=\026\n\200\200\200\200:im=^V^I:tc=avatar0:
+avatar|avatar1|avatar terminal emulator level 1:\
+       :RA=^V":SA=^V$:al=^V+:dl=^V-:ei=^V^P:ve=^V'^A:\
+       :vi=^V'^B:vs=^V^C:tc=avatar0+:
+
+
+att2300|sv80|AT&T 2300 Video Information Terminal 80 column mode:\
+       :am:eo:mi:ms:xo:\
+       :co#80:it#8:li#24:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:F1=\E[11r:\
+       :F2=\E[12r:F3=\E[13r:F4=\E[14r:F5=\E[15r:F6=\E[16r:\
+       :IC=\E[%d@:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:al=\E[L:\
+       :bl=^G:cb=\E[1K:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
+       :cm=\E[%i%d;%dH:cr=^M:dc=\E[P:dl=\E[M:do=^J:ei=\E[4l:\
+       :ho=\E[H:im=\E[4h:k1=\E[1r:k2=\E[2r:k3=\E[3r:\
+       :k4=\E[4r:k5=\E[5r:k6=\E[6r:k7=\E[7r:k8=\E[8r:\
+       :k9=\E[9r:k;=\E[10r:kA=\E[L:kB=\E[Z:kC=\E[J:kD=\E[P:\
+       :kI=\E[@:kL=\E[M:kb=^H:kd=\E[B:kh=\E[H:kl=\E[D:\
+       :kr=\E[C:ku=\E[A:le=^H:me=\E[m:mr=\E[7m:nd=\E[C:\
+       :pf=\E[4i:po=\E[5i:ps=\E[0i:se=\E[m:sf=^J:so=\E[7m:\
+       :ta=^I:up=\E[A:
+att2350|AT&T 2350 Video Information Terminal 80 column mode:\
+       :pf@:po@:ps@:tc=att2300:
+
+att5410v1|att4410v1|tty5410v1|AT&T 4410/5410 80 columns - version 1:\
+       :am:hs:mi:ms:xo:\
+       :Nl#8:co#80:it#8:lh#2:li#24:lw#8:ws#80:\
+       :ac=``aaffhhggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~00++--\\\054\\\054..:\
+       :ae=^O:al=\E[L:as=^N:bl=^G:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:\
+       :dc=\E[P:dl=\E[M:do=\E[B:ei=:fs=\E8:ho=\E[H:\
+       :i1=\E[?3l\E)0:\
+       :i2=\E[1;03q   f1           \EOP\E[2;03q   f2           \EOQ\E[3;03q   f3           \EOR\E[4;03q   f4           \EOS\E[5;03q   f5           \EOT\E[6;03q   f6           \EOU\E[7;03q   f7           \EOV\E[8;03q   f8           \EOW:\
+       :ic=\E[@:im=:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOT:\
+       :k6=\EOU:k7=\EOV:k8=\EOW:kC=\E[2J:kH=\E[24;1H:kb=^H:\
+       :kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:ku=\E[A:le=^H:\
+       :ll=\E[24H:mb=\E[5m:md=\E[2;7m:me=\E[m\017:mh=\E[2m:\
+       :mk=\E[8m:mr=\E[7m:nd=\E[C:nw=^M^J:\
+       :r2=\Ec\E[?3l\E[2;0y:rc=\E8:sc=\E7:se=\E[m:sf=^J:\
+       :so=\E[7m:sr=\EM:ta=^I:ts=\E7\E[25;%p1%{1}%+%dH:\
+       :ue=\E[m:up=\E[A:us=\E[4m:
+
+att4410v1-w|att5410v1-w|tty5410v1-w|AT&T 4410/5410 132 columns - version 1:\
+       :co#132:ws#132:\
+       :i1=\E[?3h\E)0:r2=\Ec\E[?3h\E[2;0y:tc=att5410v1:
+
+att4410|att5410|tty5410|AT&T 4410/5410 80 columns - version 2:\
+       :..px=\E[%p1%d;%p2%l%02dq   f%p1%d           %p2%s:tc=att5410v1:
+
+att5410-w|att4410-w|4410-w|tty5410-w|5410-w|AT&T 4410/5410 in 132 column mode:\
+       :co#132:ws#132:\
+       :i1=\E[?3h\E)0:r2=\Ec\E[?3h\E[2;0y:tc=att4410:
+
+v5410|5410 in terms of a vt100:\
+       :am:mi:ms:xo:\
+       :co#80:it#8:li#24:vt#3:\
+       :@8=\EOM:K1=\EOq:K2=\EOr:K3=\EOs:K4=\EOp:K5=\EOn:\
+       :RA=\E[?7l:SA=\E[?7h:\
+       :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~:\
+       :ae=^O:al=\E[L:as=^N:bl=^G:cb=\E[1K:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:\
+       :ct=\E[3g:dc=\E[P:dl=\E[M:do=^J:eA=\E(B\E)0:ei=:\
+       :ho=\E[H:ic=\E[@:im=:k0=\EOy:k1=\EOP:k2=\EOQ:k3=\EOR:\
+       :k4=\EOS:k5=\EOt:k6=\EOu:k7=\EOv:k8=\EOl:k9=\EOw:\
+       :k;=\EOx:kb=^H:kd=\EOB:ke=\E[?1l\E>:kl=\EOD:kr=\EOC:\
+       :ks=\E[?1h\E=:ku=\EOA:le=^H:mb=\E[5m:md=\E[1m:\
+       :me=\E[m\017:mr=\E[7m:nd=\E[C:\
+       :r2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:rc=\E8:\
+       :..sa=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;:\
+       :sc=\E7:se=\E[m:sf=^J:so=\E[1;7m:sr=\EM:st=\EH:ta=^I:\
+       :ue=\E[m:up=\E[A:us=\E[4m:
+
+att4415|tty5420|att5420|AT&T 4415/5420 80 cols:\
+       :db:mi:xo:\
+       :Nl#8:lh#2:lm#78:lw#8:ws#55:\
+       :@1=\Et:@7=\Ez:@8=\Eent:AL=\E[%dL:\
+       :CM=\E[%i%p1%d;%p2%dt:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:\
+       :IC=\E[%d@:LE=\E[%dD:LF=\E|:LO=\E~:RA=\E[?7l:\
+       :RI=\E[%dC:SA=\E[?7h:SF=\E[%dE:SR=\E[%dF:UP=\E[%dA:\
+       :bt=\E[Z:ch=\E[%+^AG:cl=\E[x\E[J:cm=\E[%i%d;%dx:\
+       :ct=\E[3g:cv=\E[%+^Ad:ec=\E[%ds\E[%dD:ei=\E[4l:\
+       :ho=\E[x:i1=\E[?3l:i2=\E[?5l:ic@:im=\E[4h:\
+       :is=\E[m\017\E[1;2;3;4;6l\E[12;13;14;20l\E[?6;97;99l\E[?7h\E[4i\Ex\E[21;1j\212:\
+       :k1=\EOc:k2=\EOd:k3=\EOe:k4=\EOf:k5=\EOg:k6=\EOh:\
+       :k7=\EOi:k8=\EOj:kA=\E[L:kB=\E[Z:kD=\E[P:kE=\E[2K:\
+       :kF=\E[T:kH=\Eu:kI=\E[4h:kL=\E[M:kN=\E[U:kP=\E[V:\
+       :kR=\E[S:ke=\E[19;0j\E[21;1j\212:\
+       :ks=\E[19;1j\E[21;4j\Eent:l1=F1:l2=F2:l3=F3:l4=F4:\
+       :l5=F5:l6=F6:l7=F7:l8=F8:ll=\Ew:me=\E[m\017:mp=\EV:\
+       :pf=\E[?9i:po=\E[?4i:ps=\E[?2i:st=\EH:\
+       :ts=\E7\E[25;%p1%{8}%+%dH:vb=\E[?5h\E[?5l:\
+       :ve=\E[11;0j:vs=\E[11;1j:tc=att4410:
+
+att4415-w|tty5420-w|att5420-w|AT&T 4415/5420 132 cols:\
+       :co#132:lm#54:ws#97:\
+       :i1=\E[?3h:tc=att4415:
+
+att4415-rv|tty5420-rv|att5420-rv|AT&T 4415/5420 80 cols/rv:\
+       :i2=\E[?5h:vb=\E[?5l\E[?5h:tc=att4415:
+
+att4415-w-rv|tty5420-w-rv|att5420-w-rv|AT&T 4415/5420 132 cols/rv:\
+       :co#132:lm#54:ws#97:\
+       :i1=\E[?3h:i2=\E[?5h:vb=\E[?5l\E[?5h:tc=att4415:
+
+att4415+nl|4415+nl|tty5420+nl|att5420+nl|generic AT&T 4415/5420 changes for not changing labels:\
+       :k1@:k2@:k3@:k4@:k5@:k6@:k7@:k8@:\
+       :..pn=\E[%p1%d;0;0;1q%p2%\072-16.16s:\
+       :..px=\E[%p1%d;%p2%l%02d;0;1q   F%p1%d           %p2%s:
+
+att4415-nl|4415-nl|tty5420-nl|att5420-nl|AT&T 4415/5420 without changing labels:\
+       :k1@:k2@:k3@:k4@:k5@:k6@:k7@:k8@:tc=att4415+nl:tc=att4415:
+
+att4415-rv-nl|tty5420-rv-nl|att5420-rv-nl|AT&T 4415/5420 reverse video without changing labels:\
+       :k1@:k2@:k3@:k4@:k5@:k6@:k7@:k8@:tc=att4415+nl:tc=att4415-rv:
+
+att4415-w-nl|tty5420-w-nl|att5420-w-nl|AT&T 4415/5420 132 cols without changing labels:\
+       :k1@:k2@:k3@:k4@:k5@:k6@:k7@:k8@:tc=att4415+nl:tc=att4415-w:
+
+att4415-w-rv-n|tty5420-w-rv-n|att5420-w-rv-n|AT&T 4415/5420 132 cols reverse without changing labels:\
+       :k1@:k2@:k3@:k4@:k5@:k6@:k7@:k8@:tc=att4415+nl:tc=att4415-w-rv:
+
+att5420_2|AT&T 5420 model 2 80 cols:\
+       :am:db:hs:mi:ms:xo:\
+       :co#80:it#8:li#24:lm#78:ws#55:\
+       :AL=\E[%dL:CM=\E[%i%p1%d;%p2%dt:DC=\E[%dP:DL=\E[%dM:\
+       :IC=\E[%d@:LE=\E[%dD:RI=\E[%dC:SF=\E[%dE:SR=\E[%dF:\
+       :UP=\E[%dA:ae=^O:al=\E[L:as=^N:bt=\E[1Z:cd=\E[0J:\
+       :ce=\E[0K:cl=\EH\EJ:cm=\E[%i%d;%dH:cr=\EG:\
+       :cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:do=\E[1B:\
+       :ec=\E[%ds\E[%dD:ei=:fs=\E8:ho=\E[H:\
+       :i1=\E[0;23r\Ex\Ey\E[2;0j\E[3;3j\E[4;0j\E[5;0j\E[6;0j\E[7;0j\E[8;0j\E[9;1j\E[10;0j\E[15;0j\E[16;1j\E[19;0j\E[20;1j\E[29;0j\E[1;24r:\
+       :ic=\E[@:im=:k1=\EOc:k2=\EOd:k3=\EOe:k4=\EOf:k5=\EOg:\
+       :k6=\EOh:k7=\EOi:k8=\EOj:kD=\E[P:kH=\Eu:kI=\E[4h:\
+       :kN=\E[U:kP=\E[V:kb=^H:kd=\E[B:ke=\E[19;0j:kh=\E[H:\
+       :kl=\E[D:kr=\E[C:ks=\E[19;1j:ku=\E[A:le=^H:ll=\Ew:\
+       :mb=\E[5m:me=\E[m\017:mh=\E[2m:mr=\E[7m:nd=\E[1C:\
+       :nw=^M^J:rc=\E8:sc=\E7:se=\E[m:sf=^J:so=\E[7m:sr=\EM:\
+       :st=\EH:ta=^I:ts=\E7\E[25;%p1%{8}%+%dH:ue=\E[m:\
+       :us=\E[4m:vb=\E[?5h\E[?5l:ve=\E[11;0j:vs=\E[11;1j:
+att5420_2-w|AT&T 5420 model 2 in 132 column mode:\
+       :co#132:\
+       :i1=\E[0;23r\Ex\Ey\E[2;0j\E[3;3j\E[4;0j\E[5;1j\E[6;0j\E[7;0j\E[8;0j\E[9;1j\E[10;0j\E[15;0j\E[16;1j\E[19;0j\E[20;1j\E[29;0j\E[1;24r:tc=att5420_2:
+
+att4418|att5418|AT&T 5418 80 cols:\
+       :am:xo:\
+       :co#80:li#24:\
+       :@8=\E[:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:\
+       :F1=\E[n:F2=\E[o:F3=\E[H:F4=\E[I:F5=\E[J:F8=\E[K:\
+       :F9=\E[L:FA=\E[E:FB=\E[_:FC=\E[M:FD=\E[N:FE=\E[O:\
+       :IC=\E[%d@:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:ae=^O:\
+       :al=\E[1L:as=^N:bl=^G:cd=\E[0J:ce=\E[0K:cl=\E[H\E[2J:\
+       :cm=\E[%i%d;%dH:cr=^M:dc=\E[1P:dl=\E[M:do=\E[B:ei=:\
+       :ho=\E[H:i1=\E[?3l:ic=\E[1@:im=:is=\E)0\E?6l\E?5l:\
+       :k1=\E[h:k2=\E[i:k3=\E[j:k6=\E[k:k7=\E[l:k8=\E[f:\
+       :k9=\E[w:k;=\E[m:kC=\E[%:kd=\EU:kh=\Ec:kl=\E@:kr=\EA:\
+       :ku=\ES:le=\E[D:mb=\E[5m:me=\E[m\017:mh=\E[2m:\
+       :mr=\E[7m:nd=\E[C:rc=\E8:sc=\E7:se=\E[m:sf=^J:\
+       :so=\E[7m:ue=\E[m:up=\E[A:us=\E[4m:
+att4418-w|att5418-w|AT&T 5418 132 cols:\
+       :co#132:\
+       :i1=\E[?3h:tc=att5418:
+
+att4420|tty4420|teletype 4420:\
+       :da:db:eo:ms:ul:xo:\
+       :co#80:li#24:lm#72:\
+       :al=\EL:bl=^G:cd=\EJ:ce=\Ez:cl=\EH\EJ:cm=\EY%+ %+ :\
+       :cr=\EG:dc=\EP:dl=\EM:dm@:do=\EB:ed@:ho=\EH:k0=\EU:\
+       :k3=\E@:kA=\EL:kB=\EO:kC=\EJ:kD=\EP:kF=\ES:kI=\E^:\
+       :kL=\EM:kR=\ET:kd=\EB:kh=\EH:kl=^H:kr=\EC:ku=\EA:\
+       :l0=segment advance:l3=cursor tab:le=\ED:nd=\EC:\
+       :se=\E~:sf=\EH\EM\EY7 :so=\E}:ue=\EZ:up=\EA:us=\E\\:
+
+att4424|tty4424|teletype 4424:\
+       :am:xo:\
+       :co#80:li#24:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:ae=\E(B:al=\EL:\
+       :as=\E(0:bl=^G:bt=\EO:cd=\EJ:ce=\Ez:cl=\E[H\E[2J:\
+       :cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:ct=\EF:dc=\EP:\
+       :dl=\EM:do=\EB:ei=:ho=\E[H:ic=\E^:im=:\
+       :is=\E[20l\E[?7h:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\
+       :kC=\EJ:kb=^H:kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:\
+       :ku=\E[A:le=^H:mb=\E3:md=\E3:me=\EX\E~\EZ\E4\E(B:\
+       :mh=\EW:mr=\E}:nd=\EC:nw=\EE:\
+       :..sa=\E[%?%p1%t7%;%?%p2%t;4%;%?%p3%t;7%;%?%p6%t;1%;%?%p6%p4%|%t;5%;%?%p5%t;0%;m:\
+       :se=\E~:sf=^J:so=\E}:sr=\ET:st=\EH:ta=^I:ti=\E[1m:\
+       :ue=\EZ:up=\EA:us=\E\\:
+
+att4424-1|tty4424-1|teletype 4424 in display function group I:\
+       :kC@:kd=\EB:kh@:kl=\ED:kr=\EC:ku=\EA:tc=att4424:
+
+att4424m|tty4424m|teletype 4424M:\
+       :am:da:db:mi:\
+       :co#80:it#8:li#23:\
+       :al=\EL:bl=^G:ce=\E[K:cl=\E[2;H\E[J:\
+       :cm=\E[%i%2;%2H\E[B:cr=^M:dc=\EP:dl=\EM:do=^J:ei=:\
+       :ic=\E^:im=:ip=2:is=\E[m\E[2;24r:k1=\EOP:k2=\EOQ:\
+       :k3=\EOR:k4=\EOS:kb=^H:kd=\E[B:kh=\E[H:kl=\E[D:\
+       :kr=\E[C:ku=\E[A:le=^H:nd=\E[C:nw=^M^J:se=\E[m:sf=^J:\
+       :so=\E[7m:sr=\ET:ta=^I:ue=\E[m:up=\E[A:us=\E[4m:
+
+att5425|tty5425|att4425|AT&T 4425/5425:\
+       :am:da:db:hs:mi:ms:xn:xo:\
+       :co#80:it#8:li#24:lm#78:ws#55:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RI=\E[%dC:SF=\E[%dE:SR=\E[%dF:UP=\E[%dA:\
+       :ae=^O:al=\E[L:as=^N:bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:\
+       :ct=\E[3g:dc=\E[P:dl=\E[M:do=^J:ec=\E[%ds\E[%dD:\
+       :ei=\E[4l:fs=\E8:ho=\E[H:i1=\E<\E[?3l:i2=\E[?5l:\
+       :im=\E[4h:\
+       :is=\E[m\017\E[1;2;3;4;6l\E[12;13;14;20l\E[?6;97;99l\E[?7h\E[4i\Ex\E[25;1j\212:\
+       :k1=\EOc:k2=\EOd:k3=\EOe:k4=\EOf:k5=\EOg:k6=\EOh:\
+       :k7=\EOi:k8=\EOj:kD=\E[P:kI=\E[4h:kb=^H:kd=\E[B:\
+       :ke=\E[21;0j\E[25;1j\212:kh=\E[H:kl=\E[D:kr=\E[C:\
+       :ks=\E[21;1j\E[25;4j\Eent\E~:ku=\E[A:le=^H:ll=\E[24H:\
+       :mb=\E[5m:md=\E[2;7m:me=\E[m\017:mh=\E[2m:mr=\E[7m:\
+       :nd=\E[C:nw=^M^J:rc=\E8:sc=\E7:se=\E[m:sf=^J:\
+       :so=\E[7m:sr=\EM:st=\EH:ta=^I:\
+       :ts=\E7\E[25;%p1%{8}%+%dH:ue=\E[m:up=\E[A:us=\E[4m:\
+       :vb=\E[?5h\E[?5l:ve=\E[12;0j:vs=\E[12;1j:
+
+att5425-nl|tty5425-nl|att4425-nl|AT&T 4425/5425 80 columns no labels:\
+       :ks=\E[21;1j\E[25;4j\Eent:tc=att4425:
+
+att5425-w|att4425-w|tty5425-w|teletype 4425/5425 in 132 column mode:\
+       :co#132:lm#54:ws#97:\
+       :i1=\E[?3h:tc=tty5425:
+
+att4426|tty4426|teletype 4426S:\
+       :am:da:db:xo:\
+       :co#80:li#24:lm#48:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:SA=\E[?7h:SF=\E[%dS:\
+       :SR=\E[%dT:UP=\E[%dA:ae=\E(B:al=\EL:as=\E(0:bl=^G:\
+       :cd=\E[J:ce=\E[0K:ch=\E[%dG:\
+       :cl=\E[H\E[2J\E[1U\E[H\E[2J\E[1V:cm=\E[%i%d;%dH:\
+       :cr=^M:ct=\E[3g:cv=\E[%dd:dc=\EP:dl=\E[M:do=\E[B:ei=:\
+       :ho=\E[H:i1=\Ec\E[?7h:ic=\E^:im=:is=\E[m\E[1;24r:\
+       :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOT:k6=\EOU:\
+       :k7=\EOV:k8=\EOW:kB=\EO:kC=\E[2J:kH=\E[24;1H:kb=^H:\
+       :kd=\EB:kh=\E[H:kl=\ED:kr=\EC:ku=\EA:le=\E[D:\
+       :ll=\E[24H:md=\E[5m:me=\E[m\E(B:mr=\E[7m:nd=\E[C:\
+       :nw=^M^J:r2=\Ec\E[?3l\E[2;0y:rc=\E8:sc=\E7:se=\E[m:\
+       :sf=^J:so=\E[5m:sr=\ET:st=\E1:ta=^I:ue=\E[m:up=\EA:\
+       :us=\E[4m:
+
+att510a|510a|bct510a|510A|AT&T 510A Personal Terminal:\
+       :am:mi:ms:xn:xo:\
+       :Nl#8:co#80:lh#2:li#24:lw#7:\
+       :#4=\E[u:%i=\E[v:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:\
+       :DO=\E[%dB:F1=\EOe:F2=\EOf:F3=\EOg:F4=\EOh:F5=\EOi:\
+       :F6=\EOj:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:\
+       :ac=hrisjjkkllmmnnqqttuuvvwwxx{{||}}~~-f\\\054h.e+g`b:\
+       :ae=^O:al=\E[L:as=^N:bl=^G:bt=\E[Z:cb=\E[1K:cd=\E[0J:\
+       :ce=\E[0K:cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:ct=\E[3g:\
+       :dc=\E[P:dl=\E[M:do=\E[1B:eA=\E(B\E)1:ff=^L:ho=\E[H:\
+       :i1=\E(B\E)1\E[2l:i2=\E[21;1|\212:k1=\EOm:k2=\EOV:\
+       :k3=\EOu:k4=\ENj:k5=\ENe:k6=\ENf:k7=\ENh:k8=\E[H:\
+       :k9=\EOc:k;=\EOd:kB=\E[Z:kF=\E[S:kR=\E[T:kb=^H:\
+       :kd=\E[B:ke=\E[19;0|:kl=\E[D:kr=\E[C:ks=\E[19;1|:\
+       :ku=\E[A:le=^H:mb=\E[5m:md=\E[2;7m:me=\E[m\017:\
+       :mh=\E[2m:mr=\E[7m:nd=\E[C:nw=\EE:pf=\E[?8i:\
+       :po=\E[?4i:ps=\E[0i:rc=\E8:sc=\E7:se=\E[m:sf=^J:\
+       :so=\E[7m:sr=\EM:st=\EH:ta=^I:ue=\E[m:up=\E[A:\
+       :us=\E[4m:ve=\E[11;3|:vi=\E[11;0|:vs=\E[11;2|:
+
+att510d|510d|bct510d|510D|AT&T 510D Personal Terminal:\
+       :am:da:db:mi:ms:xn:xo:\
+       :co#80:li#24:lm#48:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RI=\E[%dC:SF=\E[%dS:SR=\E[%dT:UP=\E[%dA:\
+       :ae=^O:al=\E[L:as=^N:bl=^G:bt=\E[Z:cd=\E[0J:ce=\E[0K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:ct=\E[3g:dc=\E[P:\
+       :dl=\E[M:do=\E[1B:ei=\E[4l:ff=^L:ho=\E[H:\
+       :i1=\E(B\E)1\E[5;0|:i2=\E[21;1|\212:im=\E[4h:k1=\EOm:\
+       :k2=\EOV:k3=\EOu:k4=\ENj:k5=\ENe:k6=\ENf:k7=\ENh:\
+       :k8=\E[H:k9=\EOc:kb=^H:kd=\E[B:ke=\E[19;0|:kl=\E[D:\
+       :kr=\E[C:ks=\E[19;1|:ku=\E[A:le=^H:ll=\E#2:mb=\E[5m:\
+       :md=\E[2;7m:me=\E[m\017:mh=\E[2m:mr=\E[7m:nd=\E[C:\
+       :nw=\EE:rc=\E8:sc=\E7:se=\E[m:sf=^J:so=\E[7m:sr=\EM:\
+       :st=\EH:ta=^I:ue=\E[m:up=\E[A:us=\E[4m:ve=\E[11;3|:\
+       :vs=\E[11;2|:
+
+att500|att513|500bct|513bct|AT&T 513 using page mode:\
+       :am:mi:ms:xn:xo:\
+       :co#80:li#24:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RI=\E[%dC:SF=\E[%dE:SR=\E[%dF:UP=\E[%dA:\
+       :ae=^O:al=\E[L:as=^N:bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:cs=%i\E[%d;%dr:\
+       :ct=\E[3g:dc=\E[P:dl=\E[M:do=^J:ei=\E[4l:ho=\E[H:\
+       :i1=\E?\E[3;3|\E[10;0|\E[21;1|\212\E[6;1|\E[1{\E[?99l:\
+       :im=\E[4h:k1=\EOc:k2=\EOd:k3=\EOe:k4=\EOf:k5=\EOg:\
+       :k6=\EOh:k7=\EOi:k8=\EOj:kD=\ENf:kI=\ENj:kN=\E[U:\
+       :kP=\E[V:kb=^H:kd=\E[B:ke=\E[19;0|\E[21;1|\212:\
+       :kh=\E[H:kl=\E[D:kr=\E[C:ks=\E[19;1|\E[21;4|\Eent:\
+       :ku=\E[A:le=^H:ll=\E#2:mb=\E[5m:md=\E[2;7m:\
+       :me=\E[m\017:mh=\E[2m:mr=\E[7m:nd=\E[C:nw=\EE:rc=\E8:\
+       :sc=\E7:se=\E[m:sf=^J:so=\E[7m:sr=\EM:st=\EH:ta=^I:\
+       :ue=\E[m:up=\E[A:us=\E[4m:ve=\E[11;0|:vs=\E[11;1|:
+
+att5310|att5320|AT&T Model 53210 or 5320 matrix printer:\
+       :co#132:it#8:li#66:\
+       :DO=\E[%de:RI=\E[%da:cr=^M:do=^J:ff=^L:i1=\Ec:\
+       :is=\E[20l\r:nd= :ta=^I:up=\EM:
+
+att5620|dmd|tty5620|ttydmd|5620|5620 terminal 88 columns:\
+       :NL:NP:am:xo:\
+       :co#88:it#8:li#70:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:IC=\E[%d@:SF=\E[%dS:\
+       :SR=\E[%dT:al=\E[L:bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
+       :cm=\E[%i%d;%dH:cr=^M:dc=\E[P:dl=\E[M:do=\E[B:ei=:\
+       :ho=\E[H:ic=\E[@:im=:kC=\E[2J:kH=\E[70;1H:kb=^H:\
+       :kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:ku=\E[A:le=^H:\
+       :md=\E[2m:me=\E[m:mh=\E[2m:mr=\E[7m:nd=\E[C:nw=^J:\
+       :..px=\E[%p1%d;%p2%l%dq%p2%s:r1=\Ec:rc=\E8:sc=\E7:\
+       :se=\E[m:sf=\E[S:so=\E[7m:sr=\E[T:ta=^I:ue=\E[m:\
+       :up=\E[A:us=\E[4m:
+att5620-24|dmd-24|teletype dmd 5620 in a 24x80 layer:\
+       :li#24:tc=att5620:
+att5620-34|dmd-34|teletype dmd 5620 in a 34x80 layer:\
+       :li#34:tc=att5620:
+
+att605|605bct|AT&T 605  80 column  102key keyboard:\
+       :am:eo:xo:\
+       :co#80:li#24:ws#80:\
+       :DC=\E[%dP:DL=\E[%dM:IC=\E[%d@:ae=^O:al=\E[L:\
+       :as=\E)0\016:bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:dc=\E[P:dl=\E[M:\
+       :do=\E[B:ei=\E[4l:fs=\E8:\
+       :i1=\E[8;0|\E[?\E[13;20l\E[?\E[12h:ic=\E[@:im=\E[4h:\
+       :is=\E[m\017:k1=\EOc:k2=\EOd:k3=\EOe:k4=\EOf:k5=\EOg:\
+       :k6=\EOh:k7=\EOi:k8=\EOj:k9=\ENo:kD=\E[P:kI=\E[@:\
+       :kN=\E[U:kP=\E[V:kb=^H:kd=\E[B:kh=\E[H:kl=\E[D:\
+       :kr=\E[C:ku=\E[A:le=^H:ll=\E[24H:mb=\E[5m:md=\E[1m:\
+       :me=\E[m\017:mh=\E[2m:mr=\E[7m:nd=\E[C:nw=\EE:rc=\E8:\
+       :sc=\E7:se=\E[m:sf=^J:so=\E[7m:ta=^I:\
+       :ts=\E7\E[25;%i%p1%dx:ue=\E[m:up=\E[A:us=\E[4m:
+att605-pc|605bct-pc|ATT 605 in pc term mode:\
+       :@7=\E[F:AL=\E[L:S4=250\E[?11l\E[50;1|:\
+       :S5=400\E[50;0|:XF=g:XN=e:\
+       :ac=k\277l\332m\300j\331n\305w\302q\304u\264t\303v\301x\263:\
+       :al=\E[L:bt=\E[Z:dc=\E[P:dl=\E[M:do=\E[B:ei=:ic=\E[@:\
+       :im=:k1=\E[M:k2=\E[N:k3=\E[O:k4=\E[P:k5=\E[Q:k6=\E[R:\
+       :k7=\E[S:k8=\E[T:k9=\E[U:k;=\E[V:kB=\E[Z:kD=\E[P:\
+       :kI=\E[@:kL=\E[M:kN=\E[G:kP=\E[I:kd=\E[B:kh=\E[H:\
+       :kl=\E[D:kr=\E[C:ku=\E[A:le=\E[D:nd=\E[C:up=\E[A:tc=att605:
+att605-w|605bct-w|AT&T 605-w 132 column 102 key keyboard:\
+       :co#132:ws#132:\
+       :i1=\E[8;0|\E[?4;5;13;15l\E[13;20l\E[?3;7h\E[12h\E(B\E)0:tc=att605:
+att610|610bct|AT&T 610; 80 column; 98key keyboard:\
+       :am:es:hs:mi:ms:xn:xo:\
+       :co#80:it#8:li#24:ws#80:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RI=\E[%dC:SF=\E[%dS:SR=\E[%dT:UP=\E[%dA:\
+       :ae=^O:al=\E[L:as=^N:bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:\
+       :dc=\E[P:dl=\E[M:do=\E[B:ei=\E[4l:fs=\E8:ho=\E[H:\
+       :i1=\E[8;0|\E[?3;4;5;13;15l\E[13;20l\E[?7h\E[12h\E(B\E)0:\
+       :i2=\E(B\E)0:im=\E[4h:is=\E[m\017:k1=\EOc:k2=\EOd:\
+       :k3=\EOe:k4=\EOf:k5=\EOg:k6=\EOh:k7=\EOi:k8=\EOj:\
+       :k9=\ENo:kb=^H:kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:\
+       :ku=\E[A:le=^H:ll=\E[24H:mb=\E[5m:md=\E[1m:\
+       :me=\E[m\017:mh=\E[2m:mr=\E[7m:nd=\E[C:nw=\EE:rc=\E8:\
+       :sc=\E7:se=\E[m:sf=\ED:so=\E[7m:sr=\EM:ta=^I:\
+       :ts=\E7\E[25;%i%p1%dx:ue=\E[m:up=\E[A:us=\E[4m:\
+       :vb=\E[?5h\E[?5l:ve=\E[?25h\E[?12l:vi=\E[?25l:\
+       :vs=\E[?12;25h:
+att610-w|610bct-w|AT&T 610; 132 column; 98key keyboard:\
+       :co#132:ws#132:\
+       :i1=\E[8;0|\E[?4;5;13;15l\E[13;20l\E[?3;7h\E[12h:tc=att610:
+
+att610-103k|610-103k|610bct-103k|AT&T 610; 80 column; 103key keyboard:\
+       :!1=\EOO:!2=\EOP:!3=\EOS:#1=\EOM:%0=\EOt:%1=\EOm:\
+       :%2=\ENi:%3=\EOl:%4=\ENc:%5=\ENh:%6=\EOv:%7=\EOr:\
+       :%8=\ENg:%9=\EOz:%a=\EOL:%b=\ENC:%c=\ENH:%d=\EOR:\
+       :%e=\ENG:%f=\EOZ:%g=\EOT:%h=\EOY:%j=\EOQ:&0=\EOW:\
+       :&1=\EOb:&2=\ENa:&3=\EOy:&4=\EOB:&5=\EOq:&6=\EOo:\
+       :&7=\EOp:&8=\EOs:&9=\ENB:*0=\EOX:*1=\EOU:*2=\END:\
+       :*3=\EON:*4=\ENF:*5=\ENE:*6=\ENI:*7=\ENN:*8=\EOA:\
+       :*9=\EOK:@0=\EOx:@1=\E9:@2=\EOw:@3=\EOV:@4=\EOu:\
+       :@5=\ENd:@6=\EOn:@7=\E0:@8=^M:@9=\EOk:F1@:F2@:F3@:\
+       :F4@:k9@:k;@:kD=\ENf:kE=\EOa:kI=\ENj:kL=\ENe:kM=\ENj:\
+       :kN=\E[U:kP=\E[V:tc=att610:
+att610-103k-w|610-103k-w|610bct-103k-w|AT&T 610; 132 column; 103key keyboard:\
+       :co#132:ws#132:\
+       :i1=\E[8;0|\E[?4;5;13;15l\E[13;20l\E[?3;7h\E[12h:tc=att610-103k:
+att615|615mt|AT&T 615; 80 column; 98key keyboard:\
+       :#4=\E[ A:%i=\E[ @:F5=\EOC:F6=\EOD:F7=\EOE:F8=\EOF:\
+       :F9=\EOG:FA=\EOH:FB=\EOI:FC=\EOJ:FD=\ENO:FE=\ENP:\
+       :FF=\ENQ:FG=\ENR:FH=\ENS:FI=\ENT:FJ=\EOP:FK=\EOQ:\
+       :FL=\EOR:FM=\EOS:FN=\EOw:FO=\EOx:FP=\EOy:FQ=\EOm:\
+       :FR=\EOt:FS=\EOu:FT=\EOv:FU=\EOl:FV=\EOq:FW=\EOr:\
+       :FX=\EOs:FY=\EOp:FZ=\EOn:Fa=\EOM:tc=att610:
+att615-w|615-w|615mt-w|AT&T 615; 132 column; 98key keyboard:\
+       :#4=\E[ A:%i=\E[ @:F5=\EOC:F6=\EOD:F7=\EOE:F8=\EOF:\
+       :F9=\EOG:FA=\EOH:FB=\EOI:FC=\EOJ:FD=\ENO:FE=\ENP:\
+       :FF=\ENQ:FG=\ENR:FH=\ENS:FI=\ENT:FJ=\EOP:FK=\EOQ:\
+       :FL=\EOR:FM=\EOS:FN=\EOw:FO=\EOx:FP=\EOy:FQ=\EOm:\
+       :FR=\EOt:FS=\EOu:FT=\EOv:FU=\EOl:FV=\EOq:FW=\EOr:\
+       :FX=\EOs:FY=\EOp:FZ=\EOn:Fa=\EOM:tc=att610-w:
+att615-103k|615-103k|615mt-103k|AT&T 615; 80 column; 103key keyboard:\
+       :#4=\E[ A:%i=\E[ @:tc=att610-103k:
+att615-103k-w|615-103k-w|615mt-103k-w|AT&T 615; 132 column; 103key keyboard:\
+       :#4=\E[ A:%i=\E[ @:tc=att610-103k-w:
+att620|620mtg|AT&T 620; 80 column; 98key keyboard:\
+       :am:es:hs:mi:ms:xn:xo:\
+       :co#80:it#8:li#24:ws#80:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RI=\E[%dC:SF=\E[%dS:SR=\E[%dT:UP=\E[%dA:\
+       :ae=\E(B\017:al=\E[L:as=\E)0\016:bl=^G:bt=\E[Z:\
+       :cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:\
+       :cs=\E[%i%d;%dr:dc=\E[P:dl=\E[M:do=\E[B:ei=\E[4l:\
+       :fs=\E8:ho=\E[H:\
+       :i1=\E[8;0|\E[?3;4;5;13;15l\E[13;20l\E[?7h\E[12h:\
+       :i2=\E(B\E)0:im=\E[4h:is=\E[m\017:k1=\EOc:k2=\EOd:\
+       :k3=\EOe:k4=\EOf:k5=\EOg:k6=\EOh:k7=\EOi:k8=\EOj:\
+       :k9=\ENo:kb=^H:kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:\
+       :ku=\E[A:le=^H:ll=\E[24H:mb=\E[5m:md=\E[1m:\
+       :me=\E[m\E(B\017:mh=\E[2m:mr=\E[7m:nd=\E[C:nw=\EE:\
+       :rc=\E8:sc=\E7:se=\E[m:sf=\ED:so=\E[7m:sr=\EM:ta=^I:\
+       :ts=\E7\E[25;%i%p1%dx:ue=\E[m:up=\E[A:us=\E[4m:\
+       :vb=\E[?5h\E[?5l:ve=\E[?25h\E[?12l:vi=\E[?25l:\
+       :vs=\E[?12;25h:
+att620-w|620-w|620mtg-w|AT&T 620; 132 column; 98key keyboard:\
+       :co#132:ws#132:\
+       :i1=\E[8;0|\E[?4;5;13;15l\E[13;20l\E[?3;7h\E[12h:tc=att620:
+att620-103k|620-103k|620mtg-103k|AT&T 620; 80 column; 103key keyboard:\
+       :!1=\EOO:!2=\EOP:!3=\EOS:#1=\EOM:%0=\EOt:%1=\EOm:\
+       :%2=\ENi:%3=\EOl:%4=\ENc:%5=\ENh:%6=\EOv:%7=\EOr:\
+       :%8=\ENg:%9=\EOz:%a=\EOL:%b=\ENC:%c=\ENH:%d=\EOR:\
+       :%e=\ENG:%f=\EOZ:%g=\EOT:%h=\EOY:%j=\EOQ:&0=\EOW:\
+       :&1=\EOb:&2=\ENa:&3=\EOy:&4=\EOB:&5=\EOq:&6=\EOo:\
+       :&7=\EOp:&8=\EOs:&9=\ENB:*0=\EOX:*1=\EOU:*2=\END:\
+       :*3=\EON:*4=\ENF:*5=\ENE:*6=\ENI:*7=\ENN:*8=\EOA:\
+       :*9=\EOK:@0=\EOx:@1=\E9:@2=\EOw:@3=\EOV:@4=\EOu:\
+       :@5=\ENd:@6=\EOn:@7=\E0:@8=^M:@9=\EOk:F1@:F2@:F3@:\
+       :F4@:F5@:F6@:F7@:F8@:F9@:FA@:FB@:FC@:FD@:FE@:FF@:FG@:\
+       :FH@:FI@:FJ@:FK@:FL@:FM@:FN@:FO@:FP@:FQ@:FR@:FS@:FT@:\
+       :FU@:FV@:FW@:FX@:FY@:FZ@:Fa@:k9@:k;@:kD=\ENf:kE=\EOa:\
+       :kI=\ENj:kL=\ENe:kM=\ENj:kN=\E[U:kP=\E[V:tc=att620:
+
+att620-103k-w|620-103k-w|620mtg-103k-w|AT&T 620; 132 column; 103key keyboard:\
+       :co#132:ws#132:\
+       :i1=\E[8;0|\E[?4;5;13;15l\E[13;20l\E[?3;7h\E[12h:tc=att620-103k:
+
+att630|5630|5630DMD|630MTG|AT&T 630 windowing terminal:\
+       :NP:am:da:db:mi:ms:xo:\
+       :co#80:it#8:li#60:lm#0:\
+       :@8=^M:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:\
+       :F1=\ENq:F2=\ENr:F3=\ENs:F4=\ENt:F5=\ENu:F6=\ENv:\
+       :F7=\ENw:F8=\ENx:F9=\ENy:FA=\ENz:FB=\EN{:FC=\EN|:\
+       :FD=\EN}:FE=\EN~:IC=\E[%d@:LE=\E[%dD:RI=\E[%dC:\
+       :SF=\E[%dS:SR=\E[%dT:UP=\E[%dA:al=\E[L:bl=^G:bt=\E[Z:\
+       :cb=\E[1K:cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:\
+       :cr=^M:dc=\E[P:dl=\E[M:do=\E[B:ei=\E[4l:ho=\E[H:\
+       :ic=\E[@:im=\E[4h:is=\E[m:k9=\ENo:k;=\ENp:kA=\E[L:\
+       :kB=\E[Z:kC=\E[2J:kD=\E[P:kI=\E[@:kL=\E[M:kb=^H:\
+       :kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:ku=\E[A:le=^H:\
+       :mb=\E[5m:me=\E[m:mh=\E[2m:mr=\E[7m:nd=\E[C:nw=^M^J:\
+       :pf=\E[?4i:po=\E[?5i:..px=\E[%p1%d;%p2%l%dq%p2%s:\
+       :r2=\Ec:rc=\E8:\
+       :..sa=\E[0%?%p2%t;4%;%?%p1%p3%|%p4%|%p5%|%t;7%;m:\
+       :sc=\E7:se=\E[m:sf=\ED:so=\E[7m:sr=\EM:ta=^I:ue=\E[m:\
+       :up=\E[A:us=\E[4m:
+att630-24|5630-24|5630DMD-24|630MTG-24|AT&T 630 windowing terminal 24 lines:\
+       :li#24:tc=att630:
+
+att730|730MTG|AT&T 730 windowing terminal:\
+       :am:da:db:es:hs:mi:ms:xn:xo:\
+       :co#80:it#8:li#60:lm#0:ws#80:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:ae=^O:al=\E[L:as=^N:\
+       :bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
+       :cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:dc=\E[P:dl=\E[M:\
+       :do=\E[B:ei=\E[4l:fs=\E8:ho=\E[H:\
+       :i1=\E[8;0|\E[?3;4;5;13;15l\E[13;20l\E[?7h\E[12h\E(B\E)B:\
+       :i2=\E(B\E)0:im=\E[4h:is=\E[m\017:k1=\EOc:k2=\EOd:\
+       :k3=\EOe:k4=\EOf:k5=\EOg:k6=\EOh:k7=\EOi:k8=\EOj:\
+       :k9=\ENo:kI=\E[@:kb=^H:kd=\E[B:kh=\E[H:kl=\E[D:\
+       :kr=\E[C:ku=\E[A:le=^H:mb=\E[5m:md=\E[1m:me=\E[m\017:\
+       :mh=\E[2m:mr=\E[7m:nd=\E[C:nw=\EE:rc=\E8:sc=\E7:\
+       :se=\E[27m:sf=\ED:so=\E[7m:sr=\EM:ta=^I:\
+       :ts=\E7\E[;%i%p1%dx:ue=\E[24m:up=\E[A:us=\E[4m:\
+       :vb=\E[?5h\E[?5l:ve=\E[?25h\E[?12l:vi=\E[?25l:\
+       :vs=\E[?12;25h:
+att730-41|730MTG-41|AT&T 730-41 windowing terminal Version:\
+       :li#41:tc=att730:
+att730-24|730MTG-24|AT&T 730-24 windowing terminal Version:\
+       :li#24:tc=att730:
+att730r|730MTGr|AT&T 730 rev video windowing terminal Version:\
+       :i1=\E[8;0|\E[?3;4;13;15l\E[?5h\E[13;20l\E[?7h\E[12h\E(B\E)B:\
+       :vb=\E[?5l\E[?5h:tc=att730:
+att730r-41|730MTG-41r|AT&T 730r-41 rev video windowing terminal Version:\
+       :li#41:tc=att730r:
+att730r-24|730MTGr-24|AT&T 730r-24 rev video windowing terminal Version:\
+       :li#24:tc=att730r:
+
+
+att505|pt505|att5430|gs5430|AT&T Personal Terminal 505 or 5430 GETSET terminal:\
+       :am:xo:\
+       :co#80:it#8:li#24:\
+       :&2=\E[27s:@4=\E!:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:\
+       :DO=\E[%dB:F8=\E[18s:F9=\E[19s:FA=\E[20s:FB=\E[21s:\
+       :FC=\E[22s:FD=\E[23s:FE=\E24s:FG=\E26s:LE=\E[%dD:\
+       :RA=\E[11;1j:RI=\E[%dC:SA=\E[11;0j:UP=\E[%dA:\
+       :ae=\E[10m:al=\E[L:as=\E[11m:bl=^G:cb=\E2K:cd=\E[0J:\
+       :ce=\E[0K:cl=\E[2J\E[H:cm=\E[%d;%dH:cr=^M:dc=\E[P:\
+       :dl=\E[M:do=\E[B:ei=\E[4l:ho=\E[H:\
+       :i1=\EPr\\E[0u\E[2J\E[0;0H\E[m\E[3l\E[<l\E[4l\E[>l\E[=l\E[?l:\
+       :im=\E[4h:k0=\E[00s:k1=\E[01s:k2=\E[02s:k3=\E[03s:\
+       :k4=\E[04s:k5=\E[05s:k6=\E[06s:kb=^H:kd=\E[B:kl=\E[D:\
+       :kr=\E[C:ku=\E[A:le=\E[D:mb=\E[5m:md=\E[1m:me=\E[m:\
+       :mr=\E[7m:nd=\E[C:pf=\E[4i:po=\E[5i:r1=\Ec:rc=\E8:\
+       :sc=\E7:se=\E[m:sf=^J:so=\E[1m:ta=^I:ue=\E[m:up=\E[A:\
+       :us=\E[4m:ve=\E[>l:vs=\E[>h:
+
+att505-24|pt505-24|gs5430-24|AT&T PT505 or 5430 GETSET version 1 24 lines:\
+       :li#24:\
+       :RA@:SA@:pf@:po@:rc@:sc@:tc=att505:
+tt505-22|pt505-22|gs5430-22|AT&T PT505 or 5430 GETSET version 1 22 lines:\
+       :li#22:tc=att505:
+
+
+ampex80|a80|d80|dialogue|dialogue80|ampex dialogue 80:\
+       :am:bw:ul:\
+       :co#80:it#8:li#24:\
+       :al=\EE:bl=^G:bt=\EI:cd=\Ey:ce=\Et:cl=\E*:\
+       :cm=\E=%+ %+ :cr=^M:ct=\E3:dc=\EW:dl=\ER:do=^J:ei=:\
+       :ic=\EQ:im=:is=\EA:le=^H:nd=^L:se=\Ek:sf=^J:so=\Ej:\
+       :st=\E1:ta=^I:ue=\Em:up=^K:us=\El:
+ampex175|ampex d175:\
+       :am:\
+       :co#80:li#24:\
+       :al=\EE:bl=^G:cd=\Ey:ce=\Et:cl=\E+:cm=\E=%+ %+ :\
+       :cr=^M:dc=\EW:dl=\ER:do=^J:ei=:ho=^^:ic=\EQ:im=:\
+       :is=\EX\EA\EF:kA=\EE:kD=\EW:kI=\EQ:kL=\ER:kd=^J:\
+       :kh=^^:kl=^H:kr=^L:ku=^K:le=^H:ll=^^^K:nd=^L:se=\Ek:\
+       :sf=^J:so=\Ej:te=\EF:ti=\EN:ue=\Em:up=^K:us=\El:
+ampex175-b|ampex d175 using left arrow for erase:\
+       :kb=^_:tc=ampex175:
+ampex210|a210|ampex a210:\
+       :am:hs:xn:\
+       :co#80:it#8:li#24:sg#1:ug#1:\
+       :al=\EE:bt=\EI:cd=\Ey:ce=\Et:cl=\E*:cm=\E=%+ %+ :\
+       :dc=\EW:dl=\ER:ei=:fs=\E.2:ho=^^:ic=\EQ:\
+       :if=/usr/share/tabset/std:im=:\
+       :is=\EC\Eu\E'\E(\El\EA\E%\E{\E.2\EG0\Ed\En:k0=^A0\r:\
+       :k1=^A1\r:k2=^A2\r:k3=^A3\r:k4=^A4\r:k5=^A5\r:\
+       :k6=^A6\r:k7=^A7\r:k8=^A8\r:k9=^A9\r:kd=^V:kh=^^:\
+       :kl=^H:kr=^L:ku=^K:le=^H:nd=^L:se=\EG0:so=\EG4:ta=^I:\
+       :ts=\E.0\Eg\E}\Ef:ue=\EG0:up=^K:us=\EG8:\
+       :vb=\EU\EX\EU\EX\EU\EX\EU\EX:
+ampex219|ampex-219|amp219|Ampex with Automargins:\
+       :hs:xn:\
+       :co#80:it#8:li#24:\
+       :RA=\E[?7l:SA=\E[?7h:bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=^M:cs=%i\E[%2;%2r:\
+       :do=\E[B:ho=\E[H:\
+       :is=\E>\E[?1l\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:\
+       :k0=\E[21~:k1=\E[7~:k2=\E[8~:k3=\E[9~:k4=\E[10~:\
+       :k5=\E[11~:k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:\
+       :kd=\E[B:ke=\E>:kh=\E[H:kl=\E[D:kr=\E[C:ks=\E=:\
+       :ku=\E[A:le=^H:mb=\E[5m:md=\E[1m:me=\E[m:mh=\E[1m:\
+       :mr=\E[7m:nd=\E[C:se=\E[m:sf=^J:so=\E[7m:sr=\EM:\
+       :ta=^I:ue=\E[m:up=\E[A:us=\E[4m:
+ampex219w|ampex-219w|amp219w|Ampex 132 cols:\
+       :co#132:li#24:\
+       :bl=^G:cr=^M:do=^J:\
+       :is=\E>\E[?3h\E[?4l\E[?5l\E[?7h\E[?8h:sf=^J:\
+       :vs=\E[?3h:tc=ampex219:
+ampex232|ampex-232|Ampex Model 232:\
+       :am:\
+       :co#80:li#24:sg#1:ug#1:\
+       :al=5*\EE:bt=\EI:cd=\EY:ce=\ET:cl=\E+:cm=\E=%+ %+ :\
+       :dc=\EW:dl=5*\ER:do=^V:ei=:ic=\EQ:\
+       :if=/usr/lib/tabset/ampex:im=:is=\Eg\El:k0=^A@\r:\
+       :k1=^AA\r:k2=^AB\r:k3=^AC\r:k4=^AD\r:k5=^AE\r:\
+       :k6=^AF\r:k7=^AG\r:k8=^AH\r:k9=^AI\r:kb=^H:kd=^V:\
+       :kh=^^:kl=^H:kr=^L:ku=^K:le=^H:nd=^L:se=\EG0:so=\EG4:\
+       :ta=^I:ue=\EG0:up=^K:us=\EG8:vb=\Eb\Ed:ve=\E.4:\
+       :vi=\E.0:
+ampex232w|Ampex Model 232 / 132 columns:\
+       :co#132:li#24:\
+       :if=/usr/lib/tabset/amp-132:is=\E\034Eg\El:tc=ampex232:
+
+
+
+annarbor4080|aa4080|ann arbor 4080:\
+       :am:\
+       :co#80:li#40:\
+       :bl=^G:cl=\014:\
+       :..cm=\017%p2%{10}%/%{16}%*%p2%{10}%m%+%c%p1%?%p1%{19}%>%t%{12}%+%;%'@'%+%c:\
+       :cr=^M:ct=^^P^P:do=^J:ho=^K:kb=^^:kd=^J:kh=^K:kl=^H:\
+       :kr=^_:ku=^N:le=^H:nd=^_:sf=^J:st=^]^P1:ta=^I:up=^N:
+
+aaa+unk|aaa-unk|ann arbor ambassador (internal - don't use this directly):\
+       :am:km:mi:xo:\
+       :co#80:it#8:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:al=\E[L:bl=^G:bt=\E[Z:\
+       :cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:\
+       :ct=\E[2g:dc=\E[P:dl=\E[M:do=^K:ei=:ho=\E[H:\
+       :i1=\E[m\E7\E[H\E9\E8:i2=\E[1Q\E[>20;30l\EP`+x~M\E\\:\
+       :ic=\E[@:im=:k1=\EOA:k2=\EOB:k3=\EOC:k4=\EOD:k5=\EOE:\
+       :k6=\EOF:k7=\EOG:k8=\EOH:k9=\EOI:kD=\E[P:kI=\E[@:\
+       :kb=^H:kd=\E[B:\
+       :ke=\EP`>y~[[J`8xy~[[A`4xy~[[D`6xy~[[C`2xy~[[B\E\\:\
+       :kh=\E[H:kl=\E[D:kr=\E[C:\
+       :ks=\EP`>z~[[J`8xz~[[A`4xz~[[D`6xz~[[C`2xz~[[B\E\\:\
+       :ku=\E[A:le=^H:mb=\E[5m:md=\E[1m:me=\E[m:mm=\E[>52h:\
+       :mo=\E[>52l:mr=\E[7m:nd=\E[C:rc=\E8:sc=\E7:se=\E[m:\
+       :sf=^K:so=\E[7m:st=\EH:ta=^I:ue=\E[m:up=\E[A:\
+       :us=\E[4m:
+
+aaa+rv|ann arbor ambassador in reverse video:\
+       :i1=\E[7m\E7\E[H\E9\E8:mb=\E[5;7m:md=\E[1;7m:\
+       :me=\E[7m\016:mk=\E[7;8m:mr=\E[m:r1=\E[H\E[7m\E[J:\
+       :..sa=\E[%?%p1%p3%|%!%t7;%;%?%p2%t4;%;%?%p4%t5;%;%?%p6%t1;%;%?%p7%t8;%;m:\
+       :se=\E[7m:so=\E[m:ue=\E[7m:us=\E[4;7m:
+aaa+dec|ann arbor ambassador in dec vt100 mode:\
+       :ac=aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}:\
+       :ae=^N:as=^O:cs=\E[%i%d;%dr:eA=\E(0:\
+       :..sa=\E[%?%p1%p3%|%!%t7;%;%?%p2%t4;%;%?%p4%t5;%;%?%p6%t1;%;%?%p7%t8;%;m%?%p9%t\017%e\016%;:
+aaa-18|ann arbor ambassador/18 lines:\
+       :li#18:\
+       :is=\E7\E[60;0;0;18p\E8:te=\E[60;0;0;18p\E[60;1H\E[K:\
+       :ti=\E[18;0;0;18p:tc=aaa+unk:
+aaa-18-rv|ann arbor ambassador/18 lines+reverse video:\
+       :tc=aaa+rv:tc=aaa-18:
+aaa-20|ann arbor ambassador/20 lines:\
+       :li#20:\
+       :is=\E7\E[60;0;0;20p\E8:te=\E[60;0;0;20p\E[60;1H\E[K:\
+       :ti=\E[20;0;0;20p:tc=aaa+unk:
+aaa-22|ann arbor ambassador/22 lines:\
+       :li#22:\
+       :is=\E7\E[60;0;0;22p\E8:te=\E[60;0;0;22p\E[60;1H\E[K:\
+       :ti=\E[22;0;0;22p:tc=aaa+unk:
+aaa-24|ann arbor ambassador/24 lines:\
+       :li#24:\
+       :is=\E7\E[60;0;0;24p\E8:te=\E[60;0;0;24p\E[60;1H\E[K:\
+       :ti=\E[24;0;0;24p:tc=aaa+unk:
+aaa-24-rv|ann arbor ambassador/24 lines+reverse video:\
+       :tc=aaa+rv:tc=aaa-24:
+aaa-26|ann arbor ambassador/26 lines:\
+       :li#26:\
+       :is=\E7\E[60;0;0;26p\E8:te=\E[60;0;0;26p\E[26;1H\E[K:\
+       :ti=\E[H\E[J\E[26;0;0;26p:tc=aaa+unk:
+aaa-28|ann arbor ambassador/28 lines:\
+       :li#28:\
+       :is=\E7\E[60;0;0;28p\E8:te=\E[60;0;0;28p\E[28;1H\E[K:\
+       :ti=\E[H\E[J\E[28;0;0;28p:tc=aaa+unk:
+aaa-30-s|aaa-s|ann arbor ambassador/30 lines w/status:\
+       :es:hs:\
+       :li#29:\
+       :ds=\E7\E[60;0;0;30p\E[1;1H\E[K\E[H\E8\r\n\E[K:\
+       :fs=\E[>51l:is=\r\n\E[A\E7\E[60;1;0;30p\E8:\
+       :te=\E[60;1;0;30p\E[29;1H\E[K:\
+       :ti=\E[H\E[J\E[30;1;0;30p\E[30;1H\E[K:\
+       :ts=\E[>51h\E[1;%p1%dH\E[2K:tc=aaa+unk:
+aaa-30-s-rv|aaa-s-rv|ann arbor ambassador/30 lines+status+reverse video:\
+       :tc=aaa+rv:tc=aaa-30-s:
+aaa-s-ctxt|aaa-30-s-ctxt|ann arbor ambassador/30 lines+status+save context:\
+       :te=\E[60;1;0;30p\E[59;1H\E[K:\
+       :ti=\E[30;1H\E[K\E[30;1;0;30p:tc=aaa-30-s:
+aaa-s-rv-ctxt|aaa-30-s-rv-ct|ann arbor ambassador/30 lines+status+save context:\
+       :te=\E[60;1;0;30p\E[59;1H\E[K:\
+       :ti=\E[30;1H\E[K\E[30;1;0;30p:tc=aaa-30-s-rv:
+aaa|aaa-30|ambas|ambassador|ann arbor ambassador/30 lines:\
+       :li#30:\
+       :is=\E7\E[60;0;0;30p\E8:te=\E[60;0;0;30p\E[30;1H\E[K:\
+       :ti=\E[H\E[J\E[30;0;0;30p:tc=aaa+unk:
+aaa-30-rv|aaa-rv|ann arbor ambassador/30 lines in reverse video:\
+       :tc=aaa+rv:tc=aaa-30:
+aaa-30-ctxt|aaa-ctxt|ann arbor ambassador/30 lines; saving context:\
+       :te=\E[60;0;0;30p\E[60;1H\E[K:ti=\E[30;0;0;30p:tc=aaa-30:
+aaa-30-rv-ctxt|aaa-rv-ctxt|ann arbor ambassador/30 lines reverse video; saving context:\
+       :te=\E[60;0;0;30p\E[60;1H\E[K:ti=\E[30;0;0;30p:tc=aaa+rv:tc=aaa-30:
+aaa-36|ann arbor ambassador/36 lines:\
+       :li#36:\
+       :is=\E7\E[60;0;0;36p\E8:te=\E[60;0;0;36p\E[36;1H\E[K:\
+       :ti=\E[H\E[J\E[36;0;0;36p:tc=aaa+unk:
+aaa-36-rv|ann arbor ambassador/36 lines+reverse video:\
+       :tc=aaa+rv:tc=aaa-36:
+aaa-40|ann arbor ambassador/40 lines:\
+       :li#40:\
+       :is=\E7\E[60;0;0;40p\E8:te=\E[60;0;0;40p\E[40;1H\E[K:\
+       :ti=\E[H\E[J\E[40;0;0;40p:tc=aaa+unk:
+aaa-40-rv|ann arbor ambassador/40 lines+reverse video:\
+       :tc=aaa+rv:tc=aaa-40:
+aaa-48|ann arbor ambassador/48 lines:\
+       :li#48:\
+       :is=\E7\E[60;0;0;48p\E8:te=\E[60;0;0;48p\E[48;1H\E[K:\
+       :ti=\E[H\E[J\E[48;0;0;48p:tc=aaa+unk:
+aaa-48-rv|ann arbor ambassador/48 lines+reverse video:\
+       :tc=aaa+rv:tc=aaa-48:
+aaa-60-s|ann arbor ambassador/59 lines+status:\
+       :es:hs:\
+       :li#59:\
+       :ds=\E7\E[60;0;0;60p\E[1;1H\E[K\E[H\E8\r\n\E[K:\
+       :fs=\E[>51l:is=\r\n\E[A\E7\E[60;1;0;60p\E8:\
+       :ts=\E[>51h\E[1;%p1%dH\E[2K:tc=aaa+unk:
+aaa-60-s-rv|ann arbor ambassador/59 lines+status+reverse video:\
+       :tc=aaa+rv:tc=aaa-60-s:
+aaa-60-dec-rv|ann arbor ambassador/dec mode+59 lines+status+rev video:\
+       :tc=aaa+dec:tc=aaa+rv:tc=aaa-60-s:
+aaa-60|ann arbor ambassador/60 lines:\
+       :li#60:\
+       :is=\E7\E[60;0;0;60p\E[1Q\E[m\E[>20;30l\E8:tc=aaa+unk:
+aaa-60-rv|ann arbor ambassador/60 lines+reverse video:\
+       :tc=aaa+rv:tc=aaa-60:
+aaa-db|ann arbor ambassador 30/destructive backspace:\
+       :i2=\E[1Q\E[m\E[>20l\E[>30h:le=\E[D:tc=aaa-30:
+
+guru|guru-33|guru+unk|ann arbor guru/33 lines 80 cols:\
+       :li#33:\
+       :i2=\E[>59l:is=\E7\E[255;0;0;33;80;80p\E8\E[J:\
+       :te=\E[255p\E[255;1H\E[K:ti=\E[33p:vb=\E[>59h\E[>59l:tc=aaa+unk:
+guru+rv|guru changes for reverse video:\
+       :i2=\E[>59h:vb=\E[>59l\E[>59h:
+guru-rv|guru-33-rv|ann arbor guru/33 lines+reverse video:\
+       :tc=guru+rv:tc=guru-33:
+guru+s|guru status line:\
+       :es:hs:\
+       :ds=\E7\E[;0p\E[1;1H\E[K\E[H\E8\r\n\E[K:fs=\E[>51l:\
+       :te=\E[255;1p\E[255;1H\E[K:\
+       :ts=\E[>51h\E[1;%p1%dH\E[2K:
+guru-nctxt|guru with no saved context:\
+       :ti=\E[H\E[J\E[33p\E[255;1H\E[K:tc=guru:
+guru-s|guru-33-s|ann arbor guru/33 lines+status:\
+       :li#32:\
+       :is=\r\n\E[A\E7\E[255;1;0;33;80;80p\E8\E[J:\
+       :ti=\E[33;1p\E[255;1H\E[K:tc=guru+s:tc=guru+unk:
+guru-24|ann arbor guru 24 lines:\
+       :co#80:li#24:\
+       :is=\E7\E[255;0;0;24;80;80p\E8\E[J:ti=\E[24p:tc=guru+unk:
+guru-44|ann arbor guru 44 lines:\
+       :co#97:li#44:\
+       :is=\E7\E[255;0;0;44;97;100p\E8\E[J:ti=\E[44p:tc=guru+unk:
+guru-44-s|ann arbor guru/44 lines+status:\
+       :li#43:\
+       :is=\r\n\E[A\E7\E[255;1;0;44;80;80p\E8\E[J:\
+       :ti=\E[44;1p\E[255;1H\E[K:tc=guru+s:tc=guru+unk:
+guru-76|guru with 76 lines by 89 cols:\
+       :co#89:li#76:\
+       :is=\E7\E[255;0;0;76;89;100p\E8\E[J:ti=\E[76p:tc=guru+unk:
+guru-76-s|ann arbor guru/76 lines+status:\
+       :co#89:li#75:\
+       :is=\r\n\E[A\E7\E[255;1;0;76;89;100p\E8\E[J:\
+       :ti=\E[76;1p\E[255;1H\E[K:tc=guru+s:tc=guru+unk:
+guru-76-lp|guru-lp|guru with page bigger than line printer:\
+       :co#134:li#76:\
+       :is=\E7\E[255;0;0;76;134;134p\E8\E[J:ti=\E[76p:tc=guru+unk:
+guru-76-w|guru 76 lines by 178 cols:\
+       :co#178:li#76:\
+       :is=\E7\E[255;0;0;76;178;178p\E8\E[J:ti=\E[76p:tc=guru+unk:
+guru-76-w-s|ann arbor guru/76 lines+status+wide:\
+       :co#178:li#75:\
+       :is=\r\n\E[A\E7\E[255;1;0;76;178;178p\E8\E[J:\
+       :ti=\E[76;1p\E[255;1H\E[K:tc=guru+s:tc=guru+unk:
+guru-76-wm|guru 76 lines by 178 cols with 255 cols memory:\
+       :co#178:li#76:\
+       :is=\E7\E[255;0;0;76;178;255p\E8\E[J:ti=\E[76p:tc=guru+unk:
+aaa-rv-unk|ann arbor unknown type:\
+       :Nl#0:lh#0:lw#0:\
+       :ho=\E[H:i1=\E[7m\E7\E[H\E9\E8:mb=\E[5;7m:md=\E[1;7m:\
+       :me=\E[7m:mk=\E[7;8m:mr=\E[m:r1=\E[H\E[7m\E[J:\
+       :..sa=\E[%?%p1%!%t7;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p6%t1;%;%?%p7%t8;%;m:\
+       :se=\E[7m:so=\E[m:ue=\E[7m:us=\E[4;7m:
+
+
+regent|Adds Regent Series:\
+       :am:bs:\
+       :co#80:li#24:\
+       :bl=^G:cl=^L:cr=^M:do=^J:ho=\EY  :le=^U:ll=^A:nd=^F:\
+       :sf=^J:up=^Z:
+regent100|Adds Regent 100:\
+       :sg#1:ug#1:\
+       :bl=^G:cm=\013%+ %B\020%.:k0=^B1\r:k1=^B2\r:k2=^B3\r:\
+       :k3=^B4\r:k4=^B5\r:k5=^B6\r:k6=^B7\r:k7=^B8\r:l0=F1:\
+       :l1=F2:l2=F3:l3=F4:l4=F5:l5=F6:l6=F7:l7=F8:se=\E0@:\
+       :so=\E0P:ue=\E0@:us=\E0`:tc=regent:
+regent20|Adds Regent 20:\
+       :bl=^G:cd=\Ek:ce=\EK:cm=\EY%+ %+ :tc=regent:
+regent25|Adds Regent 25:\
+       :bl=^G:kd=^J:kh=^A:kl=^U:kr=^F:ku=^Z:tc=regent20:
+regent40|Adds Regent 40:\
+       :sg#1:ug#1:\
+       :al=\EM:bl=^G:dl=\El:k0=^B1\r:k1=^B2\r:k2=^B3\r:\
+       :k3=^B4\r:k4=^B5\r:k5=^B6\r:k6=^B7\r:k7=^B8\r:l0=F1:\
+       :l1=F2:l2=F3:l3=F4:l4=F5:l5=F6:l6=F7:l7=F8:se=\E0@:\
+       :so=\E0P:ue=\E0@:us=\E0`:tc=regent25:
+regent40+|Adds Regent 40+:\
+       :is=\EB:tc=regent40:
+regent60|regent200|Adds Regent 60:\
+       :dc=\EE:ei=\EF:im=\EF:is=\EV\EB:kD=\EE:kI=\EF:kM=\EF:\
+       :se=\ER\E0@\EV:so=\ER\E0P\EV:tc=regent40+:
+viewpoint|addsviewpoint|adds viewpoint:\
+       :am:\
+       :co#80:li#24:\
+       :bl=^G:cd=\Ek:ce=\EK:cl=^L:cm=\EY%+ %+ :cr=^M:dl=\El:\
+       :do=^J:is=\017\E0`:k0=^B1:k2=^B2:k3=^B!:k4=^B":\
+       :k5=^B#:kd=^J:kh=^A:kl=^U:kr=^F:ku=^Z:le=^H:ll=^A:\
+       :nd=^F:se=^O:sf=^J:so=^N:ue=^O:up=^Z:us=^N:\
+       :ve=\017\E0`:vs=\017\E0P:
+screwpoint|adds viewpoint with ^O bug:\
+       :se@:so@:ue@:us@:vs@:tc=viewpoint:
+
+vp3a+|viewpoint3a+|adds viewpoint 3a+:\
+       :am:bw:\
+       :co#80:it#8:li#24:\
+       :cd=\EY:ce=\ET:cl=\E*:cm=\E=%+ %+ :cr=^M:do=^J:ho=^^:\
+       :kb=^H:kd=^J:kh=^^:kl=^H:kr=^L:ku=^K:le=^H:me=\E(:\
+       :nd=^L:nw=^M^J:\
+       :..sa=\E0%'@'%?%p1%tQ%|%;%?%p2%t%'`'%|%;%?%p3%tP%|%;%?%p4%t%{2}%|%;%?%p5%t%{1}%|%;%?%p7%tD%|%;%c\E):\
+       :se=\E(:sf=^J:so=\E0Q\E):ta=^I:up=^K:ve=^X:vi=^W:
+vp60|viewpoint60|addsvp60|adds viewpoint60:\
+       :tc=regent40:
+vp90|viewpoint90|adds viewpoint 90:\
+       :bw:ms:xs:\
+       :co#80:li#24:\
+       :cd=\Ek:ce=\EK:cl=\EG\Ek:cm=\EY%+ %+ :dc=\EE:dl=\El:\
+       :do=^J:ei=:ho=\EY  :ic=\EF \EF\025:im=:k0=^B1\r:\
+       :k1=^B2\r:k2=^B3\r:k3=^B4\r:k4=^B5\r:k5=^B6\r:\
+       :k6=^B7\r:k7=^B8\r:k8=^B9\r:k9=^B\072\r:k;=^B;\r:\
+       :kb=^H:kd=^J:kh=^A:kl=^U:kr=^F:ku=^Z:l0=F1:l1=F2:\
+       :l2=F3:l3=F4:l4=F5:l5=F6:l6=F7:l7=F8:l8=F9:l9=F10:\
+       :la=F11:le=^H:ll=^A:nd=^F:se=\ER\E0@\EV:sf=^J:\
+       :so=\ER\E0Q\EV:ta=^I:ue=\ER\E0@\EV:up=^Z:\
+       :us=\ER\E0`\EV:
+adds980|a980|adds consul 980:\
+       :am:\
+       :co#80:li#24:\
+       :al=\E\016:bl=^G:cl=\014\013@:cm=\013%+@\E\005%2:\
+       :cr=^M:dl=\E\017:do=^J:k0=\E0:k1=\E1:k2=\E2:k3=\E3:\
+       :k4=\E4:k5=\E5:k6=\E6:k7=\E7:k8=\E8:k9=\E9:le=^H:\
+       :nd=\E^E01:se=^O:sf=^J:so=^Y^^^N:
+
+
+cit80|cit-80|citoh 80:\
+       :am:\
+       :co#80:li#24:\
+       :cd=\EJ:ce=\EK:cl=\E[H\EJ:cm=\E[%i%2;%2H:cr=^M:ff=^L:\
+       :is=\E>:kd=\EOB:ke=\E[?1l\E>:kl=\EOD:kr=\EOC:\
+       :ks=\E[?1h\E=:ku=\EOA:le=^H:nd=\E[C:sf=^J:up=\E[A:
+cit101|citc|C.itoh fast vt100:\
+       :am:xn:\
+       :co#80:li#24:\
+       :RA=\E[?7l:SA=\E[?7h:al=\E[L:bl=^G:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[2J:cm=\E[%i%d;%dH:dc=\E[P:dl=\E[M:ei=:\
+       :ic=\E[@:im=:\
+       :is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[3g\E[>5g:\
+       :kd=\EOB:ke=\E[?1l\E>:kl=\EOD:kr=\EOC:ks=\E[?1h\E=:\
+       :ku=\EOA:le=^H:nd=\E[C:se=\E[m:so=\E[7m:ue=\E[m:\
+       :up=\E[A:us=\E[4m:vb=\E[?5h\E[?5l:ve=\E[V\E8:\
+       :vs=\E7\E[U:
+cit500|cit-500|cit 500:\
+       :am:xn:\
+       :co#80:it#8:li#64:\
+       :RA=\E[?7l:SA=\E[?7h:al=\E[L:cd=50\E[J:ce=3\E[K:\
+       :cl=50\E[H\E[2J:cm=5\E[%i%2;%2H:dc=\E[P:dl=\E[M:\
+       :do=\ED:is=\E(B\E)0\E>\E[?3l\E[?7h\E[?8h:k1=\EOP:\
+       :k2=\EOQ:k3=\EOR:k4=\EOS:kd=\EOB:ke=\E[?1l\E>:\
+       :kh=\E[H:kl=\EOD:kr=\EOC:ks=\E[?1h\E=:ku=\EOA:le=^H:\
+       :nd=2\E[C:se=2\E[m:so=2\E[7m:sr=5\EM:ta=^I:ue=2\E[m:\
+       :up=2\E[A:us=2\E[4m:
+
+citoh|ci8510|8510|c.itoh 8510a:\
+       :co#80:it#8:\
+       :is=\E(009\054017\054025\054033\054041\054049\054057\054065\054073.:\
+       :le@:md=\E!:me=\E"\EY:rp=\ER%r%03%.:sr=\Er:ue=\EY:\
+       :us=\EX:tc=lpr:
+citoh-pica|citoh in pica:\
+       :i1=\EN:tc=citoh:
+citoh-elite|citoh in elite:\
+       :co#96:\
+       :i1=\EE:\
+       :is=\E(009\054017\054025\054033\054041\054049\054057\054065\054073\054081\054089.:tc=citoh:
+citoh-comp|citoh in compressed:\
+       :co#136:\
+       :i1=\EQ:\
+       :is=\E(009\054017\054025\054033\054041\054049\054057\054065\054073\054081\054089\054097\054105\054113\054121\054129.:tc=citoh:
+citoh-prop|citoh-ps|ips|citoh in proportional spacing mode:\
+       :co#32767:\
+       :i1=\EP:tc=citoh:
+citoh-6lpi|citoh in 6 lines per inch mode:\
+       :i2=\EA:tc=citoh:
+citoh-8lpi|citoh in 8 lines per inch mode:\
+       :li#88:\
+       :i2=\EB:tc=citoh:
+
+
+cdc456|cdc 456 terminal:\
+       :am:\
+       :co#80:li#24:\
+       :al=\EL:bl=^G:cd=^X:ce=^V:cl=^Y^X:cm=\E1%+ %+ :cr=^M:\
+       :dl=\EJ:do=^J:ho=^Y:le=^H:nd=^L:sf=^J:up=^Z:
+
+
+c108|concept108|c108-8p|concept108-8p|concept 108 w/8 pages:\
+       :i2=\EU\E z"\Ev\001\177 !p\E ;"\E z \Ev  \001\177p\Ep\n:\
+       :te=\Ev  \001\177p\Ep\r\n:tc=c108-4p:
+c108-4p|concept108-4p|concept 108 w/4 pages:\
+       :es:hs:xo:\
+       :pb@:\
+       :ac=l\\qLkTxUmMjE:ae=\Ej :as=\Ej!:\
+       :..cm=\Ea%p1%?%p1%{95}%>%t\001%{96}%-%;%{32}%+%c%p2%?%p2%{95}%>%t\001%{96}%-%;%{32}%+%c:\
+       :cr=^M:dc=\E 1:ds=\E ;\177:fs=\Ee\E z :i1=\EK\E!\E F:\
+       :i2=\EU\E z"\Ev\177 !p\E ;"\E z \Ev  \001 p\Ep\n:\
+       :sf=^J:te=\Ev  \001 p\Ep\r\n:\
+       :ti=\EU\Ev  8p\Ep\r\E\025:\
+       :ts=\E z"\E?\E\005\EE\Ea %+ :ve=\Ew:vs=\EW:tc=c100:
+c108-rv|c108-rv-8p|concept 108 w/8 pages in reverse video:\
+       :te=\Ev  \002 p\Ep\r\n:ti=\EU\Ev  8p\Ep\r:tc=c108-rv-4p:
+c108-rv-4p|concept108rv4p|concept 108 w/4 pages in reverse video:\
+       :i1=\Ek:se=\Ee:so=\EE:vb=\EK\Ek:tc=c108-4p:
+c108-w|c108-w-8p|concept108-w-8|concept108-w8p|concept 108 w/8 pages in wide mode:\
+       :co#132:\
+       :i1=\E F\E":te=\Ev  ^A0\001D\Ep\r\n:\
+       :ti=\EU\Ev  8\001D\Ep\r:tc=c108-8p:
+
+c100|concept100|concept|c104|c100-4p|hds concept 100:\
+       :am:eo:mi:ul:xn:\
+       :co#80:li#24:pb#9600:vt#8:\
+       :al=\E\022:bl=^G:cd=\E\005:ce=\E\025:cl=\E?\E\005:\
+       :cm=\Ea%+ %+ :cr=\r:dc=\E\021:dl=\E\002:do=^J:\
+       :ei=\E  :i1=\EK:i2=\Ev    \Ep\n:im=\E^P:ip=:\
+       :is=\EU\Ef\E7\E5\E8\El\ENH\E\200\Eo&\200\Eo'\E\Eo!\200\E\007!\E\010A@ \E4#\072"\E\072a\E4#;"\E\072b\E4#<"\E\072c:\
+       :k1=\E5:k2=\E6:k3=\E7:k4=\E8:k5=\E9:k6=\E\072a:\
+       :k7=\E\072b:k8=\E\072c:kA=\E^R:kB=\E':kD=\E^Q:\
+       :kE=\E^S:kF=\E[:kI=\E^P:kL=\E^B:kM=\E\200:kN=\E-:\
+       :kP=\E.:kR=\E\\:kS=\E^C:kT=\E]:kb=^H:kd=\E<:ke=\Ex:\
+       :kh=\E?:kl=\E>:kr=\E=:ks=\EX:kt=\E_:ku=\E;:le=^H:\
+       :mb=\EC:me=\EN@:mh=\EE:mk=\EH:mp=\EI:mr=\ED:nd=\E=:\
+       :pf=\036o \E\EQ!\EYP\027:po=\EQ"\EY(\027\EYD\Eo \036:\
+       :rp=\Er%.%+ :se=\Ed:sf=^J:so=\ED:ta=\011:\
+       :te=\Ev    \Ep\r\n:ti=\EU\Ev  8p\Ep\r\E\025:ue=\Eg:\
+       :up=\E;:us=\EG:vb=\Ek\EK:
+c100-rv|c100-rv-4p|concept100-rv|c100 rev video:\
+       :i1=\Ek:se=\Ee:so=\EE:vb=\EK\Ek:ve@:vs@:tc=c100:
+oc100|oconcept|c100-1p|old 1 page concept 100:\
+       :in:\
+       :i3@:tc=c100:
+
+avt-ns|concept avt no status line:\
+       :am:eo:mi:ul:xn:xo:\
+       :co#80:it#8:li#24:lm#192:\
+       :AL=\E[%dL:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:LE=\E[%dD:\
+       :RI=\E[%dC:UP=\E[%dA:ae=\016:al=\E[L:as=\017:bl=^G:\
+       :bt=\E[Z:cd=\E[J:ce=\E[K:ch=\E[%+^AG:cl=\E[H\E[J:\
+       :cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:ct=\E[2g:\
+       :cv=\E[%+^Ad:dc=\E[P:dl=\E[M:do=^J:ei=\E4l:ho=\E[H:\
+       :i1=\E[=103l\E[=205l:ic=\E[@:im=\E1:ip=:\
+       :is=\E[1*q\E[2!t\E[7!t\E[=4;101;119;122l\E[=107;118;207h\E)1\E[1Q\EW\E[!y\E[!z\E>\E[0\0720\07232!r\E[0*w\E[w\E2\r\n\E[2;27!t:\
+       :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:kA=\E^C\r:kD=\E^B\r:\
+       :kI=\E^A\r:kS=\E^D\r:kb=^H:kd=\E[B:ke=\E[!z\E[0;2u:\
+       :kh=\E[H:kl=\E[D:kr=\E[C:ks=\E[1!z\E[0;3u:ku=\E[A:\
+       :le=^H:ll=\E[24H:mb=\E[5m:md=\E[1m:me=\E[m:mh=\E[1!{:\
+       :mk=\E8m:mp=\E[99m:mr=\E[7m:nd=\E[C:pf=\E[4i:\
+       :pl=\E[%d;0u#%s#:po=\E[5i:ps=\E[0i:px=\E[%d;1u#%s#:\
+       :rc=\E8:sc=\E7:se=\E[7!{:sf=\n:so=\E[7m:sr=\EM:\
+       :st=\EH:ta=\011:te=\E[w\E2\r\n:\
+       :ti=\E[=4l\E[1;24w\E2\r:ue=\E[4!{:up=\E[A:us=\E[4m:\
+       :ve=\E[=119l:vs=\E[=119h:
+avt-rv-ns|concept avt in reverse video mode/no status line:\
+       :i1=\E[=103l\E[=205h:vb=\E[=205l\E[=205h:tc=avt-ns:
+avt-w-ns|concept avt in 132 column mode/no status line:\
+       :i1=\E[=103h\E[=205l:ti=\E[H\E[1;24;1;132w:tc=avt-ns:
+avt-w-rv-ns|concept avt in 132 column mode/no status line/reverse video:\
+       :i1=\E[=103h\E[=205h:ti=\E[H\E[1;24;1;132w:\
+       :vb=\E[=205l\E[=205h:tc=avt-ns:
+
+avt+s|concept avt status line changes:\
+       :es:hs:\
+       :lm#191:\
+       :ds=\E[0*w:fs=\E[1;1!w:\
+       :i2=\E[2w\E[2!w\E[1;1;1;80w\E[H\E[2*w\E[1!w\E2\r\n:\
+       :te=\E[2w\E2\r\n:ti=\E[2;25w\E2\r:\
+       :ts=\E[2;1!w\E[;%p1%dH\E[2K:
+avt|avt-s|concept-avt|avt w/80 columns:\
+       :tc=avt+s:tc=avt-ns:
+avt-rv|avt-rv-s|avt reverse video w/sl:\
+       :i1=\E[=103l\E[=205h:vb=\E[=205l\E[=205h:tc=avt+s:tc=avt-ns:
+avt-w|avt-w-s|concept avt 132 cols+status:\
+       :i1=\E[=103h\E[=205l:ti=\E[H\E[1;24;1;132w:tc=avt+s:tc=avt-ns:
+avt-w-rv|avt-w-rv-s|avt wide+status+rv:\
+       :i1=\E[=103h\E[=205h:ti=\E[H\E[1;24;1;132w:\
+       :vb=\E[=205l\E[=205h:tc=avt+s:tc=avt-ns:
+
+
+contel300|contel320|c300|Contel Business Systems C-300 or C-320:\
+       :am:in:xo:\
+       :co#80:li#24:sg#1:\
+       :al=\EL:bl=^G:cd=\EJ:ce=\EI:cl=\EK:cm=\EX%+ \EY%+ :\
+       :cr=^M:ct=\E3:dc=\EO:dl=\EM:do=^J:ei=:ho=\EH:ic=\EN:\
+       :im=:ip=:k0=\ERJ:k1=\ERA:k2=\ERB:k3=\ERC:k4=\ERD:\
+       :k5=\ERE:k6=\ERF:k7=\ERG:k8=\ERH:k9=\ERI:kb=^H:le=^H:\
+       :ll=\EH\EA:nd=\EC:se=\E!\200:sf=^J:so=\E!\r:st=\E1:\
+       :up=\EA:vb=\020\002\020\003:
+contel301|contel321|c301|c321|Contel Business Systems C-301 or C-321:\
+       :ei=:ic@:im=:ip@:se=\E!\200:so=\E!\r:vb@:tc=contel300:
+
+
+dg200|data general dasher 200:\
+       :NL:am:bw:\
+       :co#80:li#24:\
+       :bl=^G:ce=^K:cl=^L:cm=\020%r%.%.:cr=^M:do=^Z:ho=^H:\
+       :k0=^^z:k1=^^q:k2=^^r:k3=^^s:k4=^^t:k5=^^u:k6=^^v:\
+       :k7=^^w:k8=^^x:k9=^^y:kd=^Z:kh=^H:kl=^Y:kr=^X:ku=^W:\
+       :l0=f10:le=^Y:nd=^X:nw=^J:se=^^E:sf=^J:so=^^D:ue=^U:\
+       :up=^W:us=^T:
+dg211|Data General d211:\
+       :k0@:k1@:k2@:k3@:k4@:k5@:k6@:k7@:k8@:k9@:kb=^Y:l0@:\
+       :nw=^M^Z:se=00\036E\200/>:sf@:\
+       :so=00\036D\200\200\200\200\200/>:ta=^I:te=^L:\
+       :ti=^L^R:ve=^L:vs=^L^R:tc=dg200:
+
+dg450|dg6134|data general 6134:\
+       :le@:nd=^X:tc=dg200:
+
+dg460-ansi|Data General Dasher 460 in ANSI-mode:\
+       :am:ms:ul:\
+       :co#80:it#8:li#24:\
+       :al=\E[L:cd=\E[J:ce=\E[K:cl=\E[2J:cm=\E[%i%2;%2H:\
+       :dc=\E[P:dl=\E[M:do=\E[B:ei=:ho=\E[H:ic=\E[@:im=:\
+       :is=^^F@:k0=\E[001z:k1=\E[002z:k2=\E[003z:k3=\E[004z:\
+       :k4=\E[005z:k5=\E[006z:k6=\E[007z:k7=\E[008z:\
+       :k8=\E[009z:k9=\E[010z:kb=\E[D:kd=\E[B:kh=\E[H:\
+       :kl=\E[D:kr=\E[C:ku=\E[A:l0=f1:l1=f2:l2=f3:l3=f4:\
+       :l4=f5:l5=f6:l6=f7:l7=f8:l9=f10:le=^H:mb=\E[5m:\
+       :me=\E[m:mh=\E[2m:mr=\E[7m:nd=\E[C:nl=\ED:se=\E[m:\
+       :sf=\E[S:so=\E[7m:sr=\E[T:ta=^I:ue=\E[05:up=\E[A:\
+       :us=\E[4m:
+dg6053|data general 6053:\
+       :am:bs:bw:ul:\
+       :co#80:li#24:\
+       :bl=^G:ce=^K:cl=^L:cm=\020%r%.%.:cr=^M:do=^Z:ho=^H:\
+       :is=^R:k0=^^q:k1=^^r:k2=^^s:k3=^^t:k4=^^u:k5=^^v:\
+       :k6=^^w:k7=^^x:k8=^^y:kb=^Y:kd=^Z:kh=^H:kl=^Y:kr=^X:\
+       :ku=^W:le=^Y:nd=^X:nw=^M^Z:se=\200^^E:\
+       :so=\200\200\200\200\200\036D:ta=^I:te=^L:ti=^L^R:\
+       :ue=^U:up=^W:us=^T:ve=^L:vs=^L^R:
+
+
+cs10|colorscan|Datamedia Color Scan 10:\
+       :ms:\
+       :co#80:li#24:\
+       :bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[J:cm=\E[%i%02;%02H:\
+       :cr=^M:do=^J:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:kd=\E[B:\
+       :kl=\E[D:kr=\E[C:ku=\E[A:le=^H:nd=\E[C:se=\E[m:sf=^J:\
+       :so=\E[7m:ue=\E[m:up=\E[A:us=\E[4m:
+cs10-w|Datamedia Color Scan 10 with 132 columns:\
+       :co#132:\
+       :cm=\E[%i%02;%03H:tc=cs10:
+
+dm1520|dm1521|datamedia 1520:\
+       :am:xn:\
+       :co#80:it#8:li#24:\
+       :bl=^G:cd=^K:ce=^]:cl=^L:cm=\036%r%+ %+ :cr=^M:do=^J:\
+       :ho=^Y:kd=^J:kh=^Y:kl=^H:kr=^\:ku=^_:le=^H:nd=^\:\
+       :sf=^J:ta=^I:up=^_:
+dm2500|datamedia2500|datamedia 2500:\
+       :nc:\
+       :co#80:li#24:\
+       :al=\020\n\030\035\030\035:bl=^G:ce=^W:cl=^^^^\177:\
+       :cm=\014%r%n%.%.:dc=\020\010\030\035:\
+       :dl=\020\032\030\035:dm=^P:do=^J:ed=^X^]:\
+       :ei=\377\377\030\035:ho=^B:ic=\020\034\030\035:im=^P:\
+       :le=^H:nd=^\:pc=\377:se=^X^]:sf=^J:so=^N:up=^Z:
+dmchat|dmchat version of datamedia 2500:\
+       :km:\
+       :al=1*\020\n\030\035\030\035:dl=2\020\032\030\035:tc=dm2500:
+dm3025|datamedia 3025a:\
+       :km:\
+       :co#80:it#8:li#24:\
+       :al=\EP\n\EQ:bl=^G:cd=\EJ:ce=\EK:cl=\EM:\
+       :cm=\EY%r%+ %+ :cr=^M:dc=\010:dl=\EP\EA\EQ:dm=\EP:\
+       :do=^J:ed=\EQ:ei=\EQ:ho=\EH:im=\EP:ip=:is=\EQ\EU\EV:\
+       :le=^H:nd=\EC:se=\EO0:sf=^J:so=\EO1:ta=^I:up=\EA:
+dm3045|datamedia 3045a:\
+       :am:eo:km@:ul:xn:\
+       :al@:dc=\EB:dl@:dm@:ed@:ei=\EP:is=\EU\EV:k0=\Ey\r:\
+       :k1=\Ep\r:k2=\Eq\r:k3=\Er\r:k4=\Es\r:k5=\Et\r:\
+       :k6=\Eu\r:k7=\Ev\r:k8=\Ew\r:k9=\Ex\r:kh=\EH:kr=\EC:\
+       :ku=\EA:pc=\177:se@:so@:tc=dm3025:
+dm80|dmdt80|dt80|datamedia dt80/1:\
+       :cd=\E[J:ce=\E[K:cl=\E[2J\E[H:cm=%i\E[%d;%dH:do=^J:\
+       :ho=\E[H:nd=\E[C:pf=\E[4i:po=\E[5i:ps=\E[0i:se=\E[m:\
+       :so=\E[7m:sr=\EM:ue=\E[m:up=\E[A:us=\E[4m:tc=vt100:
+dm80w|dmdt80w|dt80w|datamedia dt80/1 in 132 char mode:\
+       :co#132:\
+       :cd=20\E[0J:ce=20\E[0K:cl=50\E[H\E[2J:\
+       :cm=5\E[%i%d;%dH:do=^J:up=5\E[A:tc=dm80:
+dtx-sas|dt80-sas|Datamedia DT803/DTX for SAS usage:\
+       :am:bw:\
+       :co#80:li#24:\
+       :ae=\EG:al=\EL:as=\EF:bl=^G:cd=^K:ce=^]:cl=^L:\
+       :cm=\E=%r%+ %+ :cr=^M:\
+       :..cs=\E=%p1%' '%+%c%' '%c\E#1\E=%p2%' '%+%c%' '%c\E#2:\
+       :ct=\E'0:dl=\EM:do=\EB:ff=^L:ho=^Y:\
+       :is=\E)0\E<\EP\E'0\E$2:kC=^L:kE=^]:kS=^K:kd=^J:kh=^Y:\
+       :kl=^H:kr=^\:ku=^_:le=^H:me=^X:mr=\E$2\004:nd=^\:\
+       :pf=^O:po=^N:se=^X:sf=\EB:so=\E$2\004:sr=\EI:st=\E'1:\
+       :ta=^I:up=^_:
+
+
+falco|ts1|ts-1|falco ts-1:\
+       :am:\
+       :co#80:it#8:li#24:\
+       :al=\EE:bl=^G:cd=\EY:ce=\ET\EG0\010:cl=\E*:\
+       :cm=\E=%+ %+ :cr=^M:dc=\EW:dl=\ER:do=^J:ei=\Er:ho=^^:\
+       :im=\Eq:is=\Eu\E3:k0=^A0\r:kd=^J:kl=^H:kr=^L:ku=^K:\
+       :le=^H:nd=^L:se=\Eg0:sf=^J:so=\Eg1:ta=^I:ue=\Eg0:\
+       :up=^K:us=\Eg1:
+falco-p|ts1p|ts-1p|falco ts-1 with paging option:\
+       :am:da:db:mi:ms:ul:\
+       :co#80:it#8:li#24:\
+       :al=\EE:bl=^G:bt=\EI:cd=\EY:ce=\ET\EG0\010\Eg0:\
+       :cl=\E*:cm=\E=%+ %+ :cr=^M:dc=\EW:dl=\ER:do=\E[B:\
+       :ei=\Er:im=\Eq:is=\EZ\E3\E_c:kd=\E[B:kh=\E[H:kl=\E[D:\
+       :kr=\E[C:ku=\E[A:le=^H:nd=\E[C:se=\Eg0:sf=^J:so=\Eg4:\
+       :ta=^I:te=\E_b:ti=\E_d:ue=\Eg0:up=\E[A:us=\Eg1:
+ts100|ts100-sp|falco ts100-sp:\
+       :am:mi:ms:xn:xo:\
+       :co#80:it#8:li#24:vt#3:\
+       :@8=\EOM:DO=\E[%dB:K1=\EOq:K2=\EOr:K3=\EOs:K4=\EOp:\
+       :K5=\EOn:LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:SA=\E[?7h:\
+       :UP=\E[%dA:\
+       :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~:\
+       :ae=^O:al=\E~E:as=^N:bl=^G:cb=\E[1K:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:\
+       :ct=\E[3g:dc=\E~W:dl=\E~R:do=^J:eA=\E(B\E)0:ei=:\
+       :ho=\E[H:i1=\E~)\E~ea:ic=\E~Q:im=:k0=\EOy:k1=\EOP:\
+       :k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOt:k6=\EOu:k7=\EOv:\
+       :k8=\EOl:k9=\EOw:k;=\EOx:kb=^H:kd=\EOB:ke=\E[?1l\E>:\
+       :kl=\EOD:kr=\EOC:ks=\E[?1h\E=:ku=\EOA:le=^H:mb=\E[5m:\
+       :md=\E[1m:me=\E[m\017:mr=\E[7m:nd=\E[C:\
+       :r2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:rc=\E8:\
+       :..sa=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;:\
+       :sc=\E7:se=\E[m:sf=^J:so=\E[1;7m:sr=\EM:st=\EH:ta=^I:\
+       :ue=\E[m:up=\E[A:us=\E[4m:
+ts100-ctxt|falco ts-100 saving context:\
+       :te=\E~_b:ti=\E~_d\E[2J:tc=ts100:
+
+
+
+beacon|FCG Beacon System:\
+       :am:da:db:\
+       :co#80:li#32:\
+       :al=\EE:bl=\ESTART\r\E37\r\EEND\r:ce=\ET:cl=\EZ:\
+       :cm=\E=%+ %+ :cr=^M:dc=\EW:dl=\ER:do=^J:ei=:ho=\EH:\
+       :ic=\EQ:im=:le=^H:mb=\ESTART\r\E61\0541\r\EEND\r:\
+       :me=\ESTART\r\E78\r\E70\0540\r\EEND\r:\
+       :mr=\ESTART\r\E59\0541\r\EEND\r:nd=\EV:\
+       :se=\ESTART\r\E70\0540\r\EEND\r:sf=^J:\
+       :so=\ESTART\r\E70\0546\r\EEND\r:\
+       :ti=\ESTART\r\E2\0540\r\E12\r\EEND\r:\
+       :ue=\ESTART\r\E60\0540\r\EEND\r:up=\EU:\
+       :us=\ESTART\r\E60\0541\r\EEND\r:
+
+
+f1720|f1720a|fluke 1720A:\
+       :xt:\
+       :co#80:li#16:sg#1:ug#1:\
+       :bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:\
+       :cr=^M:do=\E[B:is=\E[H\E[2J:kd=^]:kl=^_:kr=^^:ku=^\:\
+       :le=^H:nd=\E[C:se=\E[m:sf=\ED:so=\E[7m:sr=\EM:\
+       :ue=\E[m:up=\E[A:us=\E[4m:
+
+
+f100|freedom|freedom100|freedom model 100:\
+       :am:bw:hs:mi:ms:xo:\
+       :co#80:li#24:\
+       :ae=\E$:al=\EE:as=\E%:bl=^G:bt=\EI:cd=\EY:ce=\ET:\
+       :ch=\E]%+ :cl=^Z:cm=\E=%+ %+ :cr=^M:ct=\E3:cv=\E[%+ :\
+       :dc=\EW:dl=\ER:do=^J:ds=\Eg\Ef\r:ei=\Er:fs=^M:ho=^^:\
+       :im=\Eq:ip=:is=\Eg\Ef\r\Ed:k1=^A@\r:k2=^AA\r:\
+       :k3=^AB\r:k4=^AC\r:k5=^AD\r:k6=^AE\r:k7=^AF\r:\
+       :k8=^AG\r:k9=^AH\r:k;=^AI\r:kB=\EI:kb=^H:kd=^V:kh=^^:\
+       :kl=^H:kr=^L:ku=^K:le=^H:nd=^L:se=\EG0:sf=^J:so=\EG4:\
+       :sr=\Ej:st=\E1:ta=^I:ts=\Eg\Ef:ue=\EG0:up=^K:us=\EG8:\
+       :vb=\Eb\Ed:
+f100-rv|freedom-rv|freedom 100 in reverse video:\
+       :is=\Eg\Ef\r\Eb:vb=\Ed\Eb:tc=f100:
+f110|freedom110|Liberty Freedom 110:\
+       :bw@:es:\
+       :it#8:ws#80:\
+       :ae=\E%%:al=\EE:as=\E$:dl=\ER:do=^V:ds=\Ef\r:\
+       :ei=\Er\EO:im=\EO\Eq:ip@:is@:k0=^AI\r:k;@:kA=\EE:\
+       :kC=^^:kD=\EW:kE=\ET:kI=\EQ:kL=\ER:kS=\EY:mb=\EG2:\
+       :md=\EG0:me=\EG0:mh=\EG@:mk=\EG1:mr=\EG4:pf=\Ea:\
+       :po=\E`:so=\EG<:sr=\EJ:ts=\Ef:vb=\Eb\Ed:ve=\E.2:\
+       :vi=\E.1:vs=\E.2:tc=f100:
+f110-14|Liberty Freedom 110 14inch:\
+       :dc@:tc=f110:
+f110-w|Liberty Freedom 110 - 132 cols:\
+       :co#132:tc=f110:
+f110-14w|Liberty Freedom 110 14in/132 cols:\
+       :co#132:\
+       :dc@:tc=f110:
+f200|freedom200|Liberty Freedom 200:\
+       :am:es:hs:mi:ms:xo:\
+       :co#80:it#8:li#24:ws#80:\
+       :ae=\E%%:al=\EE:as=\E$:bl=^G:bt=\EI:cd=\EY:ce=\ET:\
+       :ch=\E]%+ :cl=^Z:cm=\E=%+ %+ :cr=^M:cs=\Em0%+ %+ :\
+       :ct=\E3:cv=\E[%+ :dc=\EW:dl=\ER:do=^V:ds=\Ef\r:\
+       :ei=\Er:fs=^M:ho=^^:im=\Eq:k0=^AI\r:k1=^A@\r:\
+       :k2=^AA\r:k3=^AB\r:k4=^AC\r:k5=^AD\r:k6=^AE\r:\
+       :k7=^AF\r:k8=^AG\r:k9=^AH\r:kA=\EE:kC=^^:kD=\EW:\
+       :kE=\ET:kI=\EQ:kL=\ER:kS=\EY:kb=^H:kd=^V:kl=^H:kr=^L:\
+       :ku=^K:le=^H:mb=\EG2:md=\EG0:me=\EG0:mh=\EG@:mk=\EG1:\
+       :mr=\EG4:nd=^L:pf=\Ea:po=\E`:se=\EG0:sf=^J:so=\EG<:\
+       :sr=\EJ:st=\E1:ts=\Ef:ue=\EG0:up=^K:us=\EG8:\
+       :vb=\Eo\En:ve=\E.1:vi=\E.0:vs=\E.1:
+f200-w|Liberty Freedom 200 - 132 cols:\
+       :co#132:tc=f200:
+f200vi|Liberty Freedom 200 for vi:\
+       :kd=^J:vb=\Eb\Ed:tc=f200:
+f200vi-w|Liberty Freedom 200 - 132 cols for vi:\
+       :co#132:tc=f200vi:
+
+go140|graphon go-140:\
+       :co#80:it#8:li#24:\
+       :RA=\E[?7l:SA=\E[?7h:al=\E[L:cd=10\E[J:ce=\E[K:\
+       :cl=10\E[H\E[2J:cm=\E[%i%2;%2H:dc=\E[P:dl=\E[M:\
+       :ei=\E[4l:if=/usr/share/tabset/vt100:im=\E[4h:\
+       :is=\E<\E=\E[?3l\E[?7l\E(B\E[J\E7\E[;r\E8\E[m\E[q:\
+       :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:kd=\EOB:\
+       :ke=\E[?1l\E>:kh=\E[H:kl=\EOD:kr=\EOC:ks=\E[?1h\E=:\
+       :ku=\EOA:le=^H:nd=\E[C:se=\E[m:so=\E[7m:sr=\EM:ta=^I:\
+       :ue=\E[m:up=\E[A:us=\E[4m:
+go140w|graphon go-140 in 132 column mode:\
+       :am:\
+       :co#132:\
+       :is=\E<\E=\E[?3h\E[?7h\E(B\E[J\E7\E[;r\E8\E[m\E[q:tc=go140:
+go225|go-225|Graphon 225:\
+       :am:mi:xn:\
+       :co#80:it#8:li#25:vt#3:\
+       :RA=\E[?7l:SA=\E[?7h:al=\E[L:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cs=\E[%i%d;%dr:dc=\E[P:\
+       :dl=\E[M:do=^J:ei=\E[4l:ho=\E[H:im=\E[4h:\
+       :is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:k1=\EOP:\
+       :k2=\EOQ:k3=\EOR:k4=\EOS:kb=^H:kd=\E[B:ke=\E>:\
+       :kh=\E[H:kl=\E[D:kr=\E[C:ks=\E=:ku=\E[A:le=^H:\
+       :mb=\E[5m:md=\E[1m:me=\E[m:mr=\E[7m:nd=\E[C:\
+       :r1=\E[!p\E[?7h\E[2;1;1#w:rc=\E8:\
+       :rf=/usr/share/tabset/vt100:sc=\E7:se=\E[27m:sf=\ED:\
+       :so=\E[7m:sr=\EM:ta=^I:te=\E[!p\E[?7h\E[2;1;1#w:\
+       :ti=\E[2;0#w\E[1;25r:ue=\E[24m:up=\E[A:us=\E[4m:
+
+
+sb1|beehive superbee:\
+       :am:bw:da:db:mi:ul:xb:\
+       :co#80:li#25:sg#1:ug#1:\
+       :al=\EN\EL\EQ                                                                                \EP \EO\ER\EA:\
+       :bl=^G:bt=\E`:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EF%r%03%03:\
+       :cr=\r:ct=\E3:dc=\EP:dl=\EM:do=^J:ei=\ER:ho=\EH:\
+       :im=\EQ\EO:is=\EE\EX\EZ\EO\Eb\Eg\ER:k0=\E2:k1=\Ep:\
+       :k2=\Eq:k3=\Er:k4=\Es:k5=\Et:k6=\Eu:k7=\Ev:k8=\Ew:\
+       :k9=\E1:kE=\EK:kI=\EQ\EO:kL=\EM:kM=\ER:kS=\EJ:kb=^_:\
+       :kd=\EB:kh=\EH:kl=\ED:kr=\EC:ku=\EA:l0=TAB CLEAR:\
+       :l9=TAB SET:le=^H:nd=\EC:se=\E_3:sf=^J:so=\E_1:\
+       :st=\E1:ta=^I:ti=\EO:ue=\E_3:up=\EA:us=\E_0:
+sbi|superbee|beehive superbee at Indiana U.:\
+       :xb:\
+       :al=1\EN\EL\EQ \EP \EO\ER\EA:cr=\r:tc=sb1:
+superbee-xsb|beehive super bee:\
+       :am:da:db:xb:\
+       :co#80:it#8:li#25:\
+       :cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EF%r%3%3:cr=\r:ct=\E3:\
+       :dc=\EP:dl=\EM:do=^J:ho=\EH:is=\EH\EJ:k1=\Ep:k2=\Eq:\
+       :k3=\Er:k4=\Es:k5=\Et:k6=\Eu:k7=\Ev:k8=\Ew:kd=\EB:\
+       :kh=\EH:kl=\ED:kr=\EC:ku=\EA:le=^H:nd=\EC:se=\E_3:\
+       :sf=\n\200\200\200\n\200\200\200\EA\EK\200\200\200\ET\ET:\
+       :so=\E_1:st=\E1:ta=^I:up=\EA:ve=^J:
+superbeeic|super bee with insert char:\
+       :ei=\ER:ic=:im=\EQ:tc=superbee-xsb:
+sb2|sb3|fixed superbee:\
+       :xb@:tc=superbee:
+
+
+beehive|bee|harris beehive:\
+       :am:mi:\
+       :co#80:li#24:\
+       :al=\EL:bt=\E>:cd=\EJ:ce=\EK:cl=\EE:cm=\EF%+ %+ :\
+       :dc=\EP:dl=\EM:do=\EB:ei=\E@:ho=\EH:im=\EQ:kA=\EL:\
+       :kB=\E>:kC=\EE:kD=\EP:kE=\EK:kI=\EQ:kL=\EM:kM=\E@:\
+       :kb=^H:kd=\EB:kh=\EH:kl=\ED:kr=\EC:ku=\EA:le=^H:\
+       :nd=\EC:se=\Ed@:so=\EdP:ue=\Ed@:up=\EA:us=\Ed`:
+beehive3|bh3m|beehiveIIIm|harris beehive 3m:\
+       :am:\
+       :co#80:it#8:li#20:\
+       :al=\023:bl=^G:cd=^R:ce=^P:cl=^E^R:cr=^M:dl=\021:\
+       :do=^J:ho=^E:if=/usr/share/tabset/beehive:le=^H:\
+       :ll=^E^K:nd=^L:se= ^_:sf=^J:so=^] :ta=^I:up=^K:
+beehive4|bh4|beehive 4:\
+       :am:\
+       :co#80:li#24:\
+       :bl=^G:cd=\EJ:ce=\EK:cl=\EE:cr=^M:do=^J:ho=\EH:\
+       :le=\ED:nd=\EC:sf=^J:up=\EA:
+microb|microbee|micro bee series:\
+       :am:\
+       :co#80:it#8:li#24:\
+       :bl=^G:cd=\EJ:ce=\EK:cl=\EE:cm=\EF%+ %+ :cr=^M:do=^J:\
+       :k1=\Ep:k2=\Eq:k3=\Er:k4=\Es:k5=\Et:k6=\Eu:k7=\Ev:\
+       :k8=\Ew:k9=\Ex:kd=\EB:kh=\EH:kl=\ED:kr=\EC:ku=\EA:\
+       :le=^H:nd=\EC:se=\Ed@ :sf=^J:so= \EdP:ta=^I:ue=\Ed@:\
+       :up=\EA:us=\Ed`:
+
+ha8675|harris 8675:\
+       :F1=^W:F2=\ER:F3=\EE:F4=\EI:F5=\Ei:F6=\Eg:\
+       :is=\ES\E#\E*\Eh\Em\E?\E1\E9\E@\EX\EU:k1=^F:k2=^P:\
+       :k3=^N:k4=^V:k5=^J:k6=^T:k7=^H:k8=\177:k9=\Ee:k;=\Ed:tc=bee:
+ha8686|harris 8686:\
+       :F1=\EW:F2=\002\E{\003:F3=\002\E|\003:F4=\002\E}\003:\
+       :F5=\002\E~\003:F6=\002\E\177\003:\
+       :is=\ES\E#\E*\Eh\Em\E?\E1\E9\E@\EX\EU\E"*Z01\E"8F35021B7C83#\E"8F45021B7D83#\E"8F55021B7E83#\E"8F65021B7F83#\E"8F75021B7383#\E"8F851BD7#\E"8F95021B7083#\E"8FA5021B7183#\E"8FB5021B7283#:\
+       :k1=\002\Ep\003:k2=\002\Eq\003:k3=\002\Er\003:\
+       :k4=\002\Es\003:k5=\E3:k6=\EI:k7=\ER:k8=\EJ:k9=\E(:\
+       :k;=\Ej:tc=bee:
+
+
+hz1000|hazeltine 1000:\
+       :co#80:li#12:\
+       :bl=^G:cl=^L:cr=^M:do=^J:ho=^K:le=^H:nd= :sf=^J:
+hz1420|hazeltine 1420:\
+       :am:\
+       :co#80:li#24:\
+       :al=\E^Z:bl=^G:cd=\E^X:ce=\E^O:cl=\E^\:\
+       :cm=\E\021%r%.%+ :cr=^M:dl=\E^S:do=^J:le=^H:nd=^P:\
+       :se=\E^Y:sf=^J:so=\E^_:ta=^N:up=\E^L:
+hz1500|hazeltine 1500:\
+       :am:hz:\
+       :co#80:li#24:\
+       :al=~\032:bl=^G:cd=~\030:ce=~^O:cl=~^\:\
+       :cm=~\021%r%>^^ %+`%+`:cr=^M:dl=~\023:do=~^K:ho=~^R:\
+       :kd=^J:kh=~^R:kl=^H:kr=^P:ku=~^L:le=^H:nd=^P:se=~^Y:\
+       :sf=^J:so=~^_:up=~^L:
+hz1510|hazeltine 1510:\
+       :am:\
+       :co#80:li#24:\
+       :al=\E^Z:bl=^G:cd=\E^X:ce=\E^O:cl=\E^\:\
+       :cm=\E\021%r%.%.:cr=^M:dl=\E^S:do=\E^K:le=^H:nd=^P:\
+       :sf=^J:up=\E^L:
+hz1520|hazeltine 1520:\
+       :am:hz:\
+       :co#80:li#24:\
+       :al=~^Z:bl=^G:cd=~^X:ce=~^O:cl=~^\:cm=~\021%r%.%.:\
+       :cr=^M:dl=~^S:do=~^K:ho=~^R:le=^H:nd=^P:se=~^Y:sf=^J:\
+       :so=~^_:up=~^L:
+hz1552|hazeltine 1552:\
+       :al=\EE:dl=\EO:do=^J:k1=\EP:k2=\EQ:k3=\ER:l1=blue:\
+       :l2=red:l3=green:tc=vt52:
+hz1552-rv|hazeltine 1552 reverse video:\
+       :do=^J:se=\ET:so=\ES:tc=hz1552:
+hz2000|hazeltine 2000:\
+       :am:nc:\
+       :co#74:li#27:\
+       :al=~\032:bl=^G:cl=~\034:cm=~\021%r%.%.:dl=~\023:\
+       :do=^J:ho=~^R:le=^H:pc=\177:sf=^J:
+esprit|Hazeltine Esprit I:\
+       :am:bw:\
+       :co#80:li#24:\
+       :al=\E^Z:bl=^G:bt=\E^T:cd=\E^W:ce=\E^O:cl=\E^\:\
+       :cm=\E\021%r%.%.:cr=^M:dl=\E^S:do=\E^K:ho=\E^R:\
+       :is=\E?:k0=^B0^J:k1=^B1^J:k2=^B2^J:k3=^B3^J:k4=^B4^J:\
+       :k5=^B5^J:k6=^B6^J:k7=^B7^J:k8=^B8^J:k9=^B9^J:kb=^H:\
+       :kd=\E^K:ke=\E>:kh=\E^R:kl=^H:kr=^P:ks=\E<:ku=\E^L:\
+       :l0=0:l1=1:l2=2:l3=3:l4=4:l5=5:l6=6:l7=7:l8=8:l9=9:\
+       :le=^H:nd=^P:se=\E^Y:sf=^J:so=\E^_:up=\E^L:
+esprit-am|hazeltine esprit auto-margin:\
+       :am:tc=esprit:
+
+
+ibm327x|line mode IBM 3270 style:\
+       :gn:\
+       :ce=^M:cl=^M^J:ho=^M:
+
+ibm3101|i3101|IBM 3101-10:\
+       :am:xo:\
+       :co#80:li#24:\
+       :bl=^G:cd=\EJ:ce=\EI:cl=\EK:cm=\EY%+ %+ :cr=^M:\
+       :ct=\E1:do=^J:ho=\EH:if=/usr/share/tabset/ibm3101:\
+       :kb=^H:kd=\EB:kl=\ED:kr=\EC:ku=\EA:le=^H:nd=\EC:\
+       :nw=^M^J:sf=^J:st=\E0:ta=^I:up=\EA:
+ibm3151|i3151|IBM 3151:\
+       :me=\E4@:\
+       :..sa=\E4%{64}%?%p1%{0}%>%p1%{4}%<%&%t%{8}%|%;%?%p1%{7}%=%t%{16}%|%;%?%p2%t%{1}%|%;%?%p3%t%{4}%|%;%?%p4%t%{2}%|%;%c:\
+       :se=\E4@:so=\E4A:ue=\E4@:us=\E4B:tc=ibm3163:
+ibm3161|ibm3163|wy60-316X|wyse60-316X|IBM 3161/3163 display:\
+       :am:mi:ms:\
+       :co#80:it#8:li#24:\
+       :F1=\Ek\r:F2=\El\r:F3=\E!a\r:F4=\E!b\r:F5=\E!c\r:\
+       :F6=\E!d\r:F7=\E!e\r:F8=\E!f\r:F9=\E!g\r:FA=\E!h\r:\
+       :FB=\E!i\r:FC=\E!j\r:FD=\E!k\r:FE=\E!l\r:\
+       :ac=l\354q\361k\353x\370j\352m\355w\367u\365v\366t\364n\356:\
+       :bl=^G:cd=\EJ:ce=\EI:cl=\EH\EJ:cm=\EY%+ %+ :cr=^M:\
+       :dc=\EQ:dl=\EO:do=\EB:ho=\EH:k1=\Ea\r:k2=\Eb\r:\
+       :k3=\Ec\r:k4=\Ed\r:k5=\Ee\r:k6=\Ef\r:k7=\Eg\r:\
+       :k8=\Eh\r:k9=\Ei\r:k;=\Ej\r:kA=\EN:kB=\E2:kC=\EL\r:\
+       :kD=\EQ:kE=\EI:kI=\EP \010:kL=\EO:kS=\EJ:kT=\E0:\
+       :ka=\E 1:kb=^H:kd=\EB:kh=\EH:kl=\ED:kr=\EC:kt=\E1:\
+       :ku=\EA:le=\ED:mb=\E4D:md=\E4H:me=\E4@\E<@:mk=\E4P:\
+       :mr=\E4A:nd=\EC:\
+       :..sa=\E4%'@'%?%p1%t%'A'%|%;\n%?%p2%t%'B'%|%;\n%?%p3%t%'A'%|%;\n%?%p4%t%'D'%|%;\n%?%p5%t%'@'%|%;\n%?%p6%t%'H'%|%;\n%?%p7%t%'P'%|%;%c\n%?%p9%t\E>A%e\E<@%;:\
+       :se=\E4@:sf=^J:so=\E4A:te=\E>A:ti=\E>A:ue=\E4@:\
+       :up=\EA:us=\E4B:
+
+ibm3164|i3164|IBM 3164:\
+       :mb=\E4D:md=\E4H:me=\E4@:\
+       :..sa=\E4%{32}%?%p2%t%{1}%|%;%?%p3%t%{4}%|%;%?%p4%t%{2}%|%;%c%{39}%p1%-%c%{64}%c:tc=ibm3163:
+
+ibmaed|IBM Experimental display:\
+       :am:eo:ms:\
+       :co#80:it#8:li#52:\
+       :al=\EN:cd=\EJ:ce=\EI:cl=\EH\EK:cm=\EY%+ %+ :dc=\EQ:\
+       :dl=\EO:do=\EB:ei=:ho=\EH:ic=\EP:im=:kb=^H:kd=\EB:\
+       :kl=\ED:kr=\EC:ku=\EA:le=^H:nd=\EC:se=\E0:so=\E0:\
+       :ta=^I:up=\EA:vb=\EG:
+ibm-apl|apl|IBM apl terminal simulator:\
+       :li#25:tc=dm1520:
+ibmmono|ibm5151|IBM workstation monochrome:\
+       :es:hs:\
+       :al=\EL:dl=\EM:ds=\Ej\EY8 \EI\Ek:fs=\Ek:k0=\E<:\
+       :k1=\ES:k2=\ET:k3=\EU:k4=\EV:k5=\EW:k6=\EP:k7=\EQ:\
+       :k8=\ER:k9=\EY:kF=\EE:kI=\200:kN=\EE:kP=\Eg:kR=\EG:\
+       :kb=^H:kh=\EH:l0=f10:md=\EZ:me=\Ew\Eq\Ez\EB:\
+       :mk=\EF\Ef0;\Eb0;:mr=\Ep:se=\Ez:so=\EZ:sr=\EA:\
+       :ts=\Ej\EY8%+ \Eo:ue=\Ew:us=\EW:tc=ibm3101:
+ibmega|ibm5154|IBM Enhanced Color Display:\
+       :cr=^M:do=^J:kb=^H:kd=^J:kl=^H:nw=^M^J:sf=^J:ta=^I:tc=ibmmono:
+ibmega-c|ibm5154-c|IBM Enhanced Color Display:\
+       :se=\EB:so=\EF\Ef3;:ue=\EB:us=\EF\Ef2;:tc=ibmmono:
+ibmvga-c|IBM VGA display color termcap:\
+       :cr=^M:do=^J:kb=^H:kd=^J:kl=^H:nw=^M^J:sf=^J:ta=^I:tc=ibmega-c:
+ibmvga|IBM VGA display:\
+       :cr=^M:do=^J:kb=^H:kd=^J:kl=^H:nw=^M^J:sf=^J:ta=^I:tc=ibmega:
+rtpc|ibmapa16|ibm6155|IBM 6155 Extended Monochrome Graphics Display:\
+       :li#32:\
+       :ds=\Ej\EY@ \EI\Ek:ts=\Ej\EY@%+ \Eo:tc=ibmmono:
+ibmapa8c|ibmapa8|ibm6154|ibm6153|IBM 6153/4 Advanced Graphics Display:\
+       :li#31:\
+       :ds=\Ej\EY? \EI\Ek:ts=\Ej\EY?%+ \Eo:tc=ibmmono:
+ibmapa8c-c|ibm6154-c|IBM 6154 Advanced Color Graphics Display:\
+       :li#31:\
+       :ds=\Ej\EY? \EI\Ek:mh=\EF\Ef7;:ts=\Ej\EY?%+ \Eo:tc=ibmega-c:
+ibm8512|ibm8513|hft-c|IBM High Function Terminal:\
+       :am:mi:ms:\
+       :co#80:it#8:li#25:\
+       :AL=\E[%dL:DL=\E[%dM:RA=\E[?7l:SA=\E[?7h:ae=^O:\
+       :al=\E[L:as=^N:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
+       :cm=\E[%i%d;%dH:dl=\E[M:dm=\E[4h:do=^J:ec=\E[%dX:\
+       :ed=\E[4l:ei=\E[4l:ho=\E[H:im=\E[4h:\
+       :is=\Eb\E[m\017\E[?7h:k0=\E[010q:k1=\E[001q:\
+       :k2=\E[002q:k3=\E[003q:k4=\E[004q:k5=\E[005q:\
+       :k6=\E[006q:k7=\E[007q:k8=\E[008q:k9=\E[009q:kd=\E[B:\
+       :kh=\E[H:ku=\E[A:le=\E[D:mb=\E[5m:md=\E[1m:me=\E[m:\
+       :mr=\E[7m:nd=\E[C:r1=\Eb\E[m\017\E[?7h\E[H\E[J:\
+       :rc=\E[u:sc=\E[s:se=\E[m:so=\E[7m:te=\E[20h:\
+       :ti=\E[20;4l\E[?7h\Eb:ue=\E[m:up=\E[A:us=\E[4m:
+hft|AIWS High Function Terminal:\
+       :am:xo:\
+       :co#80:li#25:\
+       :al=\E[L:bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:\
+       :cm=\E[%i%d;%dH:cr=^M:dc=\E[P:dl=\E[M:do=^J:ei=\E6:\
+       :ho=\E[H:ic=\E[@:im=\E6:k1=\E[001q:k2=\E[002q:\
+       :k3=\E[003q:k4=\E[004q:k5=\E[005q:k6=\E[006q:\
+       :k7=\E[007q:k8=\E[008q:k9=\E[009q:kN=\E[153q:\
+       :kP=\E[159q:ka=\E[010q:kb=^H:kd=\E[B:kh=\E[H:kl=\E[D:\
+       :kr=\E[C:ku=\E[A:le=^H:mb=\E[5m:md=\E[1m:me=\E[m:\
+       :mk=\E[8m:mr=\E[7m:nd=\E[C:se=\E[m:sf=^J:so=\E[7m:\
+       :ta=^I:ue=\E[m:up=\E[A:us=\E[4m:
+ibm-system1|system1|ibm system/1 computer:\
+       :am:xt:\
+       :co#80:li#24:\
+       :bl=^G:cl=^Z:cm=\005%+ %+ :ho=^K:le=^H:nd=^\:sf=^J:\
+       :up=^^:
+
+ibm5081|ibmmpel|IBM 5081 1024x1024 256/4096 color display:\
+       :es:hs:\
+       :li#33:\
+       :ds=\Ej\EYA \EI\Ek:fs=\Ek:ts=\Ej\EYA%+ \Eo:tc=ibmmono:
+ibm5081-c|ibmmpel-c|IBM 5081 1024x1024 256/4096 enhanced color display:\
+       :es:hs:\
+       :li#33:\
+       :ds=\Ej\EYA \EI\Ek:fs=\Ek:ts=\Ej\EYA%+ \Eo:tc=ibmega-c:
+ibm8514|IBM 8514 color display:\
+       :es:hs:\
+       :li#41:\
+       :cr=^M:do=^J:ds=\Ej\EYI \EI\Ek:fs=\Ek:kb=^H:kd=^J:\
+       :kl=^H:nw=^M^J:sf=^J:ta=^I:ts=\Ej\EYI%+ \Eo:tc=ibmega:
+ibm8514-c|IBM 8514 color display:\
+       :es:hs:\
+       :li#41:\
+       :cr=^M:do=^J:ds=\Ej\EYI \EI\Ek:fs=\Ek:kb=^H:kd=^J:\
+       :kl=^H:nw=^M^J:sf=^J:ta=^I:ts=\Ej\EYI%+ \Eo:tc=ibmega-c:
+
+aixterm-m|IBM AIXterm Monochrome Terminal Emulator:\
+       :es:hs:\
+       :ac=llqqkkxxjjmmwwuuvvttnn:ds=\E[?E:fs=\E[?F:\
+       :md=\E[1m:me=\E[0;10m\E(B:s0=\E(B:s1=\E(0:\
+       :..sa=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m:\
+       :sr@:ts=\E[?%p1%dT:tc=ibm6153:
+aixterm-m-old|IBM AIXterm Monochrome Terminal Emulator:\
+       :es:hs:\
+       :ds=\E[?E:fs=\E[?F:md=\E[1m:\
+       :..sa=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m:\
+       :sr@:ts=\E[?%p1%dT:tc=ibm6153:
+jaixterm-m|IBM Kanji AIXterm Monochrome Terminal Emulator:\
+       :ac@:tc=aixterm-m:
+
+
+i100|gt100|gt100a|General Terminal 100A (formerly Infoton 100):\
+       :am:\
+       :co#80:li#24:\
+       :al=\EL:bl=^G:cd=\EJ:ce=\EK:cl=^L:cm=\Ef%r%+ %+ :\
+       :cr=^M:dl=\EM:do=^J:ho=\EH:le=^H:nd=\EC:se=\Ea:sf=^J:\
+       :so=\Eb:up=\EA:vb=\Eb\Ea:
+i400|infoton 400:\
+       :am:\
+       :co#80:li#25:\
+       :al=\E[L:bl=^G:ce=\E[N:cl=\E[2J:cm=%i\E[%3;%3H:cr=^M:\
+       :dc=\E[4h\E[2Q\E[P\E[4l\E[0Q:dl=\E[M:do=^J:\
+       :ei=\E[4l\E[0Q:im=\E[4h\E[2Q:le=^H:nd=\E[C:sf=^J:\
+       :up=\E[A:
+addrinfo:\
+       :am:\
+       :co#80:li#24:\
+       :bl=^G:cd=^K:cl=^L:..cm=\037%p1%{1}%-%c%p2%{1}%-%c:\
+       :cr=^M:do=^J:ho=^H:le=^Z:ll=^H^\:nd=^Y:sf=^J:up=^\:
+infoton:\
+       :am:\
+       :co#80:li#24:\
+       :bl=^G:cd=^K:cl=^L:cr=^M:do=^J:le=^Z:ll=^H^\:nd=^Y:\
+       :sf=^J:up=^\:
+
+
+intext|Interactive Systems Corporation modified owl 1200:\
+       :am:\
+       :co#80:it#8:li#24:sg#1:\
+       :al=\020:bl=^G:bt=^Y:cd=\026J:ce=^Kp^R:cl=\014:\
+       :cm=\017%+ %+ :cr=^M:dc=\022:dl=\021:do=^J:ei=^V<:\
+       :im=^V;:ip=:k0=^VJ\r:k1=^VA\r:k2=^VB\r:k3=^VC\r:\
+       :k4=^VD\r:k5=^VE\r:k6=^VF\r:k7=^VG\r:k8=^VH\r:\
+       :k9=^VI\r:kb=^H:kd=^J:ke=^V9:kh=^Z:kl=^_:kr=^^:\
+       :ks=\036\072\264\026%:ku=^\:le=^H:nd=^^:se=^V# :\
+       :sf=^J:so=^V$\054:ta=^I:up=^\:
+intext2|intextii|INTERACTIVE modified owl 1251:\
+       :am:bw:ul:\
+       :co#80:li#24:sg#0:\
+       :al=\E[L:bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:ch=\E[%+^AG:\
+       :cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=^M:dc=\E[P:dl=\E[M:\
+       :do=\E[B:ei=:ic=\E[@:im=:k0=\E@\r:k1=\EP\r:k2=\EQ\r:\
+       :k3=\ES\r:k4=\ET\r:k5=\EU\r:k6=\EV\r:k7=\EW\r:\
+       :k8=\EX\r:k9=\EY\r:kb=^H:kd=\EB\r:kh=\ER\r:kl=\ED\r:\
+       :kr=\EC\r:ku=\EA\r:l0=REFRSH:l1=DEL CH:l2=TABSET:\
+       :l3=GOTO:l4=+PAGE:l5=+SRCH:l6=-PAGE:l7=-SRCH:l8=LEFT:\
+       :l9=RIGHT:nd=\E[C:se=\E[2 D:sf=\E[S:so=\E[6 D:\
+       :sr=\E[T:ta=^I:ue=\E[2 D:up=\E[A:us=\E[18 D:\
+       :vb=\E[;;;;;;;;;2;;u\E[;;;;;;;;;1;;u:
+
+
+abm85|Kimtron ABM 85:\
+       :am:bw:ms:\
+       :co#80:it#8:li#24:sg#1:ug#1:\
+       :al=\EE:bt=\EI:cd=\Ey:ce=\Et:cl=\E*:cm=\E=%+ %+ :\
+       :dc=\EW:dl=\ER:do=^J:ei=\Er:\
+       :if=/usr/share/tabset/stdcrt:im=\EQ:\
+       :is=\EC\EX\Eg\En\E%\Er\E(\Ek\Em\Eq:kb=^H:kd=^J:kh=^^:\
+       :kl=^H:kr=^L:ku=^K:le=^H:nd=^L:se=\Ek:so=\Ej:ta=^I:\
+       :ue=\Em:up=^K:us=\El:
+abm85h|Kimtron ABM 85H native mode:\
+       :hs:\
+       :sg@:ug@:\
+       :bl=^G:ds=\Ee:fs=^M:im=\EZ:\
+       :is=\EC\EN\EX\024\016\EA\Ea\E%\E9\Ee\Er\En\E"\E}\E'\E(\Ef\r\EG0\Ed\E.4\El:\
+       :kd=^V:me=\E(\EG0:mh=\E):mr=\EG4:se=\EG0:so=\EG4:\
+       :ts=\Eg\Ef:ue=\EG0:us=\EG8:vb@:ve=\E.4:vs=\E.2:tc=abm85:
+abm85e|Kimtron ABM 85H in 920E mode:\
+       :sg@:\
+       :bl=^G:im=\EZ:\
+       :is=\EC\EX\EA\E%\E9\Ee\Er\En\E"\E}\E'\E(\Ef\r\Ek\Eq\Em:\
+       :me=\E(\Ek:mh=\E):mr=\Ej:vb@:tc=abm85:
+abm85h-old|oabm85h|o85h|Kimtron ABM 85H with old firmware rev.:\
+       :sg@:\
+       :bl=^G:im=\EZ:\
+       :is=\E}\EC\EX\Ee\En\E%\Er\E(\Ek\Em\Eq\Ed\ET\EC\E9\EF:\
+       :me=\E(\Ek:mh=\E):mr=\Ej:tc=abm85:
+kt7|kimtron model kt-7:\
+       :am:\
+       :co#80:it#8:li#24:\
+       :al=\EE:bt=\EI:cd=\EY:ce=\ET:cl=^Z:cm=\E=%+ %+ :\
+       :dc=\EW:dl=\ER:do=^V:ei=:fs=\Eg:ho=^^:ic=\EQ:\
+       :if=/usr/share/tabset/stdcrt:im=:is=\El\E":k0=^AI\r:\
+       :k1=^A@\r:k2=^AA\r:k3=^AB\r:k4=^AC\r:k5=^AD\r:\
+       :k6=^AE\r:k7=^AF\r:k8=^AG\r:k9=^AH\r:kA=\EE:kB=\EI:\
+       :kC=^Z:kD=\EW:kE=\ET:kI=\EQ:kL=\ER:kS=\EY:kb=^H:\
+       :kd=^V:kh=^^:kl=^H:kr=^L:ku=^K:le=^H:nd=^L:se=\EG0:\
+       :so=\EG4:ta=^I:ts=\Ef:ue=\EG0:up=^K:us=\EG8:
+
+
+act4|microterm|microterm act iv:\
+       :am:\
+       :co#80:li#24:\
+       :al=2.3*\001<2.3*/>:bl=^G:cd=2.2*\037:ce=.1*\036:\
+       :cl=12\014:cm=\024%+^X%>/0%+P:cr=^M:dc=.1*\004:\
+       :dl=2.3*\027:do=^K:ho=^]:kd=^K:kl=^H:kr=^X:ku=^Z:\
+       :le=^H:nd=^X:sf=^J:up=^Z:
+act5|microterm5|microterm act v:\
+       :kd=^K:kl=^H:kr=^X:ku=^Z:sr=\EH:uc=^H\EA:tc=act4:
+mime-fb|full bright mime1:\
+       :is=^S\E:se=^S:so=^Y:tc=mime:
+mime-hb|half bright mime1:\
+       :is=^Y\E:se=^Y:so=^S:tc=mime:
+mime|mime1|mime2|mimei|mimeii|microterm mime1:\
+       :am:\
+       :co#80:it#8:li#24:vt#9:\
+       :al=\001:bl=^G:cd=^_:ce=^^:cl=^]^C:\
+       :cm=\024%+^X%> 0%+P:cr=^M:dl=\027:do=^J:ho=^]:\
+       :is=^S\E^Q:kd=^K:kl=^H:kr=^X:ku=^Z:le=^H:nd=^X:sf=^J:\
+       :sr=\022:ta=\011:uc=^U:up=^Z:
+mime2a-s|microterm mime2a (emulating an enhanced soroc iq120):\
+       :am:\
+       :co#80:li#24:\
+       :al=\001:bl=^G:cd=\EJ:ce=\EK:cl=\EL:cm=\E=%+ %+ :\
+       :cr=^M:dc=\ED:dl=\027:do=^J:ei=^Z:ho=^^:im=\EE:ip=:\
+       :is=\E):kd=^J:kl=^H:kr=^L:ku=^K:le=^H:nd=^L:se=\E;:\
+       :sf=^J:so=\E\072:sr=\EI:ue=\E7:up=\EI:us=\E6:
+mime2a|mime2a-v|microterm mime2a (emulating an enhanced vt52):\
+       :co#80:it#8:li#24:\
+       :al=\001:bl=^G:cd=\EQ:ce=\EP:cl=\EL:cm=\EY%+ %+ :\
+       :cr=^M:dc=^N:dl=\027:do=^J:ei=^Z:ho=\EH:im=^O:ip=:\
+       :is=^Y:kd=\EB:kl=\ED:kr=\EC:ku=\EA:le=^H:nd=\EC:\
+       :se=\E9:sf=^J:so=\E8:sr=\EA:ta=^I:ue=\E5:up=\EA:\
+       :us=\E4:
+mime3a|mime1 emulating 3a:\
+       :am@:\
+       :kd=^K:kl=^H:kr=^X:ku=^Z:tc=adm3a:
+mime3ax|mime-3ax|mime1 emulating enhanced 3a:\
+       :it#8:\
+       :al=\001:cd=^_:ce=^X:dl=\027:ta=\011:tc=mime3a:
+mime314|mm314|mime 314:\
+       :am:\
+       :co#80:li#24:\
+       :al=^A:cd=^_:ce=^^:cl=^L:cm=\024%.%.:dc=^D:dl=^W:\
+       :ei=^V:ho=^]:im=^S:kd=^K:kl=^H:kr=^X:ku=^Z:le=^H:\
+       :nd=^X:ta=^I:up=^Z:
+mm340|mime340|mime 340:\
+       :co#80:li#24:\
+       :al=46\EU:cd=2*\037:ce=2.1\EL:cl=12\032:cm=\E=%+ %+ :\
+       :cr=^M:dc=2.1*\E#:dl=49.6\EV:do=^J:is=\E\054:kb=^H:\
+       :kd=^J:kl=^H:ku=^K:le=^H:nd=^L:nw=^M^J:sf=^J:ta=^I:\
+       :up=^K:
+mt4520-rv|micro-term 4520 reverse video:\
+       :am:hs:ms:xn:xo:\
+       :co#80:it#8:li#24:ws#80:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:SA=\E[?7h:UP=\E[%dA:\
+       :al=\E[L:bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
+       :cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:ct=\E[g:dc=\E[P:\
+       :dl=\E[M:do=\E[B:ei=:fs=\E[?5l\E[?5h:ho=\E[H:ic=\E[@:\
+       :im=:\
+       :is=\E(B\E[2l\E>\E[20l\E[?3l\E[?5h\E[?7h\E[1;24r\E[24;1H\E[H\E[J:\
+       :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:kb=^H:kd=\E[B:\
+       :kh=\E[H:kl=\E[D:kr=\E[C:ku=\E[A:le=\E[D:ll=\E[24;1H:\
+       :nd=\E[C:nw=\EE:\
+       :r1=\E(B\E[2l\E>\E[20l\E[?3l\E[?5h\E[?7h\E[H\E[J:\
+       :rc=\E8:rf=/usr/lib/tabset/vt100:sc=\E7:se=\E[0m:\
+       :sf=\ED:so=\E[7m:sr=\EM:st=\EH:ta=^I:ts=\E[25;1H:\
+       :ue=\E[24m:up=\E[A:us=\E[4m:vb=\E[?5l\E[?5h:\
+       :ve=\E[0V\E8:vs=\E7\E[0U:
+
+ergo4000|microterm ergo 4000:\
+       :da:db:ms:\
+       :co#80:li#66:\
+       :AL=\E[1L:RA=\E[?7l:SA=\E[?7m:bl=^G:cd=\E[0J:\
+       :ce=\E[0K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cr=^M:dc=\E[1P:\
+       :dl=\E[1M:do=\E[B:ei=\E[4l:im=\E[4h:\
+       :is=\E<\E=\E[?1l\E[?4l\E[?5l\E[?7h\E[?8h:k1=\EOP:\
+       :k2=\EOQ:k3=\EOR:k4=\EOS:kd=\E[B:ke=\E=:kl=\E[D:\
+       :kr=\E[C:ks=\E=:ku=\E[A:l1=pf1:l2=pf2:l3=pf3:l4=pf4:\
+       :le=^H:nd=\E[C:se=\E[m:sf=\ED:so=\E[7m:sr=\EM:ta=^I:\
+       :up=\E[A:
+
+
+ncr7900i|7900i|ncr7900|7900|ncr 7900 model 1:\
+       :am:bw:ul:\
+       :co#80:li#24:sg#1:ug#1:\
+       :bl=^G:cd=\Ek:ce=\EK:cl=^L:cm=\E1%r%.%.:cr=^M:do=^J:\
+       :is=\E0@\010\E3\E4\E7:kd=^J:kh=^A:kl=^U:kr=^F:ku=^Z:\
+       :le=^H:ll=^A:mb=\E0B:me=\E0@:mh=\E0A:mr=\E0P:nd=^F:\
+       :pf=^T:po=^R:\
+       :..sa=\E0%p5%'@'%+%p4%{2}%*%+%p3%{16}%*%+%p2%{32}%*%+%p1%{17}%*%+%c:\
+       :se=\E0@:sf=^J:so=\E0Q:ue=\E0@:up=^Z:us=\E0`:
+ncr7900iv|ncr 7900 model 4:\
+       :am:bw:es:hs:\
+       :co#80:li#24:\
+       :al=\E^N:bl=^G:cl=^L:cm=\013%+@\E\005%02:cr=^M:\
+       :dl=\E^O:do=^J:ds=\Ey1:fs=\Ek\Ey5:ho=\013@\E^E00:\
+       :k1=\ES:k2=\ET:k3=\EU:k4=\EV:k5=\EW:k6=\EP:k7=\EQ:\
+       :k8=\ER:kb=^H:kd=\EB:kh=\EH:kl=\ED:kr=\EC:ku=\EA:\
+       :l6=blue:l7=red:l8=white:le=^H:nw=^M^J:sf=^J:\
+       :ts=\Ej\Ex5\Ex1\EY8%p1%{32}%+%c\Eo:
+ncr7901|7901|ncr 7901 model:\
+       :am:bw:ul:\
+       :co#80:li#24:\
+       :bl=^G:cd=\Ek:ce=\EK:ch=\020%+^J:cl=^L:cm=\EY%+ %+ :\
+       :cr=^M:cv=\013%+@:do=^J:is=\E4^O:kC=^L:kd=^J:kh=^H:\
+       :kl=^U:kr=^F:ku=^Z:le=^H:ll=^A:mb=\E0B:me=^O:mh=\E0A:\
+       :mr=\E0P:nd=^F:pf=^T:po=^R:\
+       :..sa=\E0%p5%'@'%+%p4%{2}%*%+%p3%{16}%*%+%p2%{32}%*%+%p1%{17}%*%+%c\016:\
+       :se=^O:sf=^J:so=\E0Q\016:ue=^O:up=^Z:us=\E0`\016:\
+       :ve=^X:vi=^W:
+
+
+bantam|pe550|pe6100|perkin elmer 550:\
+       :co#80:li#24:\
+       :bl=^G:ce=\EI:cl=\EK:cm=\EX%+ \EY%+ :cr=^M:do=^J:\
+       :ho=\EH:le=^H:ll=\EH\EA:nd=\EC:sf=^J:up=\EA:
+fox|pe1100|perkin elmer 1100:\
+       :am:\
+       :co#80:li#24:\
+       :bl=^G:cd=\EJ:ce=\EI:cl=\EH\EJ:cm=\EX%+ \EY%+ :cr=^M:\
+       :ct=\E3:do=^J:ho=\EH:le=^H:ll=\EH\EA:nd=\EC:sf=^J:\
+       :st=\E1:up=\EA:vb=\020\002\020\003:
+owl|pe1200|perkin elmer 1200:\
+       :am:in:\
+       :co#80:li#24:\
+       :al=\EL:bl=^G:cd=\EJ:ce=\EI:cl=\EH\EJ:\
+       :cm=\EX%+ \EY%+ :cr=^M:ct=\E3:dc=\EO:dl=\EM:do=^J:\
+       :ei=:ho=\EH:ic=\EN:im=:ip=:k0=\ERJ:k1=\ERA:k2=\ERB:\
+       :k3=\ERC:k4=\ERD:k5=\ERE:k6=\ERF:k7=\ERG:k8=\ERH:\
+       :k9=\ERI:kb=^H:le=^H:ll=\EH\EA:nd=\EC:se=\E!\200:\
+       :sf=^J:so=\E!^H:st=\E1:up=\EA:vb=\020\002\020\003:
+pe1251|pe6300|pe6312|perkin elmer 1251:\
+       :am:\
+       :co#80:it#8:li#24:pb#300:sg#1:vt#8:\
+       :bl=^G:cd=\EJ:ce=\EI:cl=\EK:cm=\EX%+ \EY%+ :cr=^M:\
+       :ct=\E3:do=\EB:ho=\EH:k0=\ERA:k1=\ERB:k2=\ERC:\
+       :k3=\ERD:k4=\ERE:k5=\ERF:k6=\ERG:k7=\ERH:k8=\ERI:\
+       :k9=\ERJ:k;=\ERK:le=\ED:nd=\EC:sf=^J:st=\E1:up=\EA:
+pe7000m|perkin elmer 7000 series monochrome monitor:\
+       :am:\
+       :co#80:li#24:\
+       :bl=^G:bt=\E!Y:cd=\EJ:ce=\EI:cl=\EK:cm=\ES%+ %+ :\
+       :cr=^M:do=\EB:ho=\EH:i1=\E!\200\EW  7o\Egf\ES7 :\
+       :k0=\E!\200:k1=\E!^A:k2=\E!^B:k3=\E!^C:k4=\E!^D:\
+       :k5=\E!^E:k6=\E!^F:k7=\E!^G:k8=\E!^H:k9=\E!^I:\
+       :k;=\E!^J:kb=^H:kd=\E!U:kh=\E!S:kl=\E!V:kr=\E!W:\
+       :ku=\E!T:le=\ED:ll=\ES7 :nd=\EC:sf=^J:sr=\ER:up=\EA:
+pe7000c|perkin elmer 7000 series colour monitor:\
+       :i1=\E!\200\EW  7o\Egf\Eb0\Ec7\ES7 :se=\Eb0:so=\Eb2:\
+       :ue=\E!\200:us=\E! :tc=pe7000m:
+
+
+uts30|sperry uts30 with cp/m@1R1:\
+       :am:bw:hs:\
+       :co#80:li#24:ws#40:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:SA=\E[?7m:SF=\E[%dB:\
+       :SR=\E[%dA:UP=\E[%dA:ae=\Ed:al=\EN:as=\EF:bl=^G:\
+       :cd=\E[J:ce=\E[K:cl=^L:cm=\E[%i%d;%dH:cr=^M:\
+       :cs=\EU%+ %+ :dc=\EM:dl=\EL:do=\EB:ei=:fs=^M:ho=\E[H:\
+       :ic=\EO:im=:is=\E[U 7\E[24;1H:kb=^H:kd=\EOB:kh=\E[H:\
+       :kl=\EOD:kr=\EOC:ku=\EOA:le=^H:mb=\E[5m:md=\E[1m:\
+       :me=\E[m:mr=\E[7m:nd=\EC:\
+       :r2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:rc=\EX:\
+       :rf=/usr/lib/tabset/vt100:sc=\EW:se=\E[m:sf=^J:\
+       :so=\E[7m:sr=\EI:ta=^I:ts=\E]:uc=\EPB:ue=\E[m:\
+       :up=\E[A:us=\E[4m:ve=\ES:vi=\ER:
+
+
+tandem6510|adm3a repackaged by Tandem:\
+       :tc=adm3a:
+
+tandem653|t653x|Tandem 653x multipage terminal:\
+       :am:da:db:hs:\
+       :co#80:li#24:sg#1:ug#1:ws#64:\
+       :cd=\EJ:ce=\EK:cl=\EI:cm=\023%+ %+ :do=^J:ds=\Eo\r:\
+       :fs=^M:ho=\EH:if=/usr/share/tabset/tandem653:le=^H:\
+       :nd=\EC:se=\E6 :sf=\ES:so=\E6$:sr=\ET:ts=\Eo:ue=\E6 :\
+       :up=\EA:us=\E60:
+
+
+dmterm|deskmate terminal:\
+       :am:bw:\
+       :co#80:li#24:\
+       :al=\EP:bl=^G:cd=\EJ:ce=\EK:cl=\Ej:cm=\EY%+ %+ :\
+       :cr=^M:dc=\ES:dl=\ER:do=\EB:ei=:ho=\EH:ic=\EQ:im=:\
+       :k0=\E1:k1=\E2:k2=\E3:k3=\E4:k4=\E5:k5=\E6:k6=\E7:\
+       :k7=\E8:k8=\E9:k9=\E0:kd=\EB:kh=\EH:kl=\ED:kr=\EC:\
+       :ku=\EA:l0=f1:l1=f2:l2=f3:l3=f4:l4=f5:l5=f6:l6=f7:\
+       :l7=f8:l8=f9:l9=f10:le=^H:ll=\EE:nd=\EC:se=\EG0:\
+       :sf=\EX:so=\EG4:ta=^I:up=\EA:ve=\EG6:vi=\EG5:
+dt100|dt-100|Tandy DT-100 terminal:\
+       :xo:\
+       :co#80:li#24:sg#1:ug#1:\
+       :ac=kkllmmjjnnwwvvttuuqqxx:ae=^O:al=\E[L:as=^N:bl=^G:\
+       :cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\010\E[%i%d;%dH:\
+       :cr=^M:cs=\E[%2;%2r:dc=\E[P:dl=\E[M:do=\E[B:ei=:\
+       :ho=\E[H:ic=\E[@:im=:is=\E[?3l\E)0\E(B:k1=\E[?3i:\
+       :k2=\E[2i:k3=\E[@:k4=\E[M:k5=\E[17~:k6=\E[18~:\
+       :k7=\E[19~:k8=\E[20~:k9=\E[21~:k;=\E[?5i:kN=\E[29~:\
+       :kP=\E[28~:kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:ku=\E[A:\
+       :l1=f1:l2=f2:l3=f3:l4=f4:l5=f5:l6=f6:l7=f7:l8=f8:\
+       :le=^H:nd=\E[C:se=\E[m:sf=^J:so=\E[7m:sr=\EM:ta=^I:\
+       :ue=\E[m:up=\E[A:us=\E[4m:ve=\E[?25h:vi=\E[?25l:
+dt100w|dt-100w|Tandy DT-100 terminal (wide mode):\
+       :co#132:tc=dt100:
+dt110|Tandy DT-110 emulating ansi:\
+       :xo:\
+       :co#80:li#24:\
+       :@7=\E[K:ac=kkllmmjjnnwwvvuuttqqxx:ae=^O:al=\E[0L:\
+       :as=^N:bl=^G:cd=\E[0J:ce=\E[0K:cl=\E[H\E[2J:\
+       :cm=\010\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:dc=\E[0P:\
+       :dl=\E[0M:do=\E[0B:eA=\E(B\E)0:ei=:ho=\E[H:ic=\E[0@:\
+       :im=:is=\E[?3l\E)0\E(B:k1=\E[1~:k2=\E[2~:k3=\E[3~:\
+       :k4=\E[4~:k5=\E[5~:k6=\E[6~:k7=\E[7~:k8=\E[8~:\
+       :k9=\E[9~:k;=\E[10~:kI=\E[@:kN=\E[26~:kP=\E[25~:\
+       :kd=\E[B:kh=\E[G:kl=\E[D:kr=\E[C:ku=\E[A:l0=f1:l1=f2:\
+       :l2=f3:l3=f4:l4=f5:l5=f6:l6=f7:l7=f8:l8=f9:l9=f10:\
+       :le=^H:nd=\E[C:se=\E[m:sf=^J:so=\E[7m:sr=\EM:ta=^I:\
+       :ue=\E[m:up=\E[0A:us=\E[4m:ve=\E[?25h:vi=\E[?25l:
+pt210|TRS-80 PT-210 printing terminal:\
+       :hc:os:\
+       :co#80:\
+       :bl=^G:cr=^M:do=^J:sf=^J:
+
+
+tek|tek4012|4012|tektronix 4012:\
+       :os:\
+       :co#75:li#35:\
+       :bl=^G:cl=\E\014:cr=^M:do=^J:ff=\014:is=\E^O:le=^H:
+tek4013|4013|tektronix 4013:\
+       :ae=\E^O:as=\E^N:tc=tek4012:
+tek4014|4014|tektronix 4014:\
+       :co#81:li#38:\
+       :is=\E\017\E9:tc=tek4012:
+tek4015|4015|tektronix 4015:\
+       :ae=\E^O:as=\E^N:tc=tek4014:
+tek4014-sm|4014-sm|tektronix 4014 in small font:\
+       :co#121:li#58:\
+       :is=\E\017\E\072:tc=tek4014:
+tek4015-sm|4015-sm|tektronix 4015 in small font:\
+       :ae=\E^O:as=\E^N:tc=tek4014-sm:
+tek4023|4023|tex|tektronix 4023:\
+       :am:\
+       :co#80:li#24:vt#4:\
+       :bl=^G:cl=\E\014:cm=\034%r%+ %+ :cr=^M:do=^J:le=^H:\
+       :nd=^I:se=^_@:sf=^J:so=^_P:
+tek4024|tek4025|tek4027|tektronix 4024/4025/4027:\
+       :am:da:db:\
+       :co#80:it#8:li#34:lm#0:\
+       :AL=\037up\r\037ili %d\r:CC=^_:DL=\037dli %d\r\006:\
+       :DO=\037dow %d\r:LE=\037lef %d\r:RI=\037rig %d\r:\
+       :UP=\037up %d\r:al=\037up\r\037ili\r:bl=^G:\
+       :cd=\037dli 50\r:cl=\037era\r\n\n:cr=^M:dc=\037dch\r:\
+       :dl=\037dli\r\006:do=^F^J:ei=:ic=\037ich\r \010:im=:\
+       :is=!com 31\r\n\037sto 9 17 25 33 41 49 57 65 73\r:\
+       :ke=\037lea p2\r\037lea p4\r\037lea p6\r\037lea p8\r\037lea f5\r:\
+       :ks=\037lea p4 /h/\r\037lea p8 /k/\r\037lea p6 / /\r\037lea p2 /j/\r\037lea f5 /H/\r:\
+       :le=^H:nd=\037rig\r:sf=^F^J:ta=^I:up=^K:
+tek4025-17|4025-17|4027-17|tek 4025 17 line window:\
+       :li#17:tc=tek4025:
+tek4025-17-ws|4025-17-ws|4025-17ws|4027-17ws|4027-17-ws|tek 4025 17 line window in workspace:\
+       :is=!com 31\r\n\037sto 9 17 25 33 41 49 57 65 73\r\037wor 17\r\037mon 17\r:\
+       :se=\037att s\r:so=\037att e\r:te=\037mon h\r:\
+       :ti=\037wor h\r:tc=tek4025-17:
+tek4025-ex|tek4027-ex|tek 4025/4027 w/!:\
+       :is=\037com 33\r\n!sto 9 17 25 33 41 49 57 65 73\r:\
+       :te=\037com 33\r:ti=!com 31\r:tc=tek4025:
+tek4025a|4025a|Tektronix 4025A:\
+       :am:bw:da:db:xo:\
+       :co#80:it#8:li#34:\
+       :CC=^]:DC=\035dch %d;:DL=\035dli %d;:DO=\035dow %d;:\
+       :LE=\035lef %d;:RI=\035rig %d;:SF=\035dow %d;:\
+       :UP=\035up %d;:al=\013\035ili;:bl=^G:bt=\035bac;:\
+       :ce=\035dch 80;:ch=\r\035rig %d;:\
+       :cl=\035era;\n\035rup;:cr=^M:ct=\035sto;:dc=\035dch;:\
+       :dl=\035dli;:do=^J:le=^H:nd=\035rig;:\
+       :rs=!com 29\035del 0\035rss t\035buf\035buf n\035cle\035dis\035dup\035ech r\035eol\035era g\035for n\035pad 203\035pad 209\035sno n\035sto 9 17 25 33 41 49 57 65 73\035wor 0;:\
+       :sf=^J:ta=^I:up=^K:
+tek4025-cr|4025-cr|tek 4025 for curses and rogue:\
+       :am:\
+       :co#80:it#8:li#33:\
+       :cl=\037era;:cm=\037jum%i%d\054%d;:do=^F^J:\
+       :is=!com 31\r\n\037sto 9 17 25 33 41 49 57 65 73\r:\
+       :le=^H:nd=\037rig;:sf=^F^J:ta=^I:te=\037wor 0:\
+       :ti=\037wor 33h:up=^K:
+tek4025ex|4025ex|4027ex|tek 4025 w/!:\
+       :is=\037com 33\r\n!sto 9\05417\05425\05433\05441\05449\05457\05465\05473\r:\
+       :te=\037com 33\r:ti=!com 31\r:tc=tek4025:
+tek4105|4105|tektronix 4105:\
+       :am:mi:ms:ul:xn:xt:\
+       :co#79:it#8:li#29:\
+       :ae=\E[m:al=\E[1L:as=\E[1m:bl=^G:bt=\E[Z:cd=\E[J:\
+       :ce=\E[K:cl=\E[2J\E[H:cm=\E[%i%2;%2H:cr=^M:ct=\E[1g:\
+       :dc=\E[1P:dl=\E[1M:do=\E[1B:ei=\E[4l:ho=\E[H:\
+       :i1=\E%!1\E[m:im=\E[4h:is=\E%!1\E[?6141\E[m:kb=^H:\
+       :kd=\E[1B:kl=\E[1D:kr=\E[1C:ku=\E[1A:mb=\E[=3;<7m:\
+       :md=\E[=7;<4m:me=\E[=0;<1m:mh=\E[=1;<6m:mk=\E[=6;<5:\
+       :mr=\E[=1;<3m:nd=\E[1C:se=\E[=0;<1m:sf=\E[S:\
+       :so=\E[=2;<3m:sr=\E[T:ta=^I:ti=\E%!1\E[?6l\E[2J:\
+       :ue=\E[=0;<1m:up=\E[1A:us=\E[=5;<2m:
+
+tek4105-30|4105-30|4015 emulating 30 line vt100:\
+       :am:mi:ms:xn:xo:\
+       :co#80:it#8:li#30:vt#3:\
+       :@8=\EOM:DO=\E[%dB:K1=\EOq:K2=\EOr:K3=\EOs:K4=\EOp:\
+       :K5=\EOn:LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:SA=\E[?7h:\
+       :UP=\E[%dA:\
+       :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~:\
+       :ae=^O:as=^N:bl=^G:cb=\E[1K:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:\
+       :ct=\E[3g:do=^J:eA=\E(B\E)0:ho=\E[H:k0=\EOy:k1=\EOP:\
+       :k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOt:k6=\EOu:k7=\EOv:\
+       :k8=\EOl:k9=\EOw:k;=\EOx:kb=^H:kd=\EOB:ke=\E[?1l\E>:\
+       :kl=\EOD:kr=\EOC:ks=\E[?1h\E=:ku=\EOA:le=^H:mb=\E[5m:\
+       :md=\E[1m:me=\E[m\017:mr=\E[7m:nd=\E[C:\
+       :r2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:rc=\E8:\
+       :..sa=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;:\
+       :sc=\E7:se=\E[m:sf=^J:so=\E[1;7m:sr=\EM:st=\EH:ta=^I:\
+       :ue=\E[m:up=\E[A:us=\E[4m:
+
+tek4107|tek4109|4107|4109|tektronix terminals 4107 4109:\
+       :am:mi:ms:ul:xn:xt:\
+       :co#79:it#8:li#29:\
+       :bl=^G:cd=\EJ:ce=\EK:cl=\ELZ:cm=\EY%+ %+ :cr=^M:\
+       :do=^J:kb=^H:kd=\EB:kl=\ED:kr=\EC:ku=\EA:le=^H:\
+       :mb=\E%!1\E[5m\E%!0:md=\E%!1\E[1m\E%!0:\
+       :me=\E%!1\E[m\E%!0:mh=\E%!1\E[<0m\E%!0:\
+       :mr=\E%!1\E[7m\E%0:nd=\EC:\
+       :..sa=\E%%!1\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m\E%%!0:\
+       :se=\E%!1\E[m\E%!0:sf=^J:so=\E%!1\E[7;5m\E%!0:sr=\EI:\
+       :ta=^I:ue=\E%!1\E[m\E%!0:up=\EA:us=\E%!1\E[4m\E%!0:\
+       :ve=\E%!0:vs=\E%!3:
+tek4207-s|Tektronix 4207 with sysline but no memory:\
+       :es:hs:\
+       :ds=\E7\E[?6l\E[2K\E[?6h\E8:fs=\E[?6h\E8:\
+       :i1=\E%!1\E[2;32r\E[132D\E[2g\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[J:\
+       :is=\E7\E[?6l\E[2K\E[?6h\E8:\
+       :ts=\E7\E[?6l\E[2K\E[;%i%df:tc=tek4107:
+
+otek4112|o4112-nd|otek4113|otek4114|old tektronix 4110 series:\
+       :am:\
+       :co#80:li#34:\
+       :bl=^G:cl=\E^L:cr=^M:do=^J:le=^H:sf=^J:te=\EKA1\ELV1:\
+       :ti=\EKA0\ELV0\EMG0:up=^K:
+tek4112|tek4114|tektronix 4110 series:\
+       :am:db:\
+       :co#80:li#34:\
+       :al=\E[L:bt=\E[Z:cd=\E[0J:ce=\E[0K:cl=\E[2J\E[0;0H:\
+       :cm=\E[%i%d;%dH:dc=\E[P:dl=\E[M:ei=:ic=\E[@:im=:\
+       :is=\E3!1:le=^H:nd=\E[C:se=\E[m:sf=\E7\E[0;0H\E[M\E8:\
+       :so=\E[7m:sr=\E7\E[0;0H\E[L\E8:ue=\E[m:up=\EM:\
+       :us=\E[4m:
+tek4112-nd|4112-nd|4112 not in dialog area:\
+       :ns:\
+       :up=^K:tc=tek4112:
+tek4112-5|4112-5|4112 in 5 line dialog area:\
+       :li#5:tc=tek4112:
+tek4113|tektronix 4113 color graphics with 5 line dialog area:\
+       :am:da:eo:\
+       :co#80:li#5:\
+       :cl=\ELZ:do=^J:is=\EKA1\ELL5\ELV0\ELV1:le=^H:\
+       :nd=\ELM1 \ELM0:uc=\010\ELM1_\ELM0:\
+       :vb=\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERB0:
+tek4113-34|4113-34|tektronix 4113 color graphics with 34 line dialog area:\
+       :li#34:\
+       :is=\EKA1\ELLB2\ELV0\ELV1:tc=tek4113:
+tek4113-nd|4113-nd|tektronix 4113 color graphics with no dialog area:\
+       :am:eo:\
+       :co#80:it#8:li#34:\
+       :cl=\E^L:do=^J:ho=\ELF7l\177 @:\
+       :is=\ELZ\EKA0\ELF7l\177 @:le=^H:ll=\ELF hl @:nd=^I:\
+       :se=\EMT1:so=\EMT2:ta=^I:uc=\010\EMG1_\EMG0:up=^K:\
+       :vb=\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERBA4\ERB0:\
+       :vs=\ELZ\EKA0:
+otek4115|Tektronix 4115:\
+       :am:bs:da:db:eo:\
+       :co#80:it#8:li#34:\
+       :RA=\E[?7l:SA=\E[?7h:al=\E[L:bt=\E[Z:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[2J:cm=\E[%i%d;%dH:dc=\E[P:dl=\E[M:do=\E[B:\
+       :ei=\E[4l:ho=\E[H:if=/usr/share/tabset/vt100:\
+       :im=\E[4h:\
+       :is=\E%!0\E%\014\ELV0\EKA1\ELBB2\ENU@=\ELLB2\ELM0\ELV1\EKYA?\E%!1\E[<1l\E[?7h\E[?8h\E[34;1H\E[34B\E[m:\
+       :kb=^H:ke=\E>:ks=\E=:le=\E[D:nd=\E[C:se=\E[m:\
+       :so=\E[7m:sr=\EM:ta=^I:\
+       :te=\E%!0\ELBG8\E%!1\E[34;1H\E[J:ti=\E%!0\ELBB2\E%!1:\
+       :ue=\E[m:up=\E[A:us=\E[4m:\
+       :ve=\E%!0\ELBG8\E%!1\E[34;1H:vs=\E%!0\ELBB2\E%!1:
+tek4115|newer tektronix 4115 entry with more ANSI capabilities:\
+       :am:xo:\
+       :co#80:li#34:\
+       :AL=\E[%dL:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:LE=\E[%dD:\
+       :RA=\E[?7l:RI=\E[%dC:SA=\E[?7h:UP=\E[%dA:al=\E[L:\
+       :bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:ch=\E[%+^AG:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:ct=\E[2g:\
+       :cv=\E[%+^Ad:dc=\E[P:dl=\E[M:do=^J:ei=:ho=\E[H:\
+       :ic=\E[@:im=:kb=^H:kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:\
+       :ku=\E[A:le=^H:mb=\E[5m:md=\E[1m:me=\E[m:mk=\E[8m:\
+       :mr=\E[7m:nd=\E[C:..rp=%p1%c\E[%p2%{1}%-%db:\
+       :..sa=\E[%?%p1%t7;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p6%t1;%;m:\
+       :se=\E[m:sf=^J:so=\E[7m:st=\EH:ta=^I:ue=\E[m:up=\E[A:\
+       :us=\E[4m:
+tek4125|tektronix 4125:\
+       :li#34:\
+       :al=\E[1L:cs@:dl=\E[1M:im=\E1:\
+       :is=\E%\E!0\EQD1\EUX03\EKA\ELBB2\ELCE0\ELI100\ELJ2\ELLB2\ELM0\ELS1\ELX00\ELV1\E%\E!1\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:\
+       :ks=\E=:rc@:sc@:tc=vt100:
+
+tek4207|Tektronix 4207 graphics terminal with memory:\
+       :am:bw:mi:ul:xn:\
+       :co#80:it#8:li#32:\
+       :al=3\E[L:bt=\E[Z:cd=\E[J:ce=5\E[K:cl=156\E[H\E[J:\
+       :cm=\E[%i%d;%dH:dc=4\E[P:dl=3\E[M:do=^J:ei=:ho=\E[H:\
+       :ic=4\E[@:im=:\
+       :is=\E%!0\ELBP0\E%!1\E[H\E[2g\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[8C\EH\E[J:\
+       :kd=\ED:kh=\E[H:kl=\E[D:kr=\E[C:ku=\EM:le=^H:\
+       :mb=\E[5m:md=\E[1m:me=\E[m:mr=\E[7m:nd=\E[C:se=\E[m:\
+       :so=\E[7m:ta=^I:te=\E[?6h\E%!0\ELBP0\E%!1\E[32;1f:\
+       :ti=\E[?6l\E[H\E[J:ue=\E[m:up=\EM:us=\E[4m:
+
+tek4404|tektronix 4404:\
+       :co#80:it#8:li#32:\
+       :al=\E[1L:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:\
+       :cm=\E[%i%d;%dH:cs=\E[%i%d;%dr:dc=\E[P:dl=\E[1M:\
+       :do=^J:ei=\E[4l:ho=\E[H:im=\E[4h:kd=\E[B:ke=\E[?1h:\
+       :kl=\E[D:kr=\E[C:ks=\E[?1l:ku=\E[A:le=^H:mb=\E[5m:\
+       :md=\E[1m:me=\E[m:nd=\E[C:rc=\E8:sc=\E7:se=\E[27m:\
+       :so=\E[7m:st=\E[2I:ta=^I:te=\E[1;1H\E[0J\E[?6h\E[?1l:\
+       :ti=\E%\E!1\E[1;32r\E[?6l\E>:ue=\E[m:up=\E[A:\
+       :us=\E[4m:
+ct8500|tektronix ct8500:\
+       :am:bw:da:db:\
+       :co#80:li#25:\
+       :al=\E^L:bl=^G:bt=\E^I:cd=\E^U:ce=\E^T:cl=\E^E:\
+       :cm=\E|%+ %+ :cr=^M:dc=\E^]:dl=\E^M:do=^J:ei=:\
+       :ic=\E^\:im=:is=\037\EZ\Ek:le=^H:me=\E :nd=\ES:\
+       :se=\E :sf=^J:so=\E$:sr=\E^A:ta=^I:ue=\E :up=\ER:\
+       :us=\E!:
+
+tek4205|4205|tektronix 4205:\
+       :cc:mi:ms:\
+       :Co#8:NC#49:co#80:it#8:li#30:pa#63:\
+       :AL=\E[%dL:DO=\E[%dB:IC=\E[%d@:LE=\E[%dD:RI=\E[%dC:\
+       :UP=\E[%dA:\
+       :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~:\
+       :ae=^O:al=\E[1L:as=^N:bl=^G:bt=\E[Z:cb=\E[1K:cd=\E[J:\
+       :ce=\E[K:cl=\E[2J\E[H:cm=\E[%i%d;%dH:cr=^M:ct=\E[1g:\
+       :dc=\E[1P:dl=\E[1M:do=\E[B:eA=\E)0:ec=\E%dX:ei=\E[4l:\
+       :ho=\E[H:i1=\E%!0\ETM1\E%!1\E[m:im=\E[4h:k0=\EOA:\
+       :k1=\EOB:k2=\EOC:k3=\EOD:k4=\EP:k5=\EQ:k6=\ER:k7=\ES:\
+       :kb=^H:kd=\E[B:kl=\E[D:kr=\E[C:ku=\E[A:le=\E[D:\
+       :mb=\E[5m:md=\E[=7;<4m:me=\E[=0;<1m\E[24;25;27m\017:\
+       :mh=\E[=1;<6m:mk=\E[=6;<5:mr=\E[7m:nd=\E[C:\
+       :oc=\E%!0\n\ETFB0\n0000\n1F4F4F4\n2F400\n30F40\n4A4C<F4\n50F4F4\n6F40F4\n7F4F40\n\E%!1:\
+       :op=\E[39;40m:se=\E[=0;<1m:sf=\ED:so=\E[=2;<3m:\
+       :sr=\EM:ta=^I:ti=\E%%!1\E[?6l\E[2J:ue=\E[24m:up=\E[A:\
+       :us=\E[4m:
+
+
+tty33|tty35|model 33 or 35 teletype:\
+       :hc:os:xo:\
+       :co#72:\
+       :bl=^G:cr=^M:do=^J:sf=^J:
+tty37|model 37 teletype:\
+       :hc:os:xo:\
+       :bl=^G:cr=^M:do=^J:hd=\E9:hu=\E8:le=^H:sf=^J:up=\E7:
+
+tty40|ds40|ds40-2|dataspeed40|teletype dataspeed 40/2:\
+       :xo:\
+       :co#80:li#24:\
+       :al=\EL:cd=\EJ:cl=\EH\EJ:cr=\EG:ct=\EH\E2:dc=\EP:\
+       :dl=\EM:do=\EB:ei=:ho=\EH:ic=\E^:im=:kb=^]:kl=^H:\
+       :le=^H:nd=\EC:pf=^T:po=\022:r2=\023\ER:se=\E4:sf=\ES:\
+       :so=\E3:sr=\ET:st=\E1:ta=\E@:up=\E7:
+tty43|model 43 teletype:\
+       :am:hc:os:xo:\
+       :co#132:\
+       :bl=^G:cr=^M:do=^J:kb=^H:le=^H:sf=^J:
+
+
+scanset|sc410|sc415|Tymshare Scan Set:\
+       :am:bw:ms:\
+       :co#80:li#24:\
+       :ac=l<m-k4j%q\\\054x5:ae=^O:as=^N:bl=^G:cd=\EJ:\
+       :ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :cr=^M:do=^J:ho=\EH:\
+       :kd=\EB:kl=\ED:kr=\EC:ku=\EA:le=^H:nd=^I:pf=\E;0:\
+       :po=\E;0:ps=\E;3:r1=\E>:rc=^C:sc=^B:sf=^J:up=^K:
+
+
+vc303|vc103|vc203|volker-craig 303:\
+       :am:ns:\
+       :co#80:li#24:\
+       :bl=^G:cl=\014:cr=^M:do=^J:ho=\013:kd=^J:kl=^H:kr=^I:\
+       :ku=^N:le=^H:ll=\017W:nd=^I:up=^N:
+vc303a|vc403a|volker-craig 303a:\
+       :ce=\026:cl=\030:ho=\031:kr=^U:ku=^Z:ll=^P:nd=^U:\
+       :up=^Z:tc=vc303:
+vc404|volker-craig 404:\
+       :am:\
+       :co#80:li#24:\
+       :bl=^G:cd=\027:ce=\026:cl=\030:cm=\020%+ %+ :cr=^M:\
+       :do=^J:ho=\031:kd=^J:kl=^H:kr=^U:ku=^Z:le=^H:nd=^U:\
+       :sf=^J:up=^Z:
+vc404-s|volker-craig 404 w/standout mode:\
+       :do=^J:se=^O:so=^N:tc=vc404:
+vc414|vc414h|Volker-Craig 414H in sane escape mode.:\
+       :am:bs:\
+       :co#80:li#24:\
+       :al=\E\032:cd=\E^X:ce=10\E\017:cl=\E\034:\
+       :cm=\E\021%r%.%.:dc=\E3:dl=\E\023:do=\E^K:ei=:\
+       :ho=\E^R:ic=\E\072:im=:k0=\EA:k1=\EB:k2=\EC:k3=\ED:\
+       :k4=\EE:k5=\EF:k6=\EG:k7=\EH:kd=\E^K:kh=\E^R:kl=^H:\
+       :kr=^P:ku=\E^L:l0=PF1:l1=PF2:l2=PF3:l3=PF4:l4=PF5:\
+       :l5=PF6:l6=PF7:l7=PF8:nd=^P:se=\E^_:so=\E^Y:up=\E^L:
+vc415|volker-craig 415:\
+       :cl=^L:tc=vc404:
+
+
+
+pcplot|pc-plot terminal emulation program:\
+       :xn@:\
+       :AL@:DL@:al@:cs@:dl@:rc@:sc@:tc=vt100:
+kaypro|kaypro2|kaypro II:\
+       :am:\
+       :co#80:li#24:\
+       :cl=1\032:cm=\E=%+ %+ :ho=^^:kd=^J:kl=^H:kr=^L:ku=^K:\
+       :le=^H:nd=^L:up=^K:
+
+ibmpc|ibm-pc|ibm5051|5051|IBM Personal Computer (no ANSI.SYS):\
+       :am:\
+       :co#80:li#24:\
+       :bl=^G:cl=^L^K:cr=^M^^:do=^J:ho=^K:im=\200R:kd=^_:\
+       :le=^]:nd=^\:sf=\n:up=^^:
+
+
+appleII|apple ii plus:\
+       :am:\
+       :co#80:it#8:li#24:\
+       :cd=^K:ce=^]:cl=^L:cm=\036%r%+ %+ :do=^J:ho=\E^Y:\
+       :is=\024T1\016:kd=^J:kr=^U:le=^H:nd=^\:se=^N:so=^O:\
+       :ta=^I:up=^_:vb=\024G1\024T1:ve=^TC2:vs=^TC6:
+apple-80|apple II with smarterm 80 col:\
+       :am:bw:\
+       :co#80:li#24:\
+       :bt=^R:cd=10*\013:ce=10\035:cl=10*\014:\
+       :cm=\036%r%+ %+ :cr=10*\r:do=^J:ho=^Y:le=^H:nd=^\:\
+       :up=^_:
+apple-soroc|apple emulating soroc 120:\
+       :am:\
+       :co#80:li#24:\
+       :bl=^G:cd=\EY:ce=\ET:cl=\E*:cm=\E=%+ %+ :cr=^M:do=^J:\
+       :ho=^^:kd=^J:kl=^H:kr=^L:ku=^K:le=^H:nd=^L:sf=^J:\
+       :up=^K:
+apple-videx|Apple with videx videoterm 80 column board with inverse video:\
+       :am:xn:\
+       :co#80:it#8:li#24:\
+       :cd=^K:ce=^]:cl=300\014:cm=\036%r%+ %+ :do=^J:ho=^Y:\
+       :kd=^J:kh=^Y:kl=^H:kr=^U:le=^H:nd=^\:se=^Z2:so=^Z3:\
+       :ta=^I:up=^_:
+lisa|apple lisa console display (black on white):\
+       :am:eo:ms:\
+       :co#88:it#8:li#32:\
+       :ac=lfmekcjdttuvvuwsqax`nb:ae=\E[10m:al=\E[L:\
+       :as=\E[11m:cd=\E[J:ce=\E[K:cl=^L:cm=\E[%i%d;%dH:\
+       :dc=\E[P:dl=\E[M:do=\E[B:ei=:ho=\E[H:ic=\E[@:im=:\
+       :is=\E>\E[m\014:kb=^H:kd=\E[B:kl=\E[D:kr=\E[C:\
+       :ku=\E[A:le=^H:nd=\E[C:se=\E[m:so=\E[7m:ta=^I:\
+       :ue=\E[m:up=\E[A:us=\E[4m:vi=\E[5h:vs=\E[5l:
+liswb|apple lisa console display (white on black):\
+       :is=\E>\E[0;7m\014:se=\E[0;7m:so=\E[m:ue=\E[0;7m:\
+       :us=\E[4m:tc=lisa:
+mac|macintosh|Macintosh with MacTerminal:\
+       :xn:\
+       :dN#30:\
+       :al=20\E[L:dc=7\E[P:dl=20\E[M:ei=:ic=9\E[@:im=:ip=7:tc=vt100:
+
+
+coco3|os9LII|Tandy CoCo3 24*80 OS9 Level II:\
+       :am:\
+       :co#80:it#8:li#24:\
+       :al=^_0:bl=^G:cd=^K:ce=^D:cl=5*\014:cm=2\002%r%+ %+ :\
+       :dl=^_1:do=^J:ho=^A:kd=^J:kl=^H:kr=^I:ku=^L:le=^H:\
+       :mb=^_":md=\E\072^A:me=\037!\E\072\200:mr=^_ :nd=^F:\
+       :se=^_!:so=^_ :ue=^_#:up=^I:us=^_":ve=^E!:vi=^E :
+trs2|trsII|trs80II|Radio Shack Model II using P&T CP/M:\
+       :am:ms:\
+       :co#80:it#8:li#24:\
+       :al=^D:bl=^G:cd=^B:ce=^A:cl=^L:cm=\EY%+ %+ :cr=^M:\
+       :dl=^K:do=^_:ho=^F:kb=^H:kd=^_:kl=^\:kr=^]:ku=^^:\
+       :le=^H:nd=^]:se=^O:sf=^J:so=^N:ta=^I:up=^^:
+trs16|trs-80 model 16 console:\
+       :am:\
+       :co#80:it#8:li#24:\
+       :ac=l_mbk`javewcquxs:ae=\ERg:al=\EL:as=\ERG:bl=^G:\
+       :cd=\EJ:ce=\EK:cl=^L:cm=\EY%+ %+ :cr=^M:dc=\EQ:\
+       :dl=\EM:do=\EB:ei=:ho=\EH:ic=\EP:im=:k0=^A:k1=^B:\
+       :k2=^D:k3=^L:k4=^U:k5=^P:k6=^N:k7=^S:kb=^H:kd=\EB:\
+       :kh=^W:kl=\ED:kr=\EC:ku=\EA:l0=f1:l1=f2:l2=f3:l3=f4:\
+       :l4=f5:l5=f6:l6=f7:l7=f8:le=^H:nd=\EC:pf=\E]+:\
+       :po=\E]=:se=\ER@:sf=^J:so=\ERD:ta=^I:up=\EA:ve=\ERC:\
+       :vi=\ERc:
+
+
+atari|atari st:\
+       :am:\
+       :co#80:it#8:li#25:\
+       :al=\EL:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :dl=\EM:\
+       :do=\EB:kd=\EB:kl=\ED:kr=\EC:ku=\EA:le=\ED:nd=\EC:\
+       :se=\Eq:so=\Ep:sr=\EI:ta=^I:up=\EA:
+uniterm|uniterm49|UniTerm VT220 emulator with 49 lines:\
+       :li#49:\
+       :is=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h\E[1;49r\E[49;1H:tc=vt220:
+
+
+amiga|Amiga ANSI:\
+       :am:bs:bw:xn:\
+       :co#80:li#24:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:RI=\E[%dC:SF=\E[%dS:SR=\E[%dT:UP=\E[%dA:\
+       :ae=^O:al=\E[L:as=^N:bl=^G:bt=\E[Z:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:dc=\E[P:dl=\E[M:do=\E[B:\
+       :ei=:ho=\E[H:ic=\E[@:im=:is=\E[20l:k0=\E9~:k1=\E0~:\
+       :k2=\E1~:k3=\E2~:k4=\E3~:k5=\E4~:k6=\E5~:k7=\E6~:\
+       :k8=\E7~:k9=\E8~:kb=^H:kd=\EB:kl=\ED:kr=\EC:ku=\EA:\
+       :le=\E[D:mb=\E[7;2m:md=\E[1m:me=\E[m:mh=\E[2m:\
+       :mk=\E[8m:mr=\E[7m:nd=\E[C:r1=\Ec:se=\E[m:sf=\E[S:\
+       :so=\E[7m:sr=\E[T:ue=\E[m:up=\E[A:us=\E[4m:ve=\E[ p:\
+       :vi=\E[0 p:
+
+ozzie|osborne|osborne1|osborne 1:\
+       :ms:ul:xt:\
+       :co#104:li#24:\
+       :al=\EE:bl=^G:ce=\ET:cl=^Z:cm=\E=%+ %+ :cr=^M:dc=\EW:\
+       :dl=\ER:do=^J:ei=:ic=\EQ:im=:kd=^J:kl=^H:kr=^L:ku=^K:\
+       :le=^H:nd=^L:se=\E(:sf=^J:so=\E):ue=\Em:up=^K:us=\El:
+
+
+minix|minix console:\
+       :co#80:it#8:li#25:\
+       :AL=\E[%dLce=\E[K:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:\
+       :IC=\E[%d@:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:al=\E[L:\
+       :cd=\E[0J:cl=\E[H\E[0J:cm=\E[%i%d;%dH:cr=^M:dc=\E[P:\
+       :dl=\E[M:do=\E[B:ei=:ho=\E[H:ic=\E[@:im=:k0=\E[Y:\
+       :k1=\E[V:k2=\E[U:k3=\E[T:k4=\E[S:k5=\E[G:kb=^H:\
+       :kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:ku=\E[A:le=^H:\
+       :mb=\E[5m:md=\E[1m:me=\E[0m:mr=\E[7m:nd=\E[C:nw=^M^J:\
+       :se=\E[0m:sf=^J:so=\E[7m:sr=\EM:ta=^I:ue=\E[0m:\
+       :up=\E[A:us=\E[4m:
+
+pc-coherent|pcz19|coherent|IBM PC console running Coherent:\
+       :am:mi:\
+       :co#80:it#8:li#25:\
+       :bl=^G:cd=\EJ:ce=\EK:cl=\EE:cm=\EY%+ %+ :cr=^M:\
+       :dc=\EN:do=\EB:ei=\EO:ho=\EH:im=\E@:kb=^H:kd=\EB:\
+       :kh=\EH:kl=\ED:kr=\EC:ku=\EA:le=^H:nd=\EC:se=\Eq:\
+       :sf=^J:so=\Ep:sr=\EI:ta=^I:up=\EA:
+
+pc-venix|venix|IBM PC console running Venix:\
+       :co#80:it#8:li#25:\
+       :al=\EL:bl=^G:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :\
+       :cr=^M:dl=\EM:do=^J:kb=^H:kd=\EP:kh=\EG:kl=\EK:\
+       :kr=\EM:ku=\EH:le=^H:nd=\EC:sf=^J:sr=\EI:ta=^I:\
+       :up=\EA:
+
+
+basis|BASIS108 computer with terminal translation table active:\
+       :cd=\EY:ce=\ET:cl=300\E*:do=5000\n:kb=^H:kd=^J:kl=^H:\
+       :kr=^L:ku=^K:se=\E):so=\E(:tc=adm3a:
+luna|luna68k|LUNA68K Bitmap console:\
+       :co#88:li#46:tc=ansi-mini:
+megatek|pegasus workstation terminal emulator:\
+       :am:os:\
+       :co#83:li#60:
+xerox820|x820|Xerox 820:\
+       :am:\
+       :co#80:li#24:\
+       :bl=^G:cd=^Q:ce=^X:cl=1^Z:cm=\E=%+ %+ :cr=^M:do=^J:\
+       :ho=^^:le=^H:nd=^L:sf=^J:up=^K:
+
+
+m2-nam|minitel|minitel-2|minitel-2-nam|France Telecom Minitel:\
+       :xn:\
+       :co#80:it#8:li#24:\
+       :ae=\E(B:al=\E[L:as=\E(0:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
+       :cm=\E[%i%d;%dH:dc=\E[P:dl=\E[M:ei=\E[4l:ho=\E[H:\
+       :im=\E[4h:ip=7:is=\E[1;24r\E[24;1H:k1=\EOP:k2=\EOQ:\
+       :k3=\EOR:k4=\EOS:kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:\
+       :ku=\E[A:le=^H:nd=\E[C:se=\E[m:sf=^J:so=\E[7m:sr=\EM:\
+       :ta=^I:ue=\E[m:up=\E[A:us=\E[4m:
+
+
+
+abm80|amtek business machines 80:\
+       :am:bw:\
+       :co#80:li#24:\
+       :al=\E^Z:bt=^T:cd=\E^X:ce=\E^O:cl=\E^\:\
+       :cm=\E\021%r%+ %+ :dl=\E^S:do=\E^K:ho=\E^R:le=^H:\
+       :nd=^P:up=\E^L:
+
+
+blit|jerq|blit running teletype rom:\
+       :am:eo:ul:xo:\
+       :co#87:it#8:li#72:\
+       :AL=\EF%+ :DC=\Ee%+ :DL=\EE%+ :IC=\Ef%+ :al=\EF!:\
+       :bl=^G:ce=\EK:cl=^L:cm=\EY%r%+ %+ :cr=^M:dc=\Ee!:\
+       :dl=\EE!:do=^J:ei=:ic=\Ef!:im=:k1=\Ex:k2=\Ey:k3=\Ez:\
+       :kb=^H:kd=\EB:kl=\ED:kr=\EC:ku=\EA:le=\ED:nd=\EC:\
+       :sf=^J:ta=^I:up=\EA:
+
+cbblit|fixterm|blit running columbus code:\
+       :co#88:\
+       :cd=\EJ:ei=\ER:ic@:im=\EQ:pO=\EP%03:pf=^T:po=^R:\
+       :se=\EV!:so=\EU!:ue=\EV":us=\EU":vb=\E^G:tc=blit:
+
+oblit|ojerq|first version of blit rom:\
+       :am:da:db:eo:mi:ul:xo:\
+       :co#88:it#8:li#72:\
+       :AL=\Ef%+ :DL=\Ee%+ :al=\EF:bl=^G:cd=\EJ:ce=\EK:\
+       :cl=^L:cm=\EY%r%+ %+ :cr=^M:dc=\EO:dl=\EE:do=^J:\
+       :ei=\ER:im=\EQ:kb=^H:le=\ED:nd=\EC:sf=^J:ta=^I:\
+       :up=\EA:vb=\E^G:
+
+
+
+bitgraph|bg2.0nv|bg3.10nv|bbn bitgraph 2.0 or later (normal video):\
+       :is=\E>\E[?5l\E[?7h:vb=\E[?5h\E[?5l:tc=bg2.0:
+bg2.0rv|bg3.10rv|bbn bitgraph 2.0 (reverse video):\
+       :is=\E>\E[?5h\E[?7h:vb=\E[?5l\E[?5h:tc=bg2.0:
+bg2.0|bg3.10|bbn bitgraph 2.0 or later (no init):\
+       :xn:\
+       :co#85:li#64:\
+       :al=\E[L:bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
+       :cm=%i\E[%d;%dH:cr=^M:cs=\E[%i%d;%dr:dl=\E[M:do=\E[B:\
+       :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:kd=\E[B:ke=\E>:\
+       :kl=\E[D:kr=\E[C:ks=\E=:ku=\E[A:l1=PF1:l2=PF2:l3=PF3:\
+       :l4=PF4:le=^H:nd=\E[C:rc=\E8:sc=\E7:se=\E[m:sf=\n:\
+       :so=\E[7m:ta=^I:up=\E[A:
+
+bg1.25rv|bbn bitgraph 1.25 (reverse video):\
+       :is=\E>\E[?5h\E[?7h:vb=\E[?5l\E[?5h:tc=bg1.25:
+bg1.25nv|bbn bitgraph 1.25 (normal video):\
+       :is=\E>\E[?5l\E[?7h:vb=\E[?5h\E[?5l:tc=bg1.25:
+bg1.25|bbn bitgraph 1.25:\
+       :co#85:li#64:\
+       :RA=\E[?7l:SA=\E[?7h:al=\E[L:bl=^G:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=%i\E[%d;%dH:cr=^M:dl=\E[M:do=\E[B:\
+       :k1=\EP:k2=\EQ:k3=\ER:k4=\ES:kd=\EB:ke=\E>:kl=\ED:\
+       :kr=\EC:ks=\E=:ku=\EA:l1=PF1:l2=PF2:l3=PF3:l4=PF4:\
+       :le=^H:ll=\E[64;1H:nd=\E[C:se=\E[m:sf=\n:so=\E[7m:\
+       :ta=^I:up=\E[A:
+
+
+cg7900|chromatics|chromatics 7900:\
+       :am:\
+       :co#80:li#40:\
+       :al=^A>2:bl=^G:cd=^Al:ce=^A`:cl=^L:\
+       :cm=\001M%r%d\\\054%d\\\054:cr=^M:dc=^A<1:dl=^A<2:\
+       :do=^J:ei=:ho=^\:ic=^A>1:im=:le=^H:ll=^A|:nd=^]:\
+       :se=\001C1\\\054\001c2\\\054:sf=^J:\
+       :so=\001C4\\\054\001c7\\\054:\
+       :te=\001W0\\\05440\\\05485\\\05448\\\054\014\001W0\\\0540\\\05485\\\05448\\\054\001M0\\\05440\\\054:\
+       :ti=\001P0\001O1\001R1\001C4\\\054\001c0\\\054\014\001M0\\\05442\\\054WARNING DOUBLE ENTER ESCAPE and \025\001C1\\\054\001c2\\\054\001W0\\\0540\\\05479\\\05439\\\054:\
+       :uc=\001\001_\001\200:up=^K:
+
+
+ca22851|computer automation 22851:\
+       :am:\
+       :co#80:li#24:\
+       :bl=^G:cd=^\:ce=^]:cl=\014:cm=\002%i%.%.:cr=^M:do=^J:\
+       :ho=^^:kd=^W:kh=^^:kl=^U:ku=^V:le=^U:nd=^I:sf=^J:\
+       :up=^V:
+
+
+cyb83|xl83|cybernex xl-83:\
+       :am:\
+       :co#80:li#24:\
+       :bl=^G:cd=\020:ce=\017:cl=\014:cm=\027%+ %+ :cr=^M:\
+       :do=^J:ho=^K:kd=^J:kl=^H:kr=^I:ku=^N:le=^H:nd=^I:\
+       :sf=^J:sr=^N:up=^N:
+cyb110|mdl110|cybernex mdl-110:\
+       :am:\
+       :co#80:li#24:\
+       :al=\016A\016\035:bl=^G:cd=\016@\026:ce=\016@\026:\
+       :cl=\030:cm=\020%+ %+ :cr=^M:dc=\016A\036:\
+       :dl=\016A\016\036:do=^J:ei=:ho=^Y:ic=\016A\035:im=:\
+       :le=^H:nd=^U:se=^NG:sf=^J:so=^NF:ta=\011:up=^Z:
+
+
+dp3360|datapoint|datapoint 3360:\
+       :am:\
+       :co#82:li#25:\
+       :bl=^G:cd=^_:ce=^^:cl=^]^_:cr=^M:do=^J:ho=^]:le=^H:\
+       :nd=^X:sf=^J:up=^Z:
+
+
+gt40|dec gt40:\
+       :os:\
+       :co#72:li#30:\
+       :bl=^G:cr=^M:do=^J:le=^H:
+gt42|dec gt42:\
+       :os:\
+       :co#72:li#40:\
+       :bl=^G:cr=^M:do=^J:le=^H:
+vt50|dec vt50:\
+       :co#80:li#12:\
+       :bl=^G:cd=\EJ:ce=\EK:cl=\EH\EJ:cr=^M:do=^J:le=^H:\
+       :nd=\EC:sf=^J:ta=^I:up=\EA:
+vt50h|dec vt50h:\
+       :co#80:li#12:\
+       :bl=^G:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :cr=^M:\
+       :do=^J:le=^H:nd=\EC:sf=^J:sr=\EI:ta=^I:up=\EA:
+vt61|vt-61|vt61.5|dec vt61:\
+       :co#80:li#24:\
+       :bl=^G:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :cr=\r:\
+       :do=^J:kd=\EB:kl=\ED:kr=\EC:ku=\EA:le=^H:nd=\EC:\
+       :sf=\n:sr=\EI:ta=^I:up=\EA:
+
+gigi|vk100|dec gigi graphics terminal:\
+       :am:xn:\
+       :co#84:li#24:\
+       :DO=\E[%dB:LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:SA=\E[?7h:\
+       :UP=\E[%dA:bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:\
+       :cm=\E[%i%d;%dH:cr=^M:do=^J:\
+       :is=\E>\E[?3l\E[?4l\E[?5l\E[?20l\E[?7h\E[?8h:k1=\EOP:\
+       :k2=\EOQ:k3=\EOR:k4=\EOS:kd=\EOB:ke=\E[?1l\E>:\
+       :kh=\E[H:kl=\EOD:kr=\EOC:ks=\E[?1h\E=:ku=\EOA:le=^H:\
+       :nd=\E[C:se=\E[m:sf=^J:so=\E[7;31m:sr=\EM:ta=^I:\
+       :ue=\E[m:up=\E[A:us=\E[4m:
+
+pro350|decpro|dec pro console:\
+       :co#80:it#8:li#24:\
+       :ae=\EG:as=\EF:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\EY%+ %+ :\
+       :do=\EB:ho=\EH:k0=\EE:k1=\EF:k2=\EG:k3=\EH:k4=\EI:\
+       :k5=\EJ:k6=\Ei:k7=\Ej:kd=\EB:kh=\EH:kl=\ED:kr=\EC:\
+       :ku=\EA:le=^H:nd=\EC:se=\E^N:so=\E^H:sr=\EI:ta=^I:\
+       :ue=\E^C:up=\EA:us=\E^D:
+
+dw1|decwriter I:\
+       :hc:os:\
+       :co#72:\
+       :bl=^G:cr=^M:do=^J:le=^H:sf=^J:
+dw2|decwriter|dw|decwriter II:\
+       :hc:os:\
+       :co#132:\
+       :bl=^G:cr=^M:do=^J:kb=^H:le=^H:sf=^J:
+
+dw3|la120|decwriter III:\
+       :hc:os:\
+       :co#132:\
+       :bl=^G:cr=^M:do=^J:\
+       :i1=\E(B\E[20l\E[w\E[0;132s\E[2g\E[z\E[66t\E[1;66r\E[4g\E>:\
+       :is=\E[9;17;25;33;41;49;57;65;73;81;89;97;105;113;121;129u\r:\
+       :kb=^H:le=^H:se=\E[w:sf=^J:so=\E[6w:ta=^I:
+dw4|decwriter IV:\
+       :am:hc:os:\
+       :co#132:\
+       :bl=^G:cr=^M:do=^J:is=\Ec:k0=\EOP:k1=\EOQ:k2=\EOR:\
+       :k3=\EOS:kb=^H:le=^H:sf=^J:ta=^I:
+
+ln03|dec ln03 laser printer:\
+       :hc:\
+       :co#80:li#66:\
+       :bl=^G:cr=^M:do=^J:hd=\EK:hu=\EL:nw=^M^J:se=\E[22m:\
+       :sf=^J:so=\E[1m:ta=^I:ue=\E[24m:us=\E[4m:
+ln03-w|dec ln03 laser printer 132 cols:\
+       :co#132:\
+       :bl=^G:cr=^M:do=^J:kb=^H:kd=^J:kl=^H:nw=^M^J:sf=^J:\
+       :ta=^I:tc=ln03:
+
+
+delta|dd5000|delta data 5000:\
+       :am:\
+       :co#80:li#27:\
+       :bl=^G:ce=^NU:cl=^NR:cm=\017%+^P%+^P:dc=^NV:do=^J:\
+       :ho=^NQ:le=^H:nd=^Y:sf=^J:up=^Z:
+
+
+ddr|rebus3180|ddr3180|Rebus/DDR 3180 vt100 emulator:\
+       :am:xn:\
+       :co#80:it#8:li#24:vt#3:\
+       :RA=\E[7l:SA=\E[7l:cd=50\E[J:ce=3\E[K:cl=50\E[H\E[2J:\
+       :cm=5\E[%i%d;%dH:cs=\E[%i%d;%dr:do=^J:ho=\E[H:\
+       :is=\E[1;24r\E[24;1H:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\
+       :kb=^H:kd=\E[B:ke=\E[?1l\E>:kl=\E[D:kr=\E[C:\
+       :ks=\E[?1h\E=:ku=\E[A:le=^H:mb=2\E[5m:md=2\E[1m:\
+       :me=2\E[m:mr=2\E[7m:nd=2\E[C:\
+       :r1=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:rc=\E8:\
+       :rf=/usr/share/lib/tabset/vt100:sc=\E7:se=\E[m:\
+       :sf=5\ED:so=\E[7m:sr=5\EM:ta=^I:ue=2\E[m:up=2\E[A:\
+       :us=2\E[4m:
+
+
+terminet1200|terminet300|tn1200|tn300|terminet|GE terminet 1200:\
+       :hc:os:\
+       :co#120:\
+       :bl=^G:cr=^M:do=^J:sf=^J:
+
+
+h19-a|heath-ansi|heathkit-a|heathkit h19 ansi mode:\
+       :am:mi:ms:\
+       :co#80:it#8:li#24:\
+       :RA=\E[?7l:SA=\E[?7h:ae=\E[11m:al=\E[1L:as=\E[10m:\
+       :bl=^G:cd=\E[J:ce=\E[K:cl=\E[2J:cm=\E[%i%d;%dH:cr=^M:\
+       :dc=\E[1P:dl=\E[1M:do=\E[1B:ei=\E[4l:ho=\E[H:\
+       :im=\E[4h:\
+       :is=\E<\E[>1;2;3;4;5;6;7;8;9l\E[m\E[11m\E[?7h:\
+       :k1=\EOS:k2=\EOT:k3=\EOU:k4=\EOV:k5=\EOW:k6=\EOP:\
+       :k7=\EOQ:k8=\EOR:kb=^H:kd=\E[1B:kh=\E[H:kl=\E[1D:\
+       :kr=\E[1C:ku=\E[1A:l6=blue:l7=red:l8=white:le=^H:\
+       :nd=\E[1C:se=\E[m:sf=^J:so=\E[7m:sr=\EM:ta=^I:\
+       :up=\E[1A:ve=\E[>4l:vs=\E[>4h:
+h19-bs|heathkit w/keypad shifted:\
+       :ke=\Eu:ks=\Et:tc=h19-b:
+h19-smul|heathkit w/keypad shifted/underscore cursor:\
+       :ke=\Eu:ks=\Et:tc=h19-u:
+h19|heath|h19-b|heathkit|heath-19|z19|zenith|heathkit h19:\
+       :am:es:hs:mi:ms:\
+       :co#80:it#8:li#24:\
+       :ae=\EG:al=\EL:as=\EF:bl=^G:cd=\EJ:ce=\EK:cl=\EE:\
+       :cm=\EY%+ %+ :cr=^M:dc=\EN:dl=\EM:do=\EB:ei=\EO:\
+       :fs=\Ek\Ey5:ho=\EH:im=\E@:ip=1.5<1.5/>:k1=\ES:k2=\ET:\
+       :k3=\EU:k4=\EV:k5=\EW:k6=\EP:k7=\EQ:k8=\ER:kb=^H:\
+       :kd=\EB:kh=\EH:kl=\ED:kr=\EC:ku=\EA:l6=blue:l7=red:\
+       :l8=white:le=^H:nd=\EC:se=\Eq:sf=^J:so=\Ep:sr=\EI:\
+       :ta=^I:ts=\Ej\Ex5\EY8%p1%{32}%+%c\Eo\Eo:up=\EA:\
+       :ve=\Ey4:vs=\Ex4:
+h19-u|heathkit with underscore cursor:\
+       :ve@:vs@:tc=h19-b:
+h19-us|h19us|heathkit w/keypad shifted/underscore cursor:\
+       :ke=\Eu:ks=\Et:tc=h19-u:
+h19-g|h19g|heathkit w/block cursor:\
+       :ve=\Ex4:tc=h19-b:
+alto-h19|altoh19|altoheath|alto-heath|alto emulating heathkit h19:\
+       :li#60:\
+       :al=\EL:dl=\EM:tc=h19:
+
+z29|zenith29|z29b|zenith z29b:\
+       :am:ms:\
+       :co#80:li#24:\
+       :ae=\EF:al=\EL:as=\EG:bl=^G:bt=\E-:cd=\EJ:ce=\EK:\
+       :cl=\EE:cm=\EY%+ %+ :cr=^M:dc=\EN:dl=\EM:do=\EB:ei=:\
+       :ho=\EH:ic=\E<\E[1@\E[?2h:im=:is=\E<\E[?2h\Ev:k0=\E~:\
+       :k1=\ES:k2=\ET:k3=\EU:k4=\EV:k5=\EW:k6=\EP:k7=\EQ:\
+       :k8=\ER:k9=\E0I:kb=^H:kd=\EB:kh=\EH:kl=\ED:kr=\EC:\
+       :ku=\EA:l0=home:le=^H:nd=\EC:se=\Eq:sf=\n:so=\Ep:\
+       :sr=\EI:ta=^I:ue=\Es0:up=\EA:us=\Es8:ve=\Ey4:vs=\Ex4:
+z29a|z29a-kc-bc|h29a-kc-bc|heath/zenith 29 in ansi mode:\
+       :es:hs:\
+       :co#80:it#8:li#24:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:LE=\E[%dD:\
+       :RI=\E[%dC:UP=\E[%dA:bl=^G:cd=\E[J:ce=\E[K:cl=\E[2J:\
+       :cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:ct=\E[3g:\
+       :dc=\E[1P:do=^J:ds=\E[>1l:fs=\E[u\E[>5l:ho=\E[H:\
+       :if=/usr/share/tabset/zenith29:k0=\E[~:k1=\EOS:\
+       :k2=\EOT:k3=\EOU:k4=\EOV:k5=\EOW:k6=\EOP:k7=\EOQ:\
+       :k8=\EOR:k9=\EOX:kC=\E[J:kS=\E[J:kb=^H:kd=\EOB:\
+       :kh=\E[H:kl=\EOD:kr=\EOC:ku=\EOA:l0=help:le=^H:\
+       :mb=\E[5m:md=\E[2m:me=\E[m:mh=\E[2m:mr=\E[7m:nd=\E[C:\
+       :nw=^M\ED:ps=\E#7:\
+       :r1=\E<\E[1;24r\E[24;1H\E[?7h\E[>4h\E[>1;2;3;5;6;7;8;9l\E[m\E[11m:\
+       :rc=\E[r:sc=\E[s:se=\E[m:sf=\ED:so=\E[7;2m:sr=\EM:\
+       :st=\EH:ta=^I:te=\E[?7h:ti=\E[?7l:\
+       :ts=\E[s\E[>5;1h\E[25;%i%dH\E[1K:ue=\E[m:up=\E[A:\
+       :us=\E[4m:
+z29a-kc-uc|h29a-kc-uc|z29 ansi mode with keyckick and underscore cursor:\
+       :r1=\E<\E[1;24r\E[24;1H\E[?7h\E[>1;2;3;4;5;6;7;8;9l\E[m\E[11m:tc=z29a:
+z29a-nkc-bc|h29a-nkc-bc|z29 ansi mode with block cursor and no keyclick:\
+       :r1=\E<\E[1;24r\E[24;1H\E[?7h\E[>2;4h\E[>1;3;5;6;7;8;9l\E[m\E[11m:tc=z29a:
+z29a-nkc-uc|h29a-nkc-uc|z29 ansi mode with underscore cursor and no keyclick:\
+       :r1=\E<\E[1;24r\E[24;1H\E[?7h\E[>2h\E[>1;3;4;5;6;7;8;9l\E[m\E[11m:tc=z29a:
+z39-a|z39a|zenith39-a|zenith39-ansi|Zenith 39 in ANSI mode:\
+       :5i:am:es:hs:mi:ms:xo:\
+       :co#80:li#24:\
+       :%1=\E[~:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:\
+       :K1=\EOw:K2=\EOy:K3=\EOu:K4=\EOq:K5=\EOs:LE=\E[%dD:\
+       :RI=\E[%dC:UP=\E[%dA:\
+       :ac=``aaffggjjkkllmmnnooqqssttuuvvwwxx~~0a:ae=\E(B:\
+       :al=\E[1L:as=\E(0:bl=^G:bt=\E[1Z:cb=\E[1K:cd=\E[0J:\
+       :ce=\E[0K:cl=\E[2J\E[H:cm=\E[%i%d;%dH:cr=^M:\
+       :cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[1P:dl=\E[1M:do=\E[B:\
+       :ds=\E[>1l:ei=\E[4l:fs=\E[u:ho=\E[H:im=\E[4h:\
+       :is=\E<\E[>1;3;5;6;7l\E[0m\E[2J:k1=\EOS:k2=\EOT:\
+       :k3=\EOU:k4=\EOV:k5=\EOW:k6=\EOP:k7=\EOQ:k8=\EOR:\
+       :k9=\EOX:kS=\E[J:kb=^H:kd=\E[B:ke=\E[>7l:kh=\E[H:\
+       :kl=\E[D:kr=\E[C:ks=\E[>7h:ku=\E[A:le=^H:ll=\E[24;1H:\
+       :mb=\E[5m:md=\E[1m:me=\E[0m:mh=\E[2m:mr=\E[7m:\
+       :nd=\E[C:pf=\E[4i:po=\E[5i:ps=\E[?19h\E[i:\
+       :r2=\E<\Ec\200:rc=\E[u:sc=\E[s:se=\E[0m:sf=^J:\
+       :so=\E[7m:st=\EH:ta=^I:ts=\E[s\E[>1h\E[25;%i%p1%dH:\
+       :ue=\E[0m:up=\E[A:us=\E[4m:ve=\E[>5l:vi=\E[>5h:
+
+z100|h100|z110|z-100|h-100|heath/zenith z-100 pc with color monitor:\
+       :ve=\Ey4\Em70:vs=\Ex4\Em71:tc=z100bw:
+z100bw|h100bw|z110bw|z-100bw|h-100bw|heath/zenith z-100 pc:\
+       :mi:ms:\
+       :co#80:it#8:li#24:\
+       :ae=\EG:al=5*\EL:as=\EF:cd=\EJ:ce=\EK:cl=5*\EE:\
+       :cm=1*\EY%+ %+ :dc=1*\EN:dl=5*\EM:do=\EB:ei=\EO:\
+       :ho=\EH:im=\E@:k0=\EJ:k1=\ES:k2=\ET:k3=\EU:k4=\EV:\
+       :k5=\EW:k6=\EP:k7=\EQ:k8=\ER:k9=\EOI:kb=^H:kd=\EB:\
+       :kh=\EH:kl=\ED:kr=\EC:ku=\EA:le=^H:nd=\EC:se=\Eq:\
+       :so=\Ep:sr=\EI:ta=^I:up=\EA:ve=\Ey4:vs=\Ex4:
+p19|h19-b with il1/dl1:\
+       :al=2*\EL:dl=2*\EM:tc=h19-b:
+ztx|ztx11|zt-1|htx11|ztx-1-a|ztx-10 or 11:\
+       :am:es:hs:\
+       :co#80:it#8:li#24:\
+       :al=\EL:cd=\EJ:ce=\EK:cl=\EE:cm=\EY%+ %+ :dl=\EM:\
+       :do=^J:ds=\Ey1:fs=\Ek\Ey5:ho=\EH:\
+       :is=\Ej\EH\Eq\Ek\Ev\Ey1\Ey5\EG\Ey8\Ey9\Ey>:k0=\ES:\
+       :k1=\EB:k2=\EU:k3=\EV:k4=\EW:k5=\EP:k6=\EQ:k7=\ER:\
+       :kb=^H:kd=\EB:kl=\ED:kr=\EC:ku=\EA:le=^H:nd=\EC:\
+       :se=\Eq:so=\Es5:sr=\EI:ta=^I:\
+       :ts=\Ej\Ex5\Ex1\EY8%+ \Eo:ue=\Eq:up=\EA:us=\Es2:
+
+
+ims950-b|bare ims950 no init string:\
+       :is@:tc=ims950:
+ims950|ims televideo 950 emulation:\
+       :xn@:\
+       :k0@:k1@:k2@:k3@:k4@:k5@:k6@:k7@:k8@:k9@:kb@:kd@:kh@:\
+       :kl@:kr@:ku@:vb@:tc=tvi950:
+ims950-rv|ims tvi950 rev video:\
+       :xn@:\
+       :k0@:k1@:k2@:k3@:k4@:k5@:k6@:k7@:k8@:k9@:kb@:kd@:kh@:\
+       :kl@:kr@:ku@:vb@:tc=tvi950-rv:
+ims-ansi|ultima2|ultimaII|IMS Ultima II:\
+       :am:\
+       :co#80:it#8:li#24:\
+       :cd=\E[0J:ce=\E[0K:cl=\E[H\E[2J:cm=\E[%i%2;%2H:\
+       :do=\ED:if=/usr/share/tabset/vt100:\
+       :is=\E[m\E[>14l\E[?1;?5;20l\E>\E[1m\r:kd=\E[B:\
+       :kh=\E[H:kl=\E[D:kr=\E[C:ku=\E[A:le=^H:se=\E[m\E[1m:\
+       :so=\E[7m:sr=\EM:ta=^I:ue=\E[m\E[1m:up=\EM:us=\E[4m:
+
+
+superbrain|intertec superbrain:\
+       :am:bw:\
+       :co#80:li#24:\
+       :bl=^G:cd=\E~k<10*>:ce=\E~K:cl=\014:cm=\EY%+ %+ :\
+       :cr=^M:do=^J:kd=^J:kl=^U:kr=^F:ku=^K:le=^H:nd=^F:\
+       :sf=^J:ta=^I:te=^L:ti=^L:up=^K:
+intertube|intertec|Intertec InterTube:\
+       :am:\
+       :co#80:li#25:\
+       :bl=^G:cl=^L:cm=\EY%+ %+ :cr=^M:do=^J:ho=^A:le=^H:\
+       :nd=^F:se=\E0@:sf=^J:so=\E0P:up=^Z:
+intertube2|intertec data systems intertube 2:\
+       :ce=\EK:ch=\020%+^J:cm=\016%.\020%+^J:cv=\013%.:\
+       :ll=^K^X\r:tc=intertube:
+
+
+
+graphos|graphos III:\
+       :am:mi:\
+       :co#80:it#8:li#24:\
+       :AL=\E[%dL:DL=\E[%dM:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:\
+       :UP=\E[%dA:al=\E[L:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:\
+       :cm=\E[%i%d;%dH:cr=^M:dc=\E[P:dl=\E[M:dm=\E[4h:\
+       :do=\E[B:ed=\E[4l:ei=\E[4l:ho=\E[H:\
+       :if=/usr/lib/tabset/init.graphos:im=\E[4h:k1=\EOP:\
+       :k2=\EOQ:k3=\EOR:k4=\EOS:kb=^H:kd=\E[B:kh=\E[H:\
+       :kl=\E[D:kr=\E[C:ku=\E[A:le=^H:nd=\E[C:nw=^M\ED:\
+       :rc=\E8:rf=/usr/lib/tabset/init.graphos:sc=\E7:\
+       :se=\E[m:sf=\ED:so=\E[7m:sr=\EM:ta=^I:up=\E[A:\
+       :ve=\Ez56;2;0;0z\Ez73z\Ez4;1;1z:\
+       :vs=\Ez4;2;1z\Ez56;2;80;24z:
+graphos-30|graphos III with 30 lines:\
+       :li#30:\
+       :vs=\Ez4;2;1z\Ez56;2;80;30z:tc=graphos:
+
+
+modgraph|mod|modgraph terminal emulating vt100:\
+       :xn@:\
+       :co#80:li#24:\
+       :is=\E^9;0s\E^7;1s\E[3g\E^11;9s\E^11;17s\E^11;25s\E^11;33s\E^11;41s\E^11;49s\E^11;57s\E^11;65s\E^11;73s\E^11;81s\E^11;89s:\
+       :rf@:sr=5\EM\E[K:vs=\E^9;0s\E^7;1s:tc=vt100:
+modgraph2|modgraph gx-1000 80x24 with keypad not enabled:\
+       :am:da:db:\
+       :co#80:it#8:li#24:\
+       :cd=50\EJ:ce=3\EK:cl=50\EH\EJ:cm=5\EY%+ %+ :\
+       :is=\E<\E^5;2s\E^7;1s\E[3g\E^11;9s\E^11;17s\E^11;25s\E^11;33s\E^11;41s\E^11;49s\E^11;57s\E^11;65s\E^11;73s\E^11;81s\E^11;89s\E^12;0s\E^14;2s\E^15;9s\E^25;1s\E^9;1s\E^27;1:\
+       :le=^H:nd=2\EC:sr=5\EI:ta=^I:up=2\EA:
+
+
+mt70|mt-70|Morrow MD-70; native Morrow mode:\
+       :am:mi:ms:xo:\
+       :co#80:it#8:li#24:\
+       :%1=^AO\r:F1=^A`\r:F2=^Aa\r:F3=^Ab\r:F4=^Ac\r:\
+       :F5=^Ad\r:F6=^Ae\r:F7=^Af\r:F8=^Ag\r:F9=^Ah\r:\
+       :FA=^Ai\r:ac=+z\\\054{.yOi-x`|jGkFlEmDnHtLuKvNwMxIqJ:\
+       :ae=\E%:al=\EE:as=\E$:bl=^G:bt=\EI:cd=\EY:ce=\ET:\
+       :cl=^Z:cm=\E=%+ %+ :cr=^M:ct=\E0:dc=\EW:dl=\ER:do=^J:\
+       :ei=:ho=^^:i1=\E"2\EG0\E]:ic=\EQ:im=:k1=^A@\r:\
+       :k2=^AA\r:k3=^AB\r:k4=^AC\r:k5=^AD\r:k6=^AE\r:\
+       :k7=^AF\r:k8=^AG\r:k9=^AH\r:k;=^AI\r:kB=^A^Z\r:\
+       :kC=^An\r:kD=\177:kb=^H:kd=^AK\r:kh=^AN\r:kl=^AL\r:\
+       :kr=^AM\r:ku=^AJ\r:le=^H:me=\EG0:mh=\EG2:mr=\EG4:\
+       :nd=^L:nw=^_:se=\EG0:sf=^J:so=\EG4:ta=^I:\
+       :ti=\E"2\EG0\E]:up=^K:us=\EG1:vb=\EK1\EK0:ve=\E"2:\
+       :vi=\E"0:
+
+
+omron|Omron 8025AG:\
+       :am:da:db:\
+       :co#80:li#24:\
+       :al=\EL:bl=^G:cd=\ER:ce=\EK:cl=\EJ:cr=^M:dc=\EP:\
+       :dl=\EM:do=^J:ho=\EH:le=^H:nd=\EC:se=\E4:sf=\ES:\
+       :so=\Ef:sr=\ET:up=\EA:vs=\EN:
+
+
+vsc|Signetics Vsc Video driver by RMC:\
+       :am:ms:\
+       :co#80:it#8:li#26:\
+       :ce=\E[K:cl=50\E[;H\E[2J:cm=\E[%i%d;%dH:cr=^M:do=^J:\
+       :ho=\E[H:kb=^H:kd=^J:kl=^H:le=^H:me=^_!:mr=^_ :\
+       :nd=\E[C:nw=^M^J:se=^_!:sf=^J:so=^_ :ta=^I:ue=^_#:\
+       :up=\E[A:us=^_":
+
+
+soroc120|iq120|soroc|soroc iq120:\
+       :cd=\EY:ce=\ET:cl=\E*:do=^J:kd=^J:kl=^H:kr=^L:ku=^K:tc=adm3a:
+soroc140|iq140|soroc iq140:\
+       :am:mi:\
+       :co#80:li#24:\
+       :al=\Ee:bl=^G:bt=\EI:cd=\Ey:ce=\Et:cl=\E+:\
+       :cm=\E=%+ %+ :cr=^M:dc=\Ew:dl=\Er:do=^J:ei=\E8:ho=^^:\
+       :im=\E9:k0=^A0\r:k1=^A@\r:k2=^AA\r:k3=^AB\r:k4=^AC\r:\
+       :k5=^AD\r:k6=^AE\r:k7=^AF\r:k8=^AG\r:k9=^AH\r:kb=^H:\
+       :kh=^^:kr=^L:ku=^K:le=^H:ll=^^^K:nd=^L:se=\E\177:\
+       :sf=^J:so=\E\177:ue=\E^A:up=^K:us=\E^A:
+
+
+swtp|ct82|southwest technical products ct82:\
+       :am:\
+       :co#82:li#20:\
+       :al=^^Y:bl=^G:cd=^V:ce=^F:cl=^L:cm=\013%r%.%.:cr=^M:\
+       :dc=^^H:dl=^Z:do=^J:ei=:ho=^P:ic=^^X:im=:\
+       :is=\034\022\036\023\036\004\035\027\011\023\036\035\036\017\035\027\022\011:\
+       :le=^D:ll=^C:nd=^S:se=^^^F:sf=^N:so=^^^V:sr=^O:up=^A:
+
+
+synertek|ktm|synertek380|synertek ktm 3/80 tubeless terminal:\
+       :am:\
+       :co#80:li#24:\
+       :cd=\EJ:ce=\EK:cl=^Z:cm=\E=%+ %+ :le=^H:nd=^L:up=^K:
+
+
+tab132|tab|tab132-15|tab 132/15:\
+       :da:db:\
+       :co#80:dN@:li#24:lm#96:\
+       :al=\E[L:cm=\E[%i%d;%dH:dc=\E[P:dl=\E[M:do=^J:\
+       :ei=\E[4l:im=\E[4h:is=\E[?7h\E[?3l\E[?5l:kd=\E[B:ke@:\
+       :kl=\E[D:ks@:ku=\E[A:tc=vt100:
+tab132-w|tab132 in wide mode:\
+       :co#132:\
+       :is=\E[?7h\E[?3h\E[?5l:tc=tab132:
+tab132-rv|tab132 in reverse-video mode:\
+       :is=\E[?7h\E[?3l\E[?5h:tc=tab132:
+tab132-w-rv|tab132 in reverse-video/wide mode:\
+       :is=\E[?7h\E[?3h\E[?5h:tc=tab132-w:
+
+
+
+t3700|dumb teleray 3700:\
+       :co#80:li#24:\
+       :bl=^G:cl=^L:cr=^M:do=^J:le=^H:sf=^J:
+t3800|teleray 3800 series:\
+       :co#80:it#8:li#24:\
+       :bl=^G:cd=\EJ:ce=\EK:cl=^L:cm=\EY%+ %+ :cr=^M:do=^J:\
+       :ho=\EH:le=^H:ll=\EY7 :nd=\EC:sf=^J:ta=^I:up=^K:
+t1061|teleray|teleray 1061:\
+       :am:km:xs:xt:\
+       :co#80:it#8:li#24:sg#1:ug#1:\
+       :al=\EL:bl=^G:cd=\EJ:ce=\EK:cl=\014:cm=\EY%+ %+ :\
+       :cr=^M:ct=\EG:dc=\EQ:dl=\EM:do=^J:ei=:ho=\EH:ic=\EP:\
+       :im=:ip=:\
+       :is=\Ee\EU01^Z1\EV\EU02^Z2\EV\EU03^Z3\EV\EU04^Z4\EV\EU05^Z5\EV\EU06^Z6\EV\EU07^Z7\EV\EU08^Z8\EV\Ef:\
+       :k1=^Z1:k2=^Z2:k3=^Z3:k4=^Z4:k5=^Z5:k6=^Z6:k7=^Z7:\
+       :k8=^Z8:le=^H:nd=\EC:se=\ER@:sf=^J:so= \ERD:st=\EF:\
+       :ta=^I:ue=\ER@:up=\EA:us=\ERH:
+t1061f|teleray 1061 with fast PROMs:\
+       :al=\EL:dl=\EM:ip@:tc=t1061:
+t10|teleray 10 special:\
+       :km:xs:xt:\
+       :co#80:it#8:li#24:sg#2:ug#2:\
+       :al=\EL:cd=\EJ:ce=\EK:cl=30\Ej:cm=\EY%+ %+ :dc=\EQ:\
+       :dl=\EM:ei=:ho=\EH:ic=\EP:im=:le=^H:nd=\EC:pc=\200:\
+       :se=\ER@:sf=\Eq:so=\ERD:sr=\Ep:ta=^I:ue=\ER@:up=\EA:\
+       :us=\ERH:
+t16|teleray 16:\
+       :am:da:db:mi:xs:xt:\
+       :co#80:li#24:\
+       :al=\E[L:bl=^G:cd=\E[0J:ce=\E[0K:cl=\E[H\E[2J:\
+       :cm=%i\E[%d;%df:cr=^M:dc=\E[P:dl=\E[M:do=\E[B:\
+       :ei=\E[4l:ho=\E[H:im=\E[4h:k1=^Z1:k2=^Z2:k3=^Z3:\
+       :k4=^Z4:k5=^Z5:k6=^Z6:k7=^Z7:k8=^Z8:k9=^Z9:k;=^Z0:\
+       :le=^H:nd=\E[C:se=\E[m:sf=^J:so=\E[7m:sr=\E[T:ta=^I:\
+       :te=\E[V\E[24;1f\E[?38h:ti=\E[U\E[?38l:ue=\E[m:\
+       :up=\E[A:us=\E[4m:
+
+
+ti700|ti733|ti735|ti745|ti800|ti silent 700/733/735/745 or omni 800:\
+       :hc:os:\
+       :co#80:\
+       :bl=^G:cr=\r:do=^J:le=^H:sf=^J:
+
+ti924|Texas Instruments 924 VDT 8859/1 7 bit CTRL:\
+       :am:xo:\
+       :co#80:it#8:li#24:\
+       :al=\E[L:bl=^G:cd=\E[J:ce=\E[K:cl=\E[2J\E[H:\
+       :cm=%i\E[%d;%dH:cr=^M:cs=%i\E[%d;%dr:ct=\E[3g:\
+       :dl=\E[M:do=\E[B:ho=\E[H:k1=\EOP:k2=\EOQ:k3=\EOR:\
+       :k4=\EOS:k5=\E[16~:k6=\E[17~:k7=\E[18~:k8=\E[19~:\
+       :k9=\E[20~:kD=\E[P:kI=\E[@:kb=^H:kd=\E[B:kl=\E[D:\
+       :kr=\E[C:ku=\E[A:le=\E[D:mb=\E[5m:md=\E[1m:me=\E[m:\
+       :mr=\E[7m:nd=\E[C:rc=\E8:sc=\E7:se=\E[m:sf=\ED:\
+       :so=\E[7m:sr=\EM:st=\EH:ta=^I:ue=\E[m:up=\E[A:\
+       :us=\E[4m:ve=\E[?25h:vi=\E[?25l:vs=\E[?31h:
+ti924-8|Texas Instruments 924 VDT 8859/1 8 bit CTRL:\
+       :am:xo:\
+       :co#80:it#8:li#24:\
+       :al=\E[L:bl=^G:cd=\E[J:ce=\E[K:cl=\E[2J\E[H:\
+       :cm=%i\E[%d;%dH:cr=^M:cs=%i\E[%d;%dr:ct=\E[3g:\
+       :dl=\E[M:do=\E[B:ho=\E[H:k1=P\217>:k2=Q\217>:\
+       :k3=R\217>:k4=S\217>:k5=~\23316>:k6=~\23317>:\
+       :k7=~\23318>:k8=~\23319>:k9=~\23320>:kD=P\233>:\
+       :kI=@\233>:kb=^H:kd=\E[B:kl=\E[D:kr=\E[C:ku=\E[A:\
+       :le=\E[D:mb=\E[5m:md=\E[1m:me=\E[m:mr=\E[7m:nd=\E[C:\
+       :rc=\E8:sc=\E7:se=\E[m:sf=\ED:so=\E[7m:sr=\EM:st=\EH:\
+       :ta=^I:ue=\E[m:up=\E[A:us=\E[4m:ve=\E[?25h:\
+       :vi=\E[?25l:vs=\E[?31h:
+ti924w|Texas Instruments 924 VDT 7 bit - 132 column mode:\
+       :co#132:tc=ti924:
+ti924-8w|Texas Instruments 924 VDT 8 bit - 132 column mode:\
+       :co#132:tc=ti924-8:
+ti931|Texas Instruments 931 VDT:\
+       :am:xo:\
+       :co#80:li#24:\
+       :al=\EN:bl=^G:cd=\EJ:ce=\EI:cl=\EL:cm=\EY%+ %+ :\
+       :cr=^M:dc=\EQ:dl=\EO:do=\EB:ei=:ho=\EH:ic=\ER\EP\EM:\
+       :im=:is=\EGB\E(@B@@\E):k1=\Ei1:k2=\Ei2:k3=\Ei3:\
+       :k4=\Ei4:k5=\Ei5:k6=\Ei6:k7=\Ei7:k8=\Ei8:k9=\Ei9:\
+       :kA=\EN:kD=\EQ:kI=\EP:kL=\EO:kd=\EB:kl=\ED:kr=\EC:\
+       :ku=\EA:le=\ED:mb=\E4P:me=\E4@:mk=\E4H:mr=\E4B:\
+       :nd=\EC:se=\E4@:sf=\Ea:so=\E4A:sr=\Eb:ue=\E4@:up=\EA:\
+       :us=\E4D:ve=\E4@:
+ti926|Texas Instruments 926 VDT 8859/1 7 bit CTRL:\
+       :cs@:sf=\E[1S:sr=\E[1T:tc=ti924:
+ti926-8|Texas Instruments 926 VDT 8859/1 8 bit CTRL:\
+       :cs@:sf=\2331S:sr=\2331T:tc=ti924-8:
+ti_ansi|basic entry for ti928:\
+       :am:eo:ut:xn:xo:\
+       :Co#8:co#80:it#8:li#25:pa#64:\
+       :@7=\E[F:Sb=\E[4%dm:Sf=\E[3%dm:al=\E[L:bl=^G:bt=\E[Z:\
+       :cd=\E[J:ce=\E[K:cl=\E[2J\E[H:cm=\E[%i%d;%dH:cr=^M:\
+       :cs=\E[%i%d;%dr:dc=\E[P:dl=\E[M:do=\E[B:ei=:ho=\E[H:\
+       :ic=\E[@:im=:k0=\E[V:k1=\E[M:k2=\E[N:k3=\E[O:k4=\E[P:\
+       :k5=\E[Q:k6=\E[R:k7=\E[S:k8=\E[T:k9=\E[U:kN=\E[G:\
+       :kP=\E[I:kb=^H:kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:\
+       :ku=\E[A:le=^H:mb=\E[5m:md=\E[1m:me=\E[m:nd=\E[C:\
+       :op=\E[37;40m:se=\E[m:sf=\E[S:so=\E[7m:sr=\E[T:ta=^I:\
+       :ue=\E[m:up=\E[A:us=\E[4m:
+ti928|Texas Instruments 928 VDT 8859/1 7 bit CTRL:\
+       :%9=\E[35~:@7=\E_1\E\\:@8=\E[8~:F1=\E[29~:F2=\E[31~:\
+       :F3=\E[32~:F5=\E[34~:k1=\E[17~:k2=\E[18~:k3=\E[19~:\
+       :k4=\E[20~:k5=\E[21~:k6=\E[23~:k7=\E[24~:k8=\E[25~:\
+       :k9=\E[26~:k;=\E[28~:kD=\E[P:kI=\E[@:kN=\E[S:kP=\E[T:tc=ti_ansi:
+ti928-8|Texas Instruments 928 VDT 8859/1 8 bit CTRL:\
+       :%9=\23335~:@7=\2371\234:@8=\2338~:F1=\23329~:\
+       :F2=\23331~:F3=\23332~:F5=\23334~:k1=\23317~:\
+       :k2=\23318~:k3=\23319~:k4=\23320~:k5=\23321~:\
+       :k6=\23323~:k7=\23324~:k8=\23325~:k9=\23326~:\
+       :k;=\23328~:kD=\233P:kI=\233@:kN=\233S:kP=\233T:\
+       :kh=\233H:tc=ti_ansi:
+
+
+zen30|z30|zentec 30:\
+       :am:mi:ul:\
+       :co#80:li#24:\
+       :al=\EE:bl=^G:cd=\EY:ce=\ET:cl=\E*:cm=\E=%+ %+ :\
+       :cr=^M:dc=\EW:dl=\ER:do=^J:ei=\Er:ho=^^:im=\Eq:le=^H:\
+       :nd=^L:se=\EG0:sf=^J:so=\EG6:up=^K:
+zen50|z50|zentec zephyr:\
+       :am:\
+       :co#80:li#24:sg#1:\
+       :al=\EE:cd=\EY:ce=\ET:cl=\E+:cm=\E=%+ %+ :dc=\EW:\
+       :dl=\ER:ei=:ic=\EQ:im=:kd=^J:kh=^^:kl=^H:kr=^L:ku=^K:\
+       :le=^H:se=\EGO:so=\EG4:up=^K:
+
+
+
+masscomp|masscomp workstation console:\
+       :km:mi:\
+       :co#80:it#8:li#24:\
+       :al=\E[L:cd=\E[J:ce=\E[K:cl=\E[2J:cm=\E[%i%d;%dH:\
+       :dc=\E[P:dl=\E[M:do=\E[B:ei=\E[4l:im=\E[4h:\
+       :is=\EGc\EGb\EGw:kb=^H:kd=\EOB:kl=\EOD:kr=\EOC:\
+       :ku=\EOA:le=^H:nd=\E[C:se=\E[m:so=\E[7m:ta=^I:\
+       :ue=\EGau:up=\E[A:us=\EGu:
+masscomp1|masscomp large screen version 1:\
+       :co#104:li#36:tc=masscomp:
+masscomp2|masscomp large screen version 2:\
+       :co#64:li#21:tc=masscomp:
+
+
+qdss|qdcons|qdss glass tty:\
+       :am:\
+       :co#128:li#57:\
+       :cl=1\032:cm=\E=%.%.:do=^J:le=^H:nd=^L:up=^K:
+
+
+
+ctrm|C terminal emulator:\
+       :am:ut:xo:\
+       :Co#8:NC#2:Nl#0:co#80:lh#0:li#24:lm#0:lw#0:pa#63:\
+       :pb#19200:vt#6:\
+       :al=\EL:bl=^G:bt=\Ei:cd=\EJ:ce=\EK:ch=\E&a%dC:\
+       :cl=\EH\EJ:cm=\E&a%r%dc%dY:cr=^M:ct=\E3:cv=\E&a%dY:\
+       :dc=\EP:dl=\EM:do=^J:ei=\ER:im=\EQ:ip=:is=\E&jA\r:\
+       :k1=\Ep\r:k2=\Eq\r:k3=\Er\r:k4=\Es\r:k5=\Et\r:\
+       :k6=\Eu\r:k7=\Ev\r:k8=\Ew\r:kb=^H:kd=\Ew\r:ke=\E&jA:\
+       :kh=\Ep\r:kl=\Eu\r:kr=\Ev\r:ks=\E&jB:ku=\Et\r:le=^H:\
+       :mb=\E&dA%{1}%PA:md=%?%gH%{0}%=%t\E&dH%{1}%PH%;:\
+       :me=\E&d@%{0}%PA%{0}%PB%{0}%PH:\
+       :mr=%?%gB%{0}%=%t\E&dB%{1}%PB%;:nd=\EC:\
+       :op=\E&bn\E&bB\E&bG\E&bR\n%{0}%PX%{0}%PY%{0}%PZ\n%{1}%PW%{1}%PV%{1}%PU:\
+       :sf=^J:so=\E&dD:st=\E1:ta=\011:up=\EA:us=\E&dD:
+
+gs6300|emots|AT&T PC6300 with EMOTS terminal emulator:\
+       :am:ms:ut:xo:\
+       :Co#8:co#80:it#8:li#24:pa#63:\
+       :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:\
+       :LE=\E[%dD:LF=\E|:RI=\E[%dC:Sb=\E[?;%dm:\
+       :..Sf=\E[?%?%p1%{0}%=%t0\n%e%p1%{1}%=%t2\n%e%p1%{1}%-%d%;m:\
+       :UP=\E[%dA:\
+       :ac=\\\054\\\054..--++``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~:\
+       :ae=\E[10m:al=\E[L:as=\E[11m:bl=^G:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:dc=\E[P:dl=\E[M:\
+       :do=^J:ei=:ho=\E[H:ic=\E[@:im=:is=\E[m:k1=\E[0s:\
+       :k2=\E[24s:k3=\E[1s:k4=\E[23s:k5=\E[2s:k6=\E[22s:\
+       :k7=\E[3s:k8=\E[21s:kB=^R^I:kb=^H:kd=\E[B:kh=\E[H:\
+       :kl=\E[D:kr=\E[C:ku=\E[A:le=^H:mb=\E[5m:md=\E[1m:\
+       :me=\E[m\E[10m:mr=\E[7m:nd=\E[C:op=\E[?;m:pf=\E[4i:\
+       :po=\E[5i:r1=\Ec:sf=^J:so=\E[1m:sr=\E[L:ta=^I:\
+       :up=\E[A:us=\E[4m:
+
+h19k|h19kermit|heathkit emulation provided by Kermit (no auto margin):\
+       :am@:da:db:xt:\
+       :it@:\
+       :ta@:tc=h19-u:
+
+versaterm|versaterm vt100 emulator for the macintosh:\
+       :am:xn:\
+       :co#80:it#8:li#24:\
+       :al=9\E[1L:bl=^G:cd=50\E[J:ce=3\E[K:cl=50\E[;H\E[2J:\
+       :cm=5\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:dc=7\E[1P:\
+       :dl=9\E[1M:do=^J:ei=:ho=\E[H:ic=7\E[1@:im=:\
+       :is=\E[1;24r\E[24;1H:k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\
+       :kb=^H:kd=\EOB:ke=\E>\E[?1l:kl=\EOD:kr=\EOC:\
+       :ks=\E=\E[?1h:ku=\EOA:le=^H:mb=2\E[5m:md=2\E[1m:\
+       :me=2\E[m:mr=2\E[7m:nd=2\E[C:nw=^M^J:r1=\E>:rc=\E8:\
+       :rf=/usr/lib/tabset/vt100:sc=\E7:se=2\E[m:so=2\E[7m:\
+       :sr=5\EM:ta=^I:ue=2\E[m:up=2\E[A:us=2\E[4m:
+
+vs100t|tsim|vs100-tsim|tsim vs100 emulator:\
+       :am:\
+       :co#80:it#8:li#24:\
+       :AL=\E+%+ :DL=\E-%+ :al=\EI:cd=\EQ:ce=\EL:cl=\EE:\
+       :cm=\EM%+ %+ :cs=\ES%+ %+ :dc=\Ed:dl=\ED:do=^J:ei=:\
+       :ho=\EH:i1=\ER:ic=\Ei:im=:le=^H:nd=\En:se=\Er:so=\Eh:\
+       :ta=^I:ue=\Ev:up=^K:us=\Eu:
+
+xtalk|IBM PC with xtalk communication program (versions up to 3.4):\
+       :am:mi:ms:xo:\
+       :co#80:it#8:li#24:vt#3:\
+       :@8=\EOM:DO=\E[%dB:K1=\EOq:K2=\EOr:K3=\EOs:K4=\EOp:\
+       :K5=\EOn:LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:SA=\E[?7h:\
+       :UP=\E[%dA:\
+       :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~:\
+       :ae=^O:al=\E[L:as=^N:bl=^G:cb=\E[1K:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:cr=^M:ct=\E[3g:dl=\E[M:\
+       :do=^J:eA=\E(B\E)0:ho=\E[H:k0=\EOy:k1=\EOP:k2=\EOQ:\
+       :k3=\EOR:k4=\EOS:k5=\EOt:k6=\EOu:k7=\EOv:k8=\EOl:\
+       :k9=\EOw:k;=\EOx:kb=^H:kd=\EOB:ke=\E[?1l\E>:kl=\EOD:\
+       :kr=\EOC:ks=\E[?1h\E=:ku=\EOA:le=^H:nd=\E[C:\
+       :r2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:se=\E[m :sf=^J:\
+       :so=\E[7m :sr=\EM:st=\EH:ta=^I:up=\E[A:
+
+simterm|attpc running simterm:\
+       :am:\
+       :co#80:li#24:\
+       :al=\EL:bl=^G:cd=\EJ:ce=\EK:cl=\EH\EJ:cm=\E=%+ %+ :\
+       :cr=^M:dc=\ER:dl=\EM:do=\EB:ho=\EH:im=\EQ:le=^H:\
+       :nd=\EC:sf=^J:so=\E&dB:te=\EVE:ti=\EVS:up=\EA:
+
+
+diablo1620|diablo1720|diablo450|ipsi|diablo 1620:\
+       :hc:os:\
+       :co#132:it#8:\
+       :ch=\E\011%i%.:ct=\E2:do=^J:hd=\ED:hu=\EU:\
+       :if=/usr/share/tabset/xerox1720:kb=^H:le=^H:st=\E1:\
+       :ta=^I:up=\E^J:
+diablo1620-m8|diablo1640-m8|diablo 1620 w/8 column left margin:\
+       :co#124:\
+       :is=\r        \E9:tc=diablo1620:
+diablo1640|diablo1730|diablo1740|diablo630|x1700|diablo|xerox|diablo 1640:\
+       :bl=^G:if=/usr/share/tabset/xerox1730:se=\E&:so=\EW:\
+       :ue=\ER:us=\EE:tc=diablo1620:
+diablo1640-lm|diablo-lm|xerox-lm|diablo 1640 with indented left margin:\
+       :co#124:\
+       :if=/usr/share/tabset/xerox1730-lm:se=\E&:so=\EW:\
+       :ue=\ER:us=\EE:tc=diablo1620:
+diablo1740-lm|630-lm|1730-lm|x1700-lm|diablo 1740 printer:\
+       :tc=diablo1640-lm:
+dtc382|DTC 382:\
+       :am:da:db:xs:\
+       :co#80:li#24:lm#96:\
+       :al=^P^Z:bl=^G:cd=\020\025\020\023\020\023:ce=^P^U:\
+       :cl=\020\035:cm=\020\021%r%.%.:cr=^P^M:dc=^X:dl=^P^S:\
+       :ei=^Pi:ho=^P^R:im=^PI:le=^H:nd=^PR:pc=\177:sf=^J:\
+       :te=\020\035:ue=^P \200:up=^P^L:us=^P ^P:ve=^Pb:\
+       :vs=^PB:
+dtc300s|DTC 300s:\
+       :hc:os:\
+       :co#132:\
+       :bl=^G:cr=^M:ct=\E3:do=^J:ff=^L:hd=\Eh:hu=\EH:kb=^H:\
+       :le=^H:sf=^J:st=\E1:ta=^I:up=^Z:
+gsi|mystery gsi terminal:\
+       :hc:os:\
+       :co#132:\
+       :bl=^G:cr=^M:do=^J:hd=\Eh:hu=\EH:le=^H:sf=^J:ta=^I:\
+       :up=^Z:
+aj830|aj832|aj|anderson jacobson:\
+       :hc:os:\
+       :bl=^G:cr=^M:do=^J:hd=\E9:hu=\E8:le=^H:sf=^J:up=\E7:
+aj510|Anderson-Jacobson model 510:\
+       :am:mi:\
+       :co#80:li#24:\
+       :al=2*\E&I:cd=\E'P:ce=\E'L:cl=^L:cm=\E#%+ %+ :\
+       :dc=.1*\E'D:dl=2*\E&D:ei=\E'J:ic=:im=\E'I:ip=.1*:\
+       :kd=\EZ:kl=\EW:kr=\EX:ku=\EY:le=^H:nd=\EX:pc=\177:\
+       :se=\E"I:so=\E"I:te=\E"N:ti=\E"N:ue=\E"U:up=\EY:\
+       :us=\E"U:
+nec5520|nec|spinwriter|nec 5520:\
+       :hc:os:\
+       :co#132:it#8:\
+       :bl=^G:cr=^M:ct=\E3:do=^J:ff=^L:hd=\E]s\n\E]W:\
+       :hu=\E]s\E9\E]W:kb=^H:le=^H:sf=^J:st=\E1:ta=^I:\
+       :up=\E9:
+qume5|qume|Qume Sprint 5:\
+       :hc:os:\
+       :co#80:it#8:\
+       :bl=^G:cr=^M:ct=\E3:do=^J:ff=^L:hd=\Eh:hu=\EH:kb=^H:\
+       :le=^H:sf=^J:st=\E1:ta=^I:up=^Z:
+xerox1720|x1720|x1750|xerox 1720:\
+       :hc:os:\
+       :co#132:it#8:\
+       :bl=^G:cr=^M:ct=\E2:do=^J:ff=^L:le=^H:sf=^J:st=\E1:\
+       :ta=^I:
+
+
+cad68-3|cgc3|cad68 basic monitor transparent mode size 3 chars:\
+       :am:\
+       :co#73:li#36:\
+       :cl=^Z:ho=^^:le=^H:nd=^L:up=^K:
+cad68-2|cgc2|cad68 basic monitor transparent mode size 2 chars:\
+       :am:\
+       :co#85:li#39:\
+       :cl=^Z:ho=^^:k1=\E5:k2=\E6:k3=\E7:k4=\E8:kd=\E2:\
+       :kl=\E3:kr=\E4:ku=\E1:le=^H:nd=^L:se=\Em^C:so=\Em^L:\
+       :up=^K:
+cops10|cops|cops-10|cops 10:\
+       :am:bw:\
+       :co#80:li#24:\
+       :bl=^G:cd=^W:ce=^V:cl=30\030:cm=\020%+ %+ :cr=^M:\
+       :do=^J:kb=^H:kd=^J:kh=^Y:kl=^H:kr=^L:ku=^K:le=^H:\
+       :nd=^L:sf=^J:up=^K:
+d132|datagraphix|datagraphix 132a:\
+       :da:db:in:\
+       :co#80:li#30:\
+       :al=\E3:bl=^G:cl=^L:cr=^M:dc=\E6:do=^J:ei=:ho=\Et:\
+       :ic=\E5:im=:nd=\El:sf=\Ev:sr=\Ew:up=\Ek:ve=\Em\En:\
+       :vs=\Ex:
+d800|Direct 800/A:\
+       :am:da:db:ms:xs:\
+       :co#80:it#8:li#24:\
+       :ae=\E[m:as=\E[1m:bl=^G:cd=\E[J:ce=\E[K:\
+       :cl=\E[1;1H\E[2J:cm=\E[%i%d;%dH:cr=^M:do=^J:k1=\EOP:\
+       :k2=\EOQ:k3=\EOR:k4=\EOS:k5=\EOT:k6=\EOU:k7=\EOV:\
+       :k8=\EOW:kd=\E[B:kl=\E[D:kr=\E[C:ku=\E[A:le=^H:\
+       :nd=\E[C:se=\E[m:sf=\ED:so=\E[7m:sr=\EM:ta=^I:\
+       :ue=\E[m:up=\E[A:us=\E[4m:ve=\E[>12h:vs=\E[>12l:
+digilog|digilog 333:\
+       :co#80:li#16:\
+       :bl=^G:ce=^X:cr=^M:do=^J:ho=^N:le=^H:nd=^I:sf=^J:\
+       :up=^O:
+env230|envision230|envision 230 graphics terminal:\
+       :xn@:\
+       :pf=\E[4i:po=\E[5i:ps=\E[0i:\
+       :..sa=\E[%?%p1%t;1%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m:tc=vt100:
+ep48|ep4080|execuport 4080:\
+       :am:os:\
+       :co#80:\
+       :bl=^G:cr=^M:do=^J:hd=^\:hu=^^:le=^H:sf=^J:
+ep40|ep4000|execuport 4000:\
+       :co#136:tc=ep4080:
+ifmr|Informer D304:\
+       :am:\
+       :co#80:li#24:\
+       :cd=\E/:ce=\EQ:cl=\EZ:cm=\EY%r%+ %+ :dc=\E\\:do=^J:\
+       :ei=:ho=\EH:ic=\E[:im=:le=^H:nd=\EC:se=\EK:so=\EJ:\
+       :sr=\En:up=\EA:
+opus3n1+|Esprit Opus3n1+ in wy60 mode with ANSI arrow keys:\
+       :am:bw:hs:km:mi:ms:ul:xo:\
+       :co#80:li#24:ws#80:\
+       :ae=\EH^C:al=\EE:as=\EH^B:bl=^G:bt=\EI:cd=\EY:ce=\ET:\
+       :cl=\E*:cm=\Ea%i%dR%dC:cr=^M:ct=\E0:dc=\EW:dl=\ER:\
+       :do=^J:ds=\Ez(\r:ei=\Er:fs=^M:ho=\036:\
+       :if=/usr/lib/tabset/std:im=\Eq:ip=:\
+       :is=\E`\072\Ee(\EO\Ee6\Ec41\E~4\Ec21\Ed/\Ezz&\E[A\177\Ezz'\E[B\177\Ezz(\E[D\177\Ezz)\E[C\177\Ezz<\E[Q\177\Ezz`\E[F\177\EA1*\EZH12:\
+       :k1=^A@\r:k2=^AA\r:k3=^AB\r:k4=^AC\r:k5=^AD\r:\
+       :k6=^AE\r:k7=^AF\r:k8=^AG\r:k9=^AH\r:kD=\EW:kI=\EQ:\
+       :kN=\EK:kP=\EJ:kb=^H:kd=\E[B:kh=^^:kl=\E[D:kr=\E[C:\
+       :ku=\E[A:le=^H:mb=\EG2:me=\E(\EH\003\EG0\EcD:mh=\EGp:\
+       :mr=\EG4:nd=^L:nw=\r\n:se=\EG0:sf=^J:so=\EG4:sr=\Ej:\
+       :st=\E1:ta=\011:\
+       :ti=\Ezz&\E[A\177\Ezz'\E[B\177\Ezz(\E[D\177\Ezz)\E[C\177\Ezz<\E[Q\177:\
+       :ts=\Ez(:uc=\EG8%p1%c\EG0:ue=\EG0:up=^K:us=\EG8:\
+       :ve=\E`1:vi=\E`0:
+ps300|Picture System 300:\
+       :xt:\
+       :it@:\
+       :se@:so@:ue@:us@:tc=vt100:
+teletec|Teletec Datascreen:\
+       :am:\
+       :co#80:li#24:\
+       :bl=^G:cl=^L:cr=^M:do=^J:ho=^^:le=^H:nd=^_:sf=^J:\
+       :up=^K:
+terak|Terak emulating Datamedia 1520:\
+       :tc=dm1520:
+v3220|LANPAR Vision II model 3220/3221/3222:\
+       :am:mi:xn:\
+       :co#80:it#8:li#24:\
+       :RA=\E[?7l:SA=\E[?7h:al=\E[L:cd=\E[J:ce=\E[K:\
+       :cl=\E[H\E[J:cm=\E[%i%d;%dH:dc=\E[P:dl=\E[M:ei=\E[4l:\
+       :im=\E[4h:is=\E>\E[?3l\E[?7h\E[?8h\E[p:k0=\E[1~:\
+       :k1=\E[2~:k2=\E[3~:k3=\E[4~:k4=\E[5~:k5=\E[6~:\
+       :k6=\E[OP:k7=\E[OQ:k8=\E[OR:k9=\E[OS:kd=\E[B:ke=\E>:\
+       :kh=\E[H:kl=\E[D:kr=\E[C:ks=\E=:ku=\E[A:le=^H:\
+       :nd=\E[C:se=\E[m:so=\E[7m:sr=\EM:ta=^I:ue=\E[m:\
+       :up=\E[A:us=\E[4m:
+
+
+
diff --git a/rescue/linux/cdrom/roottree/init b/rescue/linux/cdrom/roottree/init
new file mode 100755 (executable)
index 0000000..e29be74
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/ash
+#
+# First script called by Linux when booting
+#
+
+echo "======== init called ========"
+sbin/sleep 3
+sbin/chroot .
+#trap "" 1 2 3 15
+# exec >/dev/console </dev/console 2>&1
+PATH=sbin 
+sbin/mount -t proc none /proc
+sbin/mount -t sysfs none /sys
+echo Creating /dev
+sbin/mount -o mode=0755 -t tmpfs none /dev
+sbin/mknod /dev/console c 5 1
+sbin/mknod /dev/null c 1 3
+sbin/mknod /dev/zero c 1 5
+sbin/mkdir /dev/pts
+sbin/mkdir /dev/shm
+echo Starting udev
+sbin/udevstart
+echo -n "/sbin/hotplug" > /proc/sys/kernel/hotplug
+echo "Loading scsi_mod.ko module"
+sbin/insmod /lib/scsi_mod.ko 
+echo "Loading sd_mod.ko module"
+sbin/insmod /lib/sd_mod.ko 
+echo "Loading aic7xxx.ko module"
+sbin/insmod /lib/aic7xxx.ko 
+echo "Loading libata.ko module"
+sbin/insmod /lib/libata.ko 
+echo "Loading ata_piix.ko module"
+sbin/insmod /lib/ata_piix.ko 
+sbin/udevstart
+
+# CMDLINE=`cat /proc/cmdline`
+# DEBUG=""
+# case "$CMDLINE" in *debug*) DEBUG="yes"; ;; esac
+# export DEBUG
+
+# Magic incantation for root to remain in ram 
+echo 0x0100 > /proc/sys/kernel/real-root-dev
+
+sbin/mount -o remount,rw /dev/root /
+
+# sh
+
+exec /sbin/init
diff --git a/rescue/linux/cdrom/roottree/init.new b/rescue/linux/cdrom/roottree/init.new
new file mode 100755 (executable)
index 0000000..e29be74
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/ash
+#
+# First script called by Linux when booting
+#
+
+echo "======== init called ========"
+sbin/sleep 3
+sbin/chroot .
+#trap "" 1 2 3 15
+# exec >/dev/console </dev/console 2>&1
+PATH=sbin 
+sbin/mount -t proc none /proc
+sbin/mount -t sysfs none /sys
+echo Creating /dev
+sbin/mount -o mode=0755 -t tmpfs none /dev
+sbin/mknod /dev/console c 5 1
+sbin/mknod /dev/null c 1 3
+sbin/mknod /dev/zero c 1 5
+sbin/mkdir /dev/pts
+sbin/mkdir /dev/shm
+echo Starting udev
+sbin/udevstart
+echo -n "/sbin/hotplug" > /proc/sys/kernel/hotplug
+echo "Loading scsi_mod.ko module"
+sbin/insmod /lib/scsi_mod.ko 
+echo "Loading sd_mod.ko module"
+sbin/insmod /lib/sd_mod.ko 
+echo "Loading aic7xxx.ko module"
+sbin/insmod /lib/aic7xxx.ko 
+echo "Loading libata.ko module"
+sbin/insmod /lib/libata.ko 
+echo "Loading ata_piix.ko module"
+sbin/insmod /lib/ata_piix.ko 
+sbin/udevstart
+
+# CMDLINE=`cat /proc/cmdline`
+# DEBUG=""
+# case "$CMDLINE" in *debug*) DEBUG="yes"; ;; esac
+# export DEBUG
+
+# Magic incantation for root to remain in ram 
+echo 0x0100 > /proc/sys/kernel/real-root-dev
+
+sbin/mount -o remount,rw /dev/root /
+
+# sh
+
+exec /sbin/init
diff --git a/rescue/linux/cdrom/roottree/linuxrc b/rescue/linux/cdrom/roottree/linuxrc
new file mode 100755 (executable)
index 0000000..08733be
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/sh
+#
+# First script called by Linux when booting
+#
+
+trap "" 1 2 3 15
+exec >/dev/console </dev/console 2>&1
+mount -t proc none /proc
+
+CMDLINE=`cat /proc/cmdline`
+DEBUG=""
+case "$CMDLINE" in *debug*) DEBUG="yes"; ;; esac
+export DEBUG
+
+# Magic incantation for root to remain in ram 
+echo 0x0100 > /proc/sys/kernel/real-root-dev
+
+mount -o remount,rw /dev/root /
+
+# sh
+
+exit 0
diff --git a/rescue/linux/cdrom/roottree/root/.bash_history b/rescue/linux/cdrom/roottree/root/.bash_history
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/rescue/linux/cdrom/roottree/root/.bash_logout b/rescue/linux/cdrom/roottree/root/.bash_logout
new file mode 100644 (file)
index 0000000..926eddc
--- /dev/null
@@ -0,0 +1,3 @@
+# ~/.bash_logout
+
+clear
diff --git a/rescue/linux/cdrom/roottree/root/.bash_profile b/rescue/linux/cdrom/roottree/root/.bash_profile
new file mode 100644 (file)
index 0000000..dcd29af
--- /dev/null
@@ -0,0 +1,17 @@
+# .bash_profile
+
+# Get the aliases and functions
+if [ -f ~/.bashrc ]; then
+       . ~/.bashrc
+fi
+
+# User specific environment and startup programs
+
+PATH=$PATH:$HOME/bin
+BASH_ENV=$HOME/.bashrc
+USERNAME="root"
+
+export USERNAME BASH_ENV PATH
+
+
+
diff --git a/rescue/linux/cdrom/roottree/root/.bashrc b/rescue/linux/cdrom/roottree/root/.bashrc
new file mode 100644 (file)
index 0000000..646a32f
--- /dev/null
@@ -0,0 +1,17 @@
+# .bashrc
+
+# User specific aliases and functions
+
+alias rm='rm -i'
+alias cp='cp -i'
+alias mv='mv -i'
+alias dir='ls -l'
+
+PS1='[\u@\h \W]\$ '
+LESSCHARSET=latin1
+export LESSCHARSET
+
+# Source global definitions
+if [ -f /etc/bashrc ]; then
+        . /etc/bashrc
+fi
diff --git a/rescue/linux/cdrom/roottree/root/ntfsresize b/rescue/linux/cdrom/roottree/root/ntfsresize
new file mode 100755 (executable)
index 0000000..23db94d
Binary files /dev/null and b/rescue/linux/cdrom/roottree/root/ntfsresize differ
diff --git a/rescue/linux/cdrom/yaird-0.0.5.tar.gz b/rescue/linux/cdrom/yaird-0.0.5.tar.gz
new file mode 100644 (file)
index 0000000..dd3bb06
Binary files /dev/null and b/rescue/linux/cdrom/yaird-0.0.5.tar.gz differ
diff --git a/rescue/linux/cdrom/yaird-0.0.5/AUTHORS b/rescue/linux/cdrom/yaird-0.0.5/AUTHORS
new file mode 100644 (file)
index 0000000..c6f361c
--- /dev/null
@@ -0,0 +1,2 @@
+Sun Feb 13 21:41:02 CET 2005
+       GNU Autoconf wants this.
diff --git a/rescue/linux/cdrom/yaird-0.0.5/COPYING b/rescue/linux/cdrom/yaird-0.0.5/COPYING
new file mode 100644 (file)
index 0000000..caa0a06
--- /dev/null
@@ -0,0 +1,341 @@
+                   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.
+\f
+                   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.)
+\f
+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.
+\f
+  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.
+\f
+  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.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    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) 19yy 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.
+
+  <signature of Ty Coon>, 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.
diff --git a/rescue/linux/cdrom/yaird-0.0.5/ChangeLog b/rescue/linux/cdrom/yaird-0.0.5/ChangeLog
new file mode 100644 (file)
index 0000000..9114020
--- /dev/null
@@ -0,0 +1,833 @@
+# do not edit -- automatically generated by arch changelog
+# arch-tag: automatic-ChangeLog--ekonijn@xs4all.nl--debian/yaird--devo--0.1
+#
+
+2005-03-20 22:08:17 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-33
+
+    Summary:
+      0.0.5 - finalise
+    Revision:
+      yaird--devo--0.1--patch-33
+
+     * clean up NEWS, README, docs
+
+    modified files:
+     ChangeLog NEWS README TODO configure.in doc/concepts.xml
+     doc/shlibs.xml doc/tools.xml
+
+
+2005-03-19 23:44:53 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-32
+
+    Summary:
+      pre-0.0.5 add klibc shared libraries
+    Revision:
+      yaird--devo--0.1--patch-32
+
+     * Add executable findlibs, to determine dynamic loader and
+       basename of shared libraries, independent of which C library
+       is used.  Since we don't know what path the loader will use
+       we cannot resolve shared libraries given as relative paths.
+     * factor out the finding of shared libraries from building
+       the image.
+     * Writeup on shared libraries and klibc.
+
+    new files:
+     doc/.arch-ids/shlibs.xml.id doc/shlibs.xml
+     exec/.arch-ids/findlibs.c.id exec/findlibs.c
+     perl/.arch-ids/SharedLibraries.pm.id perl/SharedLibraries.pm
+
+    modified files:
+     ChangeLog NEWS README TODO doc/Makefile.am doc/concepts.xml
+     doc/raid.xml doc/spec.xml doc/tools.xml doc/yaird.xml.in
+     exec/Makefile.am perl/Image.pm perl/Makefile.am perl/Plan.pm
+     perl/TestSet.pm
+
+
+2005-03-06 17:50:32 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-31
+
+    Summary:
+      pre-0.0.5 debian to initramfs
+    Revision:
+      yaird--devo--0.1--patch-31
+
+     * Document building with klibc in the README file.
+     * Adapt the Debian template to use initramfs instead of initrd.
+       The old template is available as Debian-initrd.
+     * Adapt Fedora template to use run_init.
+     * correct dependencies in doc makefile.
+     * doc: writup on initramfs and run_init; de-emphasize initrd.
+
+    new files:
+     templates/.arch-ids/Debian-initrd.pm.id
+     templates/Debian-initrd.pm
+
+    modified files:
+     ChangeLog NEWS README TODO doc/Makefile.am doc/concepts.xml
+     doc/input.xml doc/intro.xml doc/kernel.xml doc/raid.xml
+     doc/security.xml doc/spec.xml doc/yaird.xml.in
+     templates/Debian.pm templates/Fedora.pm
+
+
+2005-03-01 22:29:08 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-30
+
+    Summary:
+      post-0.0.4 - add run_init
+    Revision:
+      yaird--devo--0.1--patch-30
+
+     * rename directory src to perl
+     * add directory exec for stuff intended to go onto the image
+     * add exec/run_init, based on klibc;
+       not compiled with klibc in standard configuration.
+     * wrap the nuking of rootfs in ifdefs; these may go away once tested.
+       add --enable-nuke config flag to set the ifdef.
+     * automake mods to support C compilation
+     * let all templates know about location of exec, about yaird version.
+     * generate Conf.pm based on exec dir, yaird version.
+     * change install directory: lib not share since there's object code now.
+     * note the klibc licence in documentation.
+
+    new files:
+     .arch-ids/LICENCE.KLIBC.id .arch-ids/Makefile.incl.id
+     LICENCE.KLIBC Makefile.incl exec/.arch-ids/=id
+     exec/.arch-ids/Makefile.am.id exec/.arch-ids/run_init.c.id
+     exec/Makefile.am exec/run_init.c include/.arch-ids/=id
+     include/.arch-ids/config.h.in.id include/config.h.in
+
+    modified files:
+     ChangeLog Makefile.am NEWS TODO bootstrap.sh configure.in
+     doc/license.xml perl/ActionList.pm perl/Conf.pm.in
+     perl/Makefile.am perl/main.pl templates/Debian.pm
+     templates/Fedora.pm templates/Makefile.am
+
+    renamed files:
+     src/.arch-ids/=id
+       ==> perl/.arch-ids/=id
+     src/.arch-ids/ActionList.pm.id
+       ==> perl/.arch-ids/ActionList.pm.id
+     src/.arch-ids/ActiveBlockDev.pm.id
+       ==> perl/.arch-ids/ActiveBlockDev.pm.id
+     src/.arch-ids/ActiveBlockDevTab.pm.id
+       ==> perl/.arch-ids/ActiveBlockDevTab.pm.id
+     src/.arch-ids/Base.pm.id
+       ==> perl/.arch-ids/Base.pm.id
+     src/.arch-ids/Blacklist.pm.id
+       ==> perl/.arch-ids/Blacklist.pm.id
+     src/.arch-ids/BlockSpecialFile.pm.id
+       ==> perl/.arch-ids/BlockSpecialFile.pm.id
+     src/.arch-ids/BlockSpecialFileTab.pm.id
+       ==> perl/.arch-ids/BlockSpecialFileTab.pm.id
+     src/.arch-ids/Conf.pm.id
+       ==> perl/.arch-ids/Conf.pm.in.id
+     src/.arch-ids/FsEntry.pm.id
+       ==> perl/.arch-ids/FsEntry.pm.id
+     src/.arch-ids/FsOpts.pm.id
+       ==> perl/.arch-ids/FsOpts.pm.id
+     src/.arch-ids/FsTab.pm.id
+       ==> perl/.arch-ids/FsTab.pm.id
+     src/.arch-ids/Hardware.pm.id
+       ==> perl/.arch-ids/Hardware.pm.id
+     src/.arch-ids/IdeDev.pm.id
+       ==> perl/.arch-ids/IdeDev.pm.id
+     src/.arch-ids/Image.pm.id
+       ==> perl/.arch-ids/Image.pm.id
+     src/.arch-ids/Input.pm.id
+       ==> perl/.arch-ids/Input.pm.id
+     src/.arch-ids/InputTab.pm.id
+       ==> perl/.arch-ids/InputTab.pm.id
+     src/.arch-ids/KConfig.pm.id
+       ==> perl/.arch-ids/KConfig.pm.id
+     src/.arch-ids/LabeledPartition.pm.id
+       ==> perl/.arch-ids/LabeledPartition.pm.id
+     src/.arch-ids/LabeledPartitionTab.pm.id
+       ==> perl/.arch-ids/LabeledPartitionTab.pm.id
+     src/.arch-ids/LogicalVolume.pm.id
+       ==> perl/.arch-ids/LogicalVolume.pm.id
+     src/.arch-ids/LvmTab.pm.id
+       ==> perl/.arch-ids/LvmTab.pm.id
+     src/.arch-ids/Makefile.am.id
+       ==> perl/.arch-ids/Makefile.am.id
+     src/.arch-ids/ModDep.pm.id
+       ==> perl/.arch-ids/ModDep.pm.id
+     src/.arch-ids/ModDepTab.pm.id
+       ==> perl/.arch-ids/ModDepTab.pm.id
+     src/.arch-ids/Obj.pm.id
+       ==> perl/.arch-ids/Obj.pm.id
+     src/.arch-ids/Pack.pm.id
+       ==> perl/.arch-ids/Pack.pm.id
+     src/.arch-ids/PciDev.pm.id
+       ==> perl/.arch-ids/PciDev.pm.id
+     src/.arch-ids/PciMapEntry.pm.id
+       ==> perl/.arch-ids/PciMapEntry.pm.id
+     src/.arch-ids/PciTab.pm.id
+       ==> perl/.arch-ids/PciTab.pm.id
+     src/.arch-ids/PhysicalVolume.pm.id
+       ==> perl/.arch-ids/PhysicalVolume.pm.id
+     src/.arch-ids/Plan.pm.id
+       ==> perl/.arch-ids/Plan.pm.id
+     src/.arch-ids/RaidDev.pm.id
+       ==> perl/.arch-ids/RaidDev.pm.id
+     src/.arch-ids/RaidTab.pm.id
+       ==> perl/.arch-ids/RaidTab.pm.id
+     src/.arch-ids/ScsiDev.pm.id
+       ==> perl/.arch-ids/ScsiDev.pm.id
+     src/.arch-ids/TestSet.pm.id
+       ==> perl/.arch-ids/TestSet.pm.id
+     src/.arch-ids/UsbDev.pm.id
+       ==> perl/.arch-ids/UsbDev.pm.id
+     src/.arch-ids/UsbMapEntry.pm.id
+       ==> perl/.arch-ids/UsbMapEntry.pm.id
+     src/.arch-ids/UsbTab.pm.id
+       ==> perl/.arch-ids/UsbTab.pm.id
+     src/.arch-ids/VolumeGroup.pm.id
+       ==> perl/.arch-ids/VolumeGroup.pm.id
+     src/.arch-ids/main.pl.id
+       ==> perl/.arch-ids/main.pl.id
+     src/Conf.pm
+       ==> perl/Conf.pm.in
+
+    new directories:
+     exec exec/.arch-ids include include/.arch-ids perl/.arch-ids
+
+    removed directories:
+     src/.arch-ids
+
+    renamed directories:
+     src
+       ==> perl
+
+
+2005-02-24 23:13:31 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-29
+
+    Summary:
+      post-0.0.4 add tree copying
+    Revision:
+      yaird--devo--0.1--patch-29
+
+     * Add tree copy code to templates, to actionlist
+       processing, to image generation.
+     * Canonise filenames in templates to avoid
+       problems with eg /lib/modules/2.6.10-smp/kernel//./.
+     * In ActionList, add kernel version to every hash;
+       this allows template to refer to /lib/modules/version/kernel.
+
+    modified files:
+     ChangeLog NEWS TODO doc/concepts.xml src/ActionList.pm
+     src/Image.pm templates/Debian.pm templates/Fedora.pm
+
+
+2005-02-23 22:17:56 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-28
+
+    Summary:
+      post-0.0.4
+    Revision:
+      yaird--devo--0.1--patch-28
+
+     * Add --root=/dev/hdb option.
+       Since this needs to be in fstab, it's odd to
+       use a device name rather than a mount point,
+       but it's the conventional thing to do, so should
+       give rise to less confusion than changing it.
+
+    modified files:
+     ChangeLog NEWS README TODO src/FsTab.pm src/Plan.pm
+     src/main.pl
+
+
+2005-02-23 14:26:44 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-27
+
+    Summary:
+      0.0.4
+    Revision:
+      yaird--devo--0.1--patch-27
+
+     * doc corrections: kernel command line no longer unsupported.
+     * bring fedora and debian templates to same level.
+
+    modified files:
+     ChangeLog NEWS doc/spec.xml templates/Debian.pm
+     templates/Fedora.pm
+
+
+2005-02-23 11:42:32 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-26
+
+    Summary:
+      pre-0.0.4 - kernel args
+    Revision:
+      yaird--devo--0.1--patch-26
+
+     * enough features for this week, time for some testing.
+       bump version number to 0.0.4
+     * Process kernel args, for now only init, ro, rw.
+     * as a consequence, single user mode boot now works.
+     * Ro/rw requires a new action attribute for mount: isRoot.
+     * options now only is fstab options, not the extra -n -t
+       stuff you may want to provide.
+     * new action attribute for mount: fsType.
+     * Document kernel args that may need support.
+    
+
+    modified files:
+     ChangeLog TODO configure.in doc/kernel.xml src/Plan.pm
+     templates/Debian.pm
+
+
+2005-02-20 15:57:02 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-25
+
+    Summary:
+      post 0.0.3 - oops
+    Revision:
+      yaird--devo--0.1--patch-25
+
+     * oops, add src/ModDep.pm to version control
+
+    new files:
+     src/.arch-ids/ModDep.pm.id src/ModDep.pm
+
+    modified files:
+     ChangeLog
+
+
+2005-02-20 15:55:10 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-24
+
+    Summary:
+      post 0.0.3
+    Revision:
+      yaird--devo--0.1--patch-24
+
+     * Find module files based on listing in modules.dep,
+       not on scanning /lib/modules.
+     * Like modprobe, accept *any* suffix for a module
+     * But warn if the suffix is not .ko or .ko.gz,
+       and thus not likely to be generated by depmod.
+     * Remove ModDir; this is now redundant.
+     * Add ModDep.pm to encapsulate filename and
+       dependencies in a modules.dep line.
+     * Check against duplicate module names
+     * Add line numbers to module.dep parsing.
+     * Bugfix: ModDepTab::all returned hash not array.
+     * Stay closer to modprobe syntax regarding comment conventions
+     * In Debian template, verify existence of device
+       before making a node for it.
+
+    removed files:
+     src/.arch-ids/ModDir.pm.id src/ModDir.pm
+
+    modified files:
+     ChangeLog TODO src/Conf.pm src/Makefile.am src/ModDepTab.pm
+     src/Plan.pm src/TestSet.pm templates/Debian.pm
+
+
+2005-02-19 12:41:23 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-23
+
+    Summary:
+      post 0.0.3
+    Revision:
+      yaird--devo--0.1--patch-23
+
+     * In Hardware, recognise target\d+:\d+:\d+
+       as a new SCSI grouping, introduced in 2.6.10.
+     * In Hardware, warn about any unrecognised path component
+     * In TestSet, clean up harmless typo uncovered by warning.
+
+    modified files:
+     ChangeLog TODO src/Hardware.pm src/TestSet.pm
+
+
+2005-02-19 00:45:15 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-22
+
+    Summary:
+      post-0.0.3 patches
+    Revision:
+      yaird--devo--0.1--patch-22
+
+     * Empty lines in /etc/fstab are valid.
+       (Patch Goffredo Baroncelli)
+
+    modified files:
+     ChangeLog TODO src/FsTab.pm
+
+
+2005-02-16 15:51:52 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-21
+
+    Summary:
+      implement formats
+    Revision:
+      yaird--devo--0.1--patch-21
+
+     * implement --format options: directory, cramfs, cpio
+     * use 3rd open arg to avoid filename interpretation.
+     * adapt readme, concepts and security doc accordingly.
+
+    modified files:
+     ChangeLog README doc/concepts.xml doc/security.xml src/Base.pm
+     src/Blacklist.pm src/FsTab.pm src/Image.pm src/InputTab.pm
+     src/KConfig.pm src/LabeledPartition.pm src/LvmTab.pm
+     src/ModDepTab.pm src/Pack.pm src/PciTab.pm src/RaidTab.pm
+     src/UsbTab.pm
+
+
+2005-02-16 12:30:41 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-20
+
+    Summary:
+      recognise amd64 linux-gate
+    Revision:
+      yaird--devo--0.1--patch-20
+
+     * New ldd output pattern, cf debian Bug#295412.
+       Untested, I don't have 64bit.
+     * add framework for output formats.
+
+    new files:
+     src/.arch-ids/Pack.pm.id src/Pack.pm
+
+    modified files:
+     ChangeLog src/Image.pm src/Makefile.am src/main.pl
+
+
+2005-02-16 09:54:08 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-19
+
+    Summary:
+      gnu automake
+    Revision:
+      yaird--devo--0.1--patch-19
+
+     * factor out template/Makefile
+     * note automake in doc.
+     * add command line processing in main.
+     * add support for -v, -q, -d in Base.pm.
+     * correpsonding change in doc/spec, doc/security
+     * rewritten the README
+     * TODO now included
+
+    new files:
+     .arch-ids/TODO.id TODO templates/.arch-ids/Makefile.am.id
+     templates/Makefile.am
+
+    modified files:
+     ChangeLog Makefile.am README configure.in doc/security.xml
+     doc/spec.xml doc/tools.xml src/Base.pm src/main.pl
+
+
+2005-02-13 23:38:48 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-18
+
+    Summary:
+      oops in src/Makefile
+    Revision:
+      yaird--devo--0.1--patch-18
+
+     * Add to configure.in, or Makefile.in is not built from Makefile.am
+
+    modified files:
+     ChangeLog configure.in
+
+
+2005-02-13 23:36:27 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-17
+
+    Summary:
+      changelog misery, factoring makefile
+    Revision:
+      yaird--devo--0.1--patch-17
+
+     * remove, re-add changelog.  Now it should get the log for this branch.
+       Is this what we want?
+     * Factor out src/Makefile.am
+
+    new files:
+     .arch-ids/ChangeLog.id ChangeLog src/.arch-ids/Makefile.am.id
+     src/Makefile.am
+
+    removed files:
+     .arch-ids/ChangeLog.id ChangeLog
+
+    modified files:
+     Makefile.am
+
+
+2005-02-13 23:27:22 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-16
+
+    Summary:
+      oops, wrong changelog.
+    Revision:
+      yaird--devo--0.1--patch-16
+
+     * Sigh, changelog from branch is copied unchanged.
+       It may be necessary to get rid of automatic tag.
+
+    modified files:
+     ChangeLog
+
+
+2005-02-13 23:23:33 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-15
+
+    Summary:
+      convert to automake
+    Revision:
+      yaird--devo--0.1--patch-15
+
+     * Bump to 0.0.3, use GNU automake
+    
+    Patches applied:
+    
+     * ekonijn@xs4all.nl--debian/yaird--gnu--0.1--base-0
+       tag of ekonijn@xs4all.nl--debian/yaird--devo--0.1--patch-14
+    
+     * ekonijn@xs4all.nl--debian/yaird--gnu--0.1--patch-1
+       add GNU autoconf support
+    
+     * ekonijn@xs4all.nl--debian/yaird--gnu--0.1--patch-2
+       add required files
+    
+     * ekonijn@xs4all.nl--debian/yaird--gnu--0.1--patch-3
+       debug gnu automake
+    
+     * ekonijn@xs4all.nl--debian/yaird--gnu--0.1--patch-4
+       tuning automake
+    
+
+    new files:
+     .arch-ids/AUTHORS.id .arch-ids/ChangeLog.id
+     .arch-ids/Makefile.am.id .arch-ids/NEWS.id
+     .arch-ids/bootstrap.sh.id .arch-ids/configure.in.id AUTHORS
+     ChangeLog Makefile.am NEWS bootstrap.sh configure.in
+     doc/.arch-ids/Makefile.am.id doc/Makefile.am
+     templates/.arch-ids/=id
+
+    removed files:
+     doc/.arch-ids/Makefile.id doc/Makefile
+
+    modified files:
+     doc/yaird.xml.in src/main.pl
+
+    renamed files:
+     doc/.arch-ids/yaird.xml.id
+       ==> doc/.arch-ids/yaird.xml.in.id
+     doc/yaird.xml
+       ==> doc/yaird.xml.in
+     src/.arch-ids/Template.pm-Fedora.id
+       ==> templates/.arch-ids/Fedora.pm.id
+     src/.arch-ids/Template.pm.id
+       ==> templates/.arch-ids/Debian.pm.id
+     src/Template.pm
+       ==> templates/Debian.pm
+     src/Template.pm-Fedora
+       ==> templates/Fedora.pm
+
+    new directories:
+     templates templates/.arch-ids
+
+    new patches:
+     ekonijn@xs4all.nl--debian/yaird--gnu--0.1--base-0
+     ekonijn@xs4all.nl--debian/yaird--gnu--0.1--patch-1
+     ekonijn@xs4all.nl--debian/yaird--gnu--0.1--patch-2
+     ekonijn@xs4all.nl--debian/yaird--gnu--0.1--patch-3
+     ekonijn@xs4all.nl--debian/yaird--gnu--0.1--patch-4
+
+
+2005-02-12 01:48:49 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-14
+
+    Summary:
+      beware of last minute cleanup
+    Revision:
+      yaird--devo--0.1--patch-14
+
+     * Fedora template: removing ls caused a shared library
+       for /mnt/bin/cp to go missing.  Fix.
+
+    modified files:
+     src/Template.pm-Fedora
+
+
+2005-02-09 23:40:12 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-13
+
+    Summary:
+      finalise before shipping.
+    Revision:
+      yaird--devo--0.1--patch-13
+
+     * Warning against ill advised use in README.
+     * Sample output in README.
+     * more detailed planner output.
+     * String method for actionList.
+     * typo prolog -> prologue.
+     * adapt TestSet to templating introduced in previous version.
+     * doc/intro: remove ref to non-existent manual page.
+
+    modified files:
+     README doc/intro.xml src/ActionList.pm src/Plan.pm
+     src/Template.pm src/Template.pm-Fedora src/TestSet.pm
+
+
+2005-02-09 22:04:21 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-12
+
+    Summary:
+      docs and finishing fedora
+    Revision:
+      yaird--devo--0.1--patch-12
+
+     * More info on initramfs found in Fedora port;
+     * Drop ls and more from the templates.
+     * Include Fedora sample template.
+     * Confess odd scripting for initramfs.
+     * Rename LICENSE to COPYING
+     * TestPlan has bugs, introduced while adding templating.
+
+    new files:
+     src/.arch-ids/Template.pm-Fedora.id src/Template.pm-Fedora
+
+    modified files:
+     README doc/kernel.xml doc/spec.xml src/Template.pm
+
+    renamed files:
+     .arch-ids/LICENSE.id
+       ==> .arch-ids/COPYING.id
+     LICENSE
+       ==> COPYING
+
+
+2005-02-09 16:16:35 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-11
+
+    Summary:
+      avoid error message on non-shared executable ldd
+    Revision:
+      yaird--devo--0.1--patch-11
+
+     * avoid error message on non-shared executable ldd,
+       needed because of strange file modes in FC3.
+
+    modified files:
+     src/Image.pm
+
+
+2005-02-09 16:05:04 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-10
+
+    Summary:
+      oops
+    Revision:
+      yaird--devo--0.1--patch-10
+
+     * Inverted pattern in previous fix to ldd.
+
+    modified files:
+     src/Image.pm
+
+
+2005-02-09 16:00:50 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-9
+
+    Summary:
+      other ldd output format
+    Revision:
+      yaird--devo--0.1--patch-9
+
+     * In FC3 ldd (v2.3.3), the => is omitted
+       if names on both sides are identical.
+       
+
+    modified files:
+     src/Image.pm
+
+
+2005-02-09 13:14:52 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-8
+
+    Summary:
+      document templating
+    Revision:
+      yaird--devo--0.1--patch-8
+
+     * Discusse templating infrastructure under toolchain
+     * More logical ordering in concepts chapter,
+       discuss use of templates.
+     * Minor cleanup in security and licence chapters.
+
+    removed files:
+     doc/.arch-ids/templating.xml.id doc/templating.xml
+
+    modified files:
+     doc/concepts.xml doc/license.xml doc/security.xml doc/spec.xml
+     doc/tools.xml doc/yaird.xml
+
+
+2005-02-09 10:37:39 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-7
+
+    Summary:
+      implement template system
+    Revision:
+      yaird--devo--0.1--patch-7
+
+    Patches applied:
+    
+     * ekonijn@xs4all.nl--debian/yaird--templ--0.1--base-0
+       tag of ekonijn@xs4all.nl--debian/yaird--devo--0.1--patch-6
+    
+     * ekonijn@xs4all.nl--debian/yaird--templ--0.1--patch-1
+       implement template system:
+        * Note initramfs in FC3.
+        * Add chapter on templating to doc; unsatisfactory.
+          Specs chapter unchanged.
+        * Add debug, assert functions to Base.
+        * Add debug calls to Image.
+        * Fix bug in addDevicePlan for loop and duplicate detection: eq vs ==.
+        * Add templating infrastructure, based on HTML::Template.
+        * Ad Debian specific template.
+        * Adapt Plan to use templating infrastructure.
+        * Drop ad hoc plan expansion code.
+
+    new files:
+     doc/.arch-ids/templating.xml.id doc/templating.xml
+     src/.arch-ids/ActionList.pm.id src/.arch-ids/Template.pm.id
+     src/ActionList.pm src/Template.pm
+
+    modified files:
+     doc/kernel.xml doc/yaird.xml src/Base.pm src/Conf.pm
+     src/Image.pm src/Obj.pm src/Plan.pm src/main.pl
+
+    new patches:
+     ekonijn@xs4all.nl--debian/yaird--templ--0.1--base-0
+     ekonijn@xs4all.nl--debian/yaird--templ--0.1--patch-1
+
+
+2005-02-06 11:47:03 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-6
+
+    Summary:
+      oops, add KConfig.pm
+    Revision:
+      yaird--devo--0.1--patch-6
+
+     * oops, KConfig.pm needs to be added to tla archive.
+       previous version non-functional for this reason.
+
+    new files:
+     src/.arch-ids/KConfig.pm.id src/KConfig.pm
+
+
+2005-02-05 22:46:13 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-5
+
+    Summary:
+      preparations for Fedora port
+    Revision:
+      yaird--devo--0.1--patch-5
+
+     * divide concept.xml into simplesect's.
+     * correct USB_HID remark in input.xml
+     * add kernel config file reader
+     * add mapping module name to kernel config var.
+     * document kernel config interpretation.
+     * added test case for kernel config interpretation
+     * when resolving module names, drop the modules
+       that are built into the kernel.
+     * /etc/hotplug/blacklist.d does not have to exist.
+     * swap in /etc/fstab can have mount point 'swap'
+       as well as 'none'.
+     * No absolute path when using LVM tools: Debian
+       has them in /sbin, Fedora in /usr/sbin;
+       Including /sbin,/usr/sbin in $PATH solves this.
+     * Don't load modules for swap partitions,
+       since we don't do software suspend yet.
+     * Known issue: Fedora does not have dash, does
+       not have /etc/lvm-200.  We'll need templating
+       to configure that away.
+
+    modified files:
+     doc/concepts.xml doc/input.xml doc/security.xml doc/spec.xml
+     src/Blacklist.pm src/Conf.pm src/FsTab.pm src/LvmTab.pm
+     src/ModDepTab.pm src/Plan.pm src/TestSet.pm src/main.pl
+
+
+2005-02-05 11:12:27 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-4
+
+    Summary:
+      reiser tested, limit PCI sibling awakening
+    Revision:
+      yaird--devo--0.1--patch-4
+
+     * Drop the todo item "test reiser"; completed succesfully.
+     * Drop 'redundant action' messages.
+     * Reduce PCI sibling awakening to USB functions only;
+       Note in doc.
+
+    modified files:
+     doc/concepts.xml doc/spec.xml src/Hardware.pm src/Plan.pm
+
+
+2005-02-05 00:11:33 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-3
+
+    Summary:
+      document UHCI/EHCI, fix LVM mknod
+    Revision:
+      yaird--devo--0.1--patch-3
+
+     * add a paragraph on EHCI/UHCI and load a module for
+       every function of a PCI slot to the concepts chapter.
+     * fix bug in generated mknod calls.  Devices cannot always
+       be called /dev/hda, with hda the kernel name: the counter
+       example is /dev/vg0/root, device nodes generated by LVM.
+       Add function yspecial to activeBlockDev, to generate
+       a name appropriate for the block device.
+     * known bug: the PCI alternate function code is too generous.
+       Consider a chipset that has sound, ide and USB all as one
+       PCI slot.  to be done.
+
+    modified files:
+     doc/concepts.xml src/ActiveBlockDev.pm src/LvmTab.pm
+     src/Plan.pm src/TestSet.pm
+
+
+2005-02-03 23:50:39 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-2
+
+    Summary:
+      fix EHCI/UHCI interference
+    Revision:
+      yaird--devo--0.1--patch-2
+
+     * It turns out some PCI EHCI drivers work best if the UHCI
+       driver is also loaded.  Generalise to: always load modules
+       for every function of a PCI slot you need.
+
+    modified files:
+     src/Hardware.pm
+
+
+2005-02-03 21:26:53 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       patch-1
+
+    Summary:
+      get rid of debug code
+    Revision:
+      yaird--devo--0.1--patch-1
+
+     * Drop hacked in 'sleep' action, leave sleep
+       on the image.
+
+    modified files:
+     src/Plan.pm
+
+
+2005-02-03 21:10:19 GMT        Erik van Konijnenburg <ekonijn@xs4all.nl>       base-0
+
+    Summary:
+      initial import
+    Revision:
+      yaird--devo--0.1--base-0
+
+     * first edition under version control.
+       seems to work in some simple cases,
+       still need to remove some debugging code.
+
+    new files:
+     LICENSE README doc/Makefile doc/authors.xml doc/concepts.xml
+     doc/figures/console.dia doc/figures/console.png doc/input.xml
+     doc/intro.xml doc/kernel.xml doc/license.xml doc/raid.xml
+     doc/security.xml doc/spec.xml doc/tools.xml doc/yaird.xml
+     src/ActiveBlockDev.pm src/ActiveBlockDevTab.pm src/Base.pm
+     src/Blacklist.pm src/BlockSpecialFile.pm
+     src/BlockSpecialFileTab.pm src/Conf.pm src/FsEntry.pm
+     src/FsOpts.pm src/FsTab.pm src/Hardware.pm src/IdeDev.pm
+     src/Image.pm src/Input.pm src/InputTab.pm
+     src/LabeledPartition.pm src/LabeledPartitionTab.pm
+     src/LogicalVolume.pm src/LvmTab.pm src/ModDepTab.pm
+     src/ModDir.pm src/Obj.pm src/PciDev.pm src/PciMapEntry.pm
+     src/PciTab.pm src/PhysicalVolume.pm src/Plan.pm src/RaidDev.pm
+     src/RaidTab.pm src/ScsiDev.pm src/TestSet.pm src/UsbDev.pm
+     src/UsbMapEntry.pm src/UsbTab.pm src/VolumeGroup.pm
+     src/main.pl
+
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/INSTALL b/rescue/linux/cdrom/yaird-0.0.5/INSTALL
new file mode 100644 (file)
index 0000000..56b077d
--- /dev/null
@@ -0,0 +1,236 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
+Software Foundation, Inc.
+
+This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+These are generic installation instructions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  (Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.)
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You only need
+`configure.ac' if you want to change it or regenerate `configure' using
+a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.  If you're
+     using `csh' on an old version of System V, you might need to type
+     `sh ./configure' instead to prevent `csh' from trying to execute
+     `configure' itself.
+
+     Running `configure' takes awhile.  While running, it prints some
+     messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+Compilers and Options
+=====================
+
+Some systems require unusual options for compilation or linking that the
+`configure' script does not know about.  Run `./configure --help' for
+details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   If you have to use a `make' that does not support the `VPATH'
+variable, you have to compile the package for one architecture at a
+time in the source code directory.  After you have installed the
+package for one architecture, use `make distclean' before reconfiguring
+for another architecture.
+
+Installation Names
+==================
+
+By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc.  You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PREFIX'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+give `configure' the option `--exec-prefix=PREFIX', the package will
+use PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+There may be some features `configure' cannot figure out automatically,
+but needs to determine by the type of machine the package will run on.
+Usually, assuming the package is built to be run on the _same_
+architectures, `configure' can figure that out, but if it prints a
+message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the `--target=TYPE' option to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+If you want to set default values for `configure' scripts to share, you
+can create a site shell script called `config.site' that gives default
+values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).  Here is a another example:
+
+     /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
+configuration-related scripts to be executed by `/bin/bash'.
+
+`configure' Invocation
+======================
+
+`configure' recognizes the following options to control how it operates.
+
+`--help'
+`-h'
+     Print a summary of the options to `configure', and exit.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/Makefile b/rescue/linux/cdrom/yaird-0.0.5/Makefile
new file mode 100644 (file)
index 0000000..c4423af
--- /dev/null
@@ -0,0 +1,601 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+
+# 
+# Makefile.am -- installation and packaging instructions
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# - auxdir contains executables that may be included in the generated
+#   image
+# - perldir contains perl modules to be included by the main program
+#
+srcdir = .
+top_srcdir = .
+
+pkgdatadir = $(datadir)/yaird
+pkglibdir = $(libdir)/yaird
+pkgincludedir = $(includedir)/yaird
+top_builddir = .
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = /usr/bin/install -c
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in $(top_srcdir)/configure \
+       $(top_srcdir)/include/config.h.in AUTHORS COPYING ChangeLog \
+       INSTALL NEWS TODO depcomp install-sh missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+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
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run aclocal-1.9
+AMDEP_FALSE = #
+AMDEP_TRUE = 
+AMTAR = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run tar
+AUTOCONF = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run autoconf
+AUTOHEADER = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run autoheader
+AUTOMAKE = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run automake-1.9
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2
+CPPFLAGS = 
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EXEEXT = 
+INITRD_TEMPLATE = Fedora
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
+LDFLAGS = 
+LIBOBJS = 
+LIBS = 
+LTLIBOBJS = 
+MAKEINFO = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run makeinfo
+OBJEXT = o
+PACKAGE = yaird
+PACKAGE_BUGREPORT = 
+PACKAGE_NAME = 
+PACKAGE_STRING = 
+PACKAGE_TARNAME = 
+PACKAGE_VERSION = 
+PATH_SEPARATOR = :
+PERL = /usr/bin/perl
+SET_MAKE = 
+SHELL = /bin/sh
+STRIP = 
+VERSION = 0.0.5
+XMLTO = /usr/bin/xmlto
+ac_ct_CC = gcc
+ac_ct_STRIP = 
+am__fastdepCC_FALSE = #
+am__fastdepCC_TRUE = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = ${AMTAR} chof - "$$tardir"
+am__untar = ${AMTAR} xf -
+bindir = ${exec_prefix}/bin
+build_alias = 
+datadir = ${prefix}/share
+exec_prefix = ${prefix}
+host_alias = 
+includedir = ${prefix}/include
+infodir = ${prefix}/info
+install_sh = /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localstatedir = ${prefix}/var
+mandir = ${prefix}/man
+mkdir_p = mkdir -p --
+oldincludedir = /usr/include
+prefix = /usr/local
+program_transform_name = s,x,x,
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+sysconfdir = ${prefix}/etc
+target_alias = 
+auxdir = $(pkglibdir)/exec
+perldir = $(pkglibdir)/perl
+SUBDIRS = perl templates doc exec
+
+# not compiled, but must go in the tarball.
+EXTRA_DIST = \
+       bootstrap.sh
+
+all: all-recursive
+
+.SUFFIXES:
+am--refresh:
+       @:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
+             cd $(srcdir) && $(AUTOMAKE) --gnu  \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           echo ' $(SHELL) ./config.status'; \
+           $(SHELL) ./config.status;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+include/config.h: include/stamp-h1
+       @if test ! -f $@; then \
+         rm -f include/stamp-h1; \
+         $(MAKE) include/stamp-h1; \
+       else :; fi
+
+include/stamp-h1: $(top_srcdir)/include/config.h.in $(top_builddir)/config.status
+       @rm -f include/stamp-h1
+       cd $(top_builddir) && $(SHELL) ./config.status include/config.h
+$(top_srcdir)/include/config.h.in:  $(am__configure_deps) 
+       cd $(top_srcdir) && $(AUTOHEADER)
+       rm -f include/stamp-h1
+       touch $@
+
+distclean-hdr:
+       -rm -f include/config.h include/stamp-h1
+uninstall-info-am:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(am__remove_distdir)
+       mkdir $(distdir)
+       $(mkdir_p) $(distdir)/doc $(distdir)/include
+       @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 \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(mkdir_p) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+       -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 {} {} \; \
+       || chmod -R a+r $(distdir)
+dist-gzip: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+dist-bzip2: distdir
+       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+dist-tarZ: distdir
+       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+       $(am__remove_distdir)
+
+dist-shar: distdir
+       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+       $(am__remove_distdir)
+
+dist-zip: distdir
+       -rm -f $(distdir).zip
+       zip -rq $(distdir).zip $(distdir)
+       $(am__remove_distdir)
+
+dist dist-all: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       case '$(DIST_ARCHIVES)' in \
+       *.tar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+       *.tar.bz2*) \
+         bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+       *.tar.Z*) \
+         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+       *.shar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+       *.zip*) \
+         unzip $(distdir).zip ;;\
+       esac
+       chmod -R a-w $(distdir); chmod a+w $(distdir)
+       mkdir $(distdir)/_build
+       mkdir $(distdir)/_inst
+       chmod a-w $(distdir)
+       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+         && cd $(distdir)/_build \
+         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+               distuninstallcheck \
+         && chmod -R a-w "$$dc_install_base" \
+         && ({ \
+              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+             } || { rm -rf "$$dc_destdir"; exit 1; }) \
+         && rm -rf "$$dc_destdir" \
+         && $(MAKE) $(AM_MAKEFLAGS) dist \
+         && rm -rf $(DIST_ARCHIVES) \
+         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+       $(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;}'
+distuninstallcheck:
+       @cd $(distuninstallcheck_dir) \
+       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+          || { echo "ERROR: files left after uninstall:" ; \
+               if test -n "$(DESTDIR)"; then \
+                 echo "  (check DESTDIR support)"; \
+               fi ; \
+               $(distuninstallcheck_listfiles) ; \
+               exit 1; } >&2
+distcleancheck: distclean
+       @if test '$(srcdir)' = . ; then \
+         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+         exit 1 ; \
+       fi
+       @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+         || { echo "ERROR: files left in build directory after distclean:" ; \
+              $(distcleancheck_listfiles) ; \
+              exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf $(top_srcdir)/autom4te.cache
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
+       check-am clean clean-generic clean-recursive ctags \
+       ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \
+       dist-tarZ dist-zip distcheck distclean distclean-generic \
+       distclean-hdr 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-recursive pdf \
+       pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
+       uninstall-info-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.
+.NOEXPORT:
diff --git a/rescue/linux/cdrom/yaird-0.0.5/Makefile.am b/rescue/linux/cdrom/yaird-0.0.5/Makefile.am
new file mode 100644 (file)
index 0000000..8a63a4c
--- /dev/null
@@ -0,0 +1,31 @@
+# 
+# Makefile.am -- installation and packaging instructions
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# - auxdir contains executables that may be included in the generated
+#   image
+# - perldir contains perl modules to be included by the main program
+#
+
+auxdir = $(pkglibdir)/exec
+perldir = $(pkglibdir)/perl
+
+SUBDIRS                = perl templates doc exec
+
+# not compiled, but must go in the tarball.
+EXTRA_DIST = \
+       bootstrap.sh
diff --git a/rescue/linux/cdrom/yaird-0.0.5/Makefile.in b/rescue/linux/cdrom/yaird-0.0.5/Makefile.in
new file mode 100644 (file)
index 0000000..71363b1
--- /dev/null
@@ -0,0 +1,601 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# 
+# Makefile.am -- installation and packaging instructions
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# - auxdir contains executables that may be included in the generated
+#   image
+# - perldir contains perl modules to be included by the main program
+#
+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
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in $(top_srcdir)/configure \
+       $(top_srcdir)/include/config.h.in AUTHORS COPYING ChangeLog \
+       INSTALL NEWS TODO depcomp install-sh missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+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
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+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
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INITRD_TEMPLATE = @INITRD_TEMPLATE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+XMLTO = @XMLTO@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_STRIP = @ac_ct_STRIP@
+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@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+auxdir = $(pkglibdir)/exec
+perldir = $(pkglibdir)/perl
+SUBDIRS = perl templates doc exec
+
+# not compiled, but must go in the tarball.
+EXTRA_DIST = \
+       bootstrap.sh
+
+all: all-recursive
+
+.SUFFIXES:
+am--refresh:
+       @:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
+             cd $(srcdir) && $(AUTOMAKE) --gnu  \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           echo ' $(SHELL) ./config.status'; \
+           $(SHELL) ./config.status;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+include/config.h: include/stamp-h1
+       @if test ! -f $@; then \
+         rm -f include/stamp-h1; \
+         $(MAKE) include/stamp-h1; \
+       else :; fi
+
+include/stamp-h1: $(top_srcdir)/include/config.h.in $(top_builddir)/config.status
+       @rm -f include/stamp-h1
+       cd $(top_builddir) && $(SHELL) ./config.status include/config.h
+$(top_srcdir)/include/config.h.in:  $(am__configure_deps) 
+       cd $(top_srcdir) && $(AUTOHEADER)
+       rm -f include/stamp-h1
+       touch $@
+
+distclean-hdr:
+       -rm -f include/config.h include/stamp-h1
+uninstall-info-am:
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       target=`echo $@ | sed s/-recursive//`; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           dot_seen=yes; \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done; \
+       if test "$$dot_seen" = "no"; then \
+         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+       fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+       @failcom='exit 1'; \
+       for f in x $$MAKEFLAGS; do \
+         case $$f in \
+           *=* | --[!k]*);; \
+           *k*) failcom='fail=yes';; \
+         esac; \
+       done; \
+       dot_seen=no; \
+       case "$@" in \
+         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+         *) list='$(SUBDIRS)' ;; \
+       esac; \
+       rev=''; for subdir in $$list; do \
+         if test "$$subdir" = "."; then :; else \
+           rev="$$subdir $$rev"; \
+         fi; \
+       done; \
+       rev="$$rev ."; \
+       target=`echo $@ | sed s/-recursive//`; \
+       for subdir in $$rev; do \
+         echo "Making $$target in $$subdir"; \
+         if test "$$subdir" = "."; then \
+           local_target="$$target-am"; \
+         else \
+           local_target="$$target"; \
+         fi; \
+         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+         || eval $$failcom; \
+       done && test -z "$$fail"
+tags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+       done
+ctags-recursive:
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+       done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+         include_option=--etags-include; \
+         empty_fix=.; \
+       else \
+         include_option=--include; \
+         empty_fix=; \
+       fi; \
+       list='$(SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test ! -f $$subdir/TAGS || \
+             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+         fi; \
+       done; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(am__remove_distdir)
+       mkdir $(distdir)
+       $(mkdir_p) $(distdir)/doc $(distdir)/include
+       @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 \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+       list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+         if test "$$subdir" = .; then :; else \
+           test -d "$(distdir)/$$subdir" \
+           || $(mkdir_p) "$(distdir)/$$subdir" \
+           || exit 1; \
+           distdir=`$(am__cd) $(distdir) && pwd`; \
+           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+           (cd $$subdir && \
+             $(MAKE) $(AM_MAKEFLAGS) \
+               top_distdir="$$top_distdir" \
+               distdir="$$distdir/$$subdir" \
+               distdir) \
+             || exit 1; \
+         fi; \
+       done
+       -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 {} {} \; \
+       || chmod -R a+r $(distdir)
+dist-gzip: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+dist-bzip2: distdir
+       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+       $(am__remove_distdir)
+
+dist-tarZ: distdir
+       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+       $(am__remove_distdir)
+
+dist-shar: distdir
+       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+       $(am__remove_distdir)
+
+dist-zip: distdir
+       -rm -f $(distdir).zip
+       zip -rq $(distdir).zip $(distdir)
+       $(am__remove_distdir)
+
+dist dist-all: distdir
+       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+       $(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       case '$(DIST_ARCHIVES)' in \
+       *.tar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+       *.tar.bz2*) \
+         bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+       *.tar.Z*) \
+         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+       *.shar.gz*) \
+         GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+       *.zip*) \
+         unzip $(distdir).zip ;;\
+       esac
+       chmod -R a-w $(distdir); chmod a+w $(distdir)
+       mkdir $(distdir)/_build
+       mkdir $(distdir)/_inst
+       chmod a-w $(distdir)
+       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+         && cd $(distdir)/_build \
+         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+               distuninstallcheck \
+         && chmod -R a-w "$$dc_install_base" \
+         && ({ \
+              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+             } || { rm -rf "$$dc_destdir"; exit 1; }) \
+         && rm -rf "$$dc_destdir" \
+         && $(MAKE) $(AM_MAKEFLAGS) dist \
+         && rm -rf $(DIST_ARCHIVES) \
+         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+       $(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;}'
+distuninstallcheck:
+       @cd $(distuninstallcheck_dir) \
+       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+          || { echo "ERROR: files left after uninstall:" ; \
+               if test -n "$(DESTDIR)"; then \
+                 echo "  (check DESTDIR support)"; \
+               fi ; \
+               $(distuninstallcheck_listfiles) ; \
+               exit 1; } >&2
+distcleancheck: distclean
+       @if test '$(srcdir)' = . ; then \
+         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+         exit 1 ; \
+       fi
+       @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+         || { echo "ERROR: files left in build directory after distclean:" ; \
+              $(distcleancheck_listfiles) ; \
+              exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile
+installdirs: installdirs-recursive
+installdirs-am:
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf $(top_srcdir)/autom4te.cache
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
+       check-am clean clean-generic clean-recursive ctags \
+       ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \
+       dist-tarZ dist-zip distcheck distclean distclean-generic \
+       distclean-hdr 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-recursive pdf \
+       pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
+       uninstall-info-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.
+.NOEXPORT:
diff --git a/rescue/linux/cdrom/yaird-0.0.5/Makefile.incl b/rescue/linux/cdrom/yaird-0.0.5/Makefile.incl
new file mode 100644 (file)
index 0000000..f9fed0a
--- /dev/null
@@ -0,0 +1,28 @@
+# 
+# Makefile.incl -- shared defines between makefiles
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# - auxdir contains package specific executables that may be included
+#   in the generated image
+# - perldir contains perl modules to be included by the main program
+#
+# This cannot be simply passed from the master makefile; that would
+# be invisible to automake.
+
+auxdir = $(pkglibdir)/exec
+perldir = $(pkglibdir)/perl
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/NEWS b/rescue/linux/cdrom/yaird-0.0.5/NEWS
new file mode 100644 (file)
index 0000000..1184a22
--- /dev/null
@@ -0,0 +1,35 @@
+Version 0.0.5, 2005-03-21
+     * change installation directory from /usr/local/share/yaird/
+       to /usr/local/lib/yaird/, since there are executables included now.
+     * add run_init: executable to make the move to the real root
+       device in initramfs context.
+     * README: new section on (optional) use of klibc,
+       new section on replacing mkinitrd during kernel install.
+     * more reliable shared library detection: works with glibc and
+       klibc; if other C libraries use shared libraries, an error
+       message results.
+     * adapt Debian template to use initramfs rather than initrd.
+       The old initrd template is available as Debian-initrd.
+     * add command line option --root=/dev/hdb, to simplify testing.
+     * allow template to see requested kernel version,
+       and to copy a complete tree to the image.  This makes it
+       possible to put /lib/modules/2.6.10-smp on the image and do hotplug.
+     * Documentation: writeup on initramfs, notes on shared libraries.
+
+Version 0.0.4, 2005-02-23
+     * Process kernel command line options: init=, ro, rw.
+     * Boot into single user mode supported
+     * Support modules outside /lib/modules
+     * Support modules with extension other than .ko
+     * Warn about duplicates in modules.dep
+     * Generated image now waits for device to become visible in /sys,
+       and gives error message if it doesn't
+     * Support 2.6.10 sysfs layout: SCSI now has a
+       new subdirectory 'target'.
+     * Warn about unrecognised paths in /sys
+     * Allow empty lines in /etc/fstab.
+     * Empty lines in /etc/fstab are valid.
+       (Patch Goffredo Baroncelli)
+
+Version 0.0.3, 2005-02-16
+     * First public release.
diff --git a/rescue/linux/cdrom/yaird-0.0.5/README b/rescue/linux/cdrom/yaird-0.0.5/README
new file mode 100644 (file)
index 0000000..33512cb
--- /dev/null
@@ -0,0 +1,218 @@
+
+YAIRD -- Yet Another MkInitRd
+=============================
+
+This is a proof of concept rewrite of mkinitrd, intended to test the
+idea that we can get a more accurate picture of the modules needed
+to boot a linux system by fully utilizing the information in sysfs.
+It comes with templates that make it possible to generate different
+initrd images for different distributions.
+
+Proof of concept means this software is barely tested: it may
+produce a working initrd image, or it may eat your disk.  This
+is a good moment to re-read the "NO WARRANTY" part of the licence,
+and decide whether you want to test this software.
+
+
+Installation
+============
+
+You'll need HTML::Template to run the application; a standard package
+under Debian, in Fedora FC3 available via extras.
+
+Unpack, then configure and install:
+
+       $ ./configure --prefix=$HOME/local --enable-template=Debian
+       $ make install
+
+The --enable-template option is required; it picks one of the templates
+from the template directory to install.
+
+If you want to regenerate the html documentation, you need the xmlto
+package.
+
+If you're installing from version control rather than a tarball,
+you'll also need to have autmake and autoconf available, and
+need to run bootstrap.sh before doing 'configure; make'.
+
+
+Installing with klibc
+=====================
+
+Yaird comes with a small C program to manage the transfer from the initial
+root file system to the real root.  To avoid the overhead of the GNU
+C library, you may want to compile this with klibc.  Note however that
+this is only effective if every other program that is copied to the
+initial root filesystem (such as mount, mknod and a shell) is compiled
+in the same manner.
+
+Recent versions of klibc provide klcc, a wrapper around gcc that makes
+it easier to port programs to klibc.  Installation is faily simple;
+the most important point is to make a symlink to a configured linux
+source tree.  The SHLIBDIR determines where the shared library version
+ends up.  If you want to use klibc for programs used early in the
+boot process it makes sense to put it on the root file system.
+
+       $ cd klibc-0.207
+       $ ln -s /usr/src/linux... linux
+       $ make bindir=$HOME/local/bin \
+               mandir=$HOME/local/man \
+               INSTALLDIR=$HOME/local \
+               SHLIBDIR=$HOME/local/shlib \
+               install
+       $
+
+Once you have klibc, you can configure yaird to make use of it
+as follows:
+
+       $ ./configure CFLAGS=-static CC=$HOME/local/bin/klcc \
+               --prefix=$HOME/local --enable-template=Debian
+       ...
+       $ make install
+
+The use of CFLAGS=-shared is optional.
+
+
+Using the application
+=====================
+
+To make a new initrd image for the current kernel:
+
+       # yaird --format directory --output initrd.d
+
+This creates a directory initrd.d to look at or to package
+manually to a form suitable for booting.
+
+To get an image suitable for use under debian:
+
+       # yaird --format cramfs --output /boot/initrd.img
+
+For Fedora, a cpio file is needed:
+
+       # yaird --format cpio --output /boot/initrd.img
+
+Note that there is no strong relation between distribution
+and image format: nothing stops you from building a template
+that uses initramfs and cpio under Debian.  However, the template
+and the image format do have to match.
+
+To produce a boot image for another kernel:
+
+       # yaird --format directory --output initrd.d 2.6.10-1-686-smp
+
+There is also a '--test' option that will produce an overview
+of block special files, devices, modules etc that may be helpful
+in debugging boot problems.
+
+If you want the generated image to boot into something other than
+the current root, use the --root option.  The block device specified
+must occur in /etc/fstab to allow yaird to find the required file system
+type.
+
+       # yaird --format cramfs --output /boot/tst.img --root /dev/hdb7
+
+Use '--help' for an overview of other command line options.
+
+
+Using yaird as a replacement for mkinitrd
+=========================================
+
+If you install a new kernel from your distribution, that means
+making a new initial boot image.  The postinstall script that
+comes with the kernel will normally do this using mkinitrd;
+if you want yaird to be used instead, some tweaking is necessary.
+
+In Debian, there are a lot of configuration options for the kernel
+installation, but replacing mkinitrd is not among them, so you'll
+have to replace /usr/sbin/mkinitrd with a wrapper around yaird.
+The following worked with debian 2.6.10-1-686:
+
+       #!/bin/sh
+       #
+       # mkinitrd - emulate mkinitrd with yaird for kernel-image installs.
+       #
+       # Copyright (C) 2001-2003 Herbert Xu <herbert@debian.org>
+       #
+       # 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
+       #
+       # $Id$
+
+       PROG=mkinitrd-shimmy
+       outfile=''
+
+       while getopts "d:km:o:r:" flag; do
+               case $flag in
+               d)
+                       echo "$PROG: -d unsupported"
+                       exit 1
+                       ;;
+               k)
+                       echo "$PROG: -k unsupported"
+                       exit 1
+                       ;;
+               m)
+                       # ignore 
+                       ;;
+               o)
+                       outfile="$OPTARG"
+                       ;;
+               r)
+                       echo "$PROG: -d unsupported"
+                       exit 1
+                       ;;
+               *)
+                       echo "$PROG: unknown option $flag"
+                       exit 1
+                       ;;
+               esac
+       done
+       shift $(($OPTIND - 1))
+
+       if [ "$outfile" = "" ]; then
+               echo "$PROG: no output file specified"
+               exit 1
+       fi
+       if [ $# -gt 1 ]; then
+               echo "$PROG: extra arguments found"
+               exit 1
+       fi
+
+       # Note that version may be a pathname;
+       # this is used by the installer for Debian kernel image packages.
+       VERSION=$1
+       [ $# -gt 0 ] || unset VERSION
+       case $VERSION in
+       /lib/modules/*/[!/]*)
+               ;;
+       /lib/modules/[!/]*)
+               VERSION=${VERSION#/lib/modules/}
+               VERSION=${VERSION%%/*}
+               ;;
+       esac
+
+       case $VERSION in
+       */*)
+               echo $PROG: $VERSION is not a valid kernel version >&2
+               exit 1
+               ;;
+       esac
+
+       VERSION="${VERSION-$(uname -r)}"
+
+       exec $HOME/local/sbin/yaird \
+               --verbose --format cpio --output "$outfile" "$VERSION"
+
+For Fedora, you'll have to modify /sbin/new-kernel-package;
+not tested yet.
diff --git a/rescue/linux/cdrom/yaird-0.0.5/TODO b/rescue/linux/cdrom/yaird-0.0.5/TODO
new file mode 100644 (file)
index 0000000..9e79b90
--- /dev/null
@@ -0,0 +1,12 @@
+Todo:
+       - support modprobe.conf
+       - support dm_crypt
+       - support loopback devices as root
+       - add manual page
+       - kernel command line processing: root=,
+       - support multipath
+       - define option to load extra modules?
+       - read config file
+       - ext2 migration, still necessary?
+       - software suspend support
+       - add debian packaging, spec file?
diff --git a/rescue/linux/cdrom/yaird-0.0.5/aclocal.m4 b/rescue/linux/cdrom/yaird-0.0.5/aclocal.m4
new file mode 100644 (file)
index 0000000..74de4a1
--- /dev/null
@@ -0,0 +1,862 @@
+# generated automatically by aclocal 1.9.5 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005  Free Software Foundation, Inc.
+# This file 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# Copyright (C) 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+        [AM_AUTOMAKE_VERSION([1.9.5])])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 7
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 8
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+#serial 3
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`AS_DIRNAME("$mf")`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`AS_DIRNAME(["$file"])`
+    AS_MKDIR_P([$dirpart/$fdir])
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 8
+
+# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 12
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.58])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+                            [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $1 | $1:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes.                 -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 3
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 4
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
+#
+# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
+# created by `make install' are always world readable, even if the
+# installer happens to have an overly restrictive umask (e.g. 077).
+# This was a mistake.  There are at least two reasons why we must not
+# use `-m 0755':
+#   - it causes special bits like SGID to be ignored,
+#   - it may be too restrictive (some setups expect 775 directories).
+#
+# Do not use -m 0755 and let people choose whatever they expect by
+# setting umask.
+#
+# We cannot accept any implementation of `mkdir' that recognizes `-p'.
+# Some implementations (such as Solaris 8's) are not thread-safe: if a
+# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
+# concurrently, both version can detect that a/ is missing, but only
+# one can create it and the other will error out.  Consequently we
+# restrict ourselves to GNU make (using the --version option ensures
+# this.)
+AC_DEFUN([AM_PROG_MKDIR_P],
+[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+  # We used to keeping the `.' as first argument, in order to
+  # allow $(mkdir_p) to be used without argument.  As in
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.  However this is wrong
+  # for two reasons:
+  #  1. if the package is installed by a user who cannot write `.'
+  #     make install will fail,
+  #  2. the above comment should most certainly read
+  #     $(mkdir_p) $(DESTDIR)$(somedir)
+  #     so it does not work when $(somedir) is undefined and
+  #     $(DESTDIR) is not.
+  #  To support the latter case, we have to write
+  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+  #  so the `.' trick is pointless.
+  mkdir_p='mkdir -p --'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--version;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+AC_SUBST([mkdir_p])])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 3
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file 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.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/bootstrap.sh b/rescue/linux/cdrom/yaird-0.0.5/bootstrap.sh
new file mode 100644 (file)
index 0000000..f250918
--- /dev/null
@@ -0,0 +1,34 @@
+#
+# Bootstrap.sh
+#
+# Use this if you got yaird from version control and need
+# to generate the configure scripts that come with the tarball.
+#
+# See http://sources.redhat.com/autobook/.
+# See http://www.gnu.org/software/autoconf/manual/autoconf-2.57/
+#
+# V=--verbose
+# Q=--quiet
+# set -x
+
+# to build makefiles for shared libraries
+# libtoolize --force  || exit 1
+
+# copy definitions from /usr/share to ./aclocal.m4
+# for macros that are used in configure.in
+aclocal $V  || exit 1
+
+# use aclocal.m4 to create a configure file from configure.in
+autoconf $V  || exit 1
+
+# Build config.h.in, needed if you have C code.
+autoheader  || exit 1
+
+# transform makefile.am to makefile.in;
+# copy helpful scripts such as install-sh from /usr/share to here.
+automake $V --add-missing  || exit 1
+
+# At this point, the tree can be tarred, transplanted to the target
+# system and installed with:
+# configure --prefix=/home/santaclaus/testing --enable-template=Debian
+# make install
diff --git a/rescue/linux/cdrom/yaird-0.0.5/config.log b/rescue/linux/cdrom/yaird-0.0.5/config.log
new file mode 100644 (file)
index 0000000..d065009
--- /dev/null
@@ -0,0 +1,281 @@
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by configure, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  $ ./configure --enable-template=Fedora
+
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = rufus.sibbald.com
+uname -m = i686
+uname -r = 2.6.10-1.770_FC3smp
+uname -s = Linux
+uname -v = #1 SMP Thu Feb 24 14:20:06 EST 2005
+
+/usr/bin/uname -p = unknown
+/bin/uname -X     = unknown
+
+/bin/arch              = i686
+/usr/bin/arch -k       = unknown
+/usr/convex/getsysinfo = unknown
+hostinfo               = unknown
+/bin/machine           = unknown
+/usr/bin/oslevel       = unknown
+/bin/universe          = unknown
+
+PATH: /usr/kerberos/bin
+PATH: /usr/local/bin
+PATH: /usr/bin
+PATH: /bin
+PATH: /usr/X11R6/bin
+PATH: /usr/sbin
+PATH: /sbin
+PATH: /home/kern/bin
+PATH: /usr/sbin
+PATH: /sbin
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+configure:1300: checking for a BSD-compatible install
+configure:1355: result: /usr/bin/install -c
+configure:1366: checking whether build environment is sane
+configure:1409: result: yes
+configure:1474: checking for gawk
+configure:1490: found /usr/bin/gawk
+configure:1500: result: gawk
+configure:1510: checking whether make sets $(MAKE)
+configure:1530: result: yes
+configure:1753: checking for perl
+configure:1771: found /usr/bin/perl
+configure:1783: result: /usr/bin/perl
+configure:1836: checking for gcc
+configure:1852: found /usr/bin/gcc
+configure:1862: result: gcc
+configure:2106: checking for C compiler version
+configure:2109: gcc --version </dev/null >&5
+gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)
+Copyright (C) 2004 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.
+
+configure:2112: $? = 0
+configure:2114: gcc -v </dev/null >&5
+Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.2/specs
+Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-java-awt=gtk --host=i386-redhat-linux
+Thread model: posix
+gcc version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)
+configure:2117: $? = 0
+configure:2119: gcc -V </dev/null >&5
+gcc: `-V' option must have argument
+configure:2122: $? = 1
+configure:2145: checking for C compiler default output file name
+configure:2148: gcc    conftest.c  >&5
+configure:2151: $? = 0
+configure:2197: result: a.out
+configure:2202: checking whether the C compiler works
+configure:2208: ./a.out
+configure:2211: $? = 0
+configure:2228: result: yes
+configure:2235: checking whether we are cross compiling
+configure:2237: result: no
+configure:2240: checking for suffix of executables
+configure:2242: gcc -o conftest    conftest.c  >&5
+configure:2245: $? = 0
+configure:2270: result: 
+configure:2276: checking for suffix of object files
+configure:2297: gcc -c   conftest.c >&5
+configure:2300: $? = 0
+configure:2322: result: o
+configure:2326: checking whether we are using the GNU C compiler
+configure:2350: gcc -c   conftest.c >&5
+configure:2356: $? = 0
+configure:2359: test -z                         || test ! -s conftest.err
+configure:2362: $? = 0
+configure:2365: test -s conftest.o
+configure:2368: $? = 0
+configure:2381: result: yes
+configure:2387: checking whether gcc accepts -g
+configure:2408: gcc -c -g  conftest.c >&5
+configure:2414: $? = 0
+configure:2417: test -z                         || test ! -s conftest.err
+configure:2420: $? = 0
+configure:2423: test -s conftest.o
+configure:2426: $? = 0
+configure:2437: result: yes
+configure:2454: checking for gcc option to accept ANSI C
+configure:2524: gcc  -c -g -O2  conftest.c >&5
+configure:2530: $? = 0
+configure:2533: test -z                         || test ! -s conftest.err
+configure:2536: $? = 0
+configure:2539: test -s conftest.o
+configure:2542: $? = 0
+configure:2560: result: none needed
+configure:2578: gcc -c -g -O2  conftest.c >&5
+conftest.c:2: error: syntax error before "me"
+configure:2584: $? = 1
+configure: failed program was:
+| #ifndef __cplusplus
+|   choke me
+| #endif
+configure:2725: checking for style of include used by make
+configure:2753: result: GNU
+configure:2781: checking dependency style of gcc
+configure:2871: result: gcc3
+configure:2894: checking for xmlto
+configure:2912: found /usr/bin/xmlto
+configure:2925: result: /usr/bin/xmlto
+configure:3053: creating ./config.status
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by config.status, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status 
+
+on rufus.sibbald.com
+
+config.status:734: creating Makefile
+config.status:734: creating templates/Makefile
+config.status:734: creating perl/Makefile
+config.status:734: creating doc/Makefile
+config.status:734: creating exec/Makefile
+config.status:734: creating doc/yaird.xml
+config.status:800: creating include/config.h
+config.status:1066: executing depfiles commands
+
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+
+ac_cv_c_compiler_gnu=yes
+ac_cv_env_CC_set=
+ac_cv_env_CC_value=
+ac_cv_env_CFLAGS_set=
+ac_cv_env_CFLAGS_value=
+ac_cv_env_CPPFLAGS_set=
+ac_cv_env_CPPFLAGS_value=
+ac_cv_env_LDFLAGS_set=
+ac_cv_env_LDFLAGS_value=
+ac_cv_env_build_alias_set=
+ac_cv_env_build_alias_value=
+ac_cv_env_host_alias_set=
+ac_cv_env_host_alias_value=
+ac_cv_env_target_alias_set=
+ac_cv_env_target_alias_value=
+ac_cv_exeext=
+ac_cv_objext=o
+ac_cv_path_PERL=/usr/bin/perl
+ac_cv_path_XMLTO=/usr/bin/xmlto
+ac_cv_path_install='/usr/bin/install -c'
+ac_cv_prog_AWK=gawk
+ac_cv_prog_ac_ct_CC=gcc
+ac_cv_prog_cc_g=yes
+ac_cv_prog_cc_stdc=
+ac_cv_prog_make_make_set=yes
+am_cv_CC_dependencies_compiler_type=gcc3
+
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+
+ACLOCAL='${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run aclocal-1.9'
+AMDEPBACKSLASH='\'
+AMDEP_FALSE='#'
+AMDEP_TRUE=''
+AMTAR='${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run tar'
+AUTOCONF='${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run autoconf'
+AUTOHEADER='${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run autoheader'
+AUTOMAKE='${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run automake-1.9'
+AWK='gawk'
+CC='gcc'
+CCDEPMODE='depmode=gcc3'
+CFLAGS='-g -O2'
+CPPFLAGS=''
+CYGPATH_W='echo'
+DEFS='-DHAVE_CONFIG_H'
+DEPDIR='.deps'
+ECHO_C=''
+ECHO_N='-n'
+ECHO_T=''
+EXEEXT=''
+INITRD_TEMPLATE='Fedora'
+INSTALL_DATA='${INSTALL} -m 644'
+INSTALL_PROGRAM='${INSTALL}'
+INSTALL_SCRIPT='${INSTALL}'
+INSTALL_STRIP_PROGRAM='${SHELL} $(install_sh) -c -s'
+LDFLAGS=''
+LIBOBJS=''
+LIBS=''
+LTLIBOBJS=''
+MAKEINFO='${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run makeinfo'
+OBJEXT='o'
+PACKAGE='yaird'
+PACKAGE_BUGREPORT=''
+PACKAGE_NAME=''
+PACKAGE_STRING=''
+PACKAGE_TARNAME=''
+PACKAGE_VERSION=''
+PATH_SEPARATOR=':'
+PERL='/usr/bin/perl'
+SET_MAKE=''
+SHELL='/bin/sh'
+STRIP=''
+VERSION='0.0.5'
+XMLTO='/usr/bin/xmlto'
+ac_ct_CC='gcc'
+ac_ct_STRIP=''
+am__fastdepCC_FALSE='#'
+am__fastdepCC_TRUE=''
+am__include='include'
+am__leading_dot='.'
+am__quote=''
+am__tar='${AMTAR} chof - "$$tardir"'
+am__untar='${AMTAR} xf -'
+bindir='${exec_prefix}/bin'
+build_alias=''
+datadir='${prefix}/share'
+exec_prefix='${prefix}'
+host_alias=''
+includedir='${prefix}/include'
+infodir='${prefix}/info'
+install_sh='/home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/install-sh'
+libdir='${exec_prefix}/lib'
+libexecdir='${exec_prefix}/libexec'
+localstatedir='${prefix}/var'
+mandir='${prefix}/man'
+mkdir_p='mkdir -p --'
+oldincludedir='/usr/include'
+prefix='/usr/local'
+program_transform_name='s,x,x,'
+sbindir='${exec_prefix}/sbin'
+sharedstatedir='${prefix}/com'
+sysconfdir='${prefix}/etc'
+target_alias=''
+
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+
+#define PACKAGE "yaird"
+#define PACKAGE_BUGREPORT ""
+#define PACKAGE_NAME ""
+#define PACKAGE_STRING ""
+#define PACKAGE_TARNAME ""
+#define PACKAGE_VERSION ""
+#define VERSION "0.0.5"
+
+configure: exit 0
diff --git a/rescue/linux/cdrom/yaird-0.0.5/config.status b/rescue/linux/cdrom/yaird-0.0.5/config.status
new file mode 100755 (executable)
index 0000000..afa833b
--- /dev/null
@@ -0,0 +1,1157 @@
+#! /bin/sh
+# Generated by configure.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=${CONFIG_SHELL-/bin/sh}
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be 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+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)$' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+         /^X\/\(\/\/\)$/{ s//\1/; q; }
+         /^X\/\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+        case $as_dir in
+        /*)
+          if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+            $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+            $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+            CONFIG_SHELL=$as_dir/$as_base
+            export CONFIG_SHELL
+            exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+          fi;;
+        esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='     ' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS="  $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.  Logging --version etc. is OK.
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+config_files=" Makefile templates/Makefile perl/Makefile doc/Makefile exec/Makefile doc/yaird.xml"
+config_headers=" include/config.h"
+config_commands=" depfiles"
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+                  instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+                  instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+ac_cs_version="\
+config.status
+configured by ./configure, generated by GNU Autoconf 2.59,
+  with options \"'--enable-template=Fedora'\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=.
+INSTALL="/usr/bin/install -c"
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  -*)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_option=$1
+     ac_need_defaults=false;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1" ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+if $ac_cs_recheck; then
+  echo "running /bin/sh ./configure " '--enable-template=Fedora' $ac_configure_extra_args " --no-create --no-recursion" >&6
+  exec /bin/sh ./configure '--enable-template=Fedora' $ac_configure_extra_args --no-create --no-recursion
+fi
+
+#
+# INIT-COMMANDS section.
+#
+
+AMDEP_TRUE="" ac_aux_dir="."
+
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  "templates/Makefile" ) CONFIG_FILES="$CONFIG_FILES templates/Makefile" ;;
+  "perl/Makefile" ) CONFIG_FILES="$CONFIG_FILES perl/Makefile" ;;
+  "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+  "exec/Makefile" ) CONFIG_FILES="$CONFIG_FILES exec/Makefile" ;;
+  "doc/yaird.xml" ) CONFIG_FILES="$CONFIG_FILES doc/yaird.xml" ;;
+  "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+  "include/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;;
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./confstat$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t$/@;t t/; /@;t t$/s/[\\&,]/\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t$/,;t t/' >$tmp/subs.sed <<\CEOF
+s,@SHELL@,/bin/sh,;t t
+s,@PATH_SEPARATOR@,:,;t t
+s,@PACKAGE_NAME@,,;t t
+s,@PACKAGE_TARNAME@,,;t t
+s,@PACKAGE_VERSION@,,;t t
+s,@PACKAGE_STRING@,,;t t
+s,@PACKAGE_BUGREPORT@,,;t t
+s,@exec_prefix@,${prefix},;t t
+s,@prefix@,/usr/local,;t t
+s,@program_transform_name@,s,x,x,,;t t
+s,@bindir@,${exec_prefix}/bin,;t t
+s,@sbindir@,${exec_prefix}/sbin,;t t
+s,@libexecdir@,${exec_prefix}/libexec,;t t
+s,@datadir@,${prefix}/share,;t t
+s,@sysconfdir@,${prefix}/etc,;t t
+s,@sharedstatedir@,${prefix}/com,;t t
+s,@localstatedir@,${prefix}/var,;t t
+s,@libdir@,${exec_prefix}/lib,;t t
+s,@includedir@,${prefix}/include,;t t
+s,@oldincludedir@,/usr/include,;t t
+s,@infodir@,${prefix}/info,;t t
+s,@mandir@,${prefix}/man,;t t
+s,@build_alias@,,;t t
+s,@host_alias@,,;t t
+s,@target_alias@,,;t t
+s,@DEFS@,-DHAVE_CONFIG_H,;t t
+s,@ECHO_C@,,;t t
+s,@ECHO_N@,-n,;t t
+s,@ECHO_T@,,;t t
+s,@LIBS@,,;t t
+s,@INSTALL_PROGRAM@,${INSTALL},;t t
+s,@INSTALL_SCRIPT@,${INSTALL},;t t
+s,@INSTALL_DATA@,${INSTALL} -m 644,;t t
+s,@CYGPATH_W@,echo,;t t
+s,@PACKAGE@,yaird,;t t
+s,@VERSION@,0.0.5,;t t
+s,@ACLOCAL@,${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run aclocal-1.9,;t t
+s,@AUTOCONF@,${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run autoconf,;t t
+s,@AUTOMAKE@,${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run automake-1.9,;t t
+s,@AUTOHEADER@,${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run autoheader,;t t
+s,@MAKEINFO@,${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run makeinfo,;t t
+s,@install_sh@,/home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/install-sh,;t t
+s,@STRIP@,,;t t
+s,@ac_ct_STRIP@,,;t t
+s,@INSTALL_STRIP_PROGRAM@,${SHELL} $(install_sh) -c -s,;t t
+s,@mkdir_p@,mkdir -p --,;t t
+s,@AWK@,gawk,;t t
+s,@SET_MAKE@,,;t t
+s,@am__leading_dot@,.,;t t
+s,@AMTAR@,${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run tar,;t t
+s,@am__tar@,${AMTAR} chof - "$$tardir",;t t
+s,@am__untar@,${AMTAR} xf -,;t t
+s,@INITRD_TEMPLATE@,Fedora,;t t
+s,@PERL@,/usr/bin/perl,;t t
+s,@CC@,gcc,;t t
+s,@CFLAGS@,-g -O2,;t t
+s,@LDFLAGS@,,;t t
+s,@CPPFLAGS@,,;t t
+s,@ac_ct_CC@,gcc,;t t
+s,@EXEEXT@,,;t t
+s,@OBJEXT@,o,;t t
+s,@DEPDIR@,.deps,;t t
+s,@am__include@,include,;t t
+s,@am__quote@,,;t t
+s,@AMDEP_TRUE@,,;t t
+s,@AMDEP_FALSE@,#,;t t
+s,@AMDEPBACKSLASH@,\,;t t
+s,@CCDEPMODE@,depmode=gcc3,;t t
+s,@am__fastdepCC_TRUE@,,;t t
+s,@am__fastdepCC_FALSE@,#,;t t
+s,@XMLTO@,/usr/bin/xmlto,;t t
+s,@LIBOBJS@,,;t t
+s,@LTLIBOBJS@,,;t t
+CEOF
+
+  # Split the substitutions into bite-sized pieces for seds with
+  # small command number limits, like on Digital OSF/1 and HP-UX.
+  ac_max_sed_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # Line after last line for current file.
+  ac_more_lines=:
+  ac_sed_cmds=
+  while $ac_more_lines; do
+    if test $ac_beg -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+       ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+       ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+       cat >$tmp/stdin
+       ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+       ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+       ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$ac_file" : 'X\(//\)[^/]' \| \
+        X"$ac_file" : 'X\(//\)$' \| \
+        X"$ac_file" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+  esac
+
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    configure_input=
+  else
+    configure_input="$ac_file.  "
+  fi
+  configure_input=$configure_input"Generated from `echo $ac_file_in |
+                                    sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+        # Absolute (can't be DOS-style, as IFS=:)
+        test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+        echo "$f";;
+      *) # Relative
+        if test -f "$f"; then
+          # Build tree
+          echo "$f"
+        elif test -f "$srcdir/$f"; then
+          # Source tree
+          echo "$srcdir/$f"
+        else
+          # /dev/null tree
+          { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+        fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+  sed "/^[      ]*VPATH[        ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[    ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[      ]*$//;
+}
+
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([   ]*\)#\([        ]*define[       ][      ]*\)'
+ac_dB='[        ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([   ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+       cat >$tmp/stdin
+       ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+       ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+       ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+        # Absolute (can't be DOS-style, as IFS=:)
+        test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+        # Do quote $f, to prevent DOS paths from being IFS'd.
+        echo "$f";;
+      *) # Relative
+        if test -f "$f"; then
+          # Build tree
+          echo "$f"
+        elif test -f "$srcdir/$f"; then
+          # Source tree
+          echo "$srcdir/$f"
+        else
+          # /dev/null tree
+          { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+        fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+  # Remove the trailing spaces.
+  sed 's/[      ]*$//' $ac_file_inputs >$tmp/in
+
+  # Handle all the #define templates only if necessary.
+  if grep "^[   ]*#[    ]*define" $tmp/in >/dev/null; then
+  # If there are no defines, we may have an empty if/fi
+  :
+  cat >$tmp/defines.sed <<CEOF
+/^[     ]*#[    ]*define/!b
+t clr
+: clr
+${ac_dA}PACKAGE_NAME${ac_dB}PACKAGE_NAME${ac_dC}""${ac_dD}
+${ac_dA}PACKAGE_TARNAME${ac_dB}PACKAGE_TARNAME${ac_dC}""${ac_dD}
+${ac_dA}PACKAGE_VERSION${ac_dB}PACKAGE_VERSION${ac_dC}""${ac_dD}
+${ac_dA}PACKAGE_STRING${ac_dB}PACKAGE_STRING${ac_dC}""${ac_dD}
+${ac_dA}PACKAGE_BUGREPORT${ac_dB}PACKAGE_BUGREPORT${ac_dC}""${ac_dD}
+${ac_dA}PACKAGE${ac_dB}PACKAGE${ac_dC}"yaird"${ac_dD}
+${ac_dA}VERSION${ac_dB}VERSION${ac_dC}"0.0.5"${ac_dD}
+CEOF
+  sed -f $tmp/defines.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+
+  fi # grep
+
+  # Handle all the #undef templates
+  cat >$tmp/undefs.sed <<CEOF
+/^[     ]*#[    ]*undef/!b
+t clr
+: clr
+${ac_uA}PACKAGE_NAME${ac_uB}PACKAGE_NAME${ac_uC}""${ac_uD}
+${ac_uA}PACKAGE_TARNAME${ac_uB}PACKAGE_TARNAME${ac_uC}""${ac_uD}
+${ac_uA}PACKAGE_VERSION${ac_uB}PACKAGE_VERSION${ac_uC}""${ac_uD}
+${ac_uA}PACKAGE_STRING${ac_uB}PACKAGE_STRING${ac_uC}""${ac_uD}
+${ac_uA}PACKAGE_BUGREPORT${ac_uB}PACKAGE_BUGREPORT${ac_uC}""${ac_uD}
+${ac_uA}PACKAGE${ac_uB}PACKAGE${ac_uC}"yaird"${ac_uD}
+${ac_uA}VERSION${ac_uB}VERSION${ac_uC}"0.0.5"${ac_uD}
+s,^[    ]*#[    ]*undef[        ][      ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+CEOF
+  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    echo "/* Generated by configure.  */" >$tmp/config.h
+  else
+    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
+  fi
+  cat $tmp/in >>$tmp/config.h
+  rm -f $tmp/in
+  if test x"$ac_file" != x-; then
+    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$ac_file" : 'X\(//\)[^/]' \| \
+        X"$ac_file" : 'X\(//\)$' \| \
+        X"$ac_file" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+      { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+      rm -f $ac_file
+      mv $tmp/config.h $ac_file
+    fi
+  else
+    cat $tmp/config.h
+    rm -f $tmp/config.h
+  fi
+# Compute $ac_file's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $ac_file | $ac_file:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
+$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X$ac_file : 'X\(//\)[^/]' \| \
+        X$ac_file : 'X\(//\)$' \| \
+        X$ac_file : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X$ac_file |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`/stamp-h$_am_stamp_count
+done
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$ac_dest" : 'X\(//\)[^/]' \| \
+        X"$ac_dest" : 'X\(//\)$' \| \
+        X"$ac_dest" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+  case $ac_dest in
+    depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`(dirname "$mf") 2>/dev/null ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$mf" : 'X\(//\)[^/]' \| \
+        X"$mf" : 'X\(//\)$' \| \
+        X"$mf" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`(dirname "$file") 2>/dev/null ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$file" : 'X\(//\)[^/]' \| \
+        X"$file" : 'X\(//\)$' \| \
+        X"$file" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+    { if $as_mkdir_p; then
+    mkdir -p $dirpart/$fdir
+  else
+    as_dir=$dirpart/$fdir
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
+echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+ ;;
+  esac
+done
+
+{ (exit 0); exit 0; }
diff --git a/rescue/linux/cdrom/yaird-0.0.5/configure b/rescue/linux/cdrom/yaird-0.0.5/configure
new file mode 100755 (executable)
index 0000000..2be1d15
--- /dev/null
@@ -0,0 +1,4345 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59.
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be 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+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)$' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+         /^X\/\(\/\/\)$/{ s//\1/; q; }
+         /^X\/\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+        case $as_dir in
+        /*)
+          if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+            $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+            $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+            CONFIG_SHELL=$as_dir/$as_base
+            export CONFIG_SHELL
+            exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+          fi;;
+        esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='     ' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS="  $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete.  It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME=
+PACKAGE_TARNAME=
+PACKAGE_VERSION=
+PACKAGE_STRING=
+PACKAGE_BUGREPORT=
+
+ac_unique_file="perl/main.pl"
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar INITRD_TEMPLATE PERL CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE XMLTO LIBOBJS LTLIBOBJS'
+ac_subst_files=''
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_option in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    eval "enable_$ac_feature=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_$ac_feature='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_$ac_package='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/-/_/g'`
+    eval "with_$ac_package=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+    eval "$ac_envvar='$ac_optarg'"
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+             localstatedir libdir includedir oldincludedir infodir mandir
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$0" : 'X\(//\)[^/]' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+   { (exit 1); exit 1; }; }
+  else
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+  fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+   { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures this package to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+  cat <<_ACEOF
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                         [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                         [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --infodir=DIR          info documentation [PREFIX/info]
+  --mandir=DIR           man documentation [PREFIX/man]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-template=name  install templates/name.pm as initrd template (no
+                          default)
+  --enable-nuke           Nuke initramfs before moving to real root
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  ac_popdir=`pwd`
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d $ac_dir || continue
+    ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+    cd $ac_dir
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f $ac_srcdir/configure.gnu; then
+      echo
+      $SHELL $ac_srcdir/configure.gnu  --help=recursive
+    elif test -f $ac_srcdir/configure; then
+      echo
+      $SHELL $ac_srcdir/configure  --help=recursive
+    elif test -f $ac_srcdir/configure.ac ||
+          test -f $ac_srcdir/configure.in; then
+      echo
+      $ac_configure --help
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi
+    cd "$ac_popdir"
+  done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+  cat <<\_ACEOF
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit 0
+fi
+exec 5>config.log
+cat >&5 <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by $as_me, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *" "*|*"   "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+       ac_must_keep_next=false # Got value, back to normal.
+      else
+       case $ac_arg in
+         *=* | --config-cache | -C | -disable-* | --disable-* \
+         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+         | -with-* | --with-* | -without-* | --without-* | --x)
+           case "$ac_configure_args0 " in
+             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+           esac
+           ;;
+         -* ) ac_must_keep_next=true ;;
+       esac
+      fi
+      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+      # Get rid of the leading space.
+      ac_sep=" "
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+{
+  (set) 2>&1 |
+    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      sed -n \
+       "s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+      ;;
+    *)
+      sed -n \
+       "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+}
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=$`echo $ac_var`
+      echo "$ac_var='"'"'$ac_val'"'"'"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+       eval ac_val=$`echo $ac_var`
+       echo "$ac_var='"'"'$ac_val'"'"'"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      sed "/^$/d" confdefs.h | sort
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core &&
+  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+     ' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . $cache_file;;
+      *)                      . ./$cache_file;;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+              sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+  eval ac_new_val="\$ac_env_${ac_var}_value"
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+       { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+       { echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+       { echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+       ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *" "*|*"   "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+YAIRD_VERSION=0.0.5
+am__api_version="1.9"
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f $ac_dir/shtool; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
+echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+       if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+         if test $ac_prog = install &&
+           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         elif test $ac_prog = install &&
+           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # program-specific install script used by HP pwplus--don't use.
+           :
+         else
+           ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+           break 3
+         fi
+       fi
+      done
+    done
+    ;;
+esac
+done
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL=$ac_install_sh
+  fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+test "$program_prefix" != NONE &&
+  program_transform_name="s,^,$program_prefix,;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s,\$,$program_suffix,;$program_transform_name"
+# Double any \ or $.  echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm conftest.sed
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
+  # We used to keeping the `.' as first argument, in order to
+  # allow $(mkdir_p) to be used without argument.  As in
+  #   $(mkdir_p) $(somedir)
+  # where $(somedir) is conditionally defined.  However this is wrong
+  # for two reasons:
+  #  1. if the package is installed by a user who cannot write `.'
+  #     make install will fail,
+  #  2. the above comment should most certainly read
+  #     $(mkdir_p) $(DESTDIR)$(somedir)
+  #     so it does not work when $(somedir) is undefined and
+  #     $(DESTDIR) is not.
+  #  To support the latter case, we have to write
+  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
+  #  so the `.' trick is pointless.
+  mkdir_p='mkdir -p --'
+else
+  # On NextStep and OpenStep, the `mkdir' command does not
+  # recognize any option.  It will interpret all options as
+  # directories to create, and then abort because `.' already
+  # exists.
+  for d in ./-p ./--version;
+  do
+    test -d $d && rmdir $d
+  done
+  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
+  if test -f "$ac_aux_dir/mkinstalldirs"; then
+    mkdir_p='$(mkinstalldirs)'
+  else
+    mkdir_p='$(install_sh) -d'
+  fi
+fi
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AWK+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AWK="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$AWK" && break
+done
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+all:
+       @echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+  SET_MAKE=
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE=yaird
+ VERSION=${YAIRD_VERSION}
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  STRIP=$ac_ct_STRIP
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+
+#
+# Required optional feature to determine which template to install.
+# Packagers are expected to put their own template in ./templates
+# before configuring, so this should not get in their way.
+# This should go away once we have option file parsing.
+#
+# Check whether --enable-template or --disable-template was given.
+if test "${enable_template+set}" = set; then
+  enableval="$enable_template"
+
+               if test -f "templates/$enableval.pm"
+               then
+                       INITRD_TEMPLATE="$enableval"
+
+               else
+                       { { echo "$as_me:$LINENO: error: Template '$enableval' not found in ./templates" >&5
+echo "$as_me: error: Template '$enableval' not found in ./templates" >&2;}
+   { (exit 1); exit 1; }; }
+               fi
+
+else
+   { { echo "$as_me:$LINENO: error: required option --enable-template=xxx is missing" >&5
+echo "$as_me: error: required option --enable-template=xxx is missing" >&2;}
+   { (exit 1); exit 1; }; }
+fi;
+
+# Check whether --enable-nuke or --disable-nuke was given.
+if test "${enable_nuke+set}" = set; then
+  enableval="$enable_nuke"
+
+               case "${enableval}" in
+               yes) enable_nuke=true ;;
+               no)  enable_nuke=false ;;
+               *) { { echo "$as_me:$LINENO: error: bad value ${enableval} for --enable-nuke" >&5
+echo "$as_me: error: bad value ${enableval} for --enable-nuke" >&2;}
+   { (exit 1); exit 1; }; } ;;
+               esac
+
+else
+
+               enable_nuke=false
+
+fi;
+if test "$enable_nuke" = true; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NUKE 1
+_ACEOF
+
+fi
+
+# Checks for programs.
+# Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_PERL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PERL in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  ;;
+esac
+fi
+PERL=$ac_cv_path_PERL
+
+if test -n "$PERL"; then
+  echo "$as_me:$LINENO: result: $PERL" >&5
+echo "${ECHO_T}$PERL" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CC" && break
+done
+
+  CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Find the output, starting from the most likely.  This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+       ;;
+    conftest.$ac_ext )
+       # This is the source file.
+       ;;
+    [ab].out )
+       # We found the default executable, but exeext='' is most
+       # certainly right.
+       break;;
+    *.* )
+       ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+       # FIXME: I believe we export ac_cv_exeext for Libtool,
+       # but it would be cool to find out if it's true.  Does anybody
+       # maintain Libtool? --akim.
+       export ac_cv_exeext
+       break;;
+    * )
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+       cross_compiling=yes
+    else
+       { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+         export ac_cv_exeext
+         break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std1 is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX                  -qlanglvl=ansi
+# Ultrix and OSF/1     -std1
+# HP-UX 10.20 and later        -Ae
+# HP-UX older versions -Aa -D_HPUX_SOURCE
+# SVR4                 -Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+        { ac_try='test -z "$ac_c_werror_flag"                   || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+        { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+DEPDIR="${am__leading_dot}deps"
+
+          ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+       @echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+
+
+echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+  enableval="$enable_dependency_tracking"
+
+fi;
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+
+
+if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+
+
+depcc="$CC"   am_compiler_list=
+
+echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+
+
+if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+#
+# XML formatting; unclear what processor is most widely available.
+#
+# Extract the first word of "xmlto", so it can be a program name with args.
+set dummy xmlto; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_path_XMLTO+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $XMLTO in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_XMLTO="$XMLTO" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_XMLTO="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_path_XMLTO" && ac_cv_path_XMLTO=":"
+  ;;
+esac
+fi
+XMLTO=$ac_cv_path_XMLTO
+
+if test -n "$XMLTO"; then
+  echo "$as_me:$LINENO: result: $XMLTO" >&5
+echo "${ECHO_T}$XMLTO" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+# Checks for libraries.
+# Checks for header files.
+# Checks for typedefs, structures, and compiler characteristics.
+# Checks for library functions.
+
+# Use this when we need to compile C programs.
+          ac_config_headers="$ac_config_headers include/config.h"
+
+
+                                                            ac_config_files="$ac_config_files Makefile templates/Makefile perl/Makefile doc/Makefile exec/Makefile doc/yaird.xml"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+       "s/'/'\\\\''/g;
+         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+       "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[         ]*VPATH[        ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[    ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[      ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_i=`echo "$ac_i" |
+        sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+  # 2. Add them.
+  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be 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+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$0" : 'X\(//\)$' \| \
+        X"$0" : 'X\(/\)$' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+         /^X\/\(\/\/\)$/{ s//\1/; q; }
+         /^X\/\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+        case $as_dir in
+        /*)
+          if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+            $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+            $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+            CONFIG_SHELL=$as_dir/$as_base
+            export CONFIG_SHELL
+            exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+          fi;;
+        esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='     ' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS="  $as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.  Logging --version etc. is OK.
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+                  instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+                  instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf@gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+config.status
+configured by $0, generated by GNU Autoconf 2.59,
+  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  -*)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_option=$1
+     ac_need_defaults=false;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1" ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  "templates/Makefile" ) CONFIG_FILES="$CONFIG_FILES templates/Makefile" ;;
+  "perl/Makefile" ) CONFIG_FILES="$CONFIG_FILES perl/Makefile" ;;
+  "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+  "exec/Makefile" ) CONFIG_FILES="$CONFIG_FILES exec/Makefile" ;;
+  "doc/yaird.xml" ) CONFIG_FILES="$CONFIG_FILES doc/yaird.xml" ;;
+  "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+  "include/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;;
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./confstat$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s,@SHELL@,$SHELL,;t t
+s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s,@exec_prefix@,$exec_prefix,;t t
+s,@prefix@,$prefix,;t t
+s,@program_transform_name@,$program_transform_name,;t t
+s,@bindir@,$bindir,;t t
+s,@sbindir@,$sbindir,;t t
+s,@libexecdir@,$libexecdir,;t t
+s,@datadir@,$datadir,;t t
+s,@sysconfdir@,$sysconfdir,;t t
+s,@sharedstatedir@,$sharedstatedir,;t t
+s,@localstatedir@,$localstatedir,;t t
+s,@libdir@,$libdir,;t t
+s,@includedir@,$includedir,;t t
+s,@oldincludedir@,$oldincludedir,;t t
+s,@infodir@,$infodir,;t t
+s,@mandir@,$mandir,;t t
+s,@build_alias@,$build_alias,;t t
+s,@host_alias@,$host_alias,;t t
+s,@target_alias@,$target_alias,;t t
+s,@DEFS@,$DEFS,;t t
+s,@ECHO_C@,$ECHO_C,;t t
+s,@ECHO_N@,$ECHO_N,;t t
+s,@ECHO_T@,$ECHO_T,;t t
+s,@LIBS@,$LIBS,;t t
+s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s,@INSTALL_DATA@,$INSTALL_DATA,;t t
+s,@CYGPATH_W@,$CYGPATH_W,;t t
+s,@PACKAGE@,$PACKAGE,;t t
+s,@VERSION@,$VERSION,;t t
+s,@ACLOCAL@,$ACLOCAL,;t t
+s,@AUTOCONF@,$AUTOCONF,;t t
+s,@AUTOMAKE@,$AUTOMAKE,;t t
+s,@AUTOHEADER@,$AUTOHEADER,;t t
+s,@MAKEINFO@,$MAKEINFO,;t t
+s,@install_sh@,$install_sh,;t t
+s,@STRIP@,$STRIP,;t t
+s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+s,@mkdir_p@,$mkdir_p,;t t
+s,@AWK@,$AWK,;t t
+s,@SET_MAKE@,$SET_MAKE,;t t
+s,@am__leading_dot@,$am__leading_dot,;t t
+s,@AMTAR@,$AMTAR,;t t
+s,@am__tar@,$am__tar,;t t
+s,@am__untar@,$am__untar,;t t
+s,@INITRD_TEMPLATE@,$INITRD_TEMPLATE,;t t
+s,@PERL@,$PERL,;t t
+s,@CC@,$CC,;t t
+s,@CFLAGS@,$CFLAGS,;t t
+s,@LDFLAGS@,$LDFLAGS,;t t
+s,@CPPFLAGS@,$CPPFLAGS,;t t
+s,@ac_ct_CC@,$ac_ct_CC,;t t
+s,@EXEEXT@,$EXEEXT,;t t
+s,@OBJEXT@,$OBJEXT,;t t
+s,@DEPDIR@,$DEPDIR,;t t
+s,@am__include@,$am__include,;t t
+s,@am__quote@,$am__quote,;t t
+s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
+s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
+s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
+s,@CCDEPMODE@,$CCDEPMODE,;t t
+s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
+s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
+s,@XMLTO@,$XMLTO,;t t
+s,@LIBOBJS@,$LIBOBJS,;t t
+s,@LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+  cat >>$CONFIG_STATUS <<\_ACEOF
+  # Split the substitutions into bite-sized pieces for seds with
+  # small command number limits, like on Digital OSF/1 and HP-UX.
+  ac_max_sed_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # Line after last line for current file.
+  ac_more_lines=:
+  ac_sed_cmds=
+  while $ac_more_lines; do
+    if test $ac_beg -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+       ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+       ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+       cat >$tmp/stdin
+       ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+       ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+       ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$ac_file" : 'X\(//\)[^/]' \| \
+        X"$ac_file" : 'X\(//\)$' \| \
+        X"$ac_file" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+  esac
+
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    configure_input=
+  else
+    configure_input="$ac_file.  "
+  fi
+  configure_input=$configure_input"Generated from `echo $ac_file_in |
+                                    sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+        # Absolute (can't be DOS-style, as IFS=:)
+        test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+        echo "$f";;
+      *) # Relative
+        if test -f "$f"; then
+          # Build tree
+          echo "$f"
+        elif test -f "$srcdir/$f"; then
+          # Source tree
+          echo "$srcdir/$f"
+        else
+          # /dev/null tree
+          { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+        fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+s,@INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([   ]*\)#\([        ]*define[       ][      ]*\)'
+ac_dB='[        ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([   ]*\)#\([        ]*\)undef\([    ][      ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+       cat >$tmp/stdin
+       ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+       ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+       ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+        # Absolute (can't be DOS-style, as IFS=:)
+        test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+        # Do quote $f, to prevent DOS paths from being IFS'd.
+        echo "$f";;
+      *) # Relative
+        if test -f "$f"; then
+          # Build tree
+          echo "$f"
+        elif test -f "$srcdir/$f"; then
+          # Source tree
+          echo "$srcdir/$f"
+        else
+          # /dev/null tree
+          { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+        fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+  # Remove the trailing spaces.
+  sed 's/[      ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h.  The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status.  Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[    ]*#[    ]*define[       ][      ]*\([^  (][^    (]*\)\(([^)]*)\)[       ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[    ]*#[    ]*define[       ][      ]*\([^  ][^     ]*\)[   ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless.  Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\_ACEOF
+s,^[    ]*#[    ]*undef[        ][      ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo '  if grep "^[     ]*#[    ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo '  :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+  # Write a limited-size here document to $tmp/defines.sed.
+  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#define' lines.
+  echo '/^[     ]*#[    ]*define/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/defines.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo '  fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+  # Write a limited-size here document to $tmp/undefs.sed.
+  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#undef'
+  echo '/^[     ]*#[    ]*undef/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+  rm -f conftest.undefs
+  mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    echo "/* Generated by configure.  */" >$tmp/config.h
+  else
+    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
+  fi
+  cat $tmp/in >>$tmp/config.h
+  rm -f $tmp/in
+  if test x"$ac_file" != x-; then
+    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$ac_file" : 'X\(//\)[^/]' \| \
+        X"$ac_file" : 'X\(//\)$' \| \
+        X"$ac_file" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+      { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+      rm -f $ac_file
+      mv $tmp/config.h $ac_file
+    fi
+  else
+    cat $tmp/config.h
+    rm -f $tmp/config.h
+  fi
+# Compute $ac_file's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $ac_file | $ac_file:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
+$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X$ac_file : 'X\(//\)[^/]' \| \
+        X$ac_file : 'X\(//\)$' \| \
+        X$ac_file : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X$ac_file |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`/stamp-h$_am_stamp_count
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$ac_dest" : 'X\(//\)[^/]' \| \
+        X"$ac_dest" : 'X\(//\)$' \| \
+        X"$ac_dest" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+  case $ac_dest in
+    depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`(dirname "$mf") 2>/dev/null ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$mf" : 'X\(//\)[^/]' \| \
+        X"$mf" : 'X\(//\)$' \| \
+        X"$mf" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`(dirname "$file") 2>/dev/null ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$file" : 'X\(//\)[^/]' \| \
+        X"$file" : 'X\(//\)$' \| \
+        X"$file" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+    { if $as_mkdir_p; then
+    mkdir -p $dirpart/$fdir
+  else
+    as_dir=$dirpart/$fdir
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$as_dir" : 'X\(//\)[^/]' \| \
+        X"$as_dir" : 'X\(//\)$' \| \
+        X"$as_dir" : 'X\(/\)' \| \
+        .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+         /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+         /^X\(\/\/\)$/{ s//\1/; q; }
+         /^X\(\/\).*/{ s//\1/; q; }
+         s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
+echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+ ;;
+  esac
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/configure.in b/rescue/linux/cdrom/yaird-0.0.5/configure.in
new file mode 100644 (file)
index 0000000..0a38911
--- /dev/null
@@ -0,0 +1,75 @@
+#
+# Process this file with autoconf to produce a configure script.
+#
+
+# autoconf claims that this should be package name;
+# but it seems that the name of a randomly choosen but
+# existing file is required.
+AC_INIT(perl/main.pl)
+
+YAIRD_VERSION=0.0.5
+AM_INIT_AUTOMAKE(yaird,${YAIRD_VERSION})
+
+#
+# Required optional feature to determine which template to install.
+# Packagers are expected to put their own template in ./templates
+# before configuring, so this should not get in their way.
+# This should go away once we have option file parsing.
+#
+AC_ARG_ENABLE(template,
+       AC_HELP_STRING([--enable-template=name],[install templates/name.pm as initrd template (no default)]),
+       [
+               if test -f "templates/$enableval.pm"
+               then
+                       INITRD_TEMPLATE="$enableval"
+                       AC_SUBST(INITRD_TEMPLATE)
+               else
+                       AC_MSG_ERROR(Template '$enableval' not found in ./templates)
+               fi
+       ],
+       [ AC_MSG_ERROR(required option --enable-template=xxx is missing) ])
+
+AC_ARG_ENABLE(nuke,
+       AC_HELP_STRING([--enable-nuke],
+               [Nuke initramfs before moving to real root]),
+       [
+               case "${enableval}" in
+               yes) enable_nuke=true ;;
+               no)  enable_nuke=false ;;
+               *) AC_MSG_ERROR(bad value ${enableval} for --enable-nuke) ;;
+               esac
+       ],[
+               enable_nuke=false
+               ])
+if test "$enable_nuke" = true; then
+       AC_DEFINE(ENABLE_NUKE,1,
+               [Define to nuke initramfs before moving to real root])
+fi
+
+# Checks for programs.
+AC_PATH_PROG(PERL,perl)
+AC_PROG_CC
+
+#
+# XML formatting; unclear what processor is most widely available.
+#
+AC_PATH_PROG(XMLTO,xmlto,:)
+
+# Checks for libraries.
+# Checks for header files.
+# Checks for typedefs, structures, and compiler characteristics.
+# Checks for library functions.
+
+# Use this when we need to compile C programs.
+AM_CONFIG_HEADER(include/config.h)
+
+AC_CONFIG_FILES([
+       Makefile
+       templates/Makefile
+       perl/Makefile
+       doc/Makefile
+       exec/Makefile
+       doc/yaird.xml
+       ])
+AC_OUTPUT()
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/depcomp b/rescue/linux/cdrom/yaird-0.0.5/depcomp
new file mode 100755 (executable)
index 0000000..ffcd540
--- /dev/null
@@ -0,0 +1,529 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2005-02-09.22
+
+# Copyright (C) 1999, 2000, 2003, 2004, 2005 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, 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.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+  '')
+     echo "$0: No command.  Try \`$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by `PROGRAMS ARGS'.
+  object      Object file output by `PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputing dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## 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"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> $depfile
+    echo >> $depfile
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> $depfile
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
+  tmpdepfile="$stripped.u"
+  if test "$libtool" = yes; then
+    "$@" -Wc,-M
+  else
+    "$@" -M
+  fi
+  stat=$?
+
+  if test -f "$tmpdepfile"; then :
+  else
+    stripped=`echo "$stripped" | sed 's,^.*/,,'`
+    tmpdepfile="$stripped.u"
+  fi
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+
+  if test -f "$tmpdepfile"; then
+    outname="$stripped.o"
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+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'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   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
+      # With Tru64 cc, shared objects can also be used to make a
+      # static library.  This mecanism 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
+      # 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
+      # automatically cleaned when .libs/ is deleted, while ignoring
+      # the former would cause a distcleancheck panic.
+      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
+      tmpdepfile2=$dir$base.o.d          # libtool 1.5
+      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
+      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1=$dir$base.o.d
+      tmpdepfile2=$dir$base.d
+      tmpdepfile3=$dir$base.d
+      tmpdepfile4=$dir$base.d
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+      exit $stat
+   fi
+
+   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+   do
+     test -f "$tmpdepfile" && break
+   done
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[   ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no
+  for arg in "$@"; do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o,
+  # because we must use -o when running libtool.
+  "$@" || exit $?
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+       set fnord "$@"
+       shift
+       shift
+       ;;
+    *)
+       set fnord "$@" "$arg"
+       shift
+       shift
+       ;;
+    esac
+  done
+  "$@" -E |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::   \1 \\:p' >> "$depfile"
+  echo "       " >> "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/Makefile b/rescue/linux/cdrom/yaird-0.0.5/doc/Makefile
new file mode 100644 (file)
index 0000000..dc7ff51
--- /dev/null
@@ -0,0 +1,326 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# doc/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+
+#
+# Makefile.am -- installation and packaging instructions
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# Quick hack of a makefile, based on dia xml documentation.
+# using the XSL sheets with xsltproc is a lot quicker than
+# using jade via db2html; the generated html also is a lot more
+# readable.  On the other hand, jade's validation looks more robust.
+#
+
+srcdir = .
+top_srcdir = ..
+
+pkgdatadir = $(datadir)/yaird
+pkglibdir = $(libdir)/yaird
+pkgincludedir = $(includedir)/yaird
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = /usr/bin/install -c
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = doc
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(srcdir)/yaird.xml.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES = yaird.xml
+SOURCES =
+DIST_SOURCES =
+DATA = $(noinst_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run aclocal-1.9
+AMDEP_FALSE = #
+AMDEP_TRUE = 
+AMTAR = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run tar
+AUTOCONF = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run autoconf
+AUTOHEADER = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run autoheader
+AUTOMAKE = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run automake-1.9
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2
+CPPFLAGS = 
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EXEEXT = 
+INITRD_TEMPLATE = Fedora
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
+LDFLAGS = 
+LIBOBJS = 
+LIBS = 
+LTLIBOBJS = 
+MAKEINFO = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run makeinfo
+OBJEXT = o
+PACKAGE = yaird
+PACKAGE_BUGREPORT = 
+PACKAGE_NAME = 
+PACKAGE_STRING = 
+PACKAGE_TARNAME = 
+PACKAGE_VERSION = 
+PATH_SEPARATOR = :
+PERL = /usr/bin/perl
+SET_MAKE = 
+SHELL = /bin/sh
+STRIP = 
+VERSION = 0.0.5
+XMLTO = /usr/bin/xmlto
+ac_ct_CC = gcc
+ac_ct_STRIP = 
+am__fastdepCC_FALSE = #
+am__fastdepCC_TRUE = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = ${AMTAR} chof - "$$tardir"
+am__untar = ${AMTAR} xf -
+bindir = ${exec_prefix}/bin
+build_alias = 
+datadir = ${prefix}/share
+exec_prefix = ${prefix}
+host_alias = 
+includedir = ${prefix}/include
+infodir = ${prefix}/info
+install_sh = /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localstatedir = ${prefix}/var
+mandir = ${prefix}/man
+mkdir_p = mkdir -p --
+oldincludedir = /usr/include
+prefix = /usr/local
+program_transform_name = s,x,x,
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+sysconfdir = ${prefix}/etc
+target_alias = 
+noinst_DATA = yaird.html
+CLEANFILES = $(noinst_DATA)
+
+# not compiled, but must go in the tarball.
+EXTRA_DIST = \
+       authors.xml \
+       concepts.xml \
+       figures/console.dia \
+       figures/console.png \
+       input.xml \
+       intro.xml \
+       kernel.xml \
+       license.xml \
+       raid.xml \
+       security.xml \
+       shlibs.xml \
+       spec.xml \
+       tools.xml \
+       yaird.xml
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  doc/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+yaird.xml: $(top_builddir)/config.status $(srcdir)/yaird.xml.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(distdir)/figures
+       @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 \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+       distclean-generic distdir 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 \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-info-am
+
+
+yaird.html: $(EXTRA_DIST)
+       $(XMLTO) xhtml-nochunks yaird.xml
+# 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.
+.NOEXPORT:
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/Makefile.am b/rescue/linux/cdrom/yaird-0.0.5/doc/Makefile.am
new file mode 100644 (file)
index 0000000..aae0c4a
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Makefile.am -- installation and packaging instructions
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# Quick hack of a makefile, based on dia xml documentation.
+# using the XSL sheets with xsltproc is a lot quicker than
+# using jade via db2html; the generated html also is a lot more
+# readable.  On the other hand, jade's validation looks more robust.
+#
+
+noinst_DATA    = yaird.html
+CLEANFILES     = $(noinst_DATA)
+
+yaird.html: $(EXTRA_DIST)
+       $(XMLTO) xhtml-nochunks yaird.xml
+
+
+
+# not compiled, but must go in the tarball.
+EXTRA_DIST = \
+       authors.xml \
+       concepts.xml \
+       figures/console.dia \
+       figures/console.png \
+       input.xml \
+       intro.xml \
+       kernel.xml \
+       license.xml \
+       raid.xml \
+       security.xml \
+       shlibs.xml \
+       spec.xml \
+       tools.xml \
+       yaird.xml
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/Makefile.in b/rescue/linux/cdrom/yaird-0.0.5/doc/Makefile.in
new file mode 100644 (file)
index 0000000..d399043
--- /dev/null
@@ -0,0 +1,326 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# Makefile.am -- installation and packaging instructions
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# Quick hack of a makefile, based on dia xml documentation.
+# using the XSL sheets with xsltproc is a lot quicker than
+# using jade via db2html; the generated html also is a lot more
+# readable.  On the other hand, jade's validation looks more robust.
+#
+
+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
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+subdir = doc
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
+       $(srcdir)/yaird.xml.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES = yaird.xml
+SOURCES =
+DIST_SOURCES =
+DATA = $(noinst_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INITRD_TEMPLATE = @INITRD_TEMPLATE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+XMLTO = @XMLTO@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_STRIP = @ac_ct_STRIP@
+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@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+noinst_DATA = yaird.html
+CLEANFILES = $(noinst_DATA)
+
+# not compiled, but must go in the tarball.
+EXTRA_DIST = \
+       authors.xml \
+       concepts.xml \
+       figures/console.dia \
+       figures/console.png \
+       input.xml \
+       intro.xml \
+       kernel.xml \
+       license.xml \
+       raid.xml \
+       security.xml \
+       shlibs.xml \
+       spec.xml \
+       tools.xml \
+       yaird.xml
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  doc/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+yaird.xml: $(top_builddir)/config.status $(srcdir)/yaird.xml.in
+       cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(distdir)/figures
+       @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 \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+       distclean-generic distdir 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 \
+       maintainer-clean maintainer-clean-generic mostlyclean \
+       mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
+       uninstall-info-am
+
+
+yaird.html: $(EXTRA_DIST)
+       $(XMLTO) xhtml-nochunks yaird.xml
+# 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.
+.NOEXPORT:
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/authors.xml b/rescue/linux/cdrom/yaird-0.0.5/doc/authors.xml
new file mode 100644 (file)
index 0000000..68ed2bf
--- /dev/null
@@ -0,0 +1,9 @@
+<section id="authors-chap">
+  <title>Authors</title>
+  <para>
+   This is a place holder section.
+   <application>Yaird</application> was written by ...
+   website here ... comments to ... bug reports ...
+  </para>
+</section>
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/concepts.xml b/rescue/linux/cdrom/yaird-0.0.5/doc/concepts.xml
new file mode 100644 (file)
index 0000000..27722de
--- /dev/null
@@ -0,0 +1,450 @@
+<section id="concepts">
+  <title>Concepts</title>
+  <para>
+    This section discusses the basic concepts underlying
+    <application>yaird</application>.
+  </para>
+
+  <para>
+    The basic operation is simple:
+    <orderedlist>
+
+      <listitem>
+       <para>
+         make a plan to build an image,
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         transform the plan to a detailed description of the image,
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         build and pack the image.
+       </para>
+      </listitem>
+
+    </orderedlist>
+
+  </para>
+
+  <para>
+    The plan consists of a number of goals to be achieved: a loaded
+    device driver, a block special file created, a device mounted.
+    The plan does not specify details such as the exact path of the
+    <application>mknod</application> executable or the shared libraries
+    needed to run that executable.
+  </para>
+
+  <simplesect>
+    <title>Making the Plan</title>
+
+    <para>
+      The most interesting part is making the plan.  At the top level,
+      the plan is governed by some ultimate goals.  For now, the only
+      goal is to get a working keyboard and to mount the root file system,
+      but if we're going to support swsusp, the swap devices also need to
+      be activated.  To realise the goal, subgoals need to be realised.
+      As an example, before mounting a file system, the modules containing
+      the implementation of the file system need to be loaded.
+    </para>
+
+    <para>
+      To refine the goal of loading a kernel module,
+      the <code>ModDepTab</code> module interprets
+      <filename>modules.dep</filename> for the new kernel.  Given a
+      module name, this will return a list of required modules with all
+      dependencies recursively resolved.  It knows about the equivalence
+      between hyphen and underscore in module names, it also knows how
+      to search for modules in the <filename>/lib/modules</filename>
+      directory.
+    </para>
+
+    <para>
+      The <code>KConfig</code> module determines if loading a
+      module can be omitted because the module is hardcoded into the
+      kernel.  As an example, it is aware of the fact that the module
+      <code>ext3</code> is not needed if the new kernel configuration
+      contains <code>CONFIG_EXT3_FS=y</code>.<footnote>
+       <para>
+         Having knowledge of the relation between module names and
+         kernel defines hardcoded into <application>yaird</application>
+         is hardly elegant.  Perhaps it is possible to generate this
+         mapping based on the kernel Makefiles when building the
+         kernel, but that's too complex just now.
+       </para>
+      </footnote>
+      Only a few modules are known: <application>yaird</application>
+      looks for modules such as <code>ext3</code> when that filesystem
+      is used, so it makes sense to check whether a missing module
+      is compiled in.  On the other hand, hardware modules that are
+      compiled in never show up in <filename>modules.pcimap</filename>
+      and friends, so they remain completely outside the view of
+      <application>yaird</application>.
+    </para>
+
+    <para>
+      Module aliases and options as supported by
+      <application>modprobe</application> are unsupported for the moment.
+    </para>
+
+    <para>
+      Before a device as listed in <filename>/etc/fstab</filename> can be
+      mounted, that device needs to be enabled.  That device could be an
+      NFS mount, a loopback mount or it could be a block device.  The NFS
+      and loopback cases are not supported yet, but block devices are.
+      This support is based on a number of sources of information:
+      <orderedlist>
+
+       <listitem>
+         <para>
+           Scanning the <filename>/dev</filename> directory gives us the
+           relation between all block special files and major/minor
+           numbers.
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+           Scanning the <filename>/sys/block</filename> directory gives us the
+           relation between all major/minor numbers and kernel names
+           such as <code>dm-0</code> or <code>sda1</code>; it
+           also gives the relation between partitions and complete
+           devices.
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+           If there is a symlink in a <filename>/sys/block</filename>
+           subdirectory to the <filename>/sys/devices</filename>
+           directory, it also gives is the relation between a block
+           device and the underlying hardware.
+         </para>
+       </listitem>
+
+      </orderedlist>
+    </para>
+
+    <para>
+      Based on the kernel name and partition relationships of the device,
+      we determine the steps needed to activate the device.  As an example,
+      to activate <code>sda1</code>, we need to activate <code>sda</code>,
+      then create a block special file for <code>sda1</code>.  As
+      another example, to activate <code>dm-0</code>, our first bet is
+      to check whether this is an LVM logical
+      volume,<footnote>
+       <para>
+         It could also be an encrypted device; this case is not handled
+         yet.
+       </para>
+      </footnote> and if so activate the
+      physical volumes underlying the volume group, and finally running
+      <code>vgchange -a y</code>.
+    </para>
+  </simplesect>
+
+  <simplesect>
+    <title>Hardware Planning</title>
+
+    <para>
+      Some devices, such as <code>sdx</code> or <code>hdy</code>, are
+      expected to have underlying hardware; as an example, <code>sda</code>
+      may be backed by <code>pci0000:00/0000:00:1f.2/host0/0:0:0:0</code>.
+      This represents a hardware path, in this case a controller on the PCI
+      bus that connects to a SCSI device.  In order to use the device,
+      every component on the path needs to be activated, the component
+      closest to the CPU first.
+      Based on the pathname in <filename>/sys/devices</filename> and on
+      files within the directory for the component, we can determine
+      what kind of component we're dealing with, and how to find the
+      required modules.
+    </para>
+
+    <para>
+      Finding modules closely follows the methods used in the
+      <application>hotplug</application> package, and the
+      <application>hotplug</application> approach in turn is an almost
+      literal translation of the code that the kernel uses to find a
+      driver for a newly detected piece of hardware.
+    </para>
+
+    <para>
+      For components that talk some protocol over a bus, like SCSI or
+      IDE disks or CDROMs, this is a simple hard coded selection; as an
+      example, the <code>ScsiDev</code> module knows that a SCSI device
+      with a <filename>type</filename> file containing "5" is a CDROM,
+      and that <code>sr-mod</code> is the appropriate driver.
+    </para>
+
+    <para>
+      Devices such as PCI or USB devices cannot be classified into
+      a few simple categories.  These devices have properties such
+      as "Vendor", "Device" and "Class" that are visible in sysfs.
+      The source code of kernel driver modules for these devices
+      contains a table listing which combination of properties mark a
+      device that the driver is prepared to handle.  When the kernel
+      is compiled, these tables are summarised in a text file such
+      as <filename>modules.pcimap</filename>.  Based on this table,
+      we find a driver module needed for the device and mark it for
+      inclusion on the image.
+    </para>
+
+    <para>
+      Multiple modules can match the same hardware: as an example,
+      <code>usb-storage</code> and <code>ub</code> both match an USB
+      stick.  In such cases, we load all matching modules into the
+      kernel and leave it to kernel to decide who gets to manage the
+      device.  There's one complication: some modules, such as
+      <code>usb-core</code>, match any device (probably to maintain some
+      administration of their own, or to provide an ultra-generic
+      interface), but do not actually provide access to the device.
+      Such devices are weeded out by the <code>Blacklist</code> module,
+      based on information in
+      <filename>/etc/hotplug/blacklist</filename> and
+      <filename>/etc/hotplug/blacklist.d</filename>.
+    </para>
+
+    <para>
+      It turns out that the "load modules for every component in the sysfs
+      path" approach is not always sufficient: sometimes you have to load
+      siblings as well.  As an example, consider a combined EHCI/UHCI
+      USB controller on a single chip.  The same ports can show up as EHCI
+      or UHCI devices, different PCI functions in the same PCI slot, with
+      different sysfs directories, depending on what kind of hardware is
+      connected.  Purely following the sysfs path, we would only need to load
+      the EHCI driver, but it appears that on this kind of chip, EHCI devices
+      are not reliably detected unless the UHCI driver is loaded as well.
+      For this reason, we extend the algorithm with a rule: "for PCI devices,
+      load modules for every function in the PCI slot".
+    </para>
+
+    <para>
+      That's actually a bit much: it would load all of ALSA if you have a
+      combined ISA/IDE/USB/Multimedia chipset.  So we limit the above
+      to those PCI functions that provide USB ports.
+    </para>
+
+  </simplesect>
+
+  <simplesect>
+    <title>Plan Transformation</title>
+
+    <para>
+      The plan generated in the first phase is a collection of general
+      intentions, stuff like 'load this module', but it does not
+      specify exactly what files must be placed on the image and what
+      lines are to be added to the initialisation scripts.
+    </para>
+
+    <para>
+      The module <code>ActionList</code> represents this plan with a
+      list of hashes; every hash contains at least 'action' and
+      'target', with other keys added to provide extra information
+      as needed.  If two steps in the plan have identical action and
+      target, the last one is considered redundant and silently omitted.
+    </para>
+
+    <para>
+      This plan is transformed to an exact image description with
+      the help of templates.  The module <code>Template</code>
+      contains a hash with for every type of action:
+      <itemizedlist>
+       <listitem>
+         <para>
+           a list of files to be copied from the mother system to the
+           image;
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+           a list of directories to be created on the image; these do
+           not have to exist on the mother system;
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+           a list of trees to be copied recursively from the mother
+           system to the image;
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+           a hash, with as key the name of a script to be appended to
+           and as value that which is to be appended.
+         </para>
+       </listitem>
+      </itemizedlist>
+      All of the above are fed through HTML-Template, with the hash
+      describing this step as parameters.  In practice, this looks
+      like so:
+      <programlisting>
+          insmod => {
+              files => [
+                  '&lt;TMPL_VAR NAME=target>',
+                  '/sbin/insmod',
+                  ],
+              directories => [],
+              trees => [],
+              scripts => {
+                  '/init' => &lt;&lt;'//',
+                      /sbin/insmod '&lt;TMPL_VAR NAME=target>'
+//
+              },
+          },
+      </programlisting>
+    </para>
+
+    <para>
+      There are a few attributes that are available to every template:
+      <variablelist>
+
+       <varlistentry>
+         <term>
+           version
+         </term>
+         <listitem>
+           <para>
+             The kernel version we're generating an image for.
+             Useful if you want your image to include a complete copy
+             of <filename>/lib/modules/(version)/kernel</filename>.
+           </para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+           appVersion
+         </term>
+         <listitem>
+           <para>
+             The version of <application>yaird</application> used to
+             build the image.
+           </para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+           auxDir
+         </term>
+         <listitem>
+           <para>
+             The directory where <application>yaird</application>
+             keeps executables intended to go on the image, such as
+             <application>run_init</application>.
+           </para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+    </para>
+
+    <para>
+      Currently, there are templates for Debian and for Fedora, plus
+      a template showing how to use the older initrd approach.
+    </para>
+
+  </simplesect>
+
+  <simplesect>
+    <title>Image Generation</title>
+    <para>
+      The detailed image description consists of a collection of names of
+      files, directories, symbolic links and block or character devices,
+      plus a number of lines of shell script.  The image description does
+      not contain permission or ownership information: files always have
+      mode 444, executables and directories always 555, devices always
+      mode 600,<footnote>
+       <para>
+         Having device files on the image is wrong: it will
+         break if the new kernel uses different device numbers.  Mostly
+         this can be avoided by using the <filename>dev</filename>
+         files provided by sysfs, but there is a bootstrap problem:
+         the <application>mount</application> command needed to
+         access sysfs assumes <filename>/dev/null</filename> and
+         <filename>/dev/console</filename> are available.
+       </para>
+      </footnote> and everything is owned by root.
+    </para>
+
+    <para>
+      The <code>Image</code> module contains the image description and
+      can write the image to a directory.  It understands about symlinks:
+      if <filename>/sbin/vgscan</filename> is added to the image and it
+      happens to be a symlink to <filename>lvmiopversion</filename>, both
+      <filename>vgscan</filename> and <filename>lvmiopversion</filename>
+      will be added to the image.  Shared libraries are supported
+      via the <code>SharedLibraries</code> module, as discussed in
+      <xref linkend="shlibs"/>.  Invocations of other executables are not
+      recognised automatically: if <filename>lvmiopversion</filename> executes
+      <filename>/etc/lvm-200/vgscan</filename>, the latter needs to be
+      added explicitly to the image.
+    </para>
+
+    <para>
+      The copying of complete trees to the image is influenced by the
+      copying for executables: if there is a symlink in the tree, it's
+      target is also included on the image, but if the target is a
+      directory, its contents are not copied recursively.  This
+      approach avoids loops in image generation.
+      Note that the target of a symlink must exist:
+      <application>yaird</application> refuses to copy dangling links.
+    </para>
+  </simplesect>
+
+  <simplesect>
+    <title>Packing the Image</title>
+    <para>
+      The final step is packing the image in a format that the
+      bootloader can process; this is handled by the module
+      <code>Pack</code>.  The following formats are supported:
+      <variablelist>
+
+       <varlistentry>
+         <term>
+           cpio
+         </term>
+         <listitem>
+           <para>
+             A zipped cpio file (new ASCII format), required for the
+             initramfs model as used in the templates for Debian and
+             Fedora.
+           </para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+           directory
+         </term>
+         <listitem>
+           <para>
+             An unpacked directory, good for debugging or manually
+             creating odd formats.
+           </para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+           cramfs
+         </term>
+         <listitem>
+           <para>
+             A cramfs filesystem, used for Debian initrd images.
+           </para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+    </para>
+  </simplesect>
+
+</section>
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/figures/console.dia b/rescue/linux/cdrom/yaird-0.0.5/doc/figures/console.dia
new file mode 100644 (file)
index 0000000..0707eb5
Binary files /dev/null and b/rescue/linux/cdrom/yaird-0.0.5/doc/figures/console.dia differ
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/figures/console.png b/rescue/linux/cdrom/yaird-0.0.5/doc/figures/console.png
new file mode 100644 (file)
index 0000000..8ea4465
Binary files /dev/null and b/rescue/linux/cdrom/yaird-0.0.5/doc/figures/console.png differ
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/input.xml b/rescue/linux/cdrom/yaird-0.0.5/doc/input.xml
new file mode 100644 (file)
index 0000000..362d967
--- /dev/null
@@ -0,0 +1,443 @@
+<section id="input">
+  <title>Supporting Input Devices</title>
+
+  <para>
+    A working console and keyboard during the initial boot image execution
+    is needed to enter a password for encrypted file systems; it also
+    helps while debugging.  This section discusses the kernel input
+    layer and how it can be supported during image generation.
+  </para>
+
+  <para>
+    The console is a designated terminal, where kernel output goes, and that
+    is the initial I/O device for <filename>/sbin/init</filename>.  Like all
+    terminal devices, it provides a number of functions: you can read
+    and write to it, plus it has a number of <code>ioctl()</code>
+    functions to manage line buffering, interrupt characters and
+    baudrate or parity where applicable.
+  </para>
+
+  <para>
+    Terminals come in different types: it can be a VT100 or terminal
+    emulator connected via an RS232 cable, or it can be a combination
+    of a CRT and a keyboard.  The keyboard can be connected via
+    USB or it can talk a byte oriented protocol via a legacy UART
+    chip.
+  </para>
+    
+  <para>
+    The CRT is managed in two layers.  The top layer, "virtual
+    terminal", manages a two dimensional array describing which letter
+    should go in which position of the screen.  In fact, there are a
+    number of different arrays, and which one is actually visible on
+    the screen is selected by a keyboard combination.
+    Below the virtual terminals is a layer that actually places the
+    letters on the screen.  This can be done a letter at a time,
+    using a VGA interface, or the letters can be painted pixel by
+    pixel, using a frame buffer.
+  </para>
+
+  <para>
+    Below the terminal concept we find the input layer.  This provides a
+    unified interface to the various user input devices: mouse, keyboard,
+    PC speaker, joystick, tablet.  These input devices not only
+    generate data, they can also receive input from the computer.  As
+    an example, the keyboard needs computer input to operate the NUM
+    LOCK indicator.  Hardware devices such as keyboards register
+    themselves with the input layer, describing their capabilities
+    (I can send relative position, have two buttons and no LEDs),
+    and the input layer assigns a handler to the hardware device.
+    The handler presents the device to upper layers, either as a char
+    special file or as the input part of a terminal device.
+    This is not a one-to-one mapping: every mouse gets its own
+    handler, but keyboard and PC speaker share a handler, so it looks
+    to userland like you have a keyboard that can do "beep".
+  </para>
+
+  <para>
+    In addition to handlers for specific type of upper layers (mouse,
+    joystick, touch screen) there is a generic handler that provides a
+    character device file such as <filename>/dev/input/event0</filename>
+    for every input device detected; input events are presented through
+    these devices in a unified format.  The input layer generates
+    hotplug events for these generic event handlers; hotplug uses
+    <filename>modules.inputmap</filename> to load a module containing a
+    suitable upper layer event handler.  The keyboard handler is a special
+    case that does not occur in this map, so for image generation there
+    is little to be learned from hotplug input support.
+  </para>
+
+  <para>
+    To guarantee a working console, <application>yaird</application>
+    should examine <filename>/dev/console</filename>, determine
+    whether it's RS232 or hardware directly connected to the computer,
+    and then load modules for either serial port, or for virtual
+    terminals, the input layer and any hardware underlying it.
+    Unfortunately, <filename>/dev/console</filename> does not give
+    a hint what is below the terminal interface, and unfortunately,
+    lots of input devices are legacy hardware that is hard to probe
+    and only sketchily described by sysfs in kernel 2.6.10.
+  </para>
+
+  <para>
+    This means that a guarantee for a working console cannot be made,
+    which is why distribution kernels come with components such as the
+    keyboard and serial port driver compiled into the kernel.  We can
+    do something else though: provide modules for keyboard devices
+    provided the kernel provides correct information.  That covers the
+    case of USB keyboards, and that's something that's not compiled
+    into distribution kernels, so that the administrator has to add
+    modules explictly in order to get the keyboard working in
+    the initial boot image.
+  </para>
+
+  <para>
+    Lets examine the sources of information we have to find which input
+    hardware we have to support.
+    <itemizedlist>
+
+      <listitem>
+       <para>
+         In <filename>/sys/class/input</filename>, all input devices
+         are enumerated.  Mostly, these only contain a
+         <filename>dev</filename> file containing major/minor number,
+         but USB devices also have a <filename>device</filename>
+         symlink into <filename>/sys/devices</filename> identifying
+         the underlying hardware.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         In <filename>/boot/menu/grub.lst</filename>, kernel options
+         can be defined that determine whether to use a serial line as
+         console and whether to use a frame buffer.  The consequence
+         is that it is fundamentally impossible to determine by looking
+         at the hardware alone what's needed to get an image that will
+         boot without problems.  This probably means we'll have to consider
+         supplying some modules in the image that will only get loaded
+         depending on kernel options.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         The file <filename>/proc/bus/input/devices</filename> gives
+         a formatted overview of all known input devices; entries look
+         like this:
+         <programlisting>
+           I: Bus=0003 Vendor=413c Product=2003 Version=0100
+           N: Name="DELL DELL USB Keyboard"
+           P: Phys=usb-0000:00:1d.7-4.1/input1
+           H: Handlers=kbd event2
+           B: EV=100003
+           B: KEY=7f f0000 0 3878 d801d101 1e0000 0 0 0
+         </programlisting>
+         Here the "I" line shows identification information passed to
+         the input layer by the hardware driver that is used to look
+         up the appropiate handler.  "N" is a printable name provided
+         by the hardware driver.  "P" is a hint at location in a bus
+         of the device; note how this line is completely unrelated to
+         the location of the hardware in
+         <filename>/sys/devices</filename>.
+         The H (Handlers) line is obvious; The B lines specify
+         capabilities of the device, plus extra information for each
+         capability.  Known capabilities include:
+         <informaltable frame='topbot'>
+           <tgroup cols='2' align='left'>
+             <thead>
+               <row>
+                 <entry>Capability</entry>
+                 <entry>Description</entry>
+               </row>
+             </thead>
+             <tbody>
+               <row>
+                 <entry>SYN</entry>
+                 <entry>Input event is completed</entry>
+               </row>
+               <row>
+                 <entry>KEY</entry>
+                 <entry>Key press/release event</entry>
+               </row>
+               <row>
+                 <entry>REL</entry>
+                 <entry>Relative measure, as in mouse movement</entry>
+               </row>
+               <row>
+                 <entry>ABS</entry>
+                 <entry>Absolute position, as in graphics
+                 tablet</entry>
+               </row>
+               <row>
+                 <entry>MSC</entry>
+                 <entry>Miscelanious</entry>
+               </row>
+               <row>
+                 <entry>SND</entry>
+                 <entry>Beep</entry>
+               </row>
+               <row>
+                 <entry>REP</entry>
+                 <entry>Set hardware repeat</entry>
+               </row>
+               <row>
+                 <entry>FF</entry>
+                 <entry>Don't know</entry>
+               </row>
+               <row>
+                 <entry>PWR</entry>
+                 <entry>Power event: on/off switch pressed.</entry>
+               </row>
+               <row>
+                 <entry>FF_STATUS</entry>
+                 <entry>Don't know.</entry>
+               </row>
+             </tbody>
+           </tgroup>
+         </informaltable>
+       </para>
+      </listitem>
+    </itemizedlist>
+  </para>
+
+  <para>
+    Finally, let's consider some kernel configuration defines, the
+    corresponding modules and their function.  This could be used as a
+    start to check whether all components required to make an
+    operational console are available on the generated image:
+    <informaltable frame='topbot'>
+      <tgroup cols='3' align='left'>
+       <thead>
+         <row>
+           <entry>Define</entry>
+           <entry>Module</entry>
+           <entry>Description</entry>
+         </row>
+       </thead>
+       <tbody valign='top'>
+
+         <row>
+           <entry>VT</entry>
+           <entry>(bool)</entry>
+           <entry>
+             Support multiple virtual terminals, irrespective of what
+             hardware is used to display letters from the virtual
+             terminal on the CRT.
+           </entry>
+         </row>
+
+         <row>
+           <entry>VT_CONSOLE</entry>
+           <entry>(bool)</entry>
+           <entry>
+             Make the VT a candidate for console output.  The alternative
+             is a serial line to a VT100 or terminal emulator
+           </entry>
+         </row>
+
+         <row>
+           <entry>VGA_CONSOLE</entry>
+           <entry>(bool)</entry>
+           <entry>
+             Display a terminal on CRT using the VGA interface.
+           </entry>
+         </row>
+
+         <row>
+           <entry>FRAMEBUFFER_CONSOLE</entry>
+           <entry>fbcon</entry>
+           <entry>
+             Display a terminal on a framebuffer, painting letters a
+             pixel at a time.  This has to know about fonts.
+           </entry>
+         </row>
+
+         <row>
+           <entry>FB_VESA</entry>
+           <entry>vesafb</entry>
+           <entry>
+             Implement a framebuffer based on VESA (a common standard
+             for PC graphic cards), a place where an X server or
+             the framebuffer console can write pixels to be displayed
+             on CRT.
+             There are many different framebuffer modules that
+             optimise for different graphics cards.
+             Note that while vesafb and other drivers such as intelfb
+             can be built as a module, they only function correctly
+             when built into the kernel.  Most framebuffer modules
+             depend on three other modules to function correctly:
+             cfbfillrect, cfbcopyarea, cfbimgblt.
+           </entry>
+         </row>
+
+         <row>
+           <entry>ATKBD</entry>
+           <entry>atkbd</entry>
+           <entry>
+             Interpret input from a standard AT or PS/2 keyboard.
+             Other keyboards use other byte codes, see for example
+             the Acorn keyboard (rpckbd).
+           </entry>
+         </row>
+
+         <row>
+           <entry>SERIO</entry>
+           <entry>serio</entry>
+           <entry>
+             Module that manages a stream of bytes from and to an IO port.
+             It includes a kernel thread (kseriod) that handles the queue
+             needed to talk to slow ports.  It is normally used for
+             dedicated IO ports talking to PS/2 mouse and keyboard,
+             but can also be interfaced to serial ports (COM1, COM2).
+             The atkbd driver uses a serio driver to communicate with
+             the keyboard.
+           </entry>
+         </row>
+
+         <row>
+           <entry>SERIO_I8042</entry>
+           <entry>i8042</entry>
+           <entry>
+             Implement a serio stream on top of the i8042 chip, the chip
+             that connects the standard AT keyboard and PS/2 mouse to
+             the computer.
+             This is legacy hardware: it's not connected via PCI but
+             directly to the 'platform bus'.
+             When a chip such as i8042 that implements
+             serio is detected, it registers itself with the input
+             layer.  The input layer then lets drivers that use serio
+             (such as atkbd and psmouse) probe whether a known device
+             is connected via the chip; if such a device is found,
+             it is registered as a new input device.
+           </entry>
+         </row>
+
+         <row>
+           <entry>SERIAL_8250</entry>
+           <entry>serial</entry>
+           <entry>
+             Support for serial ports (COM1, COM2) on PC hardware.
+             Lots of other configuration options exist to support
+             multiple cards and fiddle with interrupts.
+             If compiled in rather than modular, a further option,
+             SERIAL_8250_CONSOLE, allows using the serial port as a
+             console.
+           </entry>
+         </row>
+
+         <row>
+           <entry>USB_HID</entry>
+           <entry>usbhid</entry>
+           <entry>
+             Driver for USB keyboards and mice.
+             Another define, USB_HIDINPUT, needs to be true for
+             these devices to actually work.
+           </entry>
+         </row>
+
+         <row>
+           <entry>USB_KBD</entry>
+           <entry>usbkbd</entry>
+           <entry>
+             Severely limited form of USB keyboard; uses the "boot
+             protocol".  This conflicts with the complete driver.
+           </entry>
+         </row>
+
+       </tbody>
+      </tgroup>
+      
+    </informaltable>
+  </para>
+
+  <para>
+    The following figure gives an example of how the various modules 
+    can fit together.
+  </para>
+
+  <figure id="console-module-flow">
+    <title>
+      Module relation for common console setup
+    </title>
+    <mediaobject>
+      <imageobject>
+       <imagedata fileref="figures/console.png" format="PNG"/>
+      </imageobject>
+    </mediaobject>
+  </figure>
+
+  <para>
+    In practical terms, a first step toward a more robust boot image
+    is to support new keyboard types, such as USB keyboards.
+    The following algorithm should do that.
+
+    <orderedlist>
+      
+      <listitem>
+       <para>
+         Interpret <filename>/proc/bus/input/devices</filename>.
+       </para>
+      </listitem>
+      
+      <listitem>
+       <para>
+         Look for devices that have handler kbd <emphasis>and</emphasis>
+         that have buttons.  Mice and the PC speaker don't match that
+         criterium, keyboards do.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         You could interpret the name field of such devices if you're
+         interested in supporting legacy keyboards.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         The devices that have handler 'kbd' also have a handler 'event\d',
+         where input is presented in a generalised event format;
+         look up this device in /sys/class/input/event\d/.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         If it's got a device symlink, load the hardware drivers for that
+         hardware device (most likely it's usbhid plus a usb core driver).
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Don't bother with a mknod, the input is handled via
+         <filename>/dev/console</filename>.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Otherwise it's presumable a legacy device; you could check for
+         the existence of
+         <filename>/sys/devices/platform/i8042/serio\d/</filename>,
+         or you could just assume the appropriate driver to be compiled in.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Implement support for
+         <filename>/etc/hotplug/blacklist</filename>,
+         since some USB keyboards publish two interfaces (full HID
+         and the limited boot protocol), the input layer makes both
+         visible in <filename>/proc/bus/input/devices</filename> and
+         the corresponding modules are mutually conflicting.
+         The blacklist is used to filter out one of these modules.
+       </para>
+      </listitem>
+
+    </orderedlist>
+  </para>
+</section>                                                                       
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/intro.xml b/rescue/linux/cdrom/yaird-0.0.5/doc/intro.xml
new file mode 100644 (file)
index 0000000..8b80409
--- /dev/null
@@ -0,0 +1,31 @@
+<section id="intro-chapter">
+  <title>Introduction</title>
+  <para>
+    <application>Yaird</application> (Yet Another mkInitRD) is an
+    application to create an initial boot image, a minimal filesystem used
+    to bring a booting Linux kernel to a level where it can access
+    the root file system and use startup scripts to bring the system
+    to the normal run level.
+ </para>
+
+  <para>
+    It differs from earlier <application>mkinitrd</application>
+    implementations in that it attempts to leverage the information in
+    sysfs to minimise the number of special cases that the application
+    has to know about, and in that it uses a template system to separate
+    the analysis of the system from the building of the image.
+  </para>
+
+  <para>
+    This document gives an overview of the design and implementation
+    of <application>Yaird</application>; see the README file for
+    usage information.  This text assumes familiarity with Linux
+    system administration and the basics of hotplug and sysfs.
+  </para>
+
+  <para>
+    This document describes version &VERSION;
+    of <application>Yaird</application>.
+    This is a very rough, proof of concept, version.
+  </para>
+</section>
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/kernel.xml b/rescue/linux/cdrom/yaird-0.0.5/doc/kernel.xml
new file mode 100644 (file)
index 0000000..e2d0f79
--- /dev/null
@@ -0,0 +1,491 @@
+<section id="kernel">
+  <title>The interface between kernel and image</title>
+
+  <para>
+    The initial boot image is supposed to load enough modules to let
+    the real root device be mounted cleanly.  It starts up in a
+    <emphasis>very</emphasis> bare environment and it has to do tricky
+    stuff like juggling root filesystems; to pull that off successfully
+    it makes sense to take a close look at the environment that the
+    kernel creates for the image and what the kernel expects it to do.
+    This section contains raw design notes based on kernel 2.6.8.
+  </para>
+
+  <para>
+    The processing of the image starts even before the kernel is
+    activated.  The bootloader, grub or lilo for example, reads two
+    files from the boot file system into ram: the kernel and image.
+    The bootloader somehow manages to set two variables in the kernel:
+    <code>initrd_start</code> and <code>initrd_end</code>; these variables
+    point to the copy of the image in ram.  The bootloader now
+    hands over control to the kernel.
+  </para>
+
+  <para>
+    During setup, the kernel creates a special file system, rootfs.
+    This mostly reuses ramfs code, but there are a few twists: it can
+    never be mounted from userspace, there's only one copy, and it's not
+    mounted on top of anything else.  The existence of rootfs means that
+    the rest of the kernel always can assume there's a place to mount
+    other file systems.  It also is a place where temporary files can
+    be created during the boot sequence.
+  </para>
+
+    <para>
+      In <code>initramfs.c:populate_rootfs()</code>, there are two
+      possibilities.  If the image looks like a cpio.gz file, it is
+      unpacked into rootfs.  If the file <filename>/init</filename> is
+      among the files unpacked from the cpio file, the initramfs model
+      is used; otherwise we get a more complex interaction between kernel
+      and initrd, discussed in <xref linkend="initrd"/>.
+    </para>
+
+  <simplesect>
+    <title>Booting with Initramfs</title>
+    <para>
+      If the image was a cpio file, and it contains a file
+      <filename>/init</filename>, the initram model is used.
+      The kernel does some basic setup and hands over control to
+      <filename>/init</filename>; it is then up to
+      <filename>/init</filename> to make a real root available and to
+      transfer control to the <filename>/sbin/init</filename> command
+      on the real root.
+    </para>
+
+    <para>
+      The tricky part is to do that in such a way that there
+      is no way for user processes to gain access to the rootfs
+      filesystem; and in such a way that rootfs remains empty and
+      hidden under the user root file system.  This is best done
+      using some C code; <application>yaird</application> uses
+      <application>run_init</application>, a small tool based on
+      <application>klibc</application>.
+      <programlisting>
+       # invoked as last command in /init, with no other processes running,
+       # as follows:
+       # exec run_init /newroot /sbin/init "$@"
+       - chdir /newroot
+       # following after lots of sanity checks and not across mounts:
+       - rm -rf /*
+       - mount --move . /
+       - chroot .
+       - chdir /
+       - open /dev/console
+       - exec /sbin/init "$@"
+      </programlisting>
+    </para>
+
+  </simplesect>
+
+  <simplesect id="initrd">
+    <title>Booting with initrd</title>
+    <para>
+      If the image was not a cpio file, the kernel copies the
+      initrd image from where ever the boot loader left it to
+      <filename>rootfs:/initrd.image</filename>, and frees the ram used
+      by the bootloader for the initrd image.
+    </para>
+
+    <para>
+      After reading initrd, the kernel does more setup to the point where
+      we have:
+      <itemizedlist>
+
+       <listitem>
+         <para>
+             working CPU and memory management
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+             working process management
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+             compiled in drivers activated
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+             a number of support processes such as ksoftirqd are created.
+             (These processes have the rootfs as root; they can get a new
+             root when the <code>pivot_root()</code> system call is used.)
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+             something like a console.  <code>Console_init()</code> is
+             called before PCI or USB probes, so expect only compiled in
+             console devices to work.
+         </para>
+       </listitem>
+
+      </itemizedlist>
+    </para>
+
+    <para>
+      At this point, in <code>do_mounts.c:prepare_namespace()</code>,
+      the kernel looks for a root filesystem to mount.  That root file
+      system can come from a number of places: NFS, a raid device, a plain
+      disk or an initrd.  If it's an initrd, the sequence is as follows
+      (where devfs can fail if it's not compiled into the kernel)
+
+      <programlisting>
+      - mount -t devfs devfs /dev
+      - md_run_setup()
+      - process initrd
+      - umount /dev
+      - mount --move . /
+      - chroot .
+      - mount -t devfs devfs /dev
+      </programlisting>
+
+    </para>
+
+    <para>
+      Once that returns, in <code>init/main.c:init()</code>,
+      initialisation memory is freed and <filename>/sbin/init</filename>
+      is executed with <code>/dev/console</code> as file  descriptor 0, 1
+      and 2.  <filename>/sbin/init</filename> can be overruled with
+      an <code>init=/usr/bin/firefox</code> parameter passed to the
+      boot loader; if <filename>/sbin/init</filename> is not found,
+      <filename>/etc/init</filename> and a number of other fallbacks
+      are tried.  We're in business.
+    </para>
+
+    <para>
+      The processing of initrd starts in
+      <code>do_mounts_initrd.c:initrd_load()</code>.  It creates
+      <filename>rootfs:/dev/ram</filename>, then copies
+      <filename>rootfs:/initrd.image</filename> there and unlinks
+      <filename>rootfs:/initrd.image</filename>.  Now we have the initrd
+      image in a block device, which is good for mounting.  It calls
+      <code>handle_initrd()</code>, which does:
+
+      <programlisting>
+      # make another block special file for ram0
+      - mknod /dev/root.old b 1 0
+      # try mounting initrd with all known file systems,
+      # optionally read-only
+      - mount -t xxx /dev/root.old /root
+      - mkdir rootfs:/old
+      - cd /root
+      - mount --move . /
+      - chroot .
+      - mount -t devfs devfs /dev
+      - system ("/linuxrc");
+      - cd rootfs:/old
+      - mount --move / .
+      - cd rootfs:/
+      - chroot .
+      - umount rootfs:/old/dev
+      - ... more ...
+      </programlisting>
+
+    </para>
+
+    <para>
+      So <filename>initrd:/linuxrc</filename> runs in an environment where
+      initrd is the root, with devfs mounted if available, and rootfs is
+      invisible (except that there are open file handles to directories
+      in rootfs, needed to change back to the old environment).
+    </para>
+
+    <para>
+      Now the idea seems to have been that <filename>/linuxrc</filename>
+      would mount the real root and <code>pivot_root</code> into it, then start
+      <filename>/sbin/init</filename>.  Thus, linuxrc would never return.
+      However, <code>main.c:init()</code> does some usefull stuff only
+      after linuxrc returns: freeing init memory segments and starting numa
+      policy, so in eg Debian and Fedora, <filename>/linuxrc</filename>
+      will end, and <filename>/sbin/init</filename>
+      is started by <code>main.c:init()</code>.
+    </para>
+
+    <para>
+      After linuxrc returns, the variable <code>real_root_dev</code>
+      determines what happens.  This variable can be read and written
+      via <filename>/proc/sys/kernel/real-root-dev</filename>.  If it
+      is 0x0100 (the device number of <filename>/dev/ram0</filename>)
+      or something equivalent, <code>handle_initrd()</code> will change
+      directory to <filename>/old</filename> and return.  If it is
+      something else, <code>handle_initrd()</code> will decode it, mount
+      it as root, mount initrd as <filename>/root/initrd</filename>,
+      and again start <filename>/sbin/init</filename>.  (if mounting as
+      <filename>/root/initrd</filename> fails, the block device is freed.)
+    </para>
+
+    <para>
+      Remember <code>handle_initrd()</code> was called via
+      <code>load_initrd()</code> from <code>prepare_namespace()</code>,
+      and <code>prepare_namespace()</code> ends by chrooting into the
+      current directory: <filename>rootfs:/old</filename>.
+    </para>
+
+    <para>
+      Note that <filename>rootfs:/old</filename> was move-mounted
+      from '/' after <filename>/linuxrc</filename> returned.
+      When <filename>/linuxrc</filename> started, the root was
+      initrd, but <filename>/linuxrc</filename> may have done a
+      <code>pivot_root()</code>, replacing the root with a real root,
+      say <filename>/dev/hda1</filename>.
+    </para>
+
+    <para>
+      Thus:
+      <itemizedlist>
+
+       <listitem>
+         <para>
+             <filename>/linuxrc</filename> is started with initrd
+             mounted as root.
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+             There is working memory management, processes, compiled
+             in drivers, and stdin/out/err are connected to a console,
+             if the relevant drivers are compiled in.
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+             Devfs may be mounted on <filename>/dev</filename>.
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+             <filename>/linuxrc</filename> can <code>pivot_root</code>.
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+             If you echo 0x0100 to
+             <filename>/proc/sys/kernel/real-root-dev</filename>,
+             the <code>pivot_root</code> will remain in effect after
+             <filename>/linuxrc</filename> ends.
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+             After <filename>/linuxrc</filename> returns,
+             <filename>/dev</filename> may be unmounted and replaced
+             with devfs.
+         </para>
+       </listitem>
+
+      </itemizedlist>
+    </para>
+
+    <para>
+      Thus a good strategy for <filename>/linuxrc</filename> is to
+      do as little as possible, and defer the real initialisation
+      to <filename>/sbin/init</filename> on the initrd; this
+      <filename>/sbin/init</filename> can then <code>pivot_root</code>
+      into the real root device.
+      <programlisting>
+       #!/bin/dash
+       set -x
+       mount -nt proc proc /proc
+       # root=$(cat proc/sys/kernel/real-root-dev)
+       echo 256 > proc/sys/kernel/real-root-dev
+       umount -n /proc
+      </programlisting>
+    </para>
+
+  </simplesect>
+
+  <simplesect>
+    <title>Kernel command line parameters</title>
+    <para>
+      The kernel passes more information than just an initial file system
+      to the initrd or initramfs image; there also are the kernel boot
+      parameters.  The bootloader passes these to the kernel, and the kernel
+      in turn passes them on via <filename>/proc/cmdline</filename>.
+    </para>
+
+    <para>
+      An old version of these parameters is documented in the
+      <citerefentry>
+       <!-- Sometimes I think docbook is overdoing this markup thing -->
+       <refentrytitle>bootparam</refentrytitle>
+       <manvolnum>7</manvolnum>
+      </citerefentry> manual page; more recent information is in the kernel
+      documentation file <citetitle>kernel-parameters.txt</citetitle>.
+      Mostly, these parameters are used to configure non-modular drivers,
+      and thus not very interesting to <application>yaird</application>.
+      Then there are parameters such as <code>noapic</code>, which are
+      interpreted by the kernel core and also irrelevant to
+      <application>yaird</application>.
+      Finally there are a few parameters which are used by the kernel
+      to determine how to mount the root file system.
+    </para>
+
+    <para>
+      Whether the initial image should emulate these options or ignore them
+      is open to discussion; you can make a case that the flexibility these
+      options offer has become irrelevant now that initrd/initramfs offers
+      far more fine grained control over the way in which the system
+      is booted.
+      Support for these options is mostly a matter of tuning the
+      distribution specific templates, but it is possible that the
+      templates need an occassional hint from the planner.
+      To find out just how much "mostly" is, we'll try to implement
+      full support for these options and see where we run into
+      limitations.
+      An inventarisation of relevant options.
+      <variablelist>
+
+       <varlistentry>
+         <term>
+           ide
+         </term>
+         <listitem>
+           <para>
+             These are options for the modular ide-core driver.
+             This could be supported by adding an attribute
+             "isIdeCore" to insmod actions, and expanding the ide
+             kernel options only for insmod actions where that
+             attribute is true.
+             It seems cleaner to support the options from
+             <filename>/etc/modprobe.conf</filename>.
+             Unsupported for now.
+           </para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+           init
+         </term>
+         <listitem>
+           <para>
+             The first program to be started on the definitive root device,
+             default <filename>/sbin/init</filename>.  Supported.
+           </para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+           ro
+         </term>
+         <listitem>
+           <para>
+             Mount the definitive root device read only,
+             so that it can be submitted to <application>fsck</application>.
+             Supported; this is the default behaviour.
+           </para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+           rw
+         </term>
+         <listitem>
+           <para>
+             Three guesses.  Supported.
+           </para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+           resume, noresume
+         </term>
+         <listitem>
+           <para>
+             Which device (not) to use for software suspend.
+             To be done.
+           </para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+           root
+         </term>
+         <listitem>
+           <para>
+             The device to mount as root.  This is a nasty one:
+             the planner by default only creates device nodes
+             that are needed to mount the root device, and even
+             if you were to put hotplug on the inital image
+             to create all possible device nodes, there's still
+             the matter of putting support for the proper file system
+             on the initial image.
+             We could make an option to
+             <application>yaird</application> to specify a list
+             of possible root devices and load the necessary
+             modules for all of them.
+             Unsupported until there's a clear need for it.
+           </para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+           rootflags
+         </term>
+         <listitem>
+           <para>
+             Flags to use while mounting root file system.
+             Implement together with root option.
+           </para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+           rootfstype
+         </term>
+         <listitem>
+           <para>
+             File system type for root file system.
+             Implement together with root option.
+           </para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+           nfsaddrs
+         </term>
+         <listitem>
+           <para>
+             For diskless booting.
+             Unclear whether we need this.  NFS booting is desirable,
+             but I guess that will mostly be done under control of
+             DHCP.  Unsupported for now.
+           </para>
+         </listitem>
+       </varlistentry>
+
+       <varlistentry>
+         <term>
+           nfsroot
+         </term>
+         <listitem>
+           <para>
+             More diskless booting.
+             Unsupported for now.
+           </para>
+         </listitem>
+       </varlistentry>
+
+      </variablelist>
+
+    </para>
+  </simplesect>
+</section>
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/license.xml b/rescue/linux/cdrom/yaird-0.0.5/doc/license.xml
new file mode 100644 (file)
index 0000000..f3ccfcd
--- /dev/null
@@ -0,0 +1,65 @@
+<section id="license-chapter">
+  <title>License</title>
+  <para>
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the <citetitle>GNU General Public
+    License</citetitle> as published by the Free Software Foundation;
+    either version 2 of the License, or (at your option) any later
+    version.
+  </para>
+  <para>
+    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
+    <citetitle>GNU General Public License</citetitle> for more details.
+  </para>
+  <para>
+    You should have received a copy of the <citetitle>GNU General Public
+    License</citetitle> along with this program; you may also obtain
+    a copy of the <citetitle>GNU General Public License</citetitle>
+    from the Free Software Foundation by visiting <ulink type="http"
+    url="http://www.fsf.org">their Web site</ulink> or by writing to
+    <address>
+      Free Software Foundation, Inc.
+      <street>59 Temple Place</street> - Suite 330
+      <city>Boston</city>, <state>MA</state> <postcode>02111-1307</postcode>
+      <country>USA</country>
+    </address>
+  </para>
+  <simplesect>
+    <title>Klibc code</title>
+    <para>
+      Yaird contains code based on klibc; this code is made available
+      by the author under the following licence.  The relevant source
+      files have this copyright notice included.
+      <programlisting>
+/* ----------------------------------------------------------------------- *
+ *   
+ *   Copyright 2004 H. Peter Anvin - All Rights Reserved
+ *
+ *   Permission is hereby granted, free of charge, to any person
+ *   obtaining a copy of this software and associated documentation
+ *   files (the "Software"), to deal in the Software without
+ *   restriction, including without limitation the rights to use,
+ *   copy, modify, merge, publish, distribute, sublicense, and/or
+ *   sell copies of the Software, and to permit persons to whom
+ *   the Software is furnished to do so, subject to the following
+ *   conditions:
+ *   
+ *   The above copyright notice and this permission notice shall
+ *   be included in all copies or substantial portions of the Software.
+ *   
+ *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *   OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * ----------------------------------------------------------------------- */
+      </programlisting>
+    </para>
+  </simplesect>
+</section>
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/raid.xml b/rescue/linux/cdrom/yaird-0.0.5/doc/raid.xml
new file mode 100644 (file)
index 0000000..4a23282
--- /dev/null
@@ -0,0 +1,196 @@
+<section id="raid">
+  <title>Supporting Raid Devices</title>
+
+  <para>
+    This section discusses software raid devices from an initial boot
+    image perspective: how to get the root device up and running.
+    There are other aspects to consider, the bootloader for example:
+    if your root device is on a mirror for reliability, it would be
+    a disappointment if after the crash you still had a long downtime
+    because the MBR was only available on the crashed disk.  Then there's
+    the issue of managing raid devices in combination with hotplugging:
+    once the system is operational, how should the raid devices that
+    the initial image left untouched be brought online?
+  </para>
+
+  <para>
+    Raid devices are managed via ioctls (mostly; there is something
+    called "autorun" in the kernel)
+    The interface from userland is simple: mknod a block device file,
+    send an ioctl to it specifying the devnos of the underlying block
+    devices and whether you'd like mirroring or striping, then send
+    a final ioctl to activate the device.  This leaves the managing
+    application free to pick any unused device (minor) number and
+    has no assumptions about device file names.
+  </para>
+
+  <para>
+    Devices that take part in a raid set also have a "superblock",
+    a header at the end of the device that contains a uuid and indicates
+    how many drives and spares are supposed to take part in the raid set.
+    This can be used be the kernel to do consistency checking, it can also
+    be used by applications to scan for all disks belonging in a raid set,
+    even if one of the component drives is moved to another disk controller.
+  </para>
+
+  <para>
+    The fact that the superblock is at the end of a device has an obvious
+    advantage: if you somehow loose your raid software, the device
+    underlying a mirror can be mounted directly as a fallback measure.
+  </para>
+
+  <para>
+    If raid is compiled into the kernel rather than provided as a module,
+    the kernel uses superblocks at boot time to find raid sets and make
+    them available without user interaction.  In this case the filename of
+    the created blockdevice is hardcoded: <filename>/dev/md\d</filename>.
+    This feature is intended for machines with root on a raid device
+    that don't use an initial boot image.  This autorun feature is
+    also accessible via an ioctl, but it's not used in management
+    applications, since it won't work with an initial boot image and
+    it can be a nuisance if some daemon brought a raid set online just
+    after the administator took it off line for replacement.
+  </para>
+
+  <para>
+    Finally, by picking a different major device number for the raid device,
+    the raid device can be made partitionable without use of LVM.
+  </para>
+
+  <para>
+    There are at least three different raid management applications
+    for Linux: raidtools, the oldest; mdadm, more modern; and EVMS, a
+    suite of graphical and command line tools that manages not only raid
+    but also LVM, partitioning and file system formating.  We'll only
+    consider mdadm for now.  The use of mdadm is simple:
+  </para>
+
+  <para>
+    <itemizedlist>
+      <listitem>
+       <para>
+         There's an option to create a new device from components,
+         building the superblock.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Another option assembles a raid device from components,
+         assuming the superblocks are already available.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Optionally, a configuration file can be used, specifying which
+         components make up a device, whether a device file should
+         be created or it is assumed to exist, whether it's stripe or
+         mirror, and the uuid.  Also, a wildcard pattern can be given:
+         disks matching this pattern will be searched for superblocks.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Information given in the configuration file can be omitted
+         on the command line.  If there's a wildcard, you don't even
+         have to specify the component devices of the raid device.
+         A typical command is <code>mdadm --assemble /dev/md-root
+         auto=md uuid=...</code>, which translates to "create
+         <filename>/dev/md-root</filename> with some unused minor number,
+         and put the components with matching uuid in it."
+       </para>
+      </listitem>
+
+    </itemizedlist>
+  </para>
+
+  <para>
+    So far, raid devices look fairly simple to use; the complications
+    arise when you have to play nicely with all the other software
+    on the box.  It turns out there are quite a lot of packages that
+    interact with raid devices:
+  </para>
+
+  <para>
+    <itemizedlist>
+
+      <listitem>
+       <para>
+         When the md module is loaded, it registers 256 block devices
+         with <application>devfs</application>.  These devices
+         are not actually allocated, they're just names set up to
+         allocate the underlying device when opened.  These names in
+         <application>devfs</application> have no counterpart in sysfs.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         When the LVM <application>vgchange</application> is started,
+         it opens all md devices to scan for headers, only to find the
+         raid devices have no underlying components and will return
+         no data.  In this process, all these stillborn md devices get
+         registered with sysfs.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         When <application>udevstart</application> is executed
+         at boot time, it walks over the sysfs tree and lets
+         <application>udev</application> create block devices files for
+         every block device it finds in sysfs.  The name and permissions
+         of the created file are configurable, and there is a hook to
+         initialise SELinux access controls.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         When <application>mdadm</application> is invoked with the auto
+         option, it will create a block device file with an unused
+         device number and put the requested raid volume under it.
+         The created device file is owned by whoever executed the
+         <application>mdadm</application> command, permissions are 0600
+         and there are no hooks for SELinux.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         When the Debian installer builds a system with LVM and raid, the
+         raid volumes have names such as <filename>/dev/md0</filename>,
+         where there is an assumption about the device minor number in
+         the name of the file.
+       </para>
+      </listitem>
+
+    </itemizedlist>
+  </para>
+
+  <para>
+    For the current Debian mkinitrd, this all works together in
+    a wonderful manner: devfs creates file names for raid devices,
+    LVM scans them with as side effect entering the devices in sysfs,
+    and after pivotroot <application>udevstart</application> triggers
+    udev into creating block device files with proper permissions and
+    SELinux hooks.  Later in the processing of <filename>rcS.d</filename>,
+    <application>mdadm</application> will put a raid device under the
+    created special file.  Convoluted but correct, except for the fact
+    that out of 256 generated raid device files, up to 255 are unused.
+  </para>
+
+  <para>
+    In <application>yaird</application>, we do not use devfs.
+    Instead, we do a <application>mknod</application> before the
+    <application>mdadm</application>, taking care to use the same
+    device number that's in use in the running kernel.  We expect
+    <filename>mdadm.conf</filename> to contain an <code>auto=md</code>
+    option for any raid device files that need to be created.
+    This approach should work regardless of whether the fstab uses
+    <filename>/dev/md\d</filename> or a device number independent name.
+  </para>
+
+</section>
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/security.xml b/rescue/linux/cdrom/yaird-0.0.5/doc/security.xml
new file mode 100644 (file)
index 0000000..c5a3ce7
--- /dev/null
@@ -0,0 +1,224 @@
+<section id="security">
+  <title>Security</title>
+
+  <para>
+    This section discusses security: avoiding downtime, avoiding revealing
+    sensitive information, avoiding unwanted modifications to the data;
+    either through accident or malice.
+    A good introduction to secure programming can be found in 
+    <ulink url="http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/">
+      <citetitle>
+       Secure Programming for Linux and Unix HOWTO</citetitle></ulink>.
+  </para>
+  
+  <para>
+    For <application>yaird</application>, security is not very
+    complicated: although it runs with root privileges, the program is
+    not setuid, and all external input comes from files or programs
+    installed by the admnistrator, so our main focus is on avoiding
+    downtime caused by ignored error codes.
+    A full blown risk assessment would be overkill, so we'll just use
+    the HOWTO as a checklist to verify that the basic precautions are
+    in place.
+  </para>
+
+  <para>
+    <informaltable frame='topbot'>
+      <tgroup cols='3' align='left'>
+       <thead>
+         <row>
+           <entry>Group</entry>
+           <entry>Mitigation</entry>
+           <entry>Status</entry>
+         </row>
+       </thead>
+       <tbody valign='top'>
+
+         <row>
+           <entry>Bad input</entry>
+           <entry>Verify command line</entry>
+           <entry>
+             Yes.
+           </entry>
+         </row>
+
+         <row>
+           <entry>Bad input</entry>
+           <entry>Verify and clean up environment</entry>
+           <entry>
+             Complete environment is reset at start of program.
+           </entry>
+         </row>
+
+         <row>
+           <entry>Bad input</entry>
+           <entry>Avoid assumptions about file descriptors</entry>
+           <entry>
+             Handled by perl.
+           </entry>
+         </row>
+
+         <row>
+           <entry>Bad input</entry>
+           <entry>Verify file names</entry>
+           <entry>
+             Perl taint check shows filenames are verified for
+             absence of odd characters before passing to
+             subprocesses.
+             TODO: examine UTF-8 impact.
+           </entry>
+         </row>
+
+         <row>
+           <entry>Bad input</entry>
+           <entry>Verify file content</entry>
+           <entry>
+             File contents in sysfs verified.
+             Fstab entries properly quoted.
+             TODO: check for spaces in names of LVM volume or of
+             modules; could end up in generated /sbin/init.
+           </entry>
+         </row>
+
+         <row>
+           <entry>Bad input</entry>
+           <entry>Verify locale settings</entry>
+           <entry>
+             All locale related environment variables are wiped at
+             program startup.
+           </entry>
+         </row>
+
+         <row>
+           <entry>Bad input</entry>
+           <entry>Verify character encoding</entry>
+           <entry>
+             All IO is byte oriented.
+           </entry>
+         </row>
+
+         <row>
+           <entry>Bad input</entry>
+           <entry>Buffer overflow</entry>
+           <entry>
+             In perl?
+           </entry>
+         </row>
+
+         <row>
+           <entry>Program structure</entry>
+           <entry>Separate data and control</entry>
+           <entry>
+             Under this heading, the HOWTO discusses the dangers of
+             auto-executing macros in data files.  The closest thing we
+             have to a data file are the templates that tune the image
+             to the distribution.  We use a templating language that
+             does not allow code embedding, and the image generation
+             module does not make it possible for template output to
+             end up outside of the image.  Conclusion: broken templates
+             can produce a broken image, but cannot affect the running
+             system.
+           </entry>
+         </row>
+
+         <row>
+           <entry>Program structure</entry>
+           <entry>Minimize privileges</entry>
+           <entry>
+             The user is supposed to bring his own root privileges to
+             the party, not much to be done here.  A related issue
+             is the minimizing of privileges in the system that is
+             started with the generated image.  This would include
+             starting SELinux at the earliest possible moment.
+             At least in Fedora, that earliest possible moment is
+             in <filename>rc.sysinit</filename>, well past the moment
+             where the initial boot image hands over control to the newly
+             mount root file system.  No <application>yaird</application>
+             support needed.
+           </entry>
+         </row>
+
+         <row>
+           <entry>Program structure</entry>
+           <entry>Safe defaults</entry>
+           <entry>
+             Configuration only specifies sources of information,
+             like /etc/hotplug, not much can go wrong here.
+           </entry>
+         </row>
+
+         <row>
+           <entry>Program structure</entry>
+           <entry>Safe configuration</entry>
+           <entry>
+             No configuration file is used yet, so it's not read from
+             current directory either.
+           </entry>
+         </row>
+
+         <row>
+           <entry>Program structure</entry>
+           <entry>Fail safe</entry>
+           <entry>
+             Planning and writing the image is separated;
+             writing only starts after planning is succesfully completed.
+             Todo: consider backout on write failure.
+           </entry>
+         </row>
+
+         <row>
+           <entry>Program structure</entry>
+           <entry>Avoid race conditions</entry>
+           <entry>
+             Temporary files and directories are created
+             with the <code>File::Temp</code> module, which is
+             resistant to name guessing attacks.
+             The completed image is installed with <code>rename</code>
+             rather than <code>link</code>; if an existing file is
+             overwritten, this guarantees there's no race where the
+             old image has been deleted bu the new one is not yet in
+             place.  (Note that there is no option in place yet which
+             allows overwriting of existing files.)
+             To do: examine File::Temp safe_level=HIGH.
+           </entry>
+         </row>
+
+         <row>
+           <entry>Underlying resources</entry>
+           <entry>Handle meta characters</entry>
+           <entry>
+             Protection against terminal escape sequences in output
+             is not yet in place.
+           </entry>
+         </row>
+
+         <row>
+           <entry>Underlying resources</entry>
+           <entry>Check system call results</entry>
+           <entry>
+             Yes.
+           </entry>
+         </row>
+
+         <row>
+           <entry>Language specific</entry>
+           <entry>Verify perl behaviour with taint.</entry>
+           <entry>
+             Yes.
+           </entry>
+         </row>
+
+         <row>
+           <entry>Language specific</entry>
+           <entry>Avoid perl open magic with 3rd argument.</entry>
+           <entry>
+             Yes.
+           </entry>
+         </row>
+
+       </tbody>
+      </tgroup>
+    </informaltable>
+  </para>
+
+</section>                                                                       
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/shlibs.xml b/rescue/linux/cdrom/yaird-0.0.5/doc/shlibs.xml
new file mode 100644 (file)
index 0000000..6c7c01a
--- /dev/null
@@ -0,0 +1,201 @@
+<section id="shlibs">
+  <title>Supporting Shared Libraries</title>
+
+  <para>
+    When an executable is added to the image, we want any required shared
+    libraries to be added automatically.  The <code>SharedLibraries</code>
+    module determines which files are required.  This section discusses
+    the features of kernel and compiler we need to be aware of in order
+    to do this reliably.
+  </para>
+
+  <para>
+    Linux executables today are in ELF format; it is defined in
+    <ulink url="http://www.linuxbase.org/spec/book/ELF-generic/ELF-generic.html">
+      <citetitle>
+       Generic ELF Specification ELFVERSION</citetitle></ulink>,
+    part of the Linux Standard Base.  This is based on part of the System
+    V ABI: Tool Interface Standard (TIS), Executable and Linking Format
+    (ELF) Sepcification
+  </para>
+
+  <para>
+    ELF has consequences in different parts of the system: in
+    the link-editor, that needs to merge ELF object files into ELF
+    executables; in the kernel (<filename>fs/binfmt_elf.c</filename>),
+    that has to place the executable in RAM and transfer control to it,
+    and in the runtime loader, that is invoked when starting the
+    application to load the necessary shared libraries into RAM.
+    The idea is as follows.
+  </para>
+
+  <itemizedlist>
+    <listitem>
+      <para>
+       Executables are in ELF format, with a type of either
+       <code>ET_EXEC</code> (executable) or <code>ET_DYN</code> (shared
+       library; yes, you can execute those.)  There are other types of
+       ELF file (core files for example) but you can't execute them.
+      </para>
+    </listitem>
+
+    <listitem>
+      <para>
+       These files contain two kind of headers: program headers and
+       section headers.  Program headers define segments of the file that
+       the kernel should store consequetively in RAM; section headers define
+       parts of the file that should be treated by the link editor
+       as a single unit.  Program headers normally point to a group
+       of adjacent sections.
+      </para>
+    </listitem>
+
+    <listitem>
+      <para>
+       The program may be statically linked or dynamically (with shared
+       libraries).
+       If it's statically linked, the kernel loads relevant segments,
+       then transfers control to main() in userland.
+      </para>
+    </listitem>
+
+    <listitem>
+      <para>
+       If it's dynamically linked, one of the program headers has type
+       <code>PT_INTERP</code>.  It points to a segment that contains
+       the name of a (static) executable; this executable is loaded in
+       RAM together with the segments of the dynamic executable.
+      </para>
+    </listitem>
+
+    <listitem>
+      <para>
+       The kernel then transfers control to the userland
+       interpreter, passing program headers and related info in a
+       fourth argument to <code>main()</code>, after <code>envp</code>.
+      </para>
+    </listitem>
+
+    <listitem>
+      <para>
+       There's one interesting twist: one of the segments loaded
+       into RAM (<filename>linux-gate.so</filename>) does not
+       come from the executable, but is a piece of kernel mapped
+       into user space.  It contains a subroutine that the kernel
+       provides to do a system call; the idea is that this way,
+       the C library does not have to know which calling convention
+       for system calls is supported by the kernel and optimal for
+       the current hardware.  The link editor knows nothing about
+       this, only the interpreter knows that the kernel can pass the
+       address of this subroutine together with the program headers.
+       <footnote>
+         <para>
+           For more info on the kernel-supplied shared library for
+           system calls, see
+       
+           <ulink url="http://lwn.net/Articles/18411/">
+             <citetitle>LWN: How to speed up system calls</citetitle></ulink>,
+           <ulink url="http://lwn.net/Articles/30258/">
+             <citetitle>LWN: Patch: i386 vsyscall DSO implementation</citetitle></ulink>,
+           <ulink url="http://www.uwsg.iu.edu/hypermail/linux/kernel/0306.2/0674.html">
+             <citetitle>LKML: common name for the kernel DSO</citetitle></ulink>.
+         </para>
+       </footnote>
+      </para>
+    </listitem>
+
+    <listitem>
+      <para>
+       The interpreter interprets the <code>.dynamic</code> section of
+       the dynamic executable.  This is a table containing various types
+       of info; if the type is <code>DT_NEEDED</code>, the info is the
+       name of a shared library that is needed to run the executable.
+       Normally, it's the basename.
+      </para>
+    </listitem>
+
+    <listitem>
+      <para>
+       The interpreter searches <code>LD_LIBARY_PATH</code> for the
+       library and loads the first working version it finds, using a
+       breath-first search.  Once everything is loaded, the interpreter
+       hands over control to main in the executable.
+      </para>
+    </listitem>
+
+    <listitem>
+      <para>
+       Except that that's not how it really works: the path that glibc
+       uses depends on whether threads are supported, and klibc can
+       function as a <code>PT_INTERP</code> but will not load additional
+       libraries.
+      </para>
+    </listitem>
+  </itemizedlist>
+
+  <para>
+    The <application>ldd</application> command finds the pathnames
+    of shared libraries used by an executable.  This works
+    <emphasis>only</emphasis> for glibc: it invokes the interpreter
+    with the executable as argument plus an environment variable that
+    tells it to print the pathnames rather than load them.  For other
+    C libraries, there's no guaranteed correct way to find the path of
+    shared libraries.
+  </para>
+
+  <para>
+    Thus, to figure out what goes on the initial ram image, first try
+    <application>ldd</application>.  If that gives an answer, good.
+    Otherwise, use a helper program to find <code>PT_INTERP</code> and
+    <code>DT_NEEDED</code>.  If there's only <code>PT_INTERP</code>, good,
+    add it to the image.  If there are <code>DT_NEEDED</code> libraries
+    as well, and they have relative rather than absolute pathnames,
+    we can't determine the full path, so don't generate an image.
+  </para>
+
+  <para>
+    There are a number of options to build a helper to extract the relevant
+    information from the executable:
+    <itemizedlist>
+      <listitem>
+       <para>
+         Build it in perl.  The problem here is that unpacking 64-bit
+         integers is an optional part of the language.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Build a wrapper around <application>objdump</application> or
+         <application>readelf</application>.  The drawback is that
+         there programs are not part of a minimal Linux distribution:
+         depending on them in <application>yaird</application> would
+         increase the footprint.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Building a C program using libbdf.  This is a library
+         intended to simplify working with object files.  Drawbacks
+         are that it adds complexity that is not necessary in our
+         context since it supports multiple executable formats;
+         furthermore, at least in Debian it is treated as internal
+         to the gcc tool chain, complicating packaging the tool.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Building a C program based on <filename>elf.h</filename>.
+         This turns out to be easy to do.
+       </para>
+      </listitem>
+
+    </itemizedlist>
+  </para>
+
+  <para>
+    <application>Yaird</application> uses the last appraoch listed.
+  </para>
+</section>
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/spec.xml b/rescue/linux/cdrom/yaird-0.0.5/doc/spec.xml
new file mode 100644 (file)
index 0000000..2f8f9c8
--- /dev/null
@@ -0,0 +1,311 @@
+<section id="spec">
+  <title>Goals, features, to do</title>
+  <para>
+    The purpose in life of a tool like <application>Yaird</application>
+    is to produce an initial boot image that loads the required modules
+    to allow a booting kernel to access the root file system and from
+    there use the startup scripts to get to the default run level.
+    This means that hardly any drivers need to be compiled into the kernel
+    itself, so a distribution can produce a kernel with a large amount of
+    modules that will run unchanged on practically any hardware, without
+    introducing a large number of unused drivers that would waste RAM.
+    In a sense, the initial boot image customises the kernel to the hardware
+    it happens to be running on.
+  </para>
+
+  <para>
+    That purpose still leaves a lot of room to optimise for different
+    goals: as an example, you could attempt to make the generated
+    image as small as possible, or you could attempt to make the
+    generated image so flexible that it will boot on any hardware.
+    This chapter discusses the goals that determined the design, the
+    resulting features, and what's still left to do.
+  </para>
+
+  <para>
+    The goals<footnote>
+      <para>
+       Well, not really.  I started this thingy to show off a small
+       algorithm to find required modules based on sysfs information.
+       To make that a credible demonstration, the small algorithm
+       turned out to need a lot of scaffolding to turn it into a
+       working program ...
+      </para>
+    </footnote>
+    of <application>Yaird</application> are as follows:
+    <itemizedlist>
+
+      <listitem>
+       <para>
+         Be free, as in GPL.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Be maintainable.  Small functions with documented arguments
+         and result are better than a shell script full of constructs
+         like <code>eval "awk | bash | tac 3>&amp;7"</code>.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Be secure and reliable.  The application should stop with an error
+         message at the slightest provocation, rather than run the
+         risk of producing a non-booting initrd image.
+         The application should not open loopholes that allow the 'bad
+         guys' to modify the image, gain access to raw devices or
+         overwrite system files.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Be distribution agnostic.  Fedora and Debian run similar
+         kernels and similar startup scripts, so there's little
+         reason why the glue between the two levels should be
+         completely different.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Have limited footprint.  The tools needed to build and run
+         the application should be few and widely available, with a
+         preference for tools that are installed anyway.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Be future proof.  Future kernels may use different modules
+         and may change device numbers; the application should need
+         no changes to cope with such migrations.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Promote code reuse.  Make functions side-effect free and
+         independent of context, so that it's easy to package the
+         core as a library that can be reused in other applications.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Generate small images.  The application should accurately
+         detect what modules are needed to get the root file system
+         running and include only those modules on the generated
+         image.<footnote>
+             <para>
+               An alternative and equally interesting exercise would be
+               an attempt to generate a universal initrd that could be
+               distributed together with the kernel.  Such an image
+               would most likely be based on udev/hotplug.
+             </para>
+           </footnote>
+         </para>
+       </listitem>
+
+    </itemizedlist>
+  </para>
+
+  <para>
+    Requirements:
+    <itemizedlist>
+
+      <listitem>
+       <para>
+         Linux 2.6.8 or later, both when running
+         <application>yaird</application> and when running the generated
+         image.  By limiting the goal to support only recent kernels,
+         we can drastically reduce the number of special cases and
+         knowledge about modules in the application.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Sysfs and procfs, both on the old and on the
+         new kernel.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Perl and the HTML-Template module.
+       </para>
+      </listitem>
+
+    </itemizedlist>
+  </para>
+
+  <para>
+    To achieve these goals, the following features are implemented:
+    <itemizedlist>
+
+      <listitem>
+       <para>
+         Templating system to tune the generated image to a
+         given distribution; templates for Debian and Fedora FC3
+         included.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Interprets <filename>/etc/fstab</filename>, including
+         details such as octal escapes, <code>ignore</code> and
+         <code>noauto</code> keywords, and &mdash; for ext3 and reiser
+         file systems &mdash; label and uuid detection.
+         Where applicable, options in <filename>/etc/fstab</filename>
+         are used in the generated image.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Supports volume management via LVM2; activates only the volume
+         group required for the root file system.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Supports software RAID via mdadm; activates only required
+         devices.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Understands SATA, IDE devices.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Generated image does not use hard coded device
+         numbers.<footnote>
+           <para>
+             Except where the distribution depends on it;
+             there are some issues with mdadm in Debian.
+           </para>
+         </footnote>
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Image generation understands how included executables may
+         depend on symbolic links and shared libraries.  Shared libraries
+         work for both glibc and klibc.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Support input devices such as USB keyboard, if the input
+         device supports sysfs.
+         Input devices are needed in the initial image to supply
+         a password for encrypted root disk and to do debugging.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Basic support for kernel command line as passed by the boot
+         loader.  Interprets init=, ro, rw.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Interprets the blacklist information from hotplug.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Interprets the kernel configuration file that defines whether a
+         component is built in, available as a module or unavailable.
+         By maintaining a mapping between module name and config
+         parameter for selected modules, we avoid error messages if
+         for instance a required file system is built into the kernel.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Supports initramfs, both in Debian and Fedora versions.
+         An example template using the older initrd model
+         is included for Debian.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Does not require devfs in either the old or the new kernel.
+       </para>
+      </listitem>
+
+    </itemizedlist>
+  </para>
+
+  <para>
+    Obviously, this tool is far from complete.  Here's a list of
+    features that still need to be implemented:
+    <itemizedlist>
+
+      <listitem>
+       <para>
+         Understands USB and SCSI storage, no special provisions
+         are needed for code generation, but it's not tested yet.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         EVMS, an alternative user level interface to LVM2 and MD,
+         is not supported yet.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Swsusp is not supported yet.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Module aliases and options as specified in
+         <filename>/etc/modprobe.d</filename> are not supported yet.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Firewire and DASD are not supported.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         NFS, loopback and encrypted file systems are not supported.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Configuration info is hard coded in a module; it should be
+         possible to read this from a file.
+       </para>
+      </listitem>
+
+    </itemizedlist>
+  </para>
+
+</section>                                                                       
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/tools.xml b/rescue/linux/cdrom/yaird-0.0.5/doc/tools.xml
new file mode 100644 (file)
index 0000000..236f818
--- /dev/null
@@ -0,0 +1,229 @@
+<section id="tools">
+  <title>Tool Chain</title>
+  <para>
+    This section discusses which tools are used in implementing
+    <application>yaird</application> and why.
+  </para>
+
+  <para>
+    The application is built as a collection of perl modules.
+    The use of a scripting language makes consistent error checking
+    and building sane data structures a lot easier than shell
+    scripting; using perl rather than python is mainly because in
+    Debian perl has 'required' status while python is only 'standard'.
+    The code follows some conventions:
+  </para>
+
+  <para>
+    <itemizedlist>
+      <listitem>
+       <para>
+         Where there are multiple items of a kind, say fstab entries,
+         the perl module implements a class for individual items.
+         All classes share a common base class, <code>Obj</code>,
+         that handles constructor argument validation and that offers
+         a place to plug in debugging code.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Object attributes are used via accessor methods to catch
+         typos in attribute names.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Objects have a <code>string</code> method, that returns
+         a string version of the object.  Binary data is not
+         guaranteed to be absent from the string version.
+       </para>
+      </listitem>
+
+      <listitem>
+       <para>
+         Where there are multiple items of a kind, say fstab entries,
+         the collection is implemented as a module that is not a
+         class.  There is a function <code>all</code> that returns a
+         list of all known items, and functions <code>findByXxx</code>
+         to retrieve an item where the Xxx attribute has a given
+         value.  There is an <code>init</code> function that
+         initializes the collection; this is called automatically
+         upon first invocation of <code>all</code> or
+         <code>findByXxx</code>.
+         Collections may have convenience functions
+         <code>findXxxByYyy</code>: return attribute Xxx, given a
+         value for attribute Yyy.
+       </para>
+      </listitem>
+
+    </itemizedlist>
+  </para>
+
+  <para>
+    The generated initrd image needs a command interpreter;
+    the choice of command interpreter is exclusively determined
+    by the image generation template.
+    At this point, both Debian and Fedora templates use the
+    <application>dash</application> shell, for historical reasons only.
+    Presumably <application>busybox</application> could be used to build a
+    smaller image.  However, support for initramfs requires a complicated
+    construction involving a combination of mount, chroot and chdir;
+    to do that reliably, <application>nash</application> as used in Fedora
+    seems a more attractive option.
+  </para>
+
+  <para>
+    Documentation is in docbook format, since it's widely supported,
+    supports numerous output formats, has better separation between
+    content and layout than texinfo, and provides better guarantees
+    against malformed HTML than texinfo.
+  </para>
+
+  <simplesect>
+    <title>Autoconf</title>
+    <para>
+      GNU automake is used to build and install the application,
+      where 'building' is perhaps too big a word adding the location
+      of the underlying modules to the wrapper script.
+      The reasons for using automake: it provides packagers with a
+      well known mechanism for changing installation directories,
+      and it makes it easy for developers to produce a cruft-free
+      and reproducible tarball based on the tree extracted from
+      version control.
+    </para>
+  </simplesect>
+
+  <simplesect>
+    <title>C Library</title>
+    <para>
+      The standard C library under linux is glibc.  This is big:
+      1.2Mb, where an alternative implementation, klibc, is only 28Kb.
+      The reason klibc can be so much smaller than glibc is that a
+      lot of features of glibc, like NIS support, are not relevant for
+      applications that need to do basic stuff like loading an IDE driver.
+    </para>
+
+    <para>
+      There are other small libc implementations: in the embedded world,
+      dietlibc and uClibc are popular.  However, klibc was specifically
+      developed to support the initial image: it's intended to be included
+      with the mainline kernel and allow moving a lot of startup magic out
+      of the kernel into the initial image.  See 
+      <ulink url="http://marc.theaimsgroup.com/?m=101070502919547">
+       <citetitle>
+         LKML: [RFC] klibc requirements, round 2</citetitle></ulink>
+      for requirements on klibc; the
+      <ulink url="http://www.zytor.com/mailman/listinfo/klibc">
+       <citetitle>mailing list</citetitle></ulink> is the most current
+      source of information.
+    </para>
+
+    <para>
+      Recent versions of klibc (1.0 and later) include a wrapper around
+      gcc, named klcc, that will compile a program with klibc.  This means
+      <application>yaird</application> does not need to include klibc,
+      but can easily be configured to use klibc rather than glibc.
+      Of course this will only pay off if <emphasis>every</emphasis>
+      executable on the initial image uses klibc.
+    </para>
+
+    <para>
+      <application>Yaird</application> does not have to be extended in
+      order to support klibc, but it is necessary to avoid assumptions
+      about which shared libraries are used.  This is discussed in 
+      <xref linkend="shlibs"/>.
+    </para>
+  </simplesect>
+
+  <simplesect>
+    <title>Template Processing</title>
+    <para>
+      This section discusses the templates used to transform
+      high-level actions to lines of script in the generated image.
+      These templates are intended to cope with small differences
+      between distributions: a shell that is named
+      <application>dash</application> in Debian and
+      <application>ash</application> in Fedora for example.
+      By processing the output of <application>yaird</application>
+      through a template, we can confine the tuning of
+      <application>yaird</application> for a specific distribution
+      to the template, without having to touch the core code.
+    </para>
+
+    <para>
+      One important function of a template library is to enforce
+      a clear separation between progam logic and output formatting:
+      there should be no way to put perl fragments inside a template.
+      See <ulink url="http://www.stringtemplate.org/">StringTemplate</ulink>
+      for a discussion of what is needed in a templating system, plus
+      a Java implementation.
+    </para>
+
+    <para>
+      Lets consider a number of possible templating solutions:
+      <itemizedlist>
+
+       <listitem>
+         <para>
+           <ulink url="http://www.template-toolkit.org/">
+            Template Toolkit</ulink>:
+           widely used, not in perl core distribution, does not
+           prevent mixing of code and templates.
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+           <ulink url="http://search.cpan.org/dist/Text-Template/lib/Text/Template.pm">
+             Text::Template</ulink>:
+           not in perl core distribution, does not
+           prevent mixing of code and templates.
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+           Some XSLT processor.  Not in core distribution,
+           more suitable for file-to-file transformations
+           than for expanding in-process data; overkill.
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+           <ulink url="http://search.cpan.org/~samtregar/HTML-Template-2.7/Template.pm">
+             HTML-Template</ulink>:
+           not in perl core distribution,
+           prevents mixing of code and templates,
+           simple, no dependencies, dual GPL/Artistic license.
+           Available in Debian as
+           <application>libhtml-template-perl</application>,
+           in Fedora 2 as perl-HTML-Template, dropped from Fedora 3,
+           but available via
+           <ulink url="http://download.fedora.redhat.com/pub/fedora/linux/extras/">
+             Fedora Extras</ulink>.
+         </para>
+       </listitem>
+
+       <listitem>
+         <para>
+           A home grown templating system: a simple system such as the
+           HTML-Template module is over 100Kb.  We can cut down on that
+           by dropping functions we don't immediately need, but the effort
+           to get a tested and documented implementation remains substantial.
+         </para>
+       </listitem>
+       
+      </itemizedlist>
+    </para>
+
+    <para>
+      The HTML-Template approach is the best match for our
+      requirements, so used in <application>yaird</application>.
+    </para>
+
+  </simplesect>
+
+</section>
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/yaird.html b/rescue/linux/cdrom/yaird-0.0.5/doc/yaird.html
new file mode 100644 (file)
index 0000000..d78437e
--- /dev/null
@@ -0,0 +1,1581 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Yaird — Yet Another Mkinitrd</title><meta name="generator" content="DocBook XSL Stylesheets V1.65.1" /><meta name="description" content="&#10;      This memo discusses the design goals and implementation of&#10;      Yaird (Yet Another mkInitRD),&#10;      a proof-of-concept application to create an initial boot image,&#10;      a minimal filesystem used to bring a booting Linux kernel to a&#10;      level where it can access the root file system and use startup&#10;      scripts to bring the system to the normal run level.  It differs&#10;      from earlier mkinitrd implementations in&#10;      that it leverages the information in sysfs to minimise the number&#10;      of special cases that the application has to know about, and in&#10;      that it uses a template system to separate the analysis of the&#10;      system from the building of the image.&#10;    " /></head><body><div class="article" lang="en" xml:lang="en"><div class="titlepage"><div><div><h1 class="title"><a id="index"></a>Yaird — Yet Another Mkinitrd</h1></div><div><div class="author"><h3 class="author"><span class="firstname">Erik</span> <span class="surname">van Konijnenburg</span></h3><tt class="email">&lt;<a href="mailto:ekonijn@xs4all.nl">ekonijn@xs4all.nl</a>&gt;</tt></div></div><div><p class="copyright">Copyright © 2005 Erik van Konijnenburg</p></div><div><div class="legalnotice"><p>
+    Permission is granted to copy, distribute and/or modify this
+    document under the terms of the <i class="citetitle">GNU Free Documentation
+    License</i>, Version 1.1 or any later version published
+    by the Free Software Foundation with no Invariant Sections, no
+    Front-Cover Texts, and no Back-Cover Texts. You may obtain a copy
+    of the <i class="citetitle">GNU Free Documentation License</i> from
+    the Free Software Foundation by visiting <a href="http://www.fsf.org" target="_top">their Web site</a> or by writing to:
+    Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+    Boston, MA 02111-1307, USA.
+   </p></div></div><div><p class="pubdate">2005-02-09</p></div><div><div class="abstract"><p class="title"><b>Abstract</b></p><p>
+      This memo discusses the design goals and implementation of
+      <span class="application">Yaird</span> (Yet Another mkInitRD),
+      a proof-of-concept application to create an initial boot image,
+      a minimal filesystem used to bring a booting Linux kernel to a
+      level where it can access the root file system and use startup
+      scripts to bring the system to the normal run level.  It differs
+      from earlier <span class="application">mkinitrd</span> implementations in
+      that it leverages the information in sysfs to minimise the number
+      of special cases that the application has to know about, and in
+      that it uses a template system to separate the analysis of the
+      system from the building of the image.
+    </p></div></div></div><div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#intro-chapter">Introduction</a></span></dt><dt><span class="section"><a href="#spec">Goals, features, to do</a></span></dt><dt><span class="section"><a href="#concepts">Concepts</a></span></dt><dt><span class="section"><a href="#kernel">The interface between kernel and image</a></span></dt><dt><span class="section"><a href="#raid">Supporting Raid Devices</a></span></dt><dt><span class="section"><a href="#input">Supporting Input Devices</a></span></dt><dt><span class="section"><a href="#shlibs">Supporting Shared Libraries</a></span></dt><dt><span class="section"><a href="#security">Security</a></span></dt><dt><span class="section"><a href="#tools">Tool Chain</a></span></dt><dt><span class="section"><a href="#authors-chap">Authors</a></span></dt><dt><span class="section"><a href="#license-chapter">License</a></span></dt></dl></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="intro-chapter"></a>Introduction</h2></div></div><div></div></div><p>
+    <span class="application">Yaird</span> (Yet Another mkInitRD) is an
+    application to create an initial boot image, a minimal filesystem used
+    to bring a booting Linux kernel to a level where it can access
+    the root file system and use startup scripts to bring the system
+    to the normal run level.
+ </p><p>
+    It differs from earlier <span class="application">mkinitrd</span>
+    implementations in that it attempts to leverage the information in
+    sysfs to minimise the number of special cases that the application
+    has to know about, and in that it uses a template system to separate
+    the analysis of the system from the building of the image.
+  </p><p>
+    This document gives an overview of the design and implementation
+    of <span class="application">Yaird</span>; see the README file for
+    usage information.  This text assumes familiarity with Linux
+    system administration and the basics of hotplug and sysfs.
+  </p><p>
+    This document describes version 0.0.5
+    of <span class="application">Yaird</span>.
+    This is a very rough, proof of concept, version.
+  </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="spec"></a>Goals, features, to do</h2></div></div><div></div></div><p>
+    The purpose in life of a tool like <span class="application">Yaird</span>
+    is to produce an initial boot image that loads the required modules
+    to allow a booting kernel to access the root file system and from
+    there use the startup scripts to get to the default run level.
+    This means that hardly any drivers need to be compiled into the kernel
+    itself, so a distribution can produce a kernel with a large amount of
+    modules that will run unchanged on practically any hardware, without
+    introducing a large number of unused drivers that would waste RAM.
+    In a sense, the initial boot image customises the kernel to the hardware
+    it happens to be running on.
+  </p><p>
+    That purpose still leaves a lot of room to optimise for different
+    goals: as an example, you could attempt to make the generated
+    image as small as possible, or you could attempt to make the
+    generated image so flexible that it will boot on any hardware.
+    This chapter discusses the goals that determined the design, the
+    resulting features, and what's still left to do.
+  </p><p>
+    The goals<sup>[<a id="id2667183" href="#ftn.id2667183">1</a>]</sup>
+    of <span class="application">Yaird</span> are as follows:
+    </p><div class="itemizedlist"><ul type="disc"><li><p>
+         Be free, as in GPL.
+       </p></li><li><p>
+         Be maintainable.  Small functions with documented arguments
+         and result are better than a shell script full of constructs
+         like <tt class="code">eval "awk | bash | tac 3&gt;&amp;7"</tt>.
+       </p></li><li><p>
+         Be secure and reliable.  The application should stop with an error
+         message at the slightest provocation, rather than run the
+         risk of producing a non-booting initrd image.
+         The application should not open loopholes that allow the 'bad
+         guys' to modify the image, gain access to raw devices or
+         overwrite system files.
+       </p></li><li><p>
+         Be distribution agnostic.  Fedora and Debian run similar
+         kernels and similar startup scripts, so there's little
+         reason why the glue between the two levels should be
+         completely different.
+       </p></li><li><p>
+         Have limited footprint.  The tools needed to build and run
+         the application should be few and widely available, with a
+         preference for tools that are installed anyway.
+       </p></li><li><p>
+         Be future proof.  Future kernels may use different modules
+         and may change device numbers; the application should need
+         no changes to cope with such migrations.
+       </p></li><li><p>
+         Promote code reuse.  Make functions side-effect free and
+         independent of context, so that it's easy to package the
+         core as a library that can be reused in other applications.
+       </p></li><li><p>
+         Generate small images.  The application should accurately
+         detect what modules are needed to get the root file system
+         running and include only those modules on the generated
+         image.<sup>[<a id="id2735423" href="#ftn.id2735423">2</a>]</sup>
+         </p></li></ul></div><p>
+  </p><p>
+    Requirements:
+    </p><div class="itemizedlist"><ul type="disc"><li><p>
+         Linux 2.6.8 or later, both when running
+         <span class="application">yaird</span> and when running the generated
+         image.  By limiting the goal to support only recent kernels,
+         we can drastically reduce the number of special cases and
+         knowledge about modules in the application.
+       </p></li><li><p>
+         Sysfs and procfs, both on the old and on the
+         new kernel.
+       </p></li><li><p>
+         Perl and the HTML-Template module.
+       </p></li></ul></div><p>
+  </p><p>
+    To achieve these goals, the following features are implemented:
+    </p><div class="itemizedlist"><ul type="disc"><li><p>
+         Templating system to tune the generated image to a
+         given distribution; templates for Debian and Fedora FC3
+         included.
+       </p></li><li><p>
+         Interprets <tt class="filename">/etc/fstab</tt>, including
+         details such as octal escapes, <tt class="code">ignore</tt> and
+         <tt class="code">noauto</tt> keywords, and — for ext3 and reiser
+         file systems — label and uuid detection.
+         Where applicable, options in <tt class="filename">/etc/fstab</tt>
+         are used in the generated image.
+       </p></li><li><p>
+         Supports volume management via LVM2; activates only the volume
+         group required for the root file system.
+       </p></li><li><p>
+         Supports software RAID via mdadm; activates only required
+         devices.
+       </p></li><li><p>
+         Understands SATA, IDE devices.
+       </p></li><li><p>
+         Generated image does not use hard coded device
+         numbers.<sup>[<a id="id2735548" href="#ftn.id2735548">3</a>]</sup>
+       </p></li><li><p>
+         Image generation understands how included executables may
+         depend on symbolic links and shared libraries.  Shared libraries
+         work for both glibc and klibc.
+       </p></li><li><p>
+         Support input devices such as USB keyboard, if the input
+         device supports sysfs.
+         Input devices are needed in the initial image to supply
+         a password for encrypted root disk and to do debugging.
+       </p></li><li><p>
+         Basic support for kernel command line as passed by the boot
+         loader.  Interprets init=, ro, rw.
+       </p></li><li><p>
+         Interprets the blacklist information from hotplug.
+       </p></li><li><p>
+         Interprets the kernel configuration file that defines whether a
+         component is built in, available as a module or unavailable.
+         By maintaining a mapping between module name and config
+         parameter for selected modules, we avoid error messages if
+         for instance a required file system is built into the kernel.
+       </p></li><li><p>
+         Supports initramfs, both in Debian and Fedora versions.
+         An example template using the older initrd model
+         is included for Debian.
+       </p></li><li><p>
+         Does not require devfs in either the old or the new kernel.
+       </p></li></ul></div><p>
+  </p><p>
+    Obviously, this tool is far from complete.  Here's a list of
+    features that still need to be implemented:
+    </p><div class="itemizedlist"><ul type="disc"><li><p>
+         Understands USB and SCSI storage, no special provisions
+         are needed for code generation, but it's not tested yet.
+       </p></li><li><p>
+         EVMS, an alternative user level interface to LVM2 and MD,
+         is not supported yet.
+       </p></li><li><p>
+         Swsusp is not supported yet.
+       </p></li><li><p>
+         Module aliases and options as specified in
+         <tt class="filename">/etc/modprobe.d</tt> are not supported yet.
+       </p></li><li><p>
+         Firewire and DASD are not supported.
+       </p></li><li><p>
+         NFS, loopback and encrypted file systems are not supported.
+       </p></li><li><p>
+         Configuration info is hard coded in a module; it should be
+         possible to read this from a file.
+       </p></li></ul></div><p>
+  </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="concepts"></a>Concepts</h2></div></div><div></div></div><p>
+    This section discusses the basic concepts underlying
+    <span class="application">yaird</span>.
+  </p><p>
+    The basic operation is simple:
+    </p><div class="orderedlist"><ol type="1"><li><p>
+         make a plan to build an image,
+       </p></li><li><p>
+         transform the plan to a detailed description of the image,
+       </p></li><li><p>
+         build and pack the image.
+       </p></li></ol></div><p>
+
+  </p><p>
+    The plan consists of a number of goals to be achieved: a loaded
+    device driver, a block special file created, a device mounted.
+    The plan does not specify details such as the exact path of the
+    <span class="application">mknod</span> executable or the shared libraries
+    needed to run that executable.
+  </p><div class="simplesect" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2695566"></a>Making the Plan</h3></div></div><div></div></div><p>
+      The most interesting part is making the plan.  At the top level,
+      the plan is governed by some ultimate goals.  For now, the only
+      goal is to get a working keyboard and to mount the root file system,
+      but if we're going to support swsusp, the swap devices also need to
+      be activated.  To realise the goal, subgoals need to be realised.
+      As an example, before mounting a file system, the modules containing
+      the implementation of the file system need to be loaded.
+    </p><p>
+      To refine the goal of loading a kernel module,
+      the <tt class="code">ModDepTab</tt> module interprets
+      <tt class="filename">modules.dep</tt> for the new kernel.  Given a
+      module name, this will return a list of required modules with all
+      dependencies recursively resolved.  It knows about the equivalence
+      between hyphen and underscore in module names, it also knows how
+      to search for modules in the <tt class="filename">/lib/modules</tt>
+      directory.
+    </p><p>
+      The <tt class="code">KConfig</tt> module determines if loading a
+      module can be omitted because the module is hardcoded into the
+      kernel.  As an example, it is aware of the fact that the module
+      <tt class="code">ext3</tt> is not needed if the new kernel configuration
+      contains <tt class="code">CONFIG_EXT3_FS=y</tt>.<sup>[<a id="id2736265" href="#ftn.id2736265">4</a>]</sup>
+      Only a few modules are known: <span class="application">yaird</span>
+      looks for modules such as <tt class="code">ext3</tt> when that filesystem
+      is used, so it makes sense to check whether a missing module
+      is compiled in.  On the other hand, hardware modules that are
+      compiled in never show up in <tt class="filename">modules.pcimap</tt>
+      and friends, so they remain completely outside the view of
+      <span class="application">yaird</span>.
+    </p><p>
+      Module aliases and options as supported by
+      <span class="application">modprobe</span> are unsupported for the moment.
+    </p><p>
+      Before a device as listed in <tt class="filename">/etc/fstab</tt> can be
+      mounted, that device needs to be enabled.  That device could be an
+      NFS mount, a loopback mount or it could be a block device.  The NFS
+      and loopback cases are not supported yet, but block devices are.
+      This support is based on a number of sources of information:
+      </p><div class="orderedlist"><ol type="1"><li><p>
+           Scanning the <tt class="filename">/dev</tt> directory gives us the
+           relation between all block special files and major/minor
+           numbers.
+         </p></li><li><p>
+           Scanning the <tt class="filename">/sys/block</tt> directory gives us the
+           relation between all major/minor numbers and kernel names
+           such as <tt class="code">dm-0</tt> or <tt class="code">sda1</tt>; it
+           also gives the relation between partitions and complete
+           devices.
+         </p></li><li><p>
+           If there is a symlink in a <tt class="filename">/sys/block</tt>
+           subdirectory to the <tt class="filename">/sys/devices</tt>
+           directory, it also gives is the relation between a block
+           device and the underlying hardware.
+         </p></li></ol></div><p>
+    </p><p>
+      Based on the kernel name and partition relationships of the device,
+      we determine the steps needed to activate the device.  As an example,
+      to activate <tt class="code">sda1</tt>, we need to activate <tt class="code">sda</tt>,
+      then create a block special file for <tt class="code">sda1</tt>.  As
+      another example, to activate <tt class="code">dm-0</tt>, our first bet is
+      to check whether this is an LVM logical
+      volume,<sup>[<a id="id2736425" href="#ftn.id2736425">5</a>]</sup> and if so activate the
+      physical volumes underlying the volume group, and finally running
+      <tt class="code">vgchange -a y</tt>.
+    </p></div><div class="simplesect" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2736440"></a>Hardware Planning</h3></div></div><div></div></div><p>
+      Some devices, such as <tt class="code">sdx</tt> or <tt class="code">hdy</tt>, are
+      expected to have underlying hardware; as an example, <tt class="code">sda</tt>
+      may be backed by <tt class="code">pci0000:00/0000:00:1f.2/host0/0:0:0:0</tt>.
+      This represents a hardware path, in this case a controller on the PCI
+      bus that connects to a SCSI device.  In order to use the device,
+      every component on the path needs to be activated, the component
+      closest to the CPU first.
+      Based on the pathname in <tt class="filename">/sys/devices</tt> and on
+      files within the directory for the component, we can determine
+      what kind of component we're dealing with, and how to find the
+      required modules.
+    </p><p>
+      Finding modules closely follows the methods used in the
+      <span class="application">hotplug</span> package, and the
+      <span class="application">hotplug</span> approach in turn is an almost
+      literal translation of the code that the kernel uses to find a
+      driver for a newly detected piece of hardware.
+    </p><p>
+      For components that talk some protocol over a bus, like SCSI or
+      IDE disks or CDROMs, this is a simple hard coded selection; as an
+      example, the <tt class="code">ScsiDev</tt> module knows that a SCSI device
+      with a <tt class="filename">type</tt> file containing "5" is a CDROM,
+      and that <tt class="code">sr-mod</tt> is the appropriate driver.
+    </p><p>
+      Devices such as PCI or USB devices cannot be classified into
+      a few simple categories.  These devices have properties such
+      as "Vendor", "Device" and "Class" that are visible in sysfs.
+      The source code of kernel driver modules for these devices
+      contains a table listing which combination of properties mark a
+      device that the driver is prepared to handle.  When the kernel
+      is compiled, these tables are summarised in a text file such
+      as <tt class="filename">modules.pcimap</tt>.  Based on this table,
+      we find a driver module needed for the device and mark it for
+      inclusion on the image.
+    </p><p>
+      Multiple modules can match the same hardware: as an example,
+      <tt class="code">usb-storage</tt> and <tt class="code">ub</tt> both match an USB
+      stick.  In such cases, we load all matching modules into the
+      kernel and leave it to kernel to decide who gets to manage the
+      device.  There's one complication: some modules, such as
+      <tt class="code">usb-core</tt>, match any device (probably to maintain some
+      administration of their own, or to provide an ultra-generic
+      interface), but do not actually provide access to the device.
+      Such devices are weeded out by the <tt class="code">Blacklist</tt> module,
+      based on information in
+      <tt class="filename">/etc/hotplug/blacklist</tt> and
+      <tt class="filename">/etc/hotplug/blacklist.d</tt>.
+    </p><p>
+      It turns out that the "load modules for every component in the sysfs
+      path" approach is not always sufficient: sometimes you have to load
+      siblings as well.  As an example, consider a combined EHCI/UHCI
+      USB controller on a single chip.  The same ports can show up as EHCI
+      or UHCI devices, different PCI functions in the same PCI slot, with
+      different sysfs directories, depending on what kind of hardware is
+      connected.  Purely following the sysfs path, we would only need to load
+      the EHCI driver, but it appears that on this kind of chip, EHCI devices
+      are not reliably detected unless the UHCI driver is loaded as well.
+      For this reason, we extend the algorithm with a rule: "for PCI devices,
+      load modules for every function in the PCI slot".
+    </p><p>
+      That's actually a bit much: it would load all of ALSA if you have a
+      combined ISA/IDE/USB/Multimedia chipset.  So we limit the above
+      to those PCI functions that provide USB ports.
+    </p></div><div class="simplesect" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2736605"></a>Plan Transformation</h3></div></div><div></div></div><p>
+      The plan generated in the first phase is a collection of general
+      intentions, stuff like 'load this module', but it does not
+      specify exactly what files must be placed on the image and what
+      lines are to be added to the initialisation scripts.
+    </p><p>
+      The module <tt class="code">ActionList</tt> represents this plan with a
+      list of hashes; every hash contains at least 'action' and
+      'target', with other keys added to provide extra information
+      as needed.  If two steps in the plan have identical action and
+      target, the last one is considered redundant and silently omitted.
+    </p><p>
+      This plan is transformed to an exact image description with
+      the help of templates.  The module <tt class="code">Template</tt>
+      contains a hash with for every type of action:
+      </p><div class="itemizedlist"><ul type="disc"><li><p>
+           a list of files to be copied from the mother system to the
+           image;
+         </p></li><li><p>
+           a list of directories to be created on the image; these do
+           not have to exist on the mother system;
+         </p></li><li><p>
+           a list of trees to be copied recursively from the mother
+           system to the image;
+         </p></li><li><p>
+           a hash, with as key the name of a script to be appended to
+           and as value that which is to be appended.
+         </p></li></ul></div><p>
+      All of the above are fed through HTML-Template, with the hash
+      describing this step as parameters.  In practice, this looks
+      like so:
+      </p><pre class="programlisting">
+          insmod =&gt; {
+              files =&gt; [
+                  '&lt;TMPL_VAR NAME=target&gt;',
+                  '/sbin/insmod',
+                  ],
+              directories =&gt; [],
+              trees =&gt; [],
+              scripts =&gt; {
+                  '/init' =&gt; &lt;&lt;'//',
+                      /sbin/insmod '&lt;TMPL_VAR NAME=target&gt;'
+//
+              },
+          },
+      </pre><p>
+    </p><p>
+      There are a few attributes that are available to every template:
+      </p><div class="variablelist"><dl><dt><span class="term">
+           version
+         </span></dt><dd><p>
+             The kernel version we're generating an image for.
+             Useful if you want your image to include a complete copy
+             of <tt class="filename">/lib/modules/(version)/kernel</tt>.
+           </p></dd><dt><span class="term">
+           appVersion
+         </span></dt><dd><p>
+             The version of <span class="application">yaird</span> used to
+             build the image.
+           </p></dd><dt><span class="term">
+           auxDir
+         </span></dt><dd><p>
+             The directory where <span class="application">yaird</span>
+             keeps executables intended to go on the image, such as
+             <span class="application">run_init</span>.
+           </p></dd></dl></div><p>
+    </p><p>
+      Currently, there are templates for Debian and for Fedora, plus
+      a template showing how to use the older initrd approach.
+    </p></div><div class="simplesect" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2736780"></a>Image Generation</h3></div></div><div></div></div><p>
+      The detailed image description consists of a collection of names of
+      files, directories, symbolic links and block or character devices,
+      plus a number of lines of shell script.  The image description does
+      not contain permission or ownership information: files always have
+      mode 444, executables and directories always 555, devices always
+      mode 600,<sup>[<a id="id2736794" href="#ftn.id2736794">6</a>]</sup> and everything is owned by root.
+    </p><p>
+      The <tt class="code">Image</tt> module contains the image description and
+      can write the image to a directory.  It understands about symlinks:
+      if <tt class="filename">/sbin/vgscan</tt> is added to the image and it
+      happens to be a symlink to <tt class="filename">lvmiopversion</tt>, both
+      <tt class="filename">vgscan</tt> and <tt class="filename">lvmiopversion</tt>
+      will be added to the image.  Shared libraries are supported
+      via the <tt class="code">SharedLibraries</tt> module, as discussed in
+      <a href="#shlibs" title="Supporting Shared Libraries">the section called “Supporting Shared Libraries”</a>.  Invocations of other executables are not
+      recognised automatically: if <tt class="filename">lvmiopversion</tt> executes
+      <tt class="filename">/etc/lvm-200/vgscan</tt>, the latter needs to be
+      added explicitly to the image.
+    </p><p>
+      The copying of complete trees to the image is influenced by the
+      copying for executables: if there is a symlink in the tree, it's
+      target is also included on the image, but if the target is a
+      directory, its contents are not copied recursively.  This
+      approach avoids loops in image generation.
+      Note that the target of a symlink must exist:
+      <span class="application">yaird</span> refuses to copy dangling links.
+    </p></div><div class="simplesect" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2737013"></a>Packing the Image</h3></div></div><div></div></div><p>
+      The final step is packing the image in a format that the
+      bootloader can process; this is handled by the module
+      <tt class="code">Pack</tt>.  The following formats are supported:
+      </p><div class="variablelist"><dl><dt><span class="term">
+           cpio
+         </span></dt><dd><p>
+             A zipped cpio file (new ASCII format), required for the
+             initramfs model as used in the templates for Debian and
+             Fedora.
+           </p></dd><dt><span class="term">
+           directory
+         </span></dt><dd><p>
+             An unpacked directory, good for debugging or manually
+             creating odd formats.
+           </p></dd><dt><span class="term">
+           cramfs
+         </span></dt><dd><p>
+             A cramfs filesystem, used for Debian initrd images.
+           </p></dd></dl></div><p>
+    </p></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="kernel"></a>The interface between kernel and image</h2></div></div><div></div></div><p>
+    The initial boot image is supposed to load enough modules to let
+    the real root device be mounted cleanly.  It starts up in a
+    <span class="emphasis"><em>very</em></span> bare environment and it has to do tricky
+    stuff like juggling root filesystems; to pull that off successfully
+    it makes sense to take a close look at the environment that the
+    kernel creates for the image and what the kernel expects it to do.
+    This section contains raw design notes based on kernel 2.6.8.
+  </p><p>
+    The processing of the image starts even before the kernel is
+    activated.  The bootloader, grub or lilo for example, reads two
+    files from the boot file system into ram: the kernel and image.
+    The bootloader somehow manages to set two variables in the kernel:
+    <tt class="code">initrd_start</tt> and <tt class="code">initrd_end</tt>; these variables
+    point to the copy of the image in ram.  The bootloader now
+    hands over control to the kernel.
+  </p><p>
+    During setup, the kernel creates a special file system, rootfs.
+    This mostly reuses ramfs code, but there are a few twists: it can
+    never be mounted from userspace, there's only one copy, and it's not
+    mounted on top of anything else.  The existence of rootfs means that
+    the rest of the kernel always can assume there's a place to mount
+    other file systems.  It also is a place where temporary files can
+    be created during the boot sequence.
+  </p><p>
+      In <tt class="code">initramfs.c:populate_rootfs()</tt>, there are two
+      possibilities.  If the image looks like a cpio.gz file, it is
+      unpacked into rootfs.  If the file <tt class="filename">/init</tt> is
+      among the files unpacked from the cpio file, the initramfs model
+      is used; otherwise we get a more complex interaction between kernel
+      and initrd, discussed in <a href="#initrd" title="Booting with initrd">the section called “Booting with initrd”</a>.
+    </p><div class="simplesect" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2738021"></a>Booting with Initramfs</h3></div></div><div></div></div><p>
+      If the image was a cpio file, and it contains a file
+      <tt class="filename">/init</tt>, the initram model is used.
+      The kernel does some basic setup and hands over control to
+      <tt class="filename">/init</tt>; it is then up to
+      <tt class="filename">/init</tt> to make a real root available and to
+      transfer control to the <tt class="filename">/sbin/init</tt> command
+      on the real root.
+    </p><p>
+      The tricky part is to do that in such a way that there
+      is no way for user processes to gain access to the rootfs
+      filesystem; and in such a way that rootfs remains empty and
+      hidden under the user root file system.  This is best done
+      using some C code; <span class="application">yaird</span> uses
+      <span class="application">run_init</span>, a small tool based on
+      <span class="application">klibc</span>.
+      </p><pre class="programlisting">
+       # invoked as last command in /init, with no other processes running,
+       # as follows:
+       # exec run_init /newroot /sbin/init "$@"
+       - chdir /newroot
+       # following after lots of sanity checks and not across mounts:
+       - rm -rf /*
+       - mount --move . /
+       - chroot .
+       - chdir /
+       - open /dev/console
+       - exec /sbin/init "$@"
+      </pre><p>
+    </p></div><div class="simplesect" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="initrd"></a>Booting with initrd</h3></div></div><div></div></div><p>
+      If the image was not a cpio file, the kernel copies the
+      initrd image from where ever the boot loader left it to
+      <tt class="filename">rootfs:/initrd.image</tt>, and frees the ram used
+      by the bootloader for the initrd image.
+    </p><p>
+      After reading initrd, the kernel does more setup to the point where
+      we have:
+      </p><div class="itemizedlist"><ul type="disc"><li><p>
+             working CPU and memory management
+         </p></li><li><p>
+             working process management
+         </p></li><li><p>
+             compiled in drivers activated
+         </p></li><li><p>
+             a number of support processes such as ksoftirqd are created.
+             (These processes have the rootfs as root; they can get a new
+             root when the <tt class="code">pivot_root()</tt> system call is used.)
+         </p></li><li><p>
+             something like a console.  <tt class="code">Console_init()</tt> is
+             called before PCI or USB probes, so expect only compiled in
+             console devices to work.
+         </p></li></ul></div><p>
+    </p><p>
+      At this point, in <tt class="code">do_mounts.c:prepare_namespace()</tt>,
+      the kernel looks for a root filesystem to mount.  That root file
+      system can come from a number of places: NFS, a raid device, a plain
+      disk or an initrd.  If it's an initrd, the sequence is as follows
+      (where devfs can fail if it's not compiled into the kernel)
+
+      </p><pre class="programlisting">
+      - mount -t devfs devfs /dev
+      - md_run_setup()
+      - process initrd
+      - umount /dev
+      - mount --move . /
+      - chroot .
+      - mount -t devfs devfs /dev
+      </pre><p>
+
+    </p><p>
+      Once that returns, in <tt class="code">init/main.c:init()</tt>,
+      initialisation memory is freed and <tt class="filename">/sbin/init</tt>
+      is executed with <tt class="code">/dev/console</tt> as file  descriptor 0, 1
+      and 2.  <tt class="filename">/sbin/init</tt> can be overruled with
+      an <tt class="code">init=/usr/bin/firefox</tt> parameter passed to the
+      boot loader; if <tt class="filename">/sbin/init</tt> is not found,
+      <tt class="filename">/etc/init</tt> and a number of other fallbacks
+      are tried.  We're in business.
+    </p><p>
+      The processing of initrd starts in
+      <tt class="code">do_mounts_initrd.c:initrd_load()</tt>.  It creates
+      <tt class="filename">rootfs:/dev/ram</tt>, then copies
+      <tt class="filename">rootfs:/initrd.image</tt> there and unlinks
+      <tt class="filename">rootfs:/initrd.image</tt>.  Now we have the initrd
+      image in a block device, which is good for mounting.  It calls
+      <tt class="code">handle_initrd()</tt>, which does:
+
+      </p><pre class="programlisting">
+      # make another block special file for ram0
+      - mknod /dev/root.old b 1 0
+      # try mounting initrd with all known file systems,
+      # optionally read-only
+      - mount -t xxx /dev/root.old /root
+      - mkdir rootfs:/old
+      - cd /root
+      - mount --move . /
+      - chroot .
+      - mount -t devfs devfs /dev
+      - system ("/linuxrc");
+      - cd rootfs:/old
+      - mount --move / .
+      - cd rootfs:/
+      - chroot .
+      - umount rootfs:/old/dev
+      - ... more ...
+      </pre><p>
+
+    </p><p>
+      So <tt class="filename">initrd:/linuxrc</tt> runs in an environment where
+      initrd is the root, with devfs mounted if available, and rootfs is
+      invisible (except that there are open file handles to directories
+      in rootfs, needed to change back to the old environment).
+    </p><p>
+      Now the idea seems to have been that <tt class="filename">/linuxrc</tt>
+      would mount the real root and <tt class="code">pivot_root</tt> into it, then start
+      <tt class="filename">/sbin/init</tt>.  Thus, linuxrc would never return.
+      However, <tt class="code">main.c:init()</tt> does some usefull stuff only
+      after linuxrc returns: freeing init memory segments and starting numa
+      policy, so in eg Debian and Fedora, <tt class="filename">/linuxrc</tt>
+      will end, and <tt class="filename">/sbin/init</tt>
+      is started by <tt class="code">main.c:init()</tt>.
+    </p><p>
+      After linuxrc returns, the variable <tt class="code">real_root_dev</tt>
+      determines what happens.  This variable can be read and written
+      via <tt class="filename">/proc/sys/kernel/real-root-dev</tt>.  If it
+      is 0x0100 (the device number of <tt class="filename">/dev/ram0</tt>)
+      or something equivalent, <tt class="code">handle_initrd()</tt> will change
+      directory to <tt class="filename">/old</tt> and return.  If it is
+      something else, <tt class="code">handle_initrd()</tt> will decode it, mount
+      it as root, mount initrd as <tt class="filename">/root/initrd</tt>,
+      and again start <tt class="filename">/sbin/init</tt>.  (if mounting as
+      <tt class="filename">/root/initrd</tt> fails, the block device is freed.)
+    </p><p>
+      Remember <tt class="code">handle_initrd()</tt> was called via
+      <tt class="code">load_initrd()</tt> from <tt class="code">prepare_namespace()</tt>,
+      and <tt class="code">prepare_namespace()</tt> ends by chrooting into the
+      current directory: <tt class="filename">rootfs:/old</tt>.
+    </p><p>
+      Note that <tt class="filename">rootfs:/old</tt> was move-mounted
+      from '/' after <tt class="filename">/linuxrc</tt> returned.
+      When <tt class="filename">/linuxrc</tt> started, the root was
+      initrd, but <tt class="filename">/linuxrc</tt> may have done a
+      <tt class="code">pivot_root()</tt>, replacing the root with a real root,
+      say <tt class="filename">/dev/hda1</tt>.
+    </p><p>
+      Thus:
+      </p><div class="itemizedlist"><ul type="disc"><li><p>
+             <tt class="filename">/linuxrc</tt> is started with initrd
+             mounted as root.
+         </p></li><li><p>
+             There is working memory management, processes, compiled
+             in drivers, and stdin/out/err are connected to a console,
+             if the relevant drivers are compiled in.
+         </p></li><li><p>
+             Devfs may be mounted on <tt class="filename">/dev</tt>.
+         </p></li><li><p>
+             <tt class="filename">/linuxrc</tt> can <tt class="code">pivot_root</tt>.
+         </p></li><li><p>
+             If you echo 0x0100 to
+             <tt class="filename">/proc/sys/kernel/real-root-dev</tt>,
+             the <tt class="code">pivot_root</tt> will remain in effect after
+             <tt class="filename">/linuxrc</tt> ends.
+         </p></li><li><p>
+             After <tt class="filename">/linuxrc</tt> returns,
+             <tt class="filename">/dev</tt> may be unmounted and replaced
+             with devfs.
+         </p></li></ul></div><p>
+    </p><p>
+      Thus a good strategy for <tt class="filename">/linuxrc</tt> is to
+      do as little as possible, and defer the real initialisation
+      to <tt class="filename">/sbin/init</tt> on the initrd; this
+      <tt class="filename">/sbin/init</tt> can then <tt class="code">pivot_root</tt>
+      into the real root device.
+      </p><pre class="programlisting">
+       #!/bin/dash
+       set -x
+       mount -nt proc proc /proc
+       # root=$(cat proc/sys/kernel/real-root-dev)
+       echo 256 &gt; proc/sys/kernel/real-root-dev
+       umount -n /proc
+      </pre><p>
+    </p></div><div class="simplesect" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2738608"></a>Kernel command line parameters</h3></div></div><div></div></div><p>
+      The kernel passes more information than just an initial file system
+      to the initrd or initramfs image; there also are the kernel boot
+      parameters.  The bootloader passes these to the kernel, and the kernel
+      in turn passes them on via <tt class="filename">/proc/cmdline</tt>.
+    </p><p>
+      An old version of these parameters is documented in the
+      <span class="citerefentry"><span class="refentrytitle">bootparam</span>(7)</span> manual page; more recent information is in the kernel
+      documentation file <i class="citetitle">kernel-parameters.txt</i>.
+      Mostly, these parameters are used to configure non-modular drivers,
+      and thus not very interesting to <span class="application">yaird</span>.
+      Then there are parameters such as <tt class="code">noapic</tt>, which are
+      interpreted by the kernel core and also irrelevant to
+      <span class="application">yaird</span>.
+      Finally there are a few parameters which are used by the kernel
+      to determine how to mount the root file system.
+    </p><p>
+      Whether the initial image should emulate these options or ignore them
+      is open to discussion; you can make a case that the flexibility these
+      options offer has become irrelevant now that initrd/initramfs offers
+      far more fine grained control over the way in which the system
+      is booted.
+      Support for these options is mostly a matter of tuning the
+      distribution specific templates, but it is possible that the
+      templates need an occassional hint from the planner.
+      To find out just how much "mostly" is, we'll try to implement
+      full support for these options and see where we run into
+      limitations.
+      An inventarisation of relevant options.
+      </p><div class="variablelist"><dl><dt><span class="term">
+           ide
+         </span></dt><dd><p>
+             These are options for the modular ide-core driver.
+             This could be supported by adding an attribute
+             "isIdeCore" to insmod actions, and expanding the ide
+             kernel options only for insmod actions where that
+             attribute is true.
+             It seems cleaner to support the options from
+             <tt class="filename">/etc/modprobe.conf</tt>.
+             Unsupported for now.
+           </p></dd><dt><span class="term">
+           init
+         </span></dt><dd><p>
+             The first program to be started on the definitive root device,
+             default <tt class="filename">/sbin/init</tt>.  Supported.
+           </p></dd><dt><span class="term">
+           ro
+         </span></dt><dd><p>
+             Mount the definitive root device read only,
+             so that it can be submitted to <span class="application">fsck</span>.
+             Supported; this is the default behaviour.
+           </p></dd><dt><span class="term">
+           rw
+         </span></dt><dd><p>
+             Three guesses.  Supported.
+           </p></dd><dt><span class="term">
+           resume, noresume
+         </span></dt><dd><p>
+             Which device (not) to use for software suspend.
+             To be done.
+           </p></dd><dt><span class="term">
+           root
+         </span></dt><dd><p>
+             The device to mount as root.  This is a nasty one:
+             the planner by default only creates device nodes
+             that are needed to mount the root device, and even
+             if you were to put hotplug on the inital image
+             to create all possible device nodes, there's still
+             the matter of putting support for the proper file system
+             on the initial image.
+             We could make an option to
+             <span class="application">yaird</span> to specify a list
+             of possible root devices and load the necessary
+             modules for all of them.
+             Unsupported until there's a clear need for it.
+           </p></dd><dt><span class="term">
+           rootflags
+         </span></dt><dd><p>
+             Flags to use while mounting root file system.
+             Implement together with root option.
+           </p></dd><dt><span class="term">
+           rootfstype
+         </span></dt><dd><p>
+             File system type for root file system.
+             Implement together with root option.
+           </p></dd><dt><span class="term">
+           nfsaddrs
+         </span></dt><dd><p>
+             For diskless booting.
+             Unclear whether we need this.  NFS booting is desirable,
+             but I guess that will mostly be done under control of
+             DHCP.  Unsupported for now.
+           </p></dd><dt><span class="term">
+           nfsroot
+         </span></dt><dd><p>
+             More diskless booting.
+             Unsupported for now.
+           </p></dd></dl></div><p>
+
+    </p></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="raid"></a>Supporting Raid Devices</h2></div></div><div></div></div><p>
+    This section discusses software raid devices from an initial boot
+    image perspective: how to get the root device up and running.
+    There are other aspects to consider, the bootloader for example:
+    if your root device is on a mirror for reliability, it would be
+    a disappointment if after the crash you still had a long downtime
+    because the MBR was only available on the crashed disk.  Then there's
+    the issue of managing raid devices in combination with hotplugging:
+    once the system is operational, how should the raid devices that
+    the initial image left untouched be brought online?
+  </p><p>
+    Raid devices are managed via ioctls (mostly; there is something
+    called "autorun" in the kernel)
+    The interface from userland is simple: mknod a block device file,
+    send an ioctl to it specifying the devnos of the underlying block
+    devices and whether you'd like mirroring or striping, then send
+    a final ioctl to activate the device.  This leaves the managing
+    application free to pick any unused device (minor) number and
+    has no assumptions about device file names.
+  </p><p>
+    Devices that take part in a raid set also have a "superblock",
+    a header at the end of the device that contains a uuid and indicates
+    how many drives and spares are supposed to take part in the raid set.
+    This can be used be the kernel to do consistency checking, it can also
+    be used by applications to scan for all disks belonging in a raid set,
+    even if one of the component drives is moved to another disk controller.
+  </p><p>
+    The fact that the superblock is at the end of a device has an obvious
+    advantage: if you somehow loose your raid software, the device
+    underlying a mirror can be mounted directly as a fallback measure.
+  </p><p>
+    If raid is compiled into the kernel rather than provided as a module,
+    the kernel uses superblocks at boot time to find raid sets and make
+    them available without user interaction.  In this case the filename of
+    the created blockdevice is hardcoded: <tt class="filename">/dev/md\d</tt>.
+    This feature is intended for machines with root on a raid device
+    that don't use an initial boot image.  This autorun feature is
+    also accessible via an ioctl, but it's not used in management
+    applications, since it won't work with an initial boot image and
+    it can be a nuisance if some daemon brought a raid set online just
+    after the administator took it off line for replacement.
+  </p><p>
+    Finally, by picking a different major device number for the raid device,
+    the raid device can be made partitionable without use of LVM.
+  </p><p>
+    There are at least three different raid management applications
+    for Linux: raidtools, the oldest; mdadm, more modern; and EVMS, a
+    suite of graphical and command line tools that manages not only raid
+    but also LVM, partitioning and file system formating.  We'll only
+    consider mdadm for now.  The use of mdadm is simple:
+  </p><p>
+    </p><div class="itemizedlist"><ul type="disc"><li><p>
+         There's an option to create a new device from components,
+         building the superblock.
+       </p></li><li><p>
+         Another option assembles a raid device from components,
+         assuming the superblocks are already available.
+       </p></li><li><p>
+         Optionally, a configuration file can be used, specifying which
+         components make up a device, whether a device file should
+         be created or it is assumed to exist, whether it's stripe or
+         mirror, and the uuid.  Also, a wildcard pattern can be given:
+         disks matching this pattern will be searched for superblocks.
+       </p></li><li><p>
+         Information given in the configuration file can be omitted
+         on the command line.  If there's a wildcard, you don't even
+         have to specify the component devices of the raid device.
+         A typical command is <tt class="code">mdadm --assemble /dev/md-root
+         auto=md uuid=...</tt>, which translates to "create
+         <tt class="filename">/dev/md-root</tt> with some unused minor number,
+         and put the components with matching uuid in it."
+       </p></li></ul></div><p>
+  </p><p>
+    So far, raid devices look fairly simple to use; the complications
+    arise when you have to play nicely with all the other software
+    on the box.  It turns out there are quite a lot of packages that
+    interact with raid devices:
+  </p><p>
+    </p><div class="itemizedlist"><ul type="disc"><li><p>
+         When the md module is loaded, it registers 256 block devices
+         with <span class="application">devfs</span>.  These devices
+         are not actually allocated, they're just names set up to
+         allocate the underlying device when opened.  These names in
+         <span class="application">devfs</span> have no counterpart in sysfs.
+       </p></li><li><p>
+         When the LVM <span class="application">vgchange</span> is started,
+         it opens all md devices to scan for headers, only to find the
+         raid devices have no underlying components and will return
+         no data.  In this process, all these stillborn md devices get
+         registered with sysfs.
+       </p></li><li><p>
+         When <span class="application">udevstart</span> is executed
+         at boot time, it walks over the sysfs tree and lets
+         <span class="application">udev</span> create block devices files for
+         every block device it finds in sysfs.  The name and permissions
+         of the created file are configurable, and there is a hook to
+         initialise SELinux access controls.
+       </p></li><li><p>
+         When <span class="application">mdadm</span> is invoked with the auto
+         option, it will create a block device file with an unused
+         device number and put the requested raid volume under it.
+         The created device file is owned by whoever executed the
+         <span class="application">mdadm</span> command, permissions are 0600
+         and there are no hooks for SELinux.
+       </p></li><li><p>
+         When the Debian installer builds a system with LVM and raid, the
+         raid volumes have names such as <tt class="filename">/dev/md0</tt>,
+         where there is an assumption about the device minor number in
+         the name of the file.
+       </p></li></ul></div><p>
+  </p><p>
+    For the current Debian mkinitrd, this all works together in
+    a wonderful manner: devfs creates file names for raid devices,
+    LVM scans them with as side effect entering the devices in sysfs,
+    and after pivotroot <span class="application">udevstart</span> triggers
+    udev into creating block device files with proper permissions and
+    SELinux hooks.  Later in the processing of <tt class="filename">rcS.d</tt>,
+    <span class="application">mdadm</span> will put a raid device under the
+    created special file.  Convoluted but correct, except for the fact
+    that out of 256 generated raid device files, up to 255 are unused.
+  </p><p>
+    In <span class="application">yaird</span>, we do not use devfs.
+    Instead, we do a <span class="application">mknod</span> before the
+    <span class="application">mdadm</span>, taking care to use the same
+    device number that's in use in the running kernel.  We expect
+    <tt class="filename">mdadm.conf</tt> to contain an <tt class="code">auto=md</tt>
+    option for any raid device files that need to be created.
+    This approach should work regardless of whether the fstab uses
+    <tt class="filename">/dev/md\d</tt> or a device number independent name.
+  </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="input"></a>Supporting Input Devices</h2></div></div><div></div></div><p>
+    A working console and keyboard during the initial boot image execution
+    is needed to enter a password for encrypted file systems; it also
+    helps while debugging.  This section discusses the kernel input
+    layer and how it can be supported during image generation.
+  </p><p>
+    The console is a designated terminal, where kernel output goes, and that
+    is the initial I/O device for <tt class="filename">/sbin/init</tt>.  Like all
+    terminal devices, it provides a number of functions: you can read
+    and write to it, plus it has a number of <tt class="code">ioctl()</tt>
+    functions to manage line buffering, interrupt characters and
+    baudrate or parity where applicable.
+  </p><p>
+    Terminals come in different types: it can be a VT100 or terminal
+    emulator connected via an RS232 cable, or it can be a combination
+    of a CRT and a keyboard.  The keyboard can be connected via
+    USB or it can talk a byte oriented protocol via a legacy UART
+    chip.
+  </p><p>
+    The CRT is managed in two layers.  The top layer, "virtual
+    terminal", manages a two dimensional array describing which letter
+    should go in which position of the screen.  In fact, there are a
+    number of different arrays, and which one is actually visible on
+    the screen is selected by a keyboard combination.
+    Below the virtual terminals is a layer that actually places the
+    letters on the screen.  This can be done a letter at a time,
+    using a VGA interface, or the letters can be painted pixel by
+    pixel, using a frame buffer.
+  </p><p>
+    Below the terminal concept we find the input layer.  This provides a
+    unified interface to the various user input devices: mouse, keyboard,
+    PC speaker, joystick, tablet.  These input devices not only
+    generate data, they can also receive input from the computer.  As
+    an example, the keyboard needs computer input to operate the NUM
+    LOCK indicator.  Hardware devices such as keyboards register
+    themselves with the input layer, describing their capabilities
+    (I can send relative position, have two buttons and no LEDs),
+    and the input layer assigns a handler to the hardware device.
+    The handler presents the device to upper layers, either as a char
+    special file or as the input part of a terminal device.
+    This is not a one-to-one mapping: every mouse gets its own
+    handler, but keyboard and PC speaker share a handler, so it looks
+    to userland like you have a keyboard that can do "beep".
+  </p><p>
+    In addition to handlers for specific type of upper layers (mouse,
+    joystick, touch screen) there is a generic handler that provides a
+    character device file such as <tt class="filename">/dev/input/event0</tt>
+    for every input device detected; input events are presented through
+    these devices in a unified format.  The input layer generates
+    hotplug events for these generic event handlers; hotplug uses
+    <tt class="filename">modules.inputmap</tt> to load a module containing a
+    suitable upper layer event handler.  The keyboard handler is a special
+    case that does not occur in this map, so for image generation there
+    is little to be learned from hotplug input support.
+  </p><p>
+    To guarantee a working console, <span class="application">yaird</span>
+    should examine <tt class="filename">/dev/console</tt>, determine
+    whether it's RS232 or hardware directly connected to the computer,
+    and then load modules for either serial port, or for virtual
+    terminals, the input layer and any hardware underlying it.
+    Unfortunately, <tt class="filename">/dev/console</tt> does not give
+    a hint what is below the terminal interface, and unfortunately,
+    lots of input devices are legacy hardware that is hard to probe
+    and only sketchily described by sysfs in kernel 2.6.10.
+  </p><p>
+    This means that a guarantee for a working console cannot be made,
+    which is why distribution kernels come with components such as the
+    keyboard and serial port driver compiled into the kernel.  We can
+    do something else though: provide modules for keyboard devices
+    provided the kernel provides correct information.  That covers the
+    case of USB keyboards, and that's something that's not compiled
+    into distribution kernels, so that the administrator has to add
+    modules explictly in order to get the keyboard working in
+    the initial boot image.
+  </p><p>
+    Lets examine the sources of information we have to find which input
+    hardware we have to support.
+    </p><div class="itemizedlist"><ul type="disc"><li><p>
+         In <tt class="filename">/sys/class/input</tt>, all input devices
+         are enumerated.  Mostly, these only contain a
+         <tt class="filename">dev</tt> file containing major/minor number,
+         but USB devices also have a <tt class="filename">device</tt>
+         symlink into <tt class="filename">/sys/devices</tt> identifying
+         the underlying hardware.
+       </p></li><li><p>
+         In <tt class="filename">/boot/menu/grub.lst</tt>, kernel options
+         can be defined that determine whether to use a serial line as
+         console and whether to use a frame buffer.  The consequence
+         is that it is fundamentally impossible to determine by looking
+         at the hardware alone what's needed to get an image that will
+         boot without problems.  This probably means we'll have to consider
+         supplying some modules in the image that will only get loaded
+         depending on kernel options.
+       </p></li><li><p>
+         The file <tt class="filename">/proc/bus/input/devices</tt> gives
+         a formatted overview of all known input devices; entries look
+         like this:
+         </p><pre class="programlisting">
+           I: Bus=0003 Vendor=413c Product=2003 Version=0100
+           N: Name="DELL DELL USB Keyboard"
+           P: Phys=usb-0000:00:1d.7-4.1/input1
+           H: Handlers=kbd event2
+           B: EV=100003
+           B: KEY=7f f0000 0 3878 d801d101 1e0000 0 0 0
+         </pre><p>
+         Here the "I" line shows identification information passed to
+         the input layer by the hardware driver that is used to look
+         up the appropiate handler.  "N" is a printable name provided
+         by the hardware driver.  "P" is a hint at location in a bus
+         of the device; note how this line is completely unrelated to
+         the location of the hardware in
+         <tt class="filename">/sys/devices</tt>.
+         The H (Handlers) line is obvious; The B lines specify
+         capabilities of the device, plus extra information for each
+         capability.  Known capabilities include:
+         </p><div class="informaltable"><table border="1"><colgroup><col /><col /></colgroup><thead><tr><th align="left">Capability</th><th align="left">Description</th></tr></thead><tbody><tr><td align="left">SYN</td><td align="left">Input event is completed</td></tr><tr><td align="left">KEY</td><td align="left">Key press/release event</td></tr><tr><td align="left">REL</td><td align="left">Relative measure, as in mouse movement</td></tr><tr><td align="left">ABS</td><td align="left">Absolute position, as in graphics
+                 tablet</td></tr><tr><td align="left">MSC</td><td align="left">Miscelanious</td></tr><tr><td align="left">SND</td><td align="left">Beep</td></tr><tr><td align="left">REP</td><td align="left">Set hardware repeat</td></tr><tr><td align="left">FF</td><td align="left">Don't know</td></tr><tr><td align="left">PWR</td><td align="left">Power event: on/off switch pressed.</td></tr><tr><td align="left">FF_STATUS</td><td align="left">Don't know.</td></tr></tbody></table></div><p>
+       </p></li></ul></div><p>
+  </p><p>
+    Finally, let's consider some kernel configuration defines, the
+    corresponding modules and their function.  This could be used as a
+    start to check whether all components required to make an
+    operational console are available on the generated image:
+    </p><div class="informaltable"><table border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th align="left">Define</th><th align="left">Module</th><th align="left">Description</th></tr></thead><tbody valign="top"><tr><td align="left">VT</td><td align="left">(bool)</td><td align="left">
+             Support multiple virtual terminals, irrespective of what
+             hardware is used to display letters from the virtual
+             terminal on the CRT.
+           </td></tr><tr><td align="left">VT_CONSOLE</td><td align="left">(bool)</td><td align="left">
+             Make the VT a candidate for console output.  The alternative
+             is a serial line to a VT100 or terminal emulator
+           </td></tr><tr><td align="left">VGA_CONSOLE</td><td align="left">(bool)</td><td align="left">
+             Display a terminal on CRT using the VGA interface.
+           </td></tr><tr><td align="left">FRAMEBUFFER_CONSOLE</td><td align="left">fbcon</td><td align="left">
+             Display a terminal on a framebuffer, painting letters a
+             pixel at a time.  This has to know about fonts.
+           </td></tr><tr><td align="left">FB_VESA</td><td align="left">vesafb</td><td align="left">
+             Implement a framebuffer based on VESA (a common standard
+             for PC graphic cards), a place where an X server or
+             the framebuffer console can write pixels to be displayed
+             on CRT.
+             There are many different framebuffer modules that
+             optimise for different graphics cards.
+             Note that while vesafb and other drivers such as intelfb
+             can be built as a module, they only function correctly
+             when built into the kernel.  Most framebuffer modules
+             depend on three other modules to function correctly:
+             cfbfillrect, cfbcopyarea, cfbimgblt.
+           </td></tr><tr><td align="left">ATKBD</td><td align="left">atkbd</td><td align="left">
+             Interpret input from a standard AT or PS/2 keyboard.
+             Other keyboards use other byte codes, see for example
+             the Acorn keyboard (rpckbd).
+           </td></tr><tr><td align="left">SERIO</td><td align="left">serio</td><td align="left">
+             Module that manages a stream of bytes from and to an IO port.
+             It includes a kernel thread (kseriod) that handles the queue
+             needed to talk to slow ports.  It is normally used for
+             dedicated IO ports talking to PS/2 mouse and keyboard,
+             but can also be interfaced to serial ports (COM1, COM2).
+             The atkbd driver uses a serio driver to communicate with
+             the keyboard.
+           </td></tr><tr><td align="left">SERIO_I8042</td><td align="left">i8042</td><td align="left">
+             Implement a serio stream on top of the i8042 chip, the chip
+             that connects the standard AT keyboard and PS/2 mouse to
+             the computer.
+             This is legacy hardware: it's not connected via PCI but
+             directly to the 'platform bus'.
+             When a chip such as i8042 that implements
+             serio is detected, it registers itself with the input
+             layer.  The input layer then lets drivers that use serio
+             (such as atkbd and psmouse) probe whether a known device
+             is connected via the chip; if such a device is found,
+             it is registered as a new input device.
+           </td></tr><tr><td align="left">SERIAL_8250</td><td align="left">serial</td><td align="left">
+             Support for serial ports (COM1, COM2) on PC hardware.
+             Lots of other configuration options exist to support
+             multiple cards and fiddle with interrupts.
+             If compiled in rather than modular, a further option,
+             SERIAL_8250_CONSOLE, allows using the serial port as a
+             console.
+           </td></tr><tr><td align="left">USB_HID</td><td align="left">usbhid</td><td align="left">
+             Driver for USB keyboards and mice.
+             Another define, USB_HIDINPUT, needs to be true for
+             these devices to actually work.
+           </td></tr><tr><td align="left">USB_KBD</td><td align="left">usbkbd</td><td align="left">
+             Severely limited form of USB keyboard; uses the "boot
+             protocol".  This conflicts with the complete driver.
+           </td></tr></tbody></table></div><p>
+  </p><p>
+    The following figure gives an example of how the various modules 
+    can fit together.
+  </p><div class="figure"><a id="console-module-flow"></a><p class="title"><b>Figure 1. 
+      Module relation for common console setup
+    </b></p><div class="mediaobject"><img src="figures/console.png" alt="Module relation for common console setup" /></div></div><p>
+    In practical terms, a first step toward a more robust boot image
+    is to support new keyboard types, such as USB keyboards.
+    The following algorithm should do that.
+
+    </p><div class="orderedlist"><ol type="1"><li><p>
+         Interpret <tt class="filename">/proc/bus/input/devices</tt>.
+       </p></li><li><p>
+         Look for devices that have handler kbd <span class="emphasis"><em>and</em></span>
+         that have buttons.  Mice and the PC speaker don't match that
+         criterium, keyboards do.
+       </p></li><li><p>
+         You could interpret the name field of such devices if you're
+         interested in supporting legacy keyboards.
+       </p></li><li><p>
+         The devices that have handler 'kbd' also have a handler 'event\d',
+         where input is presented in a generalised event format;
+         look up this device in /sys/class/input/event\d/.
+       </p></li><li><p>
+         If it's got a device symlink, load the hardware drivers for that
+         hardware device (most likely it's usbhid plus a usb core driver).
+       </p></li><li><p>
+         Don't bother with a mknod, the input is handled via
+         <tt class="filename">/dev/console</tt>.
+       </p></li><li><p>
+         Otherwise it's presumable a legacy device; you could check for
+         the existence of
+         <tt class="filename">/sys/devices/platform/i8042/serio\d/</tt>,
+         or you could just assume the appropriate driver to be compiled in.
+       </p></li><li><p>
+         Implement support for
+         <tt class="filename">/etc/hotplug/blacklist</tt>,
+         since some USB keyboards publish two interfaces (full HID
+         and the limited boot protocol), the input layer makes both
+         visible in <tt class="filename">/proc/bus/input/devices</tt> and
+         the corresponding modules are mutually conflicting.
+         The blacklist is used to filter out one of these modules.
+       </p></li></ol></div><p>
+  </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="shlibs"></a>Supporting Shared Libraries</h2></div></div><div></div></div><p>
+    When an executable is added to the image, we want any required shared
+    libraries to be added automatically.  The <tt class="code">SharedLibraries</tt>
+    module determines which files are required.  This section discusses
+    the features of kernel and compiler we need to be aware of in order
+    to do this reliably.
+  </p><p>
+    Linux executables today are in ELF format; it is defined in
+    <a href="http://www.linuxbase.org/spec/book/ELF-generic/ELF-generic.html" target="_top">
+      <i class="citetitle">
+       Generic ELF Specification ELFVERSION</i></a>,
+    part of the Linux Standard Base.  This is based on part of the System
+    V ABI: Tool Interface Standard (TIS), Executable and Linking Format
+    (ELF) Sepcification
+  </p><p>
+    ELF has consequences in different parts of the system: in
+    the link-editor, that needs to merge ELF object files into ELF
+    executables; in the kernel (<tt class="filename">fs/binfmt_elf.c</tt>),
+    that has to place the executable in RAM and transfer control to it,
+    and in the runtime loader, that is invoked when starting the
+    application to load the necessary shared libraries into RAM.
+    The idea is as follows.
+  </p><div class="itemizedlist"><ul type="disc"><li><p>
+       Executables are in ELF format, with a type of either
+       <tt class="code">ET_EXEC</tt> (executable) or <tt class="code">ET_DYN</tt> (shared
+       library; yes, you can execute those.)  There are other types of
+       ELF file (core files for example) but you can't execute them.
+      </p></li><li><p>
+       These files contain two kind of headers: program headers and
+       section headers.  Program headers define segments of the file that
+       the kernel should store consequetively in RAM; section headers define
+       parts of the file that should be treated by the link editor
+       as a single unit.  Program headers normally point to a group
+       of adjacent sections.
+      </p></li><li><p>
+       The program may be statically linked or dynamically (with shared
+       libraries).
+       If it's statically linked, the kernel loads relevant segments,
+       then transfers control to main() in userland.
+      </p></li><li><p>
+       If it's dynamically linked, one of the program headers has type
+       <tt class="code">PT_INTERP</tt>.  It points to a segment that contains
+       the name of a (static) executable; this executable is loaded in
+       RAM together with the segments of the dynamic executable.
+      </p></li><li><p>
+       The kernel then transfers control to the userland
+       interpreter, passing program headers and related info in a
+       fourth argument to <tt class="code">main()</tt>, after <tt class="code">envp</tt>.
+      </p></li><li><p>
+       There's one interesting twist: one of the segments loaded
+       into RAM (<tt class="filename">linux-gate.so</tt>) does not
+       come from the executable, but is a piece of kernel mapped
+       into user space.  It contains a subroutine that the kernel
+       provides to do a system call; the idea is that this way,
+       the C library does not have to know which calling convention
+       for system calls is supported by the kernel and optimal for
+       the current hardware.  The link editor knows nothing about
+       this, only the interpreter knows that the kernel can pass the
+       address of this subroutine together with the program headers.
+       <sup>[<a id="id2742268" href="#ftn.id2742268">7</a>]</sup>
+      </p></li><li><p>
+       The interpreter interprets the <tt class="code">.dynamic</tt> section of
+       the dynamic executable.  This is a table containing various types
+       of info; if the type is <tt class="code">DT_NEEDED</tt>, the info is the
+       name of a shared library that is needed to run the executable.
+       Normally, it's the basename.
+      </p></li><li><p>
+       The interpreter searches <tt class="code">LD_LIBARY_PATH</tt> for the
+       library and loads the first working version it finds, using a
+       breath-first search.  Once everything is loaded, the interpreter
+       hands over control to main in the executable.
+      </p></li><li><p>
+       Except that that's not how it really works: the path that glibc
+       uses depends on whether threads are supported, and klibc can
+       function as a <tt class="code">PT_INTERP</tt> but will not load additional
+       libraries.
+      </p></li></ul></div><p>
+    The <span class="application">ldd</span> command finds the pathnames
+    of shared libraries used by an executable.  This works
+    <span class="emphasis"><em>only</em></span> for glibc: it invokes the interpreter
+    with the executable as argument plus an environment variable that
+    tells it to print the pathnames rather than load them.  For other
+    C libraries, there's no guaranteed correct way to find the path of
+    shared libraries.
+  </p><p>
+    Thus, to figure out what goes on the initial ram image, first try
+    <span class="application">ldd</span>.  If that gives an answer, good.
+    Otherwise, use a helper program to find <tt class="code">PT_INTERP</tt> and
+    <tt class="code">DT_NEEDED</tt>.  If there's only <tt class="code">PT_INTERP</tt>, good,
+    add it to the image.  If there are <tt class="code">DT_NEEDED</tt> libraries
+    as well, and they have relative rather than absolute pathnames,
+    we can't determine the full path, so don't generate an image.
+  </p><p>
+    There are a number of options to build a helper to extract the relevant
+    information from the executable:
+    </p><div class="itemizedlist"><ul type="disc"><li><p>
+         Build it in perl.  The problem here is that unpacking 64-bit
+         integers is an optional part of the language.
+       </p></li><li><p>
+         Build a wrapper around <span class="application">objdump</span> or
+         <span class="application">readelf</span>.  The drawback is that
+         there programs are not part of a minimal Linux distribution:
+         depending on them in <span class="application">yaird</span> would
+         increase the footprint.
+       </p></li><li><p>
+         Building a C program using libbdf.  This is a library
+         intended to simplify working with object files.  Drawbacks
+         are that it adds complexity that is not necessary in our
+         context since it supports multiple executable formats;
+         furthermore, at least in Debian it is treated as internal
+         to the gcc tool chain, complicating packaging the tool.
+       </p></li><li><p>
+         Building a C program based on <tt class="filename">elf.h</tt>.
+         This turns out to be easy to do.
+       </p></li></ul></div><p>
+  </p><p>
+    <span class="application">Yaird</span> uses the last appraoch listed.
+  </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="security"></a>Security</h2></div></div><div></div></div><p>
+    This section discusses security: avoiding downtime, avoiding revealing
+    sensitive information, avoiding unwanted modifications to the data;
+    either through accident or malice.
+    A good introduction to secure programming can be found in 
+    <a href="http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/" target="_top">
+      <i class="citetitle">
+       Secure Programming for Linux and Unix HOWTO</i></a>.
+  </p><p>
+    For <span class="application">yaird</span>, security is not very
+    complicated: although it runs with root privileges, the program is
+    not setuid, and all external input comes from files or programs
+    installed by the admnistrator, so our main focus is on avoiding
+    downtime caused by ignored error codes.
+    A full blown risk assessment would be overkill, so we'll just use
+    the HOWTO as a checklist to verify that the basic precautions are
+    in place.
+  </p><p>
+    </p><div class="informaltable"><table border="1"><colgroup><col /><col /><col /></colgroup><thead><tr><th align="left">Group</th><th align="left">Mitigation</th><th align="left">Status</th></tr></thead><tbody valign="top"><tr><td align="left">Bad input</td><td align="left">Verify command line</td><td align="left">
+             Yes.
+           </td></tr><tr><td align="left">Bad input</td><td align="left">Verify and clean up environment</td><td align="left">
+             Complete environment is reset at start of program.
+           </td></tr><tr><td align="left">Bad input</td><td align="left">Avoid assumptions about file descriptors</td><td align="left">
+             Handled by perl.
+           </td></tr><tr><td align="left">Bad input</td><td align="left">Verify file names</td><td align="left">
+             Perl taint check shows filenames are verified for
+             absence of odd characters before passing to
+             subprocesses.
+             TODO: examine UTF-8 impact.
+           </td></tr><tr><td align="left">Bad input</td><td align="left">Verify file content</td><td align="left">
+             File contents in sysfs verified.
+             Fstab entries properly quoted.
+             TODO: check for spaces in names of LVM volume or of
+             modules; could end up in generated /sbin/init.
+           </td></tr><tr><td align="left">Bad input</td><td align="left">Verify locale settings</td><td align="left">
+             All locale related environment variables are wiped at
+             program startup.
+           </td></tr><tr><td align="left">Bad input</td><td align="left">Verify character encoding</td><td align="left">
+             All IO is byte oriented.
+           </td></tr><tr><td align="left">Bad input</td><td align="left">Buffer overflow</td><td align="left">
+             In perl?
+           </td></tr><tr><td align="left">Program structure</td><td align="left">Separate data and control</td><td align="left">
+             Under this heading, the HOWTO discusses the dangers of
+             auto-executing macros in data files.  The closest thing we
+             have to a data file are the templates that tune the image
+             to the distribution.  We use a templating language that
+             does not allow code embedding, and the image generation
+             module does not make it possible for template output to
+             end up outside of the image.  Conclusion: broken templates
+             can produce a broken image, but cannot affect the running
+             system.
+           </td></tr><tr><td align="left">Program structure</td><td align="left">Minimize privileges</td><td align="left">
+             The user is supposed to bring his own root privileges to
+             the party, not much to be done here.  A related issue
+             is the minimizing of privileges in the system that is
+             started with the generated image.  This would include
+             starting SELinux at the earliest possible moment.
+             At least in Fedora, that earliest possible moment is
+             in <tt class="filename">rc.sysinit</tt>, well past the moment
+             where the initial boot image hands over control to the newly
+             mount root file system.  No <span class="application">yaird</span>
+             support needed.
+           </td></tr><tr><td align="left">Program structure</td><td align="left">Safe defaults</td><td align="left">
+             Configuration only specifies sources of information,
+             like /etc/hotplug, not much can go wrong here.
+           </td></tr><tr><td align="left">Program structure</td><td align="left">Safe configuration</td><td align="left">
+             No configuration file is used yet, so it's not read from
+             current directory either.
+           </td></tr><tr><td align="left">Program structure</td><td align="left">Fail safe</td><td align="left">
+             Planning and writing the image is separated;
+             writing only starts after planning is succesfully completed.
+             Todo: consider backout on write failure.
+           </td></tr><tr><td align="left">Program structure</td><td align="left">Avoid race conditions</td><td align="left">
+             Temporary files and directories are created
+             with the <tt class="code">File::Temp</tt> module, which is
+             resistant to name guessing attacks.
+             The completed image is installed with <tt class="code">rename</tt>
+             rather than <tt class="code">link</tt>; if an existing file is
+             overwritten, this guarantees there's no race where the
+             old image has been deleted bu the new one is not yet in
+             place.  (Note that there is no option in place yet which
+             allows overwriting of existing files.)
+             To do: examine File::Temp safe_level=HIGH.
+           </td></tr><tr><td align="left">Underlying resources</td><td align="left">Handle meta characters</td><td align="left">
+             Protection against terminal escape sequences in output
+             is not yet in place.
+           </td></tr><tr><td align="left">Underlying resources</td><td align="left">Check system call results</td><td align="left">
+             Yes.
+           </td></tr><tr><td align="left">Language specific</td><td align="left">Verify perl behaviour with taint.</td><td align="left">
+             Yes.
+           </td></tr><tr><td align="left">Language specific</td><td align="left">Avoid perl open magic with 3rd argument.</td><td align="left">
+             Yes.
+           </td></tr></tbody></table></div><p>
+  </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="tools"></a>Tool Chain</h2></div></div><div></div></div><p>
+    This section discusses which tools are used in implementing
+    <span class="application">yaird</span> and why.
+  </p><p>
+    The application is built as a collection of perl modules.
+    The use of a scripting language makes consistent error checking
+    and building sane data structures a lot easier than shell
+    scripting; using perl rather than python is mainly because in
+    Debian perl has 'required' status while python is only 'standard'.
+    The code follows some conventions:
+  </p><p>
+    </p><div class="itemizedlist"><ul type="disc"><li><p>
+         Where there are multiple items of a kind, say fstab entries,
+         the perl module implements a class for individual items.
+         All classes share a common base class, <tt class="code">Obj</tt>,
+         that handles constructor argument validation and that offers
+         a place to plug in debugging code.
+       </p></li><li><p>
+         Object attributes are used via accessor methods to catch
+         typos in attribute names.
+       </p></li><li><p>
+         Objects have a <tt class="code">string</tt> method, that returns
+         a string version of the object.  Binary data is not
+         guaranteed to be absent from the string version.
+       </p></li><li><p>
+         Where there are multiple items of a kind, say fstab entries,
+         the collection is implemented as a module that is not a
+         class.  There is a function <tt class="code">all</tt> that returns a
+         list of all known items, and functions <tt class="code">findByXxx</tt>
+         to retrieve an item where the Xxx attribute has a given
+         value.  There is an <tt class="code">init</tt> function that
+         initializes the collection; this is called automatically
+         upon first invocation of <tt class="code">all</tt> or
+         <tt class="code">findByXxx</tt>.
+         Collections may have convenience functions
+         <tt class="code">findXxxByYyy</tt>: return attribute Xxx, given a
+         value for attribute Yyy.
+       </p></li></ul></div><p>
+  </p><p>
+    The generated initrd image needs a command interpreter;
+    the choice of command interpreter is exclusively determined
+    by the image generation template.
+    At this point, both Debian and Fedora templates use the
+    <span class="application">dash</span> shell, for historical reasons only.
+    Presumably <span class="application">busybox</span> could be used to build a
+    smaller image.  However, support for initramfs requires a complicated
+    construction involving a combination of mount, chroot and chdir;
+    to do that reliably, <span class="application">nash</span> as used in Fedora
+    seems a more attractive option.
+  </p><p>
+    Documentation is in docbook format, since it's widely supported,
+    supports numerous output formats, has better separation between
+    content and layout than texinfo, and provides better guarantees
+    against malformed HTML than texinfo.
+  </p><div class="simplesect" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2743831"></a>Autoconf</h3></div></div><div></div></div><p>
+      GNU automake is used to build and install the application,
+      where 'building' is perhaps too big a word adding the location
+      of the underlying modules to the wrapper script.
+      The reasons for using automake: it provides packagers with a
+      well known mechanism for changing installation directories,
+      and it makes it easy for developers to produce a cruft-free
+      and reproducible tarball based on the tree extracted from
+      version control.
+    </p></div><div class="simplesect" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2743849"></a>C Library</h3></div></div><div></div></div><p>
+      The standard C library under linux is glibc.  This is big:
+      1.2Mb, where an alternative implementation, klibc, is only 28Kb.
+      The reason klibc can be so much smaller than glibc is that a
+      lot of features of glibc, like NIS support, are not relevant for
+      applications that need to do basic stuff like loading an IDE driver.
+    </p><p>
+      There are other small libc implementations: in the embedded world,
+      dietlibc and uClibc are popular.  However, klibc was specifically
+      developed to support the initial image: it's intended to be included
+      with the mainline kernel and allow moving a lot of startup magic out
+      of the kernel into the initial image.  See 
+      <a href="http://marc.theaimsgroup.com/?m=101070502919547" target="_top">
+       <i class="citetitle">
+         LKML: [RFC] klibc requirements, round 2</i></a>
+      for requirements on klibc; the
+      <a href="http://www.zytor.com/mailman/listinfo/klibc" target="_top">
+       <i class="citetitle">mailing list</i></a> is the most current
+      source of information.
+    </p><p>
+      Recent versions of klibc (1.0 and later) include a wrapper around
+      gcc, named klcc, that will compile a program with klibc.  This means
+      <span class="application">yaird</span> does not need to include klibc,
+      but can easily be configured to use klibc rather than glibc.
+      Of course this will only pay off if <span class="emphasis"><em>every</em></span>
+      executable on the initial image uses klibc.
+    </p><p>
+      <span class="application">Yaird</span> does not have to be extended in
+      order to support klibc, but it is necessary to avoid assumptions
+      about which shared libraries are used.  This is discussed in 
+      <a href="#shlibs" title="Supporting Shared Libraries">the section called “Supporting Shared Libraries”</a>.
+    </p></div><div class="simplesect" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2743930"></a>Template Processing</h3></div></div><div></div></div><p>
+      This section discusses the templates used to transform
+      high-level actions to lines of script in the generated image.
+      These templates are intended to cope with small differences
+      between distributions: a shell that is named
+      <span class="application">dash</span> in Debian and
+      <span class="application">ash</span> in Fedora for example.
+      By processing the output of <span class="application">yaird</span>
+      through a template, we can confine the tuning of
+      <span class="application">yaird</span> for a specific distribution
+      to the template, without having to touch the core code.
+    </p><p>
+      One important function of a template library is to enforce
+      a clear separation between progam logic and output formatting:
+      there should be no way to put perl fragments inside a template.
+      See <a href="http://www.stringtemplate.org/" target="_top">StringTemplate</a>
+      for a discussion of what is needed in a templating system, plus
+      a Java implementation.
+    </p><p>
+      Lets consider a number of possible templating solutions:
+      </p><div class="itemizedlist"><ul type="disc"><li><p>
+           <a href="http://www.template-toolkit.org/" target="_top">
+            Template Toolkit</a>:
+           widely used, not in perl core distribution, does not
+           prevent mixing of code and templates.
+         </p></li><li><p>
+           <a href="http://search.cpan.org/dist/Text-Template/lib/Text/Template.pm" target="_top">
+             Text::Template</a>:
+           not in perl core distribution, does not
+           prevent mixing of code and templates.
+         </p></li><li><p>
+           Some XSLT processor.  Not in core distribution,
+           more suitable for file-to-file transformations
+           than for expanding in-process data; overkill.
+         </p></li><li><p>
+           <a href="http://search.cpan.org/~samtregar/HTML-Template-2.7/Template.pm" target="_top">
+             HTML-Template</a>:
+           not in perl core distribution,
+           prevents mixing of code and templates,
+           simple, no dependencies, dual GPL/Artistic license.
+           Available in Debian as
+           <span class="application">libhtml-template-perl</span>,
+           in Fedora 2 as perl-HTML-Template, dropped from Fedora 3,
+           but available via
+           <a href="http://download.fedora.redhat.com/pub/fedora/linux/extras/" target="_top">
+             Fedora Extras</a>.
+         </p></li><li><p>
+           A home grown templating system: a simple system such as the
+           HTML-Template module is over 100Kb.  We can cut down on that
+           by dropping functions we don't immediately need, but the effort
+           to get a tested and documented implementation remains substantial.
+         </p></li></ul></div><p>
+    </p><p>
+      The HTML-Template approach is the best match for our
+      requirements, so used in <span class="application">yaird</span>.
+    </p></div></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="authors-chap"></a>Authors</h2></div></div><div></div></div><p>
+   This is a place holder section.
+   <span class="application">Yaird</span> was written by ...
+   website here ... comments to ... bug reports ...
+  </p></div><div class="section" lang="en" xml:lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="license-chapter"></a>License</h2></div></div><div></div></div><p>
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the <i class="citetitle">GNU General Public
+    License</i> as published by the Free Software Foundation;
+    either version 2 of the License, or (at your option) any later
+    version.
+  </p><p>
+    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
+    <i class="citetitle">GNU General Public License</i> for more details.
+  </p><p>
+    You should have received a copy of the <i class="citetitle">GNU General Public
+    License</i> along with this program; you may also obtain
+    a copy of the <i class="citetitle">GNU General Public License</i>
+    from the Free Software Foundation by visiting <a href="http://www.fsf.org" target="_top">their Web site</a> or by writing to
+    </p><div class="address"><p><br />
+      Free Software Foundation, Inc.<br />
+      <span class="street">59 Temple Place</span> - Suite 330<br />
+      <span class="city">Boston</span>, <span class="state">MA</span> <span class="postcode">02111-1307</span><br />
+      <span class="country">USA</span><br />
+    </p></div><p>
+  </p><div class="simplesect" lang="en" xml:lang="en"><div class="titlepage"><div><div><h3 class="title"><a id="id2744626"></a>Klibc code</h3></div></div><div></div></div><p>
+      Yaird contains code based on klibc; this code is made available
+      by the author under the following licence.  The relevant source
+      files have this copyright notice included.
+      </p><pre class="programlisting">
+/* ----------------------------------------------------------------------- *
+ *   
+ *   Copyright 2004 H. Peter Anvin - All Rights Reserved
+ *
+ *   Permission is hereby granted, free of charge, to any person
+ *   obtaining a copy of this software and associated documentation
+ *   files (the "Software"), to deal in the Software without
+ *   restriction, including without limitation the rights to use,
+ *   copy, modify, merge, publish, distribute, sublicense, and/or
+ *   sell copies of the Software, and to permit persons to whom
+ *   the Software is furnished to do so, subject to the following
+ *   conditions:
+ *   
+ *   The above copyright notice and this permission notice shall
+ *   be included in all copies or substantial portions of the Software.
+ *   
+ *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *   OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * ----------------------------------------------------------------------- */
+      </pre><p>
+    </p></div></div><div class="footnotes"><br /><hr width="100" align="left" /><div class="footnote"><p><sup>[<a id="ftn.id2667183" href="#id2667183">1</a>] </sup>
+       Well, not really.  I started this thingy to show off a small
+       algorithm to find required modules based on sysfs information.
+       To make that a credible demonstration, the small algorithm
+       turned out to need a lot of scaffolding to turn it into a
+       working program ...
+      </p></div><div class="footnote"><p><sup>[<a id="ftn.id2735423" href="#id2735423">2</a>] </sup>
+               An alternative and equally interesting exercise would be
+               an attempt to generate a universal initrd that could be
+               distributed together with the kernel.  Such an image
+               would most likely be based on udev/hotplug.
+             </p></div><div class="footnote"><p><sup>[<a id="ftn.id2735548" href="#id2735548">3</a>] </sup>
+             Except where the distribution depends on it;
+             there are some issues with mdadm in Debian.
+           </p></div><div class="footnote"><p><sup>[<a id="ftn.id2736265" href="#id2736265">4</a>] </sup>
+         Having knowledge of the relation between module names and
+         kernel defines hardcoded into <span class="application">yaird</span>
+         is hardly elegant.  Perhaps it is possible to generate this
+         mapping based on the kernel Makefiles when building the
+         kernel, but that's too complex just now.
+       </p></div><div class="footnote"><p><sup>[<a id="ftn.id2736425" href="#id2736425">5</a>] </sup>
+         It could also be an encrypted device; this case is not handled
+         yet.
+       </p></div><div class="footnote"><p><sup>[<a id="ftn.id2736794" href="#id2736794">6</a>] </sup>
+         Having device files on the image is wrong: it will
+         break if the new kernel uses different device numbers.  Mostly
+         this can be avoided by using the <tt class="filename">dev</tt>
+         files provided by sysfs, but there is a bootstrap problem:
+         the <span class="application">mount</span> command needed to
+         access sysfs assumes <tt class="filename">/dev/null</tt> and
+         <tt class="filename">/dev/console</tt> are available.
+       </p></div><div class="footnote"><p><sup>[<a id="ftn.id2742268" href="#id2742268">7</a>] </sup>
+           For more info on the kernel-supplied shared library for
+           system calls, see
+       
+           <a href="http://lwn.net/Articles/18411/" target="_top">
+             <i class="citetitle">LWN: How to speed up system calls</i></a>,
+           <a href="http://lwn.net/Articles/30258/" target="_top">
+             <i class="citetitle">LWN: Patch: i386 vsyscall DSO implementation</i></a>,
+           <a href="http://www.uwsg.iu.edu/hypermail/linux/kernel/0306.2/0674.html" target="_top">
+             <i class="citetitle">LKML: common name for the kernel DSO</i></a>.
+         </p></div></div></div></body></html>
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/yaird.xml b/rescue/linux/cdrom/yaird-0.0.5/doc/yaird.xml
new file mode 100644 (file)
index 0000000..e274042
--- /dev/null
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+
+
+<!DOCTYPE article
+
+  PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "docbookx.dtd"
+
+  [
+    <!ENTITY VERSION "0.0.5">
+
+    <!ENTITY INTRODUCTION SYSTEM "intro.xml">
+    <!ENTITY SPEC SYSTEM "spec.xml">
+    <!ENTITY CONCEPTS SYSTEM "concepts.xml">
+    <!ENTITY KERNEL SYSTEM "kernel.xml">
+    <!ENTITY RAID SYSTEM "raid.xml">
+    <!ENTITY INPUT SYSTEM "input.xml">
+    <!ENTITY SHLIBS SYSTEM "shlibs.xml">
+    <!ENTITY SECURITY SYSTEM "security.xml">
+    <!ENTITY TOOLS SYSTEM "tools.xml">
+    <!ENTITY AUTHORS SYSTEM "authors.xml">
+    <!ENTITY LICENSE SYSTEM "license.xml">
+  ]
+
+>
+
+<article id="index" lang="en">
+
+ <articleinfo>
+  <title>Yaird &mdash; Yet Another Mkinitrd</title>
+  <pubdate>2005-02-09</pubdate>
+  <author>
+    <firstname>Erik</firstname>
+    <surname>van Konijnenburg</surname>
+    <email>ekonijn@xs4all.nl</email>
+  </author>
+
+  <abstract>
+    <para>
+      This memo discusses the design goals and implementation of
+      <application>Yaird</application> (Yet Another mkInitRD),
+      a proof-of-concept application to create an initial boot image,
+      a minimal filesystem used to bring a booting Linux kernel to a
+      level where it can access the root file system and use startup
+      scripts to bring the system to the normal run level.  It differs
+      from earlier <application>mkinitrd</application> implementations in
+      that it leverages the information in sysfs to minimise the number
+      of special cases that the application has to know about, and in
+      that it uses a template system to separate the analysis of the
+      system from the building of the image.
+    </para>
+  </abstract>
+
+  <copyright>
+   <year>2005</year>
+   <holder>Erik van Konijnenburg</holder>
+  </copyright>                                                  
+
+  <legalnotice id="legal-notice">
+   <para>
+    Permission is granted to copy, distribute and/or modify this
+    document under the terms of the <citetitle>GNU Free Documentation
+    License</citetitle>, Version 1.1 or any later version published
+    by the Free Software Foundation with no Invariant Sections, no
+    Front-Cover Texts, and no Back-Cover Texts. You may obtain a copy
+    of the <citetitle>GNU Free Documentation License</citetitle> from
+    the Free Software Foundation by visiting <ulink type="http"
+    url="http://www.fsf.org">their Web site</ulink> or by writing to:
+    Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+    Boston, MA 02111-1307, USA.
+   </para>
+  </legalnotice>                                                                
+
+  <!--
+    <releaseinfo>
+      This is version &VERSION; of the Yaird manual.
+    </releaseinfo>
+  -->
+
+ </articleinfo>
+
+&INTRODUCTION;
+&SPEC;
+&CONCEPTS;
+&KERNEL;
+&RAID;
+&INPUT;
+&SHLIBS;
+&SECURITY;
+&TOOLS;
+&AUTHORS;
+&LICENSE;
+
+</article>
diff --git a/rescue/linux/cdrom/yaird-0.0.5/doc/yaird.xml.in b/rescue/linux/cdrom/yaird-0.0.5/doc/yaird.xml.in
new file mode 100644 (file)
index 0000000..78b76da
--- /dev/null
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+
+
+<!DOCTYPE article
+
+  PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" "docbookx.dtd"
+
+  [
+    <!ENTITY VERSION "@VERSION@">
+
+    <!ENTITY INTRODUCTION SYSTEM "intro.xml">
+    <!ENTITY SPEC SYSTEM "spec.xml">
+    <!ENTITY CONCEPTS SYSTEM "concepts.xml">
+    <!ENTITY KERNEL SYSTEM "kernel.xml">
+    <!ENTITY RAID SYSTEM "raid.xml">
+    <!ENTITY INPUT SYSTEM "input.xml">
+    <!ENTITY SHLIBS SYSTEM "shlibs.xml">
+    <!ENTITY SECURITY SYSTEM "security.xml">
+    <!ENTITY TOOLS SYSTEM "tools.xml">
+    <!ENTITY AUTHORS SYSTEM "authors.xml">
+    <!ENTITY LICENSE SYSTEM "license.xml">
+  ]
+
+>
+
+<article id="index" lang="en">
+
+ <articleinfo>
+  <title>Yaird &mdash; Yet Another Mkinitrd</title>
+  <pubdate>2005-02-09</pubdate>
+  <author>
+    <firstname>Erik</firstname>
+    <surname>van Konijnenburg</surname>
+    <email>ekonijn@xs4all.nl</email>
+  </author>
+
+  <abstract>
+    <para>
+      This memo discusses the design goals and implementation of
+      <application>Yaird</application> (Yet Another mkInitRD),
+      a proof-of-concept application to create an initial boot image,
+      a minimal filesystem used to bring a booting Linux kernel to a
+      level where it can access the root file system and use startup
+      scripts to bring the system to the normal run level.  It differs
+      from earlier <application>mkinitrd</application> implementations in
+      that it leverages the information in sysfs to minimise the number
+      of special cases that the application has to know about, and in
+      that it uses a template system to separate the analysis of the
+      system from the building of the image.
+    </para>
+  </abstract>
+
+  <copyright>
+   <year>2005</year>
+   <holder>Erik van Konijnenburg</holder>
+  </copyright>                                                  
+
+  <legalnotice id="legal-notice">
+   <para>
+    Permission is granted to copy, distribute and/or modify this
+    document under the terms of the <citetitle>GNU Free Documentation
+    License</citetitle>, Version 1.1 or any later version published
+    by the Free Software Foundation with no Invariant Sections, no
+    Front-Cover Texts, and no Back-Cover Texts. You may obtain a copy
+    of the <citetitle>GNU Free Documentation License</citetitle> from
+    the Free Software Foundation by visiting <ulink type="http"
+    url="http://www.fsf.org">their Web site</ulink> or by writing to:
+    Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+    Boston, MA 02111-1307, USA.
+   </para>
+  </legalnotice>                                                                
+
+  <!--
+    <releaseinfo>
+      This is version &VERSION; of the Yaird manual.
+    </releaseinfo>
+  -->
+
+ </articleinfo>
+
+&INTRODUCTION;
+&SPEC;
+&CONCEPTS;
+&KERNEL;
+&RAID;
+&INPUT;
+&SHLIBS;
+&SECURITY;
+&TOOLS;
+&AUTHORS;
+&LICENSE;
+
+</article>
diff --git a/rescue/linux/cdrom/yaird-0.0.5/exec/.deps/findlibs.Po b/rescue/linux/cdrom/yaird-0.0.5/exec/.deps/findlibs.Po
new file mode 100644 (file)
index 0000000..9efa851
--- /dev/null
@@ -0,0 +1,120 @@
+findlibs.o findlibs.o: findlibs.c /usr/include/stdio.h \
+  /usr/include/features.h /usr/include/sys/cdefs.h \
+  /usr/include/gnu/stubs.h \
+  /usr/lib/gcc/i386-redhat-linux/3.4.2/include/stddef.h \
+  /usr/include/bits/types.h /usr/include/bits/wordsize.h \
+  /usr/include/bits/typesizes.h /usr/include/libio.h \
+  /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \
+  /usr/include/gconv.h \
+  /usr/lib/gcc/i386-redhat-linux/3.4.2/include/stdarg.h \
+  /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+  /usr/include/bits/stdio.h /usr/include/stdlib.h \
+  /usr/include/sys/types.h /usr/include/time.h /usr/include/endian.h \
+  /usr/include/bits/endian.h /usr/include/sys/select.h \
+  /usr/include/bits/select.h /usr/include/bits/sigset.h \
+  /usr/include/bits/time.h /usr/include/sys/sysmacros.h \
+  /usr/include/bits/pthreadtypes.h /usr/include/bits/sched.h \
+  /usr/include/alloca.h /usr/include/unistd.h \
+  /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \
+  /usr/include/getopt.h /usr/include/string.h /usr/include/bits/string.h \
+  /usr/include/bits/string2.h \
+  /usr/lib/gcc/i386-redhat-linux/3.4.2/include/limits.h \
+  /usr/lib/gcc/i386-redhat-linux/3.4.2/include/syslimits.h \
+  /usr/include/limits.h /usr/include/bits/posix1_lim.h \
+  /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
+  /usr/include/bits/posix2_lim.h /usr/include/elf.h /usr/include/stdint.h \
+  ../include/config.h
+
+/usr/include/stdio.h:
+
+/usr/include/features.h:
+
+/usr/include/sys/cdefs.h:
+
+/usr/include/gnu/stubs.h:
+
+/usr/lib/gcc/i386-redhat-linux/3.4.2/include/stddef.h:
+
+/usr/include/bits/types.h:
+
+/usr/include/bits/wordsize.h:
+
+/usr/include/bits/typesizes.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/include/bits/wchar.h:
+
+/usr/include/gconv.h:
+
+/usr/lib/gcc/i386-redhat-linux/3.4.2/include/stdarg.h:
+
+/usr/include/bits/stdio_lim.h:
+
+/usr/include/bits/sys_errlist.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/endian.h:
+
+/usr/include/bits/endian.h:
+
+/usr/include/sys/select.h:
+
+/usr/include/bits/select.h:
+
+/usr/include/bits/sigset.h:
+
+/usr/include/bits/time.h:
+
+/usr/include/sys/sysmacros.h:
+
+/usr/include/bits/pthreadtypes.h:
+
+/usr/include/bits/sched.h:
+
+/usr/include/alloca.h:
+
+/usr/include/unistd.h:
+
+/usr/include/bits/posix_opt.h:
+
+/usr/include/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/string.h:
+
+/usr/include/bits/string.h:
+
+/usr/include/bits/string2.h:
+
+/usr/lib/gcc/i386-redhat-linux/3.4.2/include/limits.h:
+
+/usr/lib/gcc/i386-redhat-linux/3.4.2/include/syslimits.h:
+
+/usr/include/limits.h:
+
+/usr/include/bits/posix1_lim.h:
+
+/usr/include/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/bits/posix2_lim.h:
+
+/usr/include/elf.h:
+
+/usr/include/stdint.h:
+
+../include/config.h:
diff --git a/rescue/linux/cdrom/yaird-0.0.5/exec/.deps/run_init.Po b/rescue/linux/cdrom/yaird-0.0.5/exec/.deps/run_init.Po
new file mode 100644 (file)
index 0000000..48e6096
--- /dev/null
@@ -0,0 +1,155 @@
+run_init.o run_init.o: run_init.c /usr/include/alloca.h \
+  /usr/include/features.h /usr/include/sys/cdefs.h \
+  /usr/include/gnu/stubs.h \
+  /usr/lib/gcc/i386-redhat-linux/3.4.2/include/stddef.h \
+  /usr/include/assert.h /usr/include/dirent.h /usr/include/bits/types.h \
+  /usr/include/bits/wordsize.h /usr/include/bits/typesizes.h \
+  /usr/include/bits/dirent.h /usr/include/bits/posix1_lim.h \
+  /usr/include/bits/local_lim.h /usr/include/linux/limits.h \
+  /usr/include/errno.h /usr/include/bits/errno.h \
+  /usr/include/linux/errno.h /usr/include/asm/errno.h \
+  /usr/include/fcntl.h /usr/include/bits/fcntl.h /usr/include/sys/types.h \
+  /usr/include/time.h /usr/include/endian.h /usr/include/bits/endian.h \
+  /usr/include/sys/select.h /usr/include/bits/select.h \
+  /usr/include/bits/sigset.h /usr/include/bits/time.h \
+  /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \
+  /usr/include/bits/sched.h /usr/include/string.h \
+  /usr/include/bits/string.h /usr/include/bits/string2.h \
+  /usr/include/stdlib.h /usr/include/stdio.h /usr/include/libio.h \
+  /usr/include/_G_config.h /usr/include/wchar.h /usr/include/bits/wchar.h \
+  /usr/include/gconv.h \
+  /usr/lib/gcc/i386-redhat-linux/3.4.2/include/stdarg.h \
+  /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \
+  /usr/include/bits/stdio.h /usr/include/unistd.h \
+  /usr/include/bits/posix_opt.h /usr/include/bits/confname.h \
+  /usr/include/getopt.h /usr/include/sys/mount.h /usr/include/sys/ioctl.h \
+  /usr/include/bits/ioctls.h /usr/include/asm/ioctls.h \
+  /usr/include/asm/ioctl.h /usr/include/bits/ioctl-types.h \
+  /usr/include/sys/ttydefaults.h /usr/include/sys/stat.h \
+  /usr/include/bits/stat.h /usr/include/sys/vfs.h \
+  /usr/include/sys/statfs.h /usr/include/bits/statfs.h \
+  ../include/config.h
+
+/usr/include/alloca.h:
+
+/usr/include/features.h:
+
+/usr/include/sys/cdefs.h:
+
+/usr/include/gnu/stubs.h:
+
+/usr/lib/gcc/i386-redhat-linux/3.4.2/include/stddef.h:
+
+/usr/include/assert.h:
+
+/usr/include/dirent.h:
+
+/usr/include/bits/types.h:
+
+/usr/include/bits/wordsize.h:
+
+/usr/include/bits/typesizes.h:
+
+/usr/include/bits/dirent.h:
+
+/usr/include/bits/posix1_lim.h:
+
+/usr/include/bits/local_lim.h:
+
+/usr/include/linux/limits.h:
+
+/usr/include/errno.h:
+
+/usr/include/bits/errno.h:
+
+/usr/include/linux/errno.h:
+
+/usr/include/asm/errno.h:
+
+/usr/include/fcntl.h:
+
+/usr/include/bits/fcntl.h:
+
+/usr/include/sys/types.h:
+
+/usr/include/time.h:
+
+/usr/include/endian.h:
+
+/usr/include/bits/endian.h:
+
+/usr/include/sys/select.h:
+
+/usr/include/bits/select.h:
+
+/usr/include/bits/sigset.h:
+
+/usr/include/bits/time.h:
+
+/usr/include/sys/sysmacros.h:
+
+/usr/include/bits/pthreadtypes.h:
+
+/usr/include/bits/sched.h:
+
+/usr/include/string.h:
+
+/usr/include/bits/string.h:
+
+/usr/include/bits/string2.h:
+
+/usr/include/stdlib.h:
+
+/usr/include/stdio.h:
+
+/usr/include/libio.h:
+
+/usr/include/_G_config.h:
+
+/usr/include/wchar.h:
+
+/usr/include/bits/wchar.h:
+
+/usr/include/gconv.h:
+
+/usr/lib/gcc/i386-redhat-linux/3.4.2/include/stdarg.h:
+
+/usr/include/bits/stdio_lim.h:
+
+/usr/include/bits/sys_errlist.h:
+
+/usr/include/bits/stdio.h:
+
+/usr/include/unistd.h:
+
+/usr/include/bits/posix_opt.h:
+
+/usr/include/bits/confname.h:
+
+/usr/include/getopt.h:
+
+/usr/include/sys/mount.h:
+
+/usr/include/sys/ioctl.h:
+
+/usr/include/bits/ioctls.h:
+
+/usr/include/asm/ioctls.h:
+
+/usr/include/asm/ioctl.h:
+
+/usr/include/bits/ioctl-types.h:
+
+/usr/include/sys/ttydefaults.h:
+
+/usr/include/sys/stat.h:
+
+/usr/include/bits/stat.h:
+
+/usr/include/sys/vfs.h:
+
+/usr/include/sys/statfs.h:
+
+/usr/include/bits/statfs.h:
+
+../include/config.h:
diff --git a/rescue/linux/cdrom/yaird-0.0.5/exec/Makefile b/rescue/linux/cdrom/yaird-0.0.5/exec/Makefile
new file mode 100644 (file)
index 0000000..9a98703
--- /dev/null
@@ -0,0 +1,452 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# exec/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+
+#
+# Makefile.am -- compiling executables to be included in generated image
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+#
+# The interesting part here is integration with klibc: it's absent.
+# The hope is that by specifying -I and -l flags to configure, an external
+# klibc build can be used.  This is untested.
+#
+
+# 
+# Makefile.incl -- shared defines between makefiles
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# - auxdir contains package specific executables that may be included
+#   in the generated image
+# - perldir contains perl modules to be included by the main program
+#
+# This cannot be simply passed from the master makefile; that would
+# be invisible to automake.
+
+SOURCES = $(findlibs_SOURCES) $(run_init_SOURCES)
+
+srcdir = .
+top_srcdir = ..
+
+pkgdatadir = $(datadir)/yaird
+pkglibdir = $(libdir)/yaird
+pkgincludedir = $(includedir)/yaird
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = /usr/bin/install -c
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+aux_PROGRAMS = run_init$(EXEEXT) findlibs$(EXEEXT)
+DIST_COMMON = $(srcdir)/../Makefile.incl $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+subdir = exec
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(auxdir)"
+auxPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(aux_PROGRAMS)
+am_findlibs_OBJECTS = findlibs.$(OBJEXT)
+findlibs_OBJECTS = $(am_findlibs_OBJECTS)
+findlibs_LDADD = $(LDADD)
+am_run_init_OBJECTS = run_init.$(OBJEXT)
+run_init_OBJECTS = $(am_run_init_OBJECTS)
+run_init_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(findlibs_SOURCES) $(run_init_SOURCES)
+DIST_SOURCES = $(findlibs_SOURCES) $(run_init_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run aclocal-1.9
+AMDEP_FALSE = #
+AMDEP_TRUE = 
+AMTAR = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run tar
+AUTOCONF = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run autoconf
+AUTOHEADER = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run autoheader
+AUTOMAKE = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run automake-1.9
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2
+CPPFLAGS = 
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EXEEXT = 
+INITRD_TEMPLATE = Fedora
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
+LDFLAGS = 
+LIBOBJS = 
+LIBS = 
+LTLIBOBJS = 
+MAKEINFO = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run makeinfo
+OBJEXT = o
+PACKAGE = yaird
+PACKAGE_BUGREPORT = 
+PACKAGE_NAME = 
+PACKAGE_STRING = 
+PACKAGE_TARNAME = 
+PACKAGE_VERSION = 
+PATH_SEPARATOR = :
+PERL = /usr/bin/perl
+SET_MAKE = 
+SHELL = /bin/sh
+STRIP = 
+VERSION = 0.0.5
+XMLTO = /usr/bin/xmlto
+ac_ct_CC = gcc
+ac_ct_STRIP = 
+am__fastdepCC_FALSE = #
+am__fastdepCC_TRUE = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = ${AMTAR} chof - "$$tardir"
+am__untar = ${AMTAR} xf -
+bindir = ${exec_prefix}/bin
+build_alias = 
+datadir = ${prefix}/share
+exec_prefix = ${prefix}
+host_alias = 
+includedir = ${prefix}/include
+infodir = ${prefix}/info
+install_sh = /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localstatedir = ${prefix}/var
+mandir = ${prefix}/man
+mkdir_p = mkdir -p --
+oldincludedir = /usr/include
+prefix = /usr/local
+program_transform_name = s,x,x,
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+sysconfdir = ${prefix}/etc
+target_alias = 
+auxdir = $(pkglibdir)/exec
+perldir = $(pkglibdir)/perl
+run_init_SOURCES = run_init.c
+findlibs_SOURCES = findlibs.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/../Makefile.incl $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  exec/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  exec/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-auxPROGRAMS: $(aux_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(auxdir)" || $(mkdir_p) "$(DESTDIR)$(auxdir)"
+       @list='$(aux_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(auxPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(auxdir)/$$f'"; \
+          $(INSTALL_PROGRAM_ENV) $(auxPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(auxdir)/$$f" || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-auxPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(aux_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f '$(DESTDIR)$(auxdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(auxdir)/$$f"; \
+       done
+
+clean-auxPROGRAMS:
+       -test -z "$(aux_PROGRAMS)" || rm -f $(aux_PROGRAMS)
+findlibs$(EXEEXT): $(findlibs_OBJECTS) $(findlibs_DEPENDENCIES) 
+       @rm -f findlibs$(EXEEXT)
+       $(LINK) $(findlibs_LDFLAGS) $(findlibs_OBJECTS) $(findlibs_LDADD) $(LIBS)
+run_init$(EXEEXT): $(run_init_OBJECTS) $(run_init_DEPENDENCIES) 
+       @rm -f run_init$(EXEEXT)
+       $(LINK) $(run_init_LDFLAGS) $(run_init_OBJECTS) $(run_init_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+include ./$(DEPDIR)/findlibs.Po
+include ./$(DEPDIR)/run_init.Po
+
+.c.o:
+       if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+       then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+#      source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(COMPILE) -c $<
+
+.c.obj:
+       if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+       then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+#      source='$<' object='$@' libtool=no \
+#      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#      $(COMPILE) -c `$(CYGPATH_W) '$<'`
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(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; \
+         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 \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+       for dir in "$(DESTDIR)$(auxdir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-auxPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-auxPROGRAMS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-auxPROGRAMS uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-auxPROGRAMS \
+       clean-generic ctags distclean distclean-compile \
+       distclean-generic distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-auxPROGRAMS \
+       install-data install-data-am 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-compile \
+       mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+       uninstall-am uninstall-auxPROGRAMS uninstall-info-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.
+.NOEXPORT:
diff --git a/rescue/linux/cdrom/yaird-0.0.5/exec/Makefile.am b/rescue/linux/cdrom/yaird-0.0.5/exec/Makefile.am
new file mode 100644 (file)
index 0000000..3ae7b8d
--- /dev/null
@@ -0,0 +1,34 @@
+#
+# Makefile.am -- compiling executables to be included in generated image
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+#
+# The interesting part here is integration with klibc: it's absent.
+# The hope is that by specifying -I and -l flags to configure, an external
+# klibc build can be used.  This is untested.
+#
+
+# place package-specific executables that may go on the image in
+# this directory.
+# Must be consistent with ../src
+#auxdir = $(pkglibdir)/exec
+aux_PROGRAMS = run_init findlibs
+
+include ../Makefile.incl
+
+run_init_SOURCES = run_init.c
+findlibs_SOURCES = findlibs.c
diff --git a/rescue/linux/cdrom/yaird-0.0.5/exec/Makefile.in b/rescue/linux/cdrom/yaird-0.0.5/exec/Makefile.in
new file mode 100644 (file)
index 0000000..8ae7cb2
--- /dev/null
@@ -0,0 +1,452 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+#
+# Makefile.am -- compiling executables to be included in generated image
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+#
+# The interesting part here is integration with klibc: it's absent.
+# The hope is that by specifying -I and -l flags to configure, an external
+# klibc build can be used.  This is untested.
+#
+
+# 
+# Makefile.incl -- shared defines between makefiles
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# - auxdir contains package specific executables that may be included
+#   in the generated image
+# - perldir contains perl modules to be included by the main program
+#
+# This cannot be simply passed from the master makefile; that would
+# be invisible to automake.
+
+SOURCES = $(findlibs_SOURCES) $(run_init_SOURCES)
+
+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
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+aux_PROGRAMS = run_init$(EXEEXT) findlibs$(EXEEXT)
+DIST_COMMON = $(srcdir)/../Makefile.incl $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+subdir = exec
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(auxdir)"
+auxPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(aux_PROGRAMS)
+am_findlibs_OBJECTS = findlibs.$(OBJEXT)
+findlibs_OBJECTS = $(am_findlibs_OBJECTS)
+findlibs_LDADD = $(LDADD)
+am_run_init_OBJECTS = run_init.$(OBJEXT)
+run_init_OBJECTS = $(am_run_init_OBJECTS)
+run_init_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(findlibs_SOURCES) $(run_init_SOURCES)
+DIST_SOURCES = $(findlibs_SOURCES) $(run_init_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INITRD_TEMPLATE = @INITRD_TEMPLATE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+XMLTO = @XMLTO@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_STRIP = @ac_ct_STRIP@
+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@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+auxdir = $(pkglibdir)/exec
+perldir = $(pkglibdir)/perl
+run_init_SOURCES = run_init.c
+findlibs_SOURCES = findlibs.c
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/../Makefile.incl $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  exec/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  exec/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-auxPROGRAMS: $(aux_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       test -z "$(auxdir)" || $(mkdir_p) "$(DESTDIR)$(auxdir)"
+       @list='$(aux_PROGRAMS)'; for p in $$list; do \
+         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+         if test -f $$p \
+         ; then \
+           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+          echo " $(INSTALL_PROGRAM_ENV) $(auxPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(auxdir)/$$f'"; \
+          $(INSTALL_PROGRAM_ENV) $(auxPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(auxdir)/$$f" || exit 1; \
+         else :; fi; \
+       done
+
+uninstall-auxPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(aux_PROGRAMS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+         echo " rm -f '$(DESTDIR)$(auxdir)/$$f'"; \
+         rm -f "$(DESTDIR)$(auxdir)/$$f"; \
+       done
+
+clean-auxPROGRAMS:
+       -test -z "$(aux_PROGRAMS)" || rm -f $(aux_PROGRAMS)
+findlibs$(EXEEXT): $(findlibs_OBJECTS) $(findlibs_DEPENDENCIES) 
+       @rm -f findlibs$(EXEEXT)
+       $(LINK) $(findlibs_LDFLAGS) $(findlibs_OBJECTS) $(findlibs_LDADD) $(LIBS)
+run_init$(EXEEXT): $(run_init_OBJECTS) $(run_init_DEPENDENCIES) 
+       @rm -f run_init$(EXEEXT)
+       $(LINK) $(run_init_LDFLAGS) $(run_init_OBJECTS) $(run_init_LDADD) $(LIBS)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/findlibs.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run_init.Po@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
+@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
+@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) '$<'`
+uninstall-info-am:
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+           $$tags $$unique; \
+       fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+               $(TAGS_FILES) $(LISP)
+       tags=; \
+       here=`pwd`; \
+       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+       unique=`for i in $$list; do \
+           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+         done | \
+         $(AWK) '    { files[$$0] = 1; } \
+              END { for (i in files) print i; }'`; \
+       test -z "$(CTAGS_ARGS)$$tags$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$tags $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && cd $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(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; \
+         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 \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+       for dir in "$(DESTDIR)$(auxdir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-auxPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-auxPROGRAMS
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -rf ./$(DEPDIR)
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-auxPROGRAMS uninstall-info-am
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-auxPROGRAMS \
+       clean-generic ctags distclean distclean-compile \
+       distclean-generic distclean-tags distdir dvi dvi-am html \
+       html-am info info-am install install-am install-auxPROGRAMS \
+       install-data install-data-am 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-compile \
+       mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+       uninstall-am uninstall-auxPROGRAMS uninstall-info-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.
+.NOEXPORT:
diff --git a/rescue/linux/cdrom/yaird-0.0.5/exec/findlibs b/rescue/linux/cdrom/yaird-0.0.5/exec/findlibs
new file mode 100755 (executable)
index 0000000..250227d
Binary files /dev/null and b/rescue/linux/cdrom/yaird-0.0.5/exec/findlibs differ
diff --git a/rescue/linux/cdrom/yaird-0.0.5/exec/findlibs.c b/rescue/linux/cdrom/yaird-0.0.5/exec/findlibs.c
new file mode 100644 (file)
index 0000000..7a4bb22
--- /dev/null
@@ -0,0 +1,444 @@
+/* findlibs.c: find libraries used by an ELF executable.
+
+    Copyright (C) 2005, Erik van Konijnenburg
+
+    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
+
+*/
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <limits.h>
+#include <elf.h>
+
+#include <config.h>
+
+extern int     optint;
+extern int     opterr;
+extern int     optopt;
+extern char *  optarg;
+
+static int     silent = 0;             /* dont do error messages */
+static char *  progname = "findlibs";
+static char *  version = VERSION;
+
+void
+message (char *fmt, ...)
+{
+       va_list ap;
+       if (! silent) {
+               va_start (ap, fmt);
+               fprintf (stderr, "%s: ", progname);
+               vfprintf (stderr, fmt, ap);
+               fprintf (stderr, "\n");
+               va_end (ap);
+       }
+}
+
+void
+fatal (char *fmt, ...)
+{
+       va_list ap;
+       if (! silent) {
+               va_start (ap, fmt);
+               fprintf (stderr, "%s: ", progname);
+               vfprintf (stderr, fmt, ap);
+               fprintf (stderr, " (fatal)\n");
+               va_end (ap);
+       }
+       exit (1);
+}
+
+void
+usage (void)
+{
+       printf ("\
+    %s [ -qhv ] executable\n\
+    print dynamic loader and basenames of shared libraries for executable\n\
+    -q: do not print error messages, just give exit code\n\
+    -h: this help text\n\
+    -v: version\n\
+    corrupt ELF files cause an error exit status, non ELF-files\n\
+    or non-executable ELF files do not.\n\
+",
+               progname);
+}
+
+void *
+getStuff (FILE *fp, Elf32_Off offset, Elf32_Word size)
+{
+       int             rc;
+       size_t          rc2;
+       void *          ptr = NULL;
+
+       ptr = malloc(size);
+       if (! ptr) {
+               fatal ("could not allocate memory");
+       }
+
+       rc = fseek (fp, offset, SEEK_SET);
+       if (rc != 0) {
+               fatal ("could not seek");
+       }
+       rc2 = fread (ptr, size, 1, fp);
+       if (rc2 != 1) {
+               fatal ("could not read");
+       }
+       return ptr;
+}
+
+void
+doOne32 (char *filename, FILE *fp)
+{
+       int             i;
+       Elf32_Ehdr *    ehdr = NULL;
+       Elf32_Phdr *    phdr = NULL;
+       int             interpIndex = -1;       /* prog hdr with interp. */
+       Elf32_Shdr *    shdrs = NULL;
+       int             dynamicIndex = -1;      /* section named .dynamic */
+       Elf32_Dyn *     dynamic = NULL;
+       int             dynstrIndex = -1;       /* section named .dynstr */
+       char *          dynstr = NULL;
+       char *          sectionNames = NULL;
+
+
+       ehdr = getStuff (fp, 0, sizeof(*ehdr));
+
+       if (ehdr->e_ehsize != sizeof(*ehdr)) {
+               fatal ("bad size ehdr %s", filename);
+       }
+
+       if (! (ehdr->e_type == ET_EXEC || ehdr->e_type == ET_DYN)) {
+               message ("bad type ehdr %s", filename);
+               goto out;
+       }
+
+       if (ehdr->e_phentsize != sizeof (*phdr)) {
+               fatal ("bad size phdr %s", filename);
+       }
+
+       if (ehdr->e_phnum < 1 || ehdr->e_phnum > (65336/sizeof(*phdr))) {
+               fatal ("bad count phdr %s", filename);
+       }
+
+       phdr = getStuff (fp, ehdr->e_phoff, ehdr->e_phnum * sizeof(*phdr));
+
+       for (i = 0; i < ehdr->e_phnum; i++) {
+               if (phdr[i].p_type == PT_INTERP) {
+                       if (interpIndex >= 0) {
+                               fatal ("corrupt image, interp %s", filename);
+                       }
+                       interpIndex = i;
+               }
+       }
+
+       /*
+        * Print interpreter.
+        * Note you can have files with DT_NEEDED without interp;
+        * shared libraries are an example.
+        */
+       if (interpIndex >= 0) {
+               Elf32_Off       offset = phdr[interpIndex].p_offset;
+               Elf32_Word      size = phdr[interpIndex].p_filesz;
+               char *          interpreter = NULL;
+
+               if (size < 2 || size > PATH_MAX) {
+                       fatal ("funny interpreter %s", filename);
+               }
+
+               interpreter = getStuff (fp, offset, size);
+               if (interpreter[size - 1] != '\0') {
+                       fatal ("broken interpreter %s", filename);
+               }
+
+               printf ("interpreter: %s\n", interpreter);
+
+               free (interpreter);
+       }
+
+       /*
+        * read section headers
+        */
+       if (ehdr->e_shentsize != sizeof (Elf32_Shdr)) {
+               fatal ("bad section header size %s", filename);
+       }
+       shdrs = getStuff (fp, ehdr->e_shoff, sizeof(*shdrs) * ehdr->e_shnum);
+
+       /*
+        * read section header names
+        */
+       if (ehdr->e_shstrndx >= ehdr->e_shnum) {
+               fatal ("no section names in %s", filename);
+       }
+       sectionNames = getStuff (fp, shdrs[ehdr->e_shstrndx].sh_offset,
+                       shdrs[ehdr->e_shstrndx].sh_size);
+
+
+       /*
+        * Find .dynamic section and corresponding strings.
+        */
+       for (i = 0; i < ehdr->e_shnum; i++) {
+               char *  name = &sectionNames[shdrs[i].sh_name];
+               if (strcmp (name, ".dynamic") == 0) {
+                       dynamicIndex = i;
+               }
+               else if (strcmp (name, ".dynstr") == 0) {
+                       dynstrIndex = i;
+               }
+       }
+
+       if (dynamicIndex < 0) {
+               goto out;
+       }
+
+       if (dynamicIndex >= 0  &&  dynstrIndex < 0) {
+               fatal ("corrupt dynamic without dynstr %s", filename);
+       }
+       if (dynamicIndex > ehdr->e_shnum) {
+               fatal ("dynamic out of range %s", filename);
+       }
+       if (dynstrIndex > ehdr->e_shnum) {
+               fatal ("dynamic out of range %s", filename);
+       }
+       dynamic = getStuff (fp, shdrs[dynamicIndex].sh_offset,
+                       shdrs[dynamicIndex].sh_size);
+       dynstr = getStuff (fp, shdrs[dynstrIndex].sh_offset,
+                       shdrs[dynstrIndex].sh_size);
+
+       for (i = 0;; i++) {
+               if (dynamic[i].d_tag == DT_NEEDED) {
+                       Elf32_Word offset = dynamic[i].d_un.d_val;
+                       char *name = &dynstr[offset];
+
+                       printf ("needed: %s\n", name);
+               }
+               if (dynamic[i].d_tag == DT_NULL) {
+                       break;
+               }
+       }
+
+out:
+       if (dynstr) free (dynstr);
+       if (dynamic) free (dynamic);
+       if (ehdr) free (ehdr);
+       if (phdr) free (phdr);
+       if (shdrs) free (shdrs);
+       if (sectionNames) free (sectionNames);
+}
+
+
+void
+doOne64 (char *filename, FILE *fp)
+{
+       int             i;
+       Elf64_Ehdr *    ehdr = NULL;
+       Elf64_Phdr *    phdr = NULL;
+       int             interpIndex = -1;       /* proghdr has interp. */
+       Elf64_Shdr *    shdrs = NULL;
+       int             dynamicIndex = -1;      /* section named .dynamic */
+       Elf64_Dyn *     dynamic = NULL;
+       int             dynstrIndex = -1;       /* section named .dynstr */
+       char *          dynstr = NULL;
+       char *          sectionNames = NULL;
+
+
+       ehdr = getStuff (fp, 0, sizeof(*ehdr));
+
+       if (ehdr->e_ehsize != sizeof(*ehdr)) {
+               fatal ("bad size ehdr %s", filename);
+       }
+
+       if (! (ehdr->e_type == ET_EXEC || ehdr->e_type == ET_DYN)) {
+               message ("bad type ehdr %s", filename);
+               goto out;
+       }
+
+       if (ehdr->e_phentsize != sizeof (*phdr)) {
+               fatal ("bad size phdr %s", filename);
+       }
+
+       if (ehdr->e_phnum < 1 || ehdr->e_phnum > (65336/sizeof(*phdr))) {
+               fatal ("bad count phdr %s", filename);
+       }
+
+       phdr = getStuff (fp, ehdr->e_phoff, ehdr->e_phnum * sizeof(*phdr));
+
+       for (i = 0; i < ehdr->e_phnum; i++) {
+               if (phdr[i].p_type == PT_INTERP) {
+                       if (interpIndex >= 0) {
+                               fatal ("corrupt image, interp %s", filename);
+                       }
+                       interpIndex = i;
+               }
+       }
+
+       /*
+        * Print interpreter.
+        * Note you can have files with DT_NEEDED without interp;
+        * shared libraries are an example.
+        */
+       if (interpIndex >= 0) {
+               Elf64_Off       offset = phdr[interpIndex].p_offset;
+               Elf64_Xword     size = phdr[interpIndex].p_filesz;
+               char *          interpreter = NULL;
+
+               if (size < 2 || size > PATH_MAX) {
+                       fatal ("funny interpreter %s", filename);
+               }
+
+               interpreter = getStuff (fp, offset, size);
+               if (interpreter[size - 1] != '\0') {
+                       fatal ("broken interpreter %s", filename);
+               }
+
+               printf ("interpreter: %s\n", interpreter);
+
+               free (interpreter);
+       }
+
+       /*
+        * read section headers
+        */
+       if (ehdr->e_shentsize != sizeof (Elf64_Shdr)) {
+               fatal ("bad section header size %s", filename);
+       }
+       shdrs = getStuff (fp, ehdr->e_shoff, sizeof(*shdrs) * ehdr->e_shnum);
+
+       /*
+        * read section header names
+        */
+       if (ehdr->e_shstrndx >= ehdr->e_shnum) {
+               fatal ("no section names in %s", filename);
+       }
+       sectionNames = getStuff (fp, shdrs[ehdr->e_shstrndx].sh_offset,
+                       shdrs[ehdr->e_shstrndx].sh_size);
+
+       for (i = 0; i < ehdr->e_shnum; i++) {
+               char *  name = &sectionNames[shdrs[i].sh_name];
+               if (strcmp (name, ".dynamic") == 0) {
+                       dynamicIndex = i;
+               }
+               else if (strcmp (name, ".dynstr") == 0) {
+                       dynstrIndex = i;
+               }
+       }
+
+       if (dynamicIndex < 0) {
+               goto out;
+       }
+
+       if (dynamicIndex >= 0  &&  dynstrIndex < 0) {
+               fatal ("corrupt dynamic without dynstr %s", filename);
+       }
+       if (dynamicIndex > ehdr->e_shnum) {
+               fatal ("dynamic out of range %s", filename);
+       }
+       if (dynstrIndex > ehdr->e_shnum) {
+               fatal ("dynamic out of range %s", filename);
+       }
+       dynamic = getStuff (fp, shdrs[dynamicIndex].sh_offset,
+                       shdrs[dynamicIndex].sh_size);
+       dynstr = getStuff (fp, shdrs[dynstrIndex].sh_offset,
+                       shdrs[dynstrIndex].sh_size);
+
+       for (i = 0;; i++) {
+               if (dynamic[i].d_tag == DT_NEEDED) {
+                       Elf64_Xword offset = dynamic[i].d_un.d_val;
+                       char *name = &dynstr[offset];
+
+                       printf ("needed: %s\n", name);
+               }
+               if (dynamic[i].d_tag == DT_NULL) {
+                       break;
+               }
+       }
+
+out:
+       if (dynstr) free (dynstr);
+       if (dynamic) free (dynamic);
+       if (ehdr) free (ehdr);
+       if (phdr) free (phdr);
+       if (shdrs) free (shdrs);
+       if (sectionNames) free (sectionNames);
+}
+
+
+void
+doOne (char *filename)
+{
+       FILE *          fp;
+       size_t          rc;
+       unsigned char   magic[EI_NIDENT];
+
+       fp = fopen (filename, "r");
+       if (! fp) {
+               fatal ("could not open %s", filename);
+       }
+
+       rc = fread (magic, 1, EI_NIDENT, fp);
+       if (rc < EI_NIDENT) {
+               message ("not an ELF file: %s", filename);
+               return;
+       }
+
+       if (strncmp (magic, ELFMAG, SELFMAG) != 0) {
+               message ("not an ELF file: bad magic in %s", filename);
+               return;
+       }
+
+       switch (magic[EI_CLASS]) {
+       case ELFCLASS32:
+               doOne32 (filename, fp);
+               break;
+       case ELFCLASS64:
+               doOne64 (filename, fp);
+               break;
+       default:
+               fatal ("bad class %s", filename);
+       }
+
+       if (fclose (fp)) {
+               fatal ("could not close %s", filename);
+       }
+}
+
+int
+main (int argc, char *argv[])
+{
+       int     i;
+       while ((i = getopt (argc, argv, "hvq")) >= 0) {
+               switch (i) {
+               case 'h':
+                       usage ();
+                       return 0;
+               case 'v':
+                       message ("version %s", version);
+                       return 0;
+               case 'q':
+                       silent = 1;
+                       break;
+               default:
+                       fatal ("bad argument %c, -h for help", optopt);
+               }
+       }
+       if (optind != argc -1) {
+               fatal ("too many arguments");
+       }
+
+       doOne (argv[optind]);
+       return 0;
+}
diff --git a/rescue/linux/cdrom/yaird-0.0.5/exec/run_init b/rescue/linux/cdrom/yaird-0.0.5/exec/run_init
new file mode 100755 (executable)
index 0000000..14a3af9
Binary files /dev/null and b/rescue/linux/cdrom/yaird-0.0.5/exec/run_init differ
diff --git a/rescue/linux/cdrom/yaird-0.0.5/exec/run_init.c b/rescue/linux/cdrom/yaird-0.0.5/exec/run_init.c
new file mode 100644 (file)
index 0000000..dbb92c5
--- /dev/null
@@ -0,0 +1,264 @@
+#ident "$Id$"
+/* ----------------------------------------------------------------------- *
+ *   
+ *   Copyright 2004 H. Peter Anvin - All Rights Reserved
+ *
+ *   Permission is hereby granted, free of charge, to any person
+ *   obtaining a copy of this software and associated documentation
+ *   files (the "Software"), to deal in the Software without
+ *   restriction, including without limitation the rights to use,
+ *   copy, modify, merge, publish, distribute, sublicense, and/or
+ *   sell copies of the Software, and to permit persons to whom
+ *   the Software is furnished to do so, subject to the following
+ *   conditions:
+ *   
+ *   The above copyright notice and this permission notice shall
+ *   be included in all copies or substantial portions of the Software.
+ *   
+ *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ *   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ *   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ *   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ *   OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * ----------------------------------------------------------------------- */
+
+/*
+ * run-init.c
+ *
+ * Usage: exec run-init [-c /dev/console] /real-root /sbin/init "$@"
+ *
+ * This program should be called as the last thing in a shell script
+ * acting as /init in an initramfs; it does the following:
+ *
+ * - Delete all files in the initramfs;
+ * - Remounts /real-root onto the root filesystem;
+ * - Chroots;
+ * - Opens /dev/console;
+ * - Spawns the specified init program (with arguments.)
+ */
+
+#include <alloca.h>
+#include <assert.h>
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/vfs.h>
+
+#include <config.h>
+
+
+/* Make it possible to compile on glibc by including constants that the
+   always-behind shipped glibc headers may not include.  Classic example
+   on why the lack of ABI headers screw us up. */
+#ifndef TMPFS_MAGIC
+# define TMPFS_MAGIC   0x01021994
+#endif
+#ifndef RAMFS_MAGIC
+# define RAMFS_MAGIC   0x858458f6
+#endif
+#ifndef MS_MOVE
+# define MS_MOVE       8192
+#endif
+
+static const char *program;
+
+static void __attribute__((noreturn)) die(const char *msg)
+{
+  fprintf(stderr, "%s: %s: %s\n", program, msg, strerror(errno));
+  exit(1);
+}
+
+
+#ifdef ENABLE_NUKE
+static int nuke(const char *what);
+
+static int nuke_dirent(int len, const char *dir, const char *name, dev_t me)
+{
+  int bytes = len+strlen(name)+2;
+  char path[bytes];
+  int xlen;
+  struct stat st;
+
+  xlen = snprintf(path, bytes, "%s/%s", dir, name);
+  assert(xlen < bytes);
+
+  if ( lstat(path, &st) )
+    return ENOENT;             /* Return 0 since already gone? */
+
+  if ( st.st_dev != me )
+    return 0;                  /* DO NOT recurse down mount points!!!!! */
+
+  return nuke(path);
+}
+
+/* Wipe the contents of a directory, but not the directory itself */
+static int nuke_dir(const char *what)
+{
+  int len = strlen(what);
+  DIR *dir;
+  struct dirent *d;
+  int err = 0;
+  struct stat st;
+
+  if ( lstat(what, &st) )
+    return errno;
+  
+  if ( !S_ISDIR(st.st_mode) )
+    return ENOTDIR;
+
+  if ( !(dir = opendir(what)) ) {
+    /* EACCES means we can't read it.  Might be empty and removable;
+       if not, the rmdir() in nuke() will trigger an error. */
+    return (errno == EACCES) ? 0 : errno;
+  }
+  
+  while ( (d = readdir(dir)) ) {
+    /* Skip . and .. */
+    if ( d->d_name[0] == '.' &&
+        (d->d_name[1] == '\0' ||
+         (d->d_name[1] == '.' && d->d_name[2] == '\0')) )
+      continue;
+    
+    err = nuke_dirent(len, what, d->d_name, st.st_dev);
+    if ( err ) {
+      closedir(dir);
+      return err;
+    }
+  }
+  
+  closedir(dir);
+
+  return 0;
+}
+
+static int nuke(const char *what)
+{
+  int rv;
+  int err = 0;
+
+  rv = unlink(what);
+  if ( rv < 0 ) {
+    if ( errno == EISDIR ) {
+      /* It's a directory. */
+      err = nuke_dir(what);
+      if ( !err ) err = rmdir(what) ? errno : err;
+    } else {
+      err = errno;
+    }
+  }
+
+  if ( err ) {
+    errno = err;
+    die(what);
+  } else {
+    return 0;
+  }
+}
+#else /* no ENABLE_NUKE */
+static inline int
+nuke_dir(const char *what)
+{
+       return 0;
+}
+#endif /* ENABLE_NUKE */
+
+static void __attribute__((noreturn)) usage(void)
+{
+  fprintf(stderr, "Usage: exec %s [-c consoledev] /real-root /sbin/init [args]\n", program);
+  exit(1);
+}
+
+
+int main(int argc, char *argv[])
+{
+  struct stat   rst, cst, ist;
+  struct statfs sfs;
+  int o;
+  int confd;
+
+  /* Command-line options and defaults */
+  const char *console = "/dev/console";
+  const char *realroot;
+  const char *init;
+  char **initargs;
+
+  /* First, parse the command line */
+  program = argv[0];
+
+  while ( (o = getopt(argc, argv, "c:")) != -1 ) {
+    if ( o == 'c' ) {
+      console = optarg;
+    } else {
+      usage();
+    }
+  }
+
+  if ( argc-optind < 2 )
+    usage();
+
+  realroot = argv[optind];
+  init     = argv[optind+1];
+  initargs = argv+optind+1;
+
+  /* First, change to the new root directory */
+  if ( chdir(realroot) )
+    die("chdir to new root");
+
+  /* This is a potentially highly destructive program.  Take some
+     extra precautions. */
+
+  /* Make sure the current directory is not on the same filesystem
+     as the root directory */
+  if ( stat("/", &rst) || stat(".", &cst) )
+    die("stat");
+
+  if ( rst.st_dev == cst.st_dev )
+    die("current directory on the same filesystem as the root");
+  
+  /* The initramfs should have /init */
+  if ( stat("/init", &ist) || !S_ISREG(ist.st_mode) )
+    die("can't find /init on initramfs");
+
+  /* Make sure we're on a ramfs */
+  if ( statfs("/", &sfs) )
+    die("statfs /");
+  if ( sfs.f_type != RAMFS_MAGIC && sfs.f_type != TMPFS_MAGIC )
+    die("rootfs not a ramfs or tmpfs");
+
+  /* Okay, I think we should be safe... */
+
+  /* Delete rootfs contents */
+  if ( nuke_dir("/") )
+    die("nuking initramfs contents");
+
+  /* Overmount the root */
+  if ( mount(".", "/", NULL, MS_MOVE, NULL) )
+    die("overmounting root");
+  
+  /* chroot, chdir */
+  if ( chroot(".") || chdir("/") )
+    die("chroot");
+
+  /* Open /dev/console */
+  if ( (confd = open(console, O_RDWR)) < 0 )
+    die("opening console");
+  dup2(confd, 0);
+  dup2(confd, 1);
+  dup2(confd, 2);
+  close(confd);
+
+  /* Spawn init */
+  execv(init, initargs);
+  die(init);                   /* Failed to spawn init */
+}
diff --git a/rescue/linux/cdrom/yaird-0.0.5/include/config.h b/rescue/linux/cdrom/yaird-0.0.5/include/config.h
new file mode 100644 (file)
index 0000000..978c3cf
--- /dev/null
@@ -0,0 +1,26 @@
+/* include/config.h.  Generated by configure.  */
+/* include/config.h.in.  Generated from configure.in by autoheader.  */
+
+/* Define to nuke initramfs before moving to real root */
+/* #undef ENABLE_NUKE */
+
+/* Name of package */
+#define PACKAGE "yaird"
+
+/* Define to the address where bug reports for this package should be sent. */
+#define PACKAGE_BUGREPORT ""
+
+/* Define to the full name of this package. */
+#define PACKAGE_NAME ""
+
+/* Define to the full name and version of this package. */
+#define PACKAGE_STRING ""
+
+/* Define to the one symbol short name of this package. */
+#define PACKAGE_TARNAME ""
+
+/* Define to the version of this package. */
+#define PACKAGE_VERSION ""
+
+/* Version number of package */
+#define VERSION "0.0.5"
diff --git a/rescue/linux/cdrom/yaird-0.0.5/include/config.h.in b/rescue/linux/cdrom/yaird-0.0.5/include/config.h.in
new file mode 100644 (file)
index 0000000..88f063d
--- /dev/null
@@ -0,0 +1,25 @@
+/* include/config.h.in.  Generated from configure.in by autoheader.  */
+
+/* Define to nuke initramfs before moving to real root */
+#undef ENABLE_NUKE
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Version number of package */
+#undef VERSION
diff --git a/rescue/linux/cdrom/yaird-0.0.5/include/stamp-h1 b/rescue/linux/cdrom/yaird-0.0.5/include/stamp-h1
new file mode 100644 (file)
index 0000000..b330768
--- /dev/null
@@ -0,0 +1 @@
+timestamp for include/config.h
diff --git a/rescue/linux/cdrom/yaird-0.0.5/install-sh b/rescue/linux/cdrom/yaird-0.0.5/install-sh
new file mode 100755 (executable)
index 0000000..1a83534
--- /dev/null
@@ -0,0 +1,323 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2005-02-02.21
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# 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
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# 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.
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+chmodcmd="$chmodprog 0755"
+chowncmd=
+chgrpcmd=
+stripcmd=
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=
+dst=
+dir_arg=
+dstarg=
+no_target_directory=
+
+usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+-c         (ignored)
+-d         create directories instead of installing files.
+-g GROUP   $chgrpprog installed files to GROUP.
+-m MODE    $chmodprog installed files to MODE.
+-o USER    $chownprog installed files to USER.
+-s         $stripprog installed files.
+-t DIRECTORY  install into DIRECTORY.
+-T         report an error if DSTFILE is a directory.
+--help     display this help and exit.
+--version  display version info and exit.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
+"
+
+while test -n "$1"; do
+  case $1 in
+    -c) shift
+        continue;;
+
+    -d) dir_arg=true
+        shift
+        continue;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+        shift
+        shift
+        continue;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) chmodcmd="$chmodprog $2"
+        shift
+        shift
+        continue;;
+
+    -o) chowncmd="$chownprog $2"
+        shift
+        shift
+        continue;;
+
+    -s) stripcmd=$stripprog
+        shift
+        continue;;
+
+    -t) dstarg=$2
+       shift
+       shift
+       continue;;
+
+    -T) no_target_directory=true
+       shift
+       continue;;
+
+    --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
+       break;;
+  esac
+done
+
+if test -z "$1"; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call `install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+for src
+do
+  # Protect names starting with `-'.
+  case $src in
+    -*) src=./$src ;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    src=
+
+    if test -d "$dst"; then
+      mkdircmd=:
+      chmodcmd=
+    else
+      mkdircmd=$mkdirprog
+    fi
+  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 '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dstarg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+
+    dst=$dstarg
+    # Protect names starting with `-'.
+    case $dst in
+      -*) dst=./$dst ;;
+    esac
+
+    # If destination is a directory, append the input filename; won't work
+    # if double slashes aren't ignored.
+    if test -d "$dst"; then
+      if test -n "$no_target_directory"; then
+       echo "$0: $dstarg: Is a directory" >&2
+       exit 1
+      fi
+      dst=$dst/`basename "$src"`
+    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.
+
+  # 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
+
+    pathcomp=
+
+    while test $# -ne 0 ; do
+      pathcomp=$pathcomp$1
+      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
+      fi
+      pathcomp=$pathcomp/
+    done
+  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"; }
+
+  else
+    dstfile=`basename "$dst"`
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=$dstdir/_inst.$$_
+    rmtmp=$dstdir/_rm.$$_
+
+    # 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" &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
+      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
+      && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
+      && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
+
+    # Now rename the file to the real destination.
+    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 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
+          # support -f.
+
+          # Now remove or move aside any old file at destination location.
+          # We try this two ways since rm can't unlink itself on some
+          # systems and the destination file might be busy for other
+          # 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 \
+              || {
+                echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+                (exit 1); exit 1
+              }
+            else
+              :
+            fi
+          } &&
+
+          # Now rename the file to the real destination.
+          $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+        }
+    }
+  fi || { (exit 1); exit 1; }
+done
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+{
+  (exit 0); exit 0
+}
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/rescue/linux/cdrom/yaird-0.0.5/missing b/rescue/linux/cdrom/yaird-0.0.5/missing
new file mode 100755 (executable)
index 0000000..09edd88
--- /dev/null
@@ -0,0 +1,357 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+
+scriptversion=2005-02-08.22
+
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
+#   Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# 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.
+
+# 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.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+msg="missing on your system"
+
+case "$1" in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  # Exit code 63 means version mismatch.  This often happens
+  # when the user try to use an ancient version of a tool on
+  # a file that requires a minimum version.  In this case we
+  # we should proceed has if the program had been absent, or
+  # if --run hadn't been passed.
+  if test $? = 63; then
+    run=:
+    msg="probably too old"
+  fi
+  ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  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
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
+
+Send bug reports to <bug-automake@gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# 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
+  lex|yacc)
+    # Not GNU programs, they don't have --version.
+    ;;
+
+  tar)
+    if test -n "$run"; then
+       echo 1>&2 "ERROR: \`tar' requires --run"
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       exit 1
+    fi
+    ;;
+
+  *)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
+       # Could not run --version or --help.  This is probably someone
+       # running `$TOOL --version' or `$TOOL --help' to check whether
+       # $TOOL exists and not knowing $TOOL uses missing.
+       exit 1
+    fi
+    ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case "$1" in
+  aclocal*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case "$f" in
+      *:*) touch_files="$touch_files "`echo "$f" |
+                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+          sed 's/\.am$/.in/' |
+          while read f; do touch "$f"; done
+    ;;
+
+  autom4te)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, but is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.
+         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'`
+    if test -f "$file"; then
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo "#! /bin/sh"
+       echo "# Created by GNU Automake missing as a replacement of"
+       echo "#  $ $@"
+       echo "exit 0"
+       chmod +x $file
+       exit 1
+    fi
+    ;;
+
+  bison|yacc)
+    echo 1>&2 "\
+WARNING: \`$1' $msg.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         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
+        eval LASTARG="\${$#}"
+       case "$LASTARG" in
+       *.y)
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+           if [ -f "$SRCFILE" ]; then
+                cp "$SRCFILE" y.tab.c
+           fi
+           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+           if [ -f "$SRCFILE" ]; then
+                cp "$SRCFILE" y.tab.h
+           fi
+         ;;
+       esac
+    fi
+    if [ ! -f y.tab.h ]; then
+       echo >y.tab.h
+    fi
+    if [ ! -f y.tab.c ]; then
+       echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex|flex)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         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
+        eval LASTARG="\${$#}"
+       case "$LASTARG" in
+       *.l)
+           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+           if [ -f "$SRCFILE" ]; then
+                cp "$SRCFILE" lex.yy.c
+           fi
+         ;;
+       esac
+    fi
+    if [ ! -f lex.yy.c ]; then
+       echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+        you modified a dependency of a manual page.  You may need the
+        \`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
+       touch $file
+    else
+       test -z "$file" || exec >$file
+       echo ".ab help2man is required to generate this page"
+       exit 1
+    fi
+    ;;
+
+  makeinfo)
+    echo 1>&2 "\
+WARNING: \`$1' is $msg.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         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'`
+    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`
+      # ... 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
+    touch $file
+    ;;
+
+  tar)
+    shift
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+       case "$firstarg" in
+       *o*)
+           firstarg=`echo "$firstarg" | sed s/o//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+       case "$firstarg" in
+       *h*)
+           firstarg=`echo "$firstarg" | sed s/h//`
+           tar "$firstarg" "$@" && exit 0
+           ;;
+       esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and is $msg.
+         You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/ActionList.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/ActionList.pm
new file mode 100644 (file)
index 0000000..e63e689
--- /dev/null
@@ -0,0 +1,180 @@
+#!perl -w
+#
+# ActionList -- record and expand actions to be performed by the initrd image
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# Actions are represented by a hash, containing at least:
+#  - action
+#  - target
+#
+# Actions are added to the end of the list, but if an action
+# with same name and target already exists, the later action
+# is considered redundant and silently omited.
+#
+# The point of an action list is that it can be expanded to an Image,
+# an exact description of every file, directory and script that should
+# go on the initrd image.
+#
+# This expansion is driven by templates, where attributes from the
+# hash may be inserted in file names or script fragments.
+# There are attributes that are added automatically to every action:
+#  - version, the required kernel version.
+#
+
+use strict;
+use warnings;
+use Base;
+use Conf;
+use Template;
+use HTML::Template;
+
+package ActionList;
+use base 'Obj';
+
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->{actions} = [];
+}
+
+
+#
+# add -- add an action to the plan.
+#
+sub add {
+       my ($self, $action, $target, %hash ) = @_;
+
+       for my $a (@{$self->{actions}}) {
+               if ($a->{action} eq $action && $a->{target} eq $target) {
+                       Base::debug ("redundant action: $action, $target");
+                       return;
+               }
+       }
+
+       my $pairs = "";
+       for my $key (sort keys %hash) {
+               my $val = $hash{$key};
+               $pairs .= "$key=$val ";
+       }
+       Base::info ("action: $action, $target {$pairs}");
+
+       push @{$self->{actions}}, {
+               action => $action,
+               target => $target,
+               version => Conf::get('version'),
+               appVersion => Conf::get('appVersion'),
+               auxDir => Conf::get('auxDir'),
+               %hash
+               };
+}
+
+
+#
+# string -- render an action list.
+#
+sub string {
+       my $self = shift;
+       my $result = "";
+       for my $a (@{$self->{actions}}) {
+               my $action = $a->{action};
+               my $target = $a->{target};
+               my $pairs = "";
+               for my $key (sort keys %{$a}) {
+                       next if $key eq "action";
+                       next if $key eq "target";
+                       next if $key eq "version";
+                       next if $key eq "appVersion";
+                       next if $key eq "auxDir";
+                       my $val = $a->{$key};
+                       my $pairs .= "$key=$val ";
+               }
+               $result .= "\t\t$action $target {$pairs}\n";
+       }
+       return $result;
+}
+
+#
+# filter -- helper function to get rid of leading whitespace
+# in template lines.  Needed because of '#!/bin/dash' lines
+# in prologue.
+#
+my $filter = sub {
+       my $textref = shift;
+       $$textref =~ s/^\s+//mg;
+};
+
+
+#
+# expandFragment -- given a fragment of text, and a hash
+# of parameter settings, return the fragment with HTML::Template
+# expansion applied.
+# Don't die on bad parameters: caller cannot know which parameters
+# the template is willing to use.
+#
+sub expandFragment ($$) {
+       my ($fragment, $params) = @_;
+       my $htempl = HTML::Template->new (
+               scalarref => \$fragment,
+               die_on_bad_params => 0,
+               filter => $filter);
+       $htempl->param ($params);
+       my $result = $htempl->output();
+       return $result;
+}
+
+
+#
+# expand -- given an overall plan, return an initrd image specification.
+#
+sub expand {
+       my $self = shift;
+       my $image = Image->new();
+
+       for my $a (@{$self->{actions}}) {
+               my $action = $a->{action};
+               my $template = Template::template ($action);
+               Base::assert (defined ($template));
+
+               for my $file (@{$template->{files}}) {
+                       my $fileName = expandFragment ($file, $a);
+                       $image->addFile ($fileName);
+               }
+
+               for my $dir (@{$template->{directories}}) {
+                       my $dirName = expandFragment ($dir, $a);
+                       $image->addDirectory ($dirName);
+               }
+
+               for my $tree (@{$template->{trees}}) {
+                       my $treeName = expandFragment ($tree, $a);
+                       $image->addTree ($treeName);
+               }
+
+               for my $scriptTName (sort keys %{$template->{scripts}}) {
+                       my $scriptName = expandFragment ($scriptTName, $a);
+                       my $tContent = $template->{scripts}{$scriptTName};
+                       my $content = expandFragment ($tContent, $a);
+                       $image->addScriptLine ($scriptName, $content);
+               }
+
+       }
+
+       return $image;
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/ActiveBlockDev.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/ActiveBlockDev.pm
new file mode 100644 (file)
index 0000000..102f2c9
--- /dev/null
@@ -0,0 +1,106 @@
+#!perl -w
+#
+# ActiveBlockDev -- a single blockdev, as found in /sys
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# The blockdev can be a whole device or a partition.
+# descriptors contain:
+# - name, path as found in /sys (sda, sda/sda1)
+# - devno, as found in /sys (8:1)
+# - parent, undef for whole device, maj:minor of parent otherwise
+# - hw, path to underlying hardware device,
+#              eg an ide controller somewhere on a PCI bus.
+#              this is a path relative to /sys/devices,
+#              and can be undef (eg for ram disk)
+# - special, a block special file giving access to the device
+#              in the currently running kernel, or undef.
+# - yspecial, a block special file giving access to the device
+#              in the generated initrd image.  This often needs
+#              a mknod on the generated image.  It's not convenient
+#              to use the previous special, since that may be in
+#              a subdirectory unavailable on the initrd image.
+#              It's also not exactly /dev/$name, since LVM logical
+#              volumes follow another convention.
+# - partitions, list of partitions contained in the device.
+#              these partitions are also ActiveBlockDevs.
+#
+# NOTE: the partition list relies on ActiveBlockDevTab making
+# a complete scan of all block devices, each partition registering
+# itself as partition with the parent device.
+#
+use strict;
+use warnings;
+use BlockSpecialFileTab;
+use LvmTab;
+package ActiveBlockDev;
+use base 'Obj';
+
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->takeArgs ('name', 'devno', 'parent', 'hw');
+       $self->{partitions} = [];
+       if (defined ($self->parent)) {
+               push @{$self->parent->partitions}, $self;
+       }
+
+       my $bfs = BlockSpecialFileTab::findByDevno($self->devno);
+       if (defined ($bfs)) {
+               $self->{special} = $bfs->path;
+       }
+       else {
+               $self->{special} = undef;
+       }
+}
+
+sub name       { return $_[0]->{name}; }
+sub devno      { return $_[0]->{devno}; }
+sub parent     { return $_[0]->{parent}; }
+sub hw         { return $_[0]->{hw}; }
+sub special    { return $_[0]->{special}; }
+sub partitions { return $_[0]->{partitions}; }
+
+sub string {
+       my $self = shift;
+       my $name = $self->name;
+       my $devno = $self->devno;
+       my $parent = (defined($self->parent) ? $self->parent->name : "--");
+       my $hw = ($self->hw or "--");
+       my $special = ($self->special or "--");
+       my $yspecial = ($self->yspecial or "--");
+       return "$name($devno) in $parent at $hw via $special becomes $yspecial";
+}
+
+sub yspecial {
+       my $self = shift;
+       my $name = $self->name;
+       my $devno = $self->devno;
+       my $yspecial = "/dev/$name";
+       my $lv = LvmTab::findLVByDevno ($devno);
+       if (defined ($lv)) {
+               $yspecial = $lv->lvnam;
+       }
+       return $yspecial;
+}
+
+sub hasPartitions {
+       my $self = shift;
+       return ($#{$self->partitions} >= 0);
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/ActiveBlockDevTab.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/ActiveBlockDevTab.pm
new file mode 100644 (file)
index 0000000..9168ee6
--- /dev/null
@@ -0,0 +1,149 @@
+#!perl -w
+#
+# ActiveBlockDevTab -- descriptors of all block devices in /sys
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+use strict;
+use warnings;
+use Base;
+use Conf;
+use ActiveBlockDev;
+package ActiveBlockDevTab;
+
+
+my $abdTab = undef;
+my $abdList = undef;
+
+
+sub init () {
+       if (defined ($abdTab)) {
+               return;
+       }
+       $abdTab = {};
+
+       my $blockdir;
+       my $blockPath = Conf::get('sysFs') . "/block";
+       if (! opendir ($blockdir, "$blockPath")) {
+               Base::fatal ("can't open directory $blockPath");
+       }
+       while (defined (my $entry = readdir ($blockdir))) {
+               next if $entry eq ".";
+               next if $entry eq "..";
+               oneBlockDev($blockPath, $entry);
+       }
+       if (! closedir ($blockdir)) {
+               Base::fatal ("could not read directory $blockPath");
+       }
+
+       $abdList = [values %{$abdTab}];
+}
+
+sub oneBlockDev ($$) {
+       my ($blockPath, $entry) = @_;
+       my $devno = Base::getStringFile("$blockPath/$entry/dev");
+       if (exists ($abdTab->{$devno})) {
+               Base::fatal ("found duplicate devno in $blockPath/$entry");
+       }
+       my $hw = readlink("$blockPath/$entry/device");
+       # failure results in undef, which is exactly how
+       # we want to represent absence of a hw device.
+       if (defined ($hw)) {
+               unless ($hw =~ s!^(\.\./)+devices/!!) {
+                       # imagine localised linux (/sys/geraete ...)
+                       Base::fatal ("bad device link in $blockPath/$entry");
+               }
+       }
+       my $descr = ActiveBlockDev->new (
+               name => $entry,
+               devno => $devno,
+               parent => undef,
+               hw => $hw,
+               );
+       $abdTab->{$devno} = $descr;
+
+       #
+       # Scan partitions.
+       # Note that these are only visible after someone
+       # read the a block from the device.
+       #
+       my $devdir;
+       if (! opendir ($devdir, "$blockPath/$entry")) {
+               Base::fatal ("can't open directory $blockPath/$entry");
+       }
+       while (defined (my $partition = readdir ($devdir))) {
+               next if $partition eq ".";
+               next if $partition eq "..";
+               next unless -d "$blockPath/$entry/$partition";
+
+               # there can be subdirectories in a blockdev
+               # other than partitions; eg /sys/block/sda/queue.
+               # a partition has major:minor, so has a dev file.
+               next unless -f "$blockPath/$entry/$partition/dev";
+
+               onePartition($blockPath, $entry, $partition, $descr);
+       }
+       if (! closedir ($devdir)) {
+               Base::fatal ("could not read directory $blockPath/$entry");
+       }
+}
+
+sub onePartition ($$$$) {
+       my ($blockPath, $entry, $partition, $parent) = @_;
+       my $dev = Base::getStringFile("$blockPath/$entry/$partition/dev");
+       if (exists ($abdTab->{$dev})) {
+               Base::fatal ("found duplicate devno in $blockPath/$entry/$partition");
+       }
+       $abdTab->{$dev} = ActiveBlockDev->new (
+               name => $partition,
+               devno => $dev,
+               parent => $parent,
+               hw => undef,
+               );
+}
+
+#
+# all -- return list of all known active block devices.
+#
+sub all        () {
+       init;
+       return $abdList;
+}
+
+#
+# findByDevno -- given devno in format maj:min,
+# return corresponding descriptor or undef.
+#
+sub findByDevno ($) {
+       my ($devno) = @_;
+       init;
+       return $abdTab->{$devno};
+}
+
+#
+# findByPath -- given path to block device file in /dev,
+# return corresponding descriptor or undef.
+#
+sub findByPath ($) {
+       my ($path) = @_;
+       my $devno = Base::devno ($path);
+       if (! defined ($devno)) {
+               return undef;
+       }
+       return findByDevno ($devno);
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/Base.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/Base.pm
new file mode 100644 (file)
index 0000000..f8aa4c0
--- /dev/null
@@ -0,0 +1,299 @@
+#!perl -w
+#
+# Base -- support stuff
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# setProgName -- what label to use in further messages.
+# setVerbose -- if true, print info
+# setDebug -- if true, print info and debug
+# setQuiet -- if true, don't print warnings
+#
+# debug -- irritating noise
+# info -- reassuring noise
+# warning -- not good, but processing continues, exit status unaffected
+# error -- not good, processing continues, exit status non-zero,
+#              program should not make changes to environment
+#              such as writing output files.
+# fatal -- not good, exit immediately with non-zero status.
+# bug -- fatal error in the program, not environment.
+# assert -- if condition not met, it's a bug.
+# bye -- exit now.
+#
+# Also routines to
+# - read content of one-line files
+# - get device number from block or character device files
+# - interpret symbolic links
+# - interpret pathnames
+#
+use strict;
+use warnings;
+package Base;
+
+
+my $progName = "[app]";
+sub setProgName ($) { $progName = $_[0]; }
+
+my $verbose = 0;
+sub setVerbose ($) { $verbose = $_[0]; }
+
+my $debug = 0;
+sub setDebug ($) { $debug = $_[0]; }
+
+my $quiet = 0;
+sub setQuiet ($) { $quiet = $_[0]; }
+
+
+my $exitCode = 0;
+
+
+sub debug ($) {
+       my $msg = shift;
+       if ($debug) {
+               print "$progName:D: $msg\n";
+       }
+}
+
+sub info ($) {
+       my $msg = shift;
+       if ($verbose || $debug) {
+               print "$progName: $msg\n";
+       }
+}
+
+sub warning ($) {
+       my $msg = shift;
+       if (! $quiet) {
+               print STDERR "$progName warning: $msg\n";
+       }
+}
+
+sub error ($) {
+       my $msg = shift;
+       print STDERR "$progName error: $msg\n";
+       $exitCode = 1;
+
+}
+
+sub fatal ($) {
+       my $msg = shift;
+       error ($msg . " (fatal)");
+       bye();
+}
+
+sub bug ($) {
+       my $msg = shift;
+       my ($package, $file, $line) = caller;
+       fatal ($msg . " (internal $file:$line)");
+}
+
+sub assert ($) {
+       my $cond = shift;
+       my ($package, $file, $line) = caller;
+       if (! $cond) {
+               fatal ("assert failed (internal $file:$line)");
+       }
+}
+
+sub bye () {
+       exit ($exitCode);
+}
+
+
+#
+# getStringFile -- return contents of a file that must contain
+# a single line, dropping optional trailing space, or die.
+#
+sub getStringFile ($) {
+       my ($filename) = @_;
+       if (! open (F, "<", "$filename")) {
+               Base::fatal ("can't open $filename");
+       }
+       my $line = <F>;
+       if (! defined ($line)) {
+               Base::fatal ("empty file $filename");
+       }
+       chomp $line;
+       if (defined (<F>)) {
+               Base::fatal ("extra lines in $filename");
+       }
+       if (! close (F)) {
+               Base::fatal ("could not read $filename");
+       }
+       return $line;
+}
+
+
+#
+# getHexFile -- given path to file, return content interpreted as hex number.
+#
+sub getHexFile ($) {
+       my ($filename) = @_;
+       my $content = getStringFile ($filename);
+       if ($content !~ /^(0x)?[0-9a-fA-F]+$/) {
+               fatal ("not a hex file: $filename");
+       }
+       return hex($content);
+}
+
+
+#
+# devno -- given pathname to a device, return "maj:min" or undef.
+# symlinks are resolved implicitly.
+#
+sub devno ($) {
+       my ($path) = @_;
+       if ( ! (-b $path || -c _)) {
+               return undef;
+       }
+
+       my @fields = stat _;
+       if ($#fields != 12) {
+               Base::fatal ("stat failed on device $path");
+       }
+       # from 2.6.10-rc2, kdev.h, backward compatible.
+       my $devno = $fields[6];
+       my $major = ($devno & 0xfff00) >> 8;
+       my $minor = ($devno & 0xff) | (($devno >> 12) & 0xfff00);
+       return "$major:$minor";
+}
+
+
+#
+# expandLink -- given a path to a symlink file,
+# return a path to what it points to.
+#
+sub expandLink ($) {
+       my ($path) = @_;
+       Base::assert (-l $path);
+       my $target = readlink("$path");
+
+       if (isAbsolute ($target)) {
+               return canon ($target);
+       }
+       my $base = dirname ($path);
+       return canon ("$base/$target");
+}
+
+
+#
+# isAbsolute -- given a path, return true iff it starts at root.
+#
+sub isAbsolute ($) {
+       my ($path) = @_;
+       return $path =~ /^\//;
+}
+
+
+#
+# canon -- given path, return copy with redundant stuff removed.
+#
+sub canon ($) {
+       my ($path) = @_;
+
+       if ($path eq '') {
+               $path = '.';
+       }
+       if ($path =~ m![^/]/+$!) {
+               # drop trailing slashes, except in path like ////
+               $path =~ s!/+$!!;
+       }
+
+       # iterate over components (ignoring duplicate slashes)
+       # interpret a null list as 'current directory'
+       # interpret a leading '' in list as absolute path
+       # . can be dropped
+       # .. causes dropping of last element of list, but:
+       # (1) /.. => / 
+       # (2) ../.. is not dropped.
+       # (3) ./.. => ..
+       my @result = ();
+       for my $component (split (/\/+/, $path)) {
+               if ($component eq '.') {
+                       next;
+               }
+               elsif ($component eq '..') {
+                       if ($#result == -1) {
+                               push @result, '..';
+                       }
+                       elsif ($#result == 0 && $result[0] eq '') {
+                               next;
+                       }
+                       elsif ($result[$#result] eq '..') {
+                               push @result, '..';
+                       }
+                       else {
+                               pop @result;
+                       }
+               }
+               else {
+                       push @result, $component;
+               }
+       }
+       if ($#result == -1) {
+               return ".";
+       }
+       elsif ($#result == 0 && $result[0] eq '') {
+               return '/';
+       }
+       else {
+               return join ('/', @result);
+       }
+}
+
+
+#
+# basename -- given path, return final component of canonified path
+#
+sub basename ($) {
+       my ($path) = @_;
+       my $t = canon ($path);
+       if ($t =~ m!.*/([^/]+)$!) {
+               # something is after the slash,
+               # the simple case
+               return $1;
+       }
+       elsif ($t !~ m!/!) {
+               # basename aap => aap
+               return $t;
+       }
+       else {
+               return '/';
+       }
+}
+
+
+#
+# dirname -- given path, return all but final component of canonified path
+#
+sub dirname ($) {
+       my ($path) = @_;
+       my $t = canon ($path);
+       if ($t =~ m!(.+)/[^/]+$!) {
+               # something before and after the slash
+               return $1;
+       }
+       elsif ($t !~ m!/!) {
+               # dirname aap => .
+               # but also dirname .. => .
+               return '.';
+       }
+       else {
+               return '/';
+       }
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/Blacklist.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/Blacklist.pm
new file mode 100644 (file)
index 0000000..9da5377
--- /dev/null
@@ -0,0 +1,100 @@
+#!perl -w
+#
+# Blacklist -- encapsulate /etc/hotplug/blacklist
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# isBlacklisted -- module occurs in one of the hotplug blacklists.
+# normalise underscore to hyhpen before comparing.
+#
+
+use strict;
+use warnings;
+use Base;
+use Conf;
+package Blacklist;
+
+my $blackMap = undef;
+my $blackList = undef;
+
+sub init () {
+       if (defined ($blackList)) {
+               return;
+       }
+       my $blackMap = {};
+       my $hotplugDir = Conf::get ('hotplug');
+       parseBlackList ("$hotplugDir/blacklist");
+
+       my $dir;
+       my $dirName = "$hotplugDir/blacklist.d";
+       if (-d $dirName) {
+               # blacklist.d does not have to exist (Debian
+               # has it, Fedora not), but if it exists,
+               # it must be readable.
+               if (! opendir ($dir, $dirName)) {
+                       Base::fatal ("can't open directory $dirName");
+               }
+               while (defined(my $entry = readdir($dir))) {
+                       if ( -f "$dirName/$entry" ) {
+                               parseBlackList ("$dirName/$entry");
+                       }
+               }
+               if (! closedir ($dir)) {
+                       Base::fatal ("could not read directory $dirName");
+               }
+       }
+
+       my $blackList = [ keys %{$blackMap} ];
+}
+
+sub parseBlackList ($) {
+       my ($fileName) = @_;
+       if (! open (IN, "<", "$fileName")) {
+               Base::fatal ("can't open blacklist $fileName");
+       }
+       while (defined (my $line = <IN>)) {
+               chomp $line;
+               $line =~ s/#.*//;
+               $line =~ s/^\s+//;
+               $line =~ s/\s+$//;
+               $line =~ s/_/-/g;
+               if ($line eq "") {
+                       next;
+               }
+               if ($line !~ /^[a-zA-Z0-9-]+$/) {
+                       Base::fatal ("bad line in blacklist $fileName: $line");
+               }
+               $blackMap->{$line}++;
+       }
+       if (! close (IN)) {
+               Base::fatal ("could not read blacklist $fileName");
+       }
+}
+
+sub all        () {
+       init;
+       return $blackList;
+}
+
+sub isBlacklisted ($) {
+       my ($module) = @_;
+       init;
+       $module =~ s/_/-/g;
+       return exists ($blackMap->{$module});
+}
+
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/BlockSpecialFile.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/BlockSpecialFile.pm
new file mode 100644 (file)
index 0000000..2bda007
--- /dev/null
@@ -0,0 +1,45 @@
+#!perl -w
+#
+# BlockSpecialFile -- descriptor for single block special file found in /dev
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# this can be a whole device or a partition.  Descriptors contain:
+# - path, path as found in /dev
+# - devno, eg 8:1
+#
+use strict;
+use warnings;
+package BlockSpecialFile;
+use base 'Obj';
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->takeArgs ('path', 'devno');
+}
+
+sub devno      { return $_[0]->{devno}; }
+sub path       { return $_[0]->{path}; }
+
+sub string {
+       my $self = shift;
+       my $path = $self->path;
+       my $devno = $self->devno;
+       return "$path($devno)";
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/BlockSpecialFileTab.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/BlockSpecialFileTab.pm
new file mode 100644 (file)
index 0000000..f10cc4c
--- /dev/null
@@ -0,0 +1,101 @@
+#!perl -w
+#
+# BlockSpecialFileTab -- block special files found in /dev
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# This provides access to a table of descriptors, each containing
+# path and devno.
+#
+# findByDevno -- find a descriptor with devno (there may be others)
+# all -- list of all descriptors (may have duplicate devnos)
+#
+use strict;
+use warnings;
+use Conf;
+use BlockSpecialFile;
+package BlockSpecialFileTab;
+
+
+my $bsfTab = undef;
+my $bsfList = undef;
+
+
+sub walkBlockSpecialFiles ($);
+
+sub init () {
+       if (defined ($bsfTab)) {
+               return;
+       }
+       $bsfTab = {};
+       my $devDir = Conf::get('dev');
+       walkBlockSpecialFiles ($devDir);
+       $bsfList = [ values %{$bsfTab} ];
+}
+
+sub walkBlockSpecialFiles ($) {
+       my ($dirName) = @_;
+       my $dir;
+       if (! opendir ($dir, $dirName)) {
+               Base::fatal ("can't open directory $dirName");
+       }
+       while (defined(my $entry = readdir($dir))) {
+               next if $entry eq ".";
+               next if $entry eq "..";
+               my $path = "$dirName/$entry";
+               if (-l $path) {
+                       next;
+               }
+               elsif (-b _) {
+                       my $devno = Base::devno ($path);
+
+                       # this may overwrite earlier entries;
+                       # unimportant since both pathnames
+                       # access the same device.
+                       $bsfTab->{$devno} = BlockSpecialFile->new(
+                               path => $path,
+                               devno => $devno);
+               }
+               elsif (-d _) {
+                       walkBlockSpecialFiles ($path);
+               }
+       }
+       if (! closedir ($dir)) {
+               Base::fatal ("could not read directory $dirName");
+       }
+}
+
+
+#
+# findByDevno -- return a working path given major:minor or undef.
+# Note that there may be other files accessing the same device.
+#
+sub findByDevno ($) {
+       my ($devno) = @_;
+       init;
+       return $bsfTab->{$devno};
+}
+
+#
+# all -- return list of all descriptors.
+#
+sub all        () {
+       init;
+       return $bsfList;
+}
+
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/Conf.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/Conf.pm
new file mode 100644 (file)
index 0000000..9e79201
--- /dev/null
@@ -0,0 +1,95 @@
+#!perl -w
+#
+# Conf -- configured path names and such.
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# You can get and set configuration items by name,
+# with the following restrictions:
+# - only get and set known keys
+# - after first get, no further set is allowed.
+#
+# Defaults are packaged as subs, so that you can change
+# one setting and have the change ripple through in other
+# settings.
+#
+use strict;
+use warnings;
+use Base;
+package Conf;
+
+sub get($);
+
+#
+# Default values for configuration; if there is no default,
+# it's not a known parameter, and you cannot modify it.
+#
+my $defaults = {
+       version         => sub { my $v = `uname -r`; chomp $v; $v; },
+       libModules      => sub { "/lib/modules"; },
+       kernConf        => sub { "/boot/config-"
+                               . get('version'); },
+       modDep          => sub { get('libModules')
+                               . '/' . get('version')
+                               . '/modules.dep'; },
+       usbMap          => sub { get('libModules')
+                               . '/' . get('version')
+                               . '/modules.usbmap'; },
+       pciMap          => sub { get('libModules')
+                               . '/' . get('version')
+                               . '/modules.pcimap'; },
+       modDir          => sub { get('libModules')
+                               . '/' . get('version')
+                               . '/kernel'; },
+       sysFs           => sub { "/sys"; },
+       procFs          => sub { "/proc"; },
+       #delete next 2?
+       sysBlock        => sub { get ('sysFs') . "/block"; },
+       sysDevices      => sub { get ('sysFs') . "/devices"; },
+       dev             => sub { "/dev"; },
+       fstab           => sub { "/etc/fstab"; },
+       hotplug         => sub { "/etc/hotplug"; },
+       appVersion      => sub { "0.0.5"; },
+       auxDir          => sub { "/usr/local/lib/yaird/exec"; },
+};
+
+
+my $overrides = {};            # config values where default is overridden,
+                               # presumably via command line.
+my $used = {};                 # if a key exists, the config value has
+                               # been used, and it no longer can be changed.
+
+sub get ($) {
+       my ($key) = @_;
+       my $dflt = $defaults->{$key};
+       Base::assert (defined ($dflt));
+       $used->{$key}++;
+       my $ovr = $overrides->{$key};
+       if (defined ($ovr)) {
+               return $ovr;
+       }
+       return &{$dflt}();
+}
+
+sub set ($$) {
+       my ($key, $value) = @_;
+       my $dflt = $defaults->{$key};
+       Base::assert (defined ($dflt));
+       Base::assert (! defined ($used->{$key}));
+       $overrides->{$key} = $value;
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/Conf.pm.in b/rescue/linux/cdrom/yaird-0.0.5/perl/Conf.pm.in
new file mode 100644 (file)
index 0000000..fbe5281
--- /dev/null
@@ -0,0 +1,95 @@
+#!perl -w
+#
+# Conf -- configured path names and such.
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# You can get and set configuration items by name,
+# with the following restrictions:
+# - only get and set known keys
+# - after first get, no further set is allowed.
+#
+# Defaults are packaged as subs, so that you can change
+# one setting and have the change ripple through in other
+# settings.
+#
+use strict;
+use warnings;
+use Base;
+package Conf;
+
+sub get($);
+
+#
+# Default values for configuration; if there is no default,
+# it's not a known parameter, and you cannot modify it.
+#
+my $defaults = {
+       version         => sub { my $v = `uname -r`; chomp $v; $v; },
+       libModules      => sub { "/lib/modules"; },
+       kernConf        => sub { "/boot/config-"
+                               . get('version'); },
+       modDep          => sub { get('libModules')
+                               . '/' . get('version')
+                               . '/modules.dep'; },
+       usbMap          => sub { get('libModules')
+                               . '/' . get('version')
+                               . '/modules.usbmap'; },
+       pciMap          => sub { get('libModules')
+                               . '/' . get('version')
+                               . '/modules.pcimap'; },
+       modDir          => sub { get('libModules')
+                               . '/' . get('version')
+                               . '/kernel'; },
+       sysFs           => sub { "/sys"; },
+       procFs          => sub { "/proc"; },
+       #delete next 2?
+       sysBlock        => sub { get ('sysFs') . "/block"; },
+       sysDevices      => sub { get ('sysFs') . "/devices"; },
+       dev             => sub { "/dev"; },
+       fstab           => sub { "/etc/fstab"; },
+       hotplug         => sub { "/etc/hotplug"; },
+       appVersion      => sub { "@VERSION@"; },
+       auxDir          => sub { "@AUXDIR@"; },
+};
+
+
+my $overrides = {};            # config values where default is overridden,
+                               # presumably via command line.
+my $used = {};                 # if a key exists, the config value has
+                               # been used, and it no longer can be changed.
+
+sub get ($) {
+       my ($key) = @_;
+       my $dflt = $defaults->{$key};
+       Base::assert (defined ($dflt));
+       $used->{$key}++;
+       my $ovr = $overrides->{$key};
+       if (defined ($ovr)) {
+               return $ovr;
+       }
+       return &{$dflt}();
+}
+
+sub set ($$) {
+       my ($key, $value) = @_;
+       my $dflt = $defaults->{$key};
+       Base::assert (defined ($dflt));
+       Base::assert (! defined ($used->{$key}));
+       $overrides->{$key} = $value;
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/FsEntry.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/FsEntry.pm
new file mode 100644 (file)
index 0000000..8d8a43f
--- /dev/null
@@ -0,0 +1,101 @@
+#!perl -w
+#
+# FsEntry -- encapsulate a single entry in /etc/fstab
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+use strict;
+use warnings;
+use LabeledPartitionTab;
+package FsEntry;
+use base 'Obj';
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->takeArgs ('dev', 'mnt', 'type', 'opts');
+}
+
+sub dev                { return $_[0]->{dev}; }
+sub mnt                { return $_[0]->{mnt}; }
+sub type       { return $_[0]->{type}; }
+sub opts       { return $_[0]->{opts}; }
+
+sub string {
+       my $self = shift;
+       my $dev = $self->dev();
+       my $mnt = $self->mnt();
+       my $type = $self->type();
+       my $opts = $self->opts()->string();
+       return "$mnt at $dev ($type) with $opts";
+}
+
+
+#
+# isRequiredAtBoot -- To be mounted at boot time with mount -a.
+# This does not imply the initrd should already mount it.
+#
+sub isRequiredAtBoot {
+       my $self = shift;
+       return 0 if ($self->type eq "ignore");
+       return 0 if ($self->opts->exists("noauto"));
+       return 1;
+}
+
+
+#
+# blockDevPath -- return blockdev pathname for an fstab entry.
+# must resolve LABEL= and UUID=.  Note that LVM and raid devices
+# may be implemented on top of multiple other devices; this returns
+# only the top device.
+#
+# Returns undef if first field of fstab entry does not point to
+# an existing block device.  Possible reasons:
+# - filesystem does not have underlying device, such as /proc.
+# - filesystem has a non-file underlying resource, such as NFS
+# - garbage line with missing blockdev
+# - filesystem has a plain file as underlying resource;
+#   this can be a loopback file system, or swap to plain file.
+#
+# NOTE: We should support the last case, but for now that's too difficult:
+# imagine /a/b/c, where /a is reiserfs, b is a symlink to /d (an NFS
+# filesystem), and /d/c is a symlink to /e/f, where /e is a ramdisk.)
+#
+sub blockDevPath {
+       my $self = shift;
+       my $dev = $self->dev();
+       if ($dev =~  /^\//) {
+               if (-f $dev && $self->opts->exists('loop')) {
+                       return undef;
+               }
+               if (-f $dev && $self->type eq "swap") {
+                       return undef;
+               }
+               if (-b $dev) {
+                       return $dev;
+               }
+       }
+       elsif ($dev =~ /^LABEL=(.*)/) {
+               return LabeledPartitionTab::findPathByLabel ($1);
+       }
+       elsif ($dev =~ /^UUID=(.*)/) {
+               return LabeledPartitionTab::findPathByUuid ($1);
+       }
+       return undef;
+}
+
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/FsOpts.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/FsOpts.pm
new file mode 100644 (file)
index 0000000..b40fb0e
--- /dev/null
@@ -0,0 +1,107 @@
+#!perl -w
+#
+# FsOpts -- encapsulate the options in an FsEntry
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+use strict;
+use warnings;
+package FsOpts;
+use base 'Obj';
+
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+
+       $self->takeArgs ('string');
+       my @optlist = split (/,/, $self->{string});
+       my $opthash = {};
+       for my $opt (@optlist) {
+               if ($opt =~ /^(.*)=(.*)$/) {
+                       $opthash->{$1} = $2;
+               }
+               else {
+                       $opthash->{$opt} = undef;
+               }
+       }
+       $self->{optsHash} = $opthash;
+}
+
+#
+# exists -- the option occurs, possibly with undef value.
+#
+sub exists {
+       my ($self, $optnam) = @_;
+       return exists ($self->{optsHash}{$optnam});
+}
+
+sub get {
+       my ($self, $optnam) = @_;
+       return $self->{optsHash}{$optnam};
+}
+
+sub string {
+       my $self = shift;
+       my $opts = $self->{optsHash};
+       my @optlist = ();
+       for my $key (sort keys %{$opts}) {
+               push @optlist, ("$key=" . ($opts->{$key} or "-"));
+       }
+       return join (',', @optlist);
+}
+
+
+#
+# cmdLineVersion -- return a version of all options suitable for
+# a mount command line.
+# Note that some options in fstab can only be used in fstab,
+# not in scripts.
+#
+sub cmdLineVersion {
+       my $self = shift;
+       my $opts = $self->{optsHash};
+
+       my @cmdLine = ();
+       for my $key (sort keys %{$opts}) {
+               next if $key eq 'auto';
+               next if $key eq 'noauto';
+               next if $key eq 'nouser';
+               next if $key eq 'owner';
+               next if $key eq 'user';
+               next if $key eq 'users';
+               next if $key eq 'defaults';
+               my $val = $opts->{$key};
+               if (defined ($val)) {
+                       push @cmdLine, "$key=$val";
+               }
+               else {
+                       push @cmdLine, "$key";
+               }
+       }
+       if ($#cmdLine == -1) {
+               return "";
+       }
+       else {
+               # protect against logdev=John's disk.
+               my $cmdLine = join (',', @cmdLine);
+               $cmdLine =~ s/(['\\])/\\$1/g; 
+               return "-o '$cmdLine'";
+       }
+}
+
+1;
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/FsTab.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/FsTab.pm
new file mode 100644 (file)
index 0000000..257551b
--- /dev/null
@@ -0,0 +1,121 @@
+#!perl -w
+#
+# FsTab -- encapsulate /etc/fstab.
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+use strict;
+use warnings;
+use Base;
+use Conf;
+use FsOpts;
+use FsEntry;
+package FsTab;
+
+
+my $fsTab = undef;
+
+
+sub init () {
+       if (defined ($fsTab)) {
+               return;
+       }
+       $fsTab = [];
+       my $name = Conf::get('fstab');
+       if (! open (IN, "<", "$name")) {
+               Base::fatal ("can't read $name");
+       }
+       while (defined (my $line = <IN>)) {
+               $line =~ s/^\s+//;
+               next if $line =~ /^#/;  # comment line
+               next if $line eq "";    # empty line
+               my @fields = split (/\s+/, $line, 999);
+               if ($#fields < 6) {
+                       # no test for extra fields;
+                       # the mount command allows that.
+                       Base::fatal ("malformed line in $name");
+               }
+               if ($fields[2] eq "swap") {
+                       if (($fields[1] ne "none") &&($fields[1] ne "swap")) {
+                               Base::fatal ("bad swap entry in $name");
+                       }
+               }
+               
+               my $opts = FsOpts->new (
+                       string => unmangle($fields[3]));
+
+               my $descr = FsEntry->new(
+                       dev => unmangle($fields[0]),
+                       mnt => unmangle($fields[1]),
+                       type => unmangle($fields[2]),
+                       opts => $opts,
+                       );
+               push @{$fsTab}, $descr;
+       }
+       if (! close (IN)) {
+               Base::fatal ("could not read $name");
+       }
+}
+
+sub all        () {
+       init;
+       return $fsTab;
+}
+
+sub findByMountPoint ($) {
+       my ($mnt) = @_;
+       my $result;
+       for my $entry (@{FsTab::all()}) {
+               if ($entry->mnt() eq $mnt) {
+                       if (defined ($result)) {
+                               Base::fatal ("duplicate mount point in fstab $mnt");
+                       }
+                       $result = $entry;
+               }
+       }
+       if (! defined ($result)) {
+               Base::fatal ("mount point not in fstab: $mnt");
+       }
+       return $result;
+}
+
+sub findByDevName ($) {
+       my ($dev) = @_;
+       my $result;
+       for my $entry (@{FsTab::all()}) {
+               if ($entry->dev() eq $dev) {
+                       if (defined ($result)) {
+                               Base::fatal ("duplicate device name in fstab: $dev");
+                       }
+                       $result = $entry;
+               }
+       }
+       if (! defined ($result)) {
+               Base::fatal ("device name not in fstab: $dev");
+       }
+       return $result;
+}
+
+# replace octal escapes
+sub unmangle ($) {
+       my ($string) = @_;
+       while ($string =~ /\\([0-7]{3})/) {
+               $string = $` . chr (oct ($1)) . $';
+       }
+       return $string;
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/Hardware.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/Hardware.pm
new file mode 100644 (file)
index 0000000..adb0551
--- /dev/null
@@ -0,0 +1,218 @@
+#!perl -w
+#
+# Hardware -- find modules for a thingy in /devices.
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+#
+# Method: walk up the path, and for everything you recognise,
+# prepend the appropriate module.
+# As an example, for a usb-stick connected via a hub to a pci card,
+# you'l need usb-storage, a usb protocol driver, and some usb module.
+#
+use strict;
+use warnings;
+use Conf;
+use IdeDev;
+use ScsiDev;
+use PciDev;
+use PciTab;
+use UsbDev;
+use UsbTab;
+package Hardware;
+
+
+sub moduleList ($) {
+       my ($path) = @_;
+       my $result = [];
+       my @components = split (/\/+/, $path);
+       my $devicesPath = Conf::get ('sysDevices');
+       for my $i (0 .. $#components) {
+               my $abspath = $devicesPath
+                       . "/" . join ('/', @components[0 .. $i]);
+               my $modules = undef;
+               if ($abspath =~ m!/pci[0-9a-f]{4}:[0-9a-f]{2}$!) {
+                       # PCI bus; harmless
+               }
+               elsif (-f "$abspath/subsystem_vendor") {
+                       # PCI function on a slot.
+                       my $dev = PciDev->new (path => $abspath);
+                       $modules = PciTab::find ($dev);
+                       push @{$modules}, @{addPciSiblings ($abspath)};
+               }
+
+               elsif (-f "$abspath/bDeviceClass"
+                       || -f "$abspath/bInterfaceClass")
+               {
+                       #
+                       # USB.  Every component in the path
+                       # "usb1/1-4/1-4.4/1-4.4:1.0" has either
+                       # a deviceClass or interfaceClass attribute.
+                       #
+                       my $dev = UsbDev->new (path => $abspath);
+                       $modules = UsbTab::find ($dev);
+               }
+
+               elsif ($abspath =~ m!/ide\d+$!) {
+                       # IDE bus; harmless
+               }
+               elsif ($abspath =~ m!/ide\d+/\d+\.\d+$!) {
+                       # IDE device
+                       my $dev = IdeDev->new (path => $abspath);
+                       $modules = IdeDev::findModuleByIdeDev ($dev);
+               }
+               
+               elsif ($abspath =~ m!/host\d+$!) {
+                       # grouping of SCSI devices; harmless.
+               }
+               elsif ($abspath =~ m!/target\d+:\d+:\d+$!) {
+                       # grouping of SCSI devices within a host
+                       # (2.6.10 and later); harmless.
+               }
+               elsif ($abspath =~ m!/\d+:\d+:\d+:\d+$!
+                       && -f "$abspath/scsi_level")
+               {
+                       my $dev = ScsiDev->new (path => $abspath);
+                       $modules = ScsiDev::findModuleByScsiDev ($dev);
+               }
+
+               else {
+                       # NOTE: We may want to avoid duplicate messages
+                       Base::warning ("unrecognised device: $abspath");
+               }
+
+               if (defined ($modules)) {
+                       push @{$result}, @{$modules};
+               }
+       }
+       return $result;
+}
+
+
+#
+# addPciSiblings -- probably a bug.
+#
+# Here's something odd: my test machine has an USB keyboard, connected
+# via PCI.  The same 8 ports are visible both as one 8-port EHCI
+# controller and four 2-port UHCI controllers.  The difference is not
+# in the hardware, only in the protocol used to talk to the remote device.
+# These are different PCI functions (0..7) in the same PCI slot (1d):
+#      0000:00:1d.0 USB Controller: Intel ... USB UHCI #1 (rev 03)
+#      0000:00:1d.1 USB Controller: Intel ... USB UHCI #2 (rev 03)
+#      0000:00:1d.2 USB Controller: Intel ... USB UHCI #3 (rev 03)
+#      0000:00:1d.3 USB Controller: Intel ... USB UHCI #4 (rev 03)
+#      0000:00:1d.7 USB Controller: Intel ... USB2 EHCI Controller (rev 03)
+#
+# The keyboard shows up under the EHCI controller, a printer shows up
+# under one of the UHCI controllers.
+# If we load only the EHCI module, the UHCI-only printer causes some
+# complaints, and the keyboard is not detected (unless you try to
+# debug this via a serial line ...)
+# If you load UHCI as well, the keyboard is detected flawlessly.
+#
+# We could interpret this as a bug in EHCI, and claim that a non-EHCI
+# device on one of the ports should not interfere with detecting devices
+# on other ports, but it's more productive to see this as an example of
+# how some PCI devices work better if there's a driver for every
+# function in the slot.
+#
+# (Or you could just add a special case to always add an UHCI driver
+# after EHCI, but then you would have to consider OHCI as well, plus
+# think about blacklisting and competing USB driver implementations.
+# I'd rather not go there.)
+#
+# The kernel function pci_setup_device() uses the following format
+# for PCI function directories in sysfs:
+#      "%04x:%02x:%02x.%d", domain, bus, slot, function.
+#
+# Given an absolute path to a PCI function directory, return a list
+# of modules needed for all USB functions *except* the one specified by
+# the path, but only if the path refers to a USB function.
+#
+# Limiting this behaviour to USB functions alone is desirable, given
+# the existence of chips such as VT8366/A/7, that combine ISA, IDE,
+# USB and multimedia in a single PCI slot.
+#
+sub addPciSiblings ($) {
+       my ($abspath) = @_;
+       my $modules = [];
+       if (! isUsb ($abspath)) {
+               return $modules;
+       }
+
+       my $dirName = Base::dirname ($abspath);
+       my $cur = Base::basename ($abspath);
+
+       if ($cur !~ /^([0-9a-f]{4}):([0-9a-f]{2}):([0-9a-f]{2})\.(\d)$/) {
+               Base::fatal ("Odd PCI directory in sysfs: $abspath");
+       }
+       my $domain = $1;
+       my $bus = $2;
+       my $slot = $3;
+       my $function = $4;
+
+       #print "D $dirName, B $cur, d $domain b $bus s $slot f $function\n";
+       my $dir;
+       if (! opendir ($dir, $dirName)) {
+               Base::fatal ("can't open directory $dirName");
+       }
+       while (defined(my $entry = readdir($dir))) {
+               if ($entry !~ /^([0-9a-f]{4}):([0-9a-f]{2}):([0-9a-f]{2})\.(\d+)$/) {
+                       next;
+               }
+               if (! ($1 eq $domain && $2 eq $bus && $3 eq $slot
+                       && $4 ne $function))
+               {
+                       next;
+               }
+
+               # OK, it's in my slot, and it isn't me.
+               # Add required modules if it's USB.
+               my $sibling = "$dirName/$entry";
+               if (isUsb ($sibling)) {
+                       my $dev = PciDev->new (path => $sibling);
+                       push @{$modules}, @{PciTab::find ($dev)};
+               }
+       }
+        if (! closedir ($dir)) {
+               Base::fatal ("could not read directory $dirName");
+       }
+       return $modules;
+}
+
+#
+# isUsb -- given an absolute path into sysfs, true iff it controls a usb port.
+#
+sub isUsb ($) {
+       my ($abspath) = @_;
+       my $dir;
+       my $result = 0;
+       if (! opendir ($dir, $abspath)) {
+               Base::fatal ("can't open directory $abspath");
+       }
+       while (defined(my $entry = readdir($dir))) {
+               if ($entry =~ /^usb\d+$/) {
+                       $result = 1;
+               }
+       }
+        if (! closedir ($dir)) {
+               Base::fatal ("could not read directory $abspath");
+       }
+       return $result;
+}
+
+1;
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/IdeDev.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/IdeDev.pm
new file mode 100644 (file)
index 0000000..7a4cf91
--- /dev/null
@@ -0,0 +1,119 @@
+#!perl -w
+#
+# IdeDev -- probed values for an IDE device as found in /proc/ide
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+#
+# The probed values for an IDE device as found in /proc/ide,
+# based on the name in /sys/devices/.../ideX/X.X/block.
+#
+# path - location in sysfs
+# name - descriptive string, retrieved from device
+# media - type of device: disk, tape, ...
+# model - descriptive string, retrieved from device
+#
+# Background: hotplug is triggered when an IDE controller is
+# found on for instance the PCI bus.  The loaded module should
+# be good enough to talk to the hardware, but that does not
+# mean you can actually use it: you will also need something
+# to use the hardware driver to send IDE commands over the
+# IDE cable to the controller on the other end of the cable.
+# Those commands also have to make sense: a disk controller
+# uses a different set of IDE commands than an IDE tape controller.
+# The ide-disk, ide-cdrom etc modules are the protocol drivers
+# that handle this.
+#
+# The following detection is based on an ide.rc script by Marco d'Itri
+# that was not included in hotplug.  Note that some CDROMs may need
+# ide-generic in addition to ide-cdrom to work; that can be considered
+# a driver bug rather than a valid dependency.  Note that there is discussion
+# over whether ide-generic should grab otherwise unhandled IDE devices.
+# - http://thread.gmane.org/gmane.linux.hotplug.devel/6003
+# - http://lists.debian.org/debian-kernel/2004/11/msg00218.html
+# - http://www.ussg.iu.edu/hypermail/linux/kernel/0410.1/1452.html
+#
+# Hmm, via82cxxx (2.6.8) also needs ide-generic to load it seems.  That could
+# be because ide-generic contains a call to ide_probe_init() which is in
+# the ide-core module.  We'll add ide-generic as an extra with all IDE
+# protocol modules.
+#
+use strict;
+use warnings;
+use Base;
+use Conf;
+package IdeDev;
+use base 'Obj';
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->takeArgs ('path');
+       my $path = $self->path;
+       my $link = readlink ("$path/block");
+       if (! defined ($link)) {
+               Base::fatal ("no link to block device in $path");
+       }
+       if ($link !~ m!.*/([^/]+)!) {
+               Base::fatal ("malformed link to block device in $path");
+       }
+       my $name = $1;
+       my $ideDir = Conf::get('procFs') . "/ide";
+       $self->{name} = $name;
+       $self->{media} = Base::getStringFile ("$ideDir/$name/media");
+       $self->{model} = Base::getStringFile ("$ideDir/$name/model");
+}
+
+sub path       { return $_[0]->{path}; }
+sub name       { return $_[0]->{name}; }
+sub media      { return $_[0]->{media}; }
+sub model      { return $_[0]->{model}; }
+
+sub string {
+       my $self = shift;
+       my $path = $self->path();
+       my $name = $self->name();
+       my $media = $self->media();
+       my $model = $self->model();
+       return "$name ($media) = $model at $path";
+}
+
+
+#
+# findModuleByIdeDev -- list of suitable IDE drivers;
+# you need all of them.
+#
+sub findModuleByIdeDev ($) {
+       my ($ideDev) = @_;
+       my $media = $ideDev->media();
+       my $driver;
+       $driver = "ide-disk" if ($media eq "disk");
+       $driver = "ide-tape" if ($media eq "tape");
+       $driver = "ide-cd" if ($media eq "cdrom");
+       $driver = "ide-floppy" if ($media eq "floppy");
+       my $result;
+       if (defined ($driver)) {
+               $result = [ "ide-generic", $driver ];
+       }
+       else {
+               $result = [ "ide-generic" ];
+       }
+       return $result;
+}
+
+
+1;
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/Image.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/Image.pm
new file mode 100644 (file)
index 0000000..c14a794
--- /dev/null
@@ -0,0 +1,283 @@
+#!perl -w
+#
+# Image -- what should go on the initrd image
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+use strict;
+use warnings;
+use SharedLibraries;
+use File::Copy;
+use Base;
+package Image;
+use base 'Obj';
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->{directories} = {};
+       $self->{files} = {};
+       $self->{devices} = {};
+       $self->{symlinks} = {};
+       $self->{scripts} = {};
+}
+
+#
+# addFile -- mark listed file, it should be copied to image.
+# If we add a symlink, make sure it stays a symlink in the target
+# image, and that both link and target are included.  This matters
+# eg for LVM, that has lots of symlinks to a single executable,
+# with behaviour determined by the name of the link.
+#
+sub addFile {
+       my ($self, $file) = @_;
+       Base::assert (Base::isAbsolute ($file));
+
+       # avoid problems with adding /lib/modules/. or
+       # distinguishing between /bin and //bin.
+       $file = Base::canon($file);
+
+       $self->addParents ($file);
+       if (-l $file) {
+               if (! exists ($self->{symlinks}{$file})) {
+                       # careful: in order to break loops, we must
+                       # first mark the symlink, *then* follow it.
+                       # We cannot warn, since we do not know whether
+                       # the symlink was found in the course of symlink
+                       # resolution, or whether multiple executables
+                       # have the same symlink as a shared library.
+                       #
+                       # NOTE: Perhaps maintain an explicit stack of
+                       # symlinks being resolved in order to be able
+                       # to warn about loops?
+                       #
+                       my $link = readlink ($file);
+                       if (! defined ($link)) {
+                               Base::fatal ("could not follow symlink $file");
+                       }
+                       if ($link !~ m!^([\w./-]+)$!) {
+                               # taint check.
+                               Base::fatal ("Strange character in symlink target for $file");
+                       }
+                       $link = $1;
+
+                       Base::debug ("to image: $file (symlink)");
+                       $self->{symlinks}{$file} = $link;
+                       my $target = Base::expandLink ($file);
+                       $self->addFile ($target);
+               }
+       }
+       elsif (-b $file) {
+               my $devno = Base::devno ($file);
+               Base::debug ("to image: $file (blockdev)");
+               $self->{devices}{$file} = "b:$devno";
+       }
+       elsif (-c $file) {
+               my $devno = Base::devno ($file);
+               Base::debug ("to image: $file (chardev)");
+               $self->{devices}{$file} = "c:$devno";
+       }
+       elsif (-d $file) {
+               $self->addDirectory ($file);
+       }
+       elsif (-f $file) {
+               Base::debug ("to image: $file");
+               $self->{files}{$file}++;
+               if (-x $file) {
+                       $self->addLibraries ($file);
+               }
+       }
+       elsif (! -e $file) {
+               Base::fatal ("missing file requested for image: $file");
+       }
+       else {
+               Base::fatal ("odd file mode: $file");
+       }
+}
+
+
+#
+# addDirectory -- add a directory to the image
+# the difference with addFile ($dir) is that the directory
+# does not have to exist on the mother system.
+#
+sub addDirectory {
+       my ($self, $directory) = @_;
+       Base::assert (Base::isAbsolute ($directory));
+
+       $self->addParents ($directory);
+       Base::debug ("to image: $directory (directory)");
+       $self->{directories}{$directory}++;
+}
+
+
+#
+# addParents -- given a pathname to be included on
+# initrd image, ensure that parent directories are also created.
+#
+sub addParents {
+       my ($self, $path) = @_;
+       Base::assert (Base::isAbsolute ($path));
+
+       my @components = split (/\/+/, $path);
+       for my $idx (1 .. ($#components -1)) {
+               my $dir = join ('/', @components[0 .. $idx]);
+               $self->{directories}{$dir}++;
+       }
+}
+
+#
+# addTree -- add a tree to the image
+# this is an existing file or directory with everything in it.
+# NOTE: There's a trade-off here: it would be faster to defer walking
+# the tree to the actual writing of the tree, but that would require
+# duplicating the addFile checks on file type.  2.6.10 has 1700 files
+# in /lib/modules; I expect the overhead to be acceptable.
+#
+sub addTree {
+       my ($self, $treeName) = @_;
+
+       $self->addFile ($treeName);
+       if (-d $treeName && ! -l $treeName) {
+               my $dir;
+               if (! opendir ($dir, $treeName)) {
+                       Base::fatal ("can't open directory $treeName");
+               }
+               while (defined(my $entry = readdir($dir))) {
+                       next if $entry eq ".";
+                       next if $entry eq "..";
+                       my $path = "$treeName/$entry";
+                       $self->addTree ($path);
+               }
+               if (! closedir ($dir)) {
+                       Base::fatal ("could not read directory $treeName");
+               }
+       }
+}
+
+
+#
+# addLibraries -- given an executable to be included on
+# initrd image, ensure that shared libraries are also included.
+# If the executable is a shell script or statically linked,
+# nothing needs to be done.
+#
+sub addLibraries {
+       my ($self, $executable) = @_;
+       my $in;
+
+       for my $lib (@{SharedLibraries::find ($executable)}) {
+               $self->addFile ($lib);
+       }
+}
+
+#
+# addScriptLine -- given scriptname and text, append text to the
+# text to be included in script.
+#
+sub addScriptLine {
+       my ($self, $scriptname, $text) = @_;
+       Base::assert (Base::isAbsolute ($scriptname));
+
+       $self->addParents ($scriptname);
+       $self->{scripts}{$scriptname} .= "$text";
+}
+
+
+#
+# buildHere -- given pathname of a destination directory,
+# create that directory, with all files and scripts prescribed
+# by self in it.
+# The top directory is expected to be created by File::Temp::tempfile.
+#
+sub buildHere {
+       my ($self, $dest) = @_;
+
+       if (! -d $dest) {
+               Base::fatal ("Build directory not found: $dest");
+       }
+       if (! chmod (0755, $dest)) {
+               Base::fatal ("Could not chmod $dest");
+       }
+
+       for my $d (sort keys %{$self->{directories}}) {
+               if (! mkdir ("$dest$d")) {
+                       Base::fatal ("Could not mkdir $dest$d");
+               }
+               if (! chmod (0755, "$dest$d")) {
+                       Base::fatal ("Could not chmod $dest$d");
+               }
+       }
+
+       for my $f (sort keys %{$self->{files}}) {
+               if (! File::Copy::copy ($f, "$dest$f")) {
+                       Base::fatal ("Could not copy $f to $dest$f");
+               }
+               if (-x $f) {
+                       if (! chmod (0555, "$dest$f")) {
+                           Base::fatal ("Could not chmod 0555 $dest$f");
+                       }
+               }
+               else {
+                       if (! chmod (0444, "$dest$f")) {
+                           Base::fatal ("Could not chmod 0444 $dest$f");
+                       }
+               }
+       }
+
+       for my $d (sort keys %{$self->{devices}}) {
+               my $typDevno = $self->{devices}{$d};
+               if ($typDevno =~ /^(b|c):(\d+):(\d+)$/) {
+                       #
+                       # permission 0600 is restrictive but sufficient:
+                       # the devices created here are used only by root
+                       # on a temporary root, so we can get away with
+                       # /dev/null mode 0600.  More permissive modes
+                       # risk ending up with a /dev/hda1 0666 somewhere
+                       # in a temporary directory.
+                       #
+                       if (system ("/bin/mknod -m 0600 '$dest$d' $1 $2 $3") != 0) {
+                               Base::fatal ("Could not mknod $dest$d $1 $2 $3");
+                       }
+               }
+               else {
+                       Base::bug ("bad devno $typDevno for $d");
+               }
+       }
+
+       for my $l (sort keys %{$self->{symlinks}}) {
+               my $target = $self->{symlinks}{$l};
+               if (! symlink ($target, "$dest/$l")) {
+                       Base::fatal ("Could symlink $target $dest$l");
+               }
+       }
+
+       for my $scriptname (sort keys %{$self->{scripts}}) {
+               my $script = $self->{scripts}{$scriptname};
+               if (!open (OUT, ">", "$dest$scriptname")) {
+                       Base::fatal ("Can't create $dest$scriptname");
+               }
+               print OUT "$script";
+               if (!close (OUT)) {
+                       Base::fatal ("Could not write $dest$scriptname");
+               }
+               if (! chmod (0555, "$dest$scriptname")) {
+                       Base::fatal ("Couldn't chmod 0555 $dest$scriptname");
+               }
+       }
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/Input.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/Input.pm
new file mode 100644 (file)
index 0000000..20308ec
--- /dev/null
@@ -0,0 +1,104 @@
+#!perl -w
+#
+# Input - a single device from the input layer
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# info - info provided by low level driver for module matching
+# name - provided by driver
+# phys - provided by driver, no relation to sysfs location
+# handlers - input layer handlers
+# capabilities - kind of events that can be generated
+# hw - ...
+#
+# Handler 'kbd' indicates the device is used for console;
+# there is also a generic handler for each device, event\d+,
+# that may have a link to underlying sysfs device.
+# Capability KEY indicates there are buttons, this includes
+# both qwerty keys and the fire button on a joystick.
+#
+
+use strict;
+use warnings;
+use Base;
+use Conf;
+package Input;
+use base 'Obj';
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->takeArgs ('info', 'name', 'phys', 'handlers', 'capabilities');
+
+       #
+       # Find hardware link, if any.
+       #
+       $self->{hw} = undef;
+       for my $handler (keys %{$self->handlers}) {
+               if ($handler !~ /^event\d+$/) {
+                       next;
+               }
+               my $devLink = Conf::get('sysFs')
+                       . "/class/input/$handler/device";
+               my $hw = readlink ($devLink);
+               if (defined ($hw)) {
+                       unless ($hw =~ s!^(\.\./)+devices/!!) {
+                               # imagine localised linux (/sys/geraete ...)
+                               Base::fatal ("bad device link in $devLink");
+                       }
+                       $self->{hw} = $hw;
+               }
+       }
+}
+
+sub info       { return $_[0]->{info}; }
+sub name       { return $_[0]->{name}; }
+sub phys       { return $_[0]->{phys}; }
+sub handlers   { return $_[0]->{handlers}; }
+sub capabilities       { return $_[0]->{capabilities}; }
+sub hw         { return $_[0]->{hw}; }
+
+sub string {
+       my $self = shift;
+       my $name = $self->name;
+       my $phys = $self->phys;
+       my $hw = $self->hw;
+       $hw = "--" unless defined $hw;
+       my $h = join (",", keys %{$self->handlers});
+       my $c = join (",", keys %{$self->capabilities});
+       my $kbd = $self->isKbd ? " (KBD)" : "";
+       my $str = "$name is $phys at $hw [$h] [$c]$kbd";
+       return $str;
+}
+
+#
+# isKbd -- device may be useful to get an operational keyboard.
+# This is conservative: there are two input devices for a DELL USB
+# keyboard for example, and we make no effort to determine if
+# we can leave one of them out.
+#
+sub isKbd {
+       my $self = shift;
+       if (! exists ($self->capabilities->{KEY})) {
+               return 0;
+       }
+       if (! exists ($self->handlers->{kbd})) {
+               return 0;
+       }
+       return 1;
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/InputTab.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/InputTab.pm
new file mode 100644 (file)
index 0000000..78c2031
--- /dev/null
@@ -0,0 +1,99 @@
+#!perl -w
+#
+# InputTab -- encapsulate /proc/bus/input/devices
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+#
+
+use strict;
+use warnings;
+use Base;
+use Conf;
+use Input;
+
+package InputTab;
+
+my $inputList = undef;
+
+sub init () {
+       if (defined ($inputList)) {
+               return;
+       }
+       $inputList = [];
+       my $name = Conf::get('procFs') . '/bus/input/devices';
+       if (! open (IN, "<", "$name")) {
+               Base::fatal ("can't open $name");
+       }
+       my $work = {
+               capabilities => {},
+       };
+       while (defined (my $line = <IN>)) {
+               chomp $line;
+               if ($line =~ /^I: (.*)$/) {
+                       $work->{info} = $1;
+               }
+               elsif ($line =~ /^N: Name="(.*)"$/) {
+                       $work->{name} = $1;
+               }
+               elsif ($line =~ /^P: Phys=(.*)$/) {
+                       $work->{phys} = $1;
+               }
+               elsif ($line =~ /^H: Handlers=(.*)$/) {
+                       my @handlers = split (/\s+/, $1);
+                       $work->{handlers} = {};
+                       for my $h (@handlers) {
+                               $work->{handlers}{$h}++;
+                       }
+               }
+               elsif ($line =~ /^B: ([A-Z]+)=(.*)$/) {
+                       $work->{capabilities}{$1} = $2;
+               }
+               elsif ($line =~ /^$/) {
+                       if (! exists ($work->{info})) {
+                               Base::fatal ("missing I: in $name");
+                       }
+                       if (! exists ($work->{name})) {
+                               Base::fatal ("missing N: in $name");
+                       }
+                       if (! exists ($work->{phys})) {
+                               Base::fatal ("missing P: in $name");
+                       }
+                       if (! exists ($work->{handlers})) {
+                               Base::fatal ("missing H: in $name");
+                       }
+                       push @{$inputList}, Input->new (%{$work});
+                       $work = {
+                               capabilities => {},
+                       };
+               }
+               else {
+                       Base::fatal ("unrecognised line in $name: $line");
+               }
+
+       }
+       if (! close (IN)) {
+               Base::fatal ("could not read $name");
+       }
+}
+
+sub all        () {
+       init;
+       return $inputList;
+}
+
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/KConfig.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/KConfig.pm
new file mode 100644 (file)
index 0000000..ec740e3
--- /dev/null
@@ -0,0 +1,226 @@
+#!perl -w
+#
+# KConfig -- encapsulate kernel configuration file and builtin modules
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+#
+# KConfig is a mapping from kernel define symbol to value.
+# Common values are 'y' (compiled in), 'm' modular.
+# The "no" choice in kernel configuration is represented by absence of the
+# symbol.  Other values (for example decimal or hex numbers) also occur.
+#
+# We also maintain a list of known modules and corresponding kernel define.
+# If the define is 'y', we need not load the corresponding module.
+# This is not relevant to hardware (if a PCI controller is builtin,
+# it will not occur in modules.pcimap, so no loading is attempted),
+# but it does help with filesystems, where an 'ext3' line in /etc/fstab
+# means the ext3 module needs to be loaded unless its compiled in.
+#
+
+use strict;
+use warnings;
+use Base;
+use Conf;
+package KConfig;
+
+my $kConfMap = undef;
+my $kConfList = undef;
+
+sub init () {
+       if (defined ($kConfMap)) {
+               return;
+       }
+       $kConfMap = {};
+       my $name = Conf::get('kernConf');
+       if (! open (IN, "<", "$name")) {
+               Base::fatal ("can't open kernel config file $name");
+       }
+       while (defined (my $line = <IN>)) {
+               chomp $line;
+               $line =~ s/^\s+//;
+               $line =~ s/\s+$//;
+               $line =~ s/#.*//;
+               next if ($line eq "");
+
+               if ($line !~ /^([A-Z][A-Za-z0-9_]+)=(.+)$/) {
+                       # lowercase is uncommon, but: CONFIG_SCx200=m
+                       Base::fatal "bad line in $name: $line";
+               }
+               my $key = $1;
+               my $value = $2;
+               if ($value eq 'y'
+                       || $value eq 'm'
+                       || $value =~ /^\d+$/
+                       || $value =~ /^0x[0-9a-f]+$/
+                       || $value =~ /^"[-a-z0-9._\/]*"$/
+               ) {
+                       $kConfMap->{$key} = $value;
+               }
+               else {
+                       Base::fatal "bad value in $name: $line";
+               }
+       }
+       if (! close (IN)) {
+               Base::fatal "could not read kernel config file $name";
+       }
+       $kConfList = [ sort keys %{$kConfMap} ];
+}
+
+#
+# Map module name to kernel define.  Module names here
+# must use hyphen, not underscore.
+#
+my $moduleMap = {
+       # user interface devices
+       fbcon => 'FRAMEBUFFER_CONSOLE',
+       vesafb => 'FB_VESA',
+       serio => 'SERIO',
+       i8042 => 'SERIO_I8042',
+       usbhid => 'USB_HID',
+
+       # file systems
+       ext2 => 'EXT2_FS',
+       ext3 => 'EXT3_FS',
+       jbd => 'JBD',
+       reiserfs => 'REISERFS_FS',
+       jfs => 'JFS_FS',
+       xfs => 'XFS_FS',
+       minix => 'MINIX_FS',
+       romfs => 'ROMFS_FS',
+       isofs => 'ISO9660_FS',
+       udf => 'UDF_FS',
+       fat => 'FAT_FS',
+       msdos => 'MSDOS_FS',
+       vfat => 'VFAT_FS',
+       # broken, and nonmodular: umsdos => 'UMSDOS_FS',
+       ntfs => 'NTFS_FS',
+       adfs => 'ADFS_FS',
+       affs => 'AFFS_FS',
+       hfs => 'HFS_FS',
+       hfsplus => 'HFSPLUS_FS',
+       befs => 'BEFS_FS',
+       bfs => 'BFS_FS',
+       efs => 'EFS_FS',
+       jffs => 'JFFS_FS',
+       jffs2 => 'JFFS2_FS',
+       cramfs => 'CRAMFS',
+       freevxfs => 'VXFS_FS',
+       hpfs => 'HPFS_FS',
+       qnx4 => 'QNX4FS_FS',
+       sysv => 'SYSV_FS',
+       ufs => 'UFS_FS',
+       nfs => 'NFS_FS',
+       smbfs => 'SMB_FS',
+       cifs => 'CIFS',
+       ncpfs => 'NCP_FS',
+       coda => 'CODA_FS',
+       kafs => 'AFS_FS',
+
+       # device mapper: raid and lvm.
+       linear => 'MD_LINEAR',
+       raid0 => 'MD_RAID0',
+       raid1 => 'MD_RAID1',
+       raid10 => 'MD_RAID10',
+       raid5 => 'MD_RAID5',
+       raid6 => 'MD_RAID6',
+       multipath => 'MD_MULTIPATH',
+       faulty => 'MD_FAULTY',
+       md => 'BLK_DEV_MD',
+       'dm-mod' => 'BLK_DEV_DM',
+       'dm-crypt' => 'DM_CRYPT',
+       'dm-snapshot' => 'DM_SNAPSHOT',
+       'dm-mirror' => 'DM_MIRROR',
+       'dm-zero' => 'DM_ZERO',
+
+       # crypto
+       hmac => 'CRYPTO_HMAC',
+       'crypto-null' => 'CRYPTO_NULL',
+       md4 => 'CRYPTO_MD4',
+       md5 => 'CRYPTO_MD5',
+       sha1 => 'CRYPTO_SHA1',
+       sha256 => 'CRYPTO_SHA256',
+       sha512 => 'CRYPTO_SHA512',
+       wp512 => 'CRYPTO_WP512',
+       des => 'CRYPTO_DES',
+       blowfish => 'CRYPTO_BLOWFISH',
+       twofish => 'CRYPTO_TWOFISH',
+       serpent => 'CRYPTO_SERPENT',
+       aes => 'CRYPTO_AES',
+       cast5 => 'CRYPTO_CAST5',
+       cast6 => 'CRYPTO_CAST6',
+       arc4 => 'CRYPTO_ARC4',
+       tea => 'CRYPTO_TEA',
+       khazad => 'CRYPTO_KHAZAD',
+       anubis => 'CRYPTO_ANUBIS',
+       deflate => 'CRYPTO_DEFLATE',
+       'michael-mic' => 'CRYPTO_MICHAEL_MIC',
+       crc32c => 'CRYPTO_CRC32C',
+       tcrypt => 'CRYPTO_TEST',
+
+       # IDE
+       'ide-generic' => 'IDE_GENERIC',
+       'ide-disk' => 'BLK_DEV_IDEDISK',
+       'ide-cd' => 'BLK_DEV_IDECD',
+       'ide-tape' => 'BLK_DEV_IDETAPE',
+       'ide-floppy' => 'BLK_DEV_IDEFLOPPY',
+
+       # SCSI
+       'sd-mod' => 'BLK_DEV_SD',
+       'st' => 'CHR_DEV_ST',
+       'sr-mod' => 'BLK_DEV_SR',
+       'sg' => 'CHR_DEV_SG',
+};
+
+
+#
+# all -- return a list of all known configuration defines
+#
+sub all        () {
+       init;
+       return $kConfList;
+}
+
+#
+# allKnownModules -- return list of all module names for
+# which a corresponding kernel define is known.
+#
+sub allKnownModules () {
+       init;
+       return [ sort keys %{$moduleMap} ];
+}
+
+#
+# isBuiltIn -- true if the module is known to be compiled
+# into the kernel.
+#
+sub isBuiltIn ($) {
+       my ($module) = @_;
+       init;
+       $module =~ s!_!-!g;
+       my $confKey = $moduleMap->{$module};
+       if (! defined ($confKey)) {
+               return 0;
+       }
+       my $confVal = $kConfMap->{"CONFIG_$confKey"};
+       if (! defined ($confVal)) {
+               return 0;
+       }
+       return ($confVal eq 'y');
+}
+
+1;
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/LabeledPartition.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/LabeledPartition.pm
new file mode 100644 (file)
index 0000000..8c9d8a5
--- /dev/null
@@ -0,0 +1,152 @@
+#!perl -w
+#
+# LabeledPartition -- a partition with ext2 or other label.
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# descriptors contain:
+# - label - string such as volume name for matching in /etc/fstab
+# - uuid - similar but hex
+# - path - the block special file where the label was found
+# - type - what kind of superblock the label was found in.
+#
+# NOTE: consider delegating this whole mess to findfs from the
+# e2fsprogs package.  That package can probe for an extensive
+# set of superblocks, knows about LVM, but does not make fs type
+# information available via the command line.
+#
+use strict;
+use warnings;
+package LabeledPartition;
+use base 'Obj';
+
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->takeArgs ('label', 'uuid', 'path', 'type');
+}
+
+sub label      { return $_[0]->{label}; }
+sub uuid       { return $_[0]->{uuid}; }
+sub type       { return $_[0]->{type}; }
+sub path       { return $_[0]->{path}; }
+
+sub string {
+       my $self = shift;
+       my $label = ($self->label or '-');
+       my $uuid = ($self->uuid or '-');
+       my $type = $self->type;
+       my $path = $self->path;
+       return "labeled($type) $label, $uuid at $path";
+}
+
+
+#
+# try -- return descriptor for labeled fs, or undef,
+# trying a number of formats for superblock.
+#
+sub try ($) {
+       my ($path) = @_;
+       my $result = undef;
+       my $fh;
+       if (! open ($fh, "<", "$path")) {
+               return $result;
+       }
+       binmode ($fh);
+       $result = tryExt2 ($fh, $path) unless defined $result;
+       $result = tryReiser ($fh, $path) unless defined $result;
+
+       # ignore errors, could not have been very wrong
+       # if a working superblock came out of it.
+       close ($fh);
+       return $result;
+}
+
+
+#
+# lets hope the sysadm labeled it in ascii not utf8.
+# based on util-linux-2.12h mount; they have lots of other
+# superblocks to match.  Later.
+#
+sub tryExt2 ($$) {
+       my ($fh, $path) = @_;
+       my $result = undef;
+
+       if (! seek ($fh, 1024, 0)) {
+               return $result;
+       }
+       # undef on read error - is this worth a warning?
+       my $superBlock;
+       my $rc = read ($fh, $superBlock, 1024);
+       if (! defined ($rc) || $rc != 1024) {
+               return $result;
+       }
+       my ($magic, $uuid, $label) =
+               unpack
+               "x[56] v x[34] x[VVV] H[32] Z[16]",
+               $superBlock;
+
+       if ($magic == 0xEF53) {
+               $uuid = fancyUuid ($uuid);
+               $result = LabeledPartition->new (
+                       type => "ext2",
+                       label => $label,
+                       uuid => $uuid,
+                       path => $path,
+                       );
+       }
+       return $result;
+}
+
+# fancyUuid - given a hex uuid, add hyphens at conventional place.
+sub fancyUuid ($) {
+       my ($uuid) = @_;
+       $uuid =~ s/^(.{8})(.{4})(.{4})(.{4})(.{12})$/$1-$2-$3-$4-$5/;
+       return lc ($uuid);
+}
+
+sub tryReiser ($$) {
+       my ($fh, $path) = @_;
+       my $result = undef;
+       # offset in reisser 3.6 (3.5-3.5.10 had 8k)
+       if (! seek ($fh, (64*1024), 0)) {
+               return $result;
+       }
+       # undef on read error - is this worth a warning?
+       my $superBlock;
+       my $rc = read ($fh, $superBlock, 1024);
+       if (! defined ($rc) || $rc != 1024) {
+               return $result;
+       }
+       my ($magic, $uuid, $label) =
+               unpack
+               "x[52] Z[10] x[22] a[16] Z[16]",
+               $superBlock;
+       my $t = join ("", map { sprintf "%02x", ord($_) } split(//, $uuid));
+       if ($magic eq "ReIsEr2Fs" || $magic eq "ReIsEr3Fs") {
+               $uuid = fancyUuid ($uuid);
+               $result = LabeledPartition->new (
+                       type => "reiserfs",
+                       label => $label,
+                       uuid => fancyUuid($t),
+                       path => $path,
+                       );
+       }
+       return $result;
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/LabeledPartitionTab.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/LabeledPartitionTab.pm
new file mode 100644 (file)
index 0000000..9a2bfd8
--- /dev/null
@@ -0,0 +1,138 @@
+#!perl -w
+#
+# LabeledPartitionTab -- all partitions with a label or uuid.
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# Found by looking at partitions of block devices in /sys that
+# - have hardware backing them
+# - are accessible via a block special file in /dev.
+# - like mount(8), scan in two passes: raid devices first,
+#   ignore known uuids in second scan on underlying devices.
+#
+#
+
+use strict;
+use warnings;
+use Base;
+use LabeledPartition;
+package LabeledPartitionTab;
+
+my $lpTab = undef;
+my $lpList = [];
+
+
+sub init () {
+       if (defined ($lpTab)) {
+               return;
+       }
+
+       $lpTab = {};
+       for my $pass (0, 1) {
+               for my $abd (@{ActiveBlockDevTab::all()}) {
+                       my $name = $abd->name();
+                       # must be accessible via special file ...
+                       my $special = $abd->special;
+                       next unless defined ($special);
+                       next if $abd->hasPartitions();
+
+                       # let's not look for labels on floppy,
+                       # tends to hang.
+                       # NOTE: perhaps not look for labels on any
+                       # removable device, as marked by /sys?
+                       next if ($name =~ /^fd\d+$/);
+
+                       if (($pass == 0) == ($name =~ /^md\d+$/)) {
+                               my $descr = LabeledPartition::try ($special);
+                               if (defined ($descr)) {
+                                       #
+                                       # Using a partially completed
+                                       # data structure.  In first pass,
+                                       # the list empty, so nothing found.
+                                       # In second pass, we look at non-raid
+                                       # devices, and only raid devices
+                                       # are in the list.
+                                       # The tricky part is that the list
+                                       # used to find existing devices
+                                       # is updated only at the end of the
+                                       # pass, so that different devices
+                                       # with same uuid are entered in the
+                                       # table and will cause a proper error
+                                       # message if the uuid is later used
+                                       # to find a device.
+                                       #
+                                       if (! findByUuid ($descr->uuid)) {
+                                               my $devno = $abd->devno;
+                                               $lpTab->{$devno} = $descr;
+                                       }
+                               }
+                       }
+               }
+               $lpList = [ values %{$lpTab} ];
+       }
+
+}
+
+sub all        () {
+       init;
+       return $lpList;
+}
+
+sub findByLabel ($) {
+       my ($label) = @_;
+       my $result = undef;
+       for my $lp (@{LabeledPartitionTab::all()}) {
+               if ($lp->label() eq $label) {
+                       if (defined ($result)) {
+                               Base::fatal ("duplicate file system label $label");
+                       }
+                       $result = $lp;
+               }
+       }
+       return $result;
+}
+
+sub findPathByLabel ($) {
+       my ($label) = @_;
+       my $lp = findByLabel ($label);
+       return $lp->path() if $lp;
+       return undef;
+}
+
+sub findByUuid ($) {
+       my ($uuid) = @_;
+       my $result = undef;
+       $uuid = lc ($uuid);
+       for my $lp (@{LabeledPartitionTab::all()}) {
+               if ($lp->uuid() eq $uuid) {
+                       if (defined ($result)) {
+                               Base::fatal ("duplicate file system uuid $uuid");
+                       }
+                       $result = $lp;
+               }
+       }
+       return $result;
+}
+
+sub findPathByUuid ($) {
+       my ($uuid) = @_;
+       my $lp = findByUuid ($uuid);
+       return $lp->path() if $lp;
+       return undef;
+}
+
+1;
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/LogicalVolume.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/LogicalVolume.pm
new file mode 100644 (file)
index 0000000..eaf069b
--- /dev/null
@@ -0,0 +1,50 @@
+#!perl -w
+#
+# LogicalVolume -- Logical Volume Descriptor
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+#
+# lvnam - logical volume name
+# vgnam - volume group name
+# devno - "major:minor"
+#
+
+use strict;
+use warnings;
+package LogicalVolume;
+use base 'Obj';
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->takeArgs ('lvnam', 'vgnam', 'devno');
+}
+
+sub lvnam      { return $_[0]->{lvnam}; }
+sub vgnam      { return $_[0]->{vgnam}; }
+sub devno      { return $_[0]->{devno}; }
+
+sub string {
+       my $self = shift;
+       my $lvnam = $self->lvnam;
+       my $vgnam = $self->vgnam;
+       my $devno = $self->devno;
+       my $str = "$lvnam in $vgnam at $devno";
+       return $str;
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/LvmTab.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/LvmTab.pm
new file mode 100644 (file)
index 0000000..8346313
--- /dev/null
@@ -0,0 +1,240 @@
+#!perl -w
+#
+# LvmTab -- encapsulate LVM output
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# The trick here is to find all block devices that back a physical
+# volume that is part of a volume group, where in that volume group
+# there is a logical volume with maj:min that contains a filesystem
+# to be mounted at boot time.  In particular, if there are two
+# volume groups, one for OS and one for database, you don't want
+# the modules for the database drives on your initrd image.
+#
+# NOTE: There seem to be newer reporting tools (vgs, lvs, pvs)
+# that produce more flexible reports for easier grepping than with
+# the commands used here.
+#
+use strict;
+use warnings;
+use Base;
+use LogicalVolume;
+use VolumeGroup;
+use PhysicalVolume;
+package LvmTab;
+
+
+my $lvMap = undef;
+my $vgMap = undef;
+my $pvMap = undef;
+my $lvList = undef;
+my $vgList = undef;
+my $pvList = undef;
+
+sub init () {
+       if (defined ($lvMap)) {
+               return;
+       }
+       initLvMap ();
+       initVgMap ();
+       initPvMap ();
+       $lvList = [ values %{$lvMap} ];
+       $vgList = [ values %{$vgMap} ];
+       $pvList = [ values %{$pvMap} ];
+}
+
+sub allLogicalVolumes () {
+       init;
+       return $lvList;
+}
+
+sub allVolumeGroups () {
+       init;
+       return $vgList;
+}
+
+sub allPhysicalVolumes () {
+       init;
+       return $pvList;
+}
+
+sub findLVByDevno ($) {
+       init;
+       return $lvMap->{$_[0]};
+}
+
+sub findVGByVgnam ($) {
+       init;
+       return $vgMap->{$_[0]};
+}
+
+sub findPVsByVgnam ($) {
+       my ($vgnam) = @_;
+       my $result = [];
+       for my $pv (@{allPhysicalVolumes()}) {
+               if ($pv->vgnam() eq $vgnam) {
+                       push @{$result}, $pv;
+               }
+       }
+       return $result;
+}
+
+#
+# findPhysicalVolumePathsByLVDevno -- return a list of special file names
+# that make up the physical volumes underlying a logical volume
+# identified by maj:min, or undef if the devno seems not to be
+# implemented by lvm.
+#
+sub findPVPathsByLVDevno ($) {
+       my ($devno) = @_;
+       my $lv = LvmTab::findLVByDevno ($devno);
+       if (! defined ($lv)) {
+               return undef;
+       }
+       my $vgnam = $lv->vgnam();
+       if (! defined (LvmTab::findVGByVgnam($vgnam))) {
+               Base::fatal ("unknown LVM volume group $vgnam for Logical Volume $devno");
+       }
+       my $result = [];
+       for my $pv (@{LvmTab::findPVsByVgnam ($vgnam)}) {
+               push @{$result}, $pv->pvnam();
+       }
+       return $result;
+}
+
+
+# build map from devno to logical volume descriptor,
+# built on lvdisplay.
+#
+# /dev/vg0/root:vg0:3:1:-1:1:2097152:256:-1:0:0:254:0
+#
+sub initLvMap () {
+       $lvMap = {};
+       if (! open (IN, "-|", "lvdisplay -c 2> /dev/null")) {
+               Base::fatal ("can't run lvdisplay");
+       }
+       while (defined (my $line = <IN>)) {
+               chomp $line;
+               $line =~ s/^\s*//;
+               my @fields = split (/:/, $line, 500);
+               if ($#fields != 12) {
+                       Base::fatal ("malformed output from lvdisplay");
+               }
+               my $lvnam = $fields[0];
+               my $vgnam = $fields[1];
+               # Hide this, since lvdisplay output is inconsistent with docs.
+               my $lvsiz = $fields[6];
+               my $major = $fields[11];
+               my $minor = $fields[12];
+               if ($major !~ /^\d+$/) {
+                       Base::fatal ("malformed output (major) from lvdisplay");
+               }
+               if ($minor !~ /^\d+$/) {
+                       Base::fatal ("malformed output (minor) from lvdisplay");
+               }
+               my $devno = "$major:$minor";
+               if (exists ($lvMap->{$devno})) {
+                       Base::fatal ("duplicate output ($devno) from lvdisplay");
+               }
+               $lvMap->{$devno} = LogicalVolume->new (
+                       lvnam => $lvnam,
+                       vgnam => $vgnam,
+                       devno => $devno,
+                       );
+       }
+       if (! close (IN)) {
+               Base::fatal ("error running lvdisplay");
+       }
+}
+
+# build map from vgnam to volume group descriptor,
+# built on vgdisplay.
+#
+#  vg0:r/w:772:-1:0:7:6:-1:0:1:1:77799424:4096: \
+#      18994:6912:12082:MO1svc-uvVC-TFCL-qvrB-29wD-bh9K-V2e3U2
+#
+sub initVgMap () {
+       $vgMap = {};
+       if (! open (IN, "-|", "vgdisplay -c 2> /dev/null")) {
+               Base::fatal ("can't run vgdisplay");
+       }
+       while (defined (my $line = <IN>)) {
+               chomp $line;
+               $line =~ s/^\s*//;
+               my @fields = split (/:/, $line, 500);
+               if ($#fields != 16) {
+                       Base::fatal ("malformed output from vgdisplay");
+               }
+               my ($vgnam, $vgacc, $vgstat,
+                       $vgnum, $maxlv, $curlv, $openlv,
+                       $maxlvsiz, $maxpvcnt, $curpvcnt, $actpvcnt,
+                       $vgsiz, $extsiz, $extcnt, $extalloc, $extfree,
+                       $uuid)
+                       = @fields;
+
+               if (exists ($vgMap->{$vgnam})) {
+                       Base::fatal ("duplicate output ($vgnam) from vgdisplay");
+               }
+               $vgMap->{$vgnam} = VolumeGroup->new (
+                       vgnam => $vgnam,
+                       uuid => $uuid,
+                       );
+       }
+       if (! close (IN)) {
+               Base::fatal ("error running vgdisplay");
+       }
+}
+
+# build map from pvnam to physical volume descriptor,
+# built on pvdisplay.
+#
+#  /dev/sda3:vg0:155598848:-1:8:8:-1:4096:18994: \
+#      12082:6912:X5hDer-dYpy-jpAB-IhXQ-44j4-kyj0-cOQkyE
+#
+sub initPvMap () {
+       $pvMap = {};
+       if (! open (IN, "-|", "pvdisplay -c 2> /dev/null")) {
+               Base::fatal ("can't run pvdisplay");
+       }
+       while (defined (my $line = <IN>)) {
+               chomp $line;
+               $line =~ s/^\s*//;
+               my @fields = split (/:/, $line, 500);
+               if ($#fields != 11) {
+                       Base::fatal ("malformed output from pvdisplay");
+               }
+               my ($pvnam,$vgnam,$pvsiz,$pvnum,$pvstat,
+                       $pvalloc,$lvcnt,$extsiz,$extcnt,
+                       $extfree,$extalloc,$uuid)
+                       = @fields;
+
+               if (exists ($pvMap->{$pvnam})) {
+                       Base::fatal ("duplicate output ($pvnam) from vgdisplay");
+               }
+               $pvMap->{$pvnam} = PhysicalVolume->new (
+                       pvnam => $pvnam,
+                       vgnam => $vgnam,
+                       uuid => $uuid,
+                       );
+       }
+       if (! close (IN)) {
+               Base::fatal ("error running pvdisplay");
+       }
+}
+
+1;
+
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/Makefile b/rescue/linux/cdrom/yaird-0.0.5/perl/Makefile
new file mode 100644 (file)
index 0000000..e5d13b3
--- /dev/null
@@ -0,0 +1,461 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# perl/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+
+# 
+# Makefile.am -- installation and packaging instructions
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+
+# 
+# Makefile.incl -- shared defines between makefiles
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# - auxdir contains package specific executables that may be included
+#   in the generated image
+# - perldir contains perl modules to be included by the main program
+#
+# This cannot be simply passed from the master makefile; that would
+# be invisible to automake.
+
+
+srcdir = .
+top_srcdir = ..
+
+pkgdatadir = $(datadir)/yaird
+pkglibdir = $(libdir)/yaird
+pkgincludedir = $(includedir)/yaird
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = /usr/bin/install -c
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+DIST_COMMON = $(dist_perl_DATA) $(srcdir)/../Makefile.incl \
+       $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+subdir = perl
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(perldir)" \
+       "$(DESTDIR)$(perldir)"
+sbinSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+SCRIPTS = $(sbin_SCRIPTS)
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+dist_perlDATA_INSTALL = $(INSTALL_DATA)
+nodist_perlDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(dist_perl_DATA) $(nodist_perl_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run aclocal-1.9
+AMDEP_FALSE = #
+AMDEP_TRUE = 
+AMTAR = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run tar
+AUTOCONF = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run autoconf
+AUTOHEADER = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run autoheader
+AUTOMAKE = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run automake-1.9
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2
+CPPFLAGS = 
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EXEEXT = 
+INITRD_TEMPLATE = Fedora
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
+LDFLAGS = 
+LIBOBJS = 
+LIBS = 
+LTLIBOBJS = 
+MAKEINFO = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run makeinfo
+OBJEXT = o
+PACKAGE = yaird
+PACKAGE_BUGREPORT = 
+PACKAGE_NAME = 
+PACKAGE_STRING = 
+PACKAGE_TARNAME = 
+PACKAGE_VERSION = 
+PATH_SEPARATOR = :
+PERL = /usr/bin/perl
+SET_MAKE = 
+SHELL = /bin/sh
+STRIP = 
+VERSION = 0.0.5
+XMLTO = /usr/bin/xmlto
+ac_ct_CC = gcc
+ac_ct_STRIP = 
+am__fastdepCC_FALSE = #
+am__fastdepCC_TRUE = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = ${AMTAR} chof - "$$tardir"
+am__untar = ${AMTAR} xf -
+bindir = ${exec_prefix}/bin
+build_alias = 
+datadir = ${prefix}/share
+exec_prefix = ${prefix}
+host_alias = 
+includedir = ${prefix}/include
+infodir = ${prefix}/info
+install_sh = /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localstatedir = ${prefix}/var
+mandir = ${prefix}/man
+mkdir_p = mkdir -p --
+oldincludedir = /usr/include
+prefix = /usr/local
+program_transform_name = s,x,x,
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+sysconfdir = ${prefix}/etc
+target_alias = 
+auxdir = $(pkglibdir)/exec
+perldir = $(pkglibdir)/perl
+sbin_SCRIPTS = yaird
+CLEANFILES = $(sbin_SCRIPTS) Conf.pm
+edit = sed \
+       -e 's!@PERL\@!$(PERL)!' \
+       -e 's!@PACKAGE\@!$(PACKAGE)!' \
+       -e 's!@VERSION\@!$(VERSION)!' \
+       -e 's!@AUXDIR\@!$(auxdir)!' \
+       -e 's!@PERLDIR\@!$(perldir)!'
+
+
+# not compiled, but must go in the tarball.
+EXTRA_DIST = \
+       main.pl \
+       Conf.pm.in
+
+nodist_perl_DATA = \
+       Conf.pm
+
+dist_perl_DATA = \
+       ActionList.pm \
+       ActiveBlockDev.pm \
+       ActiveBlockDevTab.pm \
+       Base.pm \
+       Blacklist.pm \
+       BlockSpecialFile.pm \
+       BlockSpecialFileTab.pm \
+       FsEntry.pm \
+       FsOpts.pm \
+       FsTab.pm \
+       Hardware.pm \
+       IdeDev.pm \
+       Image.pm \
+       Input.pm \
+       InputTab.pm \
+       KConfig.pm \
+       LabeledPartition.pm \
+       LabeledPartitionTab.pm \
+       LogicalVolume.pm \
+       LvmTab.pm \
+       ModDep.pm \
+       ModDepTab.pm \
+       Obj.pm \
+       Pack.pm \
+       PciDev.pm \
+       PciMapEntry.pm \
+       PciTab.pm \
+       PhysicalVolume.pm \
+       Plan.pm \
+       RaidDev.pm \
+       RaidTab.pm \
+       ScsiDev.pm \
+       SharedLibraries.pm \
+       TestSet.pm \
+       UsbDev.pm \
+       UsbMapEntry.pm \
+       UsbTab.pm \
+       VolumeGroup.pm
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/../Makefile.incl $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  perl/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  perl/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-sbinSCRIPTS: $(sbin_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)"
+       @list='$(sbin_SCRIPTS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f $$d$$p; then \
+           f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+           echo " $(sbinSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
+           $(sbinSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(sbindir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-sbinSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(sbin_SCRIPTS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+         echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(sbindir)/$$f"; \
+       done
+uninstall-info-am:
+install-dist_perlDATA: $(dist_perl_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(perldir)" || $(mkdir_p) "$(DESTDIR)$(perldir)"
+       @list='$(dist_perl_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(dist_perlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(perldir)/$$f'"; \
+         $(dist_perlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(perldir)/$$f"; \
+       done
+
+uninstall-dist_perlDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_perl_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(perldir)/$$f'"; \
+         rm -f "$(DESTDIR)$(perldir)/$$f"; \
+       done
+install-nodist_perlDATA: $(nodist_perl_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(perldir)" || $(mkdir_p) "$(DESTDIR)$(perldir)"
+       @list='$(nodist_perl_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(nodist_perlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(perldir)/$$f'"; \
+         $(nodist_perlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(perldir)/$$f"; \
+       done
+
+uninstall-nodist_perlDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_perl_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(perldir)/$$f'"; \
+         rm -f "$(DESTDIR)$(perldir)/$$f"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(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; \
+         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 \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(perldir)" "$(DESTDIR)$(perldir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_perlDATA install-nodist_perlDATA
+
+install-exec-am: install-sbinSCRIPTS
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_perlDATA uninstall-info-am \
+       uninstall-nodist_perlDATA uninstall-sbinSCRIPTS
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+       distclean-generic distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am \
+       install-dist_perlDATA install-exec install-exec-am \
+       install-info install-info-am install-man \
+       install-nodist_perlDATA install-sbinSCRIPTS install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+       pdf-am ps ps-am uninstall uninstall-am uninstall-dist_perlDATA \
+       uninstall-info-am uninstall-nodist_perlDATA \
+       uninstall-sbinSCRIPTS
+
+
+yaird: main.pl
+       $(edit) < $< > $@
+       chmod ugo+x $@
+
+Conf.pm: Conf.pm.in
+       $(edit) < $< > $@
+# 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.
+.NOEXPORT:
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/Makefile.am b/rescue/linux/cdrom/yaird-0.0.5/perl/Makefile.am
new file mode 100644 (file)
index 0000000..cbf2e22
--- /dev/null
@@ -0,0 +1,86 @@
+# 
+# Makefile.am -- installation and packaging instructions
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+
+include ../Makefile.incl
+
+sbin_SCRIPTS   = yaird
+CLEANFILES     = $(sbin_SCRIPTS) Conf.pm
+
+edit = sed \
+       -e 's!@PERL\@!$(PERL)!' \
+       -e 's!@PACKAGE\@!$(PACKAGE)!' \
+       -e 's!@VERSION\@!$(VERSION)!' \
+       -e 's!@AUXDIR\@!$(auxdir)!' \
+       -e 's!@PERLDIR\@!$(perldir)!'
+
+yaird: main.pl
+       $(edit) < $< > $@
+       chmod ugo+x $@
+
+Conf.pm: Conf.pm.in
+       $(edit) < $< > $@
+
+# not compiled, but must go in the tarball.
+EXTRA_DIST = \
+       main.pl \
+       Conf.pm.in
+
+nodist_perl_DATA = \
+       Conf.pm
+
+dist_perl_DATA = \
+       ActionList.pm \
+       ActiveBlockDev.pm \
+       ActiveBlockDevTab.pm \
+       Base.pm \
+       Blacklist.pm \
+       BlockSpecialFile.pm \
+       BlockSpecialFileTab.pm \
+       FsEntry.pm \
+       FsOpts.pm \
+       FsTab.pm \
+       Hardware.pm \
+       IdeDev.pm \
+       Image.pm \
+       Input.pm \
+       InputTab.pm \
+       KConfig.pm \
+       LabeledPartition.pm \
+       LabeledPartitionTab.pm \
+       LogicalVolume.pm \
+       LvmTab.pm \
+       ModDep.pm \
+       ModDepTab.pm \
+       Obj.pm \
+       Pack.pm \
+       PciDev.pm \
+       PciMapEntry.pm \
+       PciTab.pm \
+       PhysicalVolume.pm \
+       Plan.pm \
+       RaidDev.pm \
+       RaidTab.pm \
+       ScsiDev.pm \
+       SharedLibraries.pm \
+       TestSet.pm \
+       UsbDev.pm \
+       UsbMapEntry.pm \
+       UsbTab.pm \
+       VolumeGroup.pm
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/Makefile.in b/rescue/linux/cdrom/yaird-0.0.5/perl/Makefile.in
new file mode 100644 (file)
index 0000000..c424a17
--- /dev/null
@@ -0,0 +1,461 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# 
+# Makefile.am -- installation and packaging instructions
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+
+# 
+# Makefile.incl -- shared defines between makefiles
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# - auxdir contains package specific executables that may be included
+#   in the generated image
+# - perldir contains perl modules to be included by the main program
+#
+# This cannot be simply passed from the master makefile; that would
+# be invisible to automake.
+
+
+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
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+DIST_COMMON = $(dist_perl_DATA) $(srcdir)/../Makefile.incl \
+       $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+subdir = perl
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(perldir)" \
+       "$(DESTDIR)$(perldir)"
+sbinSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+SCRIPTS = $(sbin_SCRIPTS)
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+dist_perlDATA_INSTALL = $(INSTALL_DATA)
+nodist_perlDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(dist_perl_DATA) $(nodist_perl_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INITRD_TEMPLATE = @INITRD_TEMPLATE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+XMLTO = @XMLTO@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_STRIP = @ac_ct_STRIP@
+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@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+auxdir = $(pkglibdir)/exec
+perldir = $(pkglibdir)/perl
+sbin_SCRIPTS = yaird
+CLEANFILES = $(sbin_SCRIPTS) Conf.pm
+edit = sed \
+       -e 's!@PERL\@!$(PERL)!' \
+       -e 's!@PACKAGE\@!$(PACKAGE)!' \
+       -e 's!@VERSION\@!$(VERSION)!' \
+       -e 's!@AUXDIR\@!$(auxdir)!' \
+       -e 's!@PERLDIR\@!$(perldir)!'
+
+
+# not compiled, but must go in the tarball.
+EXTRA_DIST = \
+       main.pl \
+       Conf.pm.in
+
+nodist_perl_DATA = \
+       Conf.pm
+
+dist_perl_DATA = \
+       ActionList.pm \
+       ActiveBlockDev.pm \
+       ActiveBlockDevTab.pm \
+       Base.pm \
+       Blacklist.pm \
+       BlockSpecialFile.pm \
+       BlockSpecialFileTab.pm \
+       FsEntry.pm \
+       FsOpts.pm \
+       FsTab.pm \
+       Hardware.pm \
+       IdeDev.pm \
+       Image.pm \
+       Input.pm \
+       InputTab.pm \
+       KConfig.pm \
+       LabeledPartition.pm \
+       LabeledPartitionTab.pm \
+       LogicalVolume.pm \
+       LvmTab.pm \
+       ModDep.pm \
+       ModDepTab.pm \
+       Obj.pm \
+       Pack.pm \
+       PciDev.pm \
+       PciMapEntry.pm \
+       PciTab.pm \
+       PhysicalVolume.pm \
+       Plan.pm \
+       RaidDev.pm \
+       RaidTab.pm \
+       ScsiDev.pm \
+       SharedLibraries.pm \
+       TestSet.pm \
+       UsbDev.pm \
+       UsbMapEntry.pm \
+       UsbTab.pm \
+       VolumeGroup.pm
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/../Makefile.incl $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  perl/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  perl/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-sbinSCRIPTS: $(sbin_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)"
+       @list='$(sbin_SCRIPTS)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f $$d$$p; then \
+           f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+           echo " $(sbinSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
+           $(sbinSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(sbindir)/$$f"; \
+         else :; fi; \
+       done
+
+uninstall-sbinSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(sbin_SCRIPTS)'; for p in $$list; do \
+         f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+         echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
+         rm -f "$(DESTDIR)$(sbindir)/$$f"; \
+       done
+uninstall-info-am:
+install-dist_perlDATA: $(dist_perl_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(perldir)" || $(mkdir_p) "$(DESTDIR)$(perldir)"
+       @list='$(dist_perl_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(dist_perlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(perldir)/$$f'"; \
+         $(dist_perlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(perldir)/$$f"; \
+       done
+
+uninstall-dist_perlDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_perl_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(perldir)/$$f'"; \
+         rm -f "$(DESTDIR)$(perldir)/$$f"; \
+       done
+install-nodist_perlDATA: $(nodist_perl_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(perldir)" || $(mkdir_p) "$(DESTDIR)$(perldir)"
+       @list='$(nodist_perl_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(nodist_perlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(perldir)/$$f'"; \
+         $(nodist_perlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(perldir)/$$f"; \
+       done
+
+uninstall-nodist_perlDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_perl_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(perldir)/$$f'"; \
+         rm -f "$(DESTDIR)$(perldir)/$$f"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(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; \
+         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 \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS) $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(perldir)" "$(DESTDIR)$(perldir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-dist_perlDATA install-nodist_perlDATA
+
+install-exec-am: install-sbinSCRIPTS
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-dist_perlDATA uninstall-info-am \
+       uninstall-nodist_perlDATA uninstall-sbinSCRIPTS
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+       distclean-generic distdir dvi dvi-am html html-am info info-am \
+       install install-am install-data install-data-am \
+       install-dist_perlDATA install-exec install-exec-am \
+       install-info install-info-am install-man \
+       install-nodist_perlDATA install-sbinSCRIPTS install-strip \
+       installcheck installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+       pdf-am ps ps-am uninstall uninstall-am uninstall-dist_perlDATA \
+       uninstall-info-am uninstall-nodist_perlDATA \
+       uninstall-sbinSCRIPTS
+
+
+yaird: main.pl
+       $(edit) < $< > $@
+       chmod ugo+x $@
+
+Conf.pm: Conf.pm.in
+       $(edit) < $< > $@
+# 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.
+.NOEXPORT:
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/ModDep.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/ModDep.pm
new file mode 100644 (file)
index 0000000..bb9b377
--- /dev/null
@@ -0,0 +1,55 @@
+#!perl -w
+#
+# ModDep -- encapsulate single line from modules.dep.
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# name - normalised name of the module.
+# file - the file to load for this kernel module
+# origin - file:line where this was defined
+# deps - list of names of modules this module depends on.
+#
+use strict;
+use warnings;
+use Base;
+package ModDep;
+use base 'Obj';
+
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->takeArgs ('name', 'file', 'origin', 'deps');
+}
+
+sub name       { return $_[0]->{name}; }
+sub file       { return $_[0]->{file}; }
+sub origin     { return $_[0]->{origin}; }
+sub deps       { return $_[0]->{deps}; }
+
+sub string {
+       my $self = shift;
+       my $name = $self->name;
+       my $file = $self->file;
+       my $origin = $self->origin;
+       my $deps = join (",", @{$self->deps});
+
+       return "$name($origin) at $file need $deps."
+}
+
+
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/ModDepTab.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/ModDepTab.pm
new file mode 100644 (file)
index 0000000..10615e1
--- /dev/null
@@ -0,0 +1,230 @@
+#!perl -w
+#
+# ModDepTab -- encapsulate modprobe(8)
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# Most important routine is resolve(), which returns a list of
+# modules with dependencies resolved.
+#
+# For every module, we have a list of prerequisite modules;
+# these prerequisites are in no particular order: the prerequisites
+# may have dependencies among themselves that are not satisfied
+# by the order in the list.
+#
+# This emulates modprobe(8) by interpreting /lib/modules/2.6.x/modules.dep.
+# Input format:
+#  - characters are bytes, no messing with utf-8.
+#  - backslash at end of line merges lines
+#  - other \x get replaced by x
+#  - ^\s*# lines are ignored
+#  - lines without : are ignored.
+# This means "aap: noot.#7" is a valid dependency.
+# The backslash interpretation is mostly for modprobe.conf;
+# depmod does not generate it.
+#
+# Modprobe determines module name by dropping everything after dot:
+# "/lib/noot.#7" is module "noot".  We'll adopt the same policy.
+#
+# Note that depmod only grabs modules ending in .ko or .ko.gz;
+# we'll issue a warning if a module has a different suffix.
+#
+# Note that modprobe does not discriminate against modules outside
+# /lib/modules: if it's listed in modules.dep, it's a valid module.
+#
+# Note that redhat has a convention that modules in .../update take
+# precedence over other modules with the same name.  Depmod implements
+# this by not putting modules that are overridden in modules.dep.
+# Thus modprobe and yaird need no special action to support that convention.
+#
+# The logic modprobe uses to determine which modules to load:
+# - replace hyphens with underscore
+# - read config specified on command line,
+#   OR modprobe.conf OR modprobe.d, only first one found.
+#   Remember all "install" and "option" directives,
+#   rewrite module name if an alias matches
+# - if no alias found and the name is of the form 'symbol:xxx':
+#      look in modules.symbols to resolve to a module name
+# - if alias found:
+#      make a list of modules to load, based on modules.dep
+# - else:
+#      make a list of modules to load, based on modules.dep
+#      if that turned up no modules AND there was no install cmd:
+#              - look in modules.aliases to resolve to modulename
+#              - make a list of modules to load, based on modules.dep
+# - if the list to load is empty AND there was no install command:
+#      - complain.
+# # in insmod():
+# - recurse over the module list, most basic stuff first, doing:
+#      - if there is a command for this module name:
+#              execute it
+#      - else:
+#              load the module
+#
+# We probably should replace this perl module with parsing the
+# output of modprobe --verbose --dry-run --show-depends --set-version,
+# but that requires changes in the calling modules, and there's discussion
+# of adding blacklist support to modprobe, so for now, let's not.
+#
+
+use strict;
+use warnings;
+use Base;
+use Conf;
+use ModDep;
+use KConfig;
+
+package ModDepTab;
+
+my $modDepTab = undef;
+my $modDepList = undef;
+
+sub init () {
+       if (defined ($modDepTab)) {
+               return;
+       }
+       $modDepTab = {};
+       my $name = Conf::get('modDep');
+       if (! open (IN, "<", "$name")) {
+               Base::fatal ("can't open $name");
+       }
+       my $lineNo = 0;
+       while (defined (my $line = <IN>)) {
+               $lineNo++;
+               chomp $line;
+
+               # it would be nice to ignore leading and trailing
+               # space, and to allow # comment at end of line.
+               # however, that's not how modprobe does it,
+               # so we shouldn't either.
+               next if $line =~ /^\s*#/;
+
+               if ($line =~ /^(.*):\s*(.*)$/) {
+                       my $file = $1;
+                       my $val = $2;
+                       my $key = $file;
+
+                       if ($key !~ /\.ko$/  && $key !~ /\.ko\.gz/) {
+                               Base::warning ("$name:$lineNo: odd module name: $key");
+                       }
+                       $key =~ s!.*/!!;
+                       $key =~ s!\..*$!!;
+                       $key =~ s!_!-!g;
+
+                       my @fields = split (/\s+/, $val);
+                       for my $i (0 .. $#fields) {
+                               # strip pathname and extension from
+                               # required modules, normalise underscore.
+                               # dont complain about odd suffix.
+                               $fields[$i] =~ s!.*/!!;
+                               $fields[$i] =~ s!\..*$!!;
+                               $fields[$i] =~ s!_!-!g;
+                       }
+                       
+                       my $conflict = $modDepTab->{$key};
+                       if (defined ($conflict)) {
+                               my $origin = $conflict->origin();
+                               Base::warning ("$name:$lineNo: $key overrules earlier definition at $origin");
+                       }
+
+                       $modDepTab->{$key} = ModDep->new (
+                               name => $key,
+                               file => $file,
+                               origin => "$name:$lineNo",
+                               deps => [ @fields ],
+                               );
+               }
+               else {
+                       Base::warning ("$name:$lineNo: malformed line ignored");
+               }
+               
+       }
+       if (! close (IN)) {
+               Base::fatal ("could not read $name");
+       }
+       $modDepList = [ sort keys %{$modDepTab} ];
+}
+
+sub all        () {
+       init;
+       return $modDepList;
+}
+
+sub findByModnam ($) {
+       my ($module) = @_;
+       init;
+       $module =~ s!_!-!g;
+       my $result = $modDepTab->{$module};
+       if (! defined ($result)) {
+               Base::fatal ("can't find dependencies for $module");
+       }
+       return $result;
+}
+
+
+# return a copy of the list with prerequisite modules inserted
+sub resolve ($) {
+       my ($modList) = @_;
+       Base::debug ("resolving: " . join (',', @{$modList}) . '.');
+       my $result = [];
+       resolve2 ($modList, $result);
+       Base::debug ("resolved to: " . join (',', @{$result}) . '.');
+       return $result;
+}
+
+#
+# resolve2 -- given a list of modules, that may have dependencies
+# (even among themselves) and a list of modules that is in proper order
+# to be loaded without unresolved dependencies,
+# add everything from the first list (plus their dependencies)
+# to the second list, without introducing duplicates.
+#
+sub resolve2 ($$);
+sub resolve2 ($$) {
+       my ($modList, $done) = @_;
+OUTER: for my $module (@{$modList}) {
+               #
+               # Stuff that is compiled into the kernel cannot
+               # add or resolve dependencies, and obviously don't
+               # need to be loaded.  Drop them from the list.
+               #
+               if (KConfig::isBuiltIn ($module)) {
+                       next OUTER;
+               }
+               #
+               # if the module is already there, don't add again
+               #
+               for my $d (@{$done}) {
+                       if ($d eq $module) {
+                               next OUTER;
+                       }
+               }
+               #
+               # recursively add prerequisites
+               #
+               my $deps = ModDepTab::findByModnam($module);
+               if (! defined ($deps)) {
+                       Base::fatal ("can't find dependencies for $module");
+               }
+               resolve2 ($deps->deps, $done);
+               #
+               # and module itself
+               #
+               push @{$done}, $module;
+       }
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/Obj.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/Obj.pm
new file mode 100644 (file)
index 0000000..5e6c5bd
--- /dev/null
@@ -0,0 +1,61 @@
+#!perl -w
+#
+# Obj -- basic object stuff
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# The new() function takes a hash as argument, used to do object
+# initialisation.  Initialisation is delegated to fill() in derived
+# classes.  Fill() is expected to use takeArgs() to claim those
+# initialisation args it's interested in; other args are left for
+# fill() functions further down the inheritance chain.  Arguments
+# may have undef as value.
+#
+
+use strict;
+use warnings;
+use Base;
+package Obj;
+
+sub new {
+       my $class = shift;
+       my $self = {};
+       $self->{'_args'} = { @_ };
+       bless ($self, $class);
+       $self->fill();
+        my $bad = join (', ', keys %{$self->{'_args'}});
+       if ($bad ne '') {
+               Base::bug "Unknown constructor args: $bad";
+       }
+       return $self;
+}
+
+sub fill {
+       my $self = shift;
+       # Derived classes can claim arguments like so:
+       # self->SUPER::fill();
+       # $self->takeArg ('a');
+}
+
+sub takeArgs {
+       my ($self, @fields) = @_;
+       for my $field (@fields) {
+               Base::assert (exists ($self->{'_args'}{$field}));
+               $self->{$field} = delete $self->{'_args'}{$field};
+       }
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/Pack.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/Pack.pm
new file mode 100644 (file)
index 0000000..bcf066b
--- /dev/null
@@ -0,0 +1,133 @@
+#!perl -w
+#
+# Pack -- create an image and pack in suitable format.
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# knownFormat -- true if it's a known format
+# package -- given format, image descriptor and destination,
+#     put the image in the destination in requested format.
+#
+# Supported formats:
+#  -- directory, for debugging
+#  -- cramfs, as used in Debian initrd
+#  -- cpio, actually cpio.gz, as used in Fedora initramfs.
+#
+# This module takes care not to leave a partially completed destination
+# on error.
+#
+
+use strict;
+use warnings;
+use File::Temp;
+use Base;
+use Image;
+
+package Pack;
+
+sub packDirectory ($$);
+sub packCramfs ($$);
+sub packCpio ($$);
+
+my $packagers = {
+       directory       => \&packDirectory,
+       cramfs          => \&packCramfs,
+       cpio            => \&packCpio,
+};
+
+sub knownFormat ($) {
+       return exists ($packagers->{$_[0]});
+}
+
+sub package ($$$) {
+       my ($image, $format, $destination) = @_;
+       Base::assert (knownFormat ($format));
+
+       #
+       # Temp based on destination,to increase likelyhood
+       # of rename being atomic.
+       #
+       my $template = "$destination.XXXXXXXXXXXXXXXX";
+       my $tempdir = File::Temp::tempdir ($template, CLEANUP => 1);
+       $image->buildHere ($tempdir);
+
+       $packagers->{$format}($tempdir, $destination);
+}
+
+
+
+sub packDirectory ($$) {
+       my ($tempdir, $destination) = @_;
+
+       if (! rename ($tempdir, $destination)) {
+               Base::fatal ("could not move $tempdir to $destination");
+       }
+}
+
+
+
+sub packCramfs ($$) {
+       my ($tempdir, $destination) = @_;
+
+       my $template = "$destination.XXXXXXXXXXXXXXXX";
+       my ($fh, $tempfile) = File::Temp::tempfile ($template, UNLINK => 1);
+       if (system ("/usr/sbin/mkcramfs -E '$tempdir' '$tempfile' > /dev/null") != 0) {
+               Base::fatal ("mkcramfs $tempdir failed");
+       }
+       if (! rename ($tempfile, $destination)) {
+               Base::fatal ("could not move $tempfile to $destination");
+       }
+}
+
+
+
+sub packCpio ($$) {
+       my ($tempdir, $destination) = @_;
+
+       #
+       # Note how the tempfile can be a relative path, and how cpio
+       # depends on a chdir into tempdir.  Thus, cpio output tempfile
+       # should *not* be based on a template.
+       #
+
+       my $template = "$destination.XXXXXXXXXXXXXXXX";
+       my ($fh, $fromCpio) = File::Temp::tempfile (UNLINK => 1);
+       my ($fh2, $fromGzip) = File::Temp::tempfile ($template, UNLINK => 1);
+
+       #
+       # There are multiple universal unique portable archive formats,
+       # each with the same magic number.
+       # cpio(1) mentions newc and odc; these differ in size of
+       # fields of header.  Whether -oc generates newc or odc depends
+       # on a define in cpio, with Fedora picking a different default
+       # than Debian.  The kernel accepts only newc format (see initramfs.c).
+       # Use the -H newc option to get the right format, regardless
+       # of which default the distro chooses for -c.
+       #
+       if (system ("cd '$tempdir' && find . | cpio --quiet -o -H newc > $fromCpio")) {
+               # $! is useless here: inappropriate ioctl for device ...
+               Base::fatal ("cpio $tempdir failed");
+       }
+       if (system ("gzip -9 < $fromCpio > $fromGzip")) {
+               Base::fatal ("gzip $tempdir failed");
+       }
+
+       if (! rename ($fromGzip, $destination)) {
+               Base::fatal ("could not move $fromGzip to $destination");
+       }
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/PciDev.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/PciDev.pm
new file mode 100644 (file)
index 0000000..28238c6
--- /dev/null
@@ -0,0 +1,46 @@
+#!perl -w
+#
+# PciDev -- the probed values for a PCI device, as found in /sys.
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+use strict;
+use warnings;
+use Base;
+package PciDev;
+use base 'Obj';
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->takeArgs ('path');
+       my $path = $self->path;
+       $self->{vendor} = Base::getHexFile ("$path/vendor");
+       $self->{device} = Base::getHexFile ("$path/device");
+       $self->{subvendor} = Base::getHexFile ("$path/subsystem_vendor");
+       $self->{subdevice} = Base::getHexFile ("$path/subsystem_device");
+       $self->{class} = Base::getHexFile ("$path/class");
+}
+
+sub path       { return $_[0]->{path}; }
+sub vendor     { return $_[0]->{vendor}; }
+sub device     { return $_[0]->{device}; }
+sub subvendor  { return $_[0]->{subvendor}; }
+sub subdevice  { return $_[0]->{subdevice}; }
+sub class      { return $_[0]->{class}; }
+
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/PciMapEntry.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/PciMapEntry.pm
new file mode 100644 (file)
index 0000000..1dad7d6
--- /dev/null
@@ -0,0 +1,65 @@
+#!perl -w
+#
+# PciMapEntry - iencapsulate a line form modules.pcimap.
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+#
+# Knows how to match, can return module name.
+#
+
+use strict;
+use warnings;
+use Base;
+package PciMapEntry;
+use base 'Obj';
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->takeArgs ('module', 'vendor', 'device', 'subvendor',
+                       'subdevice', 'class', 'classmask', 'driver_data');
+}
+
+sub module     { return $_[0]->{module}; }
+
+# we could do the PCI_ANY processing in init,
+# if it turns out to be time critical.
+my $PCI_ANY = 0xffffffff;
+sub matches {
+       my ($self, $dev) = @_;
+       if ($self->{vendor} != $PCI_ANY  && $self->{vendor} != $dev->vendor) {
+               return 0;
+       }
+       if ($self->{device} != $PCI_ANY  && $self->{device} != $dev->device) {
+               return 0;
+       }
+       if ($self->{subvendor} != $PCI_ANY 
+               && $self->{subvendor} != $dev->subvendor) {
+               return 0;
+       }
+       if ($self->{subdevice} != $PCI_ANY
+               && $self->{subdevice} != $dev->subdevice) {
+               return 0;
+       }
+       if ($self->{class} == ($dev->class & $self->{classmask})) {
+               return 1;
+       }
+       return 0;
+}
+
+1;
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/PciTab.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/PciTab.pm
new file mode 100644 (file)
index 0000000..241f76c
--- /dev/null
@@ -0,0 +1,89 @@
+#!perl -w
+#
+# PciTab -- encapsulate modules.pcimap
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+
+use strict;
+use warnings;
+use Base;
+use Conf;
+use PciMapEntry;
+package PciTab;
+
+my $pciList = undef;
+
+# Parse this:
+# # pci module         vendor     device     subvendor  subdevice  class      class_mask driver_data
+# parport_pc           0x00001106 0x00000686 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0
+# parport_pc           0x00001106 0x00008231 0xffffffff 0xffffffff 0x00000000 0x00000000 0x0
+
+sub init () {
+       if (defined ($pciList)) {
+               return;
+       }
+       $pciList = [];
+       my $name = Conf::get('pciMap');
+       if (! open (IN, "<", "$name")) {
+               Base::fatal ("can't open pci module list $name");
+       }
+       while (defined (my $line = <IN>)) {
+               chomp $line;
+               $line =~ s/#.*//;
+               $line =~ s/^\s+//;
+               $line =~ s/\s+$//;
+               next if ($line eq "");
+               my @fields = split (/\s+/, $line, 999);
+               if ($#fields != 7) {
+                       Base::fatal "malformed line in pci module list $name";
+               }
+               push @{$pciList}, PciMapEntry->new (
+                       module => $fields[0],
+                       vendor => hex ($fields[1]),
+                       device => hex ($fields[2]),
+                       subvendor => hex ($fields[3]),
+                       subdevice => hex ($fields[4]),
+                       class => hex ($fields[5]),
+                       classmask => hex ($fields[6]),
+                       driver_data => hex ($fields[7]),
+                       );
+       }
+       if (! close (IN)) {
+               Base::fatal "could not read pci module list $name";
+       }
+}
+
+sub all        () {
+       init;
+       return $pciList;
+}
+
+# given pathname in devices tree, find module name in PCI map as a list.
+sub find ($) {
+       my ($dev) = @_;
+       my @result = ();
+       for my $pme (@{PciTab::all()}) {
+               if ($pme->matches ($dev)) {
+                       push @result, $pme->module;
+               }
+       }
+       return [@result];
+}
+
+
+1;
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/PhysicalVolume.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/PhysicalVolume.pm
new file mode 100644 (file)
index 0000000..4d8fc4f
--- /dev/null
@@ -0,0 +1,49 @@
+#!perl -w
+#
+# PhysicalVolume -- Physical Volume Descriptor
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# pvnam - physical volume name
+# vgnam - volume group name
+# devno - "major:minor"
+#
+
+use strict;
+use warnings;
+package PhysicalVolume;
+use base 'Obj';
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->takeArgs ('pvnam', 'vgnam', 'uuid');
+}
+
+sub pvnam      { return $_[0]->{pvnam}; }
+sub vgnam      { return $_[0]->{vgnam}; }
+sub uuid       { return $_[0]->{uuid}; }
+
+sub string {
+       my $self = shift;
+       my $pvnam = $self->pvnam;
+       my $vgnam = $self->vgnam;
+       my $uuid = $self->uuid;
+       my $str = "$pvnam in $vgnam, $uuid";
+       return $str;
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/Plan.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/Plan.pm
new file mode 100644 (file)
index 0000000..7f7d304
--- /dev/null
@@ -0,0 +1,311 @@
+#!perl -w
+#
+# Plan -- plan what to put on the initrd image
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+#
+#
+use strict;
+use warnings;
+use Base;
+use FsTab;
+use ActiveBlockDevTab;
+use LvmTab;
+use Hardware;
+use ModDepTab;
+use RaidTab;
+use Image;
+use Blacklist;
+use ActionList;
+
+package Plan;
+
+
+
+#
+# modulesExpand -- given a list of modules, return an ordered
+# list of modules, with blacklisted items deleted,
+# compiled in modules deleted, and any dependencies resolved.
+# A module found by eg PCI matching and dropped because of blacklisting
+# may be added later to resolve a dependency.
+#
+sub modulesExpand ($) {
+       my ($modlist) = (@_);
+
+       my $ml = [];
+       for my $moduleName (@{$modlist}) {
+               if (Blacklist::isBlacklisted ($moduleName)) {
+                       next;
+               }
+               push @{$ml}, $moduleName;
+       }
+
+       # resolve drops compiled-in stuff.
+       my $fullModList = ModDepTab::resolve ($ml);
+
+       return $fullModList;
+}
+
+
+
+#
+# addModules -- given an actionList and list of modules,
+# add actions to load them all, unless blacklisted or compiled in.
+#
+sub addModules ($$) {
+       my ($actionList, $modList) = @_;
+
+       my $fullModList = modulesExpand ($modList);
+       for my $moduleName (@{$fullModList}) {
+               my $modDep = ModDepTab::findByModnam ($moduleName);
+               Base::assert (defined ($modDep));
+               $actionList->add ("insmod", $modDep->file);
+       }
+}
+
+
+#
+# addHardware -- given hardware path, potentially undef,
+# add required actions to the action list.
+#
+sub addHardware ($$) {
+       my ($actionList, $hardware) = @_;
+       if (defined ($hardware)) {
+               my $modList = Hardware::moduleList ($hardware);
+               addModules ($actionList, $modList);
+               Base::info ("hardware: completed $hardware");
+       }
+}
+
+
+#
+# addDevicePlan -- given an active block device, add to actionList
+# a sequence to make it into a working device file, suitable for mounting.
+# For eg LVM modules this means loading dm-mod, but also it
+# means recursively making the underlying devices available.
+# There is a possibility of loops here (consider an fstab
+# where /a is a loopback mount of /a/disk.img); we want do
+# detect these loops and produce an error.  Also, we want to
+# avoid double work: if five lvm logical volumes use the same
+# underlying raid device, there's not much point in running
+# mdadm five times.
+# There are some contraints on the name of the device file;
+# see yspecial in ActiveBlockDev.
+#
+# actionList - add actions here
+# device - the active block device to be made available.
+# done - list of devices that can be assumed to be available;
+#              updated in place.
+# working - list of devices we're working on, excluding path.
+#
+sub addDevicePlan ($$$$);
+sub addDevicePlan ($$$$) {
+       my ($actionList, $device, $done, $working) = @_;
+
+       for my $w (@{$working}) {
+               if ($w eq $device) {
+                       Base::fatal ("loop detected: $device\n");
+               }
+       }
+       for my $w (@{$done}) {
+               if ($w eq $device) {
+                       return;
+               }
+       }
+
+       my $name = $device->name;
+       my $parent = $device->parent;
+       my $devno = $device->devno;
+       my $hardware = $device->hw;
+       my $yspecial = $device->yspecial;
+
+       if (defined ($parent)) {
+               #
+               # It's a partition.  To make it available, do the whole
+               # device, then make a special file for the partition.
+               #
+               addDevicePlan($actionList,$parent,$done,[$device,@{$working}]);
+               my $pname = $parent->name;
+               $actionList->add ("mkbdev", $yspecial,
+                               sysname => "$pname/$name");
+       }
+       elsif ($name =~ /^dm-\d+$/) {
+               #
+               # To start an LVM device, make available the underlying
+               # physical volumes, then start the volume group.
+               # creating the block special file is a side effect of
+               # starting the volume group.
+               # The activeBlockDev->yspecial() method is choosen such
+               # that the name returned matches the name of the block special
+               # file generated by vgchange.
+               # Physical volumes are named by the block
+               # special file that gives access to it.
+               #
+               my $lv = LvmTab::findLVByDevno ($devno);
+               if (! defined ($lv)) {
+                       Base::fatal ("Can't find LVM info for $name");
+               }
+               my $vgnam = $lv->vgnam;
+               for my $physVol (@{LvmTab::findPVsByVgnam($vgnam)}) 
+               {
+                       my $pdev = ActiveBlockDevTab::findByPath
+                                                       ($physVol->pvnam);
+                       addDevicePlan ($actionList, $pdev, $done,
+                                       [$device,@{$working}]);
+               }
+               addModules ($actionList, [ "dm-mod" ]);
+               $actionList->add ("vgchange", $vgnam);
+       }
+       elsif ($name =~ /^md\d+$/) {
+               #
+               # To start an md raid device, start the underlying hardware,
+               # load raid module, then do mdadm --assemble.
+               #
+               my $rd = RaidTab::findByDevno ($devno);
+               if (! defined ($rd)) {
+                       Base::fatal ("Can't find Raid info for $name");
+               }
+               my $components = [];
+               for my $subDiskPath (@{$rd->devices()}) {
+                       my $subDisk = ActiveBlockDevTab::findByPath
+                                       ($subDiskPath);
+                       addDevicePlan ($actionList, $subDisk,
+                                       $done,[$device,@{$working}]);
+                       my $subName = $subDisk->yspecial;
+                       push @{$components}, {dev => $subName};
+               }
+               addModules ($actionList, [ $rd->level ]);
+
+               my $uuid = $rd->uuid;
+               my ($major, $minor) = ($devno =~ /(\d+):(\d+)/);
+
+               $actionList->add ("mdadm", $yspecial,
+                       major => $major,
+                       minor => $minor,
+                       uuid => $uuid,
+                       components => $components,
+                       );
+       }
+       elsif ($name =~ /^hd[a-z]$/
+               || $name =~ /^sd[a-z]$/)
+       {
+               # IDE or SCSI.
+               addHardware ($actionList, $hardware);
+               $actionList->add ("mkbdev", $yspecial, sysname => "$name");
+       }
+       elsif ($name =~ /^fd\d+$/) {
+               addModules ($actionList, [ "floppy" ]);
+               $actionList->add ("mkbdev", $yspecial, sysname => "$name");
+       }
+       else {
+               Base::fatal ("unsupported device required: $name");
+       }
+
+       push @{$done}, $device;
+}
+
+
+#
+# addInputPlan -- list of actions to activate console,
+# for now only keyboard, no framebuffer.
+#
+sub addInputPlan ($) {
+       my ($actionList) = @_;
+       for my $input (@{InputTab::all()}) {
+               if (! $input->isKbd()) {
+                       next;
+               }
+               addHardware ($actionList, $input->hw);
+       }
+}
+
+
+#
+# makePlan -- return a list of actions to mount root.
+# if rootDevName is defined, use that instead of the
+# device mounted as / in current fstab.
+#
+sub makePlan ($) {
+       my ($rootDevName) = @_;
+       my $actionList = ActionList->new();
+
+       my $root;
+       if (defined ($rootDevName)) {
+               $root = FsTab::findByDevName($rootDevName);
+               if (! defined ($root)) {
+                       fatal ("alternate root $rootDevName not in fstab");
+               }
+       }
+       else {
+               $root = FsTab::findByMountPoint('/');
+               if (! defined ($root)) {
+                       fatal ("no root in fstab");
+               }
+       }
+
+       $actionList->add ("prologue", "");
+
+       addInputPlan($actionList);
+
+       # swap space is needed for soft suspend,
+       # computed like so, but unused for now.
+       my @swapEntries = ();
+       for my $entry (@{FsTab->all}) {
+               if (! $entry->isRequiredAtBoot()) {
+                       next;
+               }
+               if ($entry->type eq "swap") {
+                       push @swapEntries, $entry;
+               }
+       }
+
+       my $devicesDone = [];
+       # for swsusp, use ($root, @swapEntries)
+       for my $fsTabEntry ($root) {
+               my $path = $fsTabEntry->blockDevPath();
+               if (! defined ($path)) {
+                       my $str = $fsTabEntry->string;
+                       Base::fatal ("unsupported block device specification in $str");
+               }
+               my $abd = ActiveBlockDevTab::findByPath($path);
+               if (! defined ($abd)) {
+                       my $str = $fsTabEntry->string;
+                       Base::fatal ("block device $path for $str unavailable");
+               }
+               addDevicePlan ($actionList, $abd, $devicesDone, []);
+       }
+
+       my $fsType = $root->type;
+       addModules ($actionList, [ $fsType ]);
+
+       my $path = $root->blockDevPath();
+       my $yspecial = ActiveBlockDevTab::findByPath($path)->yspecial();
+       my $opts = $root->opts->cmdLineVersion();
+
+       $actionList->add ("mount", "/mnt",
+               options => $opts,
+               fsType => $fsType,
+               isRoot => 1,
+               device => $yspecial);
+
+       $actionList->add ("postlude", "");
+
+       return $actionList;
+}
+
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/RaidDev.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/RaidDev.pm
new file mode 100644 (file)
index 0000000..fc1eea2
--- /dev/null
@@ -0,0 +1,46 @@
+#!perl -w
+#
+# RaidDev -- the probed values for a raid device, as found by mdadm.
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+use strict;
+use warnings;
+package RaidDev;
+use base 'Obj';
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->takeArgs ('path', 'uuid', 'level', 'devices');
+}
+
+sub path       { return $_[0]->{path}; }
+sub uuid       { return $_[0]->{uuid}; }
+sub level      { return $_[0]->{level}; }
+sub devices    { return $_[0]->{devices}; }
+
+sub string {
+       my $self = shift;
+       my $path = $self->path;
+       my $uuid = $self->uuid;
+       my $level = $self->level;
+       my $devices = join (',', @{$self->devices});
+       return "$path($level) = $uuid at $devices";
+}
+
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/RaidTab.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/RaidTab.pm
new file mode 100644 (file)
index 0000000..2c8e6ad
--- /dev/null
@@ -0,0 +1,170 @@
+#!perl -w
+#
+# RaidTab -- encapsulate mdadm output
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# NOTE: The mdadm --detail shows only devices that are running,
+# and does not distinguish between partitionable and non-partitionable
+# devices.
+#
+use strict;
+use warnings;
+use Base;
+use Conf;
+use RaidDev;
+package RaidTab;
+
+
+my $raidTab = undef;
+
+
+sub init () {
+       if (defined ($raidTab)) {
+               return;
+       }
+
+       # my $name = Conf::get('fstab');
+       $raidTab = [];
+       my $in;
+       if (! open ($in, "-|", "/sbin/mdadm --detail --scan")) {
+               Base::fatal ("Can't read mdadm output");
+       }
+       my @lines = <$in>;
+       if (! close ($in)) {
+               Base::fatal ("Could not read mdadm output");
+       }
+       my $buf;
+       for my $line (@lines) {
+               chomp $line;
+               if ($line =~ /^\s+/) {
+                       $buf = $buf . $line;
+               }
+               else {
+                       if (defined ($buf)) {
+                               processLine ($buf);
+                       }
+                       $buf = $line;
+               }
+       }
+       if (defined ($buf)) {
+               processLine ($buf);
+       }
+}
+
+sub processLine ($) {
+       my ($line) = @_;
+       my @fields = split (/\s+/, $line);
+       if ($fields[0] ne "ARRAY") {
+               Base::fatal ("Expected ARRAY keyword in mdadm output");
+       }
+       my $path = $fields[1];
+       my $uuid;
+       my $level;
+       my $devices;
+       for my $i (2 .. $#fields) {
+               if ($fields[$i] =~ /^uuid=(.+)$/i) {
+                       if (defined ($uuid)) {
+                               Base::fatal ("duplicate uuid attribute in mdadm output");
+                       }
+                       $uuid = $1;
+               }
+               elsif ($fields[$i] =~ /^super-minor=(\d+)$/i) {
+                       # nothing
+               }
+               elsif ($fields[$i] =~ /^devices=(.+)$/i) {
+                       if (defined ($devices)) {
+                               Base::fatal ("duplicate devices attribute in mdadm output");
+                       }
+                       $devices = $1;
+               }
+               elsif ($fields[$i] =~ /^level=(.+)$/i) {
+                       if (defined ($level)) {
+                               Base::fatal ("duplicate level attribute in mdadm output");
+                       }
+                       $level = $1;
+               }
+               elsif ($fields[$i] =~ /^num-devices=(\d+)$/i) {
+                       # nothing
+               }
+               elsif ($fields[$i] =~ /^spare-group=(.+)$/i) {
+                       # nothing
+               }
+               elsif ($fields[$i] =~ /^auto=(.+)$/i) {
+                       # nothing
+               }
+               elsif ($fields[$i] =~ /^spares=(\d+)$/i) {
+                       # nothing
+               }
+               else {
+                       my $pair = $fields[$i];
+                       Base::fatal ("Unknown attribute $pair in mdadm output");
+               }
+       }
+       if (! defined($path)) {
+               Base::fatal ("Missing device field in mdadm output");
+       }
+       if (! defined($uuid)) {
+               Base::fatal ("Missing uuid attribute in mdadm output");
+       }
+       if (! defined($level)) {
+               Base::fatal ("Missing level attribute in mdadm output");
+       }
+       if (! defined($devices)) {
+               Base::fatal ("Missing devices attribute in mdadm output");
+       }
+
+       my $descr = RaidDev->new (
+               path => $path,
+               uuid => $uuid,
+               level => $level,
+               devices => [split (/,/, $devices)],
+               );
+       push @{$raidTab}, $descr;
+}
+
+
+sub all        () {
+       init;
+       return $raidTab;
+}
+
+sub findByPath ($) {
+       my ($path) = @_;
+       for my $rd (@{all()}) {
+               if ($rd->path() eq $path) {
+                       return $rd;
+               }
+       }
+       return undef;
+}
+
+sub findByDevno ($) {
+       my ($devno) = @_;
+       #
+       # NOTE: following does not cover the case where multiple
+       # block special files refer to the same md device.
+       # We need a find function that retrieves all descriptors
+       # matching a devno.
+       #
+       my $bsf = BlockSpecialFileTab::findByDevno ($devno);
+       if (! defined ($bsf)) {
+               return undef;
+       }
+       return findByPath ($bsf->path);
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/ScsiDev.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/ScsiDev.pm
new file mode 100644 (file)
index 0000000..f771bc0
--- /dev/null
@@ -0,0 +1,107 @@
+#!perl -w
+#
+# ScsiDev -- the probed values for a SCSI device, as found in /sys.
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# Like IDE devices, SCSI devices need a protocol driver, based
+# on device type, without hardware probing and matching against
+# a kernel generated table.
+#
+# The type and module knowledge is based in /etc/hotplug/scsi.agent,
+# that attributes scsi/scsi.h.
+#
+use strict;
+use warnings;
+use Base;
+package ScsiDev;
+use base 'Obj';
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->takeArgs ('path');
+       my $path = $self->path;
+       my $name = readlink ("$path/block");
+       if (defined ($name)) {
+               $name = Base::basename ($name);
+               $self->{name} = $name;
+       }
+       else {
+               $self->{name} = undef;
+       }
+       $self->{vendor} = Base::getStringFile ("$path/vendor");
+       $self->{model} = Base::getStringFile ("$path/model");
+
+       my $type = Base::getStringFile ("$path/type");
+       $self->{type} = "disk" if $type eq '0';
+       $self->{type} = "tape" if $type eq '1';
+       $self->{type} = "printer" if $type eq '2';
+       $self->{type} = "processor" if $type eq '3';
+       $self->{type} = "worm" if $type eq '4';
+       $self->{type} = "cdrom" if $type eq '5';
+       $self->{type} = "scanner" if $type eq '6';
+       $self->{type} = "mod" if $type eq '7';
+       $self->{type} = "changer" if $type eq '8';
+       $self->{type} = "comm" if $type eq '9';
+       $self->{type} = "enclosure" if $type eq '14';
+       $self->{type} = "type$type" if (!defined ($self->{type}));
+}
+
+sub path       { return $_[0]->{path}; }
+sub name       { return $_[0]->{name}; }
+sub vendor     { return $_[0]->{vendor}; }
+sub model      { return $_[0]->{model}; }
+sub type       { return $_[0]->{type}; }
+
+sub string {
+       my $self = shift;
+       my $path = $self->path();
+       my $name = $self->name();
+       my $vendor = $self->vendor();
+       my $model = $self->model();
+       my $type = $self->type();
+       $name = "---" if (! defined ($name));
+       return "$name ($type) = $vendor, $model at $path";
+}
+
+
+#
+# findModuleByScsiDev -- list of required SCSI drivers
+#
+sub findModuleByScsiDev ($) {
+       my ($scsiDev) = @_;
+       my $type = $scsiDev->type();
+       my $driver;
+       $driver = "sd-mod" if $type eq "disk";
+       # "FIXME some tapes use 'osst'"
+       $driver = "st" if $type eq "tape";
+       # if $type eq "printer";
+       # if $type eq "processor";
+       $driver = "sr-mod" if $type eq "worm";
+       $driver = "sr-mod" if $type eq "cdrom";
+       # if $type eq "scanner";
+       $driver = "sd-mod" if $type eq "mod";
+       # if $type eq "changer";
+       # if $type eq "comm";
+       # if $type eq "enclosure";
+       $driver = "sg" if (! defined ($driver));
+       return [ $driver ];
+}
+
+1;
+
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/SharedLibraries.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/SharedLibraries.pm
new file mode 100644 (file)
index 0000000..4288895
--- /dev/null
@@ -0,0 +1,140 @@
+#!perl -w
+#
+# SharedLibraries -- what shared libraries an object needs.
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+use strict;
+use warnings;
+use Base;
+use Conf;
+package SharedLibraries;
+
+
+#
+# find -- find the shared libraries that are needed by an executable.
+# Try to find libraries with ldd first.  That works only with executables
+# linked with glibc, so if ldd finds nothing, we look for traces of klibc.
+#
+sub find ($) {
+       my ($executable) = @_;
+       my $in;
+       my $result = [];
+
+       if ($executable !~ m!^([.\w/-]+)$!) {
+               # taint check.
+               Base::fatal ("odd characters in executable name: $executable");
+       }
+       $executable = $1;
+
+       if (! open ($in, "-|", "/usr/bin/ldd $executable")) {
+               Base::fatal ("can't read ldd for $executable");
+       }
+       while (defined (my $line = <$in>)) {
+               chomp $line;
+               last if ($line =~ /statically linked/);
+               if ($line =~ /not a dynamic executable/) {
+                       #
+                       # Happens when doing ldd on a shell script
+                       # or kernel module (these have x-bit on in FC3,
+                       # no idea why they would do that).  Ldd exit status
+                       # will be non-zero.
+                       # Ldd only understands executables compiled with
+                       # glibc; try to find use of other libraries.
+                       #
+                       return findLibr ($executable);
+               }
+               elsif ($line =~ m!.* => (/.+) \(0x[0-9a-fA-F]+\)$!) {
+                       #
+                       # in ldd 2.3.2 (Debian) output looks like this:
+                       # /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb7fea000)
+                       #
+                       push @{$result}, $1;
+               }
+               elsif ($line =~ m!^\s*(/[^\s]+) \(0x[0-9a-fA-F]+\)$!) {
+                       #
+                       # But ldd 2.3.3 (FC3) has this:
+                       # /lib/ld-linux.so.2 (0x0056f000)
+                       #
+                       push @{$result}, $1;
+               }
+               elsif ($line =~ m!.* =>  \(0x[0-9a-fA-F]+\)$!) {
+                       #
+                       # And eg amd64 also has this:
+                       #       linux-gate.so.1 =>  (0x00000000)
+                       #
+                       # note the double space.  This is a section not
+                       # loaded from a file but mapped in by the kernel.
+                       # The kernel puts some code with proper syscall
+                       # linkage here.
+                       # See http://lkml.org/lkml/2003/6/18/156
+                       #
+                       next;
+               }
+               else {
+                       Base::fatal ("unexpected ldd output for $executable: $line");
+               }
+       }
+       if (! close ($in)) {
+               Base::fatal ("could not read ldd for $executable");
+       }
+       return $result;
+}
+
+
+#
+# findLibr -- given a filename, return name of dynamic loader.
+# non-ELF files or non-executable ELF files return empty list,
+# corrupt ELF files are fatal error.
+# If there are shared libraries without absolute path,
+# fatal error, since we don't know how the path the library uses
+# to look up the shared library.
+#
+sub findLibr ($) {
+       my ($executable) = @_;
+       my $in;
+       my $result = [];
+       my $auxDir = Conf::get ('auxDir');
+
+       if (! open ($in, "-|", "$auxDir/findlibs -q $executable")) {
+               Base::fatal ("can't run findlibr for $executable");
+       }
+
+       while (defined (my $line = <$in>)) {
+               chomp $line;
+               if ($line =~ /^interpreter: ([\w.\/-]+)$/) {
+                       push @{$result}, $1;
+               }
+               elsif ($line =~ /^needed: ([\w.\/-]+)$/) {
+                       if (Base::isAbsolute ($1)) {
+                               push @{$result}, $1;
+                       }
+                       else {
+                               fatal ("shared library without glibc: $1 in $executable");
+                       }
+               }
+               else {
+                       bug ("odd output for findlibs");
+               }
+       }
+
+       if (! close ($in)) {
+               Base::fatal ("could not run findlibr for $executable");
+       }
+       return $result;
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/TestSet.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/TestSet.pm
new file mode 100644 (file)
index 0000000..c61e91a
--- /dev/null
@@ -0,0 +1,260 @@
+#!perl -w
+#
+# Test -- test routines, mostly printing hw inventory.
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+#
+#
+use strict;
+use warnings;
+use Base;
+use FsTab;
+use ActiveBlockDevTab;
+use BlockSpecialFileTab;
+use LabeledPartitionTab;
+use LvmTab;
+use Hardware;
+use ModDepTab;
+use RaidTab;
+use InputTab;
+use Image;
+use Plan;
+use KConfig;
+
+package TestSet;
+
+
+sub testGetFsTab () {
+       print "Entries in fstab:\n";
+       for my $entry (@{FsTab->all}) {
+               my $str = $entry->string;
+               my $cmd = $entry->opts->cmdLineVersion;
+               print "\t$str\n";
+               print "\t\t$cmd\n";
+       }
+}
+
+
+sub testActiveBlockDevs () {
+       print "Block devices in /sys:\n";
+       for my $abd (@{ActiveBlockDevTab::all()}) {
+               my $str = $abd->string;
+               print "\t$str\n";
+       }
+}
+
+sub testActiveBlockDevPartitions () {
+       print "Partitions for block devices in /sys:\n";
+       for my $abd (@{ActiveBlockDevTab::all()}) {
+               my $str = $abd->string;
+               my $hp = $abd->hasPartitions() ? "yes" : "no";
+               my $partitions = $abd->partitions();
+               my $partList = '['
+                       . join (',', (map {$_->name} @{$partitions})) . ']';
+               print "\t$str\n";
+               print "\t\tpartitioned:\t$hp\n";
+               print "\t\tpartitions:\t$partList\n";
+       }
+}
+
+
+sub testBlockSpecialFiles () {
+       print "Block special files /dev:\n";
+       for my $bsf (@{BlockSpecialFileTab::all()}) {
+               my $str = $bsf->string;
+               print "\t$str\n";
+       }
+}
+
+
+sub testLabeledPartitions () {
+       print "Labeled partitions detected:\n";
+       for my $lp (@{LabeledPartitionTab::all()}) {
+               my $str = $lp->string;
+               print "\t$str\n";
+       }
+}
+
+
+sub testLvm () {
+       print "LVM Logical Volumes:\n";
+       for my $lv (@{LvmTab::allLogicalVolumes()}) {
+               my $str = $lv->string;
+               print "\t$str\n";
+       }
+
+       print "LVM Volume Groups:\n";
+       for my $vg (@{LvmTab::allVolumeGroups()}) {
+               my $str = $vg->string;
+               print "\t$str\n";
+       }
+
+       print "LVM Physical Volumes:\n";
+       for my $pv (@{LvmTab::allPhysicalVolumes()}) {
+               my $str = $pv->string;
+               print "\t$str\n";
+       }
+}
+
+
+sub testHardware () {
+       print "Hardware modules needed for devices in /sys:\n";
+       for my $abd (@{ActiveBlockDevTab::all()}) {
+               my $str = $abd->string;
+               my $hw = $abd->hw;
+               next unless defined ($hw);
+               print "\t$str\n";
+               my $moduleList = Hardware::moduleList ($hw);
+               print "\t\t[" . join(',', @{$moduleList}) . "]\n";
+       }
+}
+
+sub testModDep () {
+       print "Module dependencies:\n";
+       for my $modDep (@{ModDepTab::all()}) {
+               my $str = ModDepTab::findByModnam($modDep)->string;
+               print "\t$str\n";
+       }
+}
+
+sub testModResolve () {
+       print "Hardware modules with resolved dependencies:\n";
+       for my $abd (@{ActiveBlockDevTab::all()}) {
+               my $str = $abd->string;
+               my $hw = $abd->hw;
+               next unless defined ($hw);
+               print "\t$str\n";
+               my $moduleList = Hardware::moduleList ($hw);
+               print "\t\t[" . join(',', @{$moduleList}) . "]\n";
+               my $resolveList = ModDepTab::resolve ($moduleList);
+               print "\t\t[" . join(',', @{$resolveList}) . "]\n";
+       }
+}
+
+sub testRaidDevices () {
+       print "Raid devices:\n";
+       for my $rd (@{RaidTab::all()}) {
+               my $str = $rd->string;
+               print "\t$str\n";
+       }
+}
+
+sub testInput () {
+       print "Input devices:\n";
+       for my $inp (@{InputTab::all()}) {
+               my $str = $inp->string;
+               print "\t$str\n";
+       }
+}
+
+sub testInterpretation () {
+       print "Interpreted Fstab Entries:\n";
+       for my $fse (@{FsTab->all}) {
+               my $fseStr = $fse->string;
+               my $active = $fse->isRequiredAtBoot ? "yes": "no";
+               my $path = $fse->blockDevPath();
+               my $lvmStr = "--";
+               my $devno = "--";
+               my $hardware;
+               my $name = "--";
+               my $modules;
+               my $resolved;
+               if (defined ($path) && -b $path) {
+                       $devno = Base::devno ($path);
+                       my $lvmFiles = LvmTab::findPVPathsByLVDevno ($devno);
+                       if (defined ($lvmFiles)) {
+                               $lvmStr = '[' . join (',', @{$lvmFiles}) . ']';
+                       }
+
+                       my $abd = ActiveBlockDevTab::findByDevno($devno);
+                       if (defined ($abd)) {
+                               $name = $abd->name();
+                               my $parent = $abd->parent();
+                               if (defined ($parent)) {
+                                       $hardware = $parent->hw();
+                               }
+                               else {
+                                       $hardware = $abd->hw();
+                               }
+                       }
+               }
+               if (defined ($hardware)) {
+                       my $moduleList = Hardware::moduleList ($hardware);
+                       $modules = "[" . join(',', @{$moduleList}) . "]";
+                       my $resolveList = ModDepTab::resolve ($moduleList);
+                       $resolved = "[" . join(',', @{$resolveList}) . "]";
+               }
+
+               $hardware = "--" unless defined ($hardware);
+               $modules = "--" unless defined ($modules);
+               $resolved = "--" unless defined ($resolved);
+               $path = "--" unless defined ($path);
+               print "\t$fseStr\n";
+               print "\t\tactive:\t$active\n";
+               print "\t\tdevno:\t$devno\n";
+               print "\t\tpath:\t$path\n";
+               print "\t\tname:\t$name\n";
+               print "\t\thw:\t$hardware\n";
+               print "\t\tmods:\t$modules\n";
+               print "\t\tresolv:\t$resolved\n";
+               print "\t\tlvm:\t$lvmStr\n";
+
+               if (defined ($path)) {
+                       my $abd = ActiveBlockDevTab::findByPath($path);
+                       if (defined ($abd)) {
+                               my $list = ActionList->new();
+                               Plan::addDevicePlan ($list, $abd, [], []);
+                               # the output provided by addDevicePlan
+                               # is enough.
+                               # print $list->string();
+                       }
+               }
+       }
+}
+
+sub testKconfig () {
+       print "Kernel Builtin Modules:\n";
+       for my $module (@{KConfig::allKnownModules()}) {
+               my $builtIn = KConfig::isBuiltIn($module) ? "BUILTIN" : "--";
+               print "\t$module:\t$builtIn\n";
+       }
+}
+
+#
+# testAll -- run various interesting subroutines
+# that may trigger errors.
+#
+sub testAll ()
+{
+       testGetFsTab ();
+       testBlockSpecialFiles ();
+       testLabeledPartitions ();
+       testActiveBlockDevs ();
+       testActiveBlockDevPartitions ();
+       testLvm ();
+       testHardware ();
+       testModDep ();
+       testModResolve ();
+       testRaidDevices();
+       testInterpretation ();
+       testInput ();
+       testKconfig ();
+       Base::bye ();
+}
+
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/UsbDev.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/UsbDev.pm
new file mode 100644 (file)
index 0000000..132494b
--- /dev/null
@@ -0,0 +1,88 @@
+#!perl -w
+#
+# UsbDev -- the probed values for a USB device, as found in /sys.
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+#
+# The information passed to the matcher should correspond to what
+# is passed by hotplug.
+#
+# For devices:
+#      vendor, product, bcdDevice = 0, 0, 0
+#      deviceClass, subClass, protocol = from /sys
+#      interfaceClass, subClass, protocol = 1000,1000,1000
+# For interfaces:
+#      vendor, product, bcdDevice = from /sys in parent device
+#      deviceClass, subClass, protocol = 1000,1000,1000
+#      interfaceClass, subClass, protocol = from /sys
+#
+# Note that somewhere in 2.5, the hotplug events for USB
+# changed: old kernels only had an event for the first interface,
+# with no distinction between interface and device.
+#
+use strict;
+use warnings;
+use Base;
+package UsbDev;
+use base 'Obj';
+
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->takeArgs ('path');
+       my $path = $self->{path};
+       if (-f "$path/bDeviceClass") {
+               $self->{idVendor} = 0;
+               $self->{idProduct} = 0;
+               $self->{bcdDevice} = 0;
+               $self->{bDeviceClass} = Base::getHexFile ("$path/bDeviceClass");
+               $self->{bDeviceSubClass} = Base::getHexFile ("$path/bDeviceSubClass");
+               $self->{bDeviceProtocol} = Base::getHexFile ("$path/bDeviceProtocol");
+               $self->{bInterfaceClass} = 1000;
+               $self->{bInterfaceSubClass} = 1000;
+               $self->{bInterfaceProtocol} = 1000;
+       }
+       elsif (-f "$path/bInterfaceClass") {
+               $self->{idVendor} = Base::getHexFile ("$path/../idVendor");
+               $self->{idProduct} = Base::getHexFile ("$path/../idProduct");
+               $self->{bcdDevice} = Base::getHexFile ("$path/../bcdDevice");
+               $self->{bDeviceClass} = 1000;
+               $self->{bDeviceSubClass} = 1000;
+               $self->{bDeviceProtocol} = 1000;
+               $self->{bInterfaceClass} = Base::getHexFile ("$path/bInterfaceClass");
+               $self->{bInterfaceSubClass} = Base::getHexFile ("$path/bInterfaceSubClass");
+               $self->{bInterfaceProtocol} = Base::getHexFile ("$path/bInterfaceProtocol");
+       }
+       else {
+               Base::fatal "trying to interpret $path as /sys USB devive";
+       }
+}
+
+sub idVendor           { return $_[0]->{idVendor}; }
+sub idProduct          { return $_[0]->{idProduct}; }
+sub bcdDevice          { return $_[0]->{bcdDevice}; }
+sub bDeviceClass       { return $_[0]->{bDeviceClass}; }
+sub bDeviceSubClass    { return $_[0]->{bDeviceSubClass}; }
+sub bDeviceProtocol    { return $_[0]->{bDeviceProtocol}; }
+sub bInterfaceClass    { return $_[0]->{bInterfaceClass}; }
+sub bInterfaceSubClass { return $_[0]->{bInterfaceSubClass}; }
+sub bInterfaceProtocol { return $_[0]->{bInterfaceProtocol}; }
+
+
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/UsbMapEntry.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/UsbMapEntry.pm
new file mode 100644 (file)
index 0000000..ea2e134
--- /dev/null
@@ -0,0 +1,133 @@
+#!perl -w
+#
+# UsbMapEntry -- encapsulate single line from modules.usbmap
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+#
+# Knows how to match, can return module name.
+#
+# The ultimate authority on matching is
+# linux/drivers/usb/core/usb.c:usb_match_id(),
+# the routine where the kernel determines whether to let a particular
+# driver probe an interface.  Both the hotplug usb.agent and this
+# script mimic the behaviour of that function.
+# AFAICS, usb_match_id is only invoked on interfaces, not on the devices
+# these interfaces are part of.
+# However, driver/usb/core/hub.c:usb_new_device() invokes device_add()
+# for both the device and (via usb_set_configuration()) for the interfaces;
+# this in turn will produce hotplut events (in the case of interfaces with
+# a callback to usb_hotplug(), which puts product information in the hotplug
+# environment), and the hotplug scripts will do matching for both devices
+# and interfaces.  The coldplug script usb.rc emulates this kernel behaviour.
+#
+# Thus, there seems to be a discrepancy between what gets matched in the
+# kernel and what gets matched in hotplug; we follow hotplug behaviour.
+#
+# Note that hotplug uses this matching algorithm not only on the module
+# map provided by the kernel, but also on /etc/hotplug/usb/*.usermap;
+# the latter results not in loading of a module but in execution of a script.
+# This can be used to start gphoto, or it can be used to push firmware
+# to a device.  Question: what should mkinitrd know about this?
+#
+use strict;
+use warnings;
+package UsbMapEntry;
+use base 'Obj';
+
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->takeArgs ('module', 'match_flags', 'idVendor', 
+                       'idProduct', 'bcdDevice_lo', 'bcdDevice_hi',
+                       'bDeviceClass', 'bDeviceSubClass', 'bDeviceProtocol',
+                       'bInterfaceClass', 'bInterfaceSubClass',
+                       'bInterfaceProtocol', 'driver_info');
+}
+
+sub module             { return $_[0]->{module}; }
+sub match_flags                { return $_[0]->{match_flags}; }
+sub idVendor           { return $_[0]->{idVendor}; }
+sub idProduct          { return $_[0]->{idProduct}; }
+sub bcdDevice_lo       { return $_[0]->{bcdDevice_lo}; }
+sub bcdDevice_hi       { return $_[0]->{bcdDevice_hi}; }
+sub bDeviceClass       { return $_[0]->{bDeviceClass}; }
+sub bDeviceSubClass    { return $_[0]->{bDeviceSubClass}; }
+sub bDeviceProtocol    { return $_[0]->{bDeviceProtocol}; }
+sub bInterfaceClass    { return $_[0]->{bInterfaceClass}; }
+sub bInterfaceSubClass { return $_[0]->{bInterfaceSubClass}; }
+sub bInterfaceProtocol { return $_[0]->{bInterfaceProtocol}; }
+sub driver_info                { return $_[0]->{driver_info}; }
+
+# we could do the USB_MATCH_XXX processing in init,
+# if it turns out to be time critical.
+my $USB_MATCH_VENDOR           = 0x0001;
+my $USB_MATCH_PRODUCT          = 0x0002;
+my $USB_MATCH_DEV_LO           = 0x0004;
+my $USB_MATCH_DEV_HI           = 0x0008;
+my $USB_MATCH_DEV_CLASS                = 0x0010;
+my $USB_MATCH_DEV_SUBCLASS     = 0x0020;
+my $USB_MATCH_DEV_PROTOCOL     = 0x0040;
+my $USB_MATCH_INT_CLASS                = 0x0080;
+my $USB_MATCH_INT_SUBCLASS     = 0x0100;
+my $USB_MATCH_INT_PROTOCOL     = 0x0200;
+
+
+sub matches {
+       my ($self, $dev) = @_;
+       my $match = $self->match_flags;
+
+       if ($match & $USB_MATCH_VENDOR && $self->idVendor != $dev->idVendor) {
+               return 0;
+       }
+       if ($match & $USB_MATCH_PRODUCT && $self->idProduct != $dev->idProduct) {
+               return 0;
+       }
+       if ($match & $USB_MATCH_DEV_LO && $self->bcdDevice_lo > $dev->bcdDevice) {
+               return 0;
+       }
+       if ($match & $USB_MATCH_DEV_HI && $self->bcdDevice_hi < $dev->bcdDevice) {
+               return 0;
+       }
+       if ($match & $USB_MATCH_DEV_CLASS && $self->bDeviceClass != $dev->bDeviceClass) {
+               return 0;
+       }
+       if ($match & $USB_MATCH_DEV_SUBCLASS && $self->bDeviceSubClass != $dev->bDeviceSubClass) {
+               return 0;
+       }
+       if ($match & $USB_MATCH_DEV_PROTOCOL && $self->bDeviceProtocol != $dev->bDeviceProtocol) {
+               return 0;
+       }
+
+       # Quoting usb.agent:
+       # for now, this only checks the first of perhaps
+       # several interfaces for this device.
+       if ($match & $USB_MATCH_INT_CLASS && $self->bInterfaceClass != $dev->bInterfaceClass) {
+               return 0;
+       }
+       if ($match & $USB_MATCH_INT_SUBCLASS && $self->bInterfaceSubClass != $dev->bInterfaceSubClass) {
+               return 0;
+       }
+       if ($match & $USB_MATCH_INT_PROTOCOL && $self->bInterfaceProtocol != $dev->bInterfaceProtocol) {
+               return 0;
+       }
+
+       return 1;
+}
+
+1;
+
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/UsbTab.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/UsbTab.pm
new file mode 100644 (file)
index 0000000..92407cb
--- /dev/null
@@ -0,0 +1,92 @@
+#!perl -w
+#
+# UsbTab -- encapsulate modules.usbmap
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+
+use strict;
+use warnings;
+use Base;
+use UsbMapEntry;
+package UsbTab;
+
+my $usbList = undef;
+
+# Parse this:
+# # usb module         match_flags idVendor idProduct bcdDevice_lo bcdDevice_hi bDeviceClass bDeviceSubClass bDeviceProtocol bInterfaceClass bInterfaceSubClass bInterfaceProtocol driver_info
+# bfusb                0x0003      0x057c   0x2200    0x0000       0x0000       0x00         0x00            0x00            0x00            0x00               0x00               0x0
+# bcm203x              0x0003      0x0a5c   0x2033    0x0000       0x0000       0x00         0x00            0x00            0x00            0x00               0x00               0x0
+
+sub init () {
+       if (defined ($usbList)) {
+               return;
+       }
+       $usbList = [];
+       my $name = Conf::get('usbMap');
+       if (! open (IN, "<", "$name")) {
+               Base::fatal ("can't open usb module list $name");
+       }
+       while (defined (my $line = <IN>)) {
+               chomp $line;
+               $line =~ s/#.*//;
+               $line =~ s/^\s+//;
+               $line =~ s/\s+$//;
+               next if ($line eq "");
+               my @fields = split (/\s+/, $line, 999);
+               if ($#fields != 12) {
+                       Base::fatal ("malformed line in usb module list $name");
+               }
+               push @{$usbList}, UsbMapEntry->new (
+                       module => $fields[0],
+                       match_flags => hex ($fields[1]),
+                       idVendor => hex ($fields[2]),
+                       idProduct => hex ($fields[3]),
+                       bcdDevice_lo => hex ($fields[4]),
+                       bcdDevice_hi => hex ($fields[5]),
+                       bDeviceClass => hex ($fields[6]),
+                       bDeviceSubClass => hex ($fields[7]),
+                       bDeviceProtocol => hex ($fields[8]),
+                       bInterfaceClass => hex ($fields[9]),
+                       bInterfaceSubClass => hex ($fields[10]),
+                       bInterfaceProtocol => hex ($fields[11]),
+                       driver_info => hex ($fields[12]),
+                       );
+       }
+       if (! close (IN)) {
+               Base::fatal ("could not read usb module list $name");
+       }
+}
+
+sub all        () {
+       init;
+       return $usbList;
+}
+
+# given pathname in devices tree, return list of matching modules.
+sub find ($) {
+       my ($dev) = @_;
+       my @result = ();
+       for my $ume (@{UsbTab::all()}) {
+               if ($ume->matches ($dev)) {
+                       push @result, $ume->module;
+               }
+       }
+       return [@result];
+}
+
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/VolumeGroup.pm b/rescue/linux/cdrom/yaird-0.0.5/perl/VolumeGroup.pm
new file mode 100644 (file)
index 0000000..92c5d52
--- /dev/null
@@ -0,0 +1,45 @@
+#!perl -w
+#
+# VolumeGroup -- Volume Group Descriptor
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# vgnam - volume group name
+# uuid - uuid
+#
+use strict;
+use warnings;
+package VolumeGroup;
+use base 'Obj';
+
+sub fill {
+       my $self = shift;
+       $self->SUPER::fill();
+       $self->takeArgs ('vgnam', 'uuid');
+}
+
+sub vgnam      { return $_[0]->{vgnam}; }
+sub uuid       { return $_[0]->{uuid}; }
+
+sub string {
+       my $self = shift;
+       my $vgnam = $self->vgnam;
+       my $uuid = $self->uuid;
+       my $str = "$vgnam, $uuid";
+       return $str;
+}
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/main.pl b/rescue/linux/cdrom/yaird-0.0.5/perl/main.pl
new file mode 100644 (file)
index 0000000..8f1333a
--- /dev/null
@@ -0,0 +1,234 @@
+#!@PERL@
+#
+# Main -- an exercise in initrd building
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+#
+#
+use strict;
+use warnings;
+use lib '@PERLDIR@';
+
+use Getopt::Long;
+use Plan;
+use TestSet;
+use Pack;
+
+my $appName = "@PACKAGE@";
+my $appVersion = "@VERSION@";
+
+
+#
+# go -- main program:
+# write an image to destination in specified format.
+# destination must not exist yet.
+# root is the blockdev to use as root after reboot, or undef for default.
+#
+sub go ($$$) {
+       my ($format, $destination, $root) = @_;
+       my $masterPlan = Plan::makePlan ($root);
+       my $image = $masterPlan->expand ();
+       Pack::package ($image, $format, $destination);
+}
+
+
+#
+# paranoia -- Random bits of -
+#
+sub paranoia {
+       umask 077;
+
+       #
+       # Perlsec(1) identifies the following as risky:
+       #
+       #       delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; 
+       #
+       # but just scrapping the complete environment
+       # seems to work nicely.
+       #
+       delete @ENV{keys %ENV};
+       $ENV{'PATH'} = '/bin:/sbin:/usr/bin:/usr/sbin';
+}
+
+
+#
+# usage -- print invocation patterns of the application
+#
+sub usage {
+       print <<"//";
+
+$appName generates initrd images.
+
+$appName --test [ version ]
+       print an overview of system data, without writing anything to disk.
+
+$appName --output dest --format format [ version ]
+       generate an initrd image in 'dest', in the format 'format'.
+
+Options:
+   -h, -?, --help      print this help text and exit
+   -V, --version       print version and exit (don't bother: $appVersion)
+   -v, --verbose       print progress messages
+   -d, --debug         detailed output
+   -q, --quiet         don't print warning messages
+   -o, --output dest   place result here
+   -f, --format form   produce the image in this format,
+                       valid values: directory, cramfs, cpio
+   -r, --root blockdev let initrd boot another block device as root
+                       the blockdev must occur in fstab somewhere.
+   -t, --test          print overview of system data,
+                       used as basis for debugging.
+
+//
+}
+
+
+#
+# main -- main program, argument processing
+#
+sub main {
+       my ($opt_help, $opt_version,
+               $opt_verbose, $opt_quiet, $opt_debug,
+               $opt_format, $opt_output, $opt_root, $opt_test);
+
+       paranoia ();
+       Base::setProgName ($appName);
+
+       my @warnings = ();
+       {
+               #
+               # catch warnings during getopt, but not elsewhere.
+               # The idea is to let -? produce help without complaint,
+               # even if other args are broken.
+               #
+               local $SIG{__WARN__} = sub { push @warnings, $_[0]; };
+
+               Getopt::Long::Configure ("bundling");
+               my $result = GetOptions (
+                       "h|help|?"      => \$opt_help,
+                       "V|version"     => \$opt_version,
+                       "v|verbose"     => \$opt_verbose,
+                       "q|quiet"       => \$opt_quiet,
+                       "d|debug"       => \$opt_debug,
+                       "f|format=s"    => \$opt_format,
+                       "o|output=s"    => \$opt_output,
+                       "r|root=s"      => \$opt_root,
+                       "t|test"        => \$opt_test,
+                       );
+       }
+
+       #
+       # --help and --version processed without regard to other options,
+       # exit without side effect.
+       #
+       if (defined ($opt_help)) {
+               usage ();
+               Base::bye();
+       }
+       if (defined ($opt_version)) {
+               Base::setVerbose (1);
+               Base::info ("version $appVersion");
+               Base::bye();
+       }
+
+       #
+       # Argument validation
+       #
+       for my $w (@warnings) {
+               # lazy: perhaps we could provide more info here?
+               Base::fatal ("$w");
+       }
+       if (defined ($opt_output) && defined ($opt_test)) {
+               Base::fatal "conflicting options --output and --test";
+       }
+       if (! defined ($opt_output) && ! defined ($opt_test)) {
+               Base::fatal "one of --output and --test must be given";
+       }
+       if (defined ($opt_output)) {
+               if (-e $opt_output) {
+                       Base::fatal "destination $opt_output already exists";
+               }
+               if (! defined ($opt_format)) {
+                       Base::fatal "option --output requires --format option";
+               }
+               if (! Pack::knownFormat ($opt_format)) {
+                       Base::fatal "unknown --format argument: $opt_format";
+               }
+
+               #
+               # Untaint -- is there a need for 'output' with an umlaut?
+               #
+               if ($opt_output !~ m!^([-_./[a-zA-Z0-9]+)$!) {
+                       Base::fatal ("illegal character in output file name");
+               }
+               $opt_output = $1;
+
+               if (defined ($opt_root)) {
+                       # Untaint
+                       if ($opt_root !~ m!^([-_./[a-zA-Z0-9]+)$!) {
+                               Base::fatal ("illegal character in root device name");
+                       }
+                       $opt_root = $1;
+               }
+       }
+       if (defined ($opt_test)) {
+               if (defined ($opt_format)) {
+                       Base::fatal "conflicting options --test and --format";
+               }
+               if (defined ($opt_root)) {
+                       Base::fatal "conflicting options --test and --root";
+               }
+       }
+       if ($#ARGV > 0) {
+               my $valid = $ARGV[0];
+               Base::fatal "extra arguments after $valid";
+       }
+
+       #
+       # All arguments validated; start processing.
+       #
+       if ($#ARGV == 0) {
+               Conf::set ("version", $ARGV[0]);
+       }
+       if ($opt_verbose) {
+               Base::setVerbose (1);
+       }
+       if ($opt_debug) {
+               Base::setDebug (1);
+       }
+       if ($opt_quiet) {
+               Base::setQuiet (1);
+       }
+
+       # avoid silly messages with an early test
+       my $v = Conf::get("version");
+       my $mdir = Conf::get("libModules") . "/$v";
+       if (! -d $mdir) {
+               Base::fatal ("unknown kernel version: $v");
+       }
+
+       # go for it.
+       if (defined ($opt_test)) {
+               TestSet::testAll();
+       }
+       elsif (defined ($opt_output)) {
+               go ($opt_format, $opt_output, $opt_root);
+       }
+       Base::bye;
+}
+
+main ();
diff --git a/rescue/linux/cdrom/yaird-0.0.5/perl/yaird b/rescue/linux/cdrom/yaird-0.0.5/perl/yaird
new file mode 100755 (executable)
index 0000000..065a2b1
--- /dev/null
@@ -0,0 +1,234 @@
+#!/usr/bin/perl
+#
+# Main -- an exercise in initrd building
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+#
+#
+use strict;
+use warnings;
+use lib '/usr/local/lib/yaird/perl';
+
+use Getopt::Long;
+use Plan;
+use TestSet;
+use Pack;
+
+my $appName = "yaird";
+my $appVersion = "0.0.5";
+
+
+#
+# go -- main program:
+# write an image to destination in specified format.
+# destination must not exist yet.
+# root is the blockdev to use as root after reboot, or undef for default.
+#
+sub go ($$$) {
+       my ($format, $destination, $root) = @_;
+       my $masterPlan = Plan::makePlan ($root);
+       my $image = $masterPlan->expand ();
+       Pack::package ($image, $format, $destination);
+}
+
+
+#
+# paranoia -- Random bits of -
+#
+sub paranoia {
+       umask 077;
+
+       #
+       # Perlsec(1) identifies the following as risky:
+       #
+       #       delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; 
+       #
+       # but just scrapping the complete environment
+       # seems to work nicely.
+       #
+       delete @ENV{keys %ENV};
+       $ENV{'PATH'} = '/bin:/sbin:/usr/bin:/usr/sbin';
+}
+
+
+#
+# usage -- print invocation patterns of the application
+#
+sub usage {
+       print <<"//";
+
+$appName generates initrd images.
+
+$appName --test [ version ]
+       print an overview of system data, without writing anything to disk.
+
+$appName --output dest --format format [ version ]
+       generate an initrd image in 'dest', in the format 'format'.
+
+Options:
+   -h, -?, --help      print this help text and exit
+   -V, --version       print version and exit (don't bother: $appVersion)
+   -v, --verbose       print progress messages
+   -d, --debug         detailed output
+   -q, --quiet         don't print warning messages
+   -o, --output dest   place result here
+   -f, --format form   produce the image in this format,
+                       valid values: directory, cramfs, cpio
+   -r, --root blockdev let initrd boot another block device as root
+                       the blockdev must occur in fstab somewhere.
+   -t, --test          print overview of system data,
+                       used as basis for debugging.
+
+//
+}
+
+
+#
+# main -- main program, argument processing
+#
+sub main {
+       my ($opt_help, $opt_version,
+               $opt_verbose, $opt_quiet, $opt_debug,
+               $opt_format, $opt_output, $opt_root, $opt_test);
+
+       paranoia ();
+       Base::setProgName ($appName);
+
+       my @warnings = ();
+       {
+               #
+               # catch warnings during getopt, but not elsewhere.
+               # The idea is to let -? produce help without complaint,
+               # even if other args are broken.
+               #
+               local $SIG{__WARN__} = sub { push @warnings, $_[0]; };
+
+               Getopt::Long::Configure ("bundling");
+               my $result = GetOptions (
+                       "h|help|?"      => \$opt_help,
+                       "V|version"     => \$opt_version,
+                       "v|verbose"     => \$opt_verbose,
+                       "q|quiet"       => \$opt_quiet,
+                       "d|debug"       => \$opt_debug,
+                       "f|format=s"    => \$opt_format,
+                       "o|output=s"    => \$opt_output,
+                       "r|root=s"      => \$opt_root,
+                       "t|test"        => \$opt_test,
+                       );
+       }
+
+       #
+       # --help and --version processed without regard to other options,
+       # exit without side effect.
+       #
+       if (defined ($opt_help)) {
+               usage ();
+               Base::bye();
+       }
+       if (defined ($opt_version)) {
+               Base::setVerbose (1);
+               Base::info ("version $appVersion");
+               Base::bye();
+       }
+
+       #
+       # Argument validation
+       #
+       for my $w (@warnings) {
+               # lazy: perhaps we could provide more info here?
+               Base::fatal ("$w");
+       }
+       if (defined ($opt_output) && defined ($opt_test)) {
+               Base::fatal "conflicting options --output and --test";
+       }
+       if (! defined ($opt_output) && ! defined ($opt_test)) {
+               Base::fatal "one of --output and --test must be given";
+       }
+       if (defined ($opt_output)) {
+               if (-e $opt_output) {
+                       Base::fatal "destination $opt_output already exists";
+               }
+               if (! defined ($opt_format)) {
+                       Base::fatal "option --output requires --format option";
+               }
+               if (! Pack::knownFormat ($opt_format)) {
+                       Base::fatal "unknown --format argument: $opt_format";
+               }
+
+               #
+               # Untaint -- is there a need for 'output' with an umlaut?
+               #
+               if ($opt_output !~ m!^([-_./[a-zA-Z0-9]+)$!) {
+                       Base::fatal ("illegal character in output file name");
+               }
+               $opt_output = $1;
+
+               if (defined ($opt_root)) {
+                       # Untaint
+                       if ($opt_root !~ m!^([-_./[a-zA-Z0-9]+)$!) {
+                               Base::fatal ("illegal character in root device name");
+                       }
+                       $opt_root = $1;
+               }
+       }
+       if (defined ($opt_test)) {
+               if (defined ($opt_format)) {
+                       Base::fatal "conflicting options --test and --format";
+               }
+               if (defined ($opt_root)) {
+                       Base::fatal "conflicting options --test and --root";
+               }
+       }
+       if ($#ARGV > 0) {
+               my $valid = $ARGV[0];
+               Base::fatal "extra arguments after $valid";
+       }
+
+       #
+       # All arguments validated; start processing.
+       #
+       if ($#ARGV == 0) {
+               Conf::set ("version", $ARGV[0]);
+       }
+       if ($opt_verbose) {
+               Base::setVerbose (1);
+       }
+       if ($opt_debug) {
+               Base::setDebug (1);
+       }
+       if ($opt_quiet) {
+               Base::setQuiet (1);
+       }
+
+       # avoid silly messages with an early test
+       my $v = Conf::get("version");
+       my $mdir = Conf::get("libModules") . "/$v";
+       if (! -d $mdir) {
+               Base::fatal ("unknown kernel version: $v");
+       }
+
+       # go for it.
+       if (defined ($opt_test)) {
+               TestSet::testAll();
+       }
+       elsif (defined ($opt_output)) {
+               go ($opt_format, $opt_output, $opt_root);
+       }
+       Base::bye;
+}
+
+main ();
diff --git a/rescue/linux/cdrom/yaird-0.0.5/templates/Debian.pm b/rescue/linux/cdrom/yaird-0.0.5/templates/Debian.pm
new file mode 100644 (file)
index 0000000..85a094f
--- /dev/null
@@ -0,0 +1,303 @@
+#!/usr/bin/perl
+#
+# Template -- for translation general intentions to exact initrd layout
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# These templates define the translation from general intentions in the
+# plan to exact lists of files and script fragments to be included 
+# on the initrd image.  Templates are indexed by an action name, and include:
+#      - files to be copied from current system to initrd;
+#        often executables.
+#      - directories to be created
+#      - fragments to be appended to scripts on the image,
+#        these are in a hash from script name to script content.
+#
+# Everything is processed by HTML::Template before being added to the
+# image: script fragments, but also file names and script names.
+# Leading spaces are dropped from template lines.
+#
+# If you want to implement busybox support, this is the place to do it.
+#
+# Obviously, the template names and the attributes used in the template
+# should match what is provided by the planner.
+#
+#
+
+use strict;
+package Template;
+
+
+my $templates = {
+       prologue => {
+               # In principle, we don't want device files on the initrd
+               # image: device numbers can change between kernels.
+               # Instead, create device files at boot time based on info
+               # in sysfs.  However, /dev/null and /dev/console are needed
+               # to mount sysfs.
+               files => [
+                       '/dev/null',
+                       '/dev/console',
+                       '/bin/dash',
+                       '/bin/cat',
+                       '/bin/mkdir',
+                       '/bin/mount',
+                       '/bin/umount',
+                       '/bin/mknod',
+                       '/bin/sleep',
+                       ],
+               directories => [
+                       '/mnt', '/proc', '/sys', '/dev', '/etc', '/var',
+                       ],
+               trees => [],
+               scripts => {
+                       '/init' => <<'//',
+                               #!/bin/dash
+                               #
+                               # Generator version: yaird <TMPL_VAR NAME=appVersion>.
+                               #
+                               set -x
+                               #
+                               #  Utility functions
+                               #
+                               mksymdev () {
+                                       devfile="$1"
+                                       sysfile="$2"
+                                       cb="$3"
+                                       devpair=$(/bin/cat "$sysfile")
+                                       for delay in 1 2 4 8 16
+                                       do
+                                               if [ "$devpair" = "" ]
+                                               then
+                                                       echo "Waiting $delay seconds for $sysfile to show up"
+                                                       sleep $delay
+                                               fi
+                                               devpair=$(/bin/cat "$sysfile")
+                                       done
+
+                                       if [ "$devpair" = "" ]
+                                       then
+                                               echo "Device $sysfile seems to be down."
+                                               echo "Debugging opportunity, type ^D to continue."
+                                               /bin/dash
+                                       fi
+
+                                       maj=${devpair%:*}
+                                       min=${devpair#*:}
+                                       /bin/mknod "$devfile" $cb $maj $min
+                               }
+                               mkcdev () {
+                                       mksymdev "$1" "/sys/class/$2/dev" c
+                               }
+                               mkbdev () {
+                                       mksymdev "$1" "/sys/block/$2/dev" b
+                               }
+
+
+                               #
+                               # Setting up mounts
+                               #
+                               mount -nt sysfs sysfs /sys
+                               mount -nt proc proc /proc
+                                # In Fedora FC3, tmpfs *must* have the name
+                                # 'none', otherwise start_udev, called from
+                                # rc.sysinit will mount a new tmpfs over it,
+                                # and you loose access to nodes such as
+                                # /dev/vg0/root, expected to be created by
+                               # LVM in initramfs.
+                                mount -nt tmpfs none /dev
+
+                                #
+                               #
+                               # Command line processing
+                               # init - first proc to start on next root
+                               # root - to be done: how should it relate
+                               #       to file system selection?
+                               # ro,rw - mount root read-only or read-write.
+                               #       This is like a mount -r; it overrules
+                               #       a -o rw.
+                               # noresume, resume - to be done
+                               # ide - options for module ide_core.
+                               #       need a way to append these to proper
+                               #       module.  do a check on module name
+                               #       in insmod template?
+                               #
+                               ro=-r
+                               init=/sbin/init
+                               for i in $(cat /proc/cmdline)
+                               do
+                                       case "$i" in
+                                       init=*)
+                                               init=${i#init=}
+                                               ;;
+                                       ro)
+                                               ro=-r
+                                               ;;
+                                       rw)
+                                               ro=
+                                       esac
+                               done
+//
+               },
+       },
+
+       insmod => {
+               files => [
+                       '<TMPL_VAR NAME=target>',
+                       '/sbin/insmod',
+                       ],
+               directories => [],
+               trees => [],
+               scripts => {
+                       '/init' => <<'//',
+                               /sbin/insmod '<TMPL_VAR NAME=target>'
+//
+               },
+
+       },
+
+       mkbdev => {
+               files => [],
+               directories => [],
+               trees => [],
+               scripts => {
+                       '/init' => <<'//',
+                               mkbdev '<TMPL_VAR NAME=target>' '<TMPL_VAR NAME=sysname>'
+//
+               },
+       },
+
+       vgchange => {
+               files => [
+                       '/lib/lvm-200/vgchange',
+                       '/sbin/vgchange',
+                       ],
+               directories => [],
+               trees => [],
+               scripts => {
+                       # We cannot make mapper/control any earlier,
+                       # since dm-mod needs to be loaded to be able
+                       # to determine devno.
+                       '/init' => <<'//',
+                               if [ ! -c /dev/mapper/control ]
+                               then
+                                       /bin/mkdir /dev/mapper
+                                       mkcdev /dev/mapper/control misc/device-mapper
+                               fi
+                               /bin/mount -nt tmpfs tmpfs /etc
+                               /bin/mount -nt tmpfs tmpfs /var
+                               /sbin/vgchange -a y '<TMPL_VAR NAME=target>'
+                               /bin/umount -n /var
+                               /bin/umount -n /etc
+//
+               },
+       },
+
+       mdadm => {
+               files => [
+                       '/sbin/mdadm',
+                       ],
+               directories => [],
+               trees => [],
+               scripts => {
+                       #
+                       # NOTE: mdadm can operate without knowledge
+                       # of device numbers; it will assign an unused
+                       # one to the new device.  Thus you could have
+                       # device name /dev/md/boot that is stable,
+                       # regardless of which other raid devices are
+                       # operational.  However, debian installer
+                       # consistently uses device names like /dev/md0,
+                       # where the name depends on earlier minors
+                       # that happen to have been assigned.
+                       # To work around this problem, we forego
+                       # the --auto option, and mknod the device
+                       # before putting an md under it.  Better hope
+                       # the major number is not going to change ...
+                       #
+                       '/init' => <<'//',
+                               mknod <TMPL_VAR NAME=target> b <TMPL_VAR NAME=major> <TMPL_VAR NAME=minor>
+                               mdadm --assemble <TMPL_VAR NAME=target> --uuid <TMPL_VAR NAME=uuid> \
+                                       <TMPL_LOOP NAME=components> <TMPL_VAR NAME=dev></TMPL_LOOP>
+//
+               }
+       },
+
+       mount => {
+               files => [],
+               directories => [],
+               trees => [],
+               scripts => {
+                       #
+                       # NOTE: honouring the kernel cmdline option ro,rw
+                       # is very nice, but...  If you have an ext3 in a
+                       # file loopback-mounted from vfat, it's unlikely
+                       # that a remount rw of root will also make the
+                       # underlying vfat read-write.  Underlying filesystems
+                       # should ignore the kernel ro/rw option; we
+                       # have an attribute isRoot that's defined iff
+                       # this is the real root.
+                       #
+                       # always -n, since we dont have writable /etc/mtab.
+                       #
+                       '/init' => <<'//',
+                               mount -n \
+                                       <TMPL_IF NAME=isRoot>$ro</TMPL_IF> \
+                                       -t <TMPL_VAR NAME=fsType> \
+                                       <TMPL_VAR NAME=options> \
+                                       <TMPL_VAR NAME=device> \
+                                       <TMPL_VAR NAME=target>
+//
+               }
+       },
+
+       postlude => {
+               files => [
+                       '<TMPL_VAR NAME=auxDir>/run_init',
+                       ],
+               directories => [],
+               trees => [],
+               scripts => {
+                       #
+                       # Do *not* do a pivot_root here.  We're
+                       # working from rootfs; a pivotroot would
+                       # make that end up in /initrd, which gets
+                       # unmounted by rc.sysinit, and without rootfs,
+                       # too much is broken to even do a panic.
+                       #
+                       # Instead use run_init from klibc, which uses
+                       # a magical combination of mount --move /mnt /,
+                       # chdir and chroot.
+                       # 
+
+                       '/init' => <<'//',
+                               echo "Debugging opportunity, ^D to continue."
+                               /bin/dash
+
+                               echo "Switching root ..."
+                               /bin/umount -n /sys
+                               /bin/umount -n /proc
+                               exec <TMPL_VAR NAME=auxDir>/run_init \
+                                       /mnt $init "$@"
+//
+               }
+       },
+};
+
+sub template ($) { return $templates->{$_[0]}; }
+
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/templates/Fedora.pm b/rescue/linux/cdrom/yaird-0.0.5/templates/Fedora.pm
new file mode 100644 (file)
index 0000000..d1641dd
--- /dev/null
@@ -0,0 +1,318 @@
+#!/usr/bin/perl
+#
+# Template -- for translation general intentions to exact initrd layout
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# These templates define the translation from general intentions in the
+# plan to exact lists of files and script fragments to be included 
+# on the initrd image.  Templates are indexed by an action name, and include:
+#      - files to be copied from current system to initrd;
+#        often executables.
+#      - directories to be created
+#      - fragments to be appended to scripts on the image,
+#        these are in a hash from script name to script content.
+#
+# Everything is processed by HTML::Template before being added to the
+# image: script fragments, but also file names and script names.
+# Leading spaces are dropped from template lines.
+#
+# If you want to implement busybox support, this is the place to do it.
+#
+# Obviously, the template names and the attributes used in the template
+# should match what is provided by the planner.
+#
+#
+
+use strict;
+package Template;
+
+
+my $templates = {
+       prologue => {
+               # In principle, we don't want device files on the initrd
+               # image: device numbers can change between kernels.
+               # Instead, create device files at boot time based on info
+               # in sysfs.  However, /dev/null and /dev/console are needed
+               # to mount sysfs.
+               files => [
+                       '/dev/null',
+                       '/dev/console',
+                       '/bin/ash',
+                       '/bin/cat',
+                       '/bin/mkdir',
+                       '/bin/mount',
+                       '/bin/umount',
+                       '/bin/mknod',
+                       '/bin/sleep',
+                       ],
+               directories => [
+                       '/mnt', '/proc', '/sys', '/dev', '/etc', '/var',
+                       ],
+               trees => [],
+               scripts => {
+                       '/init' => <<'//',
+                               #!/bin/ash
+
+                               # Generator version: yaird <TMPL_VAR NAME=appVersion>.
+                               #
+                               set -x
+                               #
+                               #  Utility functions
+                               #
+                               mksymdev () {
+                                       devfile="$1"
+                                       sysfile="$2"
+                                       cb="$3"
+                                       devpair=$(/bin/cat "$sysfile")
+                                       for delay in 1 2 4 8 16
+                                       do
+                                               if [ "$devpair" = "" ]
+                                               then
+                                                       echo "Waiting $delay seconds for $sysfile to show up"
+                                                       sleep $delay
+                                               fi
+                                               devpair=$(/bin/cat "$sysfile")
+                                       done
+
+                                       if [ "$devpair" = "" ]
+                                       then
+                                               echo "Device $sysfile seems to be down."
+                                               echo "Debugging opportunity, type ^D to continue."
+                                               /bin/dash
+                                       fi
+
+                                       maj=${devpair%:*}
+                                       min=${devpair#*:}
+                                       /bin/mknod "$devfile" $cb $maj $min
+                               }
+                               mkcdev () {
+                                       mksymdev "$1" "/sys/class/$2/dev" c
+                               }
+                               mkbdev () {
+                                       mksymdev "$1" "/sys/block/$2/dev" b
+                               }
+
+
+                               #
+                               # Setting up mounts
+                               #
+                               mount -nt sysfs sysfs /sys
+                               mount -nt proc proc /proc
+                                # In Fedora FC3, tmpfs *must* have the name
+                                # 'none', otherwise start_udev, called from
+                                # rc.sysinit will mount a new tmpfs over it,
+                                # and you loose access to nodes such as
+                                # /dev/vg0/root, expected to be created by
+                               # LVM in initramfs.
+                                mount -nt tmpfs none /dev
+
+                                #
+                               #
+                               # Command line processing
+                               # init - first proc to start on next root
+                               # root - to be done: how should it relate
+                               #       to file system selection?
+                               # ro,rw - mount root read-only or read-write.
+                               #       This is like a mount -r; it overrules
+                               #       a -o rw.
+                               # noresume, resume - to be done
+                               # ide - options for module ide_core.
+                               #       need a way to append these to proper
+                               #       module.  do a check on module name
+                               #       in insmod template?
+                               #
+                               ro=-r
+                               init=/sbin/init
+                               for i in $(cat /proc/cmdline)
+                               do
+                                       case "$i" in
+                                       init=*)
+                                               init=${i#init=}
+                                               ;;
+                                       ro)
+                                               ro=-r
+                                               ;;
+                                       rw)
+                                               ro=
+                                       esac
+                               done
+//
+               },
+       },
+
+       insmod => {
+               files => [
+                       '<TMPL_VAR NAME=target>',
+                       '/sbin/insmod',
+                       ],
+               directories => [],
+               trees => [],
+               scripts => {
+                       '/init' => <<'//',
+                               /sbin/insmod '<TMPL_VAR NAME=target>'
+//
+               },
+
+       },
+
+       mkbdev => {
+               files => [],
+               directories => [],
+               trees => [],
+               scripts => {
+                       '/init' => <<'//',
+                               mkbdev '<TMPL_VAR NAME=target>' '<TMPL_VAR NAME=sysname>'
+//
+               },
+       },
+
+       vgchange => {
+               #
+               # Use static version.  Note that fedora starts with
+               # empty /dev, so we must make device nodes explicitly.
+               #
+               files => [
+                       '/sbin/lvm',
+                       ],
+               directories => [],
+               trees => [],
+               scripts => {
+                       # We cannot make mapper/control any earlier,
+                       # since dm-mod needs to be loaded to be able
+                       # to determine devno.
+                       '/init' => <<'//',
+                               if [ ! -c /dev/mapper/control ]
+                               then
+                                       /bin/mkdir /dev/mapper
+                                       mkcdev /dev/mapper/control misc/device-mapper
+                               fi
+                               /bin/mount -nt tmpfs tmpfs /etc
+                               /bin/mount -nt tmpfs tmpfs /var
+                               /sbin/lvm vgchange -a y '<TMPL_VAR NAME=target>'
+                               /sbin/lvm vgmknodes
+                               /bin/umount -n /var
+                               /bin/umount -n /etc
+//
+               },
+       },
+
+       mdadm => {
+               files => [
+                       '/sbin/mdadm',
+                       ],
+               directories => [],
+               trees => [],
+               scripts => {
+                       #
+                       # NOTE: mdadm can operate without knowledge
+                       # of device numbers; it will assign an unused
+                       # one to the new device.  Thus you could have
+                       # device name /dev/md/boot that is stable,
+                       # regardless of which other raid devices are
+                       # operational.  However, debian installer
+                       # consistently uses device names like /dev/md0,
+                       # where the name depends on earlier minors
+                       # that happen to have been assigned.
+                       # To work around this problem, we forego
+                       # the --auto option, and mknod the device
+                       # before putting an md under it.  Better hope
+                       # the major number is not going to change ...
+                       #
+                       '/init' => <<'//',
+                               mknod <TMPL_VAR NAME=target> b <TMPL_VAR NAME=major> <TMPL_VAR NAME=minor>
+                               mdadm --assemble <TMPL_VAR NAME=target> --uuid <TMPL_VAR NAME=uuid> \
+                                       <TMPL_LOOP NAME=components> <TMPL_VAR NAME=dev></TMPL_LOOP>
+//
+               }
+       },
+
+       mount => {
+               files => [],
+               directories => [],
+               trees => [],
+               scripts => {
+                       #
+                       # NOTE: honouring the kernel cmdline option ro,rw
+                       # is very nice, but...  If you have an ext3 in a
+                       # file loopback-mounted from vfat, it's unlikely
+                       # that a remount rw of root will also make the
+                       # underlying vfat read-write.  Underlying filesystems
+                       # should ignore the kernel ro/rw option; we
+                       # have an attribute isRoot that's defined iff
+                       # this is the real root.
+                       #
+                       # always -n, since we dont have writable /etc/mtab.
+                       #
+                       '/init' => <<'//',
+                               mount -n \
+                                       <TMPL_IF NAME=isRoot>$ro</TMPL_IF> \
+                                       -t <TMPL_VAR NAME=fsType> \
+                                       <TMPL_VAR NAME=options> \
+                                       <TMPL_VAR NAME=device> \
+                                       <TMPL_VAR NAME=target>
+//
+               }
+       },
+
+       postlude => {
+               files => [
+                       '<TMPL_VAR NAME=auxDir>/run_init',
+                       ],
+               directories => [],
+               trees => [],
+               scripts => {
+                       #
+                       # fedora does not come with populated /dev 
+                       # on root and needs at least /dev/console.
+                       # Pass them via tmpfs.
+                       #
+                       # Do *not* do a pivot_root here.  We're
+                       # working from rootfs; a pivotroot would
+                       # make that end up in /initrd, which gets
+                       # unmounted by rc.sysinit, and without rootfs,
+                       # too much is broken to even do a panic.
+                       #
+                       # Instead use run_init from klibc, which uses
+                       # a magical combination of mount --move /mnt /,
+                       # chdir and chroot.
+                       # 
+
+                       '/init' => <<'//',
+                               echo "Debugging opportunity, ^D to continue."
+                               /bin/ash
+
+                               echo "Switching root ..."
+                               cd /mnt
+                               mkcdev /dev/null mem/null
+                               mkcdev /dev/zero mem/zero
+                               mkcdev /dev/console tty/console
+                               mkdir /dev/pts
+                               mkdir /dev/shm
+                               mount -n -t tmpfs --bind /dev /mnt/dev
+                               /bin/umount -n /sys
+                               /bin/umount -n /proc
+                               exec <TMPL_VAR NAME=auxDir>/run_init \
+                                       /mnt $init "$@"
+//
+               }
+       },
+};
+
+sub template ($) { return $templates->{$_[0]}; }
+
+
+1;
diff --git a/rescue/linux/cdrom/yaird-0.0.5/templates/Makefile b/rescue/linux/cdrom/yaird-0.0.5/templates/Makefile
new file mode 100644 (file)
index 0000000..61d09d3
--- /dev/null
@@ -0,0 +1,350 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# templates/Makefile.  Generated from Makefile.in by configure.
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+
+# 
+# Makefile.incl -- shared defines between makefiles
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# - auxdir contains package specific executables that may be included
+#   in the generated image
+# - perldir contains perl modules to be included by the main program
+#
+# This cannot be simply passed from the master makefile; that would
+# be invisible to automake.
+
+srcdir = .
+top_srcdir = ..
+
+pkgdatadir = $(datadir)/yaird
+pkglibdir = $(libdir)/yaird
+pkgincludedir = $(includedir)/yaird
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = /usr/bin/install -c
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+DIST_COMMON = $(srcdir)/../Makefile.incl $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+subdir = templates
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(perldir)"
+nodist_perlDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(nodist_perl_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run aclocal-1.9
+AMDEP_FALSE = #
+AMDEP_TRUE = 
+AMTAR = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run tar
+AUTOCONF = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run autoconf
+AUTOHEADER = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run autoheader
+AUTOMAKE = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run automake-1.9
+AWK = gawk
+CC = gcc
+CCDEPMODE = depmode=gcc3
+CFLAGS = -g -O2
+CPPFLAGS = 
+CYGPATH_W = echo
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+ECHO_C = 
+ECHO_N = -n
+ECHO_T = 
+EXEEXT = 
+INITRD_TEMPLATE = Fedora
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s
+LDFLAGS = 
+LIBOBJS = 
+LIBS = 
+LTLIBOBJS = 
+MAKEINFO = ${SHELL} /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/missing --run makeinfo
+OBJEXT = o
+PACKAGE = yaird
+PACKAGE_BUGREPORT = 
+PACKAGE_NAME = 
+PACKAGE_STRING = 
+PACKAGE_TARNAME = 
+PACKAGE_VERSION = 
+PATH_SEPARATOR = :
+PERL = /usr/bin/perl
+SET_MAKE = 
+SHELL = /bin/sh
+STRIP = 
+VERSION = 0.0.5
+XMLTO = /usr/bin/xmlto
+ac_ct_CC = gcc
+ac_ct_STRIP = 
+am__fastdepCC_FALSE = #
+am__fastdepCC_TRUE = 
+am__include = include
+am__leading_dot = .
+am__quote = 
+am__tar = ${AMTAR} chof - "$$tardir"
+am__untar = ${AMTAR} xf -
+bindir = ${exec_prefix}/bin
+build_alias = 
+datadir = ${prefix}/share
+exec_prefix = ${prefix}
+host_alias = 
+includedir = ${prefix}/include
+infodir = ${prefix}/info
+install_sh = /home/kern/bacula/k/rescue/linux/cdrom/yaird-0.0.5/install-sh
+libdir = ${exec_prefix}/lib
+libexecdir = ${exec_prefix}/libexec
+localstatedir = ${prefix}/var
+mandir = ${prefix}/man
+mkdir_p = mkdir -p --
+oldincludedir = /usr/include
+prefix = /usr/local
+program_transform_name = s,x,x,
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+sysconfdir = ${prefix}/etc
+target_alias = 
+auxdir = $(pkglibdir)/exec
+perldir = $(pkglibdir)/perl
+
+# 
+# Makefile.am -- installation and packaging instructions
+#
+CLEANFILES = $(nodist_perl_DATA)
+nodist_perl_DATA = \
+       Template.pm
+
+
+# not compiled, but must go in the tarball.
+EXTRA_DIST = \
+       Fedora.pm \
+       Debian.pm
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/../Makefile.incl $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  templates/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  templates/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+uninstall-info-am:
+install-nodist_perlDATA: $(nodist_perl_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(perldir)" || $(mkdir_p) "$(DESTDIR)$(perldir)"
+       @list='$(nodist_perl_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(nodist_perlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(perldir)/$$f'"; \
+         $(nodist_perlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(perldir)/$$f"; \
+       done
+
+uninstall-nodist_perlDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_perl_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(perldir)/$$f'"; \
+         rm -f "$(DESTDIR)$(perldir)/$$f"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(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; \
+         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 \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(perldir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_perlDATA
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-nodist_perlDATA
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+       distclean-generic distdir 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-nodist_perlDATA install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+       pdf-am ps ps-am uninstall uninstall-am uninstall-info-am \
+       uninstall-nodist_perlDATA
+
+
+Template.pm: $(INITRD_TEMPLATE).pm
+       cp $< $@
+# 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.
+.NOEXPORT:
diff --git a/rescue/linux/cdrom/yaird-0.0.5/templates/Makefile.am b/rescue/linux/cdrom/yaird-0.0.5/templates/Makefile.am
new file mode 100644 (file)
index 0000000..e6bb347
--- /dev/null
@@ -0,0 +1,17 @@
+# 
+# Makefile.am -- installation and packaging instructions
+#
+include ../Makefile.incl
+
+CLEANFILES     = $(nodist_perl_DATA)
+
+Template.pm: $(INITRD_TEMPLATE).pm
+       cp $< $@
+
+nodist_perl_DATA = \
+       Template.pm
+
+# not compiled, but must go in the tarball.
+EXTRA_DIST = \
+       Fedora.pm \
+       Debian.pm
diff --git a/rescue/linux/cdrom/yaird-0.0.5/templates/Makefile.in b/rescue/linux/cdrom/yaird-0.0.5/templates/Makefile.in
new file mode 100644 (file)
index 0000000..a86a794
--- /dev/null
@@ -0,0 +1,350 @@
+# Makefile.in generated by automake 1.9.5 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 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.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# 
+# Makefile.incl -- shared defines between makefiles
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# - auxdir contains package specific executables that may be included
+#   in the generated image
+# - perldir contains perl modules to be included by the main program
+#
+# This cannot be simply passed from the master makefile; that would
+# be invisible to automake.
+
+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
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+DIST_COMMON = $(srcdir)/../Makefile.incl $(srcdir)/Makefile.am \
+       $(srcdir)/Makefile.in
+subdir = templates
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/include/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(perldir)"
+nodist_perlDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(nodist_perl_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EXEEXT = @EXEEXT@
+INITRD_TEMPLATE = @INITRD_TEMPLATE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PERL = @PERL@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+XMLTO = @XMLTO@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_STRIP = @ac_ct_STRIP@
+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@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+auxdir = $(pkglibdir)/exec
+perldir = $(pkglibdir)/perl
+
+# 
+# Makefile.am -- installation and packaging instructions
+#
+CLEANFILES = $(nodist_perl_DATA)
+nodist_perl_DATA = \
+       Template.pm
+
+
+# not compiled, but must go in the tarball.
+EXTRA_DIST = \
+       Fedora.pm \
+       Debian.pm
+
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/../Makefile.incl $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  templates/Makefile'; \
+       cd $(top_srcdir) && \
+         $(AUTOMAKE) --gnu  templates/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+       esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+uninstall-info-am:
+install-nodist_perlDATA: $(nodist_perl_DATA)
+       @$(NORMAL_INSTALL)
+       test -z "$(perldir)" || $(mkdir_p) "$(DESTDIR)$(perldir)"
+       @list='$(nodist_perl_DATA)'; for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         f=$(am__strip_dir) \
+         echo " $(nodist_perlDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(perldir)/$$f'"; \
+         $(nodist_perlDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(perldir)/$$f"; \
+       done
+
+uninstall-nodist_perlDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_perl_DATA)'; for p in $$list; do \
+         f=$(am__strip_dir) \
+         echo " rm -f '$(DESTDIR)$(perldir)/$$f'"; \
+         rm -f "$(DESTDIR)$(perldir)/$$f"; \
+       done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+       $(mkdir_p) $(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; \
+         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 \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+           fi; \
+           cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+         else \
+           test -f $(distdir)/$$file \
+           || cp -p $$d/$$file $(distdir)/$$file \
+           || exit 1; \
+         fi; \
+       done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+       for dir in "$(DESTDIR)$(perldir)"; do \
+         test -z "$$dir" || $(mkdir_p) "$$dir"; \
+       done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+         `test -z '$(STRIP)' || \
+           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+       -rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-nodist_perlDATA
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-info-am uninstall-nodist_perlDATA
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+       distclean-generic distdir 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-nodist_perlDATA install-strip installcheck \
+       installcheck-am installdirs maintainer-clean \
+       maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+       pdf-am ps ps-am uninstall uninstall-am uninstall-info-am \
+       uninstall-nodist_perlDATA
+
+
+Template.pm: $(INITRD_TEMPLATE).pm
+       cp $< $@
+# 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.
+.NOEXPORT:
diff --git a/rescue/linux/cdrom/yaird-0.0.5/templates/Template.pm b/rescue/linux/cdrom/yaird-0.0.5/templates/Template.pm
new file mode 100644 (file)
index 0000000..d1641dd
--- /dev/null
@@ -0,0 +1,318 @@
+#!/usr/bin/perl
+#
+# Template -- for translation general intentions to exact initrd layout
+#   Copyright (C) 2005  Erik van Konijnenburg
+#
+#   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
+#
+# These templates define the translation from general intentions in the
+# plan to exact lists of files and script fragments to be included 
+# on the initrd image.  Templates are indexed by an action name, and include:
+#      - files to be copied from current system to initrd;
+#        often executables.
+#      - directories to be created
+#      - fragments to be appended to scripts on the image,
+#        these are in a hash from script name to script content.
+#
+# Everything is processed by HTML::Template before being added to the
+# image: script fragments, but also file names and script names.
+# Leading spaces are dropped from template lines.
+#
+# If you want to implement busybox support, this is the place to do it.
+#
+# Obviously, the template names and the attributes used in the template
+# should match what is provided by the planner.
+#
+#
+
+use strict;
+package Template;
+
+
+my $templates = {
+       prologue => {
+               # In principle, we don't want device files on the initrd
+               # image: device numbers can change between kernels.
+               # Instead, create device files at boot time based on info
+               # in sysfs.  However, /dev/null and /dev/console are needed
+               # to mount sysfs.
+               files => [
+                       '/dev/null',
+                       '/dev/console',
+                       '/bin/ash',
+                       '/bin/cat',
+                       '/bin/mkdir',
+                       '/bin/mount',
+                       '/bin/umount',
+                       '/bin/mknod',
+                       '/bin/sleep',
+                       ],
+               directories => [
+                       '/mnt', '/proc', '/sys', '/dev', '/etc', '/var',
+                       ],
+               trees => [],
+               scripts => {
+                       '/init' => <<'//',
+                               #!/bin/ash
+
+                               # Generator version: yaird <TMPL_VAR NAME=appVersion>.
+                               #
+                               set -x
+                               #
+                               #  Utility functions
+                               #
+                               mksymdev () {
+                                       devfile="$1"
+                                       sysfile="$2"
+                                       cb="$3"
+                                       devpair=$(/bin/cat "$sysfile")
+                                       for delay in 1 2 4 8 16
+                                       do
+                                               if [ "$devpair" = "" ]
+                                               then
+                                                       echo "Waiting $delay seconds for $sysfile to show up"
+                                                       sleep $delay
+                                               fi
+                                               devpair=$(/bin/cat "$sysfile")
+                                       done
+
+                                       if [ "$devpair" = "" ]
+                                       then
+                                               echo "Device $sysfile seems to be down."
+                                               echo "Debugging opportunity, type ^D to continue."
+                                               /bin/dash
+                                       fi
+
+                                       maj=${devpair%:*}
+                                       min=${devpair#*:}
+                                       /bin/mknod "$devfile" $cb $maj $min
+                               }
+                               mkcdev () {
+                                       mksymdev "$1" "/sys/class/$2/dev" c
+                               }
+                               mkbdev () {
+                                       mksymdev "$1" "/sys/block/$2/dev" b
+                               }
+
+
+                               #
+                               # Setting up mounts
+                               #
+                               mount -nt sysfs sysfs /sys
+                               mount -nt proc proc /proc
+                                # In Fedora FC3, tmpfs *must* have the name
+                                # 'none', otherwise start_udev, called from
+                                # rc.sysinit will mount a new tmpfs over it,
+                                # and you loose access to nodes such as
+                                # /dev/vg0/root, expected to be created by
+                               # LVM in initramfs.
+                                mount -nt tmpfs none /dev
+
+                                #
+                               #
+                               # Command line processing
+                               # init - first proc to start on next root
+                               # root - to be done: how should it relate
+                               #       to file system selection?
+                               # ro,rw - mount root read-only or read-write.
+                               #       This is like a mount -r; it overrules
+                               #       a -o rw.
+                               # noresume, resume - to be done
+                               # ide - options for module ide_core.
+                               #       need a way to append these to proper
+                               #       module.  do a check on module name
+                               #       in insmod template?
+                               #
+                               ro=-r
+                               init=/sbin/init
+                               for i in $(cat /proc/cmdline)
+                               do
+                                       case "$i" in
+                                       init=*)
+                                               init=${i#init=}
+                                               ;;
+                                       ro)
+                                               ro=-r
+                                               ;;
+                                       rw)
+                                               ro=
+                                       esac
+                               done
+//
+               },
+       },
+
+       insmod => {
+               files => [
+                       '<TMPL_VAR NAME=target>',
+                       '/sbin/insmod',
+                       ],
+               directories => [],
+               trees => [],
+               scripts => {
+                       '/init' => <<'//',
+                               /sbin/insmod '<TMPL_VAR NAME=target>'
+//
+               },
+
+       },
+
+       mkbdev => {
+               files => [],
+               directories => [],
+               trees => [],
+               scripts => {
+                       '/init' => <<'//',
+                               mkbdev '<TMPL_VAR NAME=target>' '<TMPL_VAR NAME=sysname>'
+//
+               },
+       },
+
+       vgchange => {
+               #
+               # Use static version.  Note that fedora starts with
+               # empty /dev, so we must make device nodes explicitly.
+               #
+               files => [
+                       '/sbin/lvm',
+                       ],
+               directories => [],
+               trees => [],
+               scripts => {
+                       # We cannot make mapper/control any earlier,
+                       # since dm-mod needs to be loaded to be able
+                       # to determine devno.
+                       '/init' => <<'//',
+                               if [ ! -c /dev/mapper/control ]
+                               then
+                                       /bin/mkdir /dev/mapper
+                                       mkcdev /dev/mapper/control misc/device-mapper
+                               fi
+                               /bin/mount -nt tmpfs tmpfs /etc
+                               /bin/mount -nt tmpfs tmpfs /var
+                               /sbin/lvm vgchange -a y '<TMPL_VAR NAME=target>'
+                               /sbin/lvm vgmknodes
+                               /bin/umount -n /var
+                               /bin/umount -n /etc
+//
+               },
+       },
+
+       mdadm => {
+               files => [
+                       '/sbin/mdadm',
+                       ],
+               directories => [],
+               trees => [],
+               scripts => {
+                       #
+                       # NOTE: mdadm can operate without knowledge
+                       # of device numbers; it will assign an unused
+                       # one to the new device.  Thus you could have
+                       # device name /dev/md/boot that is stable,
+                       # regardless of which other raid devices are
+                       # operational.  However, debian installer
+                       # consistently uses device names like /dev/md0,
+                       # where the name depends on earlier minors
+                       # that happen to have been assigned.
+                       # To work around this problem, we forego
+                       # the --auto option, and mknod the device
+                       # before putting an md under it.  Better hope
+                       # the major number is not going to change ...
+                       #
+                       '/init' => <<'//',
+                               mknod <TMPL_VAR NAME=target> b <TMPL_VAR NAME=major> <TMPL_VAR NAME=minor>
+                               mdadm --assemble <TMPL_VAR NAME=target> --uuid <TMPL_VAR NAME=uuid> \
+                                       <TMPL_LOOP NAME=components> <TMPL_VAR NAME=dev></TMPL_LOOP>
+//
+               }
+       },
+
+       mount => {
+               files => [],
+               directories => [],
+               trees => [],
+               scripts => {
+                       #
+                       # NOTE: honouring the kernel cmdline option ro,rw
+                       # is very nice, but...  If you have an ext3 in a
+                       # file loopback-mounted from vfat, it's unlikely
+                       # that a remount rw of root will also make the
+                       # underlying vfat read-write.  Underlying filesystems
+                       # should ignore the kernel ro/rw option; we
+                       # have an attribute isRoot that's defined iff
+                       # this is the real root.
+                       #
+                       # always -n, since we dont have writable /etc/mtab.
+                       #
+                       '/init' => <<'//',
+                               mount -n \
+                                       <TMPL_IF NAME=isRoot>$ro</TMPL_IF> \
+                                       -t <TMPL_VAR NAME=fsType> \
+                                       <TMPL_VAR NAME=options> \
+                                       <TMPL_VAR NAME=device> \
+                                       <TMPL_VAR NAME=target>
+//
+               }
+       },
+
+       postlude => {
+               files => [
+                       '<TMPL_VAR NAME=auxDir>/run_init',
+                       ],
+               directories => [],
+               trees => [],
+               scripts => {
+                       #
+                       # fedora does not come with populated /dev 
+                       # on root and needs at least /dev/console.
+                       # Pass them via tmpfs.
+                       #
+                       # Do *not* do a pivot_root here.  We're
+                       # working from rootfs; a pivotroot would
+                       # make that end up in /initrd, which gets
+                       # unmounted by rc.sysinit, and without rootfs,
+                       # too much is broken to even do a panic.
+                       #
+                       # Instead use run_init from klibc, which uses
+                       # a magical combination of mount --move /mnt /,
+                       # chdir and chroot.
+                       # 
+
+                       '/init' => <<'//',
+                               echo "Debugging opportunity, ^D to continue."
+                               /bin/ash
+
+                               echo "Switching root ..."
+                               cd /mnt
+                               mkcdev /dev/null mem/null
+                               mkcdev /dev/zero mem/zero
+                               mkcdev /dev/console tty/console
+                               mkdir /dev/pts
+                               mkdir /dev/shm
+                               mount -n -t tmpfs --bind /dev /mnt/dev
+                               /bin/umount -n /sys
+                               /bin/umount -n /proc
+                               exec <TMPL_VAR NAME=auxDir>/run_init \
+                                       /mnt $init "$@"
+//
+               }
+       },
+};
+
+sub template ($) { return $templates->{$_[0]}; }
+
+
+1;
diff --git a/rescue/linux/floppy/.cvsignore b/rescue/linux/floppy/.cvsignore
new file mode 100644 (file)
index 0000000..ee40e78
--- /dev/null
@@ -0,0 +1,10 @@
+Makefile
+diskinfo
+format.hda
+mount_drives
+partition.hda
+sfdisk
+start_network
+1
+bacula-fd
+bacula-fd.conf
diff --git a/rescue/linux/floppy/Makefile.in b/rescue/linux/floppy/Makefile.in
new file mode 100755 (executable)
index 0000000..ed51354
--- /dev/null
@@ -0,0 +1,57 @@
+# 
+# bootstrap/linux Makefile.in
+#
+# Version $Id$
+# 
+@MCOMMON@
+
+working_dir=@working_dir@
+
+srcdir =       @srcdir@
+VPATH =        @srcdir@
+.PATH:         @srcdir@
+topdir = ../..
+thisdir = linux
+
+
+first_rule: all
+dummy:
+
+MKDIR = $(topdir)/autoconf/mkinstalldirs
+
+#-------------------------------------------------------------------------
+
+all: Makefile
+
+depend:
+       
+
+#-------------------------------------------------------------------------
+
+
+install:
+
+uninstall:
+
+Makefile: Makefile.in
+       cd $(topdir) \
+           && CONFIG_FILES=$(thisdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+Makefiles:
+       $(SHELL) config.status
+
+clean:
+       @$(RMF) *~ 1 2 3
+       @$(RMF) format.* partition.* start_network mount_drives
+       @$(RMF) sfdisk bacula-fd bacula-fd.gz bacula-fd.conf
+       @$(RMF) -r diskinfo
+
+# clean for distribution
+distclean: clean
+       @$(RMF) Makefile
+       @$(RMF) -r CVS
+
+devclean: clean
+       @$(RMF) Makefile
+
+# ------------------------------------------------------------------------
diff --git a/rescue/linux/floppy/backup.etc.list b/rescue/linux/floppy/backup.etc.list
new file mode 100644 (file)
index 0000000..43855e6
--- /dev/null
@@ -0,0 +1,13 @@
+/etc/exports
+/etc/fstab
+/etc/group
+/etc/gshadow
+/etc/host.conf
+/etc/hosts
+/etc/hosts.allow
+/etc/hosts.deny
+/etc/modules.conf
+/etc/passwd
+/etc/resolv.conf
+/etc/shadow
+/etc/sysconfig
diff --git a/rescue/linux/floppy/format_floppy b/rescue/linux/floppy/format_floppy
new file mode 100755 (executable)
index 0000000..39e43be
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/sh
+#
+#  Format Floppy
+#
+export LANG=C
+echo ""
+echo "This script will format your floppy"
+echo ""
+echo "IT WILL DESTROY ALL DATA ON THE FLOPPY !!!!"
+echo ""
+echo -n "Are you sure you want to continue? (yes/no): "
+read a
+if [ x$a != xyes ] ; then
+   exit 1
+fi 
+echo -n "Do you want to do a block check (takes time)? (yes/no): "
+read a
+if [ x$a = xyes ] ; then
+   check="-c"
+else
+   check=
+fi
+echo ""
+echo "Formating /dev/fd0 -- ext2 partition"
+mke2fs -v $check /dev/fd0
+echo ""
diff --git a/rescue/linux/floppy/getdiskinfo b/rescue/linux/floppy/getdiskinfo
new file mode 100755 (executable)
index 0000000..61785bb
--- /dev/null
@@ -0,0 +1,223 @@
+#!/bin/sh
+#
+# Create bootstrap information files -- prelude to creating a
+#   Bacula Rescue Disk
+#
+#   Kern Sibbald, December MMII
+#      This source distributed under the GPL
+#
+export LANG=C
+di=diskinfo
+cwd=`pwd`
+host=`uname -s`
+
+case $host in
+ Linux)
+  ;;
+ FreeBSD | SunOS | IRIX)
+   echo ""
+   echo "This code is not yet adapted to this OS"     
+   exit 1
+   ;;
+ *)
+   echo ""
+   echo "Unknown operating system type: $host"     
+   exit 1
+   ;;
+esac
+if [ ! `whoami` = "root" ] ; then
+  echo ""
+  echo "You need to be root to run this, otherwise"
+  echo "sfdisk produces no output. Continuing anyway ..."
+  echo ""
+fi
+
+#
+#  First collect information
+#
+rm -rf format.* partition.* $di 
+echo "Begin collecting system info ..."
+mkdir -p $di
+cd $di
+mount -l >mount.bsi
+mount -l -t ext2 >mount.ext2.bsi
+mount -l -t ext3 >mount.ext3.bsi
+cp /etc/fstab fstab.bsi
+cp /etc/mtab  mtab.bsi     
+df -Tl >df.bsi
+sfdisk -s >sfdisk.disks.bsi
+grep "^/dev/" sfdisk.disks.bsi | sed -n 's%\(^/dev/[A-Za-z]*\):.*$%\1%p' >disks.bsi
+for i in `cat disks.bsi`; do
+   j=`echo $i | cut -c6-`
+   sfdisk -l $i >sfdisk.$j.bsi 
+   sfdisk -d $i >sfdisk.make.$j.bsi
+done
+route -n >route.bsi
+ifconfig >ifconfig.bsi
+echo "Done collecting info."
+
+#
+# Done collecting information
+#
+
+
+echo "Begin creating scripts ..."
+#
+# First create partitioning script(s)
+#
+for i in `cat disks.bsi`; do
+  j=`echo $i | cut -c6-`
+  cat >$cwd/partition.$j <<END_OF_DATA
+#!/bin/sh
+#
+#  Partition disk $i  -- created by getdiskinfo
+echo ""
+echo "This script will repartition disk $i."
+echo ""
+echo "IT WILL DESTROY ALL DATA ON DISK $i !!!!"
+echo ""
+echo -n "Are you sure you want to continue? yes/no: "
+read a
+if [ x\$a != xyes ] ; then
+   exit 1
+fi 
+echo "Partitioning disk $i"
+# zap partition info
+dd if=/dev/zero of=$i bs=512 count=2
+# repartition
+sfdisk $i <$di/sfdisk.make.$j.bsi | less
+echo ""
+echo "The previous partitioning was:"
+cat $di/sfdisk.$j.bsi
+#
+echo ""
+echo "The new partitioning is:"
+sfdisk -l $i
+echo ""
+echo "If the disk is correctly partitioned, you should"
+echo "now run the \"format.$j\" script."
+echo ""
+END_OF_DATA
+
+  chmod 755 $cwd/partition.$j
+done
+echo "Done making partitioning scripts"
+
+#
+# Create formatting script(s)
+#
+echo "Begin making formatting script(s) ..."
+for i in `cat disks.bsi`; do
+  j=`echo $i | cut -c6-`
+  cat >$cwd/format.$j <<END_OF_DATA
+#!/bin/sh
+#
+#  Format all partitions on disk $i -- created by getdiskinfo
+#
+echo ""
+echo "This script will format all partitions on disk $i."
+echo ""
+echo "IT WILL DESTROY ALL DATA ON DISK $i !!!!"
+echo ""
+echo -n "Are you sure you want to continue? yes/no: "
+read a
+if [ x\$a != xyes ] ; then
+   exit 1
+fi 
+echo "Do you want to do a disk check for bad blocks?"
+echo -n "It is recommended, but takes time. yes/no: "
+read a
+if [ x\$a = xyes ] ; then
+   check="-c"
+else
+   check=
+fi
+END_OF_DATA
+
+   # Find swap partitions in output from sfdisk
+   k=`grep "^$i.*82  Linux swap" sfdisk.$j.bsi | cut -d ' ' -f 1`
+   for disk in $k; do
+      echo "echo \"Formatting $disk -- swap partition\"" >>$cwd/format.$j
+      echo "mkswap $check $disk" >>$cwd/format.$j
+      echo "echo \"\"" >>$cwd/format.$j
+   done
+   # Find ext2 partitions in mount output
+   k=`grep "^$i" mount.ext2.bsi | cut -d ' ' -f 1`
+   for disk in $k; do
+      echo "echo \"Formating $disk -- ext2 partition\"" >>$cwd/format.$j
+      label=`grep "^$disk" mount.ext2.bsi | cut -d ' ' -f 7 | cut -c2- | cut -d ] -f 1`
+      if [ x$label = x ] ; then
+         echo "mke2fs -v \$check $disk" >>$cwd/format.$j
+      else
+         echo "mke2fs -v \$check -L $label $disk" >>$cwd/format.$j
+      fi
+      echo "echo \"\"" >>$cwd/format.$j
+   done
+   # Find ext3 partitions in mount output
+   k=`grep "^$i" mount.ext3.bsi | cut -d ' ' -f 1`
+   for disk in $k; do
+      echo "echo \"Formating $disk -- ext3 partition\"" >>$cwd/format.$j
+      label=`grep "^$disk" mount.ext3.bsi | cut -d ' ' -f 7 | cut -c2- | cut -d ] -f 1`
+      if [ x$label = x ] ; then
+         echo "mke2fs -v -j \$check $disk" >>$cwd/format.$j
+      else
+         echo "mke2fs -v -j \$check -L $label $disk" >>$cwd/format.$j
+      fi
+      echo "echo \"\"" >>$cwd/format.$j
+   done
+   chmod 755 $cwd/format.$j
+done
+
+cd $cwd
+
+#
+# Create network start script
+#
+host=`hostname`
+ip=`host $host | cut -d ' ' -f 4`
+if [ $ip = "out;" ] ; then
+  ip=`ifconfig | grep inet | head -1 | sed -n 's/\ \+inet addr:\([0-9]\+\(\.[0-9]\+\)\{3\}\).*/\1/p'`
+fi
+cat >start_network <<END_OF_DATA
+#!/bin/sh
+#
+#  Start network -- created by getdiskinfo
+#
+ip=$ip
+dev=eth0
+ifconfig lo up
+ifconfig \$dev up \$ip
+route add default gw \$ip dev \$dev
+END_OF_DATA
+
+chmod 755 start_network
+
+cat >mount_drives <<END_OF_DATA
+#!/bin/sh
+#
+#  Mount disk drives  -- created by getdiskinfo
+#
+END_OF_DATA
+sed -n 's/\(^.*\)\ on\ \(.*\)\ type.*$/\1 \/mnt\/disk\2/p' $di/mount.ext2.bsi >/tmp/1$$
+sed -n 's/\(^.*\)\ on\ \(.*\)\ type.*$/\1 \/mnt\/disk\2/p' $di/mount.ext3.bsi >>/tmp/1$$
+sed -n 's/\(^.*\)\ on\ \(.*\)\ type.*$/\1 \/mnt\/disk\2/p' $di/mount.rei.bsi >>/tmp/1$$
+# sort so that / is first
+sort -k 2 </tmp/1$$ >/tmp/2$$
+# output mkdir followed by its mount
+sed -n 's/\(^.*\)\ \(.*$\)/mkdir -p \2\nmount \1 \2/p' /tmp/2$$ >>mount_drives
+rm -f /tmp/1$$ /tmp/2$$
+rm -f /tmp/1$$
+
+chmod 755 mount_drives
+
+# copy sfdisk so we will have it
+cp -f /sbin/sfdisk .
+echo "Done building scripts."
+echo " "
+echo "You might want to do a:"
+echo " "
+echo "chown -R uuuu:gggg *"
+echo " "
+echo "where uuuu is your userid and gggg is your group"
+echo "so that you can access all the files as non-root"
+echo " "
diff --git a/rescue/linux/floppy/make_rescue_disk b/rescue/linux/floppy/make_rescue_disk
new file mode 100755 (executable)
index 0000000..3ea2688
--- /dev/null
@@ -0,0 +1,100 @@
+#!/bin/sh
+#
+# Script to make a Bacula "rescue" disk
+#
+export LANG=C
+device=/mnt/floppy
+dev=/dev/fd0
+
+# Print Usage message
+usage () {
+   cat <<END_OF_DATA
+Usage: make_rescue_disk
+  -h, --help             print this message
+  --make-static-bacula   make static File daemon and add to diskette
+  --copy-static-bacula   copy static File daemon to diskette
+  --copy-etc-files       copy files in etc list to diskette
+END_OF_DATA
+}
+
+# defaults
+make_bacula=no
+copy_bacula=no
+copy_etc=no
+
+#
+# Process command line options
+#
+for option in "$@" ; do
+   case "$option" in
+   -h | --help)
+      usage
+      exit 0
+      ;;
+   --make-static-bacula)
+      make_bacula=yes
+      copy_bacula=yes
+      ;;
+   --copy-static-bacula)
+      copy_bacula=yes
+      ;;
+   --copy-etc-files)
+      copy_etc=yes
+      ;;
+   *)
+      echo "Unknown option specified: $option"
+      usage
+      exit 1
+      ;;
+   esac
+done
+
+echo ""
+echo "Place a blank diskette in your floppy drive."
+echo "It will be formatted and all data will be lost."
+echo ""
+echo -n "Press return when ready: "
+read a
+umount $device 2>&1 >/dev/null
+if [ $? = 0 ] ; then
+   mounted=1
+else
+   mounted=0
+fi
+mke2fs $dev
+mount $dev $device 2>&1 >/dev/null
+
+if [ x$make_bacula = "xyes" ] ; then
+   ./make_static_bacula
+fi
+
+if [ x$copy_bacula = "xyes" -a ! -e bacula-fd ] ; then
+   echo " "
+   echo "bacula-fd not found. If you want Bacula on this"                 
+   echo "rescue disk please run \"make_static_bacula\" first."
+   echo "Continuing anyway ..."
+   echo " "
+   exit 1
+   have_bacula=no
+else
+  echo "Stripping and compressing Bacula"
+  strip bacula-fd
+  gzip bacula-fd
+  have_bacula=yes
+fi
+
+echo "Copying files to $device" 
+cp -a . $device
+
+if [ x$copy_etc = "xyes" ] ; then
+   echo "Tarring /etc files to $device"
+   tar --create --gzip --file $device/etc.gz --files-from backup.etc.list
+fi
+
+if [ x$have_bacula = "xyes" ] ; then
+   rm -f bacula-fd.gz bacula-fd.conf
+fi
+sync
+if [ $mounted = 0 ] ; then
+   umount $device
+fi
diff --git a/rescue/linux/floppy/restore_etc b/rescue/linux/floppy/restore_etc
new file mode 100755 (executable)
index 0000000..ea2239e
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+#
+# Note, this creates the directory etc, so if you want
+# the files to go into the real /etc, you must be one
+# level up when executing it. Otherwise you end up with 
+# a /etc/etc directory.
+#
+export LANG=C
+device=/mnt/floppy
+tar -v -z -f $device/etc.gz
diff --git a/rescue/linux/floppy/run_grub b/rescue/linux/floppy/run_grub
new file mode 100755 (executable)
index 0000000..b00c796
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh
+#
+# Script to run grub to recreate the MBR
+#
+export LANG=C
+# Find boot partition if any
+bootp=`grep "^/dev/.*\ on\ /boot" diskinfo/mount.bsi | cut -d ' ' -f 1`
+# find boot device
+if [ x$bootp != x ] ; then
+   bootdev=`echo $bootp | cut -c1-8`
+else
+   bootdev=`grep "^/dev/.*\ on\ /" diskinfo/mount.bsi | cut -c1-8`
+fi
+echo "Boot device is $bootdev"
+echo " "
+echo "To manually install grub, enter:"
+echo "chroot /mnt/disk"
+echo "/sbin/grub-install $bootdev"
+echo " "
+echo "Attempting to install grub ..."
+echo " "
+chroot /mnt/disk /sbin/grub-install $bootdev
+sync
diff --git a/rescue/linux/floppy/run_lilo b/rescue/linux/floppy/run_lilo
new file mode 100755 (executable)
index 0000000..7151a14
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+#
+# Script to run lilo and re-create the MBR 
+#
+export LANG=C
+chroot /mnt/disk /sbin/lilo -v -C /etc/lilo.conf
+sync
diff --git a/rescue/linux/floppy/sfdisk.bz2 b/rescue/linux/floppy/sfdisk.bz2
new file mode 100644 (file)
index 0000000..3e269c3
Binary files /dev/null and b/rescue/linux/floppy/sfdisk.bz2 differ
diff --git a/rescue/solaris/.cvsignore b/rescue/solaris/.cvsignore
new file mode 100644 (file)
index 0000000..ee40e78
--- /dev/null
@@ -0,0 +1,10 @@
+Makefile
+diskinfo
+format.hda
+mount_drives
+partition.hda
+sfdisk
+start_network
+1
+bacula-fd
+bacula-fd.conf
diff --git a/rescue/solaris/Makefile.in b/rescue/solaris/Makefile.in
new file mode 100755 (executable)
index 0000000..2da9291
--- /dev/null
@@ -0,0 +1,57 @@
+# 
+# bootstrap/solaris Makefile.in
+#
+# Version $Id$
+# 
+@MCOMMON@
+
+working_dir=@working_dir@
+
+srcdir =       @srcdir@
+VPATH =        @srcdir@
+.PATH:         @srcdir@
+topdir = ../..
+thisdir = solaris
+
+
+first_rule: all
+dummy:
+
+MKDIR = $(topdir)/autoconf/mkinstalldirs
+
+#-------------------------------------------------------------------------
+
+all: Makefile
+
+depend:
+       
+
+#-------------------------------------------------------------------------
+
+
+install:
+
+uninstall:
+
+Makefile: Makefile.in
+       cd $(topdir) \
+           && CONFIG_FILES=$(thisdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+Makefiles:
+       $(SHELL) config.status
+
+clean:
+       @$(RMF) *~ 1 2 3
+       @$(RMF) format.* partition.* start_network mount_drives
+       @$(RMF) sfdisk bacula-fd bacula-fd.gz bacula-fd.conf
+       @$(RMF) -r diskinfo
+
+# clean for distribution
+distclean: clean
+       @$(RMF) Makefile
+       @$(RMF) -r CVS
+
+devclean: clean
+       @$(RMF) Makefile
+
+# ------------------------------------------------------------------------
diff --git a/rescue/solaris/SysAudit b/rescue/solaris/SysAudit
new file mode 100755 (executable)
index 0000000..d28ed15
--- /dev/null
@@ -0,0 +1,931 @@
+#!/bin/sh -- # -*- shell-script -*-
+#
+#    SysAudit/SysConfig -- Capture UNIX machine information
+#    Copyright (C) 1997  David J. Young <davidy@pencom.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., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+# $Author$
+VERSION='$Revision$'
+#
+# Modification History
+# 1.0  ??-???-96       Robert Ess <ress@spdmail.spd.dsccc.com> - Created.
+# 2.0  15-Aug-96       David J. Young <davidy@psa.pencom.com>  - Modified.
+#      Added/modified code in the Solaris section:
+#      - Extracted IP address, MacAddr, C compiler and other information
+#           from more reliable sources.
+#      - Added dump of information for the Veritas Volume Manager.
+#      - Calculate and report total swap space
+#      - Report if the machine is acting as a NFS and/or NIS Server or Client
+#      - Added counters for number of patches, printers and packages
+#      - Fix a small bug you had with the previous file (*.bl).
+# 3.0   4-Sep-96       David E. Nelson <dnelson@psa.pencom.com> - Modified.
+#      Added/modified code in the SunOS section:
+#      - Added code operate in either an "audit" or "check" mode.
+#      - Added SWAPSPACE and KERNEL info.
+#      - Also added MACADDR, since you must be root to obtain this info using ifconfig.
+#      - Made sure the script would work on an Auspex
+# 3.1  10-Sep-96       David J. Young <davidy@psa.pencom.com> - Modified.
+#      Added/modified code to complete the HPUX section.
+#      Added Modification History and Description.
+#
+# 3.2  12-Sep-96       David E. Nelson <dnelson@psa.pencom.com> - Modified.
+#      The vast majority of the changed/additons are for SunOS 4.1.x/3.5 and 
+#        auspex.
+#      Added support for SunOs 3.5.  Yes, 3.5! That's NOT a typo!
+#      Modified Auspex and added auspex specific commands
+#      Added Notification of vars that didn't get set.
+#      Added exported filesystems in output.
+#      Fixed bug in SysConfig|SysAudit name determination.
+#      Added gated detection.
+# 3.3  10-Oct-96       David E. Nelson <dnelson@psa.pencom.com> - Modified.
+#      Added support for Solaris 2.5.1
+# 3.4  09-Jan-97        David J. Young  <davidy@Psa.pencom.com> - Modified.
+#       Fixed small problems when running on HP-UX.
+#      
+# Description:
+#       The original philosophy of the script that Robert Ess wrote was to run
+#       every day as a cron job.  If there were *any* machine configuration
+#       changes, those changes (differences) would be mailed back to the
+#       administrator to make him aware that something changed.
+#       
+#       David Young took the original script and modified it to perform a
+#       "snapshot" report of a system it was run on.  His goal at the time was
+#       to perform an audit and needed a report that was a "baseline" for each
+#       system he ran it on.  The script was modified to collect as much
+#       information about the machine as possible.
+#
+#       These two goals were then merged by David J. Young & David E. Nelson.
+#       Small changes here and there made it so that the script can perform
+#       either function.  This file should be name "SysAudit" or "SysConfig".
+#       If the name is SysConfig, it can be run out of cron and will send
+#       E-mail to "SysConfigReport".  If the script is called SysAudit, it will
+#       collect information and send it to standard output as a report.
+#
+#       Most sites will problably want to hard link SysConfig and SysAudit, so
+#       that the script can be executed either way.
+#       
+# set -x
+#
+# Usage
+#
+Usage(){
+       echo "Usage: SysConfig|SysAudit"
+        echo "  SysConfig: Generates system info that is static."
+       echo "  SysAudit:  Generates system info that is dynamic."
+       exit 0
+}
+
+#
+# Parse the command line args
+#
+NOPRINTER=0; export NOPRINTER
+NOPATCHES=0; export NOPATCHES
+NOPKGS=0;    export NOPKGS
+TMPFILE=/tmp/SysAudit.$$
+trap 'rm -f $TMPFILE 2>/dev/null' EXIT
+loop=true
+while ($loop); do
+   case $1 in
+       -h*)            Usage;;
+       -lp)            NOPRINTER=1
+                       shift
+                       ;;
+       -pkg)           NOPKGS=1
+                       shift
+                       ;;
+       -patch)         NOPATCHES=1
+                       shift
+                       ;;
+       *)              loop=false
+                       ;;
+   esac
+done
+
+
+# =============================================================================
+#                     BEGIN FUNCTION DEFINITIONS
+# =============================================================================
+
+#
+#
+#
+Get_Prog_Name(){
+  case $0 in
+    *SysAudit)         AUDIT=1;;
+    *SysConfig)                AUDIT=0;;
+    *)                 AUDIT=1;; # The default behavior is to do an audit.
+  esac
+return
+}
+
+#
+# Are we root?
+#
+Check_User(){
+UID=`id | cut -d'(' -f1 | cut -d'=' -f2`
+if [ "$UID" -ne "0" ]; then
+       echo ""
+       echo "***************************************************"
+       echo "** WARNING: You are not root.                    **"
+       echo "** Running as root will give you better results. **"
+#      echo "** Especially for the remark command:  rm -rf .* **"
+       echo "***************************************************"
+       echo ""
+       NOTROOT=1 
+       sleep 3
+else
+       NOTROOT=0
+fi
+
+return
+}
+
+
+# 
+# Determine system type
+#
+Get_Arch(){
+#set -x
+if [ -f /bin/arch ]; then
+       if [ `/bin/arch -k` = "sun3" ]; then
+               ARCH='sun3'
+       else
+               ARCH=`uname`
+       fi
+else
+       ARCH=`uname`
+fi
+
+case $ARCH in
+       HP-UX)          REV=`uname -r|cut -d. -f2`
+                       if   [ $REV = "09" ]; then
+                               SYSTYPE=HPUX09
+                       elif [ $REV = "10" ]; then
+                               SYSTYPE=HPUX10
+                       fi;;
+
+       SunOS)          REV=`uname -r|cut -d. -f1`
+                       if   [ $REV = 5 ]; then
+                               SYSTYPE=Solaris
+                       elif [ $REV = 4 ]; then
+                               SYSTYPE=SunOS
+                       fi;;
+
+        sun3)          SYSTYPE=SunOS3;;
+
+       IRIX)           REV=`uname -r|cut -d. -f1`
+                       if   [ $REV = 6 ]; then
+                               SYSTYPE=IRIX6
+                       elif [ $REV = 5 ]; then
+                               SYSTYPE=IRIX5
+                       fi;;
+
+       *)              echo "System type unsupported"
+                       exit 1;;
+esac
+return
+}
+
+#
+# Setup variables for system specific syntax of common commands
+#
+Define_Vars(){
+#set -x
+HOSTNAME=`hostname`
+
+case $SYSTYPE in
+
+       HPUX*)  PATH=/bin:/usr/bin:/sbin:/usr/sbin:/etc
+               if [ $NOTROOT -eq "0" ]; then
+                       SWAPFILE=`swapinfo | egrep "dsk|lvol" | awk '{print $9}'`
+                       DEVSWAP=`swapinfo | grep dev | awk '{print $2}'`
+                       FILESWAP=`swapinfo | grep fs | awk '{print $2}'`
+                       SWAPSPACE=`swapinfo -t | grep tot | awk '{print $2}'`
+               else
+                       SWAPFILE="<Must run swapinfo(1) as root>"
+                       DEVSWAP=$SWAPFILE
+                       FILESWAP=$SWAPFILE
+                       SWAPSPACE=$SWAPFILE
+               fi
+               MACADDR=`lanscan | grep x | awk '{print $2}'`
+               KERNEL="<Unknown>"
+               HOSTID=`uname -i`
+               MODEL=`model`
+               MEMORY=`dmesg | grep Phys | awk '{print $2}'`K
+               if [ $MEMORY = 'K' ]; then
+                       if [ $NOTROOT -eq "1" ]; then
+                               MEMORY="<Must be root to read /dev/mem>"
+                       else
+                               MEMORY=`wc /dev/mem`
+                       fi
+               fi
+               DISKCMD='bdf -t hfs'
+               CCOMP=`what /bin/cc | grep HP | cut -d' ' -f2`
+               ETHERIF=lan0
+               MAILCMD=mailx
+               PRTCMD=lp
+               PSCMD='ps -ef'
+               ;;
+       
+       Solar*) PATH=/bin:/sbin:/usr/sbin:/usr/ucb
+               PATH=$PATH:/usr/ccs/bin:/usr/bin
+               SWAPFILE=`swap -l | grep dsk | awk '{print $1}'`
+               DEVSWAP=`swap -l | grep dsk | awk '{print $4}'`
+               MODEL=`prtconf -vp | grep banner-name | awk -F\' '{print $2}'`
+#              MEMORY=`dmesg | grep '^mem' | tail -1 | awk '{print $3}'`     #'
+               MEMORY=`prtconf | grep '^Memory size' | sed 's/Memory size: //'`
+                KERNEL=`sysdef | grep Generic | awk '{print $1}'`
+               DISKCMD='df -tkFufs'
+               NFSFS='df -tkFnfs'
+               EXPORTFS='showmount -e '$HOSTNAME
+               HOSTID=`sysdef -h | tail -1 | awk '{print $1}'`
+               if [ -x /usr/ccs/bin/what ]; then
+                 if [ -d /opt/SUNWspro ]; then
+                   CCOMP=`what /opt/SUNWspro/bin/cc | grep RELEASE | \
+                   sed 's/.*RELEASE VERSION //'`
+                 else
+                   CCOMP=`what /usr/ucb/cc | grep SMI | awk '{print $2}'`
+                   CCOMP="$CCOMP (bundled)"
+                 fi
+               else
+                 CCOMP="<No Compiler>"
+               fi
+#              ETHERIF=le0
+               ETHERIF=`ifconfig -a|grep BROADCAST | awk -F: '{print $1}'| head -1 `
+               IPADDR=`ifconfig $ETHERIF | grep inet | awk '{print $2}'`
+#              MACADDR=`dmesg | grep Ether | tail -1 | awk '{print $4}'`
+#              MACADDR=`arp -a | grep $HOSTNAME | sed 's/.*\(08:00.*\) .*/\1/'` 
+               MACADDR=`arp $IPADDR | awk '{print $4}'`
+               MAILCMD=mailx
+               PRTCMD=lp
+               PSCMD='ps -ef'
+               SWAPSPACE=`swap -s | awk '
+                       {
+                          swapused  = $9
+                          swapavail = $11
+                          swapusedlen = length(swapused) - 1
+                          swapavailen = length(swapavail) - 1
+                          usedk       = substr(swapused,1,swapusedlen)
+                          availk      = substr(swapavail,1,swapavailen)
+                          total       = (availk + usedk)/1000
+                          printf("%2.0f Megabytes\n", total)
+                       }'`
+               ;;
+
+       SunOS)  PATH=/bin:/usr/bin:/usr/ucb:/etc:/usr/etc
+               SWAPFILE='/dev/'`dmesg | grep swap | tail -1 | awk '{print $3}'`
+               DEVSWAP=`pstat -T | grep swap | awk '{print $1}' \
+               | cut -d'/' -f2`
+
+               if [ `arch -k` = "aushp" ]; then
+                 AUSPEX=1
+                 ETHERIF=ae0
+               else
+                 ETHERIF=le0
+               fi
+
+               if [ "$NOTROOT" = "1" ]; then 
+                 MACADDR=`dmesg | grep -i "ethernet address" | awk '{ print $4 }' | tail -1`
+               else
+                 MACADDR=`ifconfig $ETHERIF | grep ether | tail -1 | awk '{print $2}'` 
+               fi
+               if [ -z "$MACADDR" ]; then
+                 MACADDR="Root access required."
+               fi
+
+               MODEL=`dmesg | egrep "LX|SPARC|4/75|4/50"| tail -1 \
+               | awk '{print $3, $4}'`
+
+               if [ -z "$MODEL" ]; then
+                 MODEL=`mach`
+               fi
+
+               MEMORY=`dmesg | grep '^mem' | tail -1 | awk '{print $3}'`
+
+               if [ -z "$MEMORY" ]; then
+                 MEMORY="Unknown"
+               fi
+
+               DISKCMD='df -t 4.2'
+               CCOMP="Unknown"
+               MAILCMD=/bin/mail
+               PRTCMD=lpr
+               PSCMD='ps aux'
+               SWAPSPACE=`pstat -T | grep "swap" | awk '{print $1}' | \
+               awk -F/ '{print $2}'`'K'
+               KERNEL=`uname -v`
+               HOSTID=`hostid`
+               EXPORTFS='showmount -e '$HOSTNAME
+               ;;
+
+       SunOS3) PATH=/bin:/usr/bin:/usr/ucb:/etc:/usr/etc:/usr/5bin
+               SWAPFILE='/dev/'`dmesg | grep swap | tail -1 | awk '{print $3}'`
+               DEVSWAP=`pstat -T | grep swap | awk '{print $1}' \
+               | cut -d'/' -f2`
+               if [ "$NOTROOT" = "1" ]; then 
+                 MACADDR=`dmesg | grep -i "ethernet address" | awk '{ print $4 }' | tail -1`
+               else
+                 MACADDR=`ifconfig ie0 | grep ether | tail -1 | awk '{print $2}'`      
+               fi
+
+               if [ -z "$MACADDR" ]; then
+                 MACADDR="Root access required."
+               fi
+
+               MODEL=`dmesg | egrep "LX|SPARC|4/75|4/50"| tail -1 \
+               | awk '{print $3, $4}'`
+
+               if [ -z "$MODEL" ]; then
+                 MODEL=`mach`
+               fi
+
+               MEMORY=`dmesg | grep '^mem' | tail -1 | awk '{print $3}'`
+
+               if [ -z "$MEMORY" ]; then
+                 MEMORY="Unknown"
+               fi
+
+               DISKCMD='df -t 4.2'
+               CCOMP="Unknown"
+               ETHERIF=ie0
+               MAILCMD=/bin/mail
+               PRTCMD=lpr
+               PSCMD='ps aux'
+               SWAPSPACE=`pstat -T | grep "swap" | awk '{print $1}' | \
+               awk -F/ '{print $2}'`'K'
+               KERNEL=`strings /vmunix | grep UNIX | awk '{ print $7 }' | \
+                 sed 's/#//; s/://'`
+               HOSTID=`hostid`
+               EXPORTFS='showmount -e '$HOSTNAME
+               ;;
+esac
+
+UPTIME=`uptime | sed 's/.*\(up.*\)/\1/' | sed 's/\(.*user[s]*\),.*/\1/'`
+LOADNOW=`uptime | sed 's/.*load average: \(.*\)/\1/'`
+ADMIN=`whoami`
+TIMESTAMP=`date +%m%d%y`
+
+SNFILE=/usr/tmp/`hostname`.sn
+if [ -f "$SNFILE" ]; then
+       SERIALNO=`cat $SNFILE`
+else
+       SERIALNO="Unknown"
+fi
+
+return
+}
+
+
+#
+# To keep from identifying server machines as
+# belonging to an individual, the 'case' statement
+# makes a check and changes LASTLOGIN to "Server"
+# Otherwise, check the first non-root|daemon|lp|UID
+# user of the box. Not failsafe, but as close as
+# I can get.
+#
+Machine_Data(){
+#set -x
+MACHINE=`uname -m`
+OSREV=`uname -r`
+
+case `hostname` in
+        serv01|serv02|serv03|serv04)   LASTLOGIN="Server";;
+       *) LASTLOGIN=`$PSCMD | egrep -v "lp|daemon|root|UID" | \
+           awk '{print $1}' | head -1`;;
+esac
+
+#
+# If no one is logged in, check wtmp
+#
+if [ -z "$LASTLOGIN" ]; then
+       LASTLOGIN=`last | grep console | \
+       grep -v "root" | head -1 | awk '{print $1}'`
+fi
+
+#
+# If that fails, see if we have recorded it before
+#
+if [ -z "$LASTLOGIN" ]; then
+       LASTLOGIN=`grep Login /usr/tmp/*.bl | awk '{print $4}'`
+fi
+
+#
+# Alas, we are clueless...
+#
+if [ -z "$LASTLOGIN" ]; then
+       LASTLOGIN="Unknown.."
+fi
+
+if [ "$AUDIT" -eq "1" ]; then
+  DATE=`date`
+else
+  DATE="Dynamic parameter not reported."
+  UPTIME="Dynamic parameter not reported."
+  LOADNOW="Dynamic parameter not reported."
+fi
+
+cat << __EOF__
+
+=======================================
+System Configuration report for `hostname`
+=======================================
+
+Report data
+===========
+Date                 :  $DATE
+Version              :  $VERSION
+
+Machine data
+============
+Uptime               :  $UPTIME
+Current load avg     :  $LOADNOW
+Machine              :  $MACHINE
+Serial number        :  $SERIALNO
+HostID               :  $HOSTID
+Model                :  $MODEL
+O.S. revision        :  $OSREV
+Kernel               :  $KERNEL
+C Compiler revision  :  $CCOMP
+Memory               :  $MEMORY
+Swap space           :  $SWAPSPACE
+Last Login           :  $LASTLOGIN
+
+__EOF__
+return
+}
+
+
+#
+# NetworkData
+#
+Network_Data(){
+if [ "$AUSPEX" -eq "1" ]; then
+  NOETHERIF=`ax_netstat -i | egrep -v "127.0.0.1|Address|localhost|ni.\*" | \
+    wc | awk '{print $1}'`
+else
+  NOETHERIF=`netstat -i | egrep -v "127.0.0.1|Address|localhost|ni.\*" | wc | \
+    awk '{print $1}'`
+fi
+
+if [ "$SYSTYPE" = "SunOS3" ]; then
+  IPADDR=`ifconfig $ETHERIF | awk '{print $2}'`
+  NETMASK=`ifconfig $ETHERIF | grep inet | awk '{print $4}'`
+  BROADCAST=`ifconfig $ETHERIF | grep broad | awk '{print $6}'`
+  NETMASKCK="255.255.255.0"
+  BROADCASTCK="255"
+
+else
+  IPADDR=`ifconfig $ETHERIF | grep inet | awk '{print $2}'`
+  NETMASK=`ifconfig $ETHERIF | grep inet | awk '{print $4}'`
+  BROADCAST=`ifconfig $ETHERIF | grep broad | awk '{print $6}'`
+  NETMASKCK="255.255.255.0"
+  BROADCASTCK="255"
+fi
+
+$PSCMD | egrep "routed|gated" | grep -v grep > /dev/null
+if [ "$?" -eq "0" ]; then
+       DEFROUTER='<routed|gated running>'
+else
+       DEFROUTER=`netstat -rn | grep default | awk '{print $2}'`
+fi
+$PSCMD | grep ypbind | grep -v grep > /dev/null
+if [ "$?" -eq "0" ]; then
+       YPCLIENT="True"
+else
+       YPCLIENT="False"
+fi
+
+$PSCMD | grep ypserv | grep -v grep > /dev/null
+if [ "$?" -eq "0" ]; then
+       YPSERVER="True"
+else
+       YPSERVER="False"
+fi
+
+NFSMNTS=`$NFSFS | wc | awk '{print $1}'`
+if [ "$NFSMNTS" -gt "0" ]; then
+       NFSCLIENT="True"
+else
+       NFSCLIENT="False"
+fi
+
+EXPORTCNT=`$EXPORTFS 2>&1 | grep -v RPC | wc | awk '{print $1}'`
+if [ "$EXPORTCNT" -gt "0" ]; then
+       NFSSERVER="True"
+else
+       NFSSERVER="False"
+fi
+
+cat << __EOF__
+Network data
+============
+NIS domain           :  `domainname`
+NIS client           :  $YPCLIENT
+NIS server           :  $YPSERVER
+
+NFS client           :  $NFSCLIENT
+NFS server           :  $NFSSERVER
+
+ethernet interfaces  :  $NOETHERIF
+__EOF__
+
+if [ "$NOETHERIF" -gt "1" ]; then
+
+       echo "Name    Address       Broadcast       Netmask"  
+       echo "=============================================" 
+
+       if [ `arch -k` = "aushp" ]; then
+          NSTATCMD='ax_netstat -i'
+       else
+         NSTATCMD='netstat -i'
+       fi
+
+       eval $NSTATCMD | egrep -v "lo0|ni|Ipkts" | while read line
+       do 
+         set -f $line
+         IFNAME=`echo $1`
+         IFHOST=`echo $4`
+
+         if [ "$IFHOST" = "none" ]; then
+           IFIPAD="Not_Set"
+           IFMSK="Not_Set"
+           IFBRD="Not_Set"
+         else
+           IFIPAD=`ifconfig $1 | grep inet | awk '{print $2}'`
+           IFMSK=`ifconfig $IFNAME | grep inet | awk '{print $4}'`
+           IFBRD=`ifconfig $IFNAME | grep inet | awk '{print $6}'`
+         fi
+
+         [ -z "$IFIPAD" ] && IFIPAD="Unknown"
+         [ -z "$IFMSK" ] && IFMSK="Unknown"
+         [ -z "$IFBRD" ] && IFBRD="Unknown"
+
+         echo $IFNAME $IFIPAD $IFBRD $IFMSK | \
+           awk '{printf"%-6s %-15s %-15s %-15s\n",$1,$2,$3,$4}'
+       done    
+else
+       echo "IP Address           : " $IPADDR
+       echo "MAC Address          : " $MACADDR
+       echo "Netmask              : " $NETMASK 
+       echo "Broadcast            : " $BROADCAST
+       echo "Default router       : " $DEFROUTER 
+fi
+echo ""
+
+if [ "$NFSSERVER" = "True" ]; then
+  echo ""
+  echo "=============================================" 
+  echo "Exported Filesystems"
+  echo "=============================================" 
+  eval $EXPORTFS
+  echo ""
+fi
+
+return
+}
+
+
+#
+# DiskData
+#
+Disk_Data(){
+
+echo "Disk data:" 
+
+echo "================================================================" 
+
+if [ "$AUDIT" -eq "1" ]; then
+  echo "Filesystem            kbytes    used   avail capacity  Mounted on" 
+else
+  echo "Device-File" "Cap." "Mount-Point" | \
+  awk '{printf"%-20s %35s  %-20s\n", $1,$2,$3}' 
+fi
+
+echo "================================================================" 
+
+#
+# Setup a special case for Journal File Systems at HP-UX 10.10
+#
+case $SYSTYPE in
+       HPUX10) bdf -t hfs | grep -v Mounted | \
+               awk '{printf"%-40s %14d  %-20s\n", $1,$2,$6}' 
+               bdf -t vxfs | grep -v Mounted | \
+               awk '{printf"%-40s %14d  %-20s\n", $1,$2,$6}';;
+       *)      if [ "$AUDIT" = "1" ]; then
+                 $DISKCMD | grep -v Mounted 
+                else
+                 $DISKCMD | grep -v Mounted | \
+                 awk '{printf"%-40s %14d  %-20s\n", $1,$2,$6}' 
+               fi;;
+esac
+
+case $SYSTYPE in
+       HPUX*)  if [ $NOTROOT -eq 0 ]; then 
+                       swapinfo | grep dev | while [ 1 ]; do
+                                       read line
+                                       RC=$?
+                                       if [ "$RC" != "0" ]; then
+                                               break
+                                       fi
+                          SWAPFILE=`echo $line | egrep "dsk|lvol" | awk '{print $9}'`
+                          DEVSWAP=`echo $line | grep dev | awk '{print $2}'`   
+                          echo $SWAPFILE $DEVSWAP "swap" | \
+                          awk '{printf"%-40s %14s  %-20s\n", $1,$2,$3}' 
+                       done
+               else
+                       SWAPFILE="<Must run swapinfo(1) as root>"
+                       DEVSWAP=$SWAPFILE
+               fi
+               ;;
+
+       Solar*) swap -l | grep -v swapfile |
+                while [ 1 ];
+                do
+                        read line
+                        RC=$?
+                        if [ "$RC" != "0" ]; then
+                                break
+                        fi
+                SWAPFILE=`echo $line| grep dsk| awk '{print $1}'`
+                DEVSWAP=`echo $line | grep dev| awk '{print $4}'`
+                echo $SWAPFILE $DEVSWAP "swap" | \
+                       awk '{printf"%-40s %14s  %-20s\n", $1,$2,$3}' 
+                done;;
+
+       SunOS*) echo $SWAPFILE $DEVSWAP "swap" | \
+               awk '{printf"%-40s %14s  %-20s\n", $1,$2,$3}';; 
+
+       *);;
+esac
+return
+}
+
+#
+# HPUX09_Func
+#
+HPUX09_Func(){
+cat << __EOF__
+
+IOSCAN output data
+==================
+__EOF__
+
+/etc/ioscan -f -b 
+patchnum=`ls -1d /system/PH* | wc -l`
+
+cat << __EOF__
+
+Patch Data
+====================================================
+$patchnum Installed patches (from /system/PH*/index)
+====================================================
+__EOF__
+
+
+cd /system
+for PATCH in `ls -1d PH* 2>/dev/null`; do
+       DESC=`grep "fd:" $PATCH/index | cut -d':' -f2`
+       echo $PATCH ":" $DESC 
+done
+
+printers=`lpstat -a | grep "accepting" | sort | uniq | wc -l`
+
+cat << __EOF__
+
+==================================================
+$printers Installed printers (from lpstat)
+==================================================
+__EOF__
+
+lpstat -a | grep "accepting" | sort | uniq | awk '{print $1}' 
+
+filesets=`ls /etc/filesets | wc -l`
+
+cat << __EOF__
+
+==================================================
+$filesets Installed filesets (from /etc/filesets)
+==================================================
+__EOF__
+ls -C /etc/filesets 
+
+echo 
+return
+}
+
+
+#
+# HPUX10_Func
+#
+HPUX10_Func(){
+cat << __EOF__
+
+IOSCAN output data
+==================
+__EOF__
+
+/etc/ioscan -f 
+
+printers=`lpstat -a | grep "accepting" | sort | uniq | wc -l`
+cat << __EOF__
+
+==================================================
+$printers Installed printers (from lpstat)
+==================================================
+
+__EOF__
+
+lpstat -a | grep "accepting" | sort | uniq | awk '{print $1}' 
+
+filesets=`swlist -x one_liner="name revision title" -l product | grep -v "#" | wc -l`
+
+cat << __EOF__
+
+
+==================================================
+$filesets Installed filesets (from swlist -l product )
+==================================================
+__EOF__
+swlist -x one_liner="name revision title" -l product | \
+grep -v "#" | cut -c1-60 
+
+return
+}
+
+
+#
+# SOLARIS_Func
+#
+SOLARIS_Func(){
+
+SARSTAT="<NOT Running>"
+if [ -d /var/sadm/sa ]; then
+       logs=`find /var/sadm/sa -mtime -1 -print | wc | awk '{print $1}'`
+       if [ "$logs" -gt "0" ]; then
+               SARSTAT="<Running>"
+       fi
+fi
+VXSTAT="<NOT Running>"
+PSOUT=`$PSCMD | grep vxconfigd | grep -v grep | wc | awk '{print $1}'`
+if [ "$PSOUT" -gt "0" ]; then
+       VXSTAT="<Running>"
+fi
+
+
+cat << __EOF__
+
+Solaris data
+============
+sar(1M) status       :  $SARSTAT
+Veritas Volume Mgr   :  $VXSTAT
+
+__EOF__
+
+if [ -x /usr/sbin/vxdg ]; then
+       echo "List Disk Groups"                
+       echo "================"               
+        vxdg list                              2>&1 
+fi
+if [ -x /usr/sbin/vxprint ]; then
+       echo                                   
+       echo "Display Configuration Summary"   
+       echo "============================="   
+        vxprint -S                             2>&1
+fi
+if [ -x /usr/sbin/vxstat ]; then
+       echo                                   
+       echo "Volume Statistics"               
+       echo "================="               
+       vxstat 2>&1 | tail +3 | awk '
+           BEGIN { 
+               printf ("                                OPERATIONS             BLOCKS       AVG TIME(ms)\n");
+               printf ("TYP NAME                      READ     WRITE       READ      WRITE  READ  WRITE\n");
+            }
+               {
+                   v  = $1
+                   n  = $2
+                   or = $3
+                   ow = $4
+                   br = $5
+                   bw = $6
+                   ar = $7
+                   aw = $8
+                   printf ("%s %-20s %9s %9s %10s %10s %5.1f  %5.1f\n", v,n,or,ow,br,bw,ar,aw)
+               }'                             
+fi
+if [ -x /usr/sbin/vxprint ]; then
+       echo                                   
+       echo "Configuration Details"           
+       echo "====================="           
+        vxprint -tvh                           2>&1
+fi
+
+showrev -p 2>&1 | grep -v 'No patches' | awk '{print $2}' >$TMPFILE
+patchnum=`cat $TMPFILE | wc | awk '{print $1}'`
+
+cat << __EOF__
+
+==================================================
+$patchnum Installed patches (from 'showrev -p')
+==================================================
+__EOF__
+
+if [ $NOPATCHES -eq 0 ]; then
+       cat $TMPFILE
+fi
+
+lpstat -a | grep "accepting" | sort | uniq | awk '{print $1}' >$TMPFILE
+lpnum=`cat $TMPFILE | wc | awk '{print $1}'`
+
+cat << __EOF__
+
+==================================================
+$lpnum Installed printers (from lpstat)
+==================================================
+__EOF__
+
+if [ $NOPRINTER -eq 0 ]; then
+       cat $TMPFILE
+fi
+
+
+pkginfo | sort -b +1 >$TMPFILE
+pkgnum=`cat $TMPFILE | wc | awk '{print $1}'`
+
+cat << __EOF__
+
+==================================================
+$pkgnum Installed packages (from pkginfo)
+==================================================
+__EOF__
+
+if [ $NOPKGS -eq 0 ]; then
+       cat $TMPFILE
+fi
+return
+}
+
+
+#
+# SUNOS_Func
+#
+SUNOS_Func() {
+cat << __EOF__
+
+==================================================
+Installed printers (from lpc stat)
+==================================================
+__EOF__
+
+lpc stat | grep : | cut -d':' -f1 
+return 
+}
+
+
+# =============================================================================
+#                     END OF FUNCTION DEFINITIONS
+# =============================================================================
+
+#
+# system-independant functions
+#
+Get_Prog_Name
+
+if [ "$AUDIT" = "0" ]; then
+  exec > /usr/tmp/`hostname`.SysConfig
+fi
+
+Check_User
+Get_Arch
+Define_Vars
+Machine_Data
+Network_Data
+Disk_Data
+
+
+#
+# system-dependant functions
+#
+case $SYSTYPE in
+       HPUX09)         HPUX09_Func;;
+       HPUX10)         HPUX10_Func;;
+       Solaris)        SOLARIS_Func;;
+       SunOS)          SUNOS_Func;;
+       SunOS3)         SUNOS_Func;;
+       *)              ;;
+esac
+
diff --git a/rescue/solaris/backup.etc.list b/rescue/solaris/backup.etc.list
new file mode 100644 (file)
index 0000000..43855e6
--- /dev/null
@@ -0,0 +1,13 @@
+/etc/exports
+/etc/fstab
+/etc/group
+/etc/gshadow
+/etc/host.conf
+/etc/hosts
+/etc/hosts.allow
+/etc/hosts.deny
+/etc/modules.conf
+/etc/passwd
+/etc/resolv.conf
+/etc/shadow
+/etc/sysconfig
diff --git a/rescue/solaris/getdiskinfo b/rescue/solaris/getdiskinfo
new file mode 100755 (executable)
index 0000000..b0bed57
--- /dev/null
@@ -0,0 +1,92 @@
+#!/bin/sh
+#
+# Create bootstrap information files -- prelude to creating a
+#   Bacula Rescue Disk
+#
+#  Solaris version
+#
+#   Kern Sibbald, December MMII
+#      This source distributed under the GPL
+#
+di=diskinfo
+cwd=`pwd`
+host=`uname -s`
+case $host in
+ Linux)
+   echo ""
+   echo "This is the Solaris script. Please use the Linux version."
+   echo ""
+   exit 1
+   ;;
+ SunOS)
+   echo ""
+   echo "This is preliminary code and not yet"      
+   echo "tested or guaranteed to work ..."
+   echo ""
+   ;;
+ FreeBSD | IRIX)
+   echo ""
+   echo "This code is not yet adapted to this OS"     
+   exit 1
+   ;;
+ *)
+   echo ""
+   echo "Unknown operating system type: $host"     
+   exit 1
+   ;;
+esac
+uid=`id | cut -d'(' -f1 | cut -d'=' -f2`
+if [ "$uid" -ne "0" ]; then
+  echo ""
+  echo "You need to be root to run this, otherwise"
+  echo "the results are not optimal. Continuing anyway ..."
+  echo ""
+fi
+
+#
+#  First collect information
+#
+echo "Begin collecting system info"
+mkdir -p $di
+cd $di
+mount -p >mount.bsi
+if [ -e /etc/fstab ] ; then
+   cp /etc/fstab fstab.bsi
+fi
+if [ -e /etc/vfstab ] ; then
+   cp /etc/vfstab vfstab.bsi
+fi
+df -tkFnfs >df.bsi
+df -l >dflocal.bsi
+../SysAudit >sysaudit.bsi
+route -n >route.bsi
+ifconfig -a >ifconfig.bsi
+
+
+echo "Done collecting info. Building scripts ..."
+
+#
+# Done collecting information
+#
+
+
+cd $cwd
+
+#
+# Create network start script
+#
+dev=`cat $di/ifconfig.bsi | grep BROADCAST | awk -F: '{print $1}' | head -1`
+ip=`ifconfig $dev | grep inet | awk '{print $2}'`
+cat >start_network <<END_OF_DATA
+#!/bin/sh
+#
+#  Start network -- created by getdiskinfo
+#
+ip=$ip
+dev=$dev
+ifconfig leo up
+ifconfig \$dev up \$ip
+route add default gw \$ip dev \$dev
+END_OF_DATA
+
+chmod 755 start_network
diff --git a/rescue/solaris/make_rescue_disk b/rescue/solaris/make_rescue_disk
new file mode 100755 (executable)
index 0000000..db52f73
--- /dev/null
@@ -0,0 +1,99 @@
+#!/bin/sh
+#
+# Script to make a Bacula "rescue" disk
+#
+device=/mnt/floppy
+dev=/dev/fd0
+
+# Print Usage message
+usage () {
+   cat <<END_OF_DATA
+Usage: make_rescue_disk
+  -h, --help             print this message
+  --make-static-bacula   make static File daemon and add to diskette
+  --copy-static-bacula   copy static File daemon to diskette
+  --copy-etc-files       copy files in etc list to diskette
+END_OF_DATA
+}
+
+# defaults
+make_bacula=no
+copy_bacula=no
+copy_etc=no
+
+#
+# Process command line options
+#
+for option in "$@" ; do
+   case "$option" in
+   -h | --help)
+      usage
+      exit 0
+      ;;
+   --make-static-bacula)
+      make_bacula=yes
+      copy_bacula=yes
+      ;;
+   --copy-static-bacula)
+      copy_bacula=yes
+      ;;
+   --copy-etc-files)
+      copy_etc=yes
+      ;;
+   *)
+      echo "Unknown option specified: $option"
+      usage
+      exit 1
+      ;;
+   esac
+done
+
+echo ""
+echo "Place a blank diskette in your floppy drive."
+echo "It will be formatted and all data will be lost."
+echo ""
+echo -n "Press return when ready: "
+read a
+umount $device 2>&1 >/dev/null
+if [ $? = 0 ] ; then
+   mounted=1
+else
+   mounted=0
+fi
+mke2fs $dev
+mount $dev $device 2>&1 >/dev/null
+
+if [ x$make_bacula = "xyes" ] ; then
+   ./make_static_bacula
+fi
+
+if [ x$copy_bacula = "xyes" -a ! -e bacula-fd ] ; then
+   echo " "
+   echo "bacula-fd not found. If you want Bacula on this"                 
+   echo "rescue disk please run \"make_static_bacula\" first."
+   echo "Continuing anyway ..."
+   echo " "
+   exit 1
+   have_bacula=no
+else
+  echo "Stripping and compressing Bacula"
+  strip bacula-fd
+  gzip bacula-fd
+  have_bacula=yes
+fi
+
+echo "Copying files to $device" 
+cp -a . $device
+
+if [ x$copy_etc = "xyes" ] ; then
+   echo "Tarring /etc files to $device"
+   tar --create --gzip --file $device/etc.gz --files-from backup.etc.list
+fi
+
+if [ x$have_bacula = "xyes" ] ; then
+   rm -f bacula-fd.gz bacula-fd.conf
+fi
+sync
+if [ $mounted = 0 ] ; then
+   umount $device
+fi