From 13061b74dae637f75677afb9708dbd5597065870 Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Mon, 11 Apr 2005 07:57:12 +0000 Subject: [PATCH] Initial revision --- rescue/.cvsignore | 1 + rescue/Makefile.in | 56 + rescue/freebsd/.cvsignore | 10 + rescue/freebsd/Makefile.in | 57 + rescue/freebsd/backup.etc.list | 13 + rescue/freebsd/getdiskinfo | 204 + rescue/freebsd/make_rescue_disk | 99 + rescue/freebsd/restore_etc | 9 + rescue/freebsd/run_grub | 14 + rescue/freebsd/run_lilo | 6 + rescue/freebsd/sfdisk.bz2 | Bin 0 -> 18656 bytes rescue/linux/.cvsignore | 10 + rescue/linux/Makefile.in | 12 + rescue/linux/cdrom/.cvsignore | 3 + rescue/linux/cdrom/Makefile.in | 83 + rescue/linux/cdrom/README | 193 + rescue/linux/cdrom/dev.tar.gz | Bin 0 -> 1884 bytes rescue/linux/cdrom/makebinaries | 131 + rescue/linux/cdrom/makeinitrd | 108 + rescue/linux/cdrom/makekernel | 40 + rescue/linux/cdrom/mkbootdisk | 224 + rescue/linux/cdrom/mkinitrd | 741 +++ rescue/linux/cdrom/rootetc.list | 13 + rescue/linux/cdrom/rootetc.list.save | 13 + rescue/linux/cdrom/rootsbin.list | 175 + rescue/linux/cdrom/rootsbin.list.save | 175 + rescue/linux/cdrom/roottree/.cvsignore | 10 + rescue/linux/cdrom/roottree/README | 14 + rescue/linux/cdrom/roottree/etc/.cvsignore | 13 + rescue/linux/cdrom/roottree/etc/fonts.cgz | Bin 0 -> 5974 bytes rescue/linux/cdrom/roottree/etc/inittab | 45 + rescue/linux/cdrom/roottree/etc/issue | 6 + rescue/linux/cdrom/roottree/etc/keymaps.gz | Bin 0 -> 18606 bytes rescue/linux/cdrom/roottree/etc/lang-table | 18 + rescue/linux/cdrom/roottree/etc/lilo.conf | 13 + rescue/linux/cdrom/roottree/etc/load_eth0 | 27 + rescue/linux/cdrom/roottree/etc/mount_cdrom | 43 + rescue/linux/cdrom/roottree/etc/mtab | 2 + rescue/linux/cdrom/roottree/etc/nsswitch.conf | 44 + rescue/linux/cdrom/roottree/etc/profile | 49 + rescue/linux/cdrom/roottree/etc/rc.d/rc | 8 + rescue/linux/cdrom/roottree/etc/securetty | 23 + .../linux/cdrom/roottree/etc/start_network.sh | 23 + rescue/linux/cdrom/roottree/etc/sysinit | 48 + rescue/linux/cdrom/roottree/etc/termcap | 5522 +++++++++++++++++ rescue/linux/cdrom/roottree/init | 48 + rescue/linux/cdrom/roottree/init.new | 48 + rescue/linux/cdrom/roottree/linuxrc | 22 + .../linux/cdrom/roottree/root/.bash_history | 0 rescue/linux/cdrom/roottree/root/.bash_logout | 3 + .../linux/cdrom/roottree/root/.bash_profile | 17 + rescue/linux/cdrom/roottree/root/.bashrc | 17 + rescue/linux/cdrom/roottree/root/ntfsresize | Bin 0 -> 496547 bytes rescue/linux/cdrom/yaird-0.0.5.tar.gz | Bin 0 -> 168082 bytes rescue/linux/cdrom/yaird-0.0.5/AUTHORS | 2 + rescue/linux/cdrom/yaird-0.0.5/COPYING | 341 + rescue/linux/cdrom/yaird-0.0.5/ChangeLog | 833 +++ rescue/linux/cdrom/yaird-0.0.5/INSTALL | 236 + rescue/linux/cdrom/yaird-0.0.5/Makefile | 601 ++ rescue/linux/cdrom/yaird-0.0.5/Makefile.am | 31 + rescue/linux/cdrom/yaird-0.0.5/Makefile.in | 601 ++ rescue/linux/cdrom/yaird-0.0.5/Makefile.incl | 28 + rescue/linux/cdrom/yaird-0.0.5/NEWS | 35 + rescue/linux/cdrom/yaird-0.0.5/README | 218 + rescue/linux/cdrom/yaird-0.0.5/TODO | 12 + rescue/linux/cdrom/yaird-0.0.5/aclocal.m4 | 862 +++ rescue/linux/cdrom/yaird-0.0.5/bootstrap.sh | 34 + rescue/linux/cdrom/yaird-0.0.5/config.log | 281 + rescue/linux/cdrom/yaird-0.0.5/config.status | 1157 ++++ rescue/linux/cdrom/yaird-0.0.5/configure | 4345 +++++++++++++ rescue/linux/cdrom/yaird-0.0.5/configure.in | 75 + rescue/linux/cdrom/yaird-0.0.5/depcomp | 529 ++ rescue/linux/cdrom/yaird-0.0.5/doc/Makefile | 326 + .../linux/cdrom/yaird-0.0.5/doc/Makefile.am | 48 + .../linux/cdrom/yaird-0.0.5/doc/Makefile.in | 326 + .../linux/cdrom/yaird-0.0.5/doc/authors.xml | 9 + .../linux/cdrom/yaird-0.0.5/doc/concepts.xml | 450 ++ .../cdrom/yaird-0.0.5/doc/figures/console.dia | Bin 0 -> 1357 bytes .../cdrom/yaird-0.0.5/doc/figures/console.png | Bin 0 -> 5039 bytes rescue/linux/cdrom/yaird-0.0.5/doc/input.xml | 443 ++ rescue/linux/cdrom/yaird-0.0.5/doc/intro.xml | 31 + rescue/linux/cdrom/yaird-0.0.5/doc/kernel.xml | 491 ++ .../linux/cdrom/yaird-0.0.5/doc/license.xml | 65 + rescue/linux/cdrom/yaird-0.0.5/doc/raid.xml | 196 + .../linux/cdrom/yaird-0.0.5/doc/security.xml | 224 + rescue/linux/cdrom/yaird-0.0.5/doc/shlibs.xml | 201 + rescue/linux/cdrom/yaird-0.0.5/doc/spec.xml | 311 + rescue/linux/cdrom/yaird-0.0.5/doc/tools.xml | 229 + rescue/linux/cdrom/yaird-0.0.5/doc/yaird.html | 1581 +++++ rescue/linux/cdrom/yaird-0.0.5/doc/yaird.xml | 94 + .../linux/cdrom/yaird-0.0.5/doc/yaird.xml.in | 94 + .../cdrom/yaird-0.0.5/exec/.deps/findlibs.Po | 120 + .../cdrom/yaird-0.0.5/exec/.deps/run_init.Po | 155 + rescue/linux/cdrom/yaird-0.0.5/exec/Makefile | 452 ++ .../linux/cdrom/yaird-0.0.5/exec/Makefile.am | 34 + .../linux/cdrom/yaird-0.0.5/exec/Makefile.in | 452 ++ rescue/linux/cdrom/yaird-0.0.5/exec/findlibs | Bin 0 -> 17438 bytes .../linux/cdrom/yaird-0.0.5/exec/findlibs.c | 444 ++ rescue/linux/cdrom/yaird-0.0.5/exec/run_init | Bin 0 -> 11445 bytes .../linux/cdrom/yaird-0.0.5/exec/run_init.c | 264 + .../linux/cdrom/yaird-0.0.5/include/config.h | 26 + .../cdrom/yaird-0.0.5/include/config.h.in | 25 + .../linux/cdrom/yaird-0.0.5/include/stamp-h1 | 1 + rescue/linux/cdrom/yaird-0.0.5/install-sh | 323 + rescue/linux/cdrom/yaird-0.0.5/missing | 357 ++ .../cdrom/yaird-0.0.5/perl/ActionList.pm | 180 + .../cdrom/yaird-0.0.5/perl/ActiveBlockDev.pm | 106 + .../yaird-0.0.5/perl/ActiveBlockDevTab.pm | 149 + rescue/linux/cdrom/yaird-0.0.5/perl/Base.pm | 299 + .../linux/cdrom/yaird-0.0.5/perl/Blacklist.pm | 100 + .../yaird-0.0.5/perl/BlockSpecialFile.pm | 45 + .../yaird-0.0.5/perl/BlockSpecialFileTab.pm | 101 + rescue/linux/cdrom/yaird-0.0.5/perl/Conf.pm | 95 + .../linux/cdrom/yaird-0.0.5/perl/Conf.pm.in | 95 + .../linux/cdrom/yaird-0.0.5/perl/FsEntry.pm | 101 + rescue/linux/cdrom/yaird-0.0.5/perl/FsOpts.pm | 107 + rescue/linux/cdrom/yaird-0.0.5/perl/FsTab.pm | 121 + .../linux/cdrom/yaird-0.0.5/perl/Hardware.pm | 218 + rescue/linux/cdrom/yaird-0.0.5/perl/IdeDev.pm | 119 + rescue/linux/cdrom/yaird-0.0.5/perl/Image.pm | 283 + rescue/linux/cdrom/yaird-0.0.5/perl/Input.pm | 104 + .../linux/cdrom/yaird-0.0.5/perl/InputTab.pm | 99 + .../linux/cdrom/yaird-0.0.5/perl/KConfig.pm | 226 + .../yaird-0.0.5/perl/LabeledPartition.pm | 152 + .../yaird-0.0.5/perl/LabeledPartitionTab.pm | 138 + .../cdrom/yaird-0.0.5/perl/LogicalVolume.pm | 50 + rescue/linux/cdrom/yaird-0.0.5/perl/LvmTab.pm | 240 + rescue/linux/cdrom/yaird-0.0.5/perl/Makefile | 461 ++ .../linux/cdrom/yaird-0.0.5/perl/Makefile.am | 86 + .../linux/cdrom/yaird-0.0.5/perl/Makefile.in | 461 ++ rescue/linux/cdrom/yaird-0.0.5/perl/ModDep.pm | 55 + .../linux/cdrom/yaird-0.0.5/perl/ModDepTab.pm | 230 + rescue/linux/cdrom/yaird-0.0.5/perl/Obj.pm | 61 + rescue/linux/cdrom/yaird-0.0.5/perl/Pack.pm | 133 + rescue/linux/cdrom/yaird-0.0.5/perl/PciDev.pm | 46 + .../cdrom/yaird-0.0.5/perl/PciMapEntry.pm | 65 + rescue/linux/cdrom/yaird-0.0.5/perl/PciTab.pm | 89 + .../cdrom/yaird-0.0.5/perl/PhysicalVolume.pm | 49 + rescue/linux/cdrom/yaird-0.0.5/perl/Plan.pm | 311 + .../linux/cdrom/yaird-0.0.5/perl/RaidDev.pm | 46 + .../linux/cdrom/yaird-0.0.5/perl/RaidTab.pm | 170 + .../linux/cdrom/yaird-0.0.5/perl/ScsiDev.pm | 107 + .../cdrom/yaird-0.0.5/perl/SharedLibraries.pm | 140 + .../linux/cdrom/yaird-0.0.5/perl/TestSet.pm | 260 + rescue/linux/cdrom/yaird-0.0.5/perl/UsbDev.pm | 88 + .../cdrom/yaird-0.0.5/perl/UsbMapEntry.pm | 133 + rescue/linux/cdrom/yaird-0.0.5/perl/UsbTab.pm | 92 + .../cdrom/yaird-0.0.5/perl/VolumeGroup.pm | 45 + rescue/linux/cdrom/yaird-0.0.5/perl/main.pl | 234 + rescue/linux/cdrom/yaird-0.0.5/perl/yaird | 234 + .../cdrom/yaird-0.0.5/templates/Debian.pm | 303 + .../cdrom/yaird-0.0.5/templates/Fedora.pm | 318 + .../cdrom/yaird-0.0.5/templates/Makefile | 350 ++ .../cdrom/yaird-0.0.5/templates/Makefile.am | 17 + .../cdrom/yaird-0.0.5/templates/Makefile.in | 350 ++ .../cdrom/yaird-0.0.5/templates/Template.pm | 318 + rescue/linux/floppy/.cvsignore | 10 + rescue/linux/floppy/Makefile.in | 57 + rescue/linux/floppy/backup.etc.list | 13 + rescue/linux/floppy/format_floppy | 26 + rescue/linux/floppy/getdiskinfo | 223 + rescue/linux/floppy/make_rescue_disk | 100 + rescue/linux/floppy/restore_etc | 10 + rescue/linux/floppy/run_grub | 23 + rescue/linux/floppy/run_lilo | 7 + rescue/linux/floppy/sfdisk.bz2 | Bin 0 -> 18656 bytes rescue/solaris/.cvsignore | 10 + rescue/solaris/Makefile.in | 57 + rescue/solaris/SysAudit | 931 +++ rescue/solaris/backup.etc.list | 13 + rescue/solaris/getdiskinfo | 92 + rescue/solaris/make_rescue_disk | 99 + 172 files changed, 36497 insertions(+) create mode 100644 rescue/.cvsignore create mode 100755 rescue/Makefile.in create mode 100644 rescue/freebsd/.cvsignore create mode 100755 rescue/freebsd/Makefile.in create mode 100644 rescue/freebsd/backup.etc.list create mode 100755 rescue/freebsd/getdiskinfo create mode 100755 rescue/freebsd/make_rescue_disk create mode 100755 rescue/freebsd/restore_etc create mode 100755 rescue/freebsd/run_grub create mode 100755 rescue/freebsd/run_lilo create mode 100644 rescue/freebsd/sfdisk.bz2 create mode 100644 rescue/linux/.cvsignore create mode 100644 rescue/linux/Makefile.in create mode 100644 rescue/linux/cdrom/.cvsignore create mode 100644 rescue/linux/cdrom/Makefile.in create mode 100644 rescue/linux/cdrom/README create mode 100644 rescue/linux/cdrom/dev.tar.gz create mode 100755 rescue/linux/cdrom/makebinaries create mode 100755 rescue/linux/cdrom/makeinitrd create mode 100755 rescue/linux/cdrom/makekernel create mode 100755 rescue/linux/cdrom/mkbootdisk create mode 100755 rescue/linux/cdrom/mkinitrd create mode 100644 rescue/linux/cdrom/rootetc.list create mode 100644 rescue/linux/cdrom/rootetc.list.save create mode 100644 rescue/linux/cdrom/rootsbin.list create mode 100644 rescue/linux/cdrom/rootsbin.list.save create mode 100644 rescue/linux/cdrom/roottree/.cvsignore create mode 100644 rescue/linux/cdrom/roottree/README create mode 100644 rescue/linux/cdrom/roottree/etc/.cvsignore create mode 100644 rescue/linux/cdrom/roottree/etc/fonts.cgz create mode 100644 rescue/linux/cdrom/roottree/etc/inittab create mode 100644 rescue/linux/cdrom/roottree/etc/issue create mode 100644 rescue/linux/cdrom/roottree/etc/keymaps.gz create mode 100644 rescue/linux/cdrom/roottree/etc/lang-table create mode 100644 rescue/linux/cdrom/roottree/etc/lilo.conf create mode 100755 rescue/linux/cdrom/roottree/etc/load_eth0 create mode 100755 rescue/linux/cdrom/roottree/etc/mount_cdrom create mode 100644 rescue/linux/cdrom/roottree/etc/mtab create mode 100644 rescue/linux/cdrom/roottree/etc/nsswitch.conf create mode 100644 rescue/linux/cdrom/roottree/etc/profile create mode 100755 rescue/linux/cdrom/roottree/etc/rc.d/rc create mode 100644 rescue/linux/cdrom/roottree/etc/securetty create mode 100755 rescue/linux/cdrom/roottree/etc/start_network.sh create mode 100755 rescue/linux/cdrom/roottree/etc/sysinit create mode 100644 rescue/linux/cdrom/roottree/etc/termcap create mode 100755 rescue/linux/cdrom/roottree/init create mode 100755 rescue/linux/cdrom/roottree/init.new create mode 100755 rescue/linux/cdrom/roottree/linuxrc create mode 100644 rescue/linux/cdrom/roottree/root/.bash_history create mode 100644 rescue/linux/cdrom/roottree/root/.bash_logout create mode 100644 rescue/linux/cdrom/roottree/root/.bash_profile create mode 100644 rescue/linux/cdrom/roottree/root/.bashrc create mode 100755 rescue/linux/cdrom/roottree/root/ntfsresize create mode 100644 rescue/linux/cdrom/yaird-0.0.5.tar.gz create mode 100644 rescue/linux/cdrom/yaird-0.0.5/AUTHORS create mode 100644 rescue/linux/cdrom/yaird-0.0.5/COPYING create mode 100644 rescue/linux/cdrom/yaird-0.0.5/ChangeLog create mode 100644 rescue/linux/cdrom/yaird-0.0.5/INSTALL create mode 100644 rescue/linux/cdrom/yaird-0.0.5/Makefile create mode 100644 rescue/linux/cdrom/yaird-0.0.5/Makefile.am create mode 100644 rescue/linux/cdrom/yaird-0.0.5/Makefile.in create mode 100644 rescue/linux/cdrom/yaird-0.0.5/Makefile.incl create mode 100644 rescue/linux/cdrom/yaird-0.0.5/NEWS create mode 100644 rescue/linux/cdrom/yaird-0.0.5/README create mode 100644 rescue/linux/cdrom/yaird-0.0.5/TODO create mode 100644 rescue/linux/cdrom/yaird-0.0.5/aclocal.m4 create mode 100644 rescue/linux/cdrom/yaird-0.0.5/bootstrap.sh create mode 100644 rescue/linux/cdrom/yaird-0.0.5/config.log create mode 100755 rescue/linux/cdrom/yaird-0.0.5/config.status create mode 100755 rescue/linux/cdrom/yaird-0.0.5/configure create mode 100644 rescue/linux/cdrom/yaird-0.0.5/configure.in create mode 100755 rescue/linux/cdrom/yaird-0.0.5/depcomp create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/Makefile create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/Makefile.am create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/Makefile.in create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/authors.xml create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/concepts.xml create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/figures/console.dia create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/figures/console.png create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/input.xml create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/intro.xml create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/kernel.xml create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/license.xml create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/raid.xml create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/security.xml create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/shlibs.xml create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/spec.xml create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/tools.xml create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/yaird.html create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/yaird.xml create mode 100644 rescue/linux/cdrom/yaird-0.0.5/doc/yaird.xml.in create mode 100644 rescue/linux/cdrom/yaird-0.0.5/exec/.deps/findlibs.Po create mode 100644 rescue/linux/cdrom/yaird-0.0.5/exec/.deps/run_init.Po create mode 100644 rescue/linux/cdrom/yaird-0.0.5/exec/Makefile create mode 100644 rescue/linux/cdrom/yaird-0.0.5/exec/Makefile.am create mode 100644 rescue/linux/cdrom/yaird-0.0.5/exec/Makefile.in create mode 100755 rescue/linux/cdrom/yaird-0.0.5/exec/findlibs create mode 100644 rescue/linux/cdrom/yaird-0.0.5/exec/findlibs.c create mode 100755 rescue/linux/cdrom/yaird-0.0.5/exec/run_init create mode 100644 rescue/linux/cdrom/yaird-0.0.5/exec/run_init.c create mode 100644 rescue/linux/cdrom/yaird-0.0.5/include/config.h create mode 100644 rescue/linux/cdrom/yaird-0.0.5/include/config.h.in create mode 100644 rescue/linux/cdrom/yaird-0.0.5/include/stamp-h1 create mode 100755 rescue/linux/cdrom/yaird-0.0.5/install-sh create mode 100755 rescue/linux/cdrom/yaird-0.0.5/missing create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/ActionList.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/ActiveBlockDev.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/ActiveBlockDevTab.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/Base.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/Blacklist.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/BlockSpecialFile.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/BlockSpecialFileTab.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/Conf.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/Conf.pm.in create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/FsEntry.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/FsOpts.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/FsTab.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/Hardware.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/IdeDev.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/Image.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/Input.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/InputTab.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/KConfig.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/LabeledPartition.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/LabeledPartitionTab.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/LogicalVolume.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/LvmTab.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/Makefile create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/Makefile.am create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/Makefile.in create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/ModDep.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/ModDepTab.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/Obj.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/Pack.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/PciDev.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/PciMapEntry.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/PciTab.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/PhysicalVolume.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/Plan.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/RaidDev.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/RaidTab.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/ScsiDev.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/SharedLibraries.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/TestSet.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/UsbDev.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/UsbMapEntry.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/UsbTab.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/VolumeGroup.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/perl/main.pl create mode 100755 rescue/linux/cdrom/yaird-0.0.5/perl/yaird create mode 100644 rescue/linux/cdrom/yaird-0.0.5/templates/Debian.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/templates/Fedora.pm create mode 100644 rescue/linux/cdrom/yaird-0.0.5/templates/Makefile create mode 100644 rescue/linux/cdrom/yaird-0.0.5/templates/Makefile.am create mode 100644 rescue/linux/cdrom/yaird-0.0.5/templates/Makefile.in create mode 100644 rescue/linux/cdrom/yaird-0.0.5/templates/Template.pm create mode 100644 rescue/linux/floppy/.cvsignore create mode 100755 rescue/linux/floppy/Makefile.in create mode 100644 rescue/linux/floppy/backup.etc.list create mode 100755 rescue/linux/floppy/format_floppy create mode 100755 rescue/linux/floppy/getdiskinfo create mode 100755 rescue/linux/floppy/make_rescue_disk create mode 100755 rescue/linux/floppy/restore_etc create mode 100755 rescue/linux/floppy/run_grub create mode 100755 rescue/linux/floppy/run_lilo create mode 100644 rescue/linux/floppy/sfdisk.bz2 create mode 100644 rescue/solaris/.cvsignore create mode 100755 rescue/solaris/Makefile.in create mode 100755 rescue/solaris/SysAudit create mode 100644 rescue/solaris/backup.etc.list create mode 100755 rescue/solaris/getdiskinfo create mode 100755 rescue/solaris/make_rescue_disk diff --git a/rescue/.cvsignore b/rescue/.cvsignore new file mode 100644 index 0000000..f3c7a7c --- /dev/null +++ b/rescue/.cvsignore @@ -0,0 +1 @@ +Makefile diff --git a/rescue/Makefile.in b/rescue/Makefile.in new file mode 100755 index 0000000..0fc4e81 --- /dev/null +++ b/rescue/Makefile.in @@ -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 index 0000000..ee40e78 --- /dev/null +++ b/rescue/freebsd/.cvsignore @@ -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 index 0000000..bbb2368 --- /dev/null +++ b/rescue/freebsd/Makefile.in @@ -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 index 0000000..43855e6 --- /dev/null +++ b/rescue/freebsd/backup.etc.list @@ -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 index 0000000..6c813a3 --- /dev/null +++ b/rescue/freebsd/getdiskinfo @@ -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 <$cwd/format.$j <>$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 <mount_drives <>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 >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 index 0000000..db52f73 --- /dev/null +++ b/rescue/freebsd/make_rescue_disk @@ -0,0 +1,99 @@ +#!/bin/sh +# +# Script to make a Bacula "rescue" disk +# +device=/mnt/floppy +dev=/dev/fd0 + +# Print Usage message +usage () { + cat <&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 index 0000000..0f43410 --- /dev/null +++ b/rescue/freebsd/restore_etc @@ -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 index 0000000..b76b48b --- /dev/null +++ b/rescue/freebsd/run_grub @@ -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 index 0000000..1f3f040 --- /dev/null +++ b/rescue/freebsd/run_lilo @@ -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 index 0000000000000000000000000000000000000000..3e269c31b9e33ff7917181a7af94f2fafce10349 GIT binary patch literal 18656 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 wev+-_M(oUe&H_H*N69NYAdx_UOv(calj?g- + ./configure (your-options) + make + cd /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: + + /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 index 0000000000000000000000000000000000000000..6c5c2b2e4a9d476652f2c5cd1fe7e83ad194dfcf GIT binary patch literal 1884 zcma)6YgAKL7ET3ah%Td55gYBbqC5l}AeM)yx5`v(T^6NNX+;_zbr7jgC`uhF$Ce5c z1!Jew@)9aI)%prPD2;Y;UBe^NXriTnU=-z%1QH410?AG8J$tUSKl-!h*Is9T`}_9V z-#&*p_BVm1VAWcI+p|;V)ZVZe>p1_M+&Pk}E~9ByL|m%LIZ5+s>FPrP4|i^ooG8AS z|8$LmYndcIeC2pc2@`Q9Pfg_necATu{(afbf&Cmkn%1_bt)w~G>{S@IFUd=@#VIPw zoG-e-WvCvc)#WR4tk;0TAI}h0Kx?kW+YcvZiBa_`1j|fb8@SPhFh3B8n+^UqrszYV z?CsiSx~|oF5TE~nCi8uSzqEODWqIvP zx;vuZYl9DMWaG2?m9NS&2+P71YSgJT%R#9px576ma(3f}a)=eZm02(wpYo;ag7MbO zg2h-^OjX@QoqnepD}Tm;U2I*|uEn9co{-->m=vN7#wF3#f< znzl1c><1wH2#e+oB9|xX*xS3JwSq%!KQzUK1*%N-xYD;BBn`ZpJMNOW{T=7E$PTy# z%aMmcbOB^}A7mDk^}rm|F@s4_mqV_}JAm$v3`P%FpkMKTVvb5Cii;ueLspj50=~pIV}*y`WIJudeypQmV@AQ5F+v3-9e>>kSuG*|G4PH04d=JPRgc%d zHjt4xuoQf<11kIs!Zrfv2K3RY0xgx==P5Heg&F4k zLZjO@q64HwMmS+c+d#+n5PccaIWjsOi*8``7);|iEDjNk@_2>=Y(7IqAH*WnM2c6O z-U(ty^&s4}8Dm>Qv~2Yds%_=cp18=(W8FhFI3a`ItV?U_;ZjLA$VX7~d^>vMF*I91 zWJgu)5TfQ}SJX3!JGQP_3dMJ-~aG~6Qk;dtZ_9PQ@^<_}qS(jms; zROrFejv7X&X?E18MSVE-iAV#XdYGx{m z<^s+sHAKlE5%WyMfJ^lp9y&Rz^8yk;U{Z`>jUH5}2onWnQXXx*=X#C;bpSXZL zat9Z_cMy7PA|tuU45`}|ED;HoTmphf}?dXF#L4kjXpsCrWG1U zXy84TWi<6lRNMbMTqi8$rO2W>90l%jR+!GoR#_|JT_W-k#H~ct^Fy(0gsiOB+Z9Ev zjp$~!-ZK8M_BU@&Hr7RL!$)hOLp0d|Z%4MN+N*Tn(}8r90N^Nj4L&g_eu0&sw1TQf z^bAfh*PO^X$%!sAQWr|X*Bvm%k@4(lj*_A+5G#8fbg!WUSltEBq}XeV?;p(3cuK6&WZH(9xhva;`E z*%}+fLGlp`+*=lc6_cCzJv@k`eO#3KiynSKSHkHMEAsc}-{XQ(aw#UJr_Fl|*;7#^ zS2C1|-|;b`2#}XT1Ty^F)2vX~r?>-d=r;^z!&nW` z*Bn8^N1#6YSz+t<@4f@}>$%!TP?9S7!c+uQVUFhsaqo|el@Y__nxRI@$4T9C$ /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 index 0000000..e7ca4c5 --- /dev/null +++ b/rescue/linux/cdrom/makeinitrd @@ -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 < + +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 <] + [--verbose -v] [--iso] [--kernelargs ] [--size ] + (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 <> $bootmsg < (or wait 10 seconds) to boot your $title system from +$rootdev. You may override the default linux kernel parameters by typing +"linux ", followed by 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 index 0000000..9bbf268 --- /dev/null +++ b/rescue/linux/cdrom/mkinitrd @@ -0,0 +1,741 @@ +#!/bin/bash + +# mkinitrd +# +# Written by Erik Troan +# +# Contributors: +# Elliot Lee +# Miguel de Icaza +# Christian 'Dr. Disk' Hechelmann +# Michael K. Johnson +# Pierre Habraken +# Jakub Jelinek +# Carlo Arenas Belon (carenas@chasqui.lared.net.pe> +# Keith Owens +# Bernhard Rosenkraenzer +# Matt Wilson +# Trond Eivind Glomsrød +# Jeremy Katz +# Preston Brown +# Bill Nottingham +# Guillaume Cottenceau + + +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 ]" >&2 + echo " [--omit-scsi-modules] [--omit-raid-modules] [--omit-lvm-modules]" >&2 + echo " [--with=] [--image-version] [--fstab=] [--nocompress]" >&2 + echo " [--builtin=] [--nopivot] " >&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 " + 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 <> $RCFILE < /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 index 0000000..18a2844 --- /dev/null +++ b/rescue/linux/cdrom/rootetc.list @@ -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 index 0000000..18a2844 --- /dev/null +++ b/rescue/linux/cdrom/rootetc.list.save @@ -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 index 0000000..035649e --- /dev/null +++ b/rescue/linux/cdrom/rootsbin.list @@ -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 index 0000000..035649e --- /dev/null +++ b/rescue/linux/cdrom/rootsbin.list.save @@ -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 index 0000000..018f582 --- /dev/null +++ b/rescue/linux/cdrom/roottree/.cvsignore @@ -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 index 0000000..222d34a --- /dev/null +++ b/rescue/linux/cdrom/roottree/README @@ -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 index 0000000..042cf66 --- /dev/null +++ b/rescue/linux/cdrom/roottree/etc/.cvsignore @@ -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 index 0000000000000000000000000000000000000000..ebe6e36e709a9c082be0636c4cc00ea10e226ca1 GIT binary patch literal 5974 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 literal 0 HcmV?d00001 diff --git a/rescue/linux/cdrom/roottree/etc/inittab b/rescue/linux/cdrom/roottree/etc/inittab new file mode 100644 index 0000000..73c67cf --- /dev/null +++ b/rescue/linux/cdrom/roottree/etc/inittab @@ -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, +# 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 index 0000000..0808fc5 --- /dev/null +++ b/rescue/linux/cdrom/roottree/etc/issue @@ -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 index 0000000000000000000000000000000000000000..fbf9f6cea46abe070d5ac2a138c9edd6e1f891e5 GIT binary patch literal 18606 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 JRvxpn`3Iepq-X#D literal 0 HcmV?d00001 diff --git a/rescue/linux/cdrom/roottree/etc/lang-table b/rescue/linux/cdrom/roottree/etc/lang-table new file mode 100644 index 0000000..d274ae3 --- /dev/null +++ b/rescue/linux/cdrom/roottree/etc/lang-table @@ -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 index 0000000..07a77f3 --- /dev/null +++ b/rescue/linux/cdrom/roottree/etc/lilo.conf @@ -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 index 0000000..c21c74b --- /dev/null +++ b/rescue/linux/cdrom/roottree/etc/load_eth0 @@ -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 </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 index 0000000..c21560b --- /dev/null +++ b/rescue/linux/cdrom/roottree/etc/mtab @@ -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 index 0000000..2b77a18 --- /dev/null +++ b/rescue/linux/cdrom/roottree/etc/nsswitch.conf @@ -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 index 0000000..92c3742 --- /dev/null +++ b/rescue/linux/cdrom/roottree/etc/profile @@ -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 index 0000000..c10de84 --- /dev/null +++ b/rescue/linux/cdrom/roottree/etc/rc.d/rc @@ -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 index 0000000..525f4de --- /dev/null +++ b/rescue/linux/cdrom/roottree/etc/securetty @@ -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 index 0000000..65a22fe --- /dev/null +++ b/rescue/linux/cdrom/roottree/etc/start_network.sh @@ -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 index 0000000..da71eca --- /dev/null +++ b/rescue/linux/cdrom/roottree/etc/sysinit @@ -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 index 0000000..b765d99 --- /dev/null +++ b/rescue/linux/cdrom/roottree/etc/termcap @@ -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[=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: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 index 0000000..e29be74 --- /dev/null +++ b/rescue/linux/cdrom/roottree/init @@ -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 &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 index 0000000..e29be74 --- /dev/null +++ b/rescue/linux/cdrom/roottree/init.new @@ -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 &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 index 0000000..08733be --- /dev/null +++ b/rescue/linux/cdrom/roottree/linuxrc @@ -0,0 +1,22 @@ +#!/bin/sh +# +# First script called by Linux when booting +# + +trap "" 1 2 3 15 +exec >/dev/console &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 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 index 0000000..926eddc --- /dev/null +++ b/rescue/linux/cdrom/roottree/root/.bash_logout @@ -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 index 0000000..dcd29af --- /dev/null +++ b/rescue/linux/cdrom/roottree/root/.bash_profile @@ -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 index 0000000..646a32f --- /dev/null +++ b/rescue/linux/cdrom/roottree/root/.bashrc @@ -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 index 0000000000000000000000000000000000000000..23db94d0ea509af83e9e36c0777a7f1bc16da958 GIT binary patch literal 496547 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 + Copyright (C) 19yy + + 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. + + , 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 index 0000000..9114020 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/ChangeLog @@ -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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 index 0000000..56b077d --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/INSTALL @@ -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 index 0000000..c4423af --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/Makefile @@ -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 index 0000000..8a63a4c --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/Makefile.am @@ -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 index 0000000..71363b1 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/Makefile.in @@ -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 index 0000000..f9fed0a --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/Makefile.incl @@ -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 index 0000000..1184a22 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/NEWS @@ -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 index 0000000..33512cb --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/README @@ -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 + # + # 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 index 0000000..9e79b90 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/TODO @@ -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 index 0000000..74de4a1 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/aclocal.m4 @@ -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 /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 index 0000000..f250918 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/bootstrap.sh @@ -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 index 0000000..d065009 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/config.log @@ -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 &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 &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 &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 index 0000000..afa833b --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/config.status @@ -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 ." +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 <$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in + + fi # grep + + # Handle all the #undef templates + cat >$tmp/undefs.sed <$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 index 0000000..2be1d15 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/configure @@ -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 if you have libraries in a + nonstandard directory + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + +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 &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &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 +#include +#include +#include +/* 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 +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 ." +_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 <>$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 <>$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 index 0000000..0a38911 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/configure.in @@ -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 index 0000000..ffcd540 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/depcomp @@ -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 . + +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 . +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 index 0000000..dc7ff51 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/Makefile @@ -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 index 0000000..aae0c4a --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/Makefile.am @@ -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 index 0000000..d399043 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/Makefile.in @@ -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 index 0000000..68ed2bf --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/authors.xml @@ -0,0 +1,9 @@ +
    + Authors + + This is a place holder section. + Yaird was written by ... + website here ... comments to ... bug reports ... + + +
    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 index 0000000..27722de --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/concepts.xml @@ -0,0 +1,450 @@ +
    + Concepts + + This section discusses the basic concepts underlying + yaird. + + + + The basic operation is simple: + + + + + make a plan to build an image, + + + + + + transform the plan to a detailed description of the image, + + + + + + build and pack the image. + + + + + + + + + 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 + mknod executable or the shared libraries + needed to run that executable. + + + + Making the Plan + + + 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. + + + + To refine the goal of loading a kernel module, + the ModDepTab module interprets + modules.dep 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 /lib/modules + directory. + + + + The KConfig 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 + ext3 is not needed if the new kernel configuration + contains CONFIG_EXT3_FS=y. + + Having knowledge of the relation between module names and + kernel defines hardcoded into yaird + 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. + + + Only a few modules are known: yaird + looks for modules such as ext3 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 modules.pcimap + and friends, so they remain completely outside the view of + yaird. + + + + Module aliases and options as supported by + modprobe are unsupported for the moment. + + + + Before a device as listed in /etc/fstab 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: + + + + + Scanning the /dev directory gives us the + relation between all block special files and major/minor + numbers. + + + + + + Scanning the /sys/block directory gives us the + relation between all major/minor numbers and kernel names + such as dm-0 or sda1; it + also gives the relation between partitions and complete + devices. + + + + + + If there is a symlink in a /sys/block + subdirectory to the /sys/devices + directory, it also gives is the relation between a block + device and the underlying hardware. + + + + + + + + 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 sda1, we need to activate sda, + then create a block special file for sda1. As + another example, to activate dm-0, our first bet is + to check whether this is an LVM logical + volume, + + It could also be an encrypted device; this case is not handled + yet. + + and if so activate the + physical volumes underlying the volume group, and finally running + vgchange -a y. + + + + + Hardware Planning + + + Some devices, such as sdx or hdy, are + expected to have underlying hardware; as an example, sda + may be backed by pci0000:00/0000:00:1f.2/host0/0:0:0:0. + 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 /sys/devices 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. + + + + Finding modules closely follows the methods used in the + hotplug package, and the + hotplug 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. + + + + 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 ScsiDev module knows that a SCSI device + with a type file containing "5" is a CDROM, + and that sr-mod is the appropriate driver. + + + + 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 modules.pcimap. Based on this table, + we find a driver module needed for the device and mark it for + inclusion on the image. + + + + Multiple modules can match the same hardware: as an example, + usb-storage and ub 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 + usb-core, 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 Blacklist module, + based on information in + /etc/hotplug/blacklist and + /etc/hotplug/blacklist.d. + + + + 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". + + + + 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. + + + + + + Plan Transformation + + + 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. + + + + The module ActionList 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. + + + + This plan is transformed to an exact image description with + the help of templates. The module Template + contains a hash with for every type of action: + + + + a list of files to be copied from the mother system to the + image; + + + + + + a list of directories to be created on the image; these do + not have to exist on the mother system; + + + + + + a list of trees to be copied recursively from the mother + system to the image; + + + + + + a hash, with as key the name of a script to be appended to + and as value that which is to be appended. + + + + All of the above are fed through HTML-Template, with the hash + describing this step as parameters. In practice, this looks + like so: + + insmod => { + files => [ + '<TMPL_VAR NAME=target>', + '/sbin/insmod', + ], + directories => [], + trees => [], + scripts => { + '/init' => <<'//', + /sbin/insmod '<TMPL_VAR NAME=target>' +// + }, + }, + + + + + There are a few attributes that are available to every template: + + + + + version + + + + The kernel version we're generating an image for. + Useful if you want your image to include a complete copy + of /lib/modules/(version)/kernel. + + + + + + + appVersion + + + + The version of yaird used to + build the image. + + + + + + + auxDir + + + + The directory where yaird + keeps executables intended to go on the image, such as + run_init. + + + + + + + + + Currently, there are templates for Debian and for Fedora, plus + a template showing how to use the older initrd approach. + + + + + + Image Generation + + 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, + + 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 dev + files provided by sysfs, but there is a bootstrap problem: + the mount command needed to + access sysfs assumes /dev/null and + /dev/console are available. + + and everything is owned by root. + + + + The Image module contains the image description and + can write the image to a directory. It understands about symlinks: + if /sbin/vgscan is added to the image and it + happens to be a symlink to lvmiopversion, both + vgscan and lvmiopversion + will be added to the image. Shared libraries are supported + via the SharedLibraries module, as discussed in + . Invocations of other executables are not + recognised automatically: if lvmiopversion executes + /etc/lvm-200/vgscan, the latter needs to be + added explicitly to the image. + + + + 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: + yaird refuses to copy dangling links. + + + + + Packing the Image + + The final step is packing the image in a format that the + bootloader can process; this is handled by the module + Pack. The following formats are supported: + + + + + cpio + + + + A zipped cpio file (new ASCII format), required for the + initramfs model as used in the templates for Debian and + Fedora. + + + + + + + directory + + + + An unpacked directory, good for debugging or manually + creating odd formats. + + + + + + + cramfs + + + + A cramfs filesystem, used for Debian initrd images. + + + + + + + + +
    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 index 0000000000000000000000000000000000000000..0707eb5131dd65221b066e0f4a38abbdc0b04357 GIT binary patch literal 1357 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 A6#xJL literal 0 HcmV?d00001 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 index 0000000..362d967 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/input.xml @@ -0,0 +1,443 @@ +
    + Supporting Input Devices + + + 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. + + + + The console is a designated terminal, where kernel output goes, and that + is the initial I/O device for /sbin/init. Like all + terminal devices, it provides a number of functions: you can read + and write to it, plus it has a number of ioctl() + functions to manage line buffering, interrupt characters and + baudrate or parity where applicable. + + + + 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. + + + + 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. + + + + 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". + + + + 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 /dev/input/event0 + 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 + modules.inputmap 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. + + + + To guarantee a working console, yaird + should examine /dev/console, 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, /dev/console 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. + + + + 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. + + + + Lets examine the sources of information we have to find which input + hardware we have to support. + + + + + In /sys/class/input, all input devices + are enumerated. Mostly, these only contain a + dev file containing major/minor number, + but USB devices also have a device + symlink into /sys/devices identifying + the underlying hardware. + + + + + + In /boot/menu/grub.lst, 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. + + + + + + The file /proc/bus/input/devices gives + a formatted overview of all known input devices; entries look + like this: + + 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 + + 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 + /sys/devices. + The H (Handlers) line is obvious; The B lines specify + capabilities of the device, plus extra information for each + capability. Known capabilities include: + + + + + Capability + Description + + + + + SYN + Input event is completed + + + KEY + Key press/release event + + + REL + Relative measure, as in mouse movement + + + ABS + Absolute position, as in graphics + tablet + + + MSC + Miscelanious + + + SND + Beep + + + REP + Set hardware repeat + + + FF + Don't know + + + PWR + Power event: on/off switch pressed. + + + FF_STATUS + Don't know. + + + + + + + + + + + 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: + + + + + Define + Module + Description + + + + + + VT + (bool) + + Support multiple virtual terminals, irrespective of what + hardware is used to display letters from the virtual + terminal on the CRT. + + + + + VT_CONSOLE + (bool) + + Make the VT a candidate for console output. The alternative + is a serial line to a VT100 or terminal emulator + + + + + VGA_CONSOLE + (bool) + + Display a terminal on CRT using the VGA interface. + + + + + FRAMEBUFFER_CONSOLE + fbcon + + Display a terminal on a framebuffer, painting letters a + pixel at a time. This has to know about fonts. + + + + + FB_VESA + vesafb + + 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. + + + + + ATKBD + atkbd + + Interpret input from a standard AT or PS/2 keyboard. + Other keyboards use other byte codes, see for example + the Acorn keyboard (rpckbd). + + + + + SERIO + serio + + 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. + + + + + SERIO_I8042 + i8042 + + 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. + + + + + SERIAL_8250 + serial + + 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. + + + + + USB_HID + usbhid + + Driver for USB keyboards and mice. + Another define, USB_HIDINPUT, needs to be true for + these devices to actually work. + + + + + USB_KBD + usbkbd + + Severely limited form of USB keyboard; uses the "boot + protocol". This conflicts with the complete driver. + + + + + + + + + + + The following figure gives an example of how the various modules + can fit together. + + +
    + + Module relation for common console setup + + + + + + +
    + + + 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. + + + + + + Interpret /proc/bus/input/devices. + + + + + + Look for devices that have handler kbd and + that have buttons. Mice and the PC speaker don't match that + criterium, keyboards do. + + + + + + You could interpret the name field of such devices if you're + interested in supporting legacy keyboards. + + + + + + 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/. + + + + + + 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). + + + + + + Don't bother with a mknod, the input is handled via + /dev/console. + + + + + + Otherwise it's presumable a legacy device; you could check for + the existence of + /sys/devices/platform/i8042/serio\d/, + or you could just assume the appropriate driver to be compiled in. + + + + + + Implement support for + /etc/hotplug/blacklist, + since some USB keyboards publish two interfaces (full HID + and the limited boot protocol), the input layer makes both + visible in /proc/bus/input/devices and + the corresponding modules are mutually conflicting. + The blacklist is used to filter out one of these modules. + + + + + +
    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 index 0000000..8b80409 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/intro.xml @@ -0,0 +1,31 @@ +
    + Introduction + + Yaird (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. + + + + It differs from earlier mkinitrd + 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. + + + + This document gives an overview of the design and implementation + of Yaird; see the README file for + usage information. This text assumes familiarity with Linux + system administration and the basics of hotplug and sysfs. + + + + This document describes version &VERSION; + of Yaird. + This is a very rough, proof of concept, version. + +
    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 index 0000000..e2d0f79 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/kernel.xml @@ -0,0 +1,491 @@ +
    + The interface between kernel and image + + + The initial boot image is supposed to load enough modules to let + the real root device be mounted cleanly. It starts up in a + very 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. + + + + 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: + initrd_start and initrd_end; these variables + point to the copy of the image in ram. The bootloader now + hands over control to the kernel. + + + + 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. + + + + In initramfs.c:populate_rootfs(), there are two + possibilities. If the image looks like a cpio.gz file, it is + unpacked into rootfs. If the file /init 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 . + + + + Booting with Initramfs + + If the image was a cpio file, and it contains a file + /init, the initram model is used. + The kernel does some basic setup and hands over control to + /init; it is then up to + /init to make a real root available and to + transfer control to the /sbin/init command + on the real root. + + + + 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; yaird uses + run_init, a small tool based on + klibc. + + # 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 "$@" + + + + + + + Booting with initrd + + If the image was not a cpio file, the kernel copies the + initrd image from where ever the boot loader left it to + rootfs:/initrd.image, and frees the ram used + by the bootloader for the initrd image. + + + + After reading initrd, the kernel does more setup to the point where + we have: + + + + + working CPU and memory management + + + + + + working process management + + + + + + compiled in drivers activated + + + + + + 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 pivot_root() system call is used.) + + + + + + something like a console. Console_init() is + called before PCI or USB probes, so expect only compiled in + console devices to work. + + + + + + + + At this point, in do_mounts.c:prepare_namespace(), + 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) + + + - mount -t devfs devfs /dev + - md_run_setup() + - process initrd + - umount /dev + - mount --move . / + - chroot . + - mount -t devfs devfs /dev + + + + + + Once that returns, in init/main.c:init(), + initialisation memory is freed and /sbin/init + is executed with /dev/console as file descriptor 0, 1 + and 2. /sbin/init can be overruled with + an init=/usr/bin/firefox parameter passed to the + boot loader; if /sbin/init is not found, + /etc/init and a number of other fallbacks + are tried. We're in business. + + + + The processing of initrd starts in + do_mounts_initrd.c:initrd_load(). It creates + rootfs:/dev/ram, then copies + rootfs:/initrd.image there and unlinks + rootfs:/initrd.image. Now we have the initrd + image in a block device, which is good for mounting. It calls + handle_initrd(), which does: + + + # 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 ... + + + + + + So initrd:/linuxrc 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). + + + + Now the idea seems to have been that /linuxrc + would mount the real root and pivot_root into it, then start + /sbin/init. Thus, linuxrc would never return. + However, main.c:init() does some usefull stuff only + after linuxrc returns: freeing init memory segments and starting numa + policy, so in eg Debian and Fedora, /linuxrc + will end, and /sbin/init + is started by main.c:init(). + + + + After linuxrc returns, the variable real_root_dev + determines what happens. This variable can be read and written + via /proc/sys/kernel/real-root-dev. If it + is 0x0100 (the device number of /dev/ram0) + or something equivalent, handle_initrd() will change + directory to /old and return. If it is + something else, handle_initrd() will decode it, mount + it as root, mount initrd as /root/initrd, + and again start /sbin/init. (if mounting as + /root/initrd fails, the block device is freed.) + + + + Remember handle_initrd() was called via + load_initrd() from prepare_namespace(), + and prepare_namespace() ends by chrooting into the + current directory: rootfs:/old. + + + + Note that rootfs:/old was move-mounted + from '/' after /linuxrc returned. + When /linuxrc started, the root was + initrd, but /linuxrc may have done a + pivot_root(), replacing the root with a real root, + say /dev/hda1. + + + + Thus: + + + + + /linuxrc is started with initrd + mounted as root. + + + + + + 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. + + + + + + Devfs may be mounted on /dev. + + + + + + /linuxrc can pivot_root. + + + + + + If you echo 0x0100 to + /proc/sys/kernel/real-root-dev, + the pivot_root will remain in effect after + /linuxrc ends. + + + + + + After /linuxrc returns, + /dev may be unmounted and replaced + with devfs. + + + + + + + + Thus a good strategy for /linuxrc is to + do as little as possible, and defer the real initialisation + to /sbin/init on the initrd; this + /sbin/init can then pivot_root + into the real root device. + + #!/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 + + + + + + + Kernel command line parameters + + 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 /proc/cmdline. + + + + An old version of these parameters is documented in the + + + bootparam + 7 + manual page; more recent information is in the kernel + documentation file kernel-parameters.txt. + Mostly, these parameters are used to configure non-modular drivers, + and thus not very interesting to yaird. + Then there are parameters such as noapic, which are + interpreted by the kernel core and also irrelevant to + yaird. + Finally there are a few parameters which are used by the kernel + to determine how to mount the root file system. + + + + 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. + + + + + ide + + + + 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 + /etc/modprobe.conf. + Unsupported for now. + + + + + + + init + + + + The first program to be started on the definitive root device, + default /sbin/init. Supported. + + + + + + + ro + + + + Mount the definitive root device read only, + so that it can be submitted to fsck. + Supported; this is the default behaviour. + + + + + + + rw + + + + Three guesses. Supported. + + + + + + + resume, noresume + + + + Which device (not) to use for software suspend. + To be done. + + + + + + + root + + + + 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 + yaird 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. + + + + + + + rootflags + + + + Flags to use while mounting root file system. + Implement together with root option. + + + + + + + rootfstype + + + + File system type for root file system. + Implement together with root option. + + + + + + + nfsaddrs + + + + 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. + + + + + + + nfsroot + + + + More diskless booting. + Unsupported for now. + + + + + + + + +
    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 index 0000000..f3ccfcd --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/license.xml @@ -0,0 +1,65 @@ +
    + License + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; + either version 2 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; you may also obtain + a copy of the GNU General Public License + from the Free Software Foundation by visiting their Web site or by writing to +
    + Free Software Foundation, Inc. + 59 Temple Place - Suite 330 + Boston, MA 02111-1307 + USA +
    +
    + + Klibc code + + 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. + +/* ----------------------------------------------------------------------- * + * + * 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. + * + * ----------------------------------------------------------------------- */ + + + +
    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 index 0000000..4a23282 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/raid.xml @@ -0,0 +1,196 @@ +
    + Supporting Raid Devices + + + 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? + + + + 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. + + + + 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. + + + + 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. + + + + 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: /dev/md\d. + 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. + + + + Finally, by picking a different major device number for the raid device, + the raid device can be made partitionable without use of LVM. + + + + 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: + + + + + + + There's an option to create a new device from components, + building the superblock. + + + + + + Another option assembles a raid device from components, + assuming the superblocks are already available. + + + + + + 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. + + + + + + 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 mdadm --assemble /dev/md-root + auto=md uuid=..., which translates to "create + /dev/md-root with some unused minor number, + and put the components with matching uuid in it." + + + + + + + + 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: + + + + + + + + When the md module is loaded, it registers 256 block devices + with devfs. These devices + are not actually allocated, they're just names set up to + allocate the underlying device when opened. These names in + devfs have no counterpart in sysfs. + + + + + + When the LVM vgchange 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. + + + + + + When udevstart is executed + at boot time, it walks over the sysfs tree and lets + udev 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. + + + + + + When mdadm 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 + mdadm command, permissions are 0600 + and there are no hooks for SELinux. + + + + + + When the Debian installer builds a system with LVM and raid, the + raid volumes have names such as /dev/md0, + where there is an assumption about the device minor number in + the name of the file. + + + + + + + + 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 udevstart triggers + udev into creating block device files with proper permissions and + SELinux hooks. Later in the processing of rcS.d, + mdadm 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. + + + + In yaird, we do not use devfs. + Instead, we do a mknod before the + mdadm, taking care to use the same + device number that's in use in the running kernel. We expect + mdadm.conf to contain an auto=md + option for any raid device files that need to be created. + This approach should work regardless of whether the fstab uses + /dev/md\d or a device number independent name. + + +
    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 index 0000000..c5a3ce7 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/security.xml @@ -0,0 +1,224 @@ +
    + Security + + + 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 + + + Secure Programming for Linux and Unix HOWTO. + + + + For yaird, 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. + + + + + + + + Group + Mitigation + Status + + + + + + Bad input + Verify command line + + Yes. + + + + + Bad input + Verify and clean up environment + + Complete environment is reset at start of program. + + + + + Bad input + Avoid assumptions about file descriptors + + Handled by perl. + + + + + Bad input + Verify file names + + Perl taint check shows filenames are verified for + absence of odd characters before passing to + subprocesses. + TODO: examine UTF-8 impact. + + + + + Bad input + Verify file content + + 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. + + + + + Bad input + Verify locale settings + + All locale related environment variables are wiped at + program startup. + + + + + Bad input + Verify character encoding + + All IO is byte oriented. + + + + + Bad input + Buffer overflow + + In perl? + + + + + Program structure + Separate data and control + + 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. + + + + + Program structure + Minimize privileges + + 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 rc.sysinit, well past the moment + where the initial boot image hands over control to the newly + mount root file system. No yaird + support needed. + + + + + Program structure + Safe defaults + + Configuration only specifies sources of information, + like /etc/hotplug, not much can go wrong here. + + + + + Program structure + Safe configuration + + No configuration file is used yet, so it's not read from + current directory either. + + + + + Program structure + Fail safe + + Planning and writing the image is separated; + writing only starts after planning is succesfully completed. + Todo: consider backout on write failure. + + + + + Program structure + Avoid race conditions + + Temporary files and directories are created + with the File::Temp module, which is + resistant to name guessing attacks. + The completed image is installed with rename + rather than link; 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. + + + + + Underlying resources + Handle meta characters + + Protection against terminal escape sequences in output + is not yet in place. + + + + + Underlying resources + Check system call results + + Yes. + + + + + Language specific + Verify perl behaviour with taint. + + Yes. + + + + + Language specific + Avoid perl open magic with 3rd argument. + + Yes. + + + + + + + + +
    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 index 0000000..6c7c01a --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/shlibs.xml @@ -0,0 +1,201 @@ +
    + Supporting Shared Libraries + + + When an executable is added to the image, we want any required shared + libraries to be added automatically. The SharedLibraries + 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. + + + + Linux executables today are in ELF format; it is defined in + + + Generic ELF Specification ELFVERSION, + 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 + + + + 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 (fs/binfmt_elf.c), + 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. + + + + + + Executables are in ELF format, with a type of either + ET_EXEC (executable) or ET_DYN (shared + library; yes, you can execute those.) There are other types of + ELF file (core files for example) but you can't execute them. + + + + + + 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. + + + + + + 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. + + + + + + If it's dynamically linked, one of the program headers has type + PT_INTERP. 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. + + + + + + The kernel then transfers control to the userland + interpreter, passing program headers and related info in a + fourth argument to main(), after envp. + + + + + + There's one interesting twist: one of the segments loaded + into RAM (linux-gate.so) 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. + + + For more info on the kernel-supplied shared library for + system calls, see + + + LWN: How to speed up system calls, + + LWN: Patch: i386 vsyscall DSO implementation, + + LKML: common name for the kernel DSO. + + + + + + + + The interpreter interprets the .dynamic section of + the dynamic executable. This is a table containing various types + of info; if the type is DT_NEEDED, the info is the + name of a shared library that is needed to run the executable. + Normally, it's the basename. + + + + + + The interpreter searches LD_LIBARY_PATH 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. + + + + + + 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 PT_INTERP but will not load additional + libraries. + + + + + + The ldd command finds the pathnames + of shared libraries used by an executable. This works + only 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. + + + + Thus, to figure out what goes on the initial ram image, first try + ldd. If that gives an answer, good. + Otherwise, use a helper program to find PT_INTERP and + DT_NEEDED. If there's only PT_INTERP, good, + add it to the image. If there are DT_NEEDED libraries + as well, and they have relative rather than absolute pathnames, + we can't determine the full path, so don't generate an image. + + + + There are a number of options to build a helper to extract the relevant + information from the executable: + + + + Build it in perl. The problem here is that unpacking 64-bit + integers is an optional part of the language. + + + + + + Build a wrapper around objdump or + readelf. The drawback is that + there programs are not part of a minimal Linux distribution: + depending on them in yaird would + increase the footprint. + + + + + + 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. + + + + + + Building a C program based on elf.h. + This turns out to be easy to do. + + + + + + + + Yaird uses the last appraoch listed. + +
    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 index 0000000..2f8f9c8 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/spec.xml @@ -0,0 +1,311 @@ +
    + Goals, features, to do + + The purpose in life of a tool like Yaird + 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. + + + + 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. + + + + The goals + + 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 ... + + + of Yaird are as follows: + + + + + Be free, as in GPL. + + + + + + Be maintainable. Small functions with documented arguments + and result are better than a shell script full of constructs + like eval "awk | bash | tac 3>&7". + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + + + + + 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. + + 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. + + + + + + + + + + Requirements: + + + + + Linux 2.6.8 or later, both when running + yaird 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. + + + + + + Sysfs and procfs, both on the old and on the + new kernel. + + + + + + Perl and the HTML-Template module. + + + + + + + + To achieve these goals, the following features are implemented: + + + + + Templating system to tune the generated image to a + given distribution; templates for Debian and Fedora FC3 + included. + + + + + + Interprets /etc/fstab, including + details such as octal escapes, ignore and + noauto keywords, and — for ext3 and reiser + file systems — label and uuid detection. + Where applicable, options in /etc/fstab + are used in the generated image. + + + + + + Supports volume management via LVM2; activates only the volume + group required for the root file system. + + + + + + Supports software RAID via mdadm; activates only required + devices. + + + + + + Understands SATA, IDE devices. + + + + + + Generated image does not use hard coded device + numbers. + + Except where the distribution depends on it; + there are some issues with mdadm in Debian. + + + + + + + + Image generation understands how included executables may + depend on symbolic links and shared libraries. Shared libraries + work for both glibc and klibc. + + + + + + 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. + + + + + + Basic support for kernel command line as passed by the boot + loader. Interprets init=, ro, rw. + + + + + + Interprets the blacklist information from hotplug. + + + + + + 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. + + + + + + Supports initramfs, both in Debian and Fedora versions. + An example template using the older initrd model + is included for Debian. + + + + + + Does not require devfs in either the old or the new kernel. + + + + + + + + Obviously, this tool is far from complete. Here's a list of + features that still need to be implemented: + + + + + Understands USB and SCSI storage, no special provisions + are needed for code generation, but it's not tested yet. + + + + + + EVMS, an alternative user level interface to LVM2 and MD, + is not supported yet. + + + + + + Swsusp is not supported yet. + + + + + + Module aliases and options as specified in + /etc/modprobe.d are not supported yet. + + + + + + Firewire and DASD are not supported. + + + + + + NFS, loopback and encrypted file systems are not supported. + + + + + + Configuration info is hard coded in a module; it should be + possible to read this from a file. + + + + + + +
    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 index 0000000..236f818 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/tools.xml @@ -0,0 +1,229 @@ +
    + Tool Chain + + This section discusses which tools are used in implementing + yaird and why. + + + + 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: + + + + + + + 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, Obj, + that handles constructor argument validation and that offers + a place to plug in debugging code. + + + + + + Object attributes are used via accessor methods to catch + typos in attribute names. + + + + + + Objects have a string method, that returns + a string version of the object. Binary data is not + guaranteed to be absent from the string version. + + + + + + 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 all that returns a + list of all known items, and functions findByXxx + to retrieve an item where the Xxx attribute has a given + value. There is an init function that + initializes the collection; this is called automatically + upon first invocation of all or + findByXxx. + Collections may have convenience functions + findXxxByYyy: return attribute Xxx, given a + value for attribute Yyy. + + + + + + + + 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 + dash shell, for historical reasons only. + Presumably busybox 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, nash as used in Fedora + seems a more attractive option. + + + + 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. + + + + Autoconf + + 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. + + + + + C Library + + 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. + + + + 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 + + + LKML: [RFC] klibc requirements, round 2 + for requirements on klibc; the + + mailing list is the most current + source of information. + + + + Recent versions of klibc (1.0 and later) include a wrapper around + gcc, named klcc, that will compile a program with klibc. This means + yaird 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 every + executable on the initial image uses klibc. + + + + Yaird 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 + . + + + + + Template Processing + + 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 + dash in Debian and + ash in Fedora for example. + By processing the output of yaird + through a template, we can confine the tuning of + yaird for a specific distribution + to the template, without having to touch the core code. + + + + 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 StringTemplate + for a discussion of what is needed in a templating system, plus + a Java implementation. + + + + Lets consider a number of possible templating solutions: + + + + + + Template Toolkit: + widely used, not in perl core distribution, does not + prevent mixing of code and templates. + + + + + + + Text::Template: + not in perl core distribution, does not + prevent mixing of code and templates. + + + + + + Some XSLT processor. Not in core distribution, + more suitable for file-to-file transformations + than for expanding in-process data; overkill. + + + + + + + HTML-Template: + not in perl core distribution, + prevents mixing of code and templates, + simple, no dependencies, dual GPL/Artistic license. + Available in Debian as + libhtml-template-perl, + in Fedora 2 as perl-HTML-Template, dropped from Fedora 3, + but available via + + Fedora Extras. + + + + + + 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. + + + + + + + + The HTML-Template approach is the best match for our + requirements, so used in yaird. + + + + +
    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 index 0000000..d78437e --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/yaird.html @@ -0,0 +1,1581 @@ + + +Yaird — Yet Another Mkinitrd
    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 index 0000000..e274042 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/yaird.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + ] + +> + +
    + + + Yaird — Yet Another Mkinitrd + 2005-02-09 + + Erik + van Konijnenburg + ekonijn@xs4all.nl + + + + + This memo discusses the design goals and implementation of + Yaird (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 mkinitrd 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. + + + + + 2005 + Erik van Konijnenburg + + + + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation + License, 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 GNU Free Documentation License from + the Free Software Foundation by visiting their Web site or by writing to: + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + + + + + + +&INTRODUCTION; +&SPEC; +&CONCEPTS; +&KERNEL; +&RAID; +&INPUT; +&SHLIBS; +&SECURITY; +&TOOLS; +&AUTHORS; +&LICENSE; + +
    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 index 0000000..78b76da --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/doc/yaird.xml.in @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + ] + +> + +
    + + + Yaird — Yet Another Mkinitrd + 2005-02-09 + + Erik + van Konijnenburg + ekonijn@xs4all.nl + + + + + This memo discusses the design goals and implementation of + Yaird (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 mkinitrd 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. + + + + + 2005 + Erik van Konijnenburg + + + + + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation + License, 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 GNU Free Documentation License from + the Free Software Foundation by visiting their Web site or by writing to: + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + + + + + + +&INTRODUCTION; +&SPEC; +&CONCEPTS; +&KERNEL; +&RAID; +&INPUT; +&SHLIBS; +&SECURITY; +&TOOLS; +&AUTHORS; +&LICENSE; + +
    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 index 0000000..9efa851 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/exec/.deps/findlibs.Po @@ -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 index 0000000..48e6096 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/exec/.deps/run_init.Po @@ -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 index 0000000..9a98703 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/exec/Makefile @@ -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 index 0000000..3ae7b8d --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/exec/Makefile.am @@ -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 index 0000000..8ae7cb2 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/exec/Makefile.in @@ -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 index 0000000000000000000000000000000000000000..250227df6899edfd014cc32202e8f454c00e6ea2 GIT binary patch literal 17438 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 +#include +#include +#include +#include +#include +#include + +#include + +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 = §ionNames[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 = §ionNames[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 index 0000000000000000000000000000000000000000..14a3af9020355d9054e6acec1b539150e7bd11e4 GIT binary patch literal 11445 zcmcgydvsgHnV+jG%Zja&$g%SvF>t{NacCmP!Ql~JdB+ArOl*fh2p3tpvXsb@&?Ap7 zkAP!{aRTAhQp#zeWhsZ!Q_3!oEo=!SP~h~iIc!_nWw+bX(kdq@g_e^-p=f`Vc(r}YMNU8@Wkw@Jm8BkV$a%oJWv}7w1ZeL z`94HDA-@wm(ks9u@>vI|8S>4jn`8l#H1D!^igCct1YN!*o$6~z$LFV0nbNjMAsbn! z%A#s%`|3-3Wm(!mqTO|%scssPm;{;(ss^!K2s8zxLyeoDO)Sg)X#fR5e=V?1_Oa}b zal%^fMC79j!~~a*?)pqP=;mCDn6_Tz;>9k$%*Cg;c#(_0<>Fl~KGVh95kLHZKd9O? zP3&;_>tP7>CtR%M(=J|)nEWfo@mUYU??B{VK!Bj_dtO0t9b)po*YxZvV;7qgy6 zJ@$PCxcxS5@5JNt68RR$20iYP_l_U=5fFoJkFYP=Vy|`jQ-z|FU!IN@3Qj@TcK<*& zV;73ie9^WArdEto>P!(!=Cj$NC=~NfKA+8tcqz9~WOI<~M`pB`D2PNZpUM;y5RIqu z(1EJ9u^?igOx8|kW6@$Nn?aEjay!<*ig+qxmkLfC zLNvv-Yap7+K);g_v2?cJh}E4P%a+>+JVHFu;!E9rU ziGCep)VPB&_XoyUc)Q&E-Hfp?_A zC1#6~?DWGsBxcK!XA|cnW($)`h_8{DElsu)cS+0^C%cH3NX(We*Ap+0m_3lZhS-vr zJ&|OC4u>UXk0f)%0=V_JR}cSU@K^73^{h?q9|k9lpUc)In{V|8%Qr&cgS~svcim+a z5F2hfP>l_6?a1IK;0*0A`YMOkZ+P{hHmzOMVGqt_v4WMc@uGGdODf`doH&#yA3@$j03x zm+Tsmq9gatLxJI+wf?yEl?g9T+IbF@54{4Z%esBp3m%HKF@Q3GcI3zQG*n$Xm{neiTljs`dRE-(KXyx{}1%)J_zdLv^wBc&o zT_@0~6%Ik6tLs_nn)@Ntpu#=5%8{zQm4;_79sIOX`eT_-F0DhYpS92OP3s~49I4^@ zJmRk$8ZkLvKj1Rp{$Z(5t5{ONB*t7T-Fs%#|b1{g7?_F^G)xQ6M zq!IKDFss^kSY`e%GXuUEK)xyyZ?3{$<@+I&1*?4A@9`2h4I=(?*HL~af6m*;-;W^U z-<4(Zs}vZX&E&;Q-X@b@B_82>zyB=C?vc5lC%#=KZ5ZOeYTIOTn?&Gr#8um+%}st$>#u2m z;@2Q@Pjw`89~1>c2JM4v=xfwaXLQJ-{?G-`bav=J$UV)4=Y<@WZ8n~h?OhUjliYd684|7tokyGJ8%rfz z72>8Bj2J1Yd3ES1au*ugC2S9+$UWD1T?%)G=8(J8;5hi2dO{JxWiDJF+C-~XxMo}x z`Yr2SW!xxLU4x;Vfm990bK)$jeWHe~`yy~C_;jF;g`ZLF6@eqvyiYaPANUT%pHt%( zgrd_>Zi4?Nl&GemR4FGOb5BM_^&Q^aGepg8ej#Qx4>48frxnQqEje#48T2&2JfSqJ6 zR5dgQx>&AF4b8m3#VBE(&C$dl2R?aA-)YIO9C?j=Rzbf(_IIFDaZ{pD&!BmO?1*3vbtd4 z7NV0C3I%dRmO|mci>M%Q$^}xgA<#{9szTEPi-=C=!PD2&82AS3`<$v_R=^-{oS#3t@Aa_6V*$RAWM#;Urcg<<0(fNml)hQKLr`R;ekTGFgm%mjc!r*B`7q$V+b6f zc#JZ7C+|V889T_{C#NB^x%V2q^$Ss-@eHdl*41y9KuUKv# z=nV~UK#X!h7Q@=qw_Y+Kc zg2@+{H1FJb{gh=Cdy#gSckZ};S`QL;gC2+3`$5wm0XX4F{1{zgTHfUz1m~^s+!-u4 zVHX^9pfTmJCb-qje4c8!2z&#E>>RUk8?5oA4Vu&V8cac&QYgXRIFau~)wgpI8perF z6Wrl~^~kH<>w*q|3Fop7h*?lMp+k0wF(t{?UPSd(CJ%MOs58QW$@rZ;vA))vICCQE zoF&YOwY3-E1rC)VIsIlNhHaa03K10!VD;G&p8D*nHq4A!h}#> zIh9LKT2^JlkEWB#E2pwC2YlQH%pVBj+IhY?Ve@VAOgy;mxo6Cpm|6JTrVV>C>KJgpoA8uG}&gnHb^dfh}2>v3@%s<@_>@}@kv!mCX(Hs1c zSrfe0cUrx#Ic$b{&8@w`lX{%T9(ds9;5_rPm&}%4^QvBRRmUJY7oQ2P?VR zBhwQJi}PF_x36XBL0!IMu<927t!5z-_FW$l#Yi|75m!XQH$<%Uk+2gH7lUzmgq>@{ zSvkNs#@H?-v-x6QDIsJ6=R@Vfgi~{~t&(8c4m_d>o5LkIqCBKgMPGVzA@zBONu23~ zK115sbllD+5(Nhu2BP`RPM#jx3_Sf(sa>+KEk)zhZzl>VnMkCg&}n1BWRah+GdSd> z;VHFqSymO#mXtKAjAe?lC?|@vobFZ>EoJC(Z4>D%4yy8}lqsb8GdR1jS<+rK3$?&U z+ZT;(F69ux51X+2WHW3YDl=I~!o6GEVrL3YOrWhXC?Cki9k)YpaE+^iP}!e?lb1f< z=oUwIlbvz4$;w!Qs-s(?sWjDWp$U0*6mk=J#}OC-r;tM>)Sx;_CS?t|VqRK;$4bI3 zZET#p68__gD&>X91xBNjN#E=s#?|2xsqk%z%LS`!yQXT;ioTfa?mQ(SE@hN zEEFxt?10mPiJ57^Oem$JEt}zxD8xz*K1<V~IH^;x*2(8Y z1kN2NvUFL;{9?3UM3T`$Qbgk0GbpHH%+g4IrWApfsKBovUSNZlchZzsiCnrUB63V4 zMJ|&Fyi+N#vhip!Dk4tOPGHtJB0`5x0TrldQw)lrBs!3ap#pr*;ZHs z2H-J*sMA;Kx1;%JrXMrKg}G86HXfP{cqJK$N4SEbYo^eT;dGNrSZ9ZpiHhgAO%FZpiwzIryHR-q?Ncbh{R1EIXV)X`R+xA8+4Id zfvJz}T>-fjkmK974qEOGWN5iGyxnOuQu8RQ)BFHSIgTAY$^3{v>dEuSJ&3fH+XlI9 ze?g9CF)hcBK0E$Gy^lkVeaw30r2xpif;794f%egkr$Aa?C*JKl@m8sA2TP`jzw42s zL$wQX?G$hWWk?4=THk$;yAN{s9}QaftH@#fw2xn*9)=K|vpQ%wx-6(q2g+UP$8}gie!p89dLoc`|e| zJWlSdsY39qrGrj3j+2{(7tDLK5Mtdgb6vRwE^i;?CTb?~sEXp! z4xcg(pDO3-61Ts7*fCTODKWozzd{Rie;SyHrvvN$G$4I8uKzll()#^tEv2)83y@*ga#C|1&`SVW|#pD!(Bg;aU(sW_?J2z;i2c z4I0k*N_}-=qNrm>Ae;gspP%)0|Au|FiIxTqtVwo%-5(!tH zdj<8~46N7JWKkn{p62{i^-mM`yYl)X)VIc!rwdoFzsYFtOD=!8tN+b$@?~JJ{T~DK zZpK>IzFKTCdVPe^-~8&L&*jwLsJ5Wdi&f_Ud-Yx9@^yb+39Q$jh56+G>-~Z4-8`;5 zKQS;|2V(!+;bMI;iywKs_VEjqUhj4IocSE^KDYmA{|j#Uc30mUz+QXb0p@KB-QRx% zZug9T09&lKKMecpJ$twXopXS_`pyUD9SyB-%{ck1U986+AGFhH&pj^@%NGm9QX&Bd zlWi~WS+mye?C9>n^)K6AF$P_bniFJ$dxG!w_I0r!Sl ztWc6gfyZ8J8&gmo-PAp}G5P9BoHt9}pYvv@J8cvHnF?u~q2{T*W2k{F0ALoWW;s5{u literal 0 HcmV?d00001 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 index 0000000..dbb92c5 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/exec/run_init.c @@ -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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + + +/* 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 index 0000000..978c3cf --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/include/config.h @@ -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 index 0000000..88f063d --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/include/config.h.in @@ -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 index 0000000..b330768 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/include/stamp-h1 @@ -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 index 0000000..1a83534 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/install-sh @@ -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 index 0000000..09edd88 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/missing @@ -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 , 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 ." + 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 index 0000000..e63e689 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/ActionList.pm @@ -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 index 0000000..102f2c9 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/ActiveBlockDev.pm @@ -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 index 0000000..9168ee6 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/ActiveBlockDevTab.pm @@ -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 index 0000000..f8aa4c0 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/Base.pm @@ -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 = ; + if (! defined ($line)) { + Base::fatal ("empty file $filename"); + } + chomp $line; + if (defined ()) { + 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 index 0000000..9da5377 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/Blacklist.pm @@ -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 = )) { + 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 index 0000000..2bda007 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/BlockSpecialFile.pm @@ -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 index 0000000..f10cc4c --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/BlockSpecialFileTab.pm @@ -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 index 0000000..9e79201 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/Conf.pm @@ -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 index 0000000..fbe5281 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/Conf.pm.in @@ -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 index 0000000..8d8a43f --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/FsEntry.pm @@ -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 index 0000000..b40fb0e --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/FsOpts.pm @@ -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 index 0000000..257551b --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/FsTab.pm @@ -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 = )) { + $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 index 0000000..adb0551 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/Hardware.pm @@ -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 index 0000000..7a4cf91 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/IdeDev.pm @@ -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 index 0000000..c14a794 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/Image.pm @@ -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 index 0000000..20308ec --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/Input.pm @@ -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 index 0000000..78c2031 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/InputTab.pm @@ -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 = )) { + 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 index 0000000..ec740e3 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/KConfig.pm @@ -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 = )) { + 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 index 0000000..8c9d8a5 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/LabeledPartition.pm @@ -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 index 0000000..9a2bfd8 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/LabeledPartitionTab.pm @@ -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 index 0000000..eaf069b --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/LogicalVolume.pm @@ -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 index 0000000..8346313 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/LvmTab.pm @@ -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 = )) { + 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 = )) { + 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 = )) { + 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 index 0000000..e5d13b3 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/Makefile @@ -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 index 0000000..cbf2e22 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/Makefile.am @@ -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 index 0000000..c424a17 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/Makefile.in @@ -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 index 0000000..bb9b377 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/ModDep.pm @@ -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 index 0000000..10615e1 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/ModDepTab.pm @@ -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 = )) { + $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 index 0000000..5e6c5bd --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/Obj.pm @@ -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 index 0000000..bcf066b --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/Pack.pm @@ -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 index 0000000..28238c6 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/PciDev.pm @@ -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 index 0000000..1dad7d6 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/PciMapEntry.pm @@ -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 index 0000000..241f76c --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/PciTab.pm @@ -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 = )) { + 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 index 0000000..4d8fc4f --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/PhysicalVolume.pm @@ -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 index 0000000..7f7d304 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/Plan.pm @@ -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 index 0000000..fc1eea2 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/RaidDev.pm @@ -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 index 0000000..2c8e6ad --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/RaidTab.pm @@ -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 index 0000000..f771bc0 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/ScsiDev.pm @@ -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 index 0000000..4288895 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/SharedLibraries.pm @@ -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 index 0000000..c61e91a --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/TestSet.pm @@ -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 index 0000000..132494b --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/UsbDev.pm @@ -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 index 0000000..ea2e134 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/UsbMapEntry.pm @@ -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 index 0000000..92407cb --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/UsbTab.pm @@ -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 = )) { + 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 index 0000000..92c5d52 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/VolumeGroup.pm @@ -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 index 0000000..8f1333a --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/main.pl @@ -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 index 0000000..065a2b1 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/perl/yaird @@ -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 index 0000000..85a094f --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/templates/Debian.pm @@ -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 . + # + 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 => [ + '', + '/sbin/insmod', + ], + directories => [], + trees => [], + scripts => { + '/init' => <<'//', + /sbin/insmod '' +// + }, + + }, + + mkbdev => { + files => [], + directories => [], + trees => [], + scripts => { + '/init' => <<'//', + mkbdev '' '' +// + }, + }, + + 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 '' + /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 b + mdadm --assemble --uuid \ + +// + } + }, + + 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 \ + $ro \ + -t \ + \ + \ + +// + } + }, + + postlude => { + files => [ + '/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 /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 index 0000000..d1641dd --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/templates/Fedora.pm @@ -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 . + # + 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 => [ + '', + '/sbin/insmod', + ], + directories => [], + trees => [], + scripts => { + '/init' => <<'//', + /sbin/insmod '' +// + }, + + }, + + mkbdev => { + files => [], + directories => [], + trees => [], + scripts => { + '/init' => <<'//', + mkbdev '' '' +// + }, + }, + + 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 '' + /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 b + mdadm --assemble --uuid \ + +// + } + }, + + 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 \ + $ro \ + -t \ + \ + \ + +// + } + }, + + postlude => { + files => [ + '/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 /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 index 0000000..61d09d3 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/templates/Makefile @@ -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 index 0000000..e6bb347 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/templates/Makefile.am @@ -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 index 0000000..a86a794 --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/templates/Makefile.in @@ -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 index 0000000..d1641dd --- /dev/null +++ b/rescue/linux/cdrom/yaird-0.0.5/templates/Template.pm @@ -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 . + # + 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 => [ + '', + '/sbin/insmod', + ], + directories => [], + trees => [], + scripts => { + '/init' => <<'//', + /sbin/insmod '' +// + }, + + }, + + mkbdev => { + files => [], + directories => [], + trees => [], + scripts => { + '/init' => <<'//', + mkbdev '' '' +// + }, + }, + + 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 '' + /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 b + mdadm --assemble --uuid \ + +// + } + }, + + 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 \ + $ro \ + -t \ + \ + \ + +// + } + }, + + postlude => { + files => [ + '/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 /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 index 0000000..ee40e78 --- /dev/null +++ b/rescue/linux/floppy/.cvsignore @@ -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 index 0000000..ed51354 --- /dev/null +++ b/rescue/linux/floppy/Makefile.in @@ -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 index 0000000..43855e6 --- /dev/null +++ b/rescue/linux/floppy/backup.etc.list @@ -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 index 0000000..39e43be --- /dev/null +++ b/rescue/linux/floppy/format_floppy @@ -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 index 0000000..61785bb --- /dev/null +++ b/rescue/linux/floppy/getdiskinfo @@ -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 <$cwd/format.$j <>$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 <mount_drives </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/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 index 0000000..3ea2688 --- /dev/null +++ b/rescue/linux/floppy/make_rescue_disk @@ -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 <&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 index 0000000..ea2239e --- /dev/null +++ b/rescue/linux/floppy/restore_etc @@ -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 index 0000000..b00c796 --- /dev/null +++ b/rescue/linux/floppy/run_grub @@ -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 index 0000000..7151a14 --- /dev/null +++ b/rescue/linux/floppy/run_lilo @@ -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 index 0000000000000000000000000000000000000000..3e269c31b9e33ff7917181a7af94f2fafce10349 GIT binary patch literal 18656 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 wev+-_M(oUe&H_H*N69NYAdx_UOv(calj?g- +# +# 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 - Created. +# 2.0 15-Aug-96 David J. Young - 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 - 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 - Modified. +# Added/modified code to complete the HPUX section. +# Added Modification History and Description. +# +# 3.2 12-Sep-96 David E. Nelson - 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 - Modified. +# Added support for Solaris 2.5.1 +# 3.4 09-Jan-97 David J. Young - 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="" + DEVSWAP=$SWAPFILE + FILESWAP=$SWAPFILE + SWAPSPACE=$SWAPFILE + fi + MACADDR=`lanscan | grep x | awk '{print $2}'` + KERNEL="" + HOSTID=`uname -i` + MODEL=`model` + MEMORY=`dmesg | grep Phys | awk '{print $2}'`K + if [ $MEMORY = 'K' ]; then + if [ $NOTROOT -eq "1" ]; then + MEMORY="" + 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="" + 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='' +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="" + 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="" +if [ -d /var/sadm/sa ]; then + logs=`find /var/sadm/sa -mtime -1 -print | wc | awk '{print $1}'` + if [ "$logs" -gt "0" ]; then + SARSTAT="" + fi +fi +VXSTAT="" +PSOUT=`$PSCMD | grep vxconfigd | grep -v grep | wc | awk '{print $1}'` +if [ "$PSOUT" -gt "0" ]; then + VXSTAT="" +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 index 0000000..43855e6 --- /dev/null +++ b/rescue/solaris/backup.etc.list @@ -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 index 0000000..b0bed57 --- /dev/null +++ b/rescue/solaris/getdiskinfo @@ -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 <&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 -- 2.39.5

    Yaird — Yet Another Mkinitrd

    Erik van Konijnenburg

    + Permission is granted to copy, distribute and/or modify this + document under the terms of the GNU Free Documentation + License, 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 GNU Free Documentation License from + the Free Software Foundation by visiting their Web site or by writing to: + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +

    2005-02-09

    Abstract

    + This memo discusses the design goals and implementation of + Yaird (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 mkinitrd 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. +


    Introduction

    + Yaird (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. +

    + It differs from earlier mkinitrd + 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. +

    + This document gives an overview of the design and implementation + of Yaird; see the README file for + usage information. This text assumes familiarity with Linux + system administration and the basics of hotplug and sysfs. +

    + This document describes version 0.0.5 + of Yaird. + This is a very rough, proof of concept, version. +

    Goals, features, to do

    + The purpose in life of a tool like Yaird + 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. +

    + 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. +

    + The goals[1] + of Yaird are as follows: +

    • + Be free, as in GPL. +

    • + Be maintainable. Small functions with documented arguments + and result are better than a shell script full of constructs + like eval "awk | bash | tac 3>&7". +

    • + 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. +

    • + 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. +

    • + 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. +

    • + 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. +

    • + 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. +

    • + 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.[2] +

    +

    + Requirements: +

    • + Linux 2.6.8 or later, both when running + yaird 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. +

    • + Sysfs and procfs, both on the old and on the + new kernel. +

    • + Perl and the HTML-Template module. +

    +

    + To achieve these goals, the following features are implemented: +

    • + Templating system to tune the generated image to a + given distribution; templates for Debian and Fedora FC3 + included. +

    • + Interprets /etc/fstab, including + details such as octal escapes, ignore and + noauto keywords, and — for ext3 and reiser + file systems — label and uuid detection. + Where applicable, options in /etc/fstab + are used in the generated image. +

    • + Supports volume management via LVM2; activates only the volume + group required for the root file system. +

    • + Supports software RAID via mdadm; activates only required + devices. +

    • + Understands SATA, IDE devices. +

    • + Generated image does not use hard coded device + numbers.[3] +

    • + Image generation understands how included executables may + depend on symbolic links and shared libraries. Shared libraries + work for both glibc and klibc. +

    • + 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. +

    • + Basic support for kernel command line as passed by the boot + loader. Interprets init=, ro, rw. +

    • + Interprets the blacklist information from hotplug. +

    • + 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. +

    • + Supports initramfs, both in Debian and Fedora versions. + An example template using the older initrd model + is included for Debian. +

    • + Does not require devfs in either the old or the new kernel. +

    +

    + Obviously, this tool is far from complete. Here's a list of + features that still need to be implemented: +

    • + Understands USB and SCSI storage, no special provisions + are needed for code generation, but it's not tested yet. +

    • + EVMS, an alternative user level interface to LVM2 and MD, + is not supported yet. +

    • + Swsusp is not supported yet. +

    • + Module aliases and options as specified in + /etc/modprobe.d are not supported yet. +

    • + Firewire and DASD are not supported. +

    • + NFS, loopback and encrypted file systems are not supported. +

    • + Configuration info is hard coded in a module; it should be + possible to read this from a file. +

    +

    Concepts

    + This section discusses the basic concepts underlying + yaird. +

    + The basic operation is simple: +

    1. + make a plan to build an image, +

    2. + transform the plan to a detailed description of the image, +

    3. + build and pack the image. +

    + +

    + 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 + mknod executable or the shared libraries + needed to run that executable. +

    Making the Plan

    + 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. +

    + To refine the goal of loading a kernel module, + the ModDepTab module interprets + modules.dep 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 /lib/modules + directory. +

    + The KConfig 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 + ext3 is not needed if the new kernel configuration + contains CONFIG_EXT3_FS=y.[4] + Only a few modules are known: yaird + looks for modules such as ext3 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 modules.pcimap + and friends, so they remain completely outside the view of + yaird. +

    + Module aliases and options as supported by + modprobe are unsupported for the moment. +

    + Before a device as listed in /etc/fstab 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: +

    1. + Scanning the /dev directory gives us the + relation between all block special files and major/minor + numbers. +

    2. + Scanning the /sys/block directory gives us the + relation between all major/minor numbers and kernel names + such as dm-0 or sda1; it + also gives the relation between partitions and complete + devices. +

    3. + If there is a symlink in a /sys/block + subdirectory to the /sys/devices + directory, it also gives is the relation between a block + device and the underlying hardware. +

    +

    + 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 sda1, we need to activate sda, + then create a block special file for sda1. As + another example, to activate dm-0, our first bet is + to check whether this is an LVM logical + volume,[5] and if so activate the + physical volumes underlying the volume group, and finally running + vgchange -a y. +

    Hardware Planning

    + Some devices, such as sdx or hdy, are + expected to have underlying hardware; as an example, sda + may be backed by pci0000:00/0000:00:1f.2/host0/0:0:0:0. + 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 /sys/devices 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. +

    + Finding modules closely follows the methods used in the + hotplug package, and the + hotplug 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. +

    + 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 ScsiDev module knows that a SCSI device + with a type file containing "5" is a CDROM, + and that sr-mod is the appropriate driver. +

    + 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 modules.pcimap. Based on this table, + we find a driver module needed for the device and mark it for + inclusion on the image. +

    + Multiple modules can match the same hardware: as an example, + usb-storage and ub 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 + usb-core, 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 Blacklist module, + based on information in + /etc/hotplug/blacklist and + /etc/hotplug/blacklist.d. +

    + 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". +

    + 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. +

    Plan Transformation

    + 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. +

    + The module ActionList 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. +

    + This plan is transformed to an exact image description with + the help of templates. The module Template + contains a hash with for every type of action: +

    • + a list of files to be copied from the mother system to the + image; +

    • + a list of directories to be created on the image; these do + not have to exist on the mother system; +

    • + a list of trees to be copied recursively from the mother + system to the image; +

    • + a hash, with as key the name of a script to be appended to + and as value that which is to be appended. +

    + All of the above are fed through HTML-Template, with the hash + describing this step as parameters. In practice, this looks + like so: +

    +          insmod => {
    +              files => [
    +                  '<TMPL_VAR NAME=target>',
    +                  '/sbin/insmod',
    +                  ],
    +              directories => [],
    +              trees => [],
    +              scripts => {
    +                  '/init' => <<'//',
    +                      /sbin/insmod '<TMPL_VAR NAME=target>'
    +//
    +              },
    +          },
    +      

    +

    + There are a few attributes that are available to every template: +

    + version +

    + The kernel version we're generating an image for. + Useful if you want your image to include a complete copy + of /lib/modules/(version)/kernel. +

    + appVersion +

    + The version of yaird used to + build the image. +

    + auxDir +

    + The directory where yaird + keeps executables intended to go on the image, such as + run_init. +

    +

    + Currently, there are templates for Debian and for Fedora, plus + a template showing how to use the older initrd approach. +

    Image Generation

    + 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,[6] and everything is owned by root. +

    + The Image module contains the image description and + can write the image to a directory. It understands about symlinks: + if /sbin/vgscan is added to the image and it + happens to be a symlink to lvmiopversion, both + vgscan and lvmiopversion + will be added to the image. Shared libraries are supported + via the SharedLibraries module, as discussed in + the section called “Supporting Shared Libraries”. Invocations of other executables are not + recognised automatically: if lvmiopversion executes + /etc/lvm-200/vgscan, the latter needs to be + added explicitly to the image. +

    + 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: + yaird refuses to copy dangling links. +

    Packing the Image

    + The final step is packing the image in a format that the + bootloader can process; this is handled by the module + Pack. The following formats are supported: +

    + cpio +

    + A zipped cpio file (new ASCII format), required for the + initramfs model as used in the templates for Debian and + Fedora. +

    + directory +

    + An unpacked directory, good for debugging or manually + creating odd formats. +

    + cramfs +

    + A cramfs filesystem, used for Debian initrd images. +

    +

    The interface between kernel and image

    + The initial boot image is supposed to load enough modules to let + the real root device be mounted cleanly. It starts up in a + very 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. +

    + 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: + initrd_start and initrd_end; these variables + point to the copy of the image in ram. The bootloader now + hands over control to the kernel. +

    + 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. +

    + In initramfs.c:populate_rootfs(), there are two + possibilities. If the image looks like a cpio.gz file, it is + unpacked into rootfs. If the file /init 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 the section called “Booting with initrd”. +

    Booting with Initramfs

    + If the image was a cpio file, and it contains a file + /init, the initram model is used. + The kernel does some basic setup and hands over control to + /init; it is then up to + /init to make a real root available and to + transfer control to the /sbin/init command + on the real root. +

    + 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; yaird uses + run_init, a small tool based on + klibc. +

    +	# 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 "$@"
    +      

    +

    Booting with initrd

    + If the image was not a cpio file, the kernel copies the + initrd image from where ever the boot loader left it to + rootfs:/initrd.image, and frees the ram used + by the bootloader for the initrd image. +

    + After reading initrd, the kernel does more setup to the point where + we have: +

    • + working CPU and memory management +

    • + working process management +

    • + compiled in drivers activated +

    • + 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 pivot_root() system call is used.) +

    • + something like a console. Console_init() is + called before PCI or USB probes, so expect only compiled in + console devices to work. +

    +

    + At this point, in do_mounts.c:prepare_namespace(), + 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) + +

    +      - mount -t devfs devfs /dev
    +      - md_run_setup()
    +      - process initrd
    +      - umount /dev
    +      - mount --move . /
    +      - chroot .
    +      - mount -t devfs devfs /dev
    +      

    + +

    + Once that returns, in init/main.c:init(), + initialisation memory is freed and /sbin/init + is executed with /dev/console as file descriptor 0, 1 + and 2. /sbin/init can be overruled with + an init=/usr/bin/firefox parameter passed to the + boot loader; if /sbin/init is not found, + /etc/init and a number of other fallbacks + are tried. We're in business. +

    + The processing of initrd starts in + do_mounts_initrd.c:initrd_load(). It creates + rootfs:/dev/ram, then copies + rootfs:/initrd.image there and unlinks + rootfs:/initrd.image. Now we have the initrd + image in a block device, which is good for mounting. It calls + handle_initrd(), which does: + +

    +      # 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 ...
    +      

    + +

    + So initrd:/linuxrc 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). +

    + Now the idea seems to have been that /linuxrc + would mount the real root and pivot_root into it, then start + /sbin/init. Thus, linuxrc would never return. + However, main.c:init() does some usefull stuff only + after linuxrc returns: freeing init memory segments and starting numa + policy, so in eg Debian and Fedora, /linuxrc + will end, and /sbin/init + is started by main.c:init(). +

    + After linuxrc returns, the variable real_root_dev + determines what happens. This variable can be read and written + via /proc/sys/kernel/real-root-dev. If it + is 0x0100 (the device number of /dev/ram0) + or something equivalent, handle_initrd() will change + directory to /old and return. If it is + something else, handle_initrd() will decode it, mount + it as root, mount initrd as /root/initrd, + and again start /sbin/init. (if mounting as + /root/initrd fails, the block device is freed.) +

    + Remember handle_initrd() was called via + load_initrd() from prepare_namespace(), + and prepare_namespace() ends by chrooting into the + current directory: rootfs:/old. +

    + Note that rootfs:/old was move-mounted + from '/' after /linuxrc returned. + When /linuxrc started, the root was + initrd, but /linuxrc may have done a + pivot_root(), replacing the root with a real root, + say /dev/hda1. +

    + Thus: +

    • + /linuxrc is started with initrd + mounted as root. +

    • + 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. +

    • + Devfs may be mounted on /dev. +

    • + /linuxrc can pivot_root. +

    • + If you echo 0x0100 to + /proc/sys/kernel/real-root-dev, + the pivot_root will remain in effect after + /linuxrc ends. +

    • + After /linuxrc returns, + /dev may be unmounted and replaced + with devfs. +

    +

    + Thus a good strategy for /linuxrc is to + do as little as possible, and defer the real initialisation + to /sbin/init on the initrd; this + /sbin/init can then pivot_root + into the real root device. +

    +	#!/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
    +      

    +

    Kernel command line parameters

    + 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 /proc/cmdline. +

    + An old version of these parameters is documented in the + bootparam(7) manual page; more recent information is in the kernel + documentation file kernel-parameters.txt. + Mostly, these parameters are used to configure non-modular drivers, + and thus not very interesting to yaird. + Then there are parameters such as noapic, which are + interpreted by the kernel core and also irrelevant to + yaird. + Finally there are a few parameters which are used by the kernel + to determine how to mount the root file system. +

    + 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. +

    + ide +

    + 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 + /etc/modprobe.conf. + Unsupported for now. +

    + init +

    + The first program to be started on the definitive root device, + default /sbin/init. Supported. +

    + ro +

    + Mount the definitive root device read only, + so that it can be submitted to fsck. + Supported; this is the default behaviour. +

    + rw +

    + Three guesses. Supported. +

    + resume, noresume +

    + Which device (not) to use for software suspend. + To be done. +

    + root +

    + 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 + yaird 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. +

    + rootflags +

    + Flags to use while mounting root file system. + Implement together with root option. +

    + rootfstype +

    + File system type for root file system. + Implement together with root option. +

    + nfsaddrs +

    + 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. +

    + nfsroot +

    + More diskless booting. + Unsupported for now. +

    + +

    Supporting Raid Devices

    + 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? +

    + 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. +

    + 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. +

    + 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. +

    + 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: /dev/md\d. + 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. +

    + Finally, by picking a different major device number for the raid device, + the raid device can be made partitionable without use of LVM. +

    + 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: +

    +

    • + There's an option to create a new device from components, + building the superblock. +

    • + Another option assembles a raid device from components, + assuming the superblocks are already available. +

    • + 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. +

    • + 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 mdadm --assemble /dev/md-root + auto=md uuid=..., which translates to "create + /dev/md-root with some unused minor number, + and put the components with matching uuid in it." +

    +

    + 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: +

    +

    • + When the md module is loaded, it registers 256 block devices + with devfs. These devices + are not actually allocated, they're just names set up to + allocate the underlying device when opened. These names in + devfs have no counterpart in sysfs. +

    • + When the LVM vgchange 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. +

    • + When udevstart is executed + at boot time, it walks over the sysfs tree and lets + udev 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. +

    • + When mdadm 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 + mdadm command, permissions are 0600 + and there are no hooks for SELinux. +

    • + When the Debian installer builds a system with LVM and raid, the + raid volumes have names such as /dev/md0, + where there is an assumption about the device minor number in + the name of the file. +

    +

    + 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 udevstart triggers + udev into creating block device files with proper permissions and + SELinux hooks. Later in the processing of rcS.d, + mdadm 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. +

    + In yaird, we do not use devfs. + Instead, we do a mknod before the + mdadm, taking care to use the same + device number that's in use in the running kernel. We expect + mdadm.conf to contain an auto=md + option for any raid device files that need to be created. + This approach should work regardless of whether the fstab uses + /dev/md\d or a device number independent name. +

    Supporting Input Devices

    + 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. +

    + The console is a designated terminal, where kernel output goes, and that + is the initial I/O device for /sbin/init. Like all + terminal devices, it provides a number of functions: you can read + and write to it, plus it has a number of ioctl() + functions to manage line buffering, interrupt characters and + baudrate or parity where applicable. +

    + 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. +

    + 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. +

    + 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". +

    + 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 /dev/input/event0 + 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 + modules.inputmap 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. +

    + To guarantee a working console, yaird + should examine /dev/console, 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, /dev/console 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. +

    + 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. +

    + Lets examine the sources of information we have to find which input + hardware we have to support. +

    • + In /sys/class/input, all input devices + are enumerated. Mostly, these only contain a + dev file containing major/minor number, + but USB devices also have a device + symlink into /sys/devices identifying + the underlying hardware. +

    • + In /boot/menu/grub.lst, 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. +

    • + The file /proc/bus/input/devices gives + a formatted overview of all known input devices; entries look + like this: +

      +	    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
      +	  

      + 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 + /sys/devices. + The H (Handlers) line is obvious; The B lines specify + capabilities of the device, plus extra information for each + capability. Known capabilities include: +

      CapabilityDescription
      SYNInput event is completed
      KEYKey press/release event
      RELRelative measure, as in mouse movement
      ABSAbsolute position, as in graphics + tablet
      MSCMiscelanious
      SNDBeep
      REPSet hardware repeat
      FFDon't know
      PWRPower event: on/off switch pressed.
      FF_STATUSDon't know.

      +

    +

    + 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: +

    DefineModuleDescription
    VT(bool) + Support multiple virtual terminals, irrespective of what + hardware is used to display letters from the virtual + terminal on the CRT. +
    VT_CONSOLE(bool) + Make the VT a candidate for console output. The alternative + is a serial line to a VT100 or terminal emulator +
    VGA_CONSOLE(bool) + Display a terminal on CRT using the VGA interface. +
    FRAMEBUFFER_CONSOLEfbcon + Display a terminal on a framebuffer, painting letters a + pixel at a time. This has to know about fonts. +
    FB_VESAvesafb + 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. +
    ATKBDatkbd + Interpret input from a standard AT or PS/2 keyboard. + Other keyboards use other byte codes, see for example + the Acorn keyboard (rpckbd). +
    SERIOserio + 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. +
    SERIO_I8042i8042 + 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. +
    SERIAL_8250serial + 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. +
    USB_HIDusbhid + Driver for USB keyboards and mice. + Another define, USB_HIDINPUT, needs to be true for + these devices to actually work. +
    USB_KBDusbkbd + Severely limited form of USB keyboard; uses the "boot + protocol". This conflicts with the complete driver. +

    +

    + The following figure gives an example of how the various modules + can fit together. +

    Figure 1.  + Module relation for common console setup +

    Module relation for common console setup

    + 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. + +

    1. + Interpret /proc/bus/input/devices. +

    2. + Look for devices that have handler kbd and + that have buttons. Mice and the PC speaker don't match that + criterium, keyboards do. +

    3. + You could interpret the name field of such devices if you're + interested in supporting legacy keyboards. +

    4. + 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/. +

    5. + 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). +

    6. + Don't bother with a mknod, the input is handled via + /dev/console. +

    7. + Otherwise it's presumable a legacy device; you could check for + the existence of + /sys/devices/platform/i8042/serio\d/, + or you could just assume the appropriate driver to be compiled in. +

    8. + Implement support for + /etc/hotplug/blacklist, + since some USB keyboards publish two interfaces (full HID + and the limited boot protocol), the input layer makes both + visible in /proc/bus/input/devices and + the corresponding modules are mutually conflicting. + The blacklist is used to filter out one of these modules. +

    +

    Supporting Shared Libraries

    + When an executable is added to the image, we want any required shared + libraries to be added automatically. The SharedLibraries + 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. +

    + Linux executables today are in ELF format; it is defined in + + + Generic ELF Specification ELFVERSION, + 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 +

    + 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 (fs/binfmt_elf.c), + 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. +

    • + Executables are in ELF format, with a type of either + ET_EXEC (executable) or ET_DYN (shared + library; yes, you can execute those.) There are other types of + ELF file (core files for example) but you can't execute them. +

    • + 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. +

    • + 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. +

    • + If it's dynamically linked, one of the program headers has type + PT_INTERP. 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. +

    • + The kernel then transfers control to the userland + interpreter, passing program headers and related info in a + fourth argument to main(), after envp. +

    • + There's one interesting twist: one of the segments loaded + into RAM (linux-gate.so) 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. + [7] +

    • + The interpreter interprets the .dynamic section of + the dynamic executable. This is a table containing various types + of info; if the type is DT_NEEDED, the info is the + name of a shared library that is needed to run the executable. + Normally, it's the basename. +

    • + The interpreter searches LD_LIBARY_PATH 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. +

    • + 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 PT_INTERP but will not load additional + libraries. +

    + The ldd command finds the pathnames + of shared libraries used by an executable. This works + only 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. +

    + Thus, to figure out what goes on the initial ram image, first try + ldd. If that gives an answer, good. + Otherwise, use a helper program to find PT_INTERP and + DT_NEEDED. If there's only PT_INTERP, good, + add it to the image. If there are DT_NEEDED libraries + as well, and they have relative rather than absolute pathnames, + we can't determine the full path, so don't generate an image. +

    + There are a number of options to build a helper to extract the relevant + information from the executable: +

    • + Build it in perl. The problem here is that unpacking 64-bit + integers is an optional part of the language. +

    • + Build a wrapper around objdump or + readelf. The drawback is that + there programs are not part of a minimal Linux distribution: + depending on them in yaird would + increase the footprint. +

    • + 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. +

    • + Building a C program based on elf.h. + This turns out to be easy to do. +

    +

    + Yaird uses the last appraoch listed. +

    Security

    + 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 + + + Secure Programming for Linux and Unix HOWTO. +

    + For yaird, 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. +

    +

    GroupMitigationStatus
    Bad inputVerify command line + Yes. +
    Bad inputVerify and clean up environment + Complete environment is reset at start of program. +
    Bad inputAvoid assumptions about file descriptors + Handled by perl. +
    Bad inputVerify file names + Perl taint check shows filenames are verified for + absence of odd characters before passing to + subprocesses. + TODO: examine UTF-8 impact. +
    Bad inputVerify file content + 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. +
    Bad inputVerify locale settings + All locale related environment variables are wiped at + program startup. +
    Bad inputVerify character encoding + All IO is byte oriented. +
    Bad inputBuffer overflow + In perl? +
    Program structureSeparate data and control + 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. +
    Program structureMinimize privileges + 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 rc.sysinit, well past the moment + where the initial boot image hands over control to the newly + mount root file system. No yaird + support needed. +
    Program structureSafe defaults + Configuration only specifies sources of information, + like /etc/hotplug, not much can go wrong here. +
    Program structureSafe configuration + No configuration file is used yet, so it's not read from + current directory either. +
    Program structureFail safe + Planning and writing the image is separated; + writing only starts after planning is succesfully completed. + Todo: consider backout on write failure. +
    Program structureAvoid race conditions + Temporary files and directories are created + with the File::Temp module, which is + resistant to name guessing attacks. + The completed image is installed with rename + rather than link; 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. +
    Underlying resourcesHandle meta characters + Protection against terminal escape sequences in output + is not yet in place. +
    Underlying resourcesCheck system call results + Yes. +
    Language specificVerify perl behaviour with taint. + Yes. +
    Language specificAvoid perl open magic with 3rd argument. + Yes. +

    +

    Tool Chain

    + This section discusses which tools are used in implementing + yaird and why. +

    + 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: +

    +

    • + 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, Obj, + that handles constructor argument validation and that offers + a place to plug in debugging code. +

    • + Object attributes are used via accessor methods to catch + typos in attribute names. +

    • + Objects have a string method, that returns + a string version of the object. Binary data is not + guaranteed to be absent from the string version. +

    • + 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 all that returns a + list of all known items, and functions findByXxx + to retrieve an item where the Xxx attribute has a given + value. There is an init function that + initializes the collection; this is called automatically + upon first invocation of all or + findByXxx. + Collections may have convenience functions + findXxxByYyy: return attribute Xxx, given a + value for attribute Yyy. +

    +

    + 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 + dash shell, for historical reasons only. + Presumably busybox 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, nash as used in Fedora + seems a more attractive option. +

    + 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. +

    Autoconf

    + 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. +

    C Library

    + 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. +

    + 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 + + + LKML: [RFC] klibc requirements, round 2 + for requirements on klibc; the + + mailing list is the most current + source of information. +

    + Recent versions of klibc (1.0 and later) include a wrapper around + gcc, named klcc, that will compile a program with klibc. This means + yaird 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 every + executable on the initial image uses klibc. +

    + Yaird 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 + the section called “Supporting Shared Libraries”. +

    Template Processing

    + 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 + dash in Debian and + ash in Fedora for example. + By processing the output of yaird + through a template, we can confine the tuning of + yaird for a specific distribution + to the template, without having to touch the core code. +

    + 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 StringTemplate + for a discussion of what is needed in a templating system, plus + a Java implementation. +

    + Lets consider a number of possible templating solutions: +

    • + + Template Toolkit: + widely used, not in perl core distribution, does not + prevent mixing of code and templates. +

    • + + Text::Template: + not in perl core distribution, does not + prevent mixing of code and templates. +

    • + Some XSLT processor. Not in core distribution, + more suitable for file-to-file transformations + than for expanding in-process data; overkill. +

    • + + HTML-Template: + not in perl core distribution, + prevents mixing of code and templates, + simple, no dependencies, dual GPL/Artistic license. + Available in Debian as + libhtml-template-perl, + in Fedora 2 as perl-HTML-Template, dropped from Fedora 3, + but available via + + Fedora Extras. +

    • + 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. +

    +

    + The HTML-Template approach is the best match for our + requirements, so used in yaird. +

    Authors

    + This is a place holder section. + Yaird was written by ... + website here ... comments to ... bug reports ... +

    License

    + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public + License as published by the Free Software Foundation; + either version 2 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; you may also obtain + a copy of the GNU General Public License + from the Free Software Foundation by visiting their Web site or by writing to +


    +      Free Software Foundation, Inc.
    +      59 Temple Place - Suite 330
    +      Boston, MA 02111-1307
    +      USA
    +    

    +

    Klibc code

    + 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. +

    +/* ----------------------------------------------------------------------- *
    + *   
    + *   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.
    + *
    + * ----------------------------------------------------------------------- */
    +      

    +



    [1] + 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 ... +

    [2] + 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. +

    [3] + Except where the distribution depends on it; + there are some issues with mdadm in Debian. +

    [4] + Having knowledge of the relation between module names and + kernel defines hardcoded into yaird + 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. +

    [5] + It could also be an encrypted device; this case is not handled + yet. +

    [6] + 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 dev + files provided by sysfs, but there is a bootstrap problem: + the mount command needed to + access sysfs assumes /dev/null and + /dev/console are available. +

    [7] + For more info on the kernel-supplied shared library for + system calls, see + + + LWN: How to speed up system calls, + + LWN: Patch: i386 vsyscall DSO implementation, + + LKML: common name for the kernel DSO. +

#~i9kJNFaH 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