]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/commitdiff
grub: Replace patches to have grub-set-default again.
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 11 Nov 2012 17:51:17 +0000 (18:51 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 11 Nov 2012 17:51:17 +0000 (18:51 +0100)
config/rootfiles/common/i586/grub
lfs/grub
src/patches/grub-fedora-18.patch [deleted file]
src/patches/grub-gentoo-14.patch [new file with mode: 0644]

index 341d773e3c9af90dd1bf0fbd0f5793af2255ce36..43084f78e8b23b18b2798c2824f41440fadb7d4c 100644 (file)
@@ -4,30 +4,29 @@ boot/grub/ipfire.xpm.gz
 boot/grub/stage1
 boot/grub/stage2
 #usr/bin/mbchk
+usr/lib/grub
+#usr/lib/grub/i386-pc
+#usr/lib/grub/i386-pc/e2fs_stage1_5
+#usr/lib/grub/i386-pc/fat_stage1_5
+#usr/lib/grub/i386-pc/ffs_stage1_5
+#usr/lib/grub/i386-pc/iso9660_stage1_5
+#usr/lib/grub/i386-pc/jfs_stage1_5
+#usr/lib/grub/i386-pc/minix_stage1_5
+#usr/lib/grub/i386-pc/reiserfs_stage1_5
+#usr/lib/grub/i386-pc/stage1
+#usr/lib/grub/i386-pc/stage2
+#usr/lib/grub/i386-pc/stage2_eltorito
+#usr/lib/grub/i386-pc/ufs2_stage1_5
+#usr/lib/grub/i386-pc/vstafs_stage1_5
+#usr/lib/grub/i386-pc/xfs_stage1_5
 usr/sbin/grub
-usr/sbin/grub-crypt
 usr/sbin/grub-install
 usr/sbin/grub-md5-crypt
+usr/sbin/grub-set-default
 usr/sbin/grub-terminfo
-usr/share/grub
-#usr/share/grub/i386-pc
-#usr/share/grub/i386-pc/e2fs_stage1_5
-#usr/share/grub/i386-pc/fat_stage1_5
-#usr/share/grub/i386-pc/ffs_stage1_5
-#usr/share/grub/i386-pc/iso9660_stage1_5
-#usr/share/grub/i386-pc/jfs_stage1_5
-#usr/share/grub/i386-pc/minix_stage1_5
-#usr/share/grub/i386-pc/reiserfs_stage1_5
-#usr/share/grub/i386-pc/stage1
-#usr/share/grub/i386-pc/stage2
-#usr/share/grub/i386-pc/stage2_eltorito
-#usr/share/grub/i386-pc/ufs2_stage1_5
-#usr/share/grub/i386-pc/vstafs_stage1_5
-#usr/share/grub/i386-pc/xfs_stage1_5
 #usr/share/info/grub.info
 #usr/share/info/multiboot.info
 #usr/share/man/man1/mbchk.1
-#usr/share/man/man8/grub-crypt.8
 #usr/share/man/man8/grub-install.8
 #usr/share/man/man8/grub-md5-crypt.8
 #usr/share/man/man8/grub-terminfo.8
index 76315fa37e67fdd4d3859699d99e88be4a58e23d..8d5809975914611bf4a1a06532e209b767e62d6e 100644 (file)
--- a/lfs/grub
+++ b/lfs/grub
@@ -75,18 +75,19 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
 
        # Applying patches.
-       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-fedora-18.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-gentoo-14.patch
        cd $(DIR_APP) && autoreconf
        cd $(DIR_APP) && autoconf
 
        # Build.
-       cd $(DIR_APP) && CFLAGS="$(CFLAGS)" ./configure --prefix=/usr
+       cd $(DIR_APP) && CFLAGS="$(CFLAGS)" ./configure --prefix=/usr \
+               --disable-auto-linux-mem-opt
        cd $(DIR_APP) && make $(MAKETUNING)
        cd $(DIR_APP) && make install
 
        # grub files
        mkdir -vp /boot/grub
-       cp -v /usr/share/grub/i386-pc/stage{1,2} /boot/grub
+       cp -v /usr/lib/grub/i386-pc/stage{1,2} /boot/grub
        for i in $(DIR_SRC)/config/grub/*; do \
            [ -f $$i ] && cp -f $$i /boot/grub; \
        done
diff --git a/src/patches/grub-fedora-18.patch b/src/patches/grub-fedora-18.patch
deleted file mode 100644 (file)
index e87c180..0000000
+++ /dev/null
@@ -1,48870 +0,0 @@
-From: Peter Jones <pjones@redhat.com>" 
-Date: Wed Apr 18 12:53:49 EDT 2012
-Subject: [PATCH] Changes from grub-0.97 to master
-
-This patch is a bundle of the changes between grub-0.97 and master.
-It can be reginerated from the git repository at:
-
-git://github.com/vathpela/grub-fedora.git
-
-Using the command:
-
-git diff grub-0.97 master
-
- .gitignore                     |   10 
- ChangeLog                      |   48 
- Makefile.am                    |    7 
- Makefile.in                    |  605 ---
- acinclude.m4                   |    4 
- aclocal.m4                     | 1061 -----
- config.h.in                    |  106 
- configure                      | 7639 -----------------------------------------
- configure.in                   |  113 
- docs/.gitignore                |    3 
- docs/Makefile.am               |    9 
- docs/Makefile.in               |  770 ----
- docs/grub-crypt.8              |   39 
- docs/grub-install.8            |    2 
- docs/grub.8                    |    2 
- docs/grub.info                 |  370 +
- docs/grub.texi                 |   79 
- docs/stamp-vti                 |    4 
- docs/version.texi              |    4 
- efi/.gitignore                 |    7 
- efi/Makefile.am                |   76 
- efi/byteswap.h                 |   37 
- efi/dhcp.h                     |  133 
- efi/efichainloader.c           |  265 +
- efi/eficon.c                   |  306 +
- efi/eficore.c                  |  241 +
- efi/efidisk.c                  |  801 ++++
- efi/efidp.c                    |  999 +++++
- efi/efigraph.c                 | 1501 ++++++++
- efi/efimain.c                  |  129 
- efi/efimisc.c                  |  665 +++
- efi/efimm.c                    |  539 ++
- efi/efiserial.c                |  265 +
- efi/efitftp.c                  |  228 +
- efi/efiuga.c                   |  982 +++++
- efi/font_8x16.c                | 4638 ++++++++++++++++++++++++
- efi/graphics.c                 |  666 +++
- efi/graphics.h                 |   81 
- efi/grub/.gitignore            |    1 
- efi/grub/efi/api.h             | 1716 +++++++++
- efi/grub/efi/console_control.h |   59 
- efi/grub/efi/efi.h             |   85 
- efi/grub/efi/eficall.h         |  162 
- efi/grub/efi/misc.h            |   60 
- efi/grub/efi/time.h            |   31 
- efi/grub/i386/linux.h          |  226 +
- efi/grub/i386/types.h          |   32 
- efi/grub/misc.h                |   71 
- efi/grub/symbol.h              |   34 
- efi/grub/types.h               |  158 
- efi/grub/x86_64/linux.h        |  234 +
- efi/grub/x86_64/types.h        |   32 
- efi/ia32/callwrap.S            |    1 
- efi/ia32/callwrap.c            |  131 
- efi/ia32/loader/bin_to_h.c     |   29 
- efi/ia32/loader/linux.c        |  648 +++
- efi/ia32/loader/switch.S       |  118 
- efi/ia32/loader/switch.h       |   19 
- efi/ia32/reloc.c               |   79 
- efi/ia32/setjmp.S              |   86 
- efi/pxe.c                      |  460 ++
- efi/pxe.h                      |  237 +
- efi/ugadebug.h                 |  201 +
- efi/x86_64/callwrap.S          |  274 +
- efi/x86_64/crt0-efi.S          |   63 
- efi/x86_64/elf_efi.lds         |   58 
- efi/x86_64/loader/Makefile     |   20 
- efi/x86_64/loader/bin_to_h.c   |   29 
- efi/x86_64/loader/linux.c      |  760 ++++
- efi/x86_64/loader/switch.S     |   92 
- efi/x86_64/loader/switch.h     |   25 
- efi/x86_64/reloc.c             |   79 
- efi/x86_64/setjmp.S            |   56 
- efi/xpm.c                      |  231 +
- efi/xpm.h                      |   36 
- grub.spec                      |  438 ++
- grub/.gitignore                |    2 
- grub/Makefile.am               |    2 
- grub/Makefile.in               |  445 --
- grub/asmstub.c                 |  194 -
- grub/efitftp.c                 |   34 
- grub/main.c                    |    2 
- lib/.gitignore                 |    2 
- lib/Makefile.in                |  416 --
- lib/device.c                   |  360 +
- makediff                       |   21 
- netboot/.gitignore             |    2 
- netboot/Makefile.in            | 1091 -----
- netboot/etherboot.h            |   34 
- netboot/main.c                 |    6 
- netboot/misc.c                 |   58 
- netboot/osdep.h                |   24 
- stage1/.gitignore              |    2 
- stage1/Makefile.am             |   15 
- stage1/Makefile.in             |  433 --
- stage1/stage1.S                |    4 
- stage2/.gitignore              |    5 
- stage2/Makefile.am             |   77 
- stage2/Makefile.in             | 3250 -----------------
- stage2/asm.S                   |  284 +
- stage2/boot.c                  |  114 
- stage2/builtins.c              | 1368 +++++--
- stage2/char_io.c               |  609 ++-
- stage2/cmdline.c               |   19 
- stage2/common.c                |   16 
- stage2/disk_io.c               |  213 -
- stage2/efistubs.c              |    7 
- stage2/efistubs.h              |    8 
- stage2/fat.h                   |    2 
- stage2/filesys.h               |   28 
- stage2/fsys_ext2fs.c           |  394 +-
- stage2/fsys_fat.c              |   41 
- stage2/fsys_iso9660.c          |    8 
- stage2/fsys_jfs.c              |   12 
- stage2/fsys_minix.c            |   10 
- stage2/fsys_reiserfs.c         |   44 
- stage2/fsys_uefi.c             |  265 +
- stage2/fsys_vstafs.c           |   28 
- stage2/fsys_xfs.c              |   22 
- stage2/gpt.h                   |   69 
- stage2/graphics.c              |  573 +++
- stage2/graphics.h              |   42 
- stage2/gunzip.c                |   15 
- stage2/iso9660.h               |    4 
- stage2/mb_info.h               |    4 
- stage2/pc_slice.h              |   51 
- stage2/serial.c                |    4 
- stage2/sha256crypt.c           |  723 +++
- stage2/sha512crypt.c           |  795 ++++
- stage2/shared.h                |  126 
- stage2/smp-imps.h              |    1 
- stage2/stage1_5.c              |    3 
- stage2/stage2.c                |  203 -
- stage2/start.S                 |   13 
- stage2/term.h                  |   35 
- stage2/tparm.c                 |   14 
- test                           |    1 
- util/.gitignore                |    7 
- util/Makefile.am               |   11 
- util/Makefile.in               |  478 --
- util/grub-crypt.in             |   80 
- util/grub-install.in           |  334 +
- 142 files changed, 26410 insertions(+), 17652 deletions(-)
-
-diff --git a/.gitignore b/.gitignore
-new file mode 100644
-index 0000000..3d7295a
---- /dev/null
-+++ b/.gitignore
-@@ -0,0 +1,10 @@
-+Makefile.in
-+Makefile
-+configure
-+aclocal.m4
-+autom4te.cache
-+config.h
-+config.h.in
-+config.log
-+config.status
-+stamp-h1
-diff --git a/ChangeLog b/ChangeLog
-index 0f93033..9602fb9 100644
---- a/ChangeLog
-+++ b/ChangeLog
-@@ -772,6 +772,18 @@
-       DATA_LEN is less than or equal to MULTIBOOT_SEARCH.
-       Reported by Neelkanth Natu <neelnatu@yahoo.com>.
-+2003-03-12  Leonid Lisovskiy  <lly@pisem.net>
-+
-+      * lib/device.c (get_drive_geometry): grub utility didn't work
-+      due to uninitialized 'sector_size' struct geometry member.
-+      * stage1/stage1.h (GRUB_NO_DRIVE): Constant moved from
-+      stage2/shared.h and its value rolled back to 0xFF for backward
-+      compatibility with original grub.
-+      * stage1/stage1.S (boot_drive): Use GRUB_NO_DRIVE instead of
-+      constant.
-+      * stage2/bios.c (get_diskinfo): Workaround for BIOS'es that
-+      has CD-ROM drive number = last harddisk + 1.
-+
- 2003-03-10  Yoshinori K. Okuji  <okuji@enbug.org>
-       From Andrew Walrond <andrew@walrond.org>:
-@@ -816,6 +828,42 @@
-       thus corrupts the stack.  This is why we specify the exactly 
-       necessary size of 0x42 bytes.
-+2003-01-28  Leonid Lisovskiy  <lly@pisem.net>
-+
-+      ISO9660 support is added.
-+
-+      * stage2/fsys_iso9660.c: New file - a lot of code stolen from
-+      GRUB/98 0.5.
-+      * stage2/iso9660.h: Likewise.
-+      * stage2/start_torito.S: New file - El Torito boot sector.
-+      * stage2/Makefile.am (noinst_HEADERS): iso9660.h added.
-+      (libgrub_a_SOURCES): fsys_iso9660.c added.
-+      (pkgdata_DATA): iso9660_stage1_5 added.
-+      (noinst_PROGRAMS): iso9660_stage1_5.exec added.
-+      * configure.in (--disable-iso9660): New option.
-+      * stage2/builtins.c (setup_func): Add item for ISO9660 into
-+      STAGE1_5_MAP.
-+      * stage2/disk_io.c (rawread): Ability to read devices with
-+      sector size other than 512 added.
-+      (fsys_table): Added entry for ISO9660.
-+      (check_and_print_mount): Don't print error when probing
-+      partition.
-+      (real_open_partition): Cleanup globals after probing.
-+      * stage2/filesys.h [FSYS_ISO9660]: Add entries for ISO9660
-+      functions.
-+      (NUM_FSYS): Added FSYS_ISO9660_NUM.
-+      * stage2/shared.h (STAGE2_ID_ISO9660_STAGE1_5): New macro.
-+      (GRUB_NO_DRIVE): New constant.
-+      (struct geometry): New member 'sector_size'.
-+      * stage2/bios.c (get_diskinfo): Request 1.xx version of
-+      int13 extensions only since higher version request can
-+      destroy El Torito emulation on some BIOS'es.
-+      (get_cdinfo): New function - get El Torito emulation parameters.
-+      * stage2/asm.S (biosdisk_int13_extensions): pass AX, instead
-+      of AH for universality, save EBX,ECX,EDX registers content to
-+      avoid data corruption in caller functions.
-+      (get_diskinfo_int13_extensions): Removed.
-+
- 2003-01-25  Yoshinori K. Okuji  <okuji@enbug.org>
-       From Steven Dick <ssd.gnu@mmae.ucf.edu>:
-diff --git a/Makefile.am b/Makefile.am
-index 63a9a4f..9bde872 100644
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -1,4 +1,9 @@
- # Do not change this order if you don't know what you are doing.
- AUTOMAKE_OPTIONS = 1.7 gnu
--SUBDIRS = netboot stage2 stage1 lib grub util docs
-+SUBDIRS = netboot stage2 stage1 lib util docs
-+if PLATFORM_EFI
-+SUBDIRS += efi
-+else
-+SUBDIRS += grub
-+endif
- EXTRA_DIST = BUGS MAINTENANCE
-diff --git a/Makefile.in b/Makefile.in
-deleted file mode 100644
-index 6652366..0000000
---- a/Makefile.in
-+++ /dev/null
-@@ -1,605 +0,0 @@
--# Makefile.in generated by automake 1.9.4 from Makefile.am.
--# @configure_input@
--
--# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
--# 2003, 2004  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@
--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 = :
--build_triplet = @build@
--host_triplet = @host@
--DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
--      $(srcdir)/Makefile.in $(srcdir)/config.h.in \
--      $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
--      THANKS TODO compile config.guess config.sub depcomp install-sh \
--      missing mkinstalldirs
--subdir = .
--ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
--am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
--      $(top_srcdir)/configure.ac
--am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
--      $(ACLOCAL_M4)
--am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
-- configure.lineno configure.status.lineno
--mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
--CONFIG_HEADER = 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@
--BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@
--BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@
--CC = @CC@
--CCAS = @CCAS@
--CCASFLAGS = @CCASFLAGS@
--CCDEPMODE = @CCDEPMODE@
--CFLAGS = @CFLAGS@
--CPP = @CPP@
--CPPFLAGS = @CPPFLAGS@
--CYGPATH_W = @CYGPATH_W@
--DEFS = @DEFS@
--DEPDIR = @DEPDIR@
--DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@
--DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@
--ECHO_C = @ECHO_C@
--ECHO_N = @ECHO_N@
--ECHO_T = @ECHO_T@
--EGREP = @EGREP@
--EXEEXT = @EXEEXT@
--FSYS_CFLAGS = @FSYS_CFLAGS@
--GRUB_CFLAGS = @GRUB_CFLAGS@
--GRUB_LIBS = @GRUB_LIBS@
--HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@
--HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@
--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@
--MAINT = @MAINT@
--MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
--MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
--MAKEINFO = @MAKEINFO@
--NETBOOT_DRIVERS = @NETBOOT_DRIVERS@
--NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@
--NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@
--NET_CFLAGS = @NET_CFLAGS@
--NET_EXTRAFLAGS = @NET_EXTRAFLAGS@
--OBJCOPY = @OBJCOPY@
--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@
--RANLIB = @RANLIB@
--SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@
--SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@
--SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@
--SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@
--SET_MAKE = @SET_MAKE@
--SHELL = @SHELL@
--STAGE1_CFLAGS = @STAGE1_CFLAGS@
--STAGE2_CFLAGS = @STAGE2_CFLAGS@
--STRIP = @STRIP@
--VERSION = @VERSION@
--ac_ct_CC = @ac_ct_CC@
--ac_ct_OBJCOPY = @ac_ct_OBJCOPY@
--ac_ct_RANLIB = @ac_ct_RANLIB@
--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 = @build@
--build_alias = @build_alias@
--build_cpu = @build_cpu@
--build_os = @build_os@
--build_vendor = @build_vendor@
--datadir = @datadir@
--exec_prefix = @exec_prefix@
--host = @host@
--host_alias = @host_alias@
--host_cpu = @host_cpu@
--host_os = @host_os@
--host_vendor = @host_vendor@
--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@
--
--# Do not change this order if you don't know what you are doing.
--AUTOMAKE_OPTIONS = 1.7 gnu
--SUBDIRS = netboot stage2 stage1 lib grub util docs
--EXTRA_DIST = BUGS MAINTENANCE
--all: config.h
--      $(MAKE) $(AM_MAKEFLAGS) all-recursive
--
--.SUFFIXES:
--am--refresh:
--      @:
--$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
--      cd $(srcdir) && $(AUTOCONF)
--$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
--      cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
--
--config.h: stamp-h1
--      @if test ! -f $@; then \
--        rm -f stamp-h1; \
--        $(MAKE) stamp-h1; \
--      else :; fi
--
--stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
--      @rm -f stamp-h1
--      cd $(top_builddir) && $(SHELL) ./config.status config.h
--$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) 
--      cd $(top_srcdir) && $(AUTOHEADER)
--      rm -f stamp-h1
--      touch $@
--
--distclean-hdr:
--      -rm -f config.h 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):
--      @set fnord $$MAKEFLAGS; amf=$$2; \
--      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) \
--         || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
--      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:
--      @set fnord $$MAKEFLAGS; amf=$$2; \
--      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) \
--         || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
--      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) config.h.in $(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) config.h.in $(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) config.h.in $(TAGS_DEPENDENCIES) \
--              $(TAGS_FILES) $(LISP)
--      tags=; \
--      here=`pwd`; \
--      list='$(SOURCES) $(HEADERS) config.h.in $(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)/util
--      @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 config.h
--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/acinclude.m4 b/acinclude.m4
-index 368839c..1cf1d67 100644
---- a/acinclude.m4
-+++ b/acinclude.m4
-@@ -44,6 +44,8 @@ AC_DEFUN([grub_PROG_OBJCOPY_ABSOLUTE],
- [AC_MSG_CHECKING([whether ${OBJCOPY} works for absolute addresses])
- AC_CACHE_VAL(grub_cv_prog_objcopy_absolute,
- [cat > conftest.c <<\EOF
-+void cmain(void);
-+
- void
- cmain (void)
- {
-@@ -57,7 +59,7 @@ else
- fi
- grub_cv_prog_objcopy_absolute=yes
- for link_addr in 2000 8000 7C00; do
--  if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec]); then :
-+  if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr -Wl,--build-id=none conftest.o -o conftest.exec]); then :
-   else
-     AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr])
-   fi
-diff --git a/aclocal.m4 b/aclocal.m4
-deleted file mode 100644
-index aa691f6..0000000
---- a/aclocal.m4
-+++ /dev/null
-@@ -1,1061 +0,0 @@
--# generated automatically by aclocal 1.9.4 -*- Autoconf -*-
--
--# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
--# 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.
--
--#                                                        -*- Autoconf -*-
--# Copyright (C) 2002, 2003  Free Software Foundation, Inc.
--# Generated from amversion.in; do not edit by hand.
--
--# This program is free software; you can redistribute 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
--
--# 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.4])])
--
--# AM_AUX_DIR_EXPAND
--
--# Copyright (C) 2001, 2003 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.
--
--# 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 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.
--
--# serial 6
--
--# 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])])
--
--# serial 7                                            -*- Autoconf -*-
--
--# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
--# 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.
--
--
--# 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
--#   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.
--
--#serial 2
--
--# _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"])
--])
--
--# Do all the work for Automake.                            -*- Autoconf -*-
--
--# 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.
--
--# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
--# 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.
--
--# serial 11
--
--# 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])
--
--# AM_PROG_INSTALL_SH
--# ------------------
--# Define $install_sh.
--
--# Copyright (C) 2001, 2003 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.
--
--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)])
--
--#                                                          -*- Autoconf -*-
--# Copyright (C) 2003  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.
--
--# serial 1
--
--# 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])])
--
--# Add --enable-maintainer-mode option to configure.
--# From Jim Meyering
--
--# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
--# 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.
--
--# serial 3
--
--AC_DEFUN([AM_MAINTAINER_MODE],
--[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
--  dnl maintainer-mode is disabled by default
--  AC_ARG_ENABLE(maintainer-mode,
--[  --enable-maintainer-mode  enable make rules and dependencies not useful
--                        (and sometimes confusing) to the casual installer],
--      USE_MAINTAINER_MODE=$enableval,
--      USE_MAINTAINER_MODE=no)
--  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
--  AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
--  MAINT=$MAINTAINER_MODE_TRUE
--  AC_SUBST(MAINT)dnl
--]
--)
--
--AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
--
--# Check to see how 'make' treats includes.    -*- Autoconf -*-
--
--# Copyright (C) 2001, 2002, 2003 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.
--
--# serial 2
--
--# 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
--])
--
--#  -*- Autoconf -*-
--
--
--# Copyright (C) 1997, 1999, 2000, 2001, 2003 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.
--
--# serial 3
--
--# 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
--])
--
--# AM_PROG_MKDIR_P
--# ---------------
--# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
--
--# Copyright (C) 2003, 2004 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.
--
--# 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  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.
--
--# serial 2
--
--# _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.
--#
--
--# Copyright (C) 1996, 1997, 2000, 2001, 2003 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.
--
--# serial 3
--
--# 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)])
--
--# AM_PROG_INSTALL_STRIP
--
--# Copyright (C) 2001, 2003 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.
--
--# 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  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.
--
--# serial 1
--
--
--# _AM_PROG_TAR(FORMAT)
--# --------------------
--# Check how to create a tarball in format FORMAT.
--# FORMAT should be one of `v7', `ustar', or `pax'.
--#
--# Substitute a variable $(am__tar) that is a command
--# writing to stdout a FORMAT-tarball containing the directory
--# $tardir.
--#     tardir=directory && $(am__tar) > result.tar
--#
--# Substitute a variable $(am__untar) that extract such
--# a tarball read from stdin.
--#     $(am__untar) < result.tar
--AC_DEFUN([_AM_PROG_TAR],
--[# Always define AMTAR for backward compatibility.
--AM_MISSING_PROG([AMTAR], [tar])
--m4_if([$1], [v7],
--     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
--     [m4_case([$1], [ustar],, [pax],,
--              [m4_fatal([Unknown tar format])])
--AC_MSG_CHECKING([how to create a $1 tar archive])
--# Loop over all known methods to create a tar archive until one works.
--_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
--_am_tools=${am_cv_prog_tar_$1-$_am_tools}
--# Do not fold the above two line into one, because Tru64 sh and
--# Solaris sh will not grok spaces in the rhs of `-'.
--for _am_tool in $_am_tools
--do
--  case $_am_tool in
--  gnutar)
--    for _am_tar in tar gnutar gtar;
--    do
--      AM_RUN_LOG([$_am_tar --version]) && break
--    done
--    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
--    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
--    am__untar="$_am_tar -xf -"
--    ;;
--  plaintar)
--    # Must skip GNU tar: if it does not support --format= it doesn't create
--    # ustar tarball either.
--    (tar --version) >/dev/null 2>&1 && continue
--    am__tar='tar chf - "$$tardir"'
--    am__tar_='tar chf - "$tardir"'
--    am__untar='tar xf -'
--    ;;
--  pax)
--    am__tar='pax -L -x $1 -w "$$tardir"'
--    am__tar_='pax -L -x $1 -w "$tardir"'
--    am__untar='pax -r'
--    ;;
--  cpio)
--    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
--    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
--    am__untar='cpio -i -H $1 -d'
--    ;;
--  none)
--    am__tar=false
--    am__tar_=false
--    am__untar=false
--    ;;
--  esac
--
--  # If the value was cached, stop now.  We just wanted to have am__tar
--  # and am__untar set.
--  test -n "${am_cv_prog_tar_$1}" && break
--
--  # tar/untar a dummy directory, and stop if the command works
--  rm -rf conftest.dir
--  mkdir conftest.dir
--  echo GrepMe > conftest.dir/file
--  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
--  rm -rf conftest.dir
--  if test -s conftest.tar; then
--    AM_RUN_LOG([$am__untar <conftest.tar])
--    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
--  fi
--done
--rm -rf conftest.dir
--
--AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
--AC_MSG_RESULT([$am_cv_prog_tar_$1])])
--AC_SUBST([am__tar])
--AC_SUBST([am__untar])
--]) # _AM_PROG_TAR
--
--m4_include([acinclude.m4])
-diff --git a/config.h.in b/config.h.in
-deleted file mode 100644
-index 68d7c8c..0000000
---- a/config.h.in
-+++ /dev/null
-@@ -1,106 +0,0 @@
--/* config.h.in.  Generated from configure.ac by autoheader.  */
--
--/* Define if an absolute indirect call/jump must NOT be prefixed with `*' */
--#undef ABSOLUTE_WITHOUT_ASTERISK
--
--/* Define it to \"addr32\" or \"addr32;\" to make GAS happy */
--#undef ADDR32
--
--/* Define if you don't want to pass the mem= option to Linux */
--#undef AUTO_LINUX_MEM_OPT
--
--/* Define it to \"data32\" or \"data32;\" to make GAS happy */
--#undef DATA32
--
--/* Define if C symbols get an underscore after compilation */
--#undef HAVE_ASM_USCORE
--
--/* Define to 1 if you have the <curses.h> header file. */
--#undef HAVE_CURSES_H
--
--/* Define if edata is defined */
--#undef HAVE_EDATA_SYMBOL
--
--/* Define if end is defined */
--#undef HAVE_END_SYMBOL
--
--/* Define to 1 if you have the <inttypes.h> header file. */
--#undef HAVE_INTTYPES_H
--
--/* Define if you have a curses library */
--#undef HAVE_LIBCURSES
--
--/* Define to 1 if you have the <memory.h> header file. */
--#undef HAVE_MEMORY_H
--
--/* Define to 1 if you have the <ncurses/curses.h> header file. */
--#undef HAVE_NCURSES_CURSES_H
--
--/* Define to 1 if you have the <ncurses.h> header file. */
--#undef HAVE_NCURSES_H
--
--/* Define if opendisk() in -lutil can be used */
--#undef HAVE_OPENDISK
--
--/* Define if start is defined */
--#undef HAVE_START_SYMBOL
--
--/* Define to 1 if you have the <stdint.h> header file. */
--#undef HAVE_STDINT_H
--
--/* Define to 1 if you have the <stdlib.h> header file. */
--#undef HAVE_STDLIB_H
--
--/* Define to 1 if you have the <strings.h> header file. */
--#undef HAVE_STRINGS_H
--
--/* Define to 1 if you have the <string.h> header file. */
--#undef HAVE_STRING_H
--
--/* Define to 1 if you have the <sys/stat.h> header file. */
--#undef HAVE_SYS_STAT_H
--
--/* Define to 1 if you have the <sys/types.h> header file. */
--#undef HAVE_SYS_TYPES_H
--
--/* Define to 1 if you have the <unistd.h> header file. */
--#undef HAVE_UNISTD_H
--
--/* Define if _edata is defined */
--#undef HAVE_USCORE_EDATA_SYMBOL
--
--/* Define if end is defined */
--#undef HAVE_USCORE_END_SYMBOL
--
--/* Define if _start is defined */
--#undef HAVE_USCORE_START_SYMBOL
--
--/* Define if __bss_start is defined */
--#undef HAVE_USCORE_USCORE_BSS_START_SYMBOL
--
--/* 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
--
--/* Define if there is user specified preset menu string */
--#undef PRESET_MENU_STRING
--
--/* Define to 1 if you have the ANSI C header files. */
--#undef STDC_HEADERS
--
--/* Version number of package */
--#undef VERSION
-diff --git a/configure b/configure
-deleted file mode 100755
-index 537ab89..0000000
---- a/configure
-+++ /dev/null
-@@ -1,7639 +0,0 @@
--#! /bin/sh
--# Guess values for system-dependent variables and create Makefiles.
--# Generated by GNU Autoconf 2.59 for GRUB 0.97.
--#
--# Report bugs to <bug-grub@gnu.org>.
--#
--# 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='GRUB'
--PACKAGE_TARNAME='grub'
--PACKAGE_VERSION='0.97'
--PACKAGE_STRING='GRUB 0.97'
--PACKAGE_BUGREPORT='bug-grub@gnu.org'
--
--ac_unique_file="stage2/stage2.c"
--# Factoring default headers for most tests.
--ac_includes_default="\
--#include <stdio.h>
--#if HAVE_SYS_TYPES_H
--# include <sys/types.h>
--#endif
--#if HAVE_SYS_STAT_H
--# include <sys/stat.h>
--#endif
--#if STDC_HEADERS
--# include <stdlib.h>
--# include <stddef.h>
--#else
--# if HAVE_STDLIB_H
--#  include <stdlib.h>
--# endif
--#endif
--#if HAVE_STRING_H
--# if !STDC_HEADERS && HAVE_MEMORY_H
--#  include <memory.h>
--# endif
--# include <string.h>
--#endif
--#if HAVE_STRINGS_H
--# include <strings.h>
--#endif
--#if HAVE_INTTYPES_H
--# include <inttypes.h>
--#else
--# if HAVE_STDINT_H
--#  include <stdint.h>
--# endif
--#endif
--#if HAVE_UNISTD_H
--# include <unistd.h>
--#endif"
--
--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 build build_cpu build_vendor build_os host host_cpu host_vendor host_os MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT PERL CC ac_ct_CC CFLAGS LDFLAGS CPPFLAGS EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CCAS RANLIB ac_ct_RANLIB STAGE1_CFLAGS STAGE2_CFLAGS GRUB_CFLAGS OBJCOPY ac_ct_OBJCOPY GRUB_LIBS CPP EGREP NETBOOT_SUPPORT_TRUE NETBOOT_SUPPORT_FALSE DISKLESS_SUPPORT_TRUE DISKLESS_SUPPORT_FALSE HERCULES_SUPPORT_TRUE HERCULES_SUPPORT_FALSE SERIAL_SUPPORT_TRUE SERIAL_SUPPORT_FALSE SERIAL_SPEED_SIMULATION_TRUE SERIAL_SPEED_SIMULATION_FALSE BUILD_EXAMPLE_KERNEL_TRUE BUILD_EXAMPLE_KERNEL_FALSE FSYS_CFLAGS NET_CFLAGS NET_EXTRAFLAGS NETBOOT_DRIVERS CCASFLAGS 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
--ac_env_CPP_set=${CPP+set}
--ac_env_CPP_value=$CPP
--ac_cv_env_CPP_set=${CPP+set}
--ac_cv_env_CPP_value=$CPP
--
--#
--# 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 GRUB 0.97 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
--
--System types:
--  --build=BUILD     configure for building on BUILD [guessed]
--  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
--_ACEOF
--fi
--
--if test -n "$ac_init_help"; then
--  case $ac_init_help in
--     short | recursive ) echo "Configuration of GRUB 0.97:";;
--   esac
--  cat <<\_ACEOF
--
--Optional Features:
--  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
--  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
--  --enable-maintainer-mode  enable make rules and dependencies not useful
--                        (and sometimes confusing) to the casual installer
--  --disable-dependency-tracking  speeds up one-time build
--  --enable-dependency-tracking   do not reject slow dependency extractors
--  --disable-ext2fs        disable ext2fs support in Stage 2
--  --disable-fat           disable FAT support in Stage 2
--  --disable-ffs           disable FFS support in Stage 2
--  --disable-ufs2          disable UFS2 support in Stage 2
--  --disable-minix         disable Minix fs support in Stage 2
--  --disable-reiserfs      disable ReiserFS support in Stage 2
--  --disable-vstafs        disable VSTa FS support in Stage 2
--  --disable-jfs           disable IBM JFS support in Stage 2
--  --disable-xfs           disable SGI XFS support in Stage 2
--  --disable-iso9660       disable ISO9660 support in Stage 2
--  --disable-gunzip        disable decompression in Stage 2
--  --disable-md5-password  disable MD5 password support in Stage 2
--  --disable-packet-retransmission
--                          turn off packet retransmission
--  --enable-pci-direct     access PCI directly instead of using BIOS
--  --enable-3c509          enable 3Com509 driver
--  --enable-3c529          enable 3Com529 driver
--  --enable-3c595          enable 3Com595 driver
--  --enable-3c90x          enable 3Com90x driver
--  --enable-cs89x0         enable CS89x0 driver
--  --enable-davicom        enable Davicom driver
--  --enable-depca          enable DEPCA and EtherWORKS driver
--  --enable-eepro          enable Etherexpress Pro/10 driver
--  --enable-eepro100       enable Etherexpress Pro/100 driver
--  --enable-epic100        enable SMC 83c170 EPIC/100 driver
--  --enable-3c507          enable 3Com507 driver
--  --enable-exos205        enable EXOS205 driver
--  --enable-ni5210         enable Racal-Interlan NI5210 driver
--  --enable-lance          enable Lance PCI PCNet/32 driver
--  --enable-ne2100         enable Novell NE2100 driver
--  --enable-ni6510         enable Racal-Interlan NI6510 driver
--  --enable-natsemi        enable NatSemi DP8381x driver
--  --enable-ni5010         enable Racal-Interlan NI5010 driver
--  --enable-3c503          enable 3Com503 driver
--  --enable-ne             enable NE1000/2000 ISA driver
--  --enable-ns8390         enable NE2000 PCI driver
--  --enable-wd             enable WD8003/8013, SMC8216/8416 driver
--  --enable-otulip         enable old Tulip driver
--  --enable-rtl8139        enable Realtek 8139 driver
--  --enable-sis900         enable SIS 900 and SIS 7016 driver
--  --enable-sk-g16         enable Schneider and Koch G16 driver
--  --enable-smc9000        enable SMC9000 driver
--  --enable-tiara          enable Tiara driver
--  --enable-tulip          enable Tulip driver
--  --enable-via-rhine      enable Rhine-I/II driver
--  --enable-w89c840        enable Winbond W89c840, Compex RL100-ATX driver
--  --enable-3c503-shmem    use 3c503 shared memory mode
--  --enable-3c503-aui      use AUI by default on 3c503 cards
--  --enable-compex-rl2000-fix
--                          specify this if you have a Compex RL2000 PCI
--  --enable-smc9000-scan=LIST
--                          probe for SMC9000 I/O addresses using LIST
--  --enable-ne-scan=LIST   probe for NE base address using LIST
--  --enable-wd-default-mem=MEM
--                          set the default memory location for WD/SMC
--  --enable-cs-scan=LIST   probe for CS89x0 base address using LIST
--  --enable-diskless       enable diskless support
--  --disable-hercules      disable hercules terminal support
--  --disable-serial        disable serial terminal support
--  --enable-serial-speed-simulation
--                          simulate the slowness of a serial device
--  --enable-preset-menu=FILE
--                          preset a menu file FILE in Stage 2
--  --enable-example-kernel
--                          build the example Multiboot kernel
--  --disable-auto-linux-mem-opt
--                          don't pass Linux mem= option automatically
--
--Optional Packages:
--  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
--  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
--  --with-binutils=DIR     search the directory DIR to find binutils
--  --without-curses        do not use curses
--
--Some influential environment variables:
--  CC          C compiler command
--  CFLAGS      C compiler flags
--  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
--              nonstandard directory <lib dir>
--  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
--              headers in a nonstandard directory <include dir>
--  CPP         C preprocessor
--
--Use these variables to override the choices made by `configure' or to help
--it to find libraries and programs with nonstandard names/locations.
--
--Report bugs to <bug-grub@gnu.org>.
--_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
--GRUB configure 0.97
--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.
--_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 GRUB $as_me 0.97, 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
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--
--          ac_config_headers="$ac_config_headers config.h"
--
--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='grub'
-- VERSION='0.97'
--
--
--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 -'
--
--
--
--
--
--
--# Make sure we can run config.sub.
--$ac_config_sub sun4 >/dev/null 2>&1 ||
--  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
--echo "$as_me: error: cannot run $ac_config_sub" >&2;}
--   { (exit 1); exit 1; }; }
--
--echo "$as_me:$LINENO: checking build system type" >&5
--echo $ECHO_N "checking build system type... $ECHO_C" >&6
--if test "${ac_cv_build+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  ac_cv_build_alias=$build_alias
--test -z "$ac_cv_build_alias" &&
--  ac_cv_build_alias=`$ac_config_guess`
--test -z "$ac_cv_build_alias" &&
--  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
--echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
--   { (exit 1); exit 1; }; }
--ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
--  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
--echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
--   { (exit 1); exit 1; }; }
--
--fi
--echo "$as_me:$LINENO: result: $ac_cv_build" >&5
--echo "${ECHO_T}$ac_cv_build" >&6
--build=$ac_cv_build
--build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
--build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
--build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
--
--
--echo "$as_me:$LINENO: checking host system type" >&5
--echo $ECHO_N "checking host system type... $ECHO_C" >&6
--if test "${ac_cv_host+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  ac_cv_host_alias=$host_alias
--test -z "$ac_cv_host_alias" &&
--  ac_cv_host_alias=$ac_cv_build_alias
--ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
--  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
--echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
--   { (exit 1); exit 1; }; }
--
--fi
--echo "$as_me:$LINENO: result: $ac_cv_host" >&5
--echo "${ECHO_T}$ac_cv_host" >&6
--host=$ac_cv_host
--host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
--host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
--host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
--
--
--
--case "$host_cpu" in
--i[3456]86) host_cpu=i386 ;;
--x86_64) host_cpu=x86_64 ;;
--*) { { echo "$as_me:$LINENO: error: unsupported CPU type" >&5
--echo "$as_me: error: unsupported CPU type" >&2;}
--   { (exit 1); exit 1; }; } ;;
--esac
--
--
--
--
--#
--# Options
--#
--
--echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
--echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
--    # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
--if test "${enable_maintainer_mode+set}" = set; then
--  enableval="$enable_maintainer_mode"
--  USE_MAINTAINER_MODE=$enableval
--else
--  USE_MAINTAINER_MODE=no
--fi;
--  echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
--echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
--
--
--if test $USE_MAINTAINER_MODE = yes; then
--  MAINTAINER_MODE_TRUE=
--  MAINTAINER_MODE_FALSE='#'
--else
--  MAINTAINER_MODE_TRUE='#'
--  MAINTAINER_MODE_FALSE=
--fi
--
--  MAINT=$MAINTAINER_MODE_TRUE
--
--
--if test "x$enable_maintainer_mode" = xyes; then
--  # 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
--
--  if test -z "$PERL"; then
--    { { echo "$as_me:$LINENO: error: perl not found" >&5
--echo "$as_me: error: perl not found" >&2;}
--   { (exit 1); exit 1; }; }
--  fi
--fi
--
--# This should be checked before AC_PROG_CC
--if test "x$CFLAGS" = x; then
--  default_CFLAGS=yes
--fi
--
--if test "x$host_cpu" = xx86_64; then
--  CFLAGS="-m32 $CFLAGS"
--fi
--
--#
--# Programs
--#
--
--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
--
--ac_ext=c
--ac_cpp='$CPP $CPPFLAGS'
--ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
--ac_compiler_gnu=$ac_cv_c_compiler_gnu
--if test -n "$ac_tool_prefix"; then
--  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
--set dummy ${ac_tool_prefix}gcc; ac_word=$2
--echo "$as_me:$LINENO: checking for $ac_word" >&5
--echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
--if test "${ac_cv_prog_CC+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  if test -n "$CC"; then
--  ac_cv_prog_CC="$CC" # Let the user override the test.
--else
--as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
--for as_dir in $PATH
--do
--  IFS=$as_save_IFS
--  test -z "$as_dir" && as_dir=.
--  for ac_exec_ext in '' $ac_executable_extensions; do
--  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
--    ac_cv_prog_CC="${ac_tool_prefix}gcc"
--    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
--    break 2
--  fi
--done
--done
--
--fi
--fi
--CC=$ac_cv_prog_CC
--if test -n "$CC"; then
--  echo "$as_me:$LINENO: result: $CC" >&5
--echo "${ECHO_T}$CC" >&6
--else
--  echo "$as_me:$LINENO: result: no" >&5
--echo "${ECHO_T}no" >&6
--fi
--
--fi
--if test -z "$ac_cv_prog_CC"; then
--  ac_ct_CC=$CC
--  # Extract the first word of "gcc", so it can be a program name with args.
--set dummy gcc; ac_word=$2
--echo "$as_me:$LINENO: checking for $ac_word" >&5
--echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
--if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  if test -n "$ac_ct_CC"; then
--  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
--else
--as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
--for as_dir in $PATH
--do
--  IFS=$as_save_IFS
--  test -z "$as_dir" && as_dir=.
--  for ac_exec_ext in '' $ac_executable_extensions; do
--  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
--    ac_cv_prog_ac_ct_CC="gcc"
--    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
--    break 2
--  fi
--done
--done
--
--fi
--fi
--ac_ct_CC=$ac_cv_prog_ac_ct_CC
--if test -n "$ac_ct_CC"; then
--  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
--echo "${ECHO_T}$ac_ct_CC" >&6
--else
--  echo "$as_me:$LINENO: result: no" >&5
--echo "${ECHO_T}no" >&6
--fi
--
--  CC=$ac_ct_CC
--else
--  CC="$ac_cv_prog_CC"
--fi
--
--if test -z "$CC"; then
--  if test -n "$ac_tool_prefix"; then
--  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
--set dummy ${ac_tool_prefix}cc; ac_word=$2
--echo "$as_me:$LINENO: checking for $ac_word" >&5
--echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
--if test "${ac_cv_prog_CC+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  if test -n "$CC"; then
--  ac_cv_prog_CC="$CC" # Let the user override the test.
--else
--as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
--for as_dir in $PATH
--do
--  IFS=$as_save_IFS
--  test -z "$as_dir" && as_dir=.
--  for ac_exec_ext in '' $ac_executable_extensions; do
--  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
--    ac_cv_prog_CC="${ac_tool_prefix}cc"
--    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
--    break 2
--  fi
--done
--done
--
--fi
--fi
--CC=$ac_cv_prog_CC
--if test -n "$CC"; then
--  echo "$as_me:$LINENO: result: $CC" >&5
--echo "${ECHO_T}$CC" >&6
--else
--  echo "$as_me:$LINENO: result: no" >&5
--echo "${ECHO_T}no" >&6
--fi
--
--fi
--if test -z "$ac_cv_prog_CC"; then
--  ac_ct_CC=$CC
--  # Extract the first word of "cc", so it can be a program name with args.
--set dummy cc; ac_word=$2
--echo "$as_me:$LINENO: checking for $ac_word" >&5
--echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
--if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  if test -n "$ac_ct_CC"; then
--  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
--else
--as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
--for as_dir in $PATH
--do
--  IFS=$as_save_IFS
--  test -z "$as_dir" && as_dir=.
--  for ac_exec_ext in '' $ac_executable_extensions; do
--  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
--    ac_cv_prog_ac_ct_CC="cc"
--    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
--    break 2
--  fi
--done
--done
--
--fi
--fi
--ac_ct_CC=$ac_cv_prog_ac_ct_CC
--if test -n "$ac_ct_CC"; then
--  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
--echo "${ECHO_T}$ac_ct_CC" >&6
--else
--  echo "$as_me:$LINENO: result: no" >&5
--echo "${ECHO_T}no" >&6
--fi
--
--  CC=$ac_ct_CC
--else
--  CC="$ac_cv_prog_CC"
--fi
--
--fi
--if test -z "$CC"; then
--  # Extract the first word of "cc", so it can be a program name with args.
--set dummy cc; ac_word=$2
--echo "$as_me:$LINENO: checking for $ac_word" >&5
--echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
--if test "${ac_cv_prog_CC+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  if test -n "$CC"; then
--  ac_cv_prog_CC="$CC" # Let the user override the test.
--else
--  ac_prog_rejected=no
--as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
--for as_dir in $PATH
--do
--  IFS=$as_save_IFS
--  test -z "$as_dir" && as_dir=.
--  for ac_exec_ext in '' $ac_executable_extensions; do
--  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
--    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
--       ac_prog_rejected=yes
--       continue
--     fi
--    ac_cv_prog_CC="cc"
--    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
--    break 2
--  fi
--done
--done
--
--if test $ac_prog_rejected = yes; then
--  # We found a bogon in the path, so make sure we never use it.
--  set dummy $ac_cv_prog_CC
--  shift
--  if test $# != 0; then
--    # We chose a different compiler from the bogus one.
--    # However, it has the same basename, so the bogon will be chosen
--    # first if we set CC to just the basename; use the full file name.
--    shift
--    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
--  fi
--fi
--fi
--fi
--CC=$ac_cv_prog_CC
--if test -n "$CC"; then
--  echo "$as_me:$LINENO: result: $CC" >&5
--echo "${ECHO_T}$CC" >&6
--else
--  echo "$as_me:$LINENO: result: no" >&5
--echo "${ECHO_T}no" >&6
--fi
--
--fi
--if test -z "$CC"; then
--  if test -n "$ac_tool_prefix"; then
--  for ac_prog in cl
--  do
--    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
--set dummy $ac_tool_prefix$ac_prog; ac_word=$2
--echo "$as_me:$LINENO: checking for $ac_word" >&5
--echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
--if test "${ac_cv_prog_CC+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  if test -n "$CC"; then
--  ac_cv_prog_CC="$CC" # Let the user override the test.
--else
--as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
--for as_dir in $PATH
--do
--  IFS=$as_save_IFS
--  test -z "$as_dir" && as_dir=.
--  for ac_exec_ext in '' $ac_executable_extensions; do
--  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
--    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
--    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
--    break 2
--  fi
--done
--done
--
--fi
--fi
--CC=$ac_cv_prog_CC
--if test -n "$CC"; then
--  echo "$as_me:$LINENO: result: $CC" >&5
--echo "${ECHO_T}$CC" >&6
--else
--  echo "$as_me:$LINENO: result: no" >&5
--echo "${ECHO_T}no" >&6
--fi
--
--    test -n "$CC" && break
--  done
--fi
--if test -z "$CC"; then
--  ac_ct_CC=$CC
--  for ac_prog in cl
--do
--  # Extract the first word of "$ac_prog", so it can be a program name with args.
--set dummy $ac_prog; ac_word=$2
--echo "$as_me:$LINENO: checking for $ac_word" >&5
--echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
--if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  if test -n "$ac_ct_CC"; then
--  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
--else
--as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
--for as_dir in $PATH
--do
--  IFS=$as_save_IFS
--  test -z "$as_dir" && as_dir=.
--  for ac_exec_ext in '' $ac_executable_extensions; do
--  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
--    ac_cv_prog_ac_ct_CC="$ac_prog"
--    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
--    break 2
--  fi
--done
--done
--
--fi
--fi
--ac_ct_CC=$ac_cv_prog_ac_ct_CC
--if test -n "$ac_ct_CC"; then
--  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
--echo "${ECHO_T}$ac_ct_CC" >&6
--else
--  echo "$as_me:$LINENO: result: no" >&5
--echo "${ECHO_T}no" >&6
--fi
--
--  test -n "$ac_ct_CC" && break
--done
--
--  CC=$ac_ct_CC
--fi
--
--fi
--
--
--test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
--See \`config.log' for more details." >&5
--echo "$as_me: error: no acceptable C compiler found in \$PATH
--See \`config.log' for more details." >&2;}
--   { (exit 1); exit 1; }; }
--
--# Provide some information about the compiler.
--echo "$as_me:$LINENO:" \
--     "checking for C compiler version" >&5
--ac_compiler=`set X $ac_compile; echo $2`
--{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
--  (eval $ac_compiler --version </dev/null >&5) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }
--{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
--  (eval $ac_compiler -v </dev/null >&5) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }
--{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
--  (eval $ac_compiler -V </dev/null >&5) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }
--
--cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--
--int
--main ()
--{
--
--  ;
--  return 0;
--}
--_ACEOF
--ac_clean_files_save=$ac_clean_files
--ac_clean_files="$ac_clean_files a.out a.exe b.out"
--# Try to create an executable without -o first, disregard a.out.
--# It will help us diagnose broken compilers, and finding out an intuition
--# of exeext.
--echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
--echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
--ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
--if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
--  (eval $ac_link_default) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }; then
--  # Find the output, starting from the most likely.  This scheme is
--# not robust to junk in `.', hence go to wildcards (a.*) only as a last
--# resort.
--
--# Be careful to initialize this variable, since it used to be cached.
--# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
--ac_cv_exeext=
--# b.out is created by i960 compilers.
--for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
--do
--  test -f "$ac_file" || continue
--  case $ac_file in
--    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
--      ;;
--    conftest.$ac_ext )
--      # This is the source file.
--      ;;
--    [ab].out )
--      # We found the default executable, but exeext='' is most
--      # certainly right.
--      break;;
--    *.* )
--      ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
--      # FIXME: I believe we export ac_cv_exeext for Libtool,
--      # but it would be cool to find out if it's true.  Does anybody
--      # maintain Libtool? --akim.
--      export ac_cv_exeext
--      break;;
--    * )
--      break;;
--  esac
--done
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
--See \`config.log' for more details." >&5
--echo "$as_me: error: C compiler cannot create executables
--See \`config.log' for more details." >&2;}
--   { (exit 77); exit 77; }; }
--fi
--
--ac_exeext=$ac_cv_exeext
--echo "$as_me:$LINENO: result: $ac_file" >&5
--echo "${ECHO_T}$ac_file" >&6
--
--# Check the compiler produces executables we can run.  If not, either
--# the compiler is broken, or we cross compile.
--echo "$as_me:$LINENO: checking whether the C compiler works" >&5
--echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
--# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
--# If not cross compiling, check that we can run a simple program.
--if test "$cross_compiling" != yes; then
--  if { ac_try='./$ac_file'
--  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
--  (eval $ac_try) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }; }; then
--    cross_compiling=no
--  else
--    if test "$cross_compiling" = maybe; then
--      cross_compiling=yes
--    else
--      { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
--If you meant to cross compile, use \`--host'.
--See \`config.log' for more details." >&5
--echo "$as_me: error: cannot run C compiled programs.
--If you meant to cross compile, use \`--host'.
--See \`config.log' for more details." >&2;}
--   { (exit 1); exit 1; }; }
--    fi
--  fi
--fi
--echo "$as_me:$LINENO: result: yes" >&5
--echo "${ECHO_T}yes" >&6
--
--rm -f a.out a.exe conftest$ac_cv_exeext b.out
--ac_clean_files=$ac_clean_files_save
--# Check the compiler produces executables we can run.  If not, either
--# the compiler is broken, or we cross compile.
--echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
--echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
--echo "$as_me:$LINENO: result: $cross_compiling" >&5
--echo "${ECHO_T}$cross_compiling" >&6
--
--echo "$as_me:$LINENO: checking for suffix of executables" >&5
--echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
--if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
--  (eval $ac_link) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }; then
--  # If both `conftest.exe' and `conftest' are `present' (well, observable)
--# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
--# work properly (i.e., refer to `conftest.exe'), while it won't with
--# `rm'.
--for ac_file in conftest.exe conftest conftest.*; do
--  test -f "$ac_file" || continue
--  case $ac_file in
--    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
--    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
--        export ac_cv_exeext
--        break;;
--    * ) break;;
--  esac
--done
--else
--  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
--See \`config.log' for more details." >&5
--echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
--See \`config.log' for more details." >&2;}
--   { (exit 1); exit 1; }; }
--fi
--
--rm -f conftest$ac_cv_exeext
--echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
--echo "${ECHO_T}$ac_cv_exeext" >&6
--
--rm -f conftest.$ac_ext
--EXEEXT=$ac_cv_exeext
--ac_exeext=$EXEEXT
--echo "$as_me:$LINENO: checking for suffix of object files" >&5
--echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
--if test "${ac_cv_objext+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--
--int
--main ()
--{
--
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.o conftest.obj
--if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
--  (eval $ac_compile) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }; then
--  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
--  case $ac_file in
--    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
--    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
--       break;;
--  esac
--done
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
--See \`config.log' for more details." >&5
--echo "$as_me: error: cannot compute suffix of object files: cannot compile
--See \`config.log' for more details." >&2;}
--   { (exit 1); exit 1; }; }
--fi
--
--rm -f conftest.$ac_cv_objext conftest.$ac_ext
--fi
--echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
--echo "${ECHO_T}$ac_cv_objext" >&6
--OBJEXT=$ac_cv_objext
--ac_objext=$OBJEXT
--echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
--echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
--if test "${ac_cv_c_compiler_gnu+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--
--int
--main ()
--{
--#ifndef __GNUC__
--       choke me
--#endif
--
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext
--if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
--  (eval $ac_compile) 2>conftest.er1
--  ac_status=$?
--  grep -v '^ *+' conftest.er1 >conftest.err
--  rm -f conftest.er1
--  cat conftest.err >&5
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); } &&
--       { ac_try='test -z "$ac_c_werror_flag"
--                       || test ! -s conftest.err'
--  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
--  (eval $ac_try) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }; } &&
--       { ac_try='test -s conftest.$ac_objext'
--  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
--  (eval $ac_try) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }; }; then
--  ac_compiler_gnu=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--ac_compiler_gnu=no
--fi
--rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
--ac_cv_c_compiler_gnu=$ac_compiler_gnu
--
--fi
--echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
--echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
--GCC=`test $ac_compiler_gnu = yes && echo yes`
--ac_test_CFLAGS=${CFLAGS+set}
--ac_save_CFLAGS=$CFLAGS
--CFLAGS="-g"
--echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
--echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
--if test "${ac_cv_prog_cc_g+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--
--int
--main ()
--{
--
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext
--if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
--  (eval $ac_compile) 2>conftest.er1
--  ac_status=$?
--  grep -v '^ *+' conftest.er1 >conftest.err
--  rm -f conftest.er1
--  cat conftest.err >&5
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); } &&
--       { ac_try='test -z "$ac_c_werror_flag"
--                       || test ! -s conftest.err'
--  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
--  (eval $ac_try) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }; } &&
--       { ac_try='test -s conftest.$ac_objext'
--  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
--  (eval $ac_try) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }; }; then
--  ac_cv_prog_cc_g=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--ac_cv_prog_cc_g=no
--fi
--rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
--fi
--echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
--echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
--if test "$ac_test_CFLAGS" = set; then
--  CFLAGS=$ac_save_CFLAGS
--elif test $ac_cv_prog_cc_g = yes; then
--  if test "$GCC" = yes; then
--    CFLAGS="-g -O2"
--  else
--    CFLAGS="-g"
--  fi
--else
--  if test "$GCC" = yes; then
--    CFLAGS="-O2"
--  else
--    CFLAGS=
--  fi
--fi
--echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
--echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
--if test "${ac_cv_prog_cc_stdc+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  ac_cv_prog_cc_stdc=no
--ac_save_CC=$CC
--cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--#include <stdarg.h>
--#include <stdio.h>
--#include <sys/types.h>
--#include <sys/stat.h>
--/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
--struct buf { int x; };
--FILE * (*rcsopen) (struct buf *, struct stat *, int);
--static char *e (p, i)
--     char **p;
--     int i;
--{
--  return p[i];
--}
--static char *f (char * (*g) (char **, int), char **p, ...)
--{
--  char *s;
--  va_list v;
--  va_start (v,p);
--  s = g (p, va_arg (v,int));
--  va_end (v);
--  return s;
--}
--
--/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
--   function prototypes and stuff, but not '\xHH' hex character constants.
--   These don't provoke an error unfortunately, instead are silently treated
--   as 'x'.  The following induces an error, until -std1 is added to get
--   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
--   array size at least.  It's necessary to write '\x00'==0 to get something
--   that's true only with -std1.  */
--int osf4_cc_array ['\x00' == 0 ? 1 : -1];
--
--int test (int i, double x);
--struct s1 {int (*f) (int a);};
--struct s2 {int (*f) (double a);};
--int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
--int argc;
--char **argv;
--int
--main ()
--{
--return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
--  ;
--  return 0;
--}
--_ACEOF
--# Don't try gcc -ansi; that turns off useful extensions and
--# breaks some systems' header files.
--# AIX                 -qlanglvl=ansi
--# Ultrix and OSF/1    -std1
--# HP-UX 10.20 and later       -Ae
--# HP-UX older versions        -Aa -D_HPUX_SOURCE
--# SVR4                        -Xc -D__EXTENSIONS__
--for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
--do
--  CC="$ac_save_CC $ac_arg"
--  rm -f conftest.$ac_objext
--if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
--  (eval $ac_compile) 2>conftest.er1
--  ac_status=$?
--  grep -v '^ *+' conftest.er1 >conftest.err
--  rm -f conftest.er1
--  cat conftest.err >&5
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); } &&
--       { ac_try='test -z "$ac_c_werror_flag"
--                       || test ! -s conftest.err'
--  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
--  (eval $ac_try) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }; } &&
--       { ac_try='test -s conftest.$ac_objext'
--  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
--  (eval $ac_try) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }; }; then
--  ac_cv_prog_cc_stdc=$ac_arg
--break
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--fi
--rm -f conftest.err conftest.$ac_objext
--done
--rm -f conftest.$ac_ext conftest.$ac_objext
--CC=$ac_save_CC
--
--fi
--
--case "x$ac_cv_prog_cc_stdc" in
--  x|xno)
--    echo "$as_me:$LINENO: result: none needed" >&5
--echo "${ECHO_T}none needed" >&6 ;;
--  *)
--    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
--echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
--    CC="$CC $ac_cv_prog_cc_stdc" ;;
--esac
--
--# Some people use a C++ compiler to compile C.  Since we use `exit',
--# in C++ we need to declare it.  In case someone uses the same compiler
--# for both compiling C and C++ we need to have the C++ compiler decide
--# the declaration of exit, since it's the most demanding environment.
--cat >conftest.$ac_ext <<_ACEOF
--#ifndef __cplusplus
--  choke me
--#endif
--_ACEOF
--rm -f conftest.$ac_objext
--if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
--  (eval $ac_compile) 2>conftest.er1
--  ac_status=$?
--  grep -v '^ *+' conftest.er1 >conftest.err
--  rm -f conftest.er1
--  cat conftest.err >&5
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); } &&
--       { ac_try='test -z "$ac_c_werror_flag"
--                       || test ! -s conftest.err'
--  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
--  (eval $ac_try) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }; } &&
--       { ac_try='test -s conftest.$ac_objext'
--  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
--  (eval $ac_try) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }; }; then
--  for ac_declaration in \
--   '' \
--   'extern "C" void std::exit (int) throw (); using std::exit;' \
--   'extern "C" void std::exit (int); using std::exit;' \
--   'extern "C" void exit (int) throw ();' \
--   'extern "C" void exit (int);' \
--   'void exit (int);'
--do
--  cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--$ac_declaration
--#include <stdlib.h>
--int
--main ()
--{
--exit (42);
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext
--if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
--  (eval $ac_compile) 2>conftest.er1
--  ac_status=$?
--  grep -v '^ *+' conftest.er1 >conftest.err
--  rm -f conftest.er1
--  cat conftest.err >&5
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); } &&
--       { ac_try='test -z "$ac_c_werror_flag"
--                       || test ! -s conftest.err'
--  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
--  (eval $ac_try) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }; } &&
--       { ac_try='test -s conftest.$ac_objext'
--  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
--  (eval $ac_try) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }; }; then
--  :
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--continue
--fi
--rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
--  cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--$ac_declaration
--int
--main ()
--{
--exit (42);
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext
--if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
--  (eval $ac_compile) 2>conftest.er1
--  ac_status=$?
--  grep -v '^ *+' conftest.er1 >conftest.err
--  rm -f conftest.er1
--  cat conftest.err >&5
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); } &&
--       { ac_try='test -z "$ac_c_werror_flag"
--                       || test ! -s conftest.err'
--  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
--  (eval $ac_try) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }; } &&
--       { ac_try='test -s conftest.$ac_objext'
--  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
--  (eval $ac_try) 2>&5
--  ac_status=$?
--  echo "$as_me:$LINENO: \$? = $ac_status" >&5
--  (exit $ac_status); }; }; then
--  break
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--fi
--rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
--done
--rm -f conftest*
--if test -n "$ac_declaration"; then
--  echo '#ifdef __cplusplus' >>confdefs.h
--  echo $ac_declaration      >>confdefs.h
--  echo '#endif'             >>confdefs.h
--fi
--
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--fi
--rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
--ac_ext=c
--ac_cpp='$CPP $CPPFLAGS'
--ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
--ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
--ac_compiler_gnu=$ac_cv_c_compiler_gnu
--DEPDIR="${am__leading_dot}deps"
--
--          ac_config_commands="$ac_config_commands depfiles"
--
--
--am_make=${MAKE-make}
--cat > confinc << 'END'
--am__doit:
--      @echo done
--.PHONY: am__doit
--END
--# If we don't find an include directive, just comment out the code.
--echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
--echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
--am__include="#"
--am__quote=
--_am_result=none
--# First try GNU make style include.
--echo "include confinc" > confmf
--# We grep out `Entering directory' and `Leaving directory'
--# messages which can occur if `w' ends up in MAKEFLAGS.
--# In particular we don't look at `^make:' because GNU make might
--# be invoked under some other name (usually "gmake"), in which
--# case it prints its new name instead of `make'.
--if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
--   am__include=include
--   am__quote=
--   _am_result=GNU
--fi
--# Now try BSD make style include.
--if test "$am__include" = "#"; then
--   echo '.include "confinc"' > confmf
--   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
--      am__include=.include
--      am__quote="\""
--      _am_result=BSD
--   fi
--fi
--
--
--echo "$as_me:$LINENO: result: $_am_result" >&5
--echo "${ECHO_T}$_am_result" >&6
--rm -f confinc confmf
--
--# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
--if test "${enable_dependency_tracking+set}" = set; then
--  enableval="$enable_dependency_tracking"
--
--fi;
--if test "x$enable_dependency_tracking" != xno; then
--  am_depcomp="$ac_aux_dir/depcomp"
--  AMDEPBACKSLASH='\'
--fi
--
--
--if test "x$enable_dependency_tracking" != xno; then
--  AMDEP_TRUE=
--  AMDEP_FALSE='#'
--else
--  AMDEP_TRUE='#'
--  AMDEP_FALSE=
--fi
--
--
--
--
--depcc="$CC"   am_compiler_list=
--
--echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
--echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
--if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
--  # We make a subdir and do the tests there.  Otherwise we can end up
--  # making bogus files that we don't know about and never remove.  For
--  # instance it was reported that on HP-UX the gcc test will end up
--  # making a dummy file named `D' -- because `-MD' means `put the output
--  # in D'.
--  mkdir conftest.dir
--  # Copy depcomp to subdir because otherwise we won't find it if we're
--  # using a relative directory.
--  cp "$am_depcomp" conftest.dir
--  cd conftest.dir
--  # We will build objects and dependencies in a subdirectory because
--  # it helps to detect inapplicable dependency modes.  For instance
--  # both Tru64's cc and ICC support -MD to output dependencies as a
--  # side effect of compilation, but ICC will put the dependencies in
--  # the current directory while Tru64 will put them in the object
--  # directory.
--  mkdir sub
--
--  am_cv_CC_dependencies_compiler_type=none
--  if test "$am_compiler_list" = ""; then
--     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
--  fi
--  for depmode in $am_compiler_list; do
--    # Setup a source with many dependencies, because some compilers
--    # like to wrap large dependency lists on column 80 (with \), and
--    # we should not choose a depcomp mode which is confused by this.
--    #
--    # We need to recreate these files for each test, as the compiler may
--    # overwrite some of them when testing with obscure command lines.
--    # This happens at least with the AIX C compiler.
--    : > sub/conftest.c
--    for i in 1 2 3 4 5 6; do
--      echo '#include "conftst'$i'.h"' >> sub/conftest.c
--      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
--      # Solaris 8's {/usr,}/bin/sh.
--      touch sub/conftst$i.h
--    done
--    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
--
--    case $depmode in
--    nosideeffect)
--      # after this tag, mechanisms are not by side-effect, so they'll
--      # only be used when explicitly requested
--      if test "x$enable_dependency_tracking" = xyes; then
--      continue
--      else
--      break
--      fi
--      ;;
--    none) break ;;
--    esac
--    # We check with `-c' and `-o' for the sake of the "dashmstdout"
--    # mode.  It turns out that the SunPro C++ compiler does not properly
--    # handle `-M -o', and we need to detect this.
--    if depmode=$depmode \
--       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
--       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
--       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
--         >/dev/null 2>conftest.err &&
--       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
--       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
--       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
--      # icc doesn't choke on unknown options, it will just issue warnings
--      # or remarks (even with -Werror).  So we grep stderr for any message
--      # that says an option was ignored or not supported.
--      # When given -MP, icc 7.0 and 7.1 complain thusly:
--      #   icc: Command line warning: ignoring option '-M'; no argument required
--      # The diagnosis changed in icc 8.0:
--      #   icc: Command line remark: option '-MP' not supported
--      if (grep 'ignoring option' conftest.err ||
--          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
--        am_cv_CC_dependencies_compiler_type=$depmode
--        break
--      fi
--    fi
--  done
--
--  cd ..
--  rm -rf conftest.dir
--else
--  am_cv_CC_dependencies_compiler_type=none
--fi
--
--fi
--echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
--echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
--CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
--
--
--
--if
--  test "x$enable_dependency_tracking" != xno \
--  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
--  am__fastdepCC_TRUE=
--  am__fastdepCC_FALSE='#'
--else
--  am__fastdepCC_TRUE='#'
--  am__fastdepCC_FALSE=
--fi
--
--
--# We need this for older versions of Autoconf.
--
--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
--
--
--
--CCAS="$CC"
--
--
--
--# Check whether --with-binutils or --without-binutils was given.
--if test "${with_binutils+set}" = set; then
--  withval="$with_binutils"
--
--fi;
--
--if test "x$with_binutils" != x; then
--  # Extract the first word of "ranlib", so it can be a program name with args.
--set dummy ranlib; 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_RANLIB+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  case $RANLIB in
--  [\\/]* | ?:[\\/]*)
--  ac_cv_path_RANLIB="$RANLIB" # Let the user override the test with a path.
--  ;;
--  *)
--  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
--as_dummy=""$with_binutils:$PATH""
--for as_dir in $as_dummy
--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_RANLIB="$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_RANLIB" && ac_cv_path_RANLIB=":"
--  ;;
--esac
--fi
--RANLIB=$ac_cv_path_RANLIB
--
--if test -n "$RANLIB"; then
--  echo "$as_me:$LINENO: result: $RANLIB" >&5
--echo "${ECHO_T}$RANLIB" >&6
--else
--  echo "$as_me:$LINENO: result: no" >&5
--echo "${ECHO_T}no" >&6
--fi
--
--else
--  if test -n "$ac_tool_prefix"; then
--  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
--set dummy ${ac_tool_prefix}ranlib; 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_RANLIB+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  if test -n "$RANLIB"; then
--  ac_cv_prog_RANLIB="$RANLIB" # 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_RANLIB="${ac_tool_prefix}ranlib"
--    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
--    break 2
--  fi
--done
--done
--
--fi
--fi
--RANLIB=$ac_cv_prog_RANLIB
--if test -n "$RANLIB"; then
--  echo "$as_me:$LINENO: result: $RANLIB" >&5
--echo "${ECHO_T}$RANLIB" >&6
--else
--  echo "$as_me:$LINENO: result: no" >&5
--echo "${ECHO_T}no" >&6
--fi
--
--fi
--if test -z "$ac_cv_prog_RANLIB"; then
--  ac_ct_RANLIB=$RANLIB
--  # Extract the first word of "ranlib", so it can be a program name with args.
--set dummy ranlib; 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_RANLIB+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  if test -n "$ac_ct_RANLIB"; then
--  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_RANLIB="ranlib"
--    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_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
--fi
--fi
--ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
--if test -n "$ac_ct_RANLIB"; then
--  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
--echo "${ECHO_T}$ac_ct_RANLIB" >&6
--else
--  echo "$as_me:$LINENO: result: no" >&5
--echo "${ECHO_T}no" >&6
--fi
--
--  RANLIB=$ac_ct_RANLIB
--else
--  RANLIB="$ac_cv_prog_RANLIB"
--fi
--
--fi
--
--# optimization flags
--if test "x$ac_cv_c_compiler_gnu" = xyes; then
--  if test "x$default_CFLAGS" = xyes; then
--    # Autoconf may set CFLAGS to -O2 and/or -g. So eliminate them.
--    CFLAGS="`echo $CFLAGS | sed -e 's/-g//g' -e 's/-O[0-9]//g'` -g"
--    # If the user specify the directory for binutils, add the option `-B'.
--    if test "x$with_binutils" != x; then
--      CFLAGS="-B$with_binutils/ $CFLAGS"
--    fi
--    STAGE1_CFLAGS="-O2"
--    GRUB_CFLAGS="-O2"
--
--echo "$as_me:$LINENO: checking whether optimization for size works" >&5
--echo $ECHO_N "checking whether optimization for size works... $ECHO_C" >&6
--if test "${size_flag+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--
--      saved_CFLAGS=$CFLAGS
--      CFLAGS="-Os -g"
--      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
--  size_flag=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--size_flag=no
--fi
--rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
--      CFLAGS=$saved_CFLAGS
--
--fi
--echo "$as_me:$LINENO: result: $size_flag" >&5
--echo "${ECHO_T}$size_flag" >&6
--    if test "x$size_flag" = xyes; then
--      STAGE2_CFLAGS="-Os"
--    else
--      STAGE2_CFLAGS="-O2 -fno-strength-reduce -fno-unroll-loops"
--    fi
--    # OpenBSD has a GCC extension for protecting applications from
--    # stack smashing attacks, but GRUB doesn't want this feature.
--    echo "$as_me:$LINENO: checking whether gcc has -fno-stack-protector" >&5
--echo $ECHO_N "checking whether gcc has -fno-stack-protector... $ECHO_C" >&6
--if test "${no_stack_protector_flag+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--
--      saved_CFLAGS=$CFLAGS
--      CFLAGS="-fno-stack-protector"
--      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
--  no_stack_protector_flag=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--no_stack_protector_flag=no
--fi
--rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
--      CFLAGS=$saved_CFLAGS
--
--fi
--echo "$as_me:$LINENO: result: $no_stack_protector_flag" >&5
--echo "${ECHO_T}$no_stack_protector_flag" >&6
--    if test "x$no_stack_protector_flag" = xyes; then
--      STAGE2_CFLAGS="$STAGE2_CFLAGS -fno-stack-protector"
--    fi
--  fi
--fi
--
--
--
--
--
--# Enforce coding standards.
--CPPFLAGS="$CPPFLAGS -Wall -Wmissing-prototypes -Wunused -Wshadow"
--CPPFLAGS="$CPPFLAGS -Wpointer-arith"
--
--echo "$as_me:$LINENO: checking whether -Wundef works" >&5
--echo $ECHO_N "checking whether -Wundef works... $ECHO_C" >&6
--if test "${undef_flag+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--
--  saved_CPPFLAGS="$CPPFLAGS"
--  CPPFLAGS="-Wundef"
--  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
--  undef_flag=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--undef_flag=no
--fi
--rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
--  CPPFLAGS="$saved_CPPFLAGS"
--
--fi
--echo "$as_me:$LINENO: result: $undef_flag" >&5
--echo "${ECHO_T}$undef_flag" >&6
--
--# The options `-falign-*' are supported by gcc 3.0 or later.
--# Probably it is sufficient to only check for -falign-loops.
--echo "$as_me:$LINENO: checking whether -falign-loops works" >&5
--echo $ECHO_N "checking whether -falign-loops works... $ECHO_C" >&6
--if test "${falign_loop_flag+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--
--  saved_CPPFLAGS="$CPPFLAGS"
--  CPPFLAGS="-falign-loops=1"
--  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
--  falign_loop_flag=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--falign_loop_flag=no
--fi
--rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
--  CPPFLAGS="$saved_CPPFLAGS"
--
--fi
--echo "$as_me:$LINENO: result: $falign_loop_flag" >&5
--echo "${ECHO_T}$falign_loop_flag" >&6
--
--# Force no alignment to save space.
--if test "x$falign_loop_flag" = xyes; then
--  CPPFLAGS="$CPPFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
--else
--  CPPFLAGS="$CPPFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
--fi
--
--if test "x$undef_flag" = xyes; then
--  CPPFLAGS="$CPPFLAGS -Wundef"
--fi
--
--if test "x$with_binutils" != x; then
--  # Extract the first word of "objcopy", so it can be a program name with args.
--set dummy objcopy; 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_OBJCOPY+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  case $OBJCOPY in
--  [\\/]* | ?:[\\/]*)
--  ac_cv_path_OBJCOPY="$OBJCOPY" # Let the user override the test with a path.
--  ;;
--  *)
--  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
--as_dummy=""$with_binutils:$PATH""
--for as_dir in $as_dummy
--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_OBJCOPY="$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
--OBJCOPY=$ac_cv_path_OBJCOPY
--
--if test -n "$OBJCOPY"; then
--  echo "$as_me:$LINENO: result: $OBJCOPY" >&5
--echo "${ECHO_T}$OBJCOPY" >&6
--else
--  echo "$as_me:$LINENO: result: no" >&5
--echo "${ECHO_T}no" >&6
--fi
--
--else
--  if test -n "$ac_tool_prefix"; then
--  # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args.
--set dummy ${ac_tool_prefix}objcopy; 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_OBJCOPY+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  if test -n "$OBJCOPY"; then
--  ac_cv_prog_OBJCOPY="$OBJCOPY" # 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_OBJCOPY="${ac_tool_prefix}objcopy"
--    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
--    break 2
--  fi
--done
--done
--
--fi
--fi
--OBJCOPY=$ac_cv_prog_OBJCOPY
--if test -n "$OBJCOPY"; then
--  echo "$as_me:$LINENO: result: $OBJCOPY" >&5
--echo "${ECHO_T}$OBJCOPY" >&6
--else
--  echo "$as_me:$LINENO: result: no" >&5
--echo "${ECHO_T}no" >&6
--fi
--
--fi
--if test -z "$ac_cv_prog_OBJCOPY"; then
--  ac_ct_OBJCOPY=$OBJCOPY
--  # Extract the first word of "objcopy", so it can be a program name with args.
--set dummy objcopy; 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_OBJCOPY+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  if test -n "$ac_ct_OBJCOPY"; then
--  ac_cv_prog_ac_ct_OBJCOPY="$ac_ct_OBJCOPY" # 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_OBJCOPY="objcopy"
--    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
--    break 2
--  fi
--done
--done
--
--fi
--fi
--ac_ct_OBJCOPY=$ac_cv_prog_ac_ct_OBJCOPY
--if test -n "$ac_ct_OBJCOPY"; then
--  echo "$as_me:$LINENO: result: $ac_ct_OBJCOPY" >&5
--echo "${ECHO_T}$ac_ct_OBJCOPY" >&6
--else
--  echo "$as_me:$LINENO: result: no" >&5
--echo "${ECHO_T}no" >&6
--fi
--
--  OBJCOPY=$ac_ct_OBJCOPY
--else
--  OBJCOPY="$ac_cv_prog_OBJCOPY"
--fi
--
--fi
--
--# Defined in acinclude.m4.
--
--echo "$as_me:$LINENO: checking if C symbols get an underscore after compilation" >&5
--echo $ECHO_N "checking if C symbols get an underscore after compilation... $ECHO_C" >&6
--if test "${grub_cv_asm_uscore+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  cat > conftest.c <<\EOF
--int
--func (int *list)
--{
--  *list = 0;
--  return *list;
--}
--EOF
--
--if { ac_try='${CC-cc} ${CFLAGS} -S conftest.c'
--  { (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); }; } && test -s conftest.s; then
--  true
--else
--  { { echo "$as_me:$LINENO: error: ${CC-cc} failed to produce assembly code" >&5
--echo "$as_me: error: ${CC-cc} failed to produce assembly code" >&2;}
--   { (exit 1); exit 1; }; }
--fi
--
--if grep _func conftest.s >/dev/null 2>&1; then
--  grub_cv_asm_uscore=yes
--else
--  grub_cv_asm_uscore=no
--fi
--
--rm -f conftest*
--fi
--
--
--if test "x$grub_cv_asm_uscore" = xyes; then
--
--cat >>confdefs.h <<_ACEOF
--#define HAVE_ASM_USCORE $grub_cv_asm_uscore
--_ACEOF
--
--fi
--
--echo "$as_me:$LINENO: result: $grub_cv_asm_uscore" >&5
--echo "${ECHO_T}$grub_cv_asm_uscore" >&6
--
--echo "$as_me:$LINENO: checking whether ${OBJCOPY} works for absolute addresses" >&5
--echo $ECHO_N "checking whether ${OBJCOPY} works for absolute addresses... $ECHO_C" >&6
--if test "${grub_cv_prog_objcopy_absolute+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  cat > conftest.c <<\EOF
--void
--cmain (void)
--{
--   *((int *) 0x1000) = 2;
--}
--EOF
--
--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); } && test -s conftest.o; then :
--else
--  { { echo "$as_me:$LINENO: error: ${CC-cc} cannot compile C source code" >&5
--echo "$as_me: error: ${CC-cc} cannot compile C source code" >&2;}
--   { (exit 1); exit 1; }; }
--fi
--grub_cv_prog_objcopy_absolute=yes
--for link_addr in 2000 8000 7C00; do
--  if { ac_try='${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec'
--  { (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:$LINENO: error: ${CC-cc} cannot link at address $link_addr" >&5
--echo "$as_me: error: ${CC-cc} cannot link at address $link_addr" >&2;}
--   { (exit 1); exit 1; }; }
--  fi
--  if { ac_try='${OBJCOPY-objcopy} -O binary conftest.exec conftest'
--  { (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:$LINENO: error: ${OBJCOPY-objcopy} cannot create binary files" >&5
--echo "$as_me: error: ${OBJCOPY-objcopy} cannot create binary files" >&2;}
--   { (exit 1); exit 1; }; }
--  fi
--  if test ! -f conftest.old || { ac_try='cmp -s conftest.old conftest'
--  { (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
--    mv -f conftest conftest.old
--  else
--    grub_cv_prog_objcopy_absolute=no
--    break
--  fi
--done
--rm -f conftest*
--fi
--
--echo "$as_me:$LINENO: result: $grub_cv_prog_objcopy_absolute" >&5
--echo "${ECHO_T}$grub_cv_prog_objcopy_absolute" >&6
--if test "x$grub_cv_prog_objcopy_absolute" != xyes; then
--  { { echo "$as_me:$LINENO: error: GRUB requires a working absolute objcopy; upgrade your binutils" >&5
--echo "$as_me: error: GRUB requires a working absolute objcopy; upgrade your binutils" >&2;}
--   { (exit 1); exit 1; }; }
--fi
--
--
--echo "$as_me:$LINENO: checking whether addr32 must be in the same line as the instruction" >&5
--echo $ECHO_N "checking whether addr32 must be in the same line as the instruction... $ECHO_C" >&6
--if test "${grub_cv_asm_prefix_requirement+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  cat > conftest.s <<\EOF
--      .code16
--l1:   addr32  movb    %al, l1
--EOF
--
--if { ac_try='${CC-cc} ${CFLAGS} -c conftest.s'
--  { (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); }; } && test -s conftest.o; then
--  grub_cv_asm_prefix_requirement=yes
--else
--  grub_cv_asm_prefix_requirement=no
--fi
--
--rm -f conftest*
--fi
--
--
--if test "x$grub_cv_asm_prefix_requirement" = xyes; then
--  grub_tmp_addr32="addr32"
--  grub_tmp_data32="data32"
--else
--  grub_tmp_addr32="addr32;"
--  grub_tmp_data32="data32;"
--fi
--
--
--cat >>confdefs.h <<_ACEOF
--#define ADDR32 $grub_tmp_addr32
--_ACEOF
--
--
--cat >>confdefs.h <<_ACEOF
--#define DATA32 $grub_tmp_data32
--_ACEOF
--
--
--echo "$as_me:$LINENO: result: $grub_cv_asm_prefix_requirement" >&5
--echo "${ECHO_T}$grub_cv_asm_prefix_requirement" >&6
--
--
--
--echo "$as_me:$LINENO: checking for .code16 addr32 assembler support" >&5
--echo $ECHO_N "checking for .code16 addr32 assembler support... $ECHO_C" >&6
--if test "${grub_cv_asm_addr32+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  cat > conftest.s.in <<\EOF
--      .code16
--l1:   @ADDR32@        movb    %al, l1
--EOF
--
--if test "x$grub_cv_asm_prefix_requirement" = xyes; then
--  sed -e s/@ADDR32@/addr32/ < conftest.s.in > conftest.s
--else
--  sed -e s/@ADDR32@/addr32\;/ < conftest.s.in > conftest.s
--fi
--
--if { ac_try='${CC-cc} ${CFLAGS} -c conftest.s'
--  { (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); }; } && test -s conftest.o; then
--  grub_cv_asm_addr32=yes
--else
--  grub_cv_asm_addr32=no
--fi
--
--rm -f conftest*
--fi
--
--
--echo "$as_me:$LINENO: result: $grub_cv_asm_addr32" >&5
--echo "${ECHO_T}$grub_cv_asm_addr32" >&6
--if test "x$grub_cv_asm_addr32" != xyes; then
--  { { echo "$as_me:$LINENO: error: GRUB requires GAS .code16 addr32 support; upgrade your binutils" >&5
--echo "$as_me: error: GRUB requires GAS .code16 addr32 support; upgrade your binutils" >&2;}
--   { (exit 1); exit 1; }; }
--fi
--
--
--echo "$as_me:$LINENO: checking whether an absolute indirect call/jump must not be prefixed with an asterisk" >&5
--echo $ECHO_N "checking whether an absolute indirect call/jump must not be prefixed with an asterisk... $ECHO_C" >&6
--if test "${grub_cv_asm_absolute_without_asterisk+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  cat > conftest.s <<\EOF
--      lcall   *(offset)
--offset:
--      .long   0
--      .word   0
--EOF
--
--if { ac_try='${CC-cc} ${CFLAGS} -c conftest.s'
--  { (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); }; } && test -s conftest.o; then
--  grub_cv_asm_absolute_without_asterisk=no
--else
--  grub_cv_asm_absolute_without_asterisk=yes
--fi
--
--rm -f conftest*
--fi
--
--
--if test "x$grub_cv_asm_absolute_without_asterisk" = xyes; then
--
--cat >>confdefs.h <<\_ACEOF
--#define ABSOLUTE_WITHOUT_ASTERISK 1
--_ACEOF
--
--fi
--
--echo "$as_me:$LINENO: result: $grub_cv_asm_absolute_without_asterisk" >&5
--echo "${ECHO_T}$grub_cv_asm_absolute_without_asterisk" >&6
--
--
--echo "$as_me:$LINENO: checking if start is defined by the compiler" >&5
--echo $ECHO_N "checking if start is defined by the compiler... $ECHO_C" >&6
--if test "${grub_cv_check_start_symbol+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 ()
--{
--asm ("incl start")
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext conftest$ac_exeext
--if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
--  (eval $ac_link) 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_exeext'
--  { (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
--  grub_cv_check_start_symbol=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--grub_cv_check_start_symbol=no
--fi
--rm -f conftest.err conftest.$ac_objext \
--      conftest$ac_exeext conftest.$ac_ext
--fi
--
--
--if test "x$grub_cv_check_start_symbol" = xyes; then
--
--cat >>confdefs.h <<\_ACEOF
--#define HAVE_START_SYMBOL 1
--_ACEOF
--
--fi
--
--echo "$as_me:$LINENO: result: $grub_cv_check_start_symbol" >&5
--echo "${ECHO_T}$grub_cv_check_start_symbol" >&6
--
--
--echo "$as_me:$LINENO: checking if _start is defined by the compiler" >&5
--echo $ECHO_N "checking if _start is defined by the compiler... $ECHO_C" >&6
--if test "${grub_cv_check_uscore_start_symbol+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 ()
--{
--asm ("incl _start")
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext conftest$ac_exeext
--if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
--  (eval $ac_link) 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_exeext'
--  { (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
--  grub_cv_check_uscore_start_symbol=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--grub_cv_check_uscore_start_symbol=no
--fi
--rm -f conftest.err conftest.$ac_objext \
--      conftest$ac_exeext conftest.$ac_ext
--fi
--
--
--if test "x$grub_cv_check_uscore_start_symbol" = xyes; then
--
--cat >>confdefs.h <<\_ACEOF
--#define HAVE_USCORE_START_SYMBOL 1
--_ACEOF
--
--fi
--
--echo "$as_me:$LINENO: result: $grub_cv_check_uscore_start_symbol" >&5
--echo "${ECHO_T}$grub_cv_check_uscore_start_symbol" >&6
--
--if test "x$grub_cv_check_start_symbol" != "xyes" \
--      -a "x$grub_cv_check_uscore_start_symbol" != "xyes"; then
--  { { echo "$as_me:$LINENO: error: Neither start nor _start is defined" >&5
--echo "$as_me: error: Neither start nor _start is defined" >&2;}
--   { (exit 1); exit 1; }; }
--fi
--
--
--echo "$as_me:$LINENO: checking if __bss_start is defined by the compiler" >&5
--echo $ECHO_N "checking if __bss_start is defined by the compiler... $ECHO_C" >&6
--if test "${grub_cv_check_uscore_uscore_bss_start_symbol+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 ()
--{
--asm ("incl __bss_start")
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext conftest$ac_exeext
--if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
--  (eval $ac_link) 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_exeext'
--  { (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
--  grub_cv_check_uscore_uscore_bss_start_symbol=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--grub_cv_check_uscore_uscore_bss_start_symbol=no
--fi
--rm -f conftest.err conftest.$ac_objext \
--      conftest$ac_exeext conftest.$ac_ext
--fi
--
--
--if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" = xyes; then
--
--cat >>confdefs.h <<\_ACEOF
--#define HAVE_USCORE_USCORE_BSS_START_SYMBOL 1
--_ACEOF
--
--fi
--
--echo "$as_me:$LINENO: result: $grub_cv_check_uscore_uscore_bss_start_symbol" >&5
--echo "${ECHO_T}$grub_cv_check_uscore_uscore_bss_start_symbol" >&6
--
--
--echo "$as_me:$LINENO: checking if _edata is defined by the compiler" >&5
--echo $ECHO_N "checking if _edata is defined by the compiler... $ECHO_C" >&6
--if test "${grub_cv_check_uscore_edata_symbol+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 ()
--{
--asm ("incl _edata")
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext conftest$ac_exeext
--if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
--  (eval $ac_link) 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_exeext'
--  { (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
--  grub_cv_check_uscore_edata_symbol=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--grub_cv_check_uscore_edata_symbol=no
--fi
--rm -f conftest.err conftest.$ac_objext \
--      conftest$ac_exeext conftest.$ac_ext
--fi
--
--
--if test "x$grub_cv_check_uscore_edata_symbol" = xyes; then
--
--cat >>confdefs.h <<\_ACEOF
--#define HAVE_USCORE_EDATA_SYMBOL 1
--_ACEOF
--
--fi
--
--echo "$as_me:$LINENO: result: $grub_cv_check_uscore_edata_symbol" >&5
--echo "${ECHO_T}$grub_cv_check_uscore_edata_symbol" >&6
--
--
--echo "$as_me:$LINENO: checking if edata is defined by the compiler" >&5
--echo $ECHO_N "checking if edata is defined by the compiler... $ECHO_C" >&6
--if test "${grub_cv_check_edata_symbol+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 ()
--{
--asm ("incl edata")
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext conftest$ac_exeext
--if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
--  (eval $ac_link) 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_exeext'
--  { (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
--  grub_cv_check_edata_symbol=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--grub_cv_check_edata_symbol=no
--fi
--rm -f conftest.err conftest.$ac_objext \
--      conftest$ac_exeext conftest.$ac_ext
--fi
--
--
--if test "x$grub_cv_check_edata_symbol" = xyes; then
--
--cat >>confdefs.h <<\_ACEOF
--#define HAVE_EDATA_SYMBOL 1
--_ACEOF
--
--fi
--
--echo "$as_me:$LINENO: result: $grub_cv_check_edata_symbol" >&5
--echo "${ECHO_T}$grub_cv_check_edata_symbol" >&6
--
--if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" != "xyes" \
--      -a "x$grub_cv_check_uscore_edata_symbol" != "xyes" \
--      -a "x$grub_cv_check_edata_symbol" != "xyes"; then
--  { { echo "$as_me:$LINENO: error: None of __bss_start, _edata, edata defined" >&5
--echo "$as_me: error: None of __bss_start, _edata, edata defined" >&2;}
--   { (exit 1); exit 1; }; }
--fi
--
--
--echo "$as_me:$LINENO: checking if end is defined by the compiler" >&5
--echo $ECHO_N "checking if end is defined by the compiler... $ECHO_C" >&6
--if test "${grub_cv_check_end_symbol+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 ()
--{
--asm ("incl end")
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext conftest$ac_exeext
--if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
--  (eval $ac_link) 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_exeext'
--  { (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
--  grub_cv_check_end_symbol=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--grub_cv_check_end_symbol=no
--fi
--rm -f conftest.err conftest.$ac_objext \
--      conftest$ac_exeext conftest.$ac_ext
--fi
--
--
--if test "x$grub_cv_check_end_symbol" = xyes; then
--
--cat >>confdefs.h <<\_ACEOF
--#define HAVE_END_SYMBOL 1
--_ACEOF
--
--fi
--
--echo "$as_me:$LINENO: result: $grub_cv_check_end_symbol" >&5
--echo "${ECHO_T}$grub_cv_check_end_symbol" >&6
--
--
--echo "$as_me:$LINENO: checking if _end is defined by the compiler" >&5
--echo $ECHO_N "checking if _end is defined by the compiler... $ECHO_C" >&6
--if test "${grub_cv_check_uscore_end_symbol+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 ()
--{
--asm ("incl _end")
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext conftest$ac_exeext
--if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
--  (eval $ac_link) 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_exeext'
--  { (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
--  grub_cv_check_uscore_end_symbol=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--grub_cv_check_uscore_end_symbol=no
--fi
--rm -f conftest.err conftest.$ac_objext \
--      conftest$ac_exeext conftest.$ac_ext
--fi
--
--
--if test "x$grub_cv_check_uscore_end_symbol" = xyes; then
--
--cat >>confdefs.h <<\_ACEOF
--#define HAVE_USCORE_END_SYMBOL 1
--_ACEOF
--
--fi
--
--echo "$as_me:$LINENO: result: $grub_cv_check_uscore_end_symbol" >&5
--echo "${ECHO_T}$grub_cv_check_uscore_end_symbol" >&6
--
--if test "x$grub_cv_check_end_symbol" != "xyes" \
--      -a "x$grub_cv_check_uscore_end_symbol" != "xyes"; then
--  { { echo "$as_me:$LINENO: error: Neither end nor _end is defined" >&5
--echo "$as_me: error: Neither end nor _end is defined" >&2;}
--   { (exit 1); exit 1; }; }
--fi
--
--# Check for curses libraries.
--
--# Check whether --with-curses or --without-curses was given.
--if test "${with_curses+set}" = set; then
--  withval="$with_curses"
--
--fi;
--
--# Get the filename or the whole disk and open it.
--# Known to work on NetBSD.
--echo "$as_me:$LINENO: checking for opendisk in -lutil" >&5
--echo $ECHO_N "checking for opendisk in -lutil... $ECHO_C" >&6
--if test "${ac_cv_lib_util_opendisk+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  ac_check_lib_save_LIBS=$LIBS
--LIBS="-lutil  $LIBS"
--cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--
--/* Override any gcc2 internal prototype to avoid an error.  */
--#ifdef __cplusplus
--extern "C"
--#endif
--/* We use char because int might match the return type of a gcc2
--   builtin and then its argument prototype would still apply.  */
--char opendisk ();
--int
--main ()
--{
--opendisk ();
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext conftest$ac_exeext
--if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
--  (eval $ac_link) 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_exeext'
--  { (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_lib_util_opendisk=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--ac_cv_lib_util_opendisk=no
--fi
--rm -f conftest.err conftest.$ac_objext \
--      conftest$ac_exeext conftest.$ac_ext
--LIBS=$ac_check_lib_save_LIBS
--fi
--echo "$as_me:$LINENO: result: $ac_cv_lib_util_opendisk" >&5
--echo "${ECHO_T}$ac_cv_lib_util_opendisk" >&6
--if test $ac_cv_lib_util_opendisk = yes; then
--  GRUB_LIBS="$GRUB_LIBS -lutil"
--
--cat >>confdefs.h <<\_ACEOF
--#define HAVE_OPENDISK 1
--_ACEOF
--
--fi
--
--
--# Unless the user specify --without-curses, check for curses.
--if test "x$with_curses" != "xno"; then
--  echo "$as_me:$LINENO: checking for wgetch in -lncurses" >&5
--echo $ECHO_N "checking for wgetch in -lncurses... $ECHO_C" >&6
--if test "${ac_cv_lib_ncurses_wgetch+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  ac_check_lib_save_LIBS=$LIBS
--LIBS="-lncurses  $LIBS"
--cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--
--/* Override any gcc2 internal prototype to avoid an error.  */
--#ifdef __cplusplus
--extern "C"
--#endif
--/* We use char because int might match the return type of a gcc2
--   builtin and then its argument prototype would still apply.  */
--char wgetch ();
--int
--main ()
--{
--wgetch ();
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext conftest$ac_exeext
--if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
--  (eval $ac_link) 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_exeext'
--  { (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_lib_ncurses_wgetch=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--ac_cv_lib_ncurses_wgetch=no
--fi
--rm -f conftest.err conftest.$ac_objext \
--      conftest$ac_exeext conftest.$ac_ext
--LIBS=$ac_check_lib_save_LIBS
--fi
--echo "$as_me:$LINENO: result: $ac_cv_lib_ncurses_wgetch" >&5
--echo "${ECHO_T}$ac_cv_lib_ncurses_wgetch" >&6
--if test $ac_cv_lib_ncurses_wgetch = yes; then
--  GRUB_LIBS="$GRUB_LIBS -lncurses"
--
--cat >>confdefs.h <<\_ACEOF
--#define HAVE_LIBCURSES 1
--_ACEOF
--
--else
--  echo "$as_me:$LINENO: checking for wgetch in -lcurses" >&5
--echo $ECHO_N "checking for wgetch in -lcurses... $ECHO_C" >&6
--if test "${ac_cv_lib_curses_wgetch+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  ac_check_lib_save_LIBS=$LIBS
--LIBS="-lcurses  $LIBS"
--cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--
--/* Override any gcc2 internal prototype to avoid an error.  */
--#ifdef __cplusplus
--extern "C"
--#endif
--/* We use char because int might match the return type of a gcc2
--   builtin and then its argument prototype would still apply.  */
--char wgetch ();
--int
--main ()
--{
--wgetch ();
--  ;
--  return 0;
--}
--_ACEOF
--rm -f conftest.$ac_objext conftest$ac_exeext
--if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
--  (eval $ac_link) 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_exeext'
--  { (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_lib_curses_wgetch=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--ac_cv_lib_curses_wgetch=no
--fi
--rm -f conftest.err conftest.$ac_objext \
--      conftest$ac_exeext conftest.$ac_ext
--LIBS=$ac_check_lib_save_LIBS
--fi
--echo "$as_me:$LINENO: result: $ac_cv_lib_curses_wgetch" >&5
--echo "${ECHO_T}$ac_cv_lib_curses_wgetch" >&6
--if test $ac_cv_lib_curses_wgetch = yes; then
--  GRUB_LIBS="$GRUB_LIBS -lcurses"
--
--cat >>confdefs.h <<\_ACEOF
--#define HAVE_LIBCURSES 1
--_ACEOF
--
--fi
--
--fi
--
--fi
--
--
--
--# Check for headers.
--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
--echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
--echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
--# On Suns, sometimes $CPP names a directory.
--if test -n "$CPP" && test -d "$CPP"; then
--  CPP=
--fi
--if test -z "$CPP"; then
--  if test "${ac_cv_prog_CPP+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--      # Double quotes because CPP needs to be expanded
--    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
--    do
--      ac_preproc_ok=false
--for ac_c_preproc_warn_flag in '' yes
--do
--  # Use a header file that comes with gcc, so configuring glibc
--  # with a fresh cross-compiler works.
--  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
--  # <limits.h> exists even on freestanding compilers.
--  # On the NeXT, cc -E runs the code through the compiler's parser,
--  # not just through cpp. "Syntax error" is here to catch this case.
--  cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--#ifdef __STDC__
--# include <limits.h>
--#else
--# include <assert.h>
--#endif
--                   Syntax error
--_ACEOF
--if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
--  (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
--  if test -s conftest.err; then
--    ac_cpp_err=$ac_c_preproc_warn_flag
--    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
--  else
--    ac_cpp_err=
--  fi
--else
--  ac_cpp_err=yes
--fi
--if test -z "$ac_cpp_err"; then
--  :
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--  # Broken: fails on valid input.
--continue
--fi
--rm -f conftest.err conftest.$ac_ext
--
--  # OK, works on sane cases.  Now check whether non-existent headers
--  # can be detected and how.
--  cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--#include <ac_nonexistent.h>
--_ACEOF
--if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
--  (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
--  if test -s conftest.err; then
--    ac_cpp_err=$ac_c_preproc_warn_flag
--    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
--  else
--    ac_cpp_err=
--  fi
--else
--  ac_cpp_err=yes
--fi
--if test -z "$ac_cpp_err"; then
--  # Broken: success on invalid input.
--continue
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--  # Passes both tests.
--ac_preproc_ok=:
--break
--fi
--rm -f conftest.err conftest.$ac_ext
--
--done
--# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
--rm -f conftest.err conftest.$ac_ext
--if $ac_preproc_ok; then
--  break
--fi
--
--    done
--    ac_cv_prog_CPP=$CPP
--
--fi
--  CPP=$ac_cv_prog_CPP
--else
--  ac_cv_prog_CPP=$CPP
--fi
--echo "$as_me:$LINENO: result: $CPP" >&5
--echo "${ECHO_T}$CPP" >&6
--ac_preproc_ok=false
--for ac_c_preproc_warn_flag in '' yes
--do
--  # Use a header file that comes with gcc, so configuring glibc
--  # with a fresh cross-compiler works.
--  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
--  # <limits.h> exists even on freestanding compilers.
--  # On the NeXT, cc -E runs the code through the compiler's parser,
--  # not just through cpp. "Syntax error" is here to catch this case.
--  cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--#ifdef __STDC__
--# include <limits.h>
--#else
--# include <assert.h>
--#endif
--                   Syntax error
--_ACEOF
--if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
--  (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
--  if test -s conftest.err; then
--    ac_cpp_err=$ac_c_preproc_warn_flag
--    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
--  else
--    ac_cpp_err=
--  fi
--else
--  ac_cpp_err=yes
--fi
--if test -z "$ac_cpp_err"; then
--  :
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--  # Broken: fails on valid input.
--continue
--fi
--rm -f conftest.err conftest.$ac_ext
--
--  # OK, works on sane cases.  Now check whether non-existent headers
--  # can be detected and how.
--  cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--#include <ac_nonexistent.h>
--_ACEOF
--if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
--  (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
--  if test -s conftest.err; then
--    ac_cpp_err=$ac_c_preproc_warn_flag
--    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
--  else
--    ac_cpp_err=
--  fi
--else
--  ac_cpp_err=yes
--fi
--if test -z "$ac_cpp_err"; then
--  # Broken: success on invalid input.
--continue
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--  # Passes both tests.
--ac_preproc_ok=:
--break
--fi
--rm -f conftest.err conftest.$ac_ext
--
--done
--# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
--rm -f conftest.err conftest.$ac_ext
--if $ac_preproc_ok; then
--  :
--else
--  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
--See \`config.log' for more details." >&5
--echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
--See \`config.log' for more details." >&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
--
--
--echo "$as_me:$LINENO: checking for egrep" >&5
--echo $ECHO_N "checking for egrep... $ECHO_C" >&6
--if test "${ac_cv_prog_egrep+set}" = set; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
--    then ac_cv_prog_egrep='grep -E'
--    else ac_cv_prog_egrep='egrep'
--    fi
--fi
--echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
--echo "${ECHO_T}$ac_cv_prog_egrep" >&6
-- EGREP=$ac_cv_prog_egrep
--
--
--echo "$as_me:$LINENO: checking for ANSI C header files" >&5
--echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
--if test "${ac_cv_header_stdc+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.  */
--#include <stdlib.h>
--#include <stdarg.h>
--#include <string.h>
--#include <float.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_header_stdc=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--ac_cv_header_stdc=no
--fi
--rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
--
--if test $ac_cv_header_stdc = yes; then
--  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
--  cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--#include <string.h>
--
--_ACEOF
--if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
--  $EGREP "memchr" >/dev/null 2>&1; then
--  :
--else
--  ac_cv_header_stdc=no
--fi
--rm -f conftest*
--
--fi
--
--if test $ac_cv_header_stdc = yes; then
--  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
--  cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--#include <stdlib.h>
--
--_ACEOF
--if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
--  $EGREP "free" >/dev/null 2>&1; then
--  :
--else
--  ac_cv_header_stdc=no
--fi
--rm -f conftest*
--
--fi
--
--if test $ac_cv_header_stdc = yes; then
--  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
--  if test "$cross_compiling" = yes; then
--  :
--else
--  cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--#include <ctype.h>
--#if ((' ' & 0x0FF) == 0x020)
--# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
--# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
--#else
--# define ISLOWER(c) \
--                 (('a' <= (c) && (c) <= 'i') \
--                   || ('j' <= (c) && (c) <= 'r') \
--                   || ('s' <= (c) && (c) <= 'z'))
--# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
--#endif
--
--#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
--int
--main ()
--{
--  int i;
--  for (i = 0; i < 256; i++)
--    if (XOR (islower (i), ISLOWER (i))
--      || toupper (i) != TOUPPER (i))
--      exit(2);
--  exit (0);
--}
--_ACEOF
--rm -f conftest$ac_exeext
--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); } && { ac_try='./conftest$ac_exeext'
--  { (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: program exited with status $ac_status" >&5
--echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--( exit $ac_status )
--ac_cv_header_stdc=no
--fi
--rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
--fi
--fi
--fi
--echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
--echo "${ECHO_T}$ac_cv_header_stdc" >&6
--if test $ac_cv_header_stdc = yes; then
--
--cat >>confdefs.h <<\_ACEOF
--#define STDC_HEADERS 1
--_ACEOF
--
--fi
--
--# On IRIX 5.3, sys/types and inttypes.h are conflicting.
--
--
--
--
--
--
--
--
--
--for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
--                inttypes.h stdint.h unistd.h
--do
--as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
--echo "$as_me:$LINENO: checking for $ac_header" >&5
--echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
--if eval "test \"\${$as_ac_Header+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.  */
--$ac_includes_default
--
--#include <$ac_header>
--_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
--  eval "$as_ac_Header=yes"
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--eval "$as_ac_Header=no"
--fi
--rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
--fi
--echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
--echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
--if test `eval echo '${'$as_ac_Header'}'` = yes; then
--  cat >>confdefs.h <<_ACEOF
--#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
--_ACEOF
--
--fi
--
--done
--
--
--
--
--
--
--
--for ac_header in string.h strings.h ncurses/curses.h ncurses.h curses.h
--do
--as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
--if eval "test \"\${$as_ac_Header+set}\" = set"; then
--  echo "$as_me:$LINENO: checking for $ac_header" >&5
--echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
--if eval "test \"\${$as_ac_Header+set}\" = set"; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--fi
--echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
--echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
--else
--  # Is the header compilable?
--echo "$as_me:$LINENO: checking $ac_header usability" >&5
--echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
--cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--$ac_includes_default
--#include <$ac_header>
--_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_header_compiler=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--ac_header_compiler=no
--fi
--rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
--echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
--echo "${ECHO_T}$ac_header_compiler" >&6
--
--# Is the header present?
--echo "$as_me:$LINENO: checking $ac_header presence" >&5
--echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
--cat >conftest.$ac_ext <<_ACEOF
--/* confdefs.h.  */
--_ACEOF
--cat confdefs.h >>conftest.$ac_ext
--cat >>conftest.$ac_ext <<_ACEOF
--/* end confdefs.h.  */
--#include <$ac_header>
--_ACEOF
--if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
--  (eval $ac_cpp conftest.$ac_ext) 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); } >/dev/null; then
--  if test -s conftest.err; then
--    ac_cpp_err=$ac_c_preproc_warn_flag
--    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
--  else
--    ac_cpp_err=
--  fi
--else
--  ac_cpp_err=yes
--fi
--if test -z "$ac_cpp_err"; then
--  ac_header_preproc=yes
--else
--  echo "$as_me: failed program was:" >&5
--sed 's/^/| /' conftest.$ac_ext >&5
--
--  ac_header_preproc=no
--fi
--rm -f conftest.err conftest.$ac_ext
--echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
--echo "${ECHO_T}$ac_header_preproc" >&6
--
--# So?  What about this header?
--case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
--  yes:no: )
--    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
--echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
--    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
--echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
--    ac_header_preproc=yes
--    ;;
--  no:yes:* )
--    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
--echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
--    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
--echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
--    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
--echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
--    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
--echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
--    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
--echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
--    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
--echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
--    (
--      cat <<\_ASBOX
--## ------------------------------- ##
--## Report this to bug-grub@gnu.org ##
--## ------------------------------- ##
--_ASBOX
--    ) |
--      sed "s/^/$as_me: WARNING:     /" >&2
--    ;;
--esac
--echo "$as_me:$LINENO: checking for $ac_header" >&5
--echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
--if eval "test \"\${$as_ac_Header+set}\" = set"; then
--  echo $ECHO_N "(cached) $ECHO_C" >&6
--else
--  eval "$as_ac_Header=\$ac_header_preproc"
--fi
--echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
--echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
--
--fi
--if test `eval echo '${'$as_ac_Header'}'` = yes; then
--  cat >>confdefs.h <<_ACEOF
--#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
--_ACEOF
--
--fi
--
--done
--
--
--# Check for user options.
--
--# filesystems support.
--# Check whether --enable-ext2fs or --disable-ext2fs was given.
--if test "${enable_ext2fs+set}" = set; then
--  enableval="$enable_ext2fs"
--
--fi;
--
--if test x"$enable_ext2fs" != xno; then
--  FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_EXT2FS=1"
--fi
--
--# Check whether --enable-fat or --disable-fat was given.
--if test "${enable_fat+set}" = set; then
--  enableval="$enable_fat"
--
--fi;
--
--if test x"$enable_fat" != xno; then
--  FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_FAT=1"
--fi
--
--# Check whether --enable-ffs or --disable-ffs was given.
--if test "${enable_ffs+set}" = set; then
--  enableval="$enable_ffs"
--
--fi;
--
--if test x"$enable_ffs" != xno; then
--  FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_FFS=1"
--fi
--
--# Check whether --enable-ufs2 or --disable-ufs2 was given.
--if test "${enable_ufs2+set}" = set; then
--  enableval="$enable_ufs2"
--
--fi;
--
--if test x"$enable_ufs2" != xno; then
--  FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_UFS2=1"
--fi
--
--# Check whether --enable-minix or --disable-minix was given.
--if test "${enable_minix+set}" = set; then
--  enableval="$enable_minix"
--
--fi;
--
--if test x"$enable_minix" != xno; then
--  FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_MINIX=1"
--fi
--
--# Check whether --enable-reiserfs or --disable-reiserfs was given.
--if test "${enable_reiserfs+set}" = set; then
--  enableval="$enable_reiserfs"
--
--fi;
--
--if test x"$enable_reiserfs" != xno; then
--  FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_REISERFS=1"
--fi
--
--# Check whether --enable-vstafs or --disable-vstafs was given.
--if test "${enable_vstafs+set}" = set; then
--  enableval="$enable_vstafs"
--
--fi;
--
--if test x"$enable_vstafs" != xno; then
--  FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_VSTAFS=1"
--fi
--
--# Check whether --enable-jfs or --disable-jfs was given.
--if test "${enable_jfs+set}" = set; then
--  enableval="$enable_jfs"
--
--fi;
--
--if test x"$enable_jfs" != xno; then
--  FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_JFS=1"
--fi
--
--# Check whether --enable-xfs or --disable-xfs was given.
--if test "${enable_xfs+set}" = set; then
--  enableval="$enable_xfs"
--
--fi;
--
--if test x"$enable_xfs" != xno; then
--  FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_XFS=1"
--fi
--
--# Check whether --enable-iso9660 or --disable-iso9660 was given.
--if test "${enable_iso9660+set}" = set; then
--  enableval="$enable_iso9660"
--
--fi;
--
--if test x"$enable_iso9660" != xno; then
--  FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_ISO9660=1"
--fi
--
--
--# Check whether --enable-gunzip or --disable-gunzip was given.
--if test "${enable_gunzip+set}" = set; then
--  enableval="$enable_gunzip"
--
--fi;
--
--if test x"$enable_gunzip" = xno; then
--  FSYS_CFLAGS="$FSYS_CFLAGS -DNO_DECOMPRESSION=1"
--fi
--
--# Check whether --enable-md5-password or --disable-md5-password was given.
--if test "${enable_md5_password+set}" = set; then
--  enableval="$enable_md5_password"
--
--fi;
--if test "x$enable_md5_password" != xno; then
--  FSYS_CFLAGS="$FSYS_CFLAGS -DUSE_MD5_PASSWORDS=1"
--fi
--
--# Check whether --enable-packet-retransmission or --disable-packet-retransmission was given.
--if test "${enable_packet_retransmission+set}" = set; then
--  enableval="$enable_packet_retransmission"
--
--fi;
--if test "x$enable_packet_retransmission" != xno; then
--  NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCONGESTED=1"
--fi
--
--# Check whether --enable-pci-direct or --disable-pci-direct was given.
--if test "${enable_pci_direct+set}" = set; then
--  enableval="$enable_pci_direct"
--
--fi;
--if test "x$enable_pci_direct" = xyes; then
--  NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCONFIG_PCI_DIRECT=1"
--fi
--
--# Check whether --enable-3c509 or --disable-3c509 was given.
--if test "${enable_3c509+set}" = set; then
--  enableval="$enable_3c509"
--
--fi;
--if test "x$enable_3c509" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C509"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c509.o"
--fi
--
--# Check whether --enable-3c529 or --disable-3c529 was given.
--if test "${enable_3c529+set}" = set; then
--  enableval="$enable_3c529"
--
--fi;
--if test "x$enable_3c529" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C529=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c529.o"
--fi
--
--# Check whether --enable-3c595 or --disable-3c595 was given.
--if test "${enable_3c595+set}" = set; then
--  enableval="$enable_3c595"
--
--fi;
--if test "x$enable_3c595" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C595=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c595.o"
--fi
--
--# Check whether --enable-3c90x or --disable-3c90x was given.
--if test "${enable_3c90x+set}" = set; then
--  enableval="$enable_3c90x"
--
--fi;
--if test "x$enable_3c90x" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C90X=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c90x.o"
--fi
--
--# Check whether --enable-cs89x0 or --disable-cs89x0 was given.
--if test "${enable_cs89x0+set}" = set; then
--  enableval="$enable_cs89x0"
--
--fi;
--if test "x$enable_cs89x0" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_CS89X0=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS cs89x0.o"
--fi
--
--# Check whether --enable-davicom or --disable-davicom was given.
--if test "${enable_davicom+set}" = set; then
--  enableval="$enable_davicom"
--
--fi;
--if test "x$enable_davicom" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_DAVICOM=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS davicom.o"
--fi
--
--# Check whether --enable-depca or --disable-depca was given.
--if test "${enable_depca+set}" = set; then
--  enableval="$enable_depca"
--
--fi;
--if test "x$enable_depca" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_DEPCA=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS depca.o"
--fi
--
--# Check whether --enable-eepro or --disable-eepro was given.
--if test "${enable_eepro+set}" = set; then
--  enableval="$enable_eepro"
--
--fi;
--if test "x$enable_eepro" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EEPRO=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS eepro.o"
--fi
--
--# Check whether --enable-eepro100 or --disable-eepro100 was given.
--if test "${enable_eepro100+set}" = set; then
--  enableval="$enable_eepro100"
--
--fi;
--if test "x$enable_eepro100" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EEPRO100=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS eepro100.o"
--fi
--
--# Check whether --enable-epic100 or --disable-epic100 was given.
--if test "${enable_epic100+set}" = set; then
--  enableval="$enable_epic100"
--
--fi;
--if test "x$enable_epic100" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EPIC100=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS epic100.o"
--fi
--
--# Check whether --enable-3c507 or --disable-3c507 was given.
--if test "${enable_3c507+set}" = set; then
--  enableval="$enable_3c507"
--
--fi;
--if test "x$enable_3c507" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C507=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c507.o"
--fi
--
--# Check whether --enable-exos205 or --disable-exos205 was given.
--if test "${enable_exos205+set}" = set; then
--  enableval="$enable_exos205"
--
--fi;
--if test "x$enable_exos205" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EXOS205=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS exos205.o"
--fi
--
--# Check whether --enable-ni5210 or --disable-ni5210 was given.
--if test "${enable_ni5210+set}" = set; then
--  enableval="$enable_ni5210"
--
--fi;
--if test "x$enable_ni5210" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NI5210=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS ni5210.o"
--fi
--
--# Check whether --enable-lance or --disable-lance was given.
--if test "${enable_lance+set}" = set; then
--  enableval="$enable_lance"
--
--fi;
--if test "x$enable_lance" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_LANCE=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS lance.o"
--fi
--
--# Check whether --enable-ne2100 or --disable-ne2100 was given.
--if test "${enable_ne2100+set}" = set; then
--  enableval="$enable_ne2100"
--
--fi;
--if test "x$enable_ne2100" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NE2100=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS ne2100.o"
--fi
--
--# Check whether --enable-ni6510 or --disable-ni6510 was given.
--if test "${enable_ni6510+set}" = set; then
--  enableval="$enable_ni6510"
--
--fi;
--if test "x$enable_ni6510" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NI6510=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS ni6510.o"
--fi
--
--# Check whether --enable-natsemi or --disable-natsemi was given.
--if test "${enable_natsemi+set}" = set; then
--  enableval="$enable_natsemi"
--
--fi;
--if test "x$enable_natsemi" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NATSEMI=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS natsemi.o"
--fi
--
--# Check whether --enable-ni5010 or --disable-ni5010 was given.
--if test "${enable_ni5010+set}" = set; then
--  enableval="$enable_ni5010"
--
--fi;
--if test "x$enable_ni5010" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NI5010=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS ni5010.o"
--fi
--
--# Check whether --enable-3c503 or --disable-3c503 was given.
--if test "${enable_3c503+set}" = set; then
--  enableval="$enable_3c503"
--
--fi;
--if test "x$enable_3c503" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C503=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c503.o"
--fi
--
--# Check whether --enable-ne or --disable-ne was given.
--if test "${enable_ne+set}" = set; then
--  enableval="$enable_ne"
--
--fi;
--if test "x$enable_ne" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NE=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS ne.o"
--fi
--
--# Check whether --enable-ns8390 or --disable-ns8390 was given.
--if test "${enable_ns8390+set}" = set; then
--  enableval="$enable_ns8390"
--
--fi;
--if test "x$enable_ns8390" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NS8390=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS ns8390.o"
--fi
--
--# Check whether --enable-wd or --disable-wd was given.
--if test "${enable_wd+set}" = set; then
--  enableval="$enable_wd"
--
--fi;
--if test "x$enable_wd" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_WD=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS wd.o"
--fi
--
--# Check whether --enable-otulip or --disable-otulip was given.
--if test "${enable_otulip+set}" = set; then
--  enableval="$enable_otulip"
--
--fi;
--if test "x$enable_otulip" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_OTULIP=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS otulip.o"
--fi
--
--# Check whether --enable-rtl8139 or --disable-rtl8139 was given.
--if test "${enable_rtl8139+set}" = set; then
--  enableval="$enable_rtl8139"
--
--fi;
--if test "x$enable_rtl8139" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_RTL8139=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS rtl8139.o"
--fi
--
--# Check whether --enable-sis900 or --disable-sis900 was given.
--if test "${enable_sis900+set}" = set; then
--  enableval="$enable_sis900"
--
--fi;
--if test "x$enable_sis900" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_SIS900=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS sis900.o"
--fi
--
--# Check whether --enable-sk-g16 or --disable-sk-g16 was given.
--if test "${enable_sk_g16+set}" = set; then
--  enableval="$enable_sk_g16"
--
--fi;
--if test "x$enable_sk_g16" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_SK_G16=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS sk_g16.o"
--fi
--
--# Check whether --enable-smc9000 or --disable-smc9000 was given.
--if test "${enable_smc9000+set}" = set; then
--  enableval="$enable_smc9000"
--
--fi;
--if test "x$enable_smc9000" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_SMC9000=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS smc9000.o"
--fi
--
--# Check whether --enable-tiara or --disable-tiara was given.
--if test "${enable_tiara+set}" = set; then
--  enableval="$enable_tiara"
--
--fi;
--if test "x$enable_tiara" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_TIARA=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS tiara.o"
--fi
--
--# Check whether --enable-tulip or --disable-tulip was given.
--if test "${enable_tulip+set}" = set; then
--  enableval="$enable_tulip"
--
--fi;
--if test "x$enable_tulip" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_TULIP=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS tulip.o"
--fi
--
--# Check whether --enable-via-rhine or --disable-via-rhine was given.
--if test "${enable_via_rhine+set}" = set; then
--  enableval="$enable_via_rhine"
--
--fi;
--if test "x$enable_via_rhine" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_VIA_RHINE=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS via_rhine.o"
--fi
--
--# Check whether --enable-w89c840 or --disable-w89c840 was given.
--if test "${enable_w89c840+set}" = set; then
--  enableval="$enable_w89c840"
--
--fi;
--if test "x$enable_w89c840" = xyes; then
--  NET_CFLAGS="$NET_CFLAGS -DINCLUDE_W89C840=1"
--  NETBOOT_DRIVERS="$NETBOOT_DRIVERS w89c840.o"
--fi
--
--
--
--if test "x$NET_CFLAGS" != x; then
--  NETBOOT_SUPPORT_TRUE=
--  NETBOOT_SUPPORT_FALSE='#'
--else
--  NETBOOT_SUPPORT_TRUE='#'
--  NETBOOT_SUPPORT_FALSE=
--fi
--
--if test "x$NET_CFLAGS" != x; then
--  FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_TFTP=1"
--fi
--
--# Check whether --enable-3c503-shmem or --disable-3c503-shmem was given.
--if test "${enable_3c503_shmem+set}" = set; then
--  enableval="$enable_3c503_shmem"
--
--fi;
--if test "x$enable_3c503_shmem" = xyes; then
--  NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DT503_SHMEM=1"
--fi
--
--# Check whether --enable-3c503-aui or --disable-3c503-aui was given.
--if test "${enable_3c503_aui+set}" = set; then
--  enableval="$enable_3c503_aui"
--
--fi;
--if test "x$enable_3c503_aui" = xyes; then
--  NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DT503_AUI=1"
--fi
--
--# Check whether --enable-compex-rl2000-fix or --disable-compex-rl2000-fix was given.
--if test "${enable_compex_rl2000_fix+set}" = set; then
--  enableval="$enable_compex_rl2000_fix"
--
--fi;
--if test "x$enable_compex_rl2000_fix" = xyes; then
--  NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCOMPEX_RL2000_FIX=1"
--fi
--
--# Check whether --enable-smc9000-scan or --disable-smc9000-scan was given.
--if test "${enable_smc9000_scan+set}" = set; then
--  enableval="$enable_smc9000_scan"
--  NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DSMC9000_SCAN=$enable_smc9000_scan"
--fi;
--
--# Check whether --enable-ne-scan or --disable-ne-scan was given.
--if test "${enable_ne_scan+set}" = set; then
--  enableval="$enable_ne_scan"
--  NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DNE_SCAN=$enable_ne_scan"
--else
--  NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DNE_SCAN=0x280,0x300,0x320,0x340"
--fi;
--
--# Check whether --enable-wd-default-mem or --disable-wd-default-mem was given.
--if test "${enable_wd_default_mem+set}" = set; then
--  enableval="$enable_wd_default_mem"
--  NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DWD_DEFAULT_MEM=$enable_wd_default_mem"
--else
--  NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DWD_DEFAULT_MEM=0xCC000"
--fi;
--
--# Check whether --enable-cs-scan or --disable-cs-scan was given.
--if test "${enable_cs_scan+set}" = set; then
--  enableval="$enable_cs_scan"
--  NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCS_SCAN=$enable_cs_scan"
--fi;
--
--# Check whether --enable-diskless or --disable-diskless was given.
--if test "${enable_diskless+set}" = set; then
--  enableval="$enable_diskless"
--
--fi;
--
--
--if test "x$enable_diskless" = xyes; then
--  DISKLESS_SUPPORT_TRUE=
--  DISKLESS_SUPPORT_FALSE='#'
--else
--  DISKLESS_SUPPORT_TRUE='#'
--  DISKLESS_SUPPORT_FALSE=
--fi
--
--
--# Check whether --enable-hercules or --disable-hercules was given.
--if test "${enable_hercules+set}" = set; then
--  enableval="$enable_hercules"
--
--fi;
--
--
--if test "x$enable_hercules" != xno; then
--  HERCULES_SUPPORT_TRUE=
--  HERCULES_SUPPORT_FALSE='#'
--else
--  HERCULES_SUPPORT_TRUE='#'
--  HERCULES_SUPPORT_FALSE=
--fi
--
--
--# Check whether --enable-serial or --disable-serial was given.
--if test "${enable_serial+set}" = set; then
--  enableval="$enable_serial"
--
--fi;
--
--
--if test "x$enable_serial" != xno; then
--  SERIAL_SUPPORT_TRUE=
--  SERIAL_SUPPORT_FALSE='#'
--else
--  SERIAL_SUPPORT_TRUE='#'
--  SERIAL_SUPPORT_FALSE=
--fi
--
--
--# Check whether --enable-serial-speed-simulation or --disable-serial-speed-simulation was given.
--if test "${enable_serial_speed_simulation+set}" = set; then
--  enableval="$enable_serial_speed_simulation"
--
--fi;
--
--
--if test "x$enable_serial_speed_simulation" = xyes; then
--  SERIAL_SPEED_SIMULATION_TRUE=
--  SERIAL_SPEED_SIMULATION_FALSE='#'
--else
--  SERIAL_SPEED_SIMULATION_TRUE='#'
--  SERIAL_SPEED_SIMULATION_FALSE=
--fi
--
--
--# Sanity check.
--if test "x$enable_diskless" = xyes; then
--  if test "x$NET_CFLAGS" = x; then
--    { { echo "$as_me:$LINENO: error: You must enable at least one network driver" >&5
--echo "$as_me: error: You must enable at least one network driver" >&2;}
--   { (exit 1); exit 1; }; }
--  fi
--fi
--
--# Check whether --enable-preset-menu or --disable-preset-menu was given.
--if test "${enable_preset_menu+set}" = set; then
--  enableval="$enable_preset_menu"
--
--fi;
--if test "x$enable_preset_menu" = x; then
--  :
--else
--  if test -r $enable_preset_menu; then
--
--# Because early versions of GNU sed 3.x are too buggy, use a C program
--# instead of shell commands. *sigh*
--cat >conftest.c <<\EOF
--#include <stdio.h>
--
--int
--main (void)
--{
--  int c;
--
--  while ((c = getchar ()) != EOF)
--    {
--      switch (c)
--        {
--      case '\n':
--        fputs ("\\n", stdout);
--        break;
--      case '\r':
--        fputs ("\\r", stdout);
--        break;
--      case '\\':
--        fputs ("\\\\", stdout);
--        break;
--      case '"':
--        fputs ("\\\"", stdout);
--        break;
--      default:
--        putchar (c);
--      }
--    }
--
--  return 0;
--}
--EOF
--
--if { ac_try='${CC-cc} ${CFLAGS} conftest.c -o conftest'
--  { (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); }; } && test -s conftest; then
--  grub_tmp_value=`./conftest < "$enable_preset_menu"`
--else
--  { { echo "$as_me:$LINENO: error: ${CC-cc} failed to produce an executable file" >&5
--echo "$as_me: error: ${CC-cc} failed to produce an executable file" >&2;}
--   { (exit 1); exit 1; }; }
--fi
--
--
--cat >>confdefs.h <<_ACEOF
--#define PRESET_MENU_STRING "$grub_tmp_value"
--_ACEOF
--
--rm -f conftest*
--
--  else
--    { { echo "$as_me:$LINENO: error: Cannot read the preset menu file $enable_preset_menu" >&5
--echo "$as_me: error: Cannot read the preset menu file $enable_preset_menu" >&2;}
--   { (exit 1); exit 1; }; }
--  fi
--fi
--
--# Check whether --enable-example-kernel or --disable-example-kernel was given.
--if test "${enable_example_kernel+set}" = set; then
--  enableval="$enable_example_kernel"
--
--fi;
--
--
--if test "x$enable_example_kernel" = xyes; then
--  BUILD_EXAMPLE_KERNEL_TRUE=
--  BUILD_EXAMPLE_KERNEL_FALSE='#'
--else
--  BUILD_EXAMPLE_KERNEL_TRUE='#'
--  BUILD_EXAMPLE_KERNEL_FALSE=
--fi
--
--
--# Check whether --enable-auto-linux-mem-opt or --disable-auto-linux-mem-opt was given.
--if test "${enable_auto_linux_mem_opt+set}" = set; then
--  enableval="$enable_auto_linux_mem_opt"
--
--fi;
--if test "x$enable_auto_linux_mem_opt" = xno; then
--  :
--else
--
--cat >>confdefs.h <<\_ACEOF
--#define AUTO_LINUX_MEM_OPT 1
--_ACEOF
--
--fi
--
--
--
--
--
--
--CCASFLAGS='$(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)'
--
--
--
--                                                                                                                                  ac_config_files="$ac_config_files Makefile stage1/Makefile stage2/Makefile docs/Makefile lib/Makefile util/Makefile grub/Makefile netboot/Makefile util/grub-image util/grub-install util/grub-md5-crypt util/grub-terminfo util/grub-set-default"
--
--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 "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
--  { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
--Usually this means the macro was only invoked conditionally." >&5
--echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
--Usually this means the macro was only invoked conditionally." >&2;}
--   { (exit 1); exit 1; }; }
--fi
--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
--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
--if test -z "${NETBOOT_SUPPORT_TRUE}" && test -z "${NETBOOT_SUPPORT_FALSE}"; then
--  { { echo "$as_me:$LINENO: error: conditional \"NETBOOT_SUPPORT\" was never defined.
--Usually this means the macro was only invoked conditionally." >&5
--echo "$as_me: error: conditional \"NETBOOT_SUPPORT\" was never defined.
--Usually this means the macro was only invoked conditionally." >&2;}
--   { (exit 1); exit 1; }; }
--fi
--if test -z "${DISKLESS_SUPPORT_TRUE}" && test -z "${DISKLESS_SUPPORT_FALSE}"; then
--  { { echo "$as_me:$LINENO: error: conditional \"DISKLESS_SUPPORT\" was never defined.
--Usually this means the macro was only invoked conditionally." >&5
--echo "$as_me: error: conditional \"DISKLESS_SUPPORT\" was never defined.
--Usually this means the macro was only invoked conditionally." >&2;}
--   { (exit 1); exit 1; }; }
--fi
--if test -z "${HERCULES_SUPPORT_TRUE}" && test -z "${HERCULES_SUPPORT_FALSE}"; then
--  { { echo "$as_me:$LINENO: error: conditional \"HERCULES_SUPPORT\" was never defined.
--Usually this means the macro was only invoked conditionally." >&5
--echo "$as_me: error: conditional \"HERCULES_SUPPORT\" was never defined.
--Usually this means the macro was only invoked conditionally." >&2;}
--   { (exit 1); exit 1; }; }
--fi
--if test -z "${SERIAL_SUPPORT_TRUE}" && test -z "${SERIAL_SUPPORT_FALSE}"; then
--  { { echo "$as_me:$LINENO: error: conditional \"SERIAL_SUPPORT\" was never defined.
--Usually this means the macro was only invoked conditionally." >&5
--echo "$as_me: error: conditional \"SERIAL_SUPPORT\" was never defined.
--Usually this means the macro was only invoked conditionally." >&2;}
--   { (exit 1); exit 1; }; }
--fi
--if test -z "${SERIAL_SPEED_SIMULATION_TRUE}" && test -z "${SERIAL_SPEED_SIMULATION_FALSE}"; then
--  { { echo "$as_me:$LINENO: error: conditional \"SERIAL_SPEED_SIMULATION\" was never defined.
--Usually this means the macro was only invoked conditionally." >&5
--echo "$as_me: error: conditional \"SERIAL_SPEED_SIMULATION\" was never defined.
--Usually this means the macro was only invoked conditionally." >&2;}
--   { (exit 1); exit 1; }; }
--fi
--if test -z "${BUILD_EXAMPLE_KERNEL_TRUE}" && test -z "${BUILD_EXAMPLE_KERNEL_FALSE}"; then
--  { { echo "$as_me:$LINENO: error: conditional \"BUILD_EXAMPLE_KERNEL\" was never defined.
--Usually this means the macro was only invoked conditionally." >&5
--echo "$as_me: error: conditional \"BUILD_EXAMPLE_KERNEL\" 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 GRUB $as_me 0.97, which was
--generated by GNU Autoconf 2.59.  Invocation command line was
--
--  CONFIG_FILES    = $CONFIG_FILES
--  CONFIG_HEADERS  = $CONFIG_HEADERS
--  CONFIG_LINKS    = $CONFIG_LINKS
--  CONFIG_COMMANDS = $CONFIG_COMMANDS
--  $ $0 $@
--
--_CSEOF
--echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
--echo >&5
--_ACEOF
--
--# Files that config.status was made for.
--if test -n "$ac_config_files"; then
--  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
--fi
--
--if test -n "$ac_config_headers"; then
--  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
--fi
--
--if test -n "$ac_config_links"; then
--  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
--fi
--
--if test -n "$ac_config_commands"; then
--  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
--fi
--
--cat >>$CONFIG_STATUS <<\_ACEOF
--
--ac_cs_usage="\
--\`$as_me' instantiates files from templates according to the
--current configuration.
--
--Usage: $0 [OPTIONS] [FILE]...
--
--  -h, --help       print this help, then exit
--  -V, --version    print version number, then exit
--  -q, --quiet      do not print progress messages
--  -d, --debug      don't remove temporary files
--      --recheck    update $as_me by reconfiguring in the same conditions
--  --file=FILE[:TEMPLATE]
--                 instantiate the configuration file FILE
--  --header=FILE[:TEMPLATE]
--                 instantiate the configuration header FILE
--
--Configuration files:
--$config_files
--
--Configuration headers:
--$config_headers
--
--Configuration commands:
--$config_commands
--
--Report bugs to <bug-autoconf@gnu.org>."
--_ACEOF
--
--cat >>$CONFIG_STATUS <<_ACEOF
--ac_cs_version="\\
--GRUB config.status 0.97
--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" ;;
--  "stage1/Makefile" ) CONFIG_FILES="$CONFIG_FILES stage1/Makefile" ;;
--  "stage2/Makefile" ) CONFIG_FILES="$CONFIG_FILES stage2/Makefile" ;;
--  "docs/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;;
--  "lib/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
--  "util/Makefile" ) CONFIG_FILES="$CONFIG_FILES util/Makefile" ;;
--  "grub/Makefile" ) CONFIG_FILES="$CONFIG_FILES grub/Makefile" ;;
--  "netboot/Makefile" ) CONFIG_FILES="$CONFIG_FILES netboot/Makefile" ;;
--  "util/grub-image" ) CONFIG_FILES="$CONFIG_FILES util/grub-image" ;;
--  "util/grub-install" ) CONFIG_FILES="$CONFIG_FILES util/grub-install" ;;
--  "util/grub-md5-crypt" ) CONFIG_FILES="$CONFIG_FILES util/grub-md5-crypt" ;;
--  "util/grub-terminfo" ) CONFIG_FILES="$CONFIG_FILES util/grub-terminfo" ;;
--  "util/grub-set-default" ) CONFIG_FILES="$CONFIG_FILES util/grub-set-default" ;;
--  "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
--  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS 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,@build@,$build,;t t
--s,@build_cpu@,$build_cpu,;t t
--s,@build_vendor@,$build_vendor,;t t
--s,@build_os@,$build_os,;t t
--s,@host@,$host,;t t
--s,@host_cpu@,$host_cpu,;t t
--s,@host_vendor@,$host_vendor,;t t
--s,@host_os@,$host_os,;t t
--s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
--s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
--s,@MAINT@,$MAINT,;t t
--s,@PERL@,$PERL,;t t
--s,@CC@,$CC,;t t
--s,@ac_ct_CC@,$ac_ct_CC,;t t
--s,@CFLAGS@,$CFLAGS,;t t
--s,@LDFLAGS@,$LDFLAGS,;t t
--s,@CPPFLAGS@,$CPPFLAGS,;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,@CCAS@,$CCAS,;t t
--s,@RANLIB@,$RANLIB,;t t
--s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
--s,@STAGE1_CFLAGS@,$STAGE1_CFLAGS,;t t
--s,@STAGE2_CFLAGS@,$STAGE2_CFLAGS,;t t
--s,@GRUB_CFLAGS@,$GRUB_CFLAGS,;t t
--s,@OBJCOPY@,$OBJCOPY,;t t
--s,@ac_ct_OBJCOPY@,$ac_ct_OBJCOPY,;t t
--s,@GRUB_LIBS@,$GRUB_LIBS,;t t
--s,@CPP@,$CPP,;t t
--s,@EGREP@,$EGREP,;t t
--s,@NETBOOT_SUPPORT_TRUE@,$NETBOOT_SUPPORT_TRUE,;t t
--s,@NETBOOT_SUPPORT_FALSE@,$NETBOOT_SUPPORT_FALSE,;t t
--s,@DISKLESS_SUPPORT_TRUE@,$DISKLESS_SUPPORT_TRUE,;t t
--s,@DISKLESS_SUPPORT_FALSE@,$DISKLESS_SUPPORT_FALSE,;t t
--s,@HERCULES_SUPPORT_TRUE@,$HERCULES_SUPPORT_TRUE,;t t
--s,@HERCULES_SUPPORT_FALSE@,$HERCULES_SUPPORT_FALSE,;t t
--s,@SERIAL_SUPPORT_TRUE@,$SERIAL_SUPPORT_TRUE,;t t
--s,@SERIAL_SUPPORT_FALSE@,$SERIAL_SUPPORT_FALSE,;t t
--s,@SERIAL_SPEED_SIMULATION_TRUE@,$SERIAL_SPEED_SIMULATION_TRUE,;t t
--s,@SERIAL_SPEED_SIMULATION_FALSE@,$SERIAL_SPEED_SIMULATION_FALSE,;t t
--s,@BUILD_EXAMPLE_KERNEL_TRUE@,$BUILD_EXAMPLE_KERNEL_TRUE,;t t
--s,@BUILD_EXAMPLE_KERNEL_FALSE@,$BUILD_EXAMPLE_KERNEL_FALSE,;t t
--s,@FSYS_CFLAGS@,$FSYS_CFLAGS,;t t
--s,@NET_CFLAGS@,$NET_CFLAGS,;t t
--s,@NET_EXTRAFLAGS@,$NET_EXTRAFLAGS,;t t
--s,@NETBOOT_DRIVERS@,$NETBOOT_DRIVERS,;t t
--s,@CCASFLAGS@,$CCASFLAGS,;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
--
--  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
--  # 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; }
--_ACEOF
--cat >>$CONFIG_STATUS <<_ACEOF
--  sed "$ac_vpsub
--$extrasub
--_ACEOF
--cat >>$CONFIG_STATUS <<\_ACEOF
--:t
--/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
--s,@configure_input@,$configure_input,;t t
--s,@srcdir@,$ac_srcdir,;t t
--s,@abs_srcdir@,$ac_abs_srcdir,;t t
--s,@top_srcdir@,$ac_top_srcdir,;t t
--s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
--s,@builddir@,$ac_builddir,;t t
--s,@abs_builddir@,$ac_abs_builddir,;t t
--s,@top_builddir@,$ac_top_builddir,;t t
--s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
--s,@INSTALL@,$ac_INSTALL,;t t
--" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
--  rm -f $tmp/stdin
--  if test x"$ac_file" != x-; then
--    mv $tmp/out $ac_file
--  else
--    cat $tmp/out
--    rm -f $tmp/out
--  fi
--
--done
--_ACEOF
--cat >>$CONFIG_STATUS <<\_ACEOF
--
--#
--# CONFIG_HEADER section.
--#
--
--# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
--# NAME is the cpp macro being defined and VALUE is the value it is being given.
--#
--# ac_d sets the value in "#define NAME VALUE" lines.
--ac_dA='s,^\([  ]*\)#\([        ]*define[       ][      ]*\)'
--ac_dB='[       ].*$,\1#\2'
--ac_dC=' '
--ac_dD=',;t'
--# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
--ac_uA='s,^\([  ]*\)#\([        ]*\)undef\([    ][      ]*\)'
--ac_uB='$,\1#\2define\3'
--ac_uC=' '
--ac_uD=',;t'
--
--for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
--  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
--  case $ac_file in
--  - | *:- | *:-:* ) # input from stdin
--      cat >$tmp/stdin
--      ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
--      ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
--  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
--      ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
--  * )   ac_file_in=$ac_file.in ;;
--  esac
--
--  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
--echo "$as_me: creating $ac_file" >&6;}
--
--  # First look for the input files in the build tree, otherwise in the
--  # src tree.
--  ac_file_inputs=`IFS=:
--    for f in $ac_file_in; do
--      case $f in
--      -) echo $tmp/stdin ;;
--      [\\/$]*)
--       # Absolute (can't be DOS-style, as IFS=:)
--       test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
--echo "$as_me: error: cannot find input file: $f" >&2;}
--   { (exit 1); exit 1; }; }
--       # Do quote $f, to prevent DOS paths from being IFS'd.
--       echo "$f";;
--      *) # Relative
--       if test -f "$f"; then
--         # Build tree
--         echo "$f"
--       elif test -f "$srcdir/$f"; then
--         # Source tree
--         echo "$srcdir/$f"
--       else
--         # /dev/null tree
--         { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
--echo "$as_me: error: cannot find input file: $f" >&2;}
--   { (exit 1); exit 1; }; }
--       fi;;
--      esac
--    done` || { (exit 1); exit 1; }
--  # Remove the trailing spaces.
--  sed 's/[     ]*$//' $ac_file_inputs >$tmp/in
--
--_ACEOF
--
--# Transform confdefs.h into two sed scripts, `conftest.defines' and
--# `conftest.undefs', that substitutes the proper values into
--# config.h.in to produce config.h.  The first handles `#define'
--# templates, and the second `#undef' templates.
--# And first: Protect against being on the right side of a sed subst in
--# config.status.  Protect against being in an unquoted here document
--# in config.status.
--rm -f conftest.defines conftest.undefs
--# Using a here document instead of a string reduces the quoting nightmare.
--# Putting comments in sed scripts is not portable.
--#
--# `end' is used to avoid that the second main sed command (meant for
--# 0-ary CPP macros) applies to n-ary macro definitions.
--# See the Autoconf documentation for `clear'.
--cat >confdef2sed.sed <<\_ACEOF
--s/[\\&,]/\\&/g
--s,[\\$`],\\&,g
--t clear
--: clear
--s,^[   ]*#[    ]*define[       ][      ]*\([^  (][^    (]*\)\(([^)]*)\)[       ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
--t end
--s,^[   ]*#[    ]*define[       ][      ]*\([^  ][^     ]*\)[   ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
--: end
--_ACEOF
--# If some macros were called several times there might be several times
--# the same #defines, which is useless.  Nevertheless, we may not want to
--# sort them, since we want the *last* AC-DEFINE to be honored.
--uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
--sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
--rm -f confdef2sed.sed
--
--# This sed command replaces #undef with comments.  This is necessary, for
--# example, in the case of _POSIX_SOURCE, which is predefined and required
--# on some systems where configure will not decide to define it.
--cat >>conftest.undefs <<\_ACEOF
--s,^[   ]*#[    ]*undef[        ][      ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
--_ACEOF
--
--# Break up conftest.defines because some shells have a limit on the size
--# of here documents, and old seds have small limits too (100 cmds).
--echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
--echo '  if grep "^[    ]*#[    ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
--echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
--echo '  :' >>$CONFIG_STATUS
--rm -f conftest.tail
--while grep . conftest.defines >/dev/null
--do
--  # Write a limited-size here document to $tmp/defines.sed.
--  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
--  # Speed up: don't consider the non `#define' lines.
--  echo '/^[    ]*#[    ]*define/!b' >>$CONFIG_STATUS
--  # Work around the forget-to-reset-the-flag bug.
--  echo 't clr' >>$CONFIG_STATUS
--  echo ': clr' >>$CONFIG_STATUS
--  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
--  echo 'CEOF
--  sed -f $tmp/defines.sed $tmp/in >$tmp/out
--  rm -f $tmp/in
--  mv $tmp/out $tmp/in
--' >>$CONFIG_STATUS
--  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
--  rm -f conftest.defines
--  mv conftest.tail conftest.defines
--done
--rm -f conftest.defines
--echo '  fi # grep' >>$CONFIG_STATUS
--echo >>$CONFIG_STATUS
--
--# Break up conftest.undefs because some shells have a limit on the size
--# of here documents, and old seds have small limits too (100 cmds).
--echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
--rm -f conftest.tail
--while grep . conftest.undefs >/dev/null
--do
--  # Write a limited-size here document to $tmp/undefs.sed.
--  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
--  # Speed up: don't consider the non `#undef'
--  echo '/^[    ]*#[    ]*undef/!b' >>$CONFIG_STATUS
--  # Work around the forget-to-reset-the-flag bug.
--  echo 't clr' >>$CONFIG_STATUS
--  echo ': clr' >>$CONFIG_STATUS
--  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
--  echo 'CEOF
--  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
--  rm -f $tmp/in
--  mv $tmp/out $tmp/in
--' >>$CONFIG_STATUS
--  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
--  rm -f conftest.undefs
--  mv conftest.tail conftest.undefs
--done
--rm -f conftest.undefs
--
--cat >>$CONFIG_STATUS <<\_ACEOF
--  # Let's still pretend it is `configure' which instantiates (i.e., don't
--  # use $as_me), people would be surprised to read:
--  #    /* config.h.  Generated by config.status.  */
--  if test x"$ac_file" = x-; then
--    echo "/* Generated by configure.  */" >$tmp/config.h
--  else
--    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
--  fi
--  cat $tmp/in >>$tmp/config.h
--  rm -f $tmp/in
--  if test x"$ac_file" != x-; then
--    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
--      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
--echo "$as_me: $ac_file is unchanged" >&6;}
--    else
--      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
--$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
--       X"$ac_file" : 'X\(//\)[^/]' \| \
--       X"$ac_file" : 'X\(//\)$' \| \
--       X"$ac_file" : 'X\(/\)' \| \
--       .     : '\(.\)' 2>/dev/null ||
--echo X"$ac_file" |
--    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
--        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--        /^X\(\/\/\)$/{ s//\1/; q; }
--        /^X\(\/\).*/{ s//\1/; q; }
--        s/.*/./; q'`
--      { if $as_mkdir_p; then
--    mkdir -p "$ac_dir"
--  else
--    as_dir="$ac_dir"
--    as_dirs=
--    while test ! -d "$as_dir"; do
--      as_dirs="$as_dir $as_dirs"
--      as_dir=`(dirname "$as_dir") 2>/dev/null ||
--$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
--       X"$as_dir" : 'X\(//\)[^/]' \| \
--       X"$as_dir" : 'X\(//\)$' \| \
--       X"$as_dir" : 'X\(/\)' \| \
--       .     : '\(.\)' 2>/dev/null ||
--echo X"$as_dir" |
--    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
--        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--        /^X\(\/\/\)$/{ s//\1/; q; }
--        /^X\(\/\).*/{ s//\1/; q; }
--        s/.*/./; q'`
--    done
--    test ! -n "$as_dirs" || mkdir $as_dirs
--  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
--echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
--   { (exit 1); exit 1; }; }; }
--
--      rm -f $ac_file
--      mv $tmp/config.h $ac_file
--    fi
--  else
--    cat $tmp/config.h
--    rm -f $tmp/config.h
--  fi
--# Compute $ac_file's index in $config_headers.
--_am_stamp_count=1
--for _am_header in $config_headers :; do
--  case $_am_header in
--    $ac_file | $ac_file:* )
--      break ;;
--    * )
--      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
--  esac
--done
--echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
--$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
--       X$ac_file : 'X\(//\)[^/]' \| \
--       X$ac_file : 'X\(//\)$' \| \
--       X$ac_file : 'X\(/\)' \| \
--       .     : '\(.\)' 2>/dev/null ||
--echo X$ac_file |
--    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
--        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--        /^X\(\/\/\)$/{ s//\1/; q; }
--        /^X\(\/\).*/{ s//\1/; q; }
--        s/.*/./; q'`/stamp-h$_am_stamp_count
--done
--_ACEOF
--cat >>$CONFIG_STATUS <<\_ACEOF
--
--#
--# CONFIG_COMMANDS section.
--#
--for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
--  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
--  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
--  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
--$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
--       X"$ac_dest" : 'X\(//\)[^/]' \| \
--       X"$ac_dest" : 'X\(//\)$' \| \
--       X"$ac_dest" : 'X\(/\)' \| \
--       .     : '\(.\)' 2>/dev/null ||
--echo X"$ac_dest" |
--    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
--        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--        /^X\(\/\/\)$/{ s//\1/; q; }
--        /^X\(\/\).*/{ s//\1/; q; }
--        s/.*/./; q'`
--  { if $as_mkdir_p; then
--    mkdir -p "$ac_dir"
--  else
--    as_dir="$ac_dir"
--    as_dirs=
--    while test ! -d "$as_dir"; do
--      as_dirs="$as_dir $as_dirs"
--      as_dir=`(dirname "$as_dir") 2>/dev/null ||
--$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
--       X"$as_dir" : 'X\(//\)[^/]' \| \
--       X"$as_dir" : 'X\(//\)$' \| \
--       X"$as_dir" : 'X\(/\)' \| \
--       .     : '\(.\)' 2>/dev/null ||
--echo X"$as_dir" |
--    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
--        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--        /^X\(\/\/\)$/{ s//\1/; q; }
--        /^X\(\/\).*/{ s//\1/; q; }
--        s/.*/./; q'`
--    done
--    test ! -n "$as_dirs" || mkdir $as_dirs
--  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
--echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
--   { (exit 1); exit 1; }; }; }
--
--  ac_builddir=.
--
--if test "$ac_dir" != .; then
--  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
--  # A "../" for each directory in $ac_dir_suffix.
--  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
--else
--  ac_dir_suffix= ac_top_builddir=
--fi
--
--case $srcdir in
--  .)  # No --srcdir option.  We are building in place.
--    ac_srcdir=.
--    if test -z "$ac_top_builddir"; then
--       ac_top_srcdir=.
--    else
--       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
--    fi ;;
--  [\\/]* | ?:[\\/]* )  # Absolute path.
--    ac_srcdir=$srcdir$ac_dir_suffix;
--    ac_top_srcdir=$srcdir ;;
--  *) # Relative path.
--    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
--    ac_top_srcdir=$ac_top_builddir$srcdir ;;
--esac
--
--# Do not use `cd foo && pwd` to compute absolute paths, because
--# the directories may not exist.
--case `pwd` in
--.) ac_abs_builddir="$ac_dir";;
--*)
--  case "$ac_dir" in
--  .) ac_abs_builddir=`pwd`;;
--  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
--  *) ac_abs_builddir=`pwd`/"$ac_dir";;
--  esac;;
--esac
--case $ac_abs_builddir in
--.) ac_abs_top_builddir=${ac_top_builddir}.;;
--*)
--  case ${ac_top_builddir}. in
--  .) ac_abs_top_builddir=$ac_abs_builddir;;
--  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
--  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
--  esac;;
--esac
--case $ac_abs_builddir in
--.) ac_abs_srcdir=$ac_srcdir;;
--*)
--  case $ac_srcdir in
--  .) ac_abs_srcdir=$ac_abs_builddir;;
--  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
--  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
--  esac;;
--esac
--case $ac_abs_builddir in
--.) ac_abs_top_srcdir=$ac_top_srcdir;;
--*)
--  case $ac_top_srcdir in
--  .) ac_abs_top_srcdir=$ac_abs_builddir;;
--  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
--  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
--  esac;;
--esac
--
--
--  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
--echo "$as_me: executing $ac_dest commands" >&6;}
--  case $ac_dest in
--    depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
--  # Strip MF so we end up with the name of the file.
--  mf=`echo "$mf" | sed -e 's/:.*$//'`
--  # Check whether this is an Automake generated Makefile or not.
--  # We used to match only the files named `Makefile.in', but
--  # some people rename them; so instead we look at the file content.
--  # Grep'ing the first line is not enough: some people post-process
--  # each Makefile.in and add a new line on top of each file to say so.
--  # So let's grep whole file.
--  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
--    dirpart=`(dirname "$mf") 2>/dev/null ||
--$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
--       X"$mf" : 'X\(//\)[^/]' \| \
--       X"$mf" : 'X\(//\)$' \| \
--       X"$mf" : 'X\(/\)' \| \
--       .     : '\(.\)' 2>/dev/null ||
--echo X"$mf" |
--    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
--        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--        /^X\(\/\/\)$/{ s//\1/; q; }
--        /^X\(\/\).*/{ s//\1/; q; }
--        s/.*/./; q'`
--  else
--    continue
--  fi
--  # Extract the definition of DEPDIR, am__include, and am__quote
--  # from the Makefile without running `make'.
--  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
--  test -z "$DEPDIR" && continue
--  am__include=`sed -n 's/^am__include = //p' < "$mf"`
--  test -z "am__include" && continue
--  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
--  # When using ansi2knr, U may be empty or an underscore; expand it
--  U=`sed -n 's/^U = //p' < "$mf"`
--  # Find all dependency output files, they are included files with
--  # $(DEPDIR) in their names.  We invoke sed twice because it is the
--  # simplest approach to changing $(DEPDIR) to its actual value in the
--  # expansion.
--  for file in `sed -n "
--    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
--       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
--    # Make sure the directory exists.
--    test -f "$dirpart/$file" && continue
--    fdir=`(dirname "$file") 2>/dev/null ||
--$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
--       X"$file" : 'X\(//\)[^/]' \| \
--       X"$file" : 'X\(//\)$' \| \
--       X"$file" : 'X\(/\)' \| \
--       .     : '\(.\)' 2>/dev/null ||
--echo X"$file" |
--    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
--        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--        /^X\(\/\/\)$/{ s//\1/; q; }
--        /^X\(\/\).*/{ s//\1/; q; }
--        s/.*/./; q'`
--    { if $as_mkdir_p; then
--    mkdir -p $dirpart/$fdir
--  else
--    as_dir=$dirpart/$fdir
--    as_dirs=
--    while test ! -d "$as_dir"; do
--      as_dirs="$as_dir $as_dirs"
--      as_dir=`(dirname "$as_dir") 2>/dev/null ||
--$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
--       X"$as_dir" : 'X\(//\)[^/]' \| \
--       X"$as_dir" : 'X\(//\)$' \| \
--       X"$as_dir" : 'X\(/\)' \| \
--       .     : '\(.\)' 2>/dev/null ||
--echo X"$as_dir" |
--    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
--        /^X\(\/\/\)[^/].*/{ s//\1/; q; }
--        /^X\(\/\/\)$/{ s//\1/; q; }
--        /^X\(\/\).*/{ s//\1/; q; }
--        s/.*/./; q'`
--    done
--    test ! -n "$as_dirs" || mkdir $as_dirs
--  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
--echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
--   { (exit 1); exit 1; }; }; }
--
--    # echo "creating $dirpart/$file"
--    echo '# dummy' > "$dirpart/$file"
--  done
--done
-- ;;
--  esac
--done
--_ACEOF
--
--cat >>$CONFIG_STATUS <<\_ACEOF
--
--{ (exit 0); exit 0; }
--_ACEOF
--chmod +x $CONFIG_STATUS
--ac_clean_files=$ac_clean_files_save
--
--
--# configure is writing to config.log, and then calls config.status.
--# config.status does its own redirection, appending to config.log.
--# Unfortunately, on DOS this fails, as config.log is still kept open
--# by configure, so config.status won't be able to write to it; its
--# output is simply discarded.  So we exec the FD to /dev/null,
--# effectively closing config.log, so it can be properly (re)opened and
--# appended to by config.status.  When coming back to configure, we
--# need to make the FD available again.
--if test "$no_create" != yes; then
--  ac_cs_success=:
--  ac_config_status_args=
--  test "$silent" = yes &&
--    ac_config_status_args="$ac_config_status_args --quiet"
--  exec 5>/dev/null
--  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
--  exec 5>>config.log
--  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
--  # would make configure fail if this is the last instruction.
--  $ac_cs_success || { (exit 1); exit 1; }
--fi
--
-diff --git a/configure.ac b/configure.in
-similarity index 86%
-rename from configure.ac
-rename to configure.in
-index bb9e1d9..e5970af 100644
---- a/configure.ac
-+++ b/configure.in
-@@ -29,6 +29,65 @@ esac
- AC_SUBST(host_cpu)
- AC_SUBST(host_vendor)
-+# Specify the platform (such as firmware).
-+AC_ARG_WITH([platform],
-+            AS_HELP_STRING([--with-platform=PLATFORM],
-+                           [select the host platform [[guessed]]]))
-+
-+# Guess the platform if not specified.
-+if test "x$with_platform" = x; then
-+  case "$host_cpu"-"$host_vendor" in
-+    i386-*) platform=pc ;;
-+    x86_64-*) platform=pc ;;
-+    *) AC_MSG_ERROR([unsupported machine type $host_cpu-$host_vendor]) ;;
-+  esac
-+else
-+  platform="$with_platform"
-+fi
-+
-+# Sanity check.
-+case "$host_cpu"-"$platform" in
-+  i386-pc) ;;
-+  i386-efi) ;;
-+  x86_64-pc) ;;
-+  x86_64-efi) ;;
-+  *) AC_MSG_ERROR([unsupported machine type "$host_cpu"-"$platform"]) ;;
-+esac
-+
-+if test "x$platform" = xefi; then
-+  case "$host_cpu" in
-+    i386) EFI_ARCH=ia32 ;;
-+    x86_64) EFI_ARCH=x86_64 ;;
-+  *) AC_MSG_ERROR([unsupported machine type "$host_cpu"]) ;;
-+  esac
-+  AC_SUBST(EFI_ARCH)
-+fi
-+
-+gnuefi_path=${libdir}/gnuefi
-+gnuefi_crt0=${gnuefi_path}/crt0-efi-${EFI_ARCH}.o
-+if ! test -f $gnuefi_crt0 ; then
-+  gnuefi_crt0=crt0-efi.o
-+fi
-+GNUEFI_CRT0=${gnuefi_crt0}
-+AC_SUBST(GNUEFI_CRT0)
-+gnuefi_lds=${gnuefi_path}/elf_${EFI_ARCH}_efi.lds
-+if ! test -f $gnuefi_lds ; then
-+  gnuefi_lds=${EFI_ARCH}/elf_efi.lds
-+fi
-+GNUEFI_LDS=${gnuefi_lds}
-+AC_SUBST(GNUEFI_LDS)
-+LIBGNUEFI=${libdir}/libgnuefi.a
-+AC_SUBST(LIBGNUEFI)
-+LIBEFI=${libdir}/libefi.a
-+AC_SUBST(LIBEFI)
-+
-+AC_SUBST(platform)
-+AM_CONDITIONAL(PLATFORM_EFI, test "x$platform" = xefi)
-+
-+if test "x$platform" = xefi; then
-+   AC_DEFINE(PLATFORM_EFI, 1, [Define if you run on EFI platform.])
-+fi
-+
- #
- # Options
- #
-@@ -46,7 +105,7 @@ if test "x$CFLAGS" = x; then
-   default_CFLAGS=yes
- fi
--if test "x$host_cpu" = xx86_64; then
-+if test "x$platform" = xpc -a "x$host_cpu" = xx86_64; then
-   CFLAGS="-m32 $CFLAGS"
- fi
-@@ -63,6 +122,8 @@ dnl Because recent automake complains about AS, set it here.
- CCAS="$CC"
- AC_SUBST(CCAS)
-+_AM_DEPENDENCIES(CCAS)
-+
- AC_ARG_WITH(binutils,
-   [  --with-binutils=DIR     search the directory DIR to find binutils])
-@@ -114,6 +175,20 @@ if test "x$ac_cv_prog_gcc" = xyes; then
-     fi
-   fi
- fi
-+STAGE2_CFLAGS="$STAGE2_CFLAGS -isystem `$CC -print-file-name=include`"
-+
-+LIBGCC=$(gcc $CFLAGS -static-libgcc -print-libgcc-file-name)
-+AC_SUBST(LIBGCC)
-+
-+LOADER_LDFLAGS="-Wl,--build-id=none ${LIBGCC}"
-+AC_SUBST(LOADER_LDFLAGS)
-+
-+if test "x$platform" = xefi; then
-+  STAGE2_CFLAGS="$STAGE2_CFLAGS -fpic -fshort-wchar -fno-strict-aliasing -fno-merge-constants -fno-reorder-functions"
-+  if test "x$EFI_ARCH" = xx86_64; then
-+     STAGE2_CFLAGS="$STAGE2_CFLAGS -DEFI_FUNCTION_WRAPPER"
-+  fi
-+fi
- AC_SUBST(STAGE1_CFLAGS)
- AC_SUBST(STAGE2_CFLAGS)
-@@ -159,9 +234,12 @@ fi
- # Defined in acinclude.m4.
- grub_ASM_USCORE
--grub_PROG_OBJCOPY_ABSOLUTE
--if test "x$grub_cv_prog_objcopy_absolute" != xyes; then
--  AC_MSG_ERROR([GRUB requires a working absolute objcopy; upgrade your binutils])
-+
-+if test "x$platform" != xefi; then
-+  grub_PROG_OBJCOPY_ABSOLUTE
-+  if test "x$grub_cv_prog_objcopy_absolute" != xyes; then
-+    AC_MSG_ERROR([GRUB requires a working absolute objcopy; upgrade your binutils])
-+  fi
- fi
- grub_ASM_PREFIX_REQUIREMENT
-@@ -207,9 +285,9 @@ AC_CHECK_LIB(util, opendisk, [GRUB_LIBS="$GRUB_LIBS -lutil"
- # Unless the user specify --without-curses, check for curses.
- if test "x$with_curses" != "xno"; then
--  AC_CHECK_LIB(ncurses, wgetch, [GRUB_LIBS="$GRUB_LIBS -lncurses"
-+  AC_CHECK_LIB(ncurses, wgetch, [GRUB_LIBS="$GRUB_LIBS -Wl,-Bstatic -lncurses -ltinfo -Wl,-Bdynamic"
-   AC_DEFINE(HAVE_LIBCURSES, 1, [Define if you have a curses library])],
--    [AC_CHECK_LIB(curses, wgetch, [GRUB_LIBS="$GRUB_LIBS -lcurses"
-+    [AC_CHECK_LIB(curses, wgetch, [GRUB_LIBS="$GRUB_LIBS -Wl,-Bstatic -lcurses -Wl,-Bdynamic"
-        AC_DEFINE(HAVE_LIBCURSES, 1, [Define if you have a curses library])])])
- fi
-@@ -595,9 +673,18 @@ AC_ARG_ENABLE(diskless,
-   [  --enable-diskless       enable diskless support])
- AM_CONDITIONAL(DISKLESS_SUPPORT, test "x$enable_diskless" = xyes)
-+dnl Graphical splashscreen support
-+AC_ARG_ENABLE(graphics,
-+  [  --disable-graphics      disable graphics terminal support])
-+AM_CONDITIONAL(GRAPHICS_SUPPORT, test "x$enable_graphics" != xno)
-+
- dnl Hercules terminal
--AC_ARG_ENABLE(hercules,
--  [  --disable-hercules      disable hercules terminal support])
-+if test "x$platform" = xefi; then
-+  enable_hercules=no
-+else
-+  AC_ARG_ENABLE(hercules,
-+    [  --disable-hercules      disable hercules terminal support])
-+fi
- AM_CONDITIONAL(HERCULES_SUPPORT, test "x$enable_hercules" != xno)
- dnl Serial terminal
-@@ -662,9 +749,13 @@ AC_SUBST(CCASFLAGS)
- dnl Output.
-+if test "x$platform" = xefi; then
-+  AC_CONFIG_FILES([efi/Makefile])
-+  AC_CONFIG_LINKS([efi/grub/cpu:efi/grub/$host_cpu])
-+fi
- AC_CONFIG_FILES([Makefile stage1/Makefile stage2/Makefile \
-                docs/Makefile lib/Makefile util/Makefile \
--               grub/Makefile netboot/Makefile util/grub-image \
--               util/grub-install util/grub-md5-crypt \
--               util/grub-terminfo util/grub-set-default])
-+               grub/Makefile netboot/Makefile util/grub-crypt \
-+               util/grub-image util/grub-install util/grub-md5-crypt \
-+               util/grub-terminfo])
- AC_OUTPUT
-diff --git a/docs/.gitignore b/docs/.gitignore
-new file mode 100644
-index 0000000..e440faf
---- /dev/null
-+++ b/docs/.gitignore
-@@ -0,0 +1,3 @@
-+Makefile.in
-+Makefile
-+.deps
-diff --git a/docs/Makefile.am b/docs/Makefile.am
-index db99e2d..fe6b22b 100644
---- a/docs/Makefile.am
-+++ b/docs/Makefile.am
-@@ -2,7 +2,8 @@ info_TEXINFOS = grub.texi multiboot.texi
- grub_TEXINFOS = internals.texi
- EXAMPLES = boot.S kernel.c multiboot.h
- multiboot_TEXINFOS = boot.S.texi kernel.c.texi multiboot.h.texi
--man_MANS = grub.8 mbchk.1 grub-install.8 grub-md5-crypt.8 grub-terminfo.8
-+man_MANS = grub.8 mbchk.1 grub-crypt.8 grub-install.8 grub-md5-crypt.8 \
-+      grub-terminfo.8
- HELP2MAN = help2man
- SRC2TEXI = src2texi
- noinst_SCRIPTS = $(HELP2MAN) $(SRC2TEXI)
-@@ -51,6 +52,12 @@ $(srcdir)/mbchk.1: ../util/mbchk $(srcdir)/$(HELP2MAN)
-               --name="check the format of a Multiboot kernel" \
-               --section=1 --output=$@ $<
-+$(srcdir)/grub-crypt.8: ../util/grub-crypt $(srcdir)/$(HELP2MAN)
-+      chmod 755 $<
-+      $(PERL) $(srcdir)/$(HELP2MAN) \
-+              --name="Encrypt a password" \
-+              --section=8 --output=$@ $<
-+
- $(srcdir)/grub-md5-crypt.8: ../util/grub-md5-crypt $(srcdir)/$(HELP2MAN)
-       chmod 755 $<
-       $(PERL) $(srcdir)/$(HELP2MAN) \
-diff --git a/docs/Makefile.in b/docs/Makefile.in
-deleted file mode 100644
-index 3e2de4b..0000000
---- a/docs/Makefile.in
-+++ /dev/null
-@@ -1,770 +0,0 @@
--# Makefile.in generated by automake 1.9.4 from Makefile.am.
--# @configure_input@
--
--# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
--# 2003, 2004  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@
--
--
--SOURCES = $(kernel_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 = :
--build_triplet = @build@
--host_triplet = @host@
--EXTRA_PROGRAMS = kernel$(EXEEXT)
--@BUILD_EXAMPLE_KERNEL_TRUE@noinst_PROGRAMS = kernel$(EXEEXT)
--subdir = docs
--DIST_COMMON = $(grub_TEXINFOS) $(multiboot_TEXINFOS) \
--      $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
--      $(srcdir)/stamp-vti $(srcdir)/version.texi mdate-sh \
--      texinfo.tex
--ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
--am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
--      $(top_srcdir)/configure.ac
--am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
--      $(ACLOCAL_M4)
--mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
--CONFIG_HEADER = $(top_builddir)/config.h
--CONFIG_CLEAN_FILES =
--PROGRAMS = $(noinst_PROGRAMS)
--am__kernel_SOURCES_DIST = boot.S kernel.c multiboot.h
--am__objects_1 = boot.$(OBJEXT) kernel-kernel.$(OBJEXT)
--@BUILD_EXAMPLE_KERNEL_TRUE@am_kernel_OBJECTS = $(am__objects_1)
--kernel_OBJECTS = $(am_kernel_OBJECTS)
--kernel_LDADD = $(LDADD)
--SCRIPTS = $(noinst_SCRIPTS)
--DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
--depcomp = $(SHELL) $(top_srcdir)/depcomp
--am__depfiles_maybe = depfiles
--CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)
--COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
--      $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
--CCLD = $(CC)
--LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
--SOURCES = $(kernel_SOURCES)
--DIST_SOURCES = $(am__kernel_SOURCES_DIST)
--INFO_DEPS = $(srcdir)/grub.info $(srcdir)/multiboot.info
--am__TEXINFO_TEX_DIR = $(srcdir)
--DVIS = grub.dvi multiboot.dvi
--PDFS = grub.pdf multiboot.pdf
--PSS = grub.ps multiboot.ps
--HTMLS = grub.html multiboot.html
--TEXINFOS = grub.texi multiboot.texi
--TEXI2DVI = texi2dvi
--TEXI2PDF = $(TEXI2DVI) --pdf --batch
--MAKEINFOHTML = $(MAKEINFO) --html
--AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
--DVIPS = dvips
--am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \
--      "$(DESTDIR)$(man8dir)"
--man1dir = $(mandir)/man1
--man8dir = $(mandir)/man8
--NROFF = nroff
--MANS = $(man_MANS)
--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@
--BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@
--BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@
--CC = @CC@
--CCAS = @CCAS@
--CCASFLAGS = @CCASFLAGS@
--CCDEPMODE = @CCDEPMODE@
--CFLAGS = @CFLAGS@
--CPP = @CPP@
--CPPFLAGS = @CPPFLAGS@
--CYGPATH_W = @CYGPATH_W@
--DEFS = @DEFS@
--DEPDIR = @DEPDIR@
--DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@
--DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@
--ECHO_C = @ECHO_C@
--ECHO_N = @ECHO_N@
--ECHO_T = @ECHO_T@
--EGREP = @EGREP@
--EXEEXT = @EXEEXT@
--FSYS_CFLAGS = @FSYS_CFLAGS@
--GRUB_CFLAGS = @GRUB_CFLAGS@
--GRUB_LIBS = @GRUB_LIBS@
--HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@
--HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@
--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@
--MAINT = @MAINT@
--MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
--MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
--MAKEINFO = @MAKEINFO@
--NETBOOT_DRIVERS = @NETBOOT_DRIVERS@
--NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@
--NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@
--NET_CFLAGS = @NET_CFLAGS@
--NET_EXTRAFLAGS = @NET_EXTRAFLAGS@
--OBJCOPY = @OBJCOPY@
--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@
--RANLIB = @RANLIB@
--SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@
--SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@
--SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@
--SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@
--SET_MAKE = @SET_MAKE@
--SHELL = @SHELL@
--STAGE1_CFLAGS = @STAGE1_CFLAGS@
--STAGE2_CFLAGS = @STAGE2_CFLAGS@
--STRIP = @STRIP@
--VERSION = @VERSION@
--ac_ct_CC = @ac_ct_CC@
--ac_ct_OBJCOPY = @ac_ct_OBJCOPY@
--ac_ct_RANLIB = @ac_ct_RANLIB@
--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 = @build@
--build_alias = @build_alias@
--build_cpu = @build_cpu@
--build_os = @build_os@
--build_vendor = @build_vendor@
--datadir = @datadir@
--exec_prefix = @exec_prefix@
--host = @host@
--host_alias = @host_alias@
--host_cpu = @host_cpu@
--host_os = @host_os@
--host_vendor = @host_vendor@
--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@
--info_TEXINFOS = grub.texi multiboot.texi
--grub_TEXINFOS = internals.texi
--EXAMPLES = boot.S kernel.c multiboot.h
--multiboot_TEXINFOS = boot.S.texi kernel.c.texi multiboot.h.texi
--man_MANS = grub.8 mbchk.1 grub-install.8 grub-md5-crypt.8 grub-terminfo.8
--HELP2MAN = help2man
--SRC2TEXI = src2texi
--noinst_SCRIPTS = $(HELP2MAN) $(SRC2TEXI)
--@BUILD_EXAMPLE_KERNEL_TRUE@kernel_SOURCES = $(EXAMPLES)
--@BUILD_EXAMPLE_KERNEL_TRUE@kernel_CFLAGS = -fno-builtin -nostdinc -O -g -Wall \
--@BUILD_EXAMPLE_KERNEL_TRUE@   -imacros $(top_builddir)/config.h
--
--@BUILD_EXAMPLE_KERNEL_TRUE@kernel_LDFLAGS = -nostdlib -Wl,-N -Wl,-Ttext -Wl,100000
--EXTRA_DIST = menu.lst $(man_MANS) $(noinst_SCRIPTS) \
--      $(EXAMPLES) $(multiboot_TEXINFOS)
--
--CLEANFILES = $(noinst_PROGRAMS)
--all: all-am
--
--.SUFFIXES:
--.SUFFIXES: .S .c .dvi .html .info .o .obj .pdf .ps .texi
--$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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  docs/Makefile'; \
--      cd $(top_srcdir) && \
--        $(AUTOMAKE) --gnu  docs/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
--      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
--$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
--      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
--
--clean-noinstPROGRAMS:
--      -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
--kernel$(EXEEXT): $(kernel_OBJECTS) $(kernel_DEPENDENCIES) 
--      @rm -f kernel$(EXEEXT)
--      $(LINK) $(kernel_LDFLAGS) $(kernel_OBJECTS) $(kernel_LDADD) $(LIBS)
--
--mostlyclean-compile:
--      -rm -f *.$(OBJEXT)
--
--distclean-compile:
--      -rm -f *.tab.c
--
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kernel-kernel.Po@am__quote@
--
--.S.o:
--      $(CCASCOMPILE) -c $<
--
--.S.obj:
--      $(CCASCOMPILE) -c `$(CYGPATH_W) '$<'`
--
--.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) '$<'`
--
--kernel-kernel.o: kernel.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kernel_CFLAGS) $(CFLAGS) -MT kernel-kernel.o -MD -MP -MF "$(DEPDIR)/kernel-kernel.Tpo" -c -o kernel-kernel.o `test -f 'kernel.c' || echo '$(srcdir)/'`kernel.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/kernel-kernel.Tpo" "$(DEPDIR)/kernel-kernel.Po"; else rm -f "$(DEPDIR)/kernel-kernel.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='kernel.c' object='kernel-kernel.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kernel_CFLAGS) $(CFLAGS) -c -o kernel-kernel.o `test -f 'kernel.c' || echo '$(srcdir)/'`kernel.c
--
--kernel-kernel.obj: kernel.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kernel_CFLAGS) $(CFLAGS) -MT kernel-kernel.obj -MD -MP -MF "$(DEPDIR)/kernel-kernel.Tpo" -c -o kernel-kernel.obj `if test -f 'kernel.c'; then $(CYGPATH_W) 'kernel.c'; else $(CYGPATH_W) '$(srcdir)/kernel.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/kernel-kernel.Tpo" "$(DEPDIR)/kernel-kernel.Po"; else rm -f "$(DEPDIR)/kernel-kernel.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='kernel.c' object='kernel-kernel.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kernel_CFLAGS) $(CFLAGS) -c -o kernel-kernel.obj `if test -f 'kernel.c'; then $(CYGPATH_W) 'kernel.c'; else $(CYGPATH_W) '$(srcdir)/kernel.c'; fi`
--
--.texi.info:
--      restore=: && backupdir="$(am__leading_dot)am$$$$" && \
--      am__cwd=`pwd` && cd $(srcdir) && \
--      rm -rf $$backupdir && mkdir $$backupdir && \
--      for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
--        if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
--      done; \
--      cd "$$am__cwd"; \
--      if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
--       -o $@ $<; \
--      then \
--        rc=0; \
--        cd $(srcdir); \
--      else \
--        rc=$$?; \
--        cd $(srcdir) && \
--        $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
--      fi; \
--      rm -rf $$backupdir; exit $$rc
--
--.texi.dvi:
--      TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
--      MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
--      $(TEXI2DVI) $<
--
--.texi.pdf:
--      TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
--      MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
--      $(TEXI2PDF) $<
--
--.texi.html:
--      rm -rf $(@:.html=.htp)
--      if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
--       -o $(@:.html=.htp) $<; \
--      then \
--        rm -rf $@; \
--        if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
--          mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
--      else \
--        if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
--          rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
--        exit 1; \
--      fi
--$(srcdir)/grub.info: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS)
--grub.dvi: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS)
--grub.pdf: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS)
--grub.html: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS)
--$(srcdir)/version.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-vti
--$(srcdir)/stamp-vti: grub.texi $(top_srcdir)/configure
--      @(dir=.; test -f ./grub.texi || dir=$(srcdir); \
--      set `$(SHELL) $(srcdir)/mdate-sh $$dir/grub.texi`; \
--      echo "@set UPDATED $$1 $$2 $$3"; \
--      echo "@set UPDATED-MONTH $$2 $$3"; \
--      echo "@set EDITION $(VERSION)"; \
--      echo "@set VERSION $(VERSION)") > vti.tmp
--      @cmp -s vti.tmp $(srcdir)/version.texi \
--        || (echo "Updating $(srcdir)/version.texi"; \
--            cp vti.tmp $(srcdir)/version.texi)
--      -@rm -f vti.tmp
--      @cp $(srcdir)/version.texi $@
--
--mostlyclean-vti:
--      -rm -f vti.tmp
--
--maintainer-clean-vti:
--@MAINTAINER_MODE_TRUE@        -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
--$(srcdir)/multiboot.info: multiboot.texi $(multiboot_TEXINFOS)
--multiboot.dvi: multiboot.texi $(multiboot_TEXINFOS)
--multiboot.pdf: multiboot.texi $(multiboot_TEXINFOS)
--multiboot.html: multiboot.texi $(multiboot_TEXINFOS)
--.dvi.ps:
--      $(DVIPS) -o $@ $<
--
--uninstall-info-am:
--      $(PRE_UNINSTALL)
--      @if (install-info --version && \
--           install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
--        list='$(INFO_DEPS)'; \
--        for file in $$list; do \
--          relfile=`echo "$$file" | sed 's|^.*/||'`; \
--          echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
--          install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
--        done; \
--      else :; fi
--      @$(NORMAL_UNINSTALL)
--      @list='$(INFO_DEPS)'; \
--      for file in $$list; do \
--        relfile=`echo "$$file" | sed 's|^.*/||'`; \
--        relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
--        (if cd "$(DESTDIR)$(infodir)"; then \
--           echo " rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9])"; \
--           rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
--         else :; fi); \
--      done
--
--dist-info: $(INFO_DEPS)
--      @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
--      list='$(INFO_DEPS)'; \
--      for base in $$list; do \
--        case $$base in \
--          $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
--        esac; \
--        if test -f $$base; then d=.; else d=$(srcdir); fi; \
--        for file in $$d/$$base*; do \
--          relfile=`expr "$$file" : "$$d/\(.*\)"`; \
--          test -f $(distdir)/$$relfile || \
--            cp -p $$file $(distdir)/$$relfile; \
--        done; \
--      done
--
--mostlyclean-aminfo:
--      -rm -rf grub.aux grub.cp grub.cps grub.fn grub.ky grub.log grub.pg grub.tmp \
--        grub.toc grub.tp grub.vr grub.dvi grub.pdf grub.ps grub.html \
--        multiboot.aux multiboot.cp multiboot.cps multiboot.fn \
--        multiboot.ky multiboot.log multiboot.pg multiboot.tmp \
--        multiboot.toc multiboot.tp multiboot.vr multiboot.dvi \
--        multiboot.pdf multiboot.ps multiboot.html
--
--maintainer-clean-aminfo:
--      @list='$(INFO_DEPS)'; for i in $$list; do \
--        i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
--        echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
--        rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
--      done
--install-man1: $(man1_MANS) $(man_MANS)
--      @$(NORMAL_INSTALL)
--      test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
--      @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
--      l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
--      for i in $$l2; do \
--        case "$$i" in \
--          *.1*) list="$$list $$i" ;; \
--        esac; \
--      done; \
--      for i in $$list; do \
--        if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
--        else file=$$i; fi; \
--        ext=`echo $$i | sed -e 's/^.*\\.//'`; \
--        case "$$ext" in \
--          1*) ;; \
--          *) ext='1' ;; \
--        esac; \
--        inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
--        inst=`echo $$inst | sed -e 's/^.*\///'`; \
--        inst=`echo $$inst | sed '$(transform)'`.$$ext; \
--        echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
--        $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
--      done
--uninstall-man1:
--      @$(NORMAL_UNINSTALL)
--      @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
--      l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
--      for i in $$l2; do \
--        case "$$i" in \
--          *.1*) list="$$list $$i" ;; \
--        esac; \
--      done; \
--      for i in $$list; do \
--        ext=`echo $$i | sed -e 's/^.*\\.//'`; \
--        case "$$ext" in \
--          1*) ;; \
--          *) ext='1' ;; \
--        esac; \
--        inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
--        inst=`echo $$inst | sed -e 's/^.*\///'`; \
--        inst=`echo $$inst | sed '$(transform)'`.$$ext; \
--        echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
--        rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
--      done
--install-man8: $(man8_MANS) $(man_MANS)
--      @$(NORMAL_INSTALL)
--      test -z "$(man8dir)" || $(mkdir_p) "$(DESTDIR)$(man8dir)"
--      @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
--      l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
--      for i in $$l2; do \
--        case "$$i" in \
--          *.8*) list="$$list $$i" ;; \
--        esac; \
--      done; \
--      for i in $$list; do \
--        if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
--        else file=$$i; fi; \
--        ext=`echo $$i | sed -e 's/^.*\\.//'`; \
--        case "$$ext" in \
--          8*) ;; \
--          *) ext='8' ;; \
--        esac; \
--        inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
--        inst=`echo $$inst | sed -e 's/^.*\///'`; \
--        inst=`echo $$inst | sed '$(transform)'`.$$ext; \
--        echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
--        $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
--      done
--uninstall-man8:
--      @$(NORMAL_UNINSTALL)
--      @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
--      l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
--      for i in $$l2; do \
--        case "$$i" in \
--          *.8*) list="$$list $$i" ;; \
--        esac; \
--      done; \
--      for i in $$list; do \
--        ext=`echo $$i | sed -e 's/^.*\\.//'`; \
--        case "$$ext" in \
--          8*) ;; \
--          *) ext='8' ;; \
--        esac; \
--        inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
--        inst=`echo $$inst | sed -e 's/^.*\///'`; \
--        inst=`echo $$inst | sed '$(transform)'`.$$ext; \
--        echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
--        rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
--      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:  $(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)
--      @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
--      $(MAKE) $(AM_MAKEFLAGS) \
--        top_distdir="$(top_distdir)" distdir="$(distdir)" \
--        dist-info
--check-am: all-am
--check: check-am
--all-am: Makefile $(INFO_DEPS) $(PROGRAMS) $(SCRIPTS) $(MANS)
--installdirs:
--      for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man8dir)"; 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 clean-noinstPROGRAMS 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: $(DVIS)
--
--html: html-am
--
--html-am: $(HTMLS)
--
--info: info-am
--
--info-am: $(INFO_DEPS)
--
--install-data-am: install-info-am install-man
--
--install-exec-am:
--
--install-info: install-info-am
--
--install-info-am: $(INFO_DEPS)
--      @$(NORMAL_INSTALL)
--      test -z "$(infodir)" || $(mkdir_p) "$(DESTDIR)$(infodir)"
--      @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
--      list='$(INFO_DEPS)'; \
--      for file in $$list; do \
--        case $$file in \
--          $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
--        esac; \
--        if test -f $$file; then d=.; else d=$(srcdir); fi; \
--        file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
--        for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
--                       $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
--          if test -f $$ifile; then \
--            relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
--            echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \
--            $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \
--          else : ; fi; \
--        done; \
--      done
--      @$(POST_INSTALL)
--      @if (install-info --version && \
--           install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
--        list='$(INFO_DEPS)'; \
--        for file in $$list; do \
--          relfile=`echo "$$file" | sed 's|^.*/||'`; \
--          echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
--          install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
--        done; \
--      else : ; fi
--install-man: install-man1 install-man8
--
--installcheck-am:
--
--maintainer-clean: maintainer-clean-am
--      -rm -rf ./$(DEPDIR)
--      -rm -f Makefile
--maintainer-clean-am: distclean-am maintainer-clean-aminfo \
--      maintainer-clean-generic maintainer-clean-vti
--
--mostlyclean: mostlyclean-am
--
--mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \
--      mostlyclean-generic mostlyclean-vti
--
--pdf: pdf-am
--
--pdf-am: $(PDFS)
--
--ps: ps-am
--
--ps-am: $(PSS)
--
--uninstall-am: uninstall-info-am uninstall-man
--
--uninstall-man: uninstall-man1 uninstall-man8
--
--.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
--      clean-noinstPROGRAMS ctags dist-info distclean \
--      distclean-compile distclean-generic distclean-tags 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-man1 \
--      install-man8 install-strip installcheck installcheck-am \
--      installdirs maintainer-clean maintainer-clean-aminfo \
--      maintainer-clean-generic maintainer-clean-vti mostlyclean \
--      mostlyclean-aminfo mostlyclean-compile mostlyclean-generic \
--      mostlyclean-vti pdf pdf-am ps ps-am tags uninstall \
--      uninstall-am uninstall-info-am uninstall-man uninstall-man1 \
--      uninstall-man8
--
--
--@BUILD_EXAMPLE_KERNEL_TRUE@boot.o: multiboot.h
--
--# Cancel the rule %.texi -> %. This rule may confuse make to determine
--# the dependecies.
--.texi:
--
--%.c.texi: %.c $(srcdir)/$(SRC2TEXI)
--      $(SHELL) $(srcdir)/$(SRC2TEXI) $(srcdir) $< $@
--
--%.h.texi: %.h $(srcdir)/$(SRC2TEXI)
--      $(SHELL) $(srcdir)/$(SRC2TEXI) $(srcdir) $< $@
--
--%.S.texi: %.S $(srcdir)/$(SRC2TEXI)
--      $(SHELL) $(srcdir)/$(SRC2TEXI) $(srcdir) $< $@
--
--@MAINTAINER_MODE_TRUE@$(srcdir)/grub.8: ../grub/grub $(srcdir)/$(HELP2MAN)
--@MAINTAINER_MODE_TRUE@        $(PERL) $(srcdir)/$(HELP2MAN) --name="the grub shell" \
--@MAINTAINER_MODE_TRUE@                --section=8 --output=$@ $<
--
--@MAINTAINER_MODE_TRUE@$(srcdir)/grub-install.8: ../util/grub-install $(srcdir)/$(HELP2MAN)
--@MAINTAINER_MODE_TRUE@        chmod 755 $<
--@MAINTAINER_MODE_TRUE@        $(PERL) $(srcdir)/$(HELP2MAN) --name="install GRUB on your drive" \
--@MAINTAINER_MODE_TRUE@                --section=8 --output=$@ $<
--
--@MAINTAINER_MODE_TRUE@$(srcdir)/mbchk.1: ../util/mbchk $(srcdir)/$(HELP2MAN)
--@MAINTAINER_MODE_TRUE@        $(PERL) $(srcdir)/$(HELP2MAN) \
--@MAINTAINER_MODE_TRUE@                --name="check the format of a Multiboot kernel" \
--@MAINTAINER_MODE_TRUE@                --section=1 --output=$@ $<
--
--@MAINTAINER_MODE_TRUE@$(srcdir)/grub-md5-crypt.8: ../util/grub-md5-crypt $(srcdir)/$(HELP2MAN)
--@MAINTAINER_MODE_TRUE@        chmod 755 $<
--@MAINTAINER_MODE_TRUE@        $(PERL) $(srcdir)/$(HELP2MAN) \
--@MAINTAINER_MODE_TRUE@                --name="Encrypt a password in MD5 format" \
--@MAINTAINER_MODE_TRUE@                --section=8 --output=$@ $<
--
--@MAINTAINER_MODE_TRUE@$(srcdir)/grub-terminfo.8: ../util/grub-terminfo $(srcdir)/$(HELP2MAN)
--@MAINTAINER_MODE_TRUE@        chmod 755 $<
--@MAINTAINER_MODE_TRUE@        $(PERL) $(srcdir)/$(HELP2MAN) \
--@MAINTAINER_MODE_TRUE@                --name="Generate a terminfo command from a terminfo name" \
--@MAINTAINER_MODE_TRUE@                --section=8 --output=$@ $<
--# 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/docs/grub-crypt.8 b/docs/grub-crypt.8
-new file mode 100644
-index 0000000..eb132d7
---- /dev/null
-+++ b/docs/grub-crypt.8
-@@ -0,0 +1,39 @@
-+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.23.
-+.TH GRUB-CRYPT "1" "January 2010" "grub-crypt (GNU GRUB 0.97)" FSF
-+.SH NAME
-+grub-crypt \- manual page for grub-crypt (GNU GRUB 0.97)
-+.SH SYNOPSIS
-+.B grub-crypt
-+[\fIOPTION\fR]...
-+.SH DESCRIPTION
-+Encrypt a password.
-+.TP
-+\fB\-h\fR, \fB\-\-help\fR
-+Print this message and exit
-+.TP
-+\fB\-v\fR, \fB\-\-version\fR
-+Print the version information and exit
-+.TP
-+\fB\-\-md5\fR
-+Use MD5 to encrypt the password
-+.TP
-+\fB\-\-sha\-256\fR
-+Use SHA-256 to encrypt the password
-+.TP
-+\fB\-\-sha\-512\fR
-+Use SHA-512 to encrypt the password (default)
-+.SH "REPORTING BUGS"
-+Report bugs to <bug-grub@gnu.org>.
-+EOF
-+.SH "SEE ALSO"
-+The full documentation for
-+.B grub-crypt
-+is maintained as a Texinfo manual.  If the
-+.B info
-+and
-+.B grub-crypt
-+programs are properly installed at your site, the command
-+.IP
-+.B info grub-crypt
-+.PP
-+should give you access to the complete manual.
-diff --git a/docs/grub-install.8 b/docs/grub-install.8
-index ac588a3..accff22 100644
---- a/docs/grub-install.8
-+++ b/docs/grub-install.8
-@@ -30,6 +30,8 @@ BIOS
- .TP
- \fB\-\-recheck\fR
- probe a device map even if it already exists
-+
-+This option is unreliable and its use is strongly discouraged.
- .PP
- INSTALL_DEVICE can be a GRUB device name or a system device filename.
- .PP
-diff --git a/docs/grub.8 b/docs/grub.8
-index 92149f7..7a087d6 100644
---- a/docs/grub.8
-+++ b/docs/grub.8
-@@ -15,7 +15,7 @@ turn on batch mode for non-interactive use
- specify stage2 boot_drive [default=0x0]
- .TP
- \fB\-\-config\-file\fR=\fIFILE\fR
--specify stage2 config_file [default=/boot/grub/menu.lst]
-+specify stage2 config_file [default=/boot/grub/grub.conf]
- .TP
- \fB\-\-device\-map\fR=\fIFILE\fR
- use the device map file FILE
-diff --git a/docs/grub.info b/docs/grub.info
-index f48783c..7692f31 100644
---- a/docs/grub.info
-+++ b/docs/grub.info
-@@ -1,5 +1,4 @@
--This is ../../docs/grub.info, produced by makeinfo version 4.8 from
--../../docs/grub.texi.
-+This is grub.info, produced by makeinfo version 4.9 from grub.texi.
- INFO-DIR-SECTION Kernel
- START-INFO-DIR-ENTRY
-@@ -1147,7 +1146,7 @@ your OS. There's a solution to that - GRUB provides a menu interface
- (*note Menu interface::) from which you can select an item (using arrow
- keys) that will do everything to boot an OS.
--   To enable the menu, you need a configuration file, `menu.lst' under
-+   To enable the menu, you need a configuration file, `grub.conf' under
- the boot directory. We'll analyze an example file.
-    The file first contains some general settings, the menu interface
-@@ -1693,12 +1692,12 @@ There are two ways to specify files, by "absolute file name" and by
-    An absolute file name resembles a Unix absolute file name, using `/'
- for the directory separator (not `\' as in DOS). One example is
--`(hd0,0)/boot/grub/menu.lst'. This means the file `/boot/grub/menu.lst'
--in the first partition of the first hard disk. If you omit the device
--name in an absolute file name, GRUB uses GRUB's "root device"
--implicitly. So if you set the root device to, say, `(hd1,0)' by the
--command `root' (*note root::), then `/boot/kernel' is the same as
--`(hd1,0)/boot/kernel'.
-+`(hd0,0)/boot/grub/grub.conf'. This means the file
-+`/boot/grub/grub.conf' in the first partition of the first hard disk.
-+If you omit the device name in an absolute file name, GRUB uses GRUB's
-+"root device" implicitly. So if you set the root device to, say,
-+`(hd1,0)' by the command `root' (*note root::), then `/boot/kernel' is
-+the same as `(hd1,0)/boot/kernel'.
\1f
- File: grub.info,  Node: Block list syntax,  Prev: File name syntax,  Up: Filesystem
-@@ -2023,6 +2022,7 @@ Commands usable anywhere in the menu and in the command-line.
- * rarp::                        Initialize a network device via RARP
- * serial::                      Set up a serial device
- * setkey::                      Configure the key map
-+* splashimage::                 Use a splash image
- * terminal::                    Choose a terminal
- * terminfo::                    Define escape sequences for a terminal
- * tftpserver::                  Specify a TFTP server
-@@ -2258,7 +2258,7 @@ File: grub.info,  Node: serial,  Next: setkey,  Prev: rarp,  Up: General command
-      support. See also *Note Serial terminal::.
\1f
--File: grub.info,  Node: setkey,  Next: terminal,  Prev: serial,  Up: General commands
-+File: grub.info,  Node: setkey,  Next: splashimage,  Prev: serial,  Up: General commands
- 13.2.13 setkey
- --------------
-@@ -2384,9 +2384,20 @@ File: grub.info,  Node: setkey,  Next: terminal,  Prev: serial,  Up: General com
-           ` '
\1f
--File: grub.info,  Node: terminal,  Next: terminfo,  Prev: setkey,  Up: General commands
-+File: grub.info,  Node: splashimage,  Next: terminal,  Prev: setkey,  Up: General commands
--13.2.14 terminal
-+13.2.14 splashimage
-+-------------------
-+
-+ -- Command: splashimage file
-+     Select an image to use as the background image.  This should be
-+     specified using normal GRUB device naming syntax.  The format of
-+     the file is a gzipped xpm which is 640x480 with a 14 color palette.
-+
-+\1f
-+File: grub.info,  Node: terminal,  Next: terminfo,  Prev: splashimage,  Up: General commands
-+
-+13.2.15 terminal
- ----------------
-  -- Command: terminal [`--dumb'] [`--no-echo'] [`--no-edit']
-@@ -2421,7 +2432,7 @@ File: grub.info,  Node: terminal,  Next: terminfo,  Prev: setkey,  Up: General c
\1f
- File: grub.info,  Node: terminfo,  Next: tftpserver,  Prev: terminal,  Up: General commands
--13.2.15 terminfo
-+13.2.16 terminfo
- ----------------
-  -- Command: terminfo `--name=name' `--cursor-address=seq'
-@@ -2439,7 +2450,7 @@ File: grub.info,  Node: terminfo,  Next: tftpserver,  Prev: terminal,  Up: Gener
\1f
- File: grub.info,  Node: tftpserver,  Next: unhide,  Prev: terminfo,  Up: General commands
--13.2.16 tftpserver
-+13.2.17 tftpserver
- ------------------
-  -- Command: tftpserver ipaddr
-@@ -2454,7 +2465,7 @@ File: grub.info,  Node: tftpserver,  Next: unhide,  Prev: terminfo,  Up: General
\1f
- File: grub.info,  Node: unhide,  Prev: tftpserver,  Up: General commands
--13.2.17 unhide
-+13.2.18 unhide
- --------------
-  -- Command: unhide partition
-@@ -3405,9 +3416,9 @@ calls with UNIX system calls and libc functions.
-      grub shell just ignores this option.
- `--config-file=FILE'
--     Read the configuration file FILE instead of `/boot/grub/menu.lst'.
--     The format is the same as the normal GRUB syntax. See *Note
--     Filesystem::, for more information.
-+     Read the configuration file FILE instead of
-+     `/boot/grub/grub.conf'. The format is the same as the normal GRUB
-+     syntax. See *Note Filesystem::, for more information.
- `--boot-drive=DRIVE'
-      Set the stage2 BOOT_DRIVE to DRIVE. This argument should be an
-@@ -3551,8 +3562,9 @@ name.
- `--recheck'
-      Recheck the device map, even if `/boot/grub/device.map' already
--     exists. You should use this option whenever you add/remove a disk
--     into/from your computer.
-+     exists.
-+
-+     This option is unreliable and its use is strongly discouraged.
\1f
- File: grub.info,  Node: Invoking grub-md5-crypt,  Next: Invoking grub-terminfo,  Prev: Invoking grub-install,  Up: Top
-@@ -4279,6 +4291,7 @@ Index
- * serial:                                serial.               (line  9)
- * setkey:                                setkey.               (line  7)
- * setup:                                 setup.                (line  8)
-+* splashimage:                           splashimage.          (line  7)
- * terminal:                              terminal.             (line  9)
- * terminfo:                              terminfo.             (line  9)
- * testload:                              testload.             (line  7)
-@@ -4293,163 +4306,164 @@ Index
\1f
- Tag Table:
--Node: Top\7f1487
--Node: Introduction\7f3266
--Node: Overview\7f3643
--Node: Overview-Footnotes\7f5865
--Ref: Overview-Footnote-1\7f5926
--Node: History\7f6087
--Node: Features\7f7208
--Node: Features-Footnotes\7f12976
--Ref: Features-Footnote-1\7f13037
--Node: Role of a boot loader\7f13182
--Node: Role of a boot loader-Footnotes\7f14520
--Ref: Role of a boot loader-Footnote-1\7f14607
--Node: Naming convention\7f14686
--Node: Installation\7f17621
--Node: Creating a GRUB boot floppy\7f19363
--Node: Installing GRUB natively\7f20181
--Node: Installing GRUB natively-Footnotes\7f22461
--Ref: Installing GRUB natively-Footnote-1\7f22554
--Node: Installing GRUB using grub-install\7f22739
--Node: Making a GRUB bootable CD-ROM\7f25685
--Node: Making a GRUB bootable CD-ROM-Footnotes\7f27730
--Ref: Making a GRUB bootable CD-ROM-Footnote-1\7f27833
--Node: Booting\7f27908
--Node: General boot methods\7f28363
--Node: Loading an operating system directly\7f29104
--Node: Chain-loading\7f30408
--Node: Chain-loading-Footnotes\7f31718
--Ref: Chain-loading-Footnote-1\7f31789
--Node: OS-specific notes\7f31861
--Node: GNU/Hurd\7f32237
--Node: GNU/Linux\7f32856
--Node: FreeBSD\7f34104
--Node: NetBSD\7f34617
--Node: OpenBSD\7f35275
--Node: DOS/Windows\7f35475
--Node: SCO UnixWare\7f37301
--Node: QNX\7f37719
--Node: Making your system robust\7f37969
--Node: Booting once-only\7f39294
--Node: Booting fallback systems\7f41219
--Node: Configuration\7f44066
--Node: Network\7f48495
--Node: General usage of network support\7f48989
--Node: General usage of network support-Footnotes\7f50850
--Ref: General usage of network support-Footnote-1\7f50959
--Node: Diskless\7f51027
--Node: Serial terminal\7f53211
--Node: Preset Menu\7f55444
--Node: Security\7f57812
--Node: Images\7f60620
--Node: Filesystem\7f63131
--Node: Device syntax\7f63814
--Node: File name syntax\7f65308
--Node: Block list syntax\7f66051
--Node: Interface\7f66784
--Node: Command-line interface\7f67661
--Node: Command-line interface-Footnotes\7f69602
--Ref: Command-line interface-Footnote-1\7f69691
--Node: Menu interface\7f69786
--Node: Menu entry editor\7f70796
--Node: Hidden menu interface\7f71875
--Node: Commands\7f72452
--Node: Menu-specific commands\7f73029
--Node: default\7f74200
--Node: fallback\7f74678
--Node: hiddenmenu\7f75229
--Node: timeout\7f75717
--Node: title\7f75995
--Node: General commands\7f76266
--Node: bootp\7f77579
--Node: color\7f78058
--Node: device\7f79532
--Node: dhcp\7f80104
--Node: hide\7f80689
--Node: ifconfig\7f81066
--Node: pager\7f81642
--Node: partnew\7f81976
--Node: parttype\7f82412
--Node: password\7f82779
--Node: rarp\7f83598
--Node: serial\7f83899
--Node: setkey\7f85172
--Node: terminal\7f87341
--Node: terminfo\7f88878
--Node: tftpserver\7f89565
--Node: unhide\7f90111
--Node: Command-line and menu entry commands\7f90486
--Node: blocklist\7f93017
--Node: boot\7f93259
--Node: cat\7f93580
--Node: chainloader\7f93884
--Node: cmp\7f94500
--Node: configfile\7f95051
--Node: debug\7f95265
--Node: displayapm\7f95649
--Node: displaymem\7f95860
--Node: embed\7f96562
--Node: embed-Footnotes\7f97096
--Ref: embed-Footnote-1\7f97151
--Node: find\7f97208
--Node: fstest\7f97588
--Node: geometry\7f98273
--Node: halt\7f98885
--Node: help\7f99212
--Node: impsprobe\7f99833
--Node: initrd\7f100232
--Node: install\7f100571
--Node: install-Footnotes\7f103415
--Ref: install-Footnote-1\7f103474
--Node: ioprobe\7f103571
--Node: kernel\7f103896
--Node: lock\7f105016
--Node: makeactive\7f105591
--Node: map\7f105903
--Node: md5crypt\7f106470
--Node: module\7f106817
--Node: modulenounzip\7f107394
--Node: pause\7f107687
--Node: quit\7f108101
--Node: reboot\7f108377
--Node: read\7f108558
--Node: root\7f108800
--Node: rootnoverify\7f109677
--Node: savedefault\7f110232
--Node: setup\7f111208
--Node: testload\7f112274
--Node: testvbe\7f112884
--Node: uppermem\7f113255
--Node: vbeprobe\7f113837
--Node: Troubleshooting\7f114220
--Node: Stage1 errors\7f114758
--Node: Stage1.5 errors\7f116135
--Node: Stage2 errors\7f116573
--Node: Invoking the grub shell\7f124033
--Node: Basic usage\7f124786
--Node: Installation under UNIX\7f127073
--Node: Device map\7f128748
--Node: Invoking grub-install\7f129896
--Node: Invoking grub-md5-crypt\7f131484
--Node: Invoking grub-terminfo\7f132133
--Node: Invoking grub-set-default\7f132899
--Node: Invoking mbchk\7f134700
--Node: Obtaining and Building GRUB\7f135214
--Node: Reporting bugs\7f136631
--Node: Future\7f139435
--Node: Internals\7f139926
--Node: Memory map\7f141149
--Node: Embedded data\7f142627
--Node: Filesystem interface\7f144644
--Node: Command interface\7f148077
--Node: Bootstrap tricks\7f149392
--Node: I/O ports detection\7f151541
--Node: Memory detection\7f151813
--Node: Low-level disk I/O\7f152105
--Node: MBR\7f152374
--Node: Partition table\7f152571
--Node: Submitting patches\7f152844
--Node: Index\7f154332
-+Node: Top\7f1465
-+Node: Introduction\7f3244
-+Node: Overview\7f3621
-+Node: Overview-Footnotes\7f5843
-+Ref: Overview-Footnote-1\7f5904
-+Node: History\7f6065
-+Node: Features\7f7186
-+Node: Features-Footnotes\7f12954
-+Ref: Features-Footnote-1\7f13015
-+Node: Role of a boot loader\7f13160
-+Node: Role of a boot loader-Footnotes\7f14498
-+Ref: Role of a boot loader-Footnote-1\7f14585
-+Node: Naming convention\7f14664
-+Node: Installation\7f17599
-+Node: Creating a GRUB boot floppy\7f19341
-+Node: Installing GRUB natively\7f20159
-+Node: Installing GRUB natively-Footnotes\7f22439
-+Ref: Installing GRUB natively-Footnote-1\7f22532
-+Node: Installing GRUB using grub-install\7f22717
-+Node: Making a GRUB bootable CD-ROM\7f25663
-+Node: Making a GRUB bootable CD-ROM-Footnotes\7f27708
-+Ref: Making a GRUB bootable CD-ROM-Footnote-1\7f27811
-+Node: Booting\7f27886
-+Node: General boot methods\7f28341
-+Node: Loading an operating system directly\7f29082
-+Node: Chain-loading\7f30386
-+Node: Chain-loading-Footnotes\7f31696
-+Ref: Chain-loading-Footnote-1\7f31767
-+Node: OS-specific notes\7f31839
-+Node: GNU/Hurd\7f32215
-+Node: GNU/Linux\7f32834
-+Node: FreeBSD\7f34082
-+Node: NetBSD\7f34595
-+Node: OpenBSD\7f35253
-+Node: DOS/Windows\7f35453
-+Node: SCO UnixWare\7f37279
-+Node: QNX\7f37697
-+Node: Making your system robust\7f37947
-+Node: Booting once-only\7f39272
-+Node: Booting fallback systems\7f41197
-+Node: Configuration\7f44044
-+Node: Network\7f48474
-+Node: General usage of network support\7f48968
-+Node: General usage of network support-Footnotes\7f50829
-+Ref: General usage of network support-Footnote-1\7f50938
-+Node: Diskless\7f51006
-+Node: Serial terminal\7f53190
-+Node: Preset Menu\7f55423
-+Node: Security\7f57791
-+Node: Images\7f60599
-+Node: Filesystem\7f63110
-+Node: Device syntax\7f63793
-+Node: File name syntax\7f65287
-+Node: Block list syntax\7f66032
-+Node: Interface\7f66765
-+Node: Command-line interface\7f67642
-+Node: Command-line interface-Footnotes\7f69583
-+Ref: Command-line interface-Footnote-1\7f69672
-+Node: Menu interface\7f69767
-+Node: Menu entry editor\7f70777
-+Node: Hidden menu interface\7f71856
-+Node: Commands\7f72433
-+Node: Menu-specific commands\7f73010
-+Node: default\7f74181
-+Node: fallback\7f74659
-+Node: hiddenmenu\7f75210
-+Node: timeout\7f75698
-+Node: title\7f75976
-+Node: General commands\7f76247
-+Node: bootp\7f77611
-+Node: color\7f78090
-+Node: device\7f79564
-+Node: dhcp\7f80136
-+Node: hide\7f80721
-+Node: ifconfig\7f81098
-+Node: pager\7f81674
-+Node: partnew\7f82008
-+Node: parttype\7f82444
-+Node: password\7f82811
-+Node: rarp\7f83630
-+Node: serial\7f83931
-+Node: setkey\7f85204
-+Node: splashimage\7f87376
-+Node: terminal\7f87754
-+Node: terminfo\7f89296
-+Node: tftpserver\7f89983
-+Node: unhide\7f90529
-+Node: Command-line and menu entry commands\7f90904
-+Node: blocklist\7f93435
-+Node: boot\7f93677
-+Node: cat\7f93998
-+Node: chainloader\7f94302
-+Node: cmp\7f94918
-+Node: configfile\7f95469
-+Node: debug\7f95683
-+Node: displayapm\7f96067
-+Node: displaymem\7f96278
-+Node: embed\7f96980
-+Node: embed-Footnotes\7f97514
-+Ref: embed-Footnote-1\7f97569
-+Node: find\7f97626
-+Node: fstest\7f98006
-+Node: geometry\7f98691
-+Node: halt\7f99303
-+Node: help\7f99630
-+Node: impsprobe\7f100251
-+Node: initrd\7f100650
-+Node: install\7f100989
-+Node: install-Footnotes\7f103833
-+Ref: install-Footnote-1\7f103892
-+Node: ioprobe\7f103989
-+Node: kernel\7f104314
-+Node: lock\7f105434
-+Node: makeactive\7f106009
-+Node: map\7f106321
-+Node: md5crypt\7f106888
-+Node: module\7f107235
-+Node: modulenounzip\7f107812
-+Node: pause\7f108105
-+Node: quit\7f108519
-+Node: reboot\7f108795
-+Node: read\7f108976
-+Node: root\7f109218
-+Node: rootnoverify\7f110095
-+Node: savedefault\7f110650
-+Node: setup\7f111626
-+Node: testload\7f112692
-+Node: testvbe\7f113302
-+Node: uppermem\7f113673
-+Node: vbeprobe\7f114255
-+Node: Troubleshooting\7f114638
-+Node: Stage1 errors\7f115176
-+Node: Stage1.5 errors\7f116553
-+Node: Stage2 errors\7f116991
-+Node: Invoking the grub shell\7f124451
-+Node: Basic usage\7f125204
-+Node: Installation under UNIX\7f127492
-+Node: Device map\7f129167
-+Node: Invoking grub-install\7f130315
-+Node: Invoking grub-md5-crypt\7f131884
-+Node: Invoking grub-terminfo\7f132533
-+Node: Invoking grub-set-default\7f133299
-+Node: Invoking mbchk\7f135100
-+Node: Obtaining and Building GRUB\7f135614
-+Node: Reporting bugs\7f137031
-+Node: Future\7f139835
-+Node: Internals\7f140326
-+Node: Memory map\7f141549
-+Node: Embedded data\7f143027
-+Node: Filesystem interface\7f145044
-+Node: Command interface\7f148477
-+Node: Bootstrap tricks\7f149792
-+Node: I/O ports detection\7f151941
-+Node: Memory detection\7f152213
-+Node: Low-level disk I/O\7f152505
-+Node: MBR\7f152774
-+Node: Partition table\7f152971
-+Node: Submitting patches\7f153244
-+Node: Index\7f154732
\1f
- End Tag Table
-diff --git a/docs/grub.texi b/docs/grub.texi
-index 51d330a..5fd324d 100644
---- a/docs/grub.texi
-+++ b/docs/grub.texi
-@@ -21,6 +21,7 @@
- @dircategory Kernel
- @direntry
- * GRUB: (grub).                 The GRand Unified Bootloader
-+* grub-crypt: (grub)Invoking grub-crypt.        Encrypt a password
- * grub-install: (grub)Invoking grub-install.    Install GRUB on your drive
- * grub-md5-crypt: (grub)Invoking grub-md5-crypt.        Encrypt a password
-                                                         in MD5 format
-@@ -115,8 +116,9 @@ This edition documents version @value{VERSION}.
- * Commands::                    The list of available builtin commands
- * Troubleshooting::             Error messages produced by GRUB
- * Invoking the grub shell::     How to use the grub shell
-+* Invoking grub-crypt::         How to generate an encrypted password
- * Invoking grub-install::       How to use the GRUB installer
--* Invoking grub-md5-crypt::     How to generate a cryptic password
-+* Invoking grub-md5-crypt::     How to generate an MD5-encrypted password
- * Invoking grub-terminfo::      How to generate a terminfo command
- * Invoking grub-set-default::   How to set a default boot entry
- * Invoking mbchk::              How to use the Multiboot checker
-@@ -1265,7 +1267,7 @@ OS. There's a solution to that - GRUB provides a menu interface
- keys) that will do everything to boot an OS.
- To enable the menu, you need a configuration file,
--@file{menu.lst} under the boot directory. We'll analyze an example
-+@file{grub.conf} under the boot directory. We'll analyze an example
- file.
- The file first contains some general settings, the menu interface
-@@ -1685,27 +1687,17 @@ run the command @command{password} in your configuration file
- (@pxref{password}), like this:
- @example
--password --md5 PASSWORD
-+password --encrypted PASSWORD
- @end example
- If this is specified, GRUB disallows any interactive control, until you
- press the key @key{p} and enter a correct password.  The option
--@option{--md5} tells GRUB that @samp{PASSWORD} is in MD5 format.  If it
-+@option{--encrypted} tells GRUB that @samp{PASSWORD} is encrypted format.  If it
- is omitted, GRUB assumes the @samp{PASSWORD} is in clear text.
--You can encrypt your password with the command @command{md5crypt}
--(@pxref{md5crypt}). For example, run the grub shell (@pxref{Invoking the
--grub shell}), and enter your password:
--
--@example
--@group
--grub> md5crypt
--Password: **********
--Encrypted: $1$U$JK7xFegdxWH6VuppCUSIb.
--@end group
--@end example
--
--Then, cut and paste the encrypted password to your configuration file.
-+You can encrypt your password with the program @command{grub-crypt}
-+(@pxref{Invoking grub-crypt}). Then, cut and paste the encrypted password to
-+your configuration file.
- Also, you can specify an optional argument to @command{password}. See
- this example:
-@@ -1882,8 +1874,8 @@ There are two ways to specify files, by @dfn{absolute file name} and by
- An absolute file name resembles a Unix absolute file name, using
- @samp{/} for the directory separator (not @samp{\} as in DOS). One
--example is @samp{(hd0,0)/boot/grub/menu.lst}. This means the file
--@file{/boot/grub/menu.lst} in the first partition of the first hard
-+example is @samp{(hd0,0)/boot/grub/grub.conf}. This means the file
-+@file{/boot/grub/grub.conf} in the first partition of the first hard
- disk. If you omit the device name in an absolute file name, GRUB uses
- GRUB's @dfn{root device} implicitly. So if you set the root device to,
- say, @samp{(hd1,0)} by the command @command{root} (@pxref{root}), then
-@@ -2199,6 +2191,7 @@ Commands usable anywhere in the menu and in the command-line.
- * rarp::                        Initialize a network device via RARP
- * serial::                      Set up a serial device
- * setkey::                      Configure the key map
-+* splashimage::                 Use a splash image
- * terminal::                    Choose a terminal
- * terminfo::                    Define escape sequences for a terminal
- * tftpserver::                  Specify a TFTP server
-@@ -2398,7 +2391,7 @@ is the new partition type and must be a number in the range 0-0xff.
- @node password
- @subsection password
--@deffn Command password [@option{--md5}] passwd [new-config-file]
-+@deffn Command password [@option{--md5}] [@option{--encrypted}] passwd [new-config-file]
- If used in the first section of a menu file, disable all interactive
- editing control (menu entry editor and command-line) and entries
- protected by the command @command{lock}. If the password @var{passwd} is
-@@ -2408,7 +2401,9 @@ specified. Otherwise, GRUB will just unlock the privileged instructions.
- You can also use this command in the script section, in which case it
- will ask for the password, before continuing.  The option
- @option{--md5} tells GRUB that @var{passwd} is encrypted with
--@command{md5crypt} (@pxref{md5crypt}).
-+@command{md5crypt} (@pxref{md5crypt}), the option @option{--encrypted}
-+tells GRUB that @var{passwd} is using one of the crypt formats (GRUB currently
-+supports MD5, SHA-256 and SHA-512 encryption).
- @end deffn
-@@ -2578,6 +2573,16 @@ character each of the symbols corresponds:
- @end deffn
-+@node splashimage
-+@subsection splashimage
-+
-+@deffn Command splashimage file
-+Select an image to use as the background image.  This should be
-+specified using normal GRUB device naming syntax.  The format of the
-+file is a gzipped xpm which is 640x480 with a 14 color palette.
-+@end deffn
-+
-+
- @node terminal
- @subsection terminal
-@@ -3542,7 +3547,7 @@ ignores this option.
- @item --config-file=@var{file}
- Read the configuration file @var{file} instead of
--@file{/boot/grub/menu.lst}. The format is the same as the normal GRUB
-+@file{/boot/grub/grub.conf}. The format is the same as the normal GRUB
- syntax. See @ref{Filesystem}, for more information.
- @item --boot-drive=@var{drive}
-@@ -3653,6 +3658,31 @@ comments in the file if needed, as the grub shell assumes that a line is
- just a comment if the first character is @samp{#}.
-+@node Invoking grub-crypt
-+@chapter Invoking grub-crypt
-+
-+The program @command{grub-crypt} encrypts a password in one of the specified
-+formats. Passwords encrypted by this program can be used with the
-+command @command{password} (@pxref{password}).
-+
-+@command{grub-crypt} accepts the following options:
-+
-+@table @option
-+@item --help
-+Print a summary of the command-line options and exit.
-+
-+@item --version
-+Print the version information and exit.
-+
-+@item --md5
-+Use MD5 for password encryption.
-+@item --sha-256
-+Use SHA-256 for password encryption.
-+@item --sha-512
-+Use SHA-512 for password encryption. This is the default.
-+@end table
-+
-+
- @node Invoking grub-install
- @chapter Invoking grub-install
-@@ -3702,8 +3732,9 @@ Use @var{file} as the grub shell. You can append arbitrary options to
- @item --recheck
- Recheck the device map, even if @file{/boot/grub/device.map} already
--exists. You should use this option whenever you add/remove a disk
--into/from your computer.
-+exists.
-+
-+This option is unreliable and its use is strongly discouraged.
- @end table
-diff --git a/docs/stamp-vti b/docs/stamp-vti
-index b97de24..eb5144d 100644
---- a/docs/stamp-vti
-+++ b/docs/stamp-vti
-@@ -1,4 +1,4 @@
--@set UPDATED 8 May 2005
--@set UPDATED-MONTH May 2005
-+@set UPDATED 7 August 2007
-+@set UPDATED-MONTH August 2007
- @set EDITION 0.97
- @set VERSION 0.97
-diff --git a/docs/version.texi b/docs/version.texi
-index b97de24..eb5144d 100644
---- a/docs/version.texi
-+++ b/docs/version.texi
-@@ -1,4 +1,4 @@
--@set UPDATED 8 May 2005
--@set UPDATED-MONTH May 2005
-+@set UPDATED 7 August 2007
-+@set UPDATED-MONTH August 2007
- @set EDITION 0.97
- @set VERSION 0.97
-diff --git a/efi/.gitignore b/efi/.gitignore
-new file mode 100644
-index 0000000..a0e4294
---- /dev/null
-+++ b/efi/.gitignore
-@@ -0,0 +1,7 @@
-+.deps
-+Makefile.in
-+Makefile
-+*.a
-+*.o
-+*.so
-+*.efi
-diff --git a/efi/Makefile.am b/efi/Makefile.am
-new file mode 100644
-index 0000000..1d5bd15
---- /dev/null
-+++ b/efi/Makefile.am
-@@ -0,0 +1,76 @@
-+
-+pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
-+pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
-+
-+if PLATFORM_EFI
-+
-+if NETBOOT_SUPPORT
-+NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1
-+else
-+NETBOOT_FLAGS =
-+endif
-+
-+if SERIAL_SUPPORT
-+SERIAL_FLAGS = -DSUPPORT_SERIAL=1
-+else
-+SERIAL_FLAGS =
-+endif
-+
-+if HERCULES_SUPPORT
-+HERCULES_FLAGS = -DSUPPORT_HERCULES=1
-+else
-+HERCULES_FLAGS =
-+endif
-+
-+if GRAPHICS_SUPPORT
-+GRAPHICS_FLAGS = -DSUPPORT_GRAPHICS=1
-+else
-+GRAPHICS_FLAGS =
-+endif
-+
-+GRUBEFI_FORMAT = efi-app-$(EFI_ARCH)
-+GRUBSO_LD_SCRIPT = @GNUEFI_LDS@
-+GRUBSO_LD_FLAGS = -T $(GRUBSO_LD_SCRIPT) -nostdlib -shared -Bsymbolic
-+
-+GRUBSO_OBJS = efimain.o
-+GRUBSO_LIBS = @GNUEFI_CRT0@ $(top_srcdir)/stage2/libstage2.a \
-+              libgrubefi.a @LIBGCC@
-+
-+if NETBOOT_SUPPORT
-+GRUBSO_LIBS += $(top_srcdir)/netboot/libdrivers.a
-+endif
-+
-+pkgdata_DATA = grub.efi
-+
-+grub.efi: grub.so
-+      $(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \
-+                   -j .rela -j .reloc --target=$(GRUBEFI_FORMAT) $^ $@
-+
-+grub.so: $(GRUBSO_OBJS) $(GRUBSO_LIBS) @LIBGNUEFI@
-+      $(LD) -o $@ $(GRUBSO_LD_FLAGS) $^
-+      echo '-------------- unresolved symbols ---------------------'
-+      ! nm $@ | grep -iw u
-+      echo '-------------------------------------------------------'
-+
-+crt0-efi.o: $(EFI_ARCH)/crt0-efi.S
-+      $(CC) -o $@ -c $(libgrubefi_a_CFLAGS) $^
-+
-+efimain.o: efimain.c
-+      $(CC) -o $@ -c $(libgrubefi_a_CFLAGS) $^
-+
-+clean-local:
-+      -rm -rf grub.so grub.efi
-+
-+RELOC_FLAGS = $(STAGE2_CFLAGS) -I$(top_srcdir)/stage1 \
-+      -I$(top_srcdir)/lib -I. -I$(top_srcdir) -I$(top_srcdir)/stage2 \
-+      -fno-builtin $(NETBOOT_FLAGS) $(SERIAL_FLAGS) \
-+      $(HERCULES_FLAGS) $(GRAPHICS_FLAGS)
-+
-+noinst_LIBRARIES = libgrubefi.a
-+libgrubefi_a_SOURCES = $(EFI_ARCH)/callwrap.S eficore.c efimm.c efimisc.c \
-+      eficon.c efidisk.c graphics.c efigraph.c efiuga.c efidp.c \
-+      font_8x16.c efiserial.c $(EFI_ARCH)/loader/linux.c efichainloader.c \
-+      xpm.c pxe.c efitftp.c
-+libgrubefi_a_CFLAGS = $(RELOC_FLAGS) -nostdinc
-+
-+endif
-diff --git a/efi/byteswap.h b/efi/byteswap.h
-new file mode 100644
-index 0000000..5a057c4
---- /dev/null
-+++ b/efi/byteswap.h
-@@ -0,0 +1,37 @@
-+#ifndef BYTESWAP_H
-+#define BYTESWAP_H 1
-+
-+#if defined(__i386__)
-+#define LITTLE_ENDIAN 1
-+#elif defined(__x86_64__)
-+#define LITTLE_ENDIAN 1
-+#else
-+#error endian not defined
-+#endif
-+
-+#define bswap_16(x) \
-+     ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))
-+
-+#define bswap_32(x) \
-+     ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >>  8) |                     \
-+      (((x) & 0x0000ff00) <<  8) | (((x) & 0x000000ff) << 24))
-+
-+static inline grub_efi_uint16_t htons(grub_efi_uint16_t hostshort)
-+{
-+#ifdef LITTLE_ENDIAN
-+      return bswap_16(hostshort);
-+#else
-+      return hostshort;
-+#endif
-+}
-+
-+static inline grub_efi_uint32_t htonl(grub_efi_uint32_t hostshort)
-+{
-+#ifdef LITTLE_ENDIAN
-+      return bswap_32(hostshort);
-+#else
-+      return hostshort;
-+#endif
-+}
-+
-+#endif /* BYTESWAP_H */
-diff --git a/efi/dhcp.h b/efi/dhcp.h
-new file mode 100644
-index 0000000..a82a522
---- /dev/null
-+++ b/efi/dhcp.h
-@@ -0,0 +1,133 @@
-+#ifndef DHCP_H
-+#define DHCP_H 1
-+
-+#include "pxe.h"
-+
-+#define EFI_DHCP4_PROTOCOL_GUID \
-+{ 0x8a219718, 0x4ef5, 0x4761, {0x91,0xc8,0xc0,0xf0,0x4b,0xda,0x9e,0x56} }
-+static grub_efi_guid_t DHCP4Protocol = EFI_DHCP4_PROTOCOL_GUID;
-+
-+#define EFI_DHCP4_SERVICE_BINDING_PROTOCOL_GUID \
-+{ 0x9d9a39d8, 0xbd42, 0x4a73, {0xa4,0xd5,0x8e,0xe9,0x4b,0xe1,0x13,0x80} }
-+static grub_efi_guid_t DHCP4SbProtocol = EFI_DHCP4_SERVICE_BINDING_PROTOCOL_GUID;
-+
-+#define EFI_PXE_DHCP4_PROTOCOL_GUID \
-+{ 0x03c4e624, 0xac28, 0x11d3, {0x9a,0x2d,0x00,0x90,0x29,0x3f,0xc1,0x4d} }
-+static grub_efi_guid_t PxeDHCP4Protocol = EFI_PXE_DHCP4_PROTOCOL_GUID;
-+
-+
-+typedef EFI_STATUS (*EFI_DHCP4_GET_MODE_DATA)();
-+typedef EFI_STATUS (*EFI_DHCP4_CONFIGURE)();
-+typedef EFI_STATUS (*EFI_DHCP4_START)();
-+typedef EFI_STATUS (*EFI_DHCP4_RENEW_REBIND)();
-+typedef EFI_STATUS (*EFI_DHCP4_RELEASE)();
-+typedef EFI_STATUS (*EFI_DHCP4_STOP)();
-+typedef EFI_STATUS (*EFI_DHCP4_BUILD)();
-+typedef EFI_STATUS (*EFI_DHCP4_TRANSMIT_RECIEVE)();
-+typedef EFI_STATUS (*EFI_DHCP4_PARSE)();
-+
-+typedef struct _EFI_DHCP4_PROTOCOL {
-+      EFI_DHCP4_GET_MODE_DATA GetModeData;
-+      EFI_DHCP4_CONFIGURE Configure;
-+      EFI_DHCP4_START Start;
-+      EFI_DHCP4_RENEW_REBIND RenewRebind;
-+      EFI_DHCP4_RELEASE Release;
-+      EFI_DHCP4_STOP Stop;
-+      EFI_DHCP4_BUILD Build;
-+      EFI_DHCP4_TRANSMIT_RECIEVE TransmitReceive;
-+      EFI_DHCP4_PARSE Parse;
-+} EFI_DHCP4_PROTOCOL;
-+
-+typedef enum {
-+      Dhcp4Stopped,
-+      Dhcp4Init,
-+      Dhcp4Selecting,
-+      Dhcp4Requesting,
-+      Dhcp4Bound,
-+      Dhcp4Renewing,
-+      Dhcp4Rebinding,
-+      Dhcp4InitReboot,
-+      Dhcp4Rebooting,
-+} EFI_DHCP4_STATE;
-+
-+typedef enum {
-+      Dhcp4SendDiscover = 0x1,
-+      Dhcp4RcvdOffer,
-+      Dhcp4SelectOffer,
-+      Dhcp4SendRequest,
-+      Dhcp4RcvdAck,
-+      Dhcp4RcvdNak,
-+      Dhcp4SendDecline,
-+      Dhcp4BoundCompleted,
-+      Dhcp4EnterRenewing,
-+      Dhcp4EnterRebinding,
-+      Dhcp4AddressLost,
-+      Dhcp4Fail,
-+} EFI_DHCP4_EVENT;
-+
-+typedef struct {
-+      grub_efi_uint8_t OpCode;
-+      grub_efi_uint8_t HwType;
-+      grub_efi_uint8_t HwAddrLen;
-+      grub_efi_uint8_t Hops;
-+      grub_efi_uint32_t xid;
-+      grub_efi_uint16_t Seconds;
-+      grub_efi_uint16_t reserved;
-+      EFI_IPv4_ADDRESS ClientAddr;
-+      EFI_IPv4_ADDRESS YourAddr;
-+      EFI_IPv4_ADDRESS ServerAddr;
-+      EFI_IPv4_ADDRESS GatewayAddr;
-+      grub_efi_uint8_t ClientHwAddr[16];
-+      char ServerName[64];
-+      char BootFileName[128];
-+} EFI_DHCP4_HEADER;
-+
-+typedef struct {
-+      grub_efi_uint32_t Size;
-+      grub_efi_uint32_t Length;
-+      struct {
-+              EFI_DHCP4_HEADER Header;
-+              grub_efi_uint32_t Magik;
-+              grub_efi_uint8_t option[];
-+      } Dhcp4;
-+} EFI_DHCP4_PACKET;
-+
-+typedef struct {
-+      grub_efi_uint8_t OpCode;
-+      grub_efi_uint8_t Length;
-+      grub_efi_uint8_t Data[1];
-+} EFI_DHCP4_PACKET_OPTION;
-+
-+typedef EFI_STATUS (*EFI_DHCP4_CALLBACK) (
-+      EFI_DHCP4_PROTOCOL *This,
-+      void *Context,
-+      EFI_DHCP4_STATE CurrentState,
-+      EFI_DHCP4_EVENT Dhcp4Event,
-+      EFI_DHCP4_PACKET *Packet,
-+      EFI_DHCP4_PACKET **NewPacket);
-+
-+typedef struct {
-+      grub_efi_uint32_t DiscoverTryCount;
-+      grub_efi_uint32_t *DiscoverTimeout;
-+      grub_efi_uint32_t RequestTryCount;
-+      grub_efi_uint32_t *RequestTimeout;
-+      EFI_IPv4_ADDRESS ClientAddress;
-+      EFI_DHCP4_CALLBACK Dhcp4Callback;
-+      void *CallbackContext;
-+      grub_efi_uint32_t OptionCount;
-+      EFI_DHCP4_PACKET_OPTION **OptionList;
-+} EFI_DHCP4_CONFIG_DATA;
-+
-+typedef struct {
-+      EFI_DHCP4_STATE State;
-+      EFI_DHCP4_CONFIG_DATA ConfigData;
-+      EFI_IPv4_ADDRESS ClientAddress;
-+      EFI_MAC_ADDRESS ClientMacAddress;
-+      EFI_IPv4_ADDRESS ServerAddress;
-+      EFI_IPv4_ADDRESS RouterAddress;
-+      EFI_IPv4_ADDRESS SubnetMask;
-+      grub_efi_uint32_t LeaseTime;
-+      EFI_DHCP4_PACKET *ReplyPacket;
-+} EFI_DHCP4_MODE_DATA;
-+
-+#endif /* DHCP_H */
-diff --git a/efi/efichainloader.c b/efi/efichainloader.c
-new file mode 100644
-index 0000000..016636c
---- /dev/null
-+++ b/efi/efichainloader.c
-@@ -0,0 +1,265 @@
-+/* efichainloader.c - boot another boot loader */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2002,2004,2006  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#include <grub/misc.h>
-+#include <grub/types.h>
-+#include <grub/efi/api.h>
-+#include <grub/efi/efi.h>
-+#include <grub/efi/misc.h>
-+
-+#include <shared.h>
-+
-+#define grub_file_size()    filemax
-+
-+static grub_efi_physical_address_t address;
-+static grub_efi_uintn_t pages;
-+static grub_efi_device_path_t *file_path;
-+static grub_efi_handle_t image_handle;
-+
-+static int
-+grub_chainloader_unload (void)
-+{
-+  grub_efi_boot_services_t *b;
-+
-+  b = grub_efi_system_table->boot_services;
-+  Call_Service_1 (b->unload_image, image_handle);
-+  Call_Service_2 (b->free_pages, address, pages);
-+  grub_free (file_path);
-+
-+  return 0;
-+}
-+
-+static int
-+grub_chainloader_boot (void)
-+{
-+  grub_efi_boot_services_t *b;
-+  grub_efi_status_t status;
-+  grub_efi_uintn_t exit_data_size = 0;
-+  grub_efi_char16_t *exit_data = NULL;
-+
-+  b = grub_efi_system_table->boot_services;
-+  status = Call_Service_3 (b->start_image, image_handle,
-+                         &exit_data_size, &exit_data);
-+  if (status != GRUB_EFI_SUCCESS)
-+    {
-+      if (exit_data)
-+      {
-+        char *buf;
-+
-+        buf = grub_malloc (exit_data_size * 4 + 1);
-+        if (buf)
-+          {
-+            *grub_utf16_to_utf8 ((grub_uint8_t *) buf,
-+                                 exit_data, exit_data_size) = 0;
-+
-+            grub_printf (buf);
-+            grub_free (buf);
-+          }
-+        else
-+          grub_printf ("unknown error\n");
-+      }
-+      errnum = ERR_UNRECOGNIZED;
-+    }
-+
-+  if (exit_data)
-+    Call_Service_1 (b->free_pool, exit_data);
-+
-+  grub_chainloader_unload ();
-+
-+  return 0;
-+}
-+
-+static void
-+copy_file_path (grub_efi_file_path_device_path_t *fp,
-+              const char *str, grub_efi_uint16_t len)
-+{
-+  grub_efi_char16_t *p;
-+  grub_efi_uint16_t size;
-+
-+  fp->header.type = GRUB_EFI_MEDIA_DEVICE_PATH_TYPE;
-+  fp->header.subtype = GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE;
-+  size = len * sizeof (grub_efi_char16_t) + sizeof (*fp);
-+  fp->header.length[0] = (grub_efi_uint8_t) (size & 0xff);
-+  fp->header.length[1] = (grub_efi_uint8_t) (size >> 8);
-+  for (p = fp->path_name; len > 0; len--, p++, str++)
-+    {
-+      *p = (grub_efi_char16_t) (*str == '/' ? '\\' : *str);
-+    }
-+}
-+
-+static grub_efi_device_path_t *
-+make_file_path (const char *filename)
-+{
-+  char *dir_start;
-+  char *dir_end;
-+  grub_size_t size;
-+  grub_efi_device_path_t *d;
-+
-+  dir_start = grub_strchr (filename, ')');
-+  if (! dir_start)
-+    dir_start = (char *) filename;
-+  else
-+    dir_start++;
-+
-+  dir_end = grub_strrchr (dir_start, '/');
-+  if (! dir_end)
-+    {
-+      errnum = ERR_BAD_FILENAME;
-+      grub_printf ("invalid EFI file path");
-+      return 0;
-+    }
-+
-+  size = 0;
-+  file_path = grub_malloc ((grub_strlen (dir_start) + 1)
-+                         * sizeof (grub_efi_char16_t)
-+                         + sizeof (grub_efi_file_path_device_path_t) * 2);
-+  if (! file_path)
-+    return 0;
-+
-+  /* Fill the file path for the directory.  */
-+  d = (grub_efi_device_path_t *) file_path;
-+
-+  if (dir_end - dir_start)
-+    {
-+      copy_file_path ((grub_efi_file_path_device_path_t *) d,
-+                    dir_start, dir_end - dir_start);
-+      d = GRUB_EFI_NEXT_DEVICE_PATH (d);
-+      /* Fill the file path for the file.  */
-+      copy_file_path ((grub_efi_file_path_device_path_t *) d,
-+                    dir_end + 1, grub_strlen (dir_end + 1));
-+    }
-+  else
-+    {
-+      /* Fill the file path for the file.  */
-+      copy_file_path ((grub_efi_file_path_device_path_t *) d,
-+                    dir_end, grub_strlen (dir_end));
-+    }
-+
-+  /* Fill the end of device path nodes.  */
-+  d = GRUB_EFI_NEXT_DEVICE_PATH (d);
-+  d->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
-+  d->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
-+  d->length[0] = sizeof (*d);
-+  d->length[1] = 0;
-+
-+  return file_path;
-+}
-+
-+int
-+grub_chainloader (char *filename)
-+{
-+  grub_ssize_t size;
-+  grub_efi_status_t status;
-+  grub_efi_boot_services_t *b;
-+  grub_efi_handle_t dev_handle = 0;
-+  grub_efi_loaded_image_t *loaded_image;
-+
-+  /* Initialize some global variables.  */
-+  address = 0xffffffff;
-+  image_handle = 0;
-+
-+  b = grub_efi_system_table->boot_services;
-+
-+  if (! grub_open (filename))
-+    goto fail1;
-+
-+  dev_handle = grub_efidisk_get_current_bdev_handle ();
-+  if (! dev_handle)
-+    {
-+      errnum = ERR_UNRECOGNIZED;
-+      grub_printf ("not a valid root device\n");
-+      goto fail;
-+    }
-+
-+  file_path = make_file_path (filename);
-+  if (! file_path)
-+    goto fail;
-+
-+  grub_printf ("file path: ");
-+  grub_efi_print_device_path (file_path);
-+
-+  size = grub_file_size ();
-+  pages = (((grub_efi_uintn_t) size + ((1 << 12) - 1)) >> 12);
-+
-+  status = Call_Service_4 (b->allocate_pages, GRUB_EFI_ALLOCATE_ANY_PAGES,
-+                         GRUB_EFI_LOADER_CODE, pages, &address);
-+  if (status != GRUB_EFI_SUCCESS)
-+    {
-+      errnum = ERR_UNRECOGNIZED;
-+      grub_printf ("cannot allocate %u pages", pages);
-+      goto fail;
-+    }
-+
-+  if (grub_read ((void *) ((grub_addr_t) address), size) != size)
-+    {
-+      if (errnum == ERR_NONE)
-+      {
-+        errnum = ERR_UNRECOGNIZED;
-+        grub_printf ("too small");
-+      }
-+      goto fail;
-+    }
-+
-+  status = Call_Service_6 (b->load_image, 0, grub_efi_image_handle, file_path,
-+                         (void *) ((grub_addr_t) address), size,
-+                         &image_handle);
-+  if (status != GRUB_EFI_SUCCESS)
-+    {
-+      errnum = ERR_UNRECOGNIZED;
-+      if (status == GRUB_EFI_OUT_OF_RESOURCES)
-+      grub_printf ("out of resources");
-+      else
-+      grub_printf ("cannot load image");
-+
-+      goto fail;
-+    }
-+
-+  /* LoadImage does not set a device handler when the image is
-+     loaded from memory, so it is necessary to set it explicitly here.
-+     This is a mess.  */
-+  loaded_image = grub_efi_get_loaded_image (image_handle);
-+  if (! loaded_image)
-+    {
-+      errnum = ERR_UNRECOGNIZED;
-+      grub_printf ("no loaded image available");
-+      goto fail;
-+    }
-+  loaded_image->device_handle = dev_handle;
-+
-+  grub_close ();
-+  return KERNEL_TYPE_CHAINLOADER;
-+
-+ fail:
-+  grub_close ();
-+ fail1:
-+  if (address)
-+    b->free_pages (address, pages);
-+
-+  return KERNEL_TYPE_NONE;
-+}
-+
-+/* calls for direct boot-loader chaining */
-+void
-+chain_stage1 (unsigned long segment, unsigned long offset,
-+            unsigned long part_table_addr)
-+{
-+  grub_chainloader_boot ();
-+  for (;;);
-+}
-diff --git a/efi/eficon.c b/efi/eficon.c
-new file mode 100644
-index 0000000..037f050
---- /dev/null
-+++ b/efi/eficon.c
-@@ -0,0 +1,306 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2006  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#include <grub/misc.h>
-+#include <grub/types.h>
-+#include <grub/efi/efi.h>
-+#include <grub/efi/api.h>
-+#include <grub/efi/misc.h>
-+
-+#include <shared.h>
-+#include <term.h>
-+
-+static int
-+grub_console_standard_color = GRUB_EFI_TEXT_ATTR (GRUB_EFI_YELLOW,
-+                                                GRUB_EFI_BACKGROUND_BLACK);
-+static int
-+grub_console_normal_color = GRUB_EFI_TEXT_ATTR (GRUB_EFI_LIGHTGRAY,
-+                                              GRUB_EFI_BACKGROUND_BLACK);
-+static int
-+grub_console_highlight_color = GRUB_EFI_TEXT_ATTR (GRUB_EFI_BLACK,
-+                                                 GRUB_EFI_BACKGROUND_LIGHTGRAY);
-+
-+static int read_key = -1;
-+
-+void
-+console_putchar (int c)
-+{
-+  grub_efi_char16_t str[2];
-+  grub_efi_simple_text_output_interface_t *o;
-+
-+  o = grub_efi_system_table->con_out;
-+
-+  switch (c)
-+    {
-+    case DISP_LEFT:
-+      c = '<';
-+      break;
-+
-+    case DISP_UP:
-+      c = '^';
-+      break;
-+
-+    case DISP_RIGHT:
-+      c = '>';
-+      break;
-+
-+    case DISP_DOWN:
-+      c = 'v';
-+      break;
-+
-+    case DISP_HORIZ:
-+      c = '-';
-+      break;
-+
-+    case DISP_VERT:
-+      c = '|';
-+      break;
-+
-+    case DISP_UL:
-+    case DISP_UR:
-+    case DISP_LL:
-+    case DISP_LR:
-+      c = '+';
-+      break;
-+    }
-+
-+  /* For now, do not try to use a surrogate pair.  */
-+  if (c > 0xffff)
-+    c = '?';
-+
-+  str[0] = (grub_efi_char16_t)  (c & 0xffff);
-+  str[1] = 0;
-+
-+  /* Should this test be cached?  */
-+  if (c > 0x7f && Call_Service_2 (o->test_string, o, str) != GRUB_EFI_SUCCESS)
-+    return;
-+
-+  Call_Service_2 (o->output_string, o, str);
-+}
-+
-+int
-+console_checkkey (void)
-+{
-+  grub_efi_simple_input_interface_t *i;
-+  grub_efi_input_key_t key;
-+  grub_efi_status_t status;
-+
-+  if (read_key >= 0)
-+    return 1;
-+
-+  i = grub_efi_system_table->con_in;
-+  status = Call_Service_2 (i->read_key_stroke ,i, &key);
-+#if 0
-+  switch (status)
-+    {
-+    case GRUB_EFI_SUCCESS:
-+      {
-+      int xy;
-+
-+      xy = console_getxy ();
-+      console_gotoxy (0, 0);
-+      grub_printf ("scan_code=%x,unicode_char=%x  ",
-+                   (unsigned) key.scan_code,
-+                   (unsigned) key.unicode_char);
-+      console_gotoxy (xy >> 8, xy & 0xff);
-+      }
-+      break;
-+
-+    case GRUB_EFI_NOT_READY:
-+      grub_printf ("not ready   ");
-+      break;
-+
-+    default:
-+      grub_printf ("device error   ");
-+      break;
-+    }
-+#endif
-+
-+  if (status == GRUB_EFI_SUCCESS)
-+    {
-+      switch (key.scan_code)
-+      {
-+      case 0x00:
-+        read_key = key.unicode_char;
-+        break;
-+      case 0x01:
-+        read_key = 16;
-+        break;
-+      case 0x02:
-+        read_key = 14;
-+        break;
-+      case 0x03:
-+        read_key = 6;
-+        break;
-+      case 0x04:
-+        read_key = 2;
-+        break;
-+      case 0x05:
-+        read_key = 1;
-+        break;
-+      case 0x06:
-+        read_key = 5;
-+        break;
-+      case 0x07:
-+        break;
-+      case 0x08:
-+        read_key = 4;
-+        break;
-+      case 0x09:
-+        break;
-+      case 0x0a:
-+        break;
-+      case 0x17:
-+        read_key = '\e';
-+        break;
-+      default:
-+        break;
-+      }
-+    }
-+
-+  return read_key;
-+}
-+
-+int
-+console_getkey (void)
-+{
-+  grub_efi_simple_input_interface_t *i;
-+  grub_efi_boot_services_t *b;
-+  grub_efi_uintn_t index;
-+  grub_efi_status_t status;
-+  int key;
-+
-+  if (read_key >= 0)
-+    {
-+      key = read_key;
-+      read_key = -1;
-+      return key;
-+    }
-+
-+  i = grub_efi_system_table->con_in;
-+  b = grub_efi_system_table->boot_services;
-+
-+  do
-+    {
-+      status = Call_Service_3 (b->wait_for_event , 1, &(i->wait_for_key), &index);
-+      if (status != GRUB_EFI_SUCCESS)
-+              return -1;
-+
-+      console_checkkey ();
-+    }
-+  while (read_key < 0);
-+
-+  key = read_key;
-+  read_key = -1;
-+  return key;
-+}
-+
-+int
-+console_keystatus (void)
-+{
-+  /* Doesn't look like EFI can support this... */
-+  return 0;
-+}
-+
-+int
-+console_getxy (void)
-+{
-+  grub_efi_simple_text_output_interface_t *o;
-+
-+  o = grub_efi_system_table->con_out;
-+  return ((o->mode->cursor_column << 8) | o->mode->cursor_row);
-+}
-+
-+void
-+console_gotoxy (int x, int y)
-+{
-+  grub_efi_simple_text_output_interface_t *o;
-+
-+  o = grub_efi_system_table->con_out;
-+  Call_Service_3 (o->set_cursor_position , o, x, y);
-+}
-+
-+void
-+console_cls (void)
-+{
-+  grub_efi_simple_text_output_interface_t *o;
-+  grub_efi_int32_t orig_attr;
-+
-+  o = grub_efi_system_table->con_out;
-+  orig_attr = o->mode->attribute;
-+  Call_Service_2 (o->set_attributes, o, GRUB_EFI_BACKGROUND_BLACK);
-+  Call_Service_1 (o->clear_screen , o);
-+  Call_Service_2 (o->set_attributes , o, orig_attr);
-+}
-+
-+void
-+console_setcolorstate (color_state state)
-+{
-+  grub_efi_simple_text_output_interface_t *o;
-+
-+  o = grub_efi_system_table->con_out;
-+
-+  switch (state) {
-+    case COLOR_STATE_STANDARD:
-+      Call_Service_2 (o->set_attributes, o, grub_console_standard_color);
-+      break;
-+    case COLOR_STATE_NORMAL:
-+      Call_Service_2 (o->set_attributes, o, grub_console_normal_color);
-+      break;
-+    case COLOR_STATE_HIGHLIGHT:
-+      Call_Service_2 (o->set_attributes, o, grub_console_highlight_color);
-+      break;
-+    default:
-+      break;
-+  }
-+}
-+
-+void
-+console_setcolor (int normal_color, int highlight_color)
-+{
-+  grub_console_normal_color = normal_color;
-+  grub_console_highlight_color = highlight_color;
-+}
-+
-+int
-+console_setcursor (int on)
-+{
-+  grub_efi_simple_text_output_interface_t *o;
-+
-+  o = grub_efi_system_table->con_out;
-+  Call_Service_2 (o->enable_cursor, o, on);
-+  return on;
-+}
-+
-+void
-+grub_console_init (void)
-+{
-+  /* FIXME: it is necessary to consider the case where no console control
-+     is present but the default is already in text mode.  */
-+  if (! grub_efi_set_text_mode (1))
-+    {
-+      grub_printf ("cannot set text mode");
-+      return;
-+    }
-+}
-+
-+void
-+grub_console_fini (void)
-+{
-+}
-diff --git a/efi/eficore.c b/efi/eficore.c
-new file mode 100644
-index 0000000..8abea7d
---- /dev/null
-+++ b/efi/eficore.c
-@@ -0,0 +1,241 @@
-+/* eficore.c - generic EFI support */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2006  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#include <config.h>
-+#include <grub/misc.h>
-+#include <grub/efi/api.h>
-+#include <grub/efi/efi.h>
-+#include <grub/efi/eficall.h>
-+#include <grub/efi/console_control.h>
-+#include <grub/efi/time.h>
-+
-+#include <shared.h>
-+
-+/* The handle of GRUB itself. Filled in by the startup code.  */
-+grub_efi_handle_t grub_efi_image_handle;
-+
-+/* The pointer to a system table. Filled in by the startup code.  */
-+grub_efi_system_table_t *grub_efi_system_table;
-+
-+static grub_efi_guid_t console_control_guid = GRUB_EFI_CONSOLE_CONTROL_GUID;
-+static grub_efi_guid_t loaded_image_guid = GRUB_EFI_LOADED_IMAGE_GUID;
-+static grub_efi_guid_t device_path_guid = GRUB_EFI_DEVICE_PATH_GUID;
-+
-+/* temporary, until we're using gnu-efi's include files --pjones */
-+extern int setjmp(grub_jmp_buf env);
-+int grub_setjmp(grub_jmp_buf env)
-+{
-+      return setjmp(env);
-+}
-+
-+extern void longjmp(grub_jmp_buf env, int val);
-+void grub_longjmp(grub_jmp_buf env, int val)
-+{
-+      longjmp(env, val);
-+}
-+
-+grub_efi_status_t
-+grub_efi_locate_device_path (grub_efi_guid_t *protocol,
-+                           grub_efi_device_path_t **dp,
-+                           grub_efi_handle_t *handle)
-+{
-+      return Call_Service_3(
-+              grub_efi_system_table->boot_services->locate_device_path,
-+              protocol, dp, handle);
-+}
-+
-+grub_efi_status_t
-+grub_efi_locate_handle_buffer (grub_efi_locate_search_type_t search_type,
-+                              grub_efi_guid_t *protocol,
-+                              void *search_key,
-+                              grub_efi_uintn_t *no_handles,
-+                              grub_efi_handle_t **buffer)
-+{
-+      return Call_Service_5(
-+              grub_efi_system_table->boot_services->locate_handle_buffer,
-+              search_type, protocol, search_key, no_handles, buffer);
-+}
-+
-+void *
-+grub_efi_locate_protocol (grub_efi_guid_t *protocol, void *registration)
-+{
-+  void *interface;
-+  grub_efi_status_t status;
-+
-+  status = Call_Service_3 (grub_efi_system_table->boot_services->locate_protocol,
-+                              protocol,
-+                              registration,
-+                              &interface);
-+  if (status != GRUB_EFI_SUCCESS)
-+    return 0;
-+
-+  return interface;
-+}
-+
-+/* Return the array of handles which meet the requirement. If successful,
-+   the number of handles is stored in NUM_HANDLES. The array is allocated
-+   from the heap.  */
-+grub_efi_handle_t *
-+grub_efi_locate_handle (grub_efi_locate_search_type_t search_type,
-+                      grub_efi_guid_t *protocol,
-+                      void *search_key,
-+                      grub_efi_uintn_t *num_handles)
-+{
-+  grub_efi_boot_services_t *b;
-+  grub_efi_status_t status;
-+  grub_efi_handle_t *buffer;
-+  grub_efi_uintn_t buffer_size = 8 * sizeof (grub_efi_handle_t);
-+
-+  buffer = grub_malloc (buffer_size);
-+  if (! buffer)
-+    return 0;
-+
-+  b = grub_efi_system_table->boot_services;
-+  status = Call_Service_5 (b->locate_handle, search_type, protocol,
-+                               search_key, &buffer_size, buffer);
-+  if (status == GRUB_EFI_BUFFER_TOO_SMALL)
-+    {
-+      grub_free (buffer);
-+      buffer = grub_malloc (buffer_size);
-+      if (! buffer)
-+      return 0;
-+
-+      status = Call_Service_5 (b->locate_handle, search_type, protocol,
-+                               search_key, &buffer_size, buffer);
-+    }
-+
-+  if (status != GRUB_EFI_SUCCESS)
-+    {
-+      grub_free (buffer);
-+      return 0;
-+    }
-+
-+  *num_handles = buffer_size / sizeof (grub_efi_handle_t);
-+  return buffer;
-+}
-+
-+void *
-+grub_efi_open_protocol (grub_efi_handle_t handle,
-+                      grub_efi_guid_t *protocol,
-+                      grub_efi_uint32_t attributes)
-+{
-+  grub_efi_boot_services_t *b;
-+  grub_efi_status_t status;
-+  void *interface;
-+
-+  b = grub_efi_system_table->boot_services;
-+  status = Call_Service_6 ( b->open_protocol,
-+                           handle,
-+                           protocol,
-+                           &interface,
-+                           grub_efi_image_handle,
-+                           0,
-+                           attributes);
-+  if (status != GRUB_EFI_SUCCESS)
-+    return 0;
-+
-+  return interface;
-+}
-+
-+int
-+grub_efi_set_text_mode (int on)
-+{
-+  grub_efi_console_control_protocol_t *c;
-+  grub_efi_screen_mode_t mode, new_mode;
-+
-+  c = grub_efi_locate_protocol (&console_control_guid, 0);
-+  if (! c)
-+    /* No console control protocol instance available, assume it is
-+       already in text mode. */
-+    return 1;
-+
-+  if (Call_Service_4 (c->get_mode , c, &mode, 0, 0) != GRUB_EFI_SUCCESS)
-+    return 0;
-+
-+  new_mode = on ? GRUB_EFI_SCREEN_TEXT : GRUB_EFI_SCREEN_GRAPHICS;
-+  if (mode != new_mode)
-+    if (Call_Service_2 (c->set_mode , c, new_mode) != GRUB_EFI_SUCCESS)
-+      return 0;
-+
-+  return 1;
-+}
-+
-+void
-+grub_efi_stall (grub_efi_uintn_t microseconds)
-+{
-+  Call_Service_1 (grub_efi_system_table->boot_services->stall , microseconds);
-+}
-+
-+grub_efi_loaded_image_t *
-+grub_efi_get_loaded_image (grub_efi_handle_t image_handle)
-+{
-+  return grub_efi_open_protocol (image_handle,
-+                       &loaded_image_guid,
-+                       GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-+}
-+
-+void
-+grub_exit (void)
-+{
-+  grub_efi_fini ();
-+  Call_Service_4(grub_efi_system_table->boot_services->exit,
-+               grub_efi_image_handle,
-+               GRUB_EFI_SUCCESS,
-+               0,
-+               0 );
-+  for (;;);
-+}
-+
-+int
-+grub_efi_exit_boot_services (grub_efi_uintn_t map_key)
-+{
-+  grub_efi_boot_services_t *b;
-+  grub_efi_status_t status;
-+
-+  b = grub_efi_system_table->boot_services;
-+  status = Call_Service_2 (b->exit_boot_services ,
-+                              grub_efi_image_handle,
-+                              map_key);
-+  return status == GRUB_EFI_SUCCESS;
-+}
-+
-+grub_uint32_t
-+grub_get_rtc (void)
-+{
-+  grub_efi_time_t time;
-+  grub_efi_runtime_services_t *r;
-+
-+  r = grub_efi_system_table->runtime_services;
-+  if (Call_Service_2(r->get_time , &time, 0) != GRUB_EFI_SUCCESS)
-+    /* What is possible in this case?  */
-+    return 0;
-+
-+  return (((time.minute * 60 + time.second) * 1000
-+         + time.nanosecond / 1000000)
-+        * GRUB_TICKS_PER_SECOND / 1000);
-+}
-+
-+grub_efi_device_path_t *
-+grub_efi_get_device_path (grub_efi_handle_t handle)
-+{
-+  return grub_efi_open_protocol (handle, &device_path_guid,
-+                               GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-+}
-+
-diff --git a/efi/efidisk.c b/efi/efidisk.c
-new file mode 100644
-index 0000000..6a505f3
---- /dev/null
-+++ b/efi/efidisk.c
-@@ -0,0 +1,801 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2006  Free Software Foundation, Inc.
-+ *
-+ *  GRUB is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with GRUB; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#include <grub/types.h>
-+#include <grub/misc.h>
-+#include <grub/efi/api.h>
-+#include <grub/efi/efi.h>
-+#include <grub/efi/misc.h>
-+
-+#include <shared.h>
-+
-+struct grub_efidisk_data
-+{
-+  grub_efi_handle_t handle;
-+  grub_efi_device_path_t *device_path;
-+  grub_efi_device_path_t *last_device_path;
-+  grub_efi_block_io_t *block_io;
-+  grub_efi_disk_io_t *disk_io;
-+  struct grub_efidisk_data *next;
-+};
-+
-+/* GUIDs.  */
-+static grub_efi_guid_t disk_io_guid = GRUB_EFI_DISK_IO_GUID;
-+static grub_efi_guid_t block_io_guid = GRUB_EFI_BLOCK_IO_GUID;
-+static grub_efi_guid_t device_path_from_text_guid = GRUB_EFI_DEVICE_PATH_FROM_TEXT_GUID;
-+
-+static struct grub_efidisk_data *fd_devices;
-+static struct grub_efidisk_data *hd_devices;
-+static struct grub_efidisk_data *cd_devices;
-+
-+static int get_device_sector_bits(struct grub_efidisk_data *device);
-+static int get_device_sector_size(struct grub_efidisk_data *device);
-+static struct grub_efidisk_data *get_device_from_drive (int drive);
-+
-+static struct grub_efidisk_data *
-+make_devices (void)
-+{
-+  grub_efi_uintn_t num_handles;
-+  grub_efi_handle_t *handles;
-+  grub_efi_handle_t *handle;
-+  struct grub_efidisk_data *devices = 0;
-+
-+  /* Find handles which support the disk io interface.  */
-+  handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, &disk_io_guid,
-+                                  0, &num_handles);
-+  if (! handles)
-+    return 0;
-+
-+  /* Make a linked list of devices.  */
-+  for (handle = handles; num_handles--; handle++)
-+    {
-+      grub_efi_device_path_t *dp;
-+      grub_efi_device_path_t *ldp;
-+      struct grub_efidisk_data *d;
-+      grub_efi_block_io_t *bio;
-+      grub_efi_disk_io_t *dio;
-+
-+      dp = grub_efi_get_device_path (*handle);
-+      if (! dp)
-+      continue;
-+
-+      ldp = find_last_device_path (dp);
-+      if (! ldp)
-+      /* This is empty. Why?  */
-+      continue;
-+
-+      bio = grub_efi_open_protocol (*handle, &block_io_guid,
-+                                  GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-+      dio = grub_efi_open_protocol (*handle, &disk_io_guid,
-+                                  GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-+      if (! bio || ! dio)
-+      /* This should not happen... Why?  */
-+      continue;
-+
-+      d = grub_malloc (sizeof (*d));
-+      if (! d)
-+      {
-+        /* Uggh.  */
-+        grub_free (handles);
-+        return 0;
-+      }
-+
-+      d->handle = *handle;
-+      d->device_path = dp;
-+      d->last_device_path = ldp;
-+      d->block_io = bio;
-+      d->disk_io = dio;
-+      d->next = devices;
-+      devices = d;
-+    }
-+
-+  grub_free (handles);
-+
-+  return devices;
-+}
-+
-+static int
-+iterate_child_devices (struct grub_efidisk_data *devices,
-+                     struct grub_efidisk_data *d,
-+                     int (*hook) (struct grub_efidisk_data *child))
-+{
-+  struct grub_efidisk_data *p;
-+
-+  for (p = devices; p; p = p->next)
-+    {
-+      grub_efi_device_path_t *dp, *ldp;
-+
-+      dp = duplicate_device_path (p->device_path);
-+      if (! dp)
-+      return 0;
-+
-+      ldp = find_last_device_path (dp);
-+      ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
-+      ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
-+      ldp->length[0] = sizeof (*ldp);
-+      ldp->length[1] = 0;
-+
-+      if (compare_device_paths (dp, d->device_path) == 0)
-+      if (hook (p))
-+        {
-+          grub_free (dp);
-+          return 1;
-+        }
-+
-+      grub_free (dp);
-+    }
-+
-+  return 0;
-+}
-+
-+/* Add a device into a list of devices in an ascending order.  */
-+static void
-+add_device (struct grub_efidisk_data **devices, struct grub_efidisk_data *d)
-+{
-+  struct grub_efidisk_data **p;
-+  struct grub_efidisk_data *n;
-+
-+  for (p = devices; *p; p = &((*p)->next))
-+    {
-+      int ret;
-+
-+      ret = compare_device_paths (find_last_device_path ((*p)->device_path),
-+                                find_last_device_path (d->device_path));
-+      if (ret == 0)
-+      ret = compare_device_paths ((*p)->device_path,
-+                                  d->device_path);
-+      if (ret == 0)
-+      return;
-+      else if (ret > 0)
-+      break;
-+    }
-+
-+  n = grub_malloc (sizeof (*n));
-+  if (! n)
-+    return;
-+
-+  grub_memcpy (n, d, sizeof (*n));
-+  n->next = (*p);
-+  (*p) = n;
-+}
-+
-+/* Name the devices.  */
-+static void
-+name_devices (struct grub_efidisk_data *devices)
-+{
-+  struct grub_efidisk_data *d;
-+
-+  /* Let's see what can be added more.  */
-+  for (d = devices; d; d = d->next)
-+    {
-+      grub_efi_device_path_t *dp;
-+      grub_efi_block_io_media_t *m;
-+
-+      dp = d->last_device_path;
-+      if (! dp)
-+      continue;
-+
-+      m = d->block_io->media;
-+      if (GRUB_EFI_DEVICE_PATH_TYPE(dp) == GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE)
-+      {
-+        /* XXX FIXME this won't work if we see write-protected disks with
-+         * 4k sectors */
-+        if (m->read_only && m->block_size > 0x200)
-+          {
-+            add_device (&cd_devices, d);
-+          } else
-+          {
-+            add_device (&hd_devices, d);
-+          }
-+      }
-+      if (GRUB_EFI_DEVICE_PATH_TYPE(dp) == GRUB_EFI_ACPI_DEVICE_PATH_TYPE)
-+      {
-+        add_device (&fd_devices, d);
-+      }
-+    }
-+}
-+
-+static void
-+free_devices (struct grub_efidisk_data *devices)
-+{
-+  struct grub_efidisk_data *p, *q;
-+
-+  for (p = devices; p; p = q)
-+    {
-+      q = p->next;
-+      grub_free (p);
-+    }
-+}
-+
-+/* Enumerate all disks to name devices.  */
-+static void
-+enumerate_disks (void)
-+{
-+  struct grub_efidisk_data *devices;
-+
-+  devices = make_devices ();
-+  if (! devices)
-+    return;
-+
-+  name_devices (devices);
-+  free_devices (devices);
-+}
-+
-+static struct grub_efidisk_data *
-+get_device (struct grub_efidisk_data *devices, int num)
-+{
-+  struct grub_efidisk_data *d;
-+
-+  for (d = devices; d && num; d = d->next, num--)
-+    ;
-+
-+  if (num == 0)
-+    return d;
-+
-+  return 0;
-+}
-+
-+static int
-+grub_efidisk_read (struct grub_efidisk_data *d, grub_disk_addr_t sector,
-+                 grub_size_t size, char *buf)
-+{
-+  /* For now, use the disk io interface rather than the block io's.  */
-+  grub_efi_disk_io_t *dio;
-+  grub_efi_block_io_t *bio;
-+  grub_efi_status_t status;
-+  grub_efi_uint64_t sector_size = get_device_sector_size(d);
-+
-+  dio = d->disk_io;
-+  bio = d->block_io;
-+
-+  status = Call_Service_5 (dio->read,
-+                         dio, bio->media->media_id,
-+                         sector * sector_size,
-+                         size * sector_size,
-+                         buf);
-+  if (status != GRUB_EFI_SUCCESS)
-+    return -1;
-+
-+  return 0;
-+}
-+
-+static int
-+grub_efidisk_write (struct grub_efidisk_data *d, grub_disk_addr_t sector,
-+                  grub_size_t size, const char *buf)
-+{
-+  /* For now, use the disk io interface rather than the block io's.  */
-+  grub_efi_disk_io_t *dio;
-+  grub_efi_block_io_t *bio;
-+  grub_efi_status_t status;
-+  grub_efi_uint64_t sector_size = get_device_sector_size(d);
-+
-+  dio = d->disk_io;
-+  bio = d->block_io;
-+
-+  grub_dprintf ("efidisk",
-+              "writing 0x%x sectors at the sector 0x%x to ??\n",
-+              (unsigned) size, (unsigned int) sector);
-+
-+  status = Call_Service_5 (dio->write ,
-+                         dio, bio->media->media_id,
-+                         sector * sector_size,
-+                         size * sector_size,
-+                         (void *) buf);
-+  if (status != GRUB_EFI_SUCCESS)
-+    return -1;
-+
-+  return 0;
-+}
-+
-+void
-+grub_efidisk_init (void)
-+{
-+  enumerate_disks ();
-+}
-+
-+void
-+grub_efidisk_fini (void)
-+{
-+  free_devices (fd_devices);
-+  free_devices (hd_devices);
-+  free_devices (cd_devices);
-+}
-+
-+static int
-+get_device_sector_size(struct grub_efidisk_data *device)
-+{
-+      return device->block_io->media->block_size;
-+}
-+
-+int
-+get_sector_size(int drive)
-+{
-+      struct grub_efidisk_data *device = get_device_from_drive(drive);
-+      return get_device_sector_size(device);
-+}
-+
-+/*
-+ * ffz = Find First Zero in word. Undefined if no zero exists,
-+ * so code should check against ~0UL first..
-+ */
-+static __inline__ unsigned int
-+ffz (unsigned int word)
-+{
-+  __asm__ ("bsfl %1,%0"
-+:        "=r" (word)
-+:        "r" (~word));
-+  return word;
-+}
-+#define log2(n) ffz(~(n))
-+
-+static int
-+get_device_sector_bits(struct grub_efidisk_data *device)
-+{
-+      int sector_size = get_device_sector_size(device);
-+      return log2(sector_size);
-+}
-+
-+int
-+get_sector_bits(int drive)
-+{
-+      int sector_size = get_sector_size(drive);
-+      return log2(sector_size);
-+}
-+
-+static struct grub_efidisk_data *
-+get_device_from_drive (int drive)
-+{
-+#ifdef SUPPORT_NETBOOT
-+  /* Not supported */
-+  if (drive == NETWORK_DRIVE)
-+    return NULL;
-+#endif
-+  if (drive == GRUB_INVALID_DRIVE)
-+    return NULL;
-+  if (drive == cdrom_drive)
-+    return get_device (cd_devices, 0);
-+  /* Hard disk */
-+  if (drive & 0x80)
-+    return get_device (hd_devices, drive - 0x80);
-+  /* Floppy disk */
-+  else
-+    return get_device (fd_devices, drive);
-+}
-+
-+/* Low-level disk I/O.  Our stubbed version just returns a file
-+   descriptor, not the actual geometry. */
-+int
-+get_diskinfo (int drive, struct geometry *geometry)
-+{
-+  struct grub_efidisk_data *d;
-+
-+  d = get_device_from_drive (drive);
-+  if (!d)
-+    return -1;
-+  geometry->total_sectors = d->block_io->media->last_block+1;
-+  geometry->sector_size = d->block_io->media->block_size;
-+  geometry->flags = BIOSDISK_FLAG_LBA_EXTENSION;
-+  geometry->sectors = 63;
-+  if (geometry->total_sectors / 63 < 255)
-+    geometry->heads = 1;
-+  else
-+    geometry->heads = 255;
-+  geometry->cylinders = geometry->total_sectors / 63 / geometry->heads;
-+  return 0;
-+}
-+
-+int
-+biosdisk (int subfunc, int drive, struct geometry *geometry,
-+        int sector, int nsec, int segment)
-+{
-+  char *buf;
-+  struct grub_efidisk_data *d;
-+  int ret;
-+
-+  d = get_device_from_drive (drive);
-+  if (!d)
-+    return -1;
-+  buf = (char *) ((unsigned long) segment << 4);
-+  switch (subfunc)
-+    {
-+    case BIOSDISK_READ:
-+      ret = grub_efidisk_read (d, sector, nsec, buf);
-+      break;
-+    case BIOSDISK_WRITE:
-+      ret = grub_efidisk_write (d, sector, nsec, buf);
-+      break;
-+    default:
-+      return -1;
-+    }
-+
-+  return 0;
-+}
-+
-+/* Some utility functions to map GRUB devices with EFI devices.  */
-+grub_efi_handle_t
-+grub_efidisk_get_current_bdev_handle (void)
-+{
-+  struct grub_efidisk_data *d;
-+
-+  d = get_device_from_drive (current_drive);
-+  if (d == NULL)
-+    return NULL;
-+
-+  if (current_drive == GRUB_INVALID_DRIVE)
-+    return NULL;
-+
-+  if (current_drive == cdrom_drive)
-+    return d->handle;
-+
-+  if (! (current_drive & 0x80))
-+    return d->handle;
-+  /* If this is the whole disk, just return its own data.  */
-+  else if (current_partition == 0xFFFFFF)
-+    return d->handle;
-+  /* Otherwise, we must query the corresponding device to the firmware.  */
-+  else
-+    {
-+      struct grub_efidisk_data *devices;
-+      grub_efi_handle_t handle = 0;
-+      auto int find_partition (struct grub_efidisk_data *c);
-+
-+      int find_partition (struct grub_efidisk_data *c)
-+      {
-+        grub_efi_hard_drive_device_path_t hd;
-+
-+        grub_memcpy (&hd, c->last_device_path, sizeof (hd));
-+
-+        if ((GRUB_EFI_DEVICE_PATH_TYPE (c->last_device_path)
-+             == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE)
-+            && (GRUB_EFI_DEVICE_PATH_SUBTYPE (c->last_device_path)
-+                == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE)
-+            && (part_start == hd.partition_start))
-+          {
-+            handle = c->handle;
-+            return 1;
-+          }
-+
-+        return 0;
-+      }
-+
-+      devices = make_devices ();
-+      iterate_child_devices (devices, d, find_partition);
-+      free_devices (devices);
-+
-+      if (handle != 0)
-+      return handle;
-+    }
-+
-+  return 0;
-+}
-+
-+int
-+grub_get_drive_partition_from_bdev_handle (grub_efi_handle_t handle,
-+                                         unsigned long *drive,
-+                                         unsigned long *partition)
-+{
-+  grub_efi_device_path_t *dp, *dp1;
-+  struct grub_efidisk_data *d, *devices;
-+  int drv;
-+  unsigned long part;
-+  grub_efi_hard_drive_device_path_t hd;
-+  int found;
-+  int part_type, part_entry;
-+  unsigned long partition_start, partition_len, part_offset, part_extoffset;
-+  unsigned long gpt_offset;
-+  int gpt_count, gpt_size;
-+  auto int find_bdev (struct grub_efidisk_data *c);
-+
-+  int find_bdev (struct grub_efidisk_data *c)
-+    {
-+      if (! compare_device_paths (c->device_path, dp))
-+      {
-+        grub_memcpy (&hd, c->last_device_path, sizeof (hd));
-+        found = 1;
-+        return 1;
-+      }
-+      return 0;
-+    }
-+
-+  dp = grub_efi_get_device_path (handle);
-+  if (! dp)
-+    return 0;
-+
-+  dp1 = dp;
-+  while (1)
-+    {
-+      grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp1);
-+      grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE(dp1);
-+      grub_efi_uint16_t len = GRUB_EFI_DEVICE_PATH_LENGTH (dp);
-+
-+      if (type == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE &&
-+            subtype == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE)
-+      {
-+        dp1->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
-+        dp1->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
-+        dp1->length[0] = 4;
-+        dp1->length[1] = 0;
-+      }
-+
-+      if (type == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE &&
-+        subtype == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE)
-+      {
-+        grub_efi_hard_drive_device_path_t temp_hd;
-+        grub_memcpy (&temp_hd, dp1, len);
-+        if (temp_hd.signature_type == 0 && temp_hd.mbr_type >= 0x10) {
-+          /*
-+           * Apple Parttion Map CDs appear as hard drives with non-spec
-+           * partition type fields. Fix them up.
-+           */
-+          dp1->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
-+          dp1->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
-+          dp1->length[0] = 4;
-+          dp1->length[1] = 0;
-+        }
-+      }
-+
-+      if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp1))
-+      break;
-+
-+      dp1 = GRUB_EFI_NEXT_DEVICE_PATH(dp1);
-+    }
-+
-+  drv = 0;
-+  for (d = fd_devices; d; d = d->next, drv++)
-+    {
-+      if (! compare_device_paths (d->device_path, dp))
-+      {
-+        *partition = 0xFFFFFF;
-+        *drive = drv;
-+        return 1;
-+      }
-+    }
-+
-+  drv = cdrom_drive;
-+  if (cd_devices  && ! compare_device_paths (cd_devices->device_path, dp))
-+    {
-+      *partition = 0xFFFFFF;
-+      *drive = drv;
-+      return 1;
-+    }
-+
-+  drv = 0x80;
-+  for (d = hd_devices; d; d = d->next, drv++)
-+    {
-+      if (! compare_device_paths (d->device_path, dp))
-+      {
-+        *partition = 0xFFFFFF;
-+        *drive = drv;
-+        return 1;
-+      }
-+    }
-+
-+  devices = make_devices ();
-+
-+  drv = 0x80;
-+  found = 0;
-+  for (d = hd_devices; d; d = d->next, drv++)
-+    {
-+      iterate_child_devices (devices, d, find_bdev);
-+      if (found)
-+      break;
-+    }
-+
-+  free_devices (devices);
-+
-+  if (! found)
-+    return 0;
-+
-+  char buf[get_sector_size(drv)];
-+  part = 0xFFFFFF;
-+  while (next_partition (drv, 0, &part, &part_type,
-+                       &partition_start, &partition_len,
-+                       &part_offset, &part_entry,
-+                       &part_extoffset, &gpt_offset, &gpt_count,
-+                       &gpt_size, buf))
-+    {
-+      if (part_type
-+        && partition_start == hd.partition_start)
-+      {
-+        *drive = drv;
-+        *partition = part;
-+        return 1;
-+      }
-+    }
-+
-+  return 0;
-+}
-+
-+int
-+check_device (const char *device)
-+{
-+  grub_efi_device_path_t *dp;
-+
-+  dp = device_path_from_utf8(device);
-+  if (dp == NULL)
-+    return 0;
-+
-+  grub_free(dp);
-+  return 1;
-+}
-+
-+static void
-+swap_devices (struct grub_efidisk_data *d0,
-+            struct grub_efidisk_data *d1)
-+{
-+  struct grub_efidisk_data tmp;
-+
-+  if (!d0 || !d1)
-+    return;
-+
-+  memcpy(&tmp, d1, sizeof(*d1));
-+
-+  memcpy(&d0->handle, &d1->handle, sizeof(d1->handle));
-+  d0->device_path = d1->device_path;
-+  d0->last_device_path = d1->last_device_path;
-+  d0->block_io = d1->block_io;
-+  d0->disk_io = d1->disk_io;
-+
-+  memcpy(d1->handle, tmp.handle, sizeof(tmp.handle));
-+  d1->device_path = tmp.device_path;
-+  d1->last_device_path = tmp.last_device_path;
-+  d1->block_io = tmp.block_io;
-+  d1->disk_io = tmp.disk_io;
-+}
-+
-+static int
-+compare_hd_device_paths(grub_efi_hard_drive_device_path_t *hd0,
-+                      grub_efi_hard_drive_device_path_t *hd1)
-+{
-+  grub_efi_uint64_t x;
-+  int sigsize;
-+
-+  if ((x = hd1->partition_number - hd0->partition_number))
-+    return x;
-+
-+  if ((x = hd1->partition_start - hd0->partition_start))
-+    return x;
-+
-+
-+  if ((x = hd1->partition_size - hd0->partition_size))
-+    return x;
-+
-+  if ((x = hd1->signature_type - hd0->signature_type))
-+    return x;
-+
-+  switch (hd0->signature_type)
-+    {
-+    case 1:
-+      sigsize = 4;
-+      break;
-+    case 2:
-+      sigsize = 16;
-+      break;
-+    default:
-+      sigsize = 0;
-+      break;
-+    }
-+  x = grub_memcmp((char *)hd0->partition_signature,
-+                  (char *)hd1->partition_signature, sigsize);
-+  return x;
-+}
-+
-+static grub_efi_device_path_t *
-+get_parent_of_disk(grub_efi_device_path_t *hd)
-+{
-+  grub_efi_uintn_t num_handles;
-+  grub_efi_handle_t *handles;
-+  grub_efi_handle_t *handle;
-+  grub_efi_device_path_t *ret;
-+
-+  handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL,
-+                                   &simple_file_system_guid,
-+                                    0, &num_handles);
-+  for (handle = handles; num_handles--; handle++)
-+    {
-+      grub_efi_device_path_t *fsdp, *hddp;
-+
-+      fsdp = grub_efi_get_device_path (*handle);
-+      if (!fsdp)
-+      continue;
-+      hddp = find_last_device_path(fsdp);
-+
-+      if (compare_hd_device_paths((grub_efi_hard_drive_device_path_t *)hddp,
-+                                 (grub_efi_hard_drive_device_path_t *)hd) == 0)
-+        {
-+        grub_efi_device_path_t *p;
-+        ret = duplicate_device_path((grub_efi_device_path_t *)fsdp);
-+        if (!ret)
-+          return NULL;
-+        for (p = ret; ; p = GRUB_EFI_NEXT_DEVICE_PATH(p))
-+          {
-+            if (GRUB_EFI_END_ENTIRE_DEVICE_PATH(p))
-+              break;
-+            if ((GRUB_EFI_DEVICE_PATH_TYPE(p) ==
-+                      GRUB_EFI_MEDIA_DEVICE_PATH_TYPE)
-+                    && (GRUB_EFI_DEVICE_PATH_SUBTYPE(p) ==
-+                              GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE))
-+              {
-+                p->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
-+                p->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
-+                p->length[0] = 4;
-+                p->length[1] = 0;
-+                break;
-+              }
-+          }
-+        return ret;
-+      }
-+    }
-+  return NULL;
-+}
-+
-+void
-+assign_device_name (int drive, const char *device)
-+{
-+  grub_efi_device_path_t *dp0, *dp1;
-+  struct grub_efidisk_data *devices;
-+  struct grub_efidisk_data *d, *d0 = NULL, *d1 = NULL;
-+  int n = -1;
-+
-+  dp0 = device_path_from_utf8(device);
-+  if (!dp0)
-+    return;
-+
-+  dp1 = get_parent_of_disk(dp0);
-+  grub_free(dp0);
-+  if (!dp1)
-+    return;
-+
-+  if (drive & 0x80)
-+    {
-+      drive -= 0x80;
-+      devices = hd_devices;
-+    }
-+  else
-+    {
-+      devices = cd_devices;
-+      drive -= 0x100;
-+    }
-+
-+  for (d = devices; d; d = d->next)
-+    {
-+      if (!d->device_path)
-+      continue;
-+
-+      if (++n == drive)
-+      d0 = d;
-+
-+      int x;
-+      if (!(x = compare_device_paths(dp1, d->device_path)))
-+      d1 = d;
-+
-+      if (d0 && d1)
-+        {
-+        /* if they're the same node, that just means it's already at
-+         * the right position. */
-+        if (d0 != d1)
-+          {
-+            swap_devices(d0, d1);
-+            grub_free(dp1);
-+            return;
-+          }
-+      }
-+    }
-+  grub_free(dp1);
-+}
-diff --git a/efi/efidp.c b/efi/efidp.c
-new file mode 100644
-index 0000000..d8ca03d
---- /dev/null
-+++ b/efi/efidp.c
-@@ -0,0 +1,999 @@
-+/*
-+ * GRUB  --  GRand Unified Bootloader
-+ * Copyright (C) 2010 Free Software Foundation, Inc.
-+ *
-+ *  GRUB is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with GRUB; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#include <grub/types.h>
-+#include <grub/misc.h>
-+#include <grub/efi/api.h>
-+#include <grub/efi/efi.h>
-+#include <grub/efi/misc.h>
-+
-+#include <shared.h>
-+
-+/* Duplicate a device path.  */
-+grub_efi_device_path_t *
-+duplicate_device_path (const grub_efi_device_path_t *dp)
-+{
-+  grub_efi_device_path_t *p;
-+  grub_size_t total_size = 0;
-+
-+  for (p = (grub_efi_device_path_t *) dp;
-+       ;
-+       p = GRUB_EFI_NEXT_DEVICE_PATH (p))
-+    {
-+      total_size += GRUB_EFI_DEVICE_PATH_LENGTH (p);
-+      if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (p))
-+      break;
-+    }
-+
-+  p = grub_malloc (total_size);
-+  if (! p)
-+    return 0;
-+
-+  grub_memcpy (p, dp, total_size);
-+  return p;
-+}
-+
-+/* Return the device path node right before the end node.  */
-+grub_efi_device_path_t *
-+find_last_device_path (const grub_efi_device_path_t *dp)
-+{
-+  grub_efi_device_path_t *next, *p;
-+
-+  if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp))
-+    return 0;
-+
-+  for (p = (grub_efi_device_path_t *) dp, next = GRUB_EFI_NEXT_DEVICE_PATH (p);
-+       ! GRUB_EFI_END_ENTIRE_DEVICE_PATH (next);
-+       p = next, next = GRUB_EFI_NEXT_DEVICE_PATH (next))
-+    ;
-+
-+  return p;
-+}
-+
-+/* Return the parent device path node. Must be freed */
-+grub_efi_device_path_t *
-+find_parent_device_path (const grub_efi_device_path_t *dp)
-+{
-+  grub_efi_device_path_t *final, *dup;
-+
-+  dup = duplicate_device_path(dp);
-+  final = find_last_device_path(dup);
-+
-+  final->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
-+  final->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
-+
-+  return dup;
-+}
-+
-+/* Compare device paths.  */
-+int
-+compare_device_paths (const grub_efi_device_path_t *dp1,
-+                    const grub_efi_device_path_t *dp2)
-+{
-+  if (! dp1 || ! dp2)
-+    /* Return non-zero.  */
-+    return 1;
-+
-+  while (1)
-+    {
-+      grub_efi_uint8_t type1, type2;
-+      grub_efi_uint8_t subtype1, subtype2;
-+      grub_efi_uint16_t len1, len2;
-+      int ret;
-+
-+      type1 = GRUB_EFI_DEVICE_PATH_TYPE (dp1);
-+      type2 = GRUB_EFI_DEVICE_PATH_TYPE (dp2);
-+
-+      if (type1 != type2)
-+      return (int) type2 - (int) type1;
-+
-+      subtype1 = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp1);
-+      subtype2 = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp2);
-+
-+      if (subtype1 != subtype2)
-+      return (int) subtype1 - (int) subtype2;
-+
-+      len1 = GRUB_EFI_DEVICE_PATH_LENGTH (dp1);
-+      len2 = GRUB_EFI_DEVICE_PATH_LENGTH (dp2);
-+
-+      if (len1 != len2)
-+      return (int) len1 - (int) len2;
-+
-+      ret = grub_memcmp ((char *)dp1, (char *)dp2, len1);
-+      if (ret != 0)
-+      return ret;
-+
-+      if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp1))
-+      break;
-+
-+      dp1 = (grub_efi_device_path_t *) ((char *) dp1 + len1);
-+      dp2 = (grub_efi_device_path_t *) ((char *) dp2 + len2);
-+    }
-+
-+  return 0;
-+}
-+
-+/* Print the chain of Device Path nodes. This is mainly for debugging. */
-+void
-+grub_efi_print_device_path (grub_efi_device_path_t *dp)
-+{
-+  while (1)
-+    {
-+      grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp);
-+      grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp);
-+      grub_efi_uint16_t len = GRUB_EFI_DEVICE_PATH_LENGTH (dp);
-+
-+      switch (type)
-+      {
-+      case GRUB_EFI_END_DEVICE_PATH_TYPE:
-+        switch (subtype)
-+          {
-+          case GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE:
-+            grub_printf ("/EndEntire\n");
-+            //grub_putchar ('\n');
-+            break;
-+          case GRUB_EFI_END_THIS_DEVICE_PATH_SUBTYPE:
-+            grub_printf ("/EndThis\n");
-+            //grub_putchar ('\n');
-+            break;
-+          default:
-+            grub_printf ("/EndUnknown(%x)\n", (unsigned) subtype);
-+            break;
-+          }
-+        break;
-+
-+      case GRUB_EFI_HARDWARE_DEVICE_PATH_TYPE:
-+        switch (subtype)
-+          {
-+          case GRUB_EFI_PCI_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_pci_device_path_t pci;
-+              grub_memcpy (&pci, dp, len);
-+              grub_printf ("/PCI(%x,%x)",
-+                           (unsigned) pci.function, (unsigned) pci.device);
-+            }
-+            break;
-+          case GRUB_EFI_PCCARD_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_pccard_device_path_t pccard;
-+              grub_memcpy (&pccard, dp, len);
-+              grub_printf ("/PCCARD(%x)",
-+                           (unsigned) pccard.function);
-+            }
-+            break;
-+          case GRUB_EFI_MEMORY_MAPPED_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_memory_mapped_device_path_t mmapped;
-+              grub_memcpy (&mmapped, dp, len);
-+              grub_printf ("/MMap(%x,%llx,%llx)",
-+                           (unsigned) mmapped.memory_type,
-+                           mmapped.start_address,
-+                           mmapped.end_address);
-+            }
-+            break;
-+          case GRUB_EFI_VENDOR_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_vendor_device_path_t vendor;
-+              grub_memcpy (&vendor, dp, sizeof (vendor));
-+              grub_printf ("/Vendor(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)",
-+                           (unsigned) vendor.vendor_guid.data1,
-+                           (unsigned) vendor.vendor_guid.data2,
-+                           (unsigned) vendor.vendor_guid.data3,
-+                           (unsigned) vendor.vendor_guid.data4[0],
-+                           (unsigned) vendor.vendor_guid.data4[1],
-+                           (unsigned) vendor.vendor_guid.data4[2],
-+                           (unsigned) vendor.vendor_guid.data4[3],
-+                           (unsigned) vendor.vendor_guid.data4[4],
-+                           (unsigned) vendor.vendor_guid.data4[5],
-+                           (unsigned) vendor.vendor_guid.data4[6],
-+                           (unsigned) vendor.vendor_guid.data4[7]);
-+            }
-+            break;
-+          case GRUB_EFI_CONTROLLER_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_controller_device_path_t controller;
-+              grub_memcpy (&controller, dp, len);
-+              grub_printf ("/Ctrl(%x)",
-+                           (unsigned) controller.controller_number);
-+            }
-+            break;
-+          default:
-+            grub_printf ("/UnknownHW(%x)", (unsigned) subtype);
-+            break;
-+          }
-+        break;
-+
-+      case GRUB_EFI_ACPI_DEVICE_PATH_TYPE:
-+        switch (subtype)
-+          {
-+          case GRUB_EFI_ACPI_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_acpi_device_path_t acpi;
-+              grub_memcpy (&acpi, dp, len);
-+              grub_printf ("/ACPI(%x,%x)",
-+                           (unsigned) acpi.hid,
-+                           (unsigned) acpi.uid);
-+            }
-+            break;
-+          case GRUB_EFI_EXPANDED_ACPI_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_expanded_acpi_device_path_t eacpi;
-+              grub_memcpy (&eacpi, dp, sizeof (eacpi));
-+              grub_printf ("/ACPI(");
-+
-+              if (GRUB_EFI_EXPANDED_ACPI_HIDSTR (dp)[0] == '\0')
-+                grub_printf ("%x,", (unsigned) eacpi.hid);
-+              else
-+                grub_printf ("%s,", GRUB_EFI_EXPANDED_ACPI_HIDSTR (dp));
-+
-+              if (GRUB_EFI_EXPANDED_ACPI_UIDSTR (dp)[0] == '\0')
-+                grub_printf ("%x,", (unsigned) eacpi.uid);
-+              else
-+                grub_printf ("%s,", GRUB_EFI_EXPANDED_ACPI_UIDSTR (dp));
-+
-+              if (GRUB_EFI_EXPANDED_ACPI_CIDSTR (dp)[0] == '\0')
-+                grub_printf ("%x)", (unsigned) eacpi.cid);
-+              else
-+                grub_printf ("%s)", GRUB_EFI_EXPANDED_ACPI_CIDSTR (dp));
-+            }
-+            break;
-+          default:
-+            grub_printf ("/UnknownACPI(%x)", (unsigned) subtype);
-+            break;
-+          }
-+        break;
-+
-+      case GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE:
-+        switch (subtype)
-+          {
-+          case GRUB_EFI_ATAPI_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_atapi_device_path_t atapi;
-+              grub_memcpy (&atapi, dp, len);
-+              grub_printf ("/ATAPI(%x,%x,%x)",
-+                           (unsigned) atapi.primary_secondary,
-+                           (unsigned) atapi.slave_master,
-+                           (unsigned) atapi.lun);
-+            }
-+            break;
-+          case GRUB_EFI_SCSI_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_scsi_device_path_t scsi;
-+              grub_memcpy (&scsi, dp, len);
-+              grub_printf ("/SCSI(%x,%x)",
-+                           (unsigned) scsi.pun,
-+                           (unsigned) scsi.lun);
-+            }
-+            break;
-+          case GRUB_EFI_FIBRE_CHANNEL_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_fibre_channel_device_path_t fc;
-+              grub_memcpy (&fc, dp, len);
-+              grub_printf ("/FibreChannel(%llx,%llx)",
-+                           fc.wwn, fc.lun);
-+            }
-+            break;
-+          case GRUB_EFI_1394_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_1394_device_path_t firewire;
-+              grub_memcpy (&firewire, dp, len);
-+              grub_printf ("/1394(%llx)", firewire.guid);
-+            }
-+            break;
-+          case GRUB_EFI_USB_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_usb_device_path_t usb;
-+              grub_memcpy (&usb, dp, len);
-+              grub_printf ("/USB(%x,%x)",
-+                           (unsigned) usb.parent_port_number,
-+                           (unsigned) usb.interface);
-+            }
-+            break;
-+          case GRUB_EFI_USB_CLASS_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_usb_class_device_path_t usb_class;
-+              grub_memcpy (&usb_class, dp, len);
-+              grub_printf ("/USBClass(%x,%x,%x,%x,%x)",
-+                           (unsigned) usb_class.vendor_id,
-+                           (unsigned) usb_class.product_id,
-+                           (unsigned) usb_class.device_class,
-+                           (unsigned) usb_class.device_subclass,
-+                           (unsigned) usb_class.device_protocol);
-+            }
-+            break;
-+          case GRUB_EFI_I2O_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_i2o_device_path_t i2o;
-+              grub_memcpy (&i2o, dp, len);
-+              grub_printf ("/I2O(%x)", (unsigned) i2o.tid);
-+            }
-+            break;
-+          case GRUB_EFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_mac_address_device_path_t mac;
-+              grub_memcpy (&mac, dp, len);
-+              grub_printf ("/MacAddr(%x:%x:%x:%x:%x:%x,%x)",
-+                           (unsigned) mac.mac_address[0],
-+                           (unsigned) mac.mac_address[1],
-+                           (unsigned) mac.mac_address[2],
-+                           (unsigned) mac.mac_address[3],
-+                           (unsigned) mac.mac_address[4],
-+                           (unsigned) mac.mac_address[5],
-+                           (unsigned) mac.if_type);
-+            }
-+            break;
-+          case GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_ipv4_device_path_t ipv4;
-+              grub_memcpy (&ipv4, dp, len);
-+              grub_printf ("/IPv4(%u.%u.%u.%u,%u.%u.%u.%u,%u,%u,%x,%x)",
-+                           (unsigned) ipv4.local_ip_address[0],
-+                           (unsigned) ipv4.local_ip_address[1],
-+                           (unsigned) ipv4.local_ip_address[2],
-+                           (unsigned) ipv4.local_ip_address[3],
-+                           (unsigned) ipv4.remote_ip_address[0],
-+                           (unsigned) ipv4.remote_ip_address[1],
-+                           (unsigned) ipv4.remote_ip_address[2],
-+                           (unsigned) ipv4.remote_ip_address[3],
-+                           (unsigned) ipv4.local_port,
-+                           (unsigned) ipv4.remote_port,
-+                           (unsigned) ipv4.protocol,
-+                           (unsigned) ipv4.static_ip_address);
-+            }
-+            break;
-+          case GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_ipv6_device_path_t ipv6;
-+              grub_memcpy (&ipv6, dp, len);
-+              grub_printf ("/IPv6(%x:%x:%x:%x:%x:%x:%x:%x,%x:%x:%x:%x:%x:%x:%x:%x,%u,%u,%x,%x)",
-+                           (unsigned) ipv6.local_ip_address[0],
-+                           (unsigned) ipv6.local_ip_address[1],
-+                           (unsigned) ipv6.local_ip_address[2],
-+                           (unsigned) ipv6.local_ip_address[3],
-+                           (unsigned) ipv6.local_ip_address[4],
-+                           (unsigned) ipv6.local_ip_address[5],
-+                           (unsigned) ipv6.local_ip_address[6],
-+                           (unsigned) ipv6.local_ip_address[7],
-+                           (unsigned) ipv6.remote_ip_address[0],
-+                           (unsigned) ipv6.remote_ip_address[1],
-+                           (unsigned) ipv6.remote_ip_address[2],
-+                           (unsigned) ipv6.remote_ip_address[3],
-+                           (unsigned) ipv6.remote_ip_address[4],
-+                           (unsigned) ipv6.remote_ip_address[5],
-+                           (unsigned) ipv6.remote_ip_address[6],
-+                           (unsigned) ipv6.remote_ip_address[7],
-+                           (unsigned) ipv6.local_port,
-+                           (unsigned) ipv6.remote_port,
-+                           (unsigned) ipv6.protocol,
-+                           (unsigned) ipv6.static_ip_address);
-+            }
-+            break;
-+          case GRUB_EFI_INFINIBAND_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_infiniband_device_path_t ib;
-+              grub_memcpy (&ib, dp, len);
-+              grub_printf ("/InfiniBand(%x,%llx,%llx,%llx)",
-+                           (unsigned) ib.port_gid[0], /* XXX */
-+                           ib.remote_id,
-+                           ib.target_port_id,
-+                           ib.device_id);
-+            }
-+            break;
-+          case GRUB_EFI_UART_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_uart_device_path_t uart;
-+              grub_memcpy (&uart, dp, len);
-+              grub_printf ("/UART(%llu,%u,%x,%x)",
-+                           uart.baud_rate,
-+                           uart.data_bits,
-+                           uart.parity,
-+                           uart.stop_bits);
-+            }
-+            break;
-+          case GRUB_EFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_vendor_messaging_device_path_t vendor;
-+              grub_memcpy (&vendor, dp, sizeof (vendor));
-+              grub_printf ("/Vendor(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)",
-+                           (unsigned) vendor.vendor_guid.data1,
-+                           (unsigned) vendor.vendor_guid.data2,
-+                           (unsigned) vendor.vendor_guid.data3,
-+                           (unsigned) vendor.vendor_guid.data4[0],
-+                           (unsigned) vendor.vendor_guid.data4[1],
-+                           (unsigned) vendor.vendor_guid.data4[2],
-+                           (unsigned) vendor.vendor_guid.data4[3],
-+                           (unsigned) vendor.vendor_guid.data4[4],
-+                           (unsigned) vendor.vendor_guid.data4[5],
-+                           (unsigned) vendor.vendor_guid.data4[6],
-+                           (unsigned) vendor.vendor_guid.data4[7]);
-+            }
-+            break;
-+          default:
-+            grub_printf ("/UnknownMessaging(%x)", (unsigned) subtype);
-+            break;
-+          }
-+        break;
-+
-+      case GRUB_EFI_MEDIA_DEVICE_PATH_TYPE:
-+        switch (subtype)
-+          {
-+          case GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_hard_drive_device_path_t hd;
-+              grub_memcpy (&hd, dp, len);
-+              grub_printf ("/HD(%u,%llx,%llx,%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x)",
-+                           hd.partition_number,
-+                           hd.partition_start,
-+                           hd.partition_size,
-+                           (unsigned) hd.partition_signature[3],
-+                           (unsigned) hd.partition_signature[2],
-+                           (unsigned) hd.partition_signature[1],
-+                           (unsigned) hd.partition_signature[0],
-+                           (unsigned) hd.partition_signature[5],
-+                           (unsigned) hd.partition_signature[4],
-+                           (unsigned) hd.partition_signature[7],
-+                           (unsigned) hd.partition_signature[6],
-+                           (unsigned) hd.partition_signature[9],
-+                           (unsigned) hd.partition_signature[8],
-+                           (unsigned) hd.partition_signature[10],
-+                           (unsigned) hd.partition_signature[11],
-+                           (unsigned) hd.partition_signature[12],
-+                           (unsigned) hd.partition_signature[13],
-+                           (unsigned) hd.partition_signature[14],
-+                           (unsigned) hd.partition_signature[15]);
-+            }
-+            break;
-+          case GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_cdrom_device_path_t cd;
-+              grub_memcpy (&cd, dp, len);
-+              grub_printf ("/CD(%u,%llx,%llx)",
-+                           cd.boot_entry,
-+                           cd.partition_start,
-+                           cd.partition_size);
-+            }
-+            break;
-+          case GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_vendor_media_device_path_t vendor;
-+              grub_memcpy (&vendor, dp, sizeof (vendor));
-+              grub_printf ("/Vendor(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)",
-+                           (unsigned) vendor.vendor_guid.data1,
-+                           (unsigned) vendor.vendor_guid.data2,
-+                           (unsigned) vendor.vendor_guid.data3,
-+                           (unsigned) vendor.vendor_guid.data4[0],
-+                           (unsigned) vendor.vendor_guid.data4[1],
-+                           (unsigned) vendor.vendor_guid.data4[2],
-+                           (unsigned) vendor.vendor_guid.data4[3],
-+                           (unsigned) vendor.vendor_guid.data4[4],
-+                           (unsigned) vendor.vendor_guid.data4[5],
-+                           (unsigned) vendor.vendor_guid.data4[6],
-+                           (unsigned) vendor.vendor_guid.data4[7]);
-+            }
-+            break;
-+          case GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_file_path_device_path_t *fp;
-+              grub_uint8_t buf[(len - 4) * 2 + 1];
-+              fp = (grub_efi_file_path_device_path_t *) dp;
-+              *grub_utf16_to_utf8 (buf, fp->path_name,
-+                                   (len - 4) / sizeof (grub_efi_char16_t))
-+                = '\0';
-+              grub_printf ("/File(%s)", buf);
-+            }
-+            break;
-+          case GRUB_EFI_PROTOCOL_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_protocol_device_path_t proto;
-+              grub_memcpy (&proto, dp, sizeof (proto));
-+              grub_printf ("/Protocol(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)",
-+                           (unsigned) proto.guid.data1,
-+                           (unsigned) proto.guid.data2,
-+                           (unsigned) proto.guid.data3,
-+                           (unsigned) proto.guid.data4[0],
-+                           (unsigned) proto.guid.data4[1],
-+                           (unsigned) proto.guid.data4[2],
-+                           (unsigned) proto.guid.data4[3],
-+                           (unsigned) proto.guid.data4[4],
-+                           (unsigned) proto.guid.data4[5],
-+                           (unsigned) proto.guid.data4[6],
-+                           (unsigned) proto.guid.data4[7]);
-+            }
-+            break;
-+          default:
-+            grub_printf ("/UnknownMedia(%x)", (unsigned) subtype);
-+            break;
-+          }
-+        break;
-+
-+      case GRUB_EFI_BIOS_DEVICE_PATH_TYPE:
-+        switch (subtype)
-+          {
-+          case GRUB_EFI_BIOS_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_bios_device_path_t bios;
-+              grub_memcpy (&bios, dp, sizeof (bios));
-+              grub_printf ("/BIOS(%x,%x,%s)",
-+                           (unsigned) bios.device_type,
-+                           (unsigned) bios.status_flags,
-+                           (char *) (dp + 1));
-+            }
-+            break;
-+          default:
-+            grub_printf ("/UnknownBIOS(%x)", (unsigned) subtype);
-+            break;
-+          }
-+        break;
-+
-+      default:
-+        grub_printf ("/UnknownType(%x,%x)\n",
-+                     (unsigned) type,
-+                     (unsigned) subtype);
-+        return;
-+        break;
-+      }
-+
-+      if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp))
-+      break;
-+
-+      dp = (grub_efi_device_path_t *) ((char *) dp + len);
-+    }
-+}
-+
-+static inline int
-+dpname_matches(char *str, char *candidate)
-+{
-+  grub_size_t clen = grub_strlen(candidate);
-+  char scratch[clen + 2];
-+  int rc;
-+
-+  grub_strncpy(scratch, candidate, clen);
-+  scratch[clen+1] = '\0';
-+  if (scratch[clen-1] == '$')
-+    {
-+      scratch[--clen] = '\0';
-+      rc = !grub_strncasecmp(str, scratch, clen);
-+      return rc;
-+    }
-+
-+    grub_strncpy(scratch+clen, "(", 2);
-+    clen = grub_strlen(scratch);
-+    rc = !grub_strncasecmp(str, scratch, clen);
-+    return rc;
-+}
-+
-+static void
-+finish_param_parse(char *pos, char **end, char *tmp)
-+{
-+  if (!pos || !end || !tmp)
-+    return;
-+
-+  if (*end)
-+    **end = *tmp;
-+}
-+
-+static char *
-+get_next_param(char *pos, char **end, char *tmp)
-+{
-+  char *comma = NULL;
-+  char *openparen = NULL;
-+  char *closeparen = NULL;
-+
-+  if (!pos || !end || !tmp)
-+    return NULL;
-+
-+  if (*end)
-+    **end = *tmp;
-+
-+  openparen = grub_strchr(pos, '(');
-+  if (openparen && *openparen)
-+    {
-+      pos = grub_strnchr(openparen + 1, ' ');
-+      comma = grub_strchr(pos, ',');
-+      closeparen = grub_strchr(pos, ')');
-+
-+      if (comma && *comma)
-+      {
-+        *tmp = *comma;
-+        *comma = '\0';
-+        *end = comma;
-+      }
-+      else if (closeparen && *closeparen)
-+      {
-+        *tmp = *closeparen;
-+        *closeparen = '\0';
-+        *end = closeparen;
-+      }
-+      return pos;
-+    }
-+
-+  comma = grub_strchr(pos, ',');
-+  if (comma && *comma)
-+    {
-+      pos = grub_strnchr(comma + 1, ' ');
-+      comma = grub_strchr(pos, ',');
-+      closeparen = grub_strchr(pos, ')');
-+
-+      if (comma && *comma)
-+      {
-+        *tmp = *comma;
-+        *comma = '\0';
-+        *end = comma;
-+      }
-+      else if (closeparen && *closeparen)
-+      {
-+        *tmp = *closeparen;
-+        *closeparen = '\0';
-+        *end = closeparen;
-+      }
-+      return pos;
-+    }
-+
-+  closeparen = grub_strchr(pos, ')');
-+  if (closeparen && *closeparen)
-+    pos = grub_strnchr(closeparen + 1, ' ');
-+
-+  return pos;
-+}
-+
-+struct generic_device_path
-+  {
-+    grub_efi_uint8_t type;
-+    grub_efi_uint8_t subtype;
-+    grub_efi_uint16_t length;
-+  } __attribute__((packed));
-+
-+struct hd_media_device_path
-+  {
-+    grub_efi_uint8_t type;
-+    grub_efi_uint8_t subtype;
-+    grub_efi_uint16_t length;
-+    grub_efi_uint32_t partition;
-+    grub_efi_uint64_t startlba;
-+    grub_efi_uint64_t size;
-+    grub_efi_uint8_t signature[16];
-+    grub_efi_uint8_t mbr_type;
-+    grub_efi_uint8_t signature_type;
-+  } __attribute__((packed));
-+
-+static inline int
-+parse_device_path_component(const char *orig_str, void *data)
-+{
-+  int orig_str_len = strlen(orig_str) + 1;
-+  char str[orig_str_len];
-+  char tmp;
-+  char *pos = str;
-+  int ret = 0;
-+
-+  grub_strcpy(str, orig_str);
-+  if (dpname_matches(str, "pci"))
-+    {
-+    }
-+  else if (dpname_matches(str, "pccard"))
-+    {
-+    }
-+  else if (dpname_matches(str, "mmap"))
-+    {
-+    }
-+  else if (dpname_matches(str, "ctrl"))
-+    {
-+    }
-+  else if (dpname_matches(str, "acpi"))
-+    {
-+    }
-+    /* XXX what about _ADR? */
-+  /* messaging device paths */
-+  else if (dpname_matches(str, "atapi"))
-+    {
-+    }
-+  else if (dpname_matches(str, "scsi"))
-+    {
-+    }
-+  else if (dpname_matches(str, "fibrechannel"))
-+    {
-+    }
-+  else if (dpname_matches(str, "1394"))
-+    {
-+    }
-+  else if (dpname_matches(str, "usb"))
-+    {
-+    }
-+  else if (dpname_matches(str, "sata"))
-+    {
-+    }
-+    /* XXX what about usb-wwid */
-+    /* XXX what about lun */
-+  else if (dpname_matches(str, "usbclass"))
-+    {
-+    }
-+  else if (dpname_matches(str, "i2o"))
-+    {
-+    }
-+  else if (dpname_matches(str, "macaddr"))
-+    {
-+    }
-+  else if (dpname_matches(str, "ipv4"))
-+    {
-+    }
-+  else if (dpname_matches(str, "ipv6"))
-+    {
-+    }
-+    /* XXX what about vlan */
-+  else if (dpname_matches(str, "infiniband"))
-+    {
-+    }
-+  else if (dpname_matches(str, "uart"))
-+    {
-+    }
-+  else if (dpname_matches(str, "uartflowctrl"))
-+    {
-+    }
-+  else if (dpname_matches(str, "sas"))
-+    {
-+    }
-+  else if (dpname_matches(str, "iscsi"))
-+    {
-+    }
-+  /* media device paths */
-+  else if (dpname_matches(str, "hd"))
-+    {
-+      /* these look roughly like:
-+       *  HD(Partition,Type,Signature,Start, Size)
-+       * but:
-+       * - type may be optional.  1 or "MBR" means MBR. 2 or "GPT" means GPT.
-+       * - start and size are optional
-+       * - there can be random spaces
-+       */
-+      struct hd_media_device_path hddp;
-+      unsigned long tmpul;
-+      char *end = NULL, c;
-+      char tmps[19] = "0x";
-+      char *tmpsp;
-+
-+      ret = 42;
-+
-+      hddp.type = GRUB_EFI_MEDIA_DEVICE_PATH_TYPE;
-+      hddp.subtype = GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE;
-+      hddp.length = ret;
-+
-+      //pos += grub_strcspn(pos, '(');
-+      pos = get_next_param(pos, &end, &c);
-+      if (!*pos)
-+      {
-+broken_hd:
-+        finish_param_parse(pos, &end, &c);
-+        return 0;
-+      }
-+      grub_strncpy(tmps+2, pos, 16);
-+      tmps[18] = '\0';
-+      tmpsp = tmps;
-+      safe_parse_maxulong(&tmpsp, &tmpul);
-+      hddp.partition = tmpul;
-+
-+      pos = get_next_param(pos, &end, &c);
-+      if (!*pos)
-+      goto broken_hd;
-+      grub_strcpy(tmps+2, pos);
-+      tmpsp = tmps;
-+      safe_parse_maxulong(&tmpsp, &tmpul);
-+      hddp.startlba = tmpul;
-+
-+      pos = get_next_param(pos, &end, &c);
-+      if (!*pos)
-+      goto broken_hd;
-+      grub_strcpy(tmps+2, pos);
-+      tmpsp = tmps;
-+      safe_parse_maxulong(&tmpsp, &tmpul);
-+      hddp.size = tmpul;
-+
-+      pos = get_next_param(pos, &end, &c);
-+      if (!*pos)
-+      goto broken_hd;
-+      if (!grub_strcmp(pos, "None"))
-+      {
-+        hddp.signature_type = 0;
-+        grub_memset(hddp.signature, '\0', sizeof(hddp.signature));
-+      }
-+      else if (grub_strnlen(pos, 36) == 8)
-+        {
-+        grub_efi_uint32_t tmpu32;
-+        grub_strncpy(tmps+2, pos, 8);
-+        tmps[10] = '\0';
-+        tmpsp = tmps;
-+        safe_parse_maxulong(&tmpsp, &tmpul);
-+        tmpu32 = tmpul;
-+        hddp.signature_type = 1;
-+        grub_memcpy(hddp.signature, &tmpu32, sizeof(tmpu32));
-+      }
-+      else if (grub_strnlen(pos, 36) == 36)
-+      {
-+        grub_efi_uint32_t tmpu32;
-+        grub_efi_uint16_t tmpu16;
-+        grub_efi_uint8_t tmpu8;
-+
-+        grub_strncpy(tmps+2, pos, 8);
-+        tmps[10] = '\0';
-+        tmpsp = tmps;
-+        safe_parse_maxulong(&tmpsp, &tmpul);
-+        tmpu32 = tmpul;
-+        grub_memcpy(hddp.signature, &tmpu32, sizeof(tmpu32));
-+
-+        grub_strncpy(tmps+2, pos+9, 4);
-+        tmps[6] = '\0';
-+        tmpsp = tmps;
-+        safe_parse_maxulong(&tmpsp, &tmpul);
-+        tmpu16 = tmpul;
-+        grub_memcpy(hddp.signature + 4, &tmpu16, sizeof(tmpu16));
-+
-+        grub_strncpy(tmps+2, pos+14, 4);
-+        tmps[6] = '\0';
-+        tmpsp = tmps;
-+        safe_parse_maxulong(&tmpsp, &tmpul);
-+        tmpu16 = tmpul;
-+        grub_memcpy(hddp.signature + 6, &tmpu16, sizeof(tmpu16));
-+
-+        /* these are displayed like a u16, but they're a u8.  thanks. */
-+        grub_strncpy(tmps+2, pos+19, 2);
-+        tmps[4] = '\0';
-+        tmpsp = tmps;
-+        safe_parse_maxulong(&tmpsp, &tmpul);
-+        tmpu8 = tmpul;
-+        grub_memcpy(hddp.signature + 8, &tmpu8, sizeof(tmpu8));
-+        grub_strncpy(tmps+2, pos+21, 2);
-+        tmps[4] = '\0';
-+        tmpsp = tmps;
-+        safe_parse_maxulong(&tmpsp, &tmpul);
-+        tmpu8 = tmpul;
-+        grub_memcpy(hddp.signature + 9, &tmpu8, sizeof(tmpu8));
-+
-+        grub_strncpy(tmps+2, pos+24, 2);
-+        tmps[4] = '\0';
-+        tmpsp = tmps;
-+        safe_parse_maxulong(&tmpsp, &tmpul);
-+        tmpu8 = tmpul;
-+        grub_memcpy(hddp.signature + 10, &tmpu8, sizeof(tmpu8));
-+
-+        grub_strncpy(tmps+2, pos+26, 2);
-+        tmps[4] = '\0';
-+        tmpsp = tmps;
-+        safe_parse_maxulong(&tmpsp, &tmpul);
-+        tmpu8 = tmpul;
-+        grub_memcpy(hddp.signature + 11, &tmpu8, sizeof(tmpu8));
-+
-+        grub_strncpy(tmps+2, pos+28, 2);
-+        tmps[4] = '\0';
-+        tmpsp = tmps;
-+        safe_parse_maxulong(&tmpsp, &tmpul);
-+        tmpu8 = tmpul;
-+        grub_memcpy(hddp.signature + 12, &tmpu8, sizeof(tmpu8));
-+
-+        grub_strncpy(tmps+2, pos+30, 2);
-+        tmps[4] = '\0';
-+        tmpsp = tmps;
-+        safe_parse_maxulong(&tmpsp, &tmpul);
-+        tmpu8 = tmpul;
-+        grub_memcpy(hddp.signature + 13, &tmpu8, sizeof(tmpu8));
-+
-+        grub_strncpy(tmps+2, pos+32, 2);
-+        tmps[4] = '\0';
-+        tmpsp = tmps;
-+        safe_parse_maxulong(&tmpsp, &tmpul);
-+        tmpu8 = tmpul;
-+        grub_memcpy(hddp.signature + 14, &tmpu8, sizeof(tmpu8));
-+
-+        grub_strncpy(tmps+2, pos+34, 2);
-+        tmps[4] = '\0';
-+        tmpsp = tmps;
-+        safe_parse_maxulong(&tmpsp, &tmpul);
-+        tmpu8 = tmpul;
-+        grub_memcpy(hddp.signature + 15, &tmpu8, sizeof(tmpu8));
-+
-+        hddp.signature_type = 2;
-+      }
-+      else
-+      goto broken_hd;
-+
-+      hddp.mbr_type = hddp.signature_type;
-+
-+      if (data)
-+      grub_memcpy(data, &hddp, sizeof(hddp));
-+    }
-+  else if (dpname_matches(str, "cd"))
-+    {
-+    }
-+  else if (dpname_matches(str, "file"))
-+    {
-+    }
-+  else if (dpname_matches(str, "protocol"))
-+    {
-+    }
-+    /* what about piwg firmware file? */
-+    /* what about piwg firmware volume? */
-+    /* what about relative offset media */
-+  else if (dpname_matches(str, "bios"))
-+    {
-+    }
-+  /* This is the end beautiful friend */
-+  else if (dpname_matches(str, "EndEntire$"))
-+    {
-+      struct generic_device_path gdp = {
-+            .type = GRUB_EFI_END_DEVICE_PATH_TYPE,
-+            .subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE,
-+            .length = 4
-+      };
-+      ret = 4;
-+      if (data)
-+      grub_memmove(data, &gdp, sizeof(gdp));
-+    }
-+  else if (dpname_matches(str, "EndThis$"))
-+    {
-+      struct generic_device_path gdp = {
-+            .type = GRUB_EFI_END_DEVICE_PATH_TYPE,
-+            .subtype = GRUB_EFI_END_THIS_DEVICE_PATH_SUBTYPE,
-+            .length = 4
-+      };
-+      ret = 4;
-+      if (data)
-+      grub_memmove(data, &gdp, sizeof(gdp));
-+    }
-+  else if (dpname_matches(str, "EndUnknown$"))
-+    {
-+      struct generic_device_path gdp = {
-+            .type = GRUB_EFI_END_DEVICE_PATH_TYPE,
-+            .subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE,
-+            .length = 4
-+      };
-+      ret = 4;
-+      if (data)
-+      grub_memmove(data, &gdp, sizeof(gdp));
-+    }
-+  /* handle anything we didn't recognize */
-+  else if (dpname_matches(str, "vendor"))
-+    {
-+      /* needs to handle:
-+       * 1) hw vendor
-+       * 2) messaging vendor
-+       * 3) media vendor
-+       */
-+    }
-+  else
-+    {
-+    }
-+
-+  return ret;
-+}
-+
-+grub_efi_device_path_t *
-+device_path_from_utf8 (const char *device)
-+{
-+  grub_size_t device_len;
-+  grub_efi_device_path_t *dp = NULL;
-+
-+  device_len = parse_device_path_component(device, dp);
-+  device_len += parse_device_path_component("EndEntire", dp);
-+  dp = grub_malloc(device_len);
-+  if (!dp)
-+    return NULL;
-+  device_len = parse_device_path_component(device, dp);
-+  device_len += parse_device_path_component("EndEntire",
-+                                   (void *)((unsigned long)dp + device_len));
-+
-+
-+  return dp;
-+}
-diff --git a/efi/efigraph.c b/efi/efigraph.c
-new file mode 100644
-index 0000000..6905e07
---- /dev/null
-+++ b/efi/efigraph.c
-@@ -0,0 +1,1501 @@
-+/* efigraph.c - EFI "graphics output" support for GRUB/EFI */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright 2007 Red Hat, Inc.
-+ *  Copyright (C) 2007 Intel Corp.
-+ *  Copyright (C) 2001,2002  Red Hat, Inc.
-+ *  Portions copyright (C) 2000  Conectiva, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifdef SUPPORT_GRAPHICS
-+
-+#include <grub/misc.h>
-+#include <grub/types.h>
-+#include <grub/cpu/linux.h>
-+#include <grub/efi/api.h>
-+#include <grub/efi/efi.h>
-+#include <grub/efi/misc.h>
-+
-+#include <term.h>
-+#include <shared.h>
-+#include <graphics.h>
-+
-+#include "graphics.h"
-+#include "xpm.h"
-+
-+#define dbgdelay(_f, _l) ({\
-+      if (debug_graphics) {                           \
-+              do {                                    \
-+                      grub_efi_stall(1000);           \
-+              } while (console_getkey() < 0);         \
-+      }                                               \
-+      })
-+
-+#define dprintf(format, args...) ({                   \
-+      if (debug_graphics) {                           \
-+              struct term_entry *_tt = current_term;  \
-+              current_term = term_table;              \
-+              grub_printf(format, ##args);            \
-+              current_term = _tt;                     \
-+      }                                               \
-+      })
-+
-+struct grub_pixel_info
-+{
-+  char depth_bits;
-+  char depth_bytes;
-+  unsigned char red_size;
-+  unsigned char red_pos;
-+  unsigned char green_size;
-+  unsigned char green_pos;
-+  unsigned char blue_size;
-+  unsigned char blue_pos;
-+  unsigned char reserved_size;
-+  unsigned char reserved_pos;
-+  int line_length;
-+};
-+
-+typedef struct grub_pixel_info grub_pixel_info_t;
-+
-+
-+static grub_efi_guid_t graphics_output_guid = GRUB_EFI_GRAPHICS_OUTPUT_GUID;
-+static grub_efi_guid_t pci_io_guid = GRUB_EFI_PCI_IO_GUID;
-+
-+#ifndef MIN
-+#define MIN(x,y) ( ((x) < (y)) ? (x) : (y))
-+#endif
-+#ifndef MAX
-+#define MAX(x,y) ( ((x) < (y)) ? (y) : (x))
-+#endif
-+
-+#define pixel_equal(x,y) ((x).bgrr.red == (y).bgrr.red && \
-+                          (x).bgrr.green == (y).bgrr.green && \
-+                          (x).bgrr.blue == (y).bgrr.blue && \
-+                          (x).bgrr.reserved == (y).bgrr.reserved)
-+
-+struct video_mode {
-+    grub_efi_uint32_t number;
-+    grub_efi_uintn_t size;
-+    grub_efi_graphics_output_mode_information_t *info;
-+};
-+
-+#define MAX_PALETTE 16
-+struct eg {
-+    struct graphics_backend *backend;
-+    grub_efi_graphics_output_t *output_intf;
-+    struct video_mode **modes;
-+    int max_mode;
-+    grub_efi_uint32_t text_mode;
-+    grub_efi_uint32_t graphics_mode;
-+    grub_pixel_info_t pixel_info;
-+    enum { TEXT, GRAPHICS } current_mode;
-+
-+    position_t screen_size;
-+    position_t screen_pos;
-+
-+    struct bltbuf *background;
-+
-+    grub_efi_graphics_output_pixel_t palette[MAX_PALETTE + 1];
-+};
-+
-+#define RGB(r,g,b) { .bgrr.red = r, .bgrr.green = g, .bgrr.blue = b }
-+
-+static grub_efi_graphics_output_pixel_t cga_colors[] = {
-+    RGB(0x00,0x00,0x00), //  0 Black
-+    RGB(0x7f,0x00,0x00), //  1 Dark Red
-+    RGB(0x00,0x7f,0x00), //  2 Dark Green
-+    RGB(0x7f,0x7f,0x00), //  3 Dark Yellow
-+    RGB(0x00,0x00,0x7f), //  4 Dark Blue
-+    RGB(0x7f,0x00,0x7f), //  5 Dark Magenta
-+    RGB(0x00,0x7f,0x7f), //  6 Dark Cyan
-+    RGB(0xc0,0xc0,0xc0), //  7 Light Grey
-+    RGB(0x7f,0x7f,0x7f), //  8 Dark Grey
-+    RGB(0xff,0x00,0x00), //  9 Red
-+    RGB(0x00,0xff,0x00), // 10 Green
-+    RGB(0xff,0xff,0x00), // 11 Yellow
-+    RGB(0x00,0x00,0xff), // 12 Blue
-+    RGB(0xff,0x00,0xff), // 13 Magenta
-+    RGB(0x00,0xff,0xff), // 14 Cyan
-+    RGB(0xff,0xff,0xff), // 15 White
-+    RGB(0xff,0xff,0xff), // 16 Also white ;)
-+};
-+
-+static const int n_cga_colors = sizeof (cga_colors) / sizeof (cga_colors[0]);
-+
-+static void
-+find_bits (unsigned long mask, unsigned char *first,
-+         unsigned char* len)
-+{
-+  unsigned char bit_pos = 0, bit_len = 0;
-+  *first =0;
-+  *len = 0;
-+  if (mask == 0)
-+    return;
-+  while (! (mask & 0x1)) {
-+    mask = mask >> 1;
-+    bit_pos++;
-+  }
-+  while (mask & 0x1) {
-+    mask = mask >> 1;
-+    bit_len++;
-+  }
-+  *first = bit_pos;
-+  *len = bit_len;
-+}
-+
-+static grub_efi_graphics_output_mode_information_t *
-+get_graphics_mode_info_for_mode(struct eg *eg, int mode)
-+{
-+      int i;
-+
-+      for (i = 0; i < eg->max_mode; i++) {
-+              if (eg->modes[i] == NULL)
-+                      continue;
-+              if (eg->modes[i]->number == mode)
-+                      return eg->modes[i]->info;
-+      }
-+      return NULL;
-+}
-+
-+static grub_efi_graphics_output_mode_information_t *
-+get_graphics_mode_info(struct eg *eg)
-+{
-+      return get_graphics_mode_info_for_mode(eg, eg->graphics_mode);
-+}
-+
-+static void
-+print_mode_info(struct video_mode *mode)
-+{
-+      grub_efi_graphics_output_mode_information_t *info = mode->info;
-+      dprintf("mode %d (%dx%d, pitch %d, ",
-+              mode->number,
-+              info->horizontal_resolution,
-+              info->vertical_resolution,
-+              info->pixels_per_scan_line);
-+      switch(info->pixel_format) {
-+              case GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR:
-+                      dprintf("rgbr 8bpc");
-+                      break;
-+              case GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR:
-+                      dprintf("bgrr 8bpc");
-+                      break;
-+              case GRUB_EFI_PIXEL_BIT_MASK:
-+                      dprintf("bitmask color");
-+                      break;
-+              case GRUB_EFI_PIXEL_BLT_ONLY:
-+                      dprintf("blt only");
-+                      break;
-+      }
-+      dprintf(")\n");
-+      if (info->pixel_format == GRUB_EFI_PIXEL_BIT_MASK) {
-+              dprintf("red: %08x green: %08x blue: %08x res: %08x\n",
-+              info->pixel_information.red_mask,
-+              info->pixel_information.green_mask,
-+              info->pixel_information.blue_mask,
-+              info->pixel_information.reserved_mask);
-+      }
-+}
-+
-+static void
-+set_kernel_params(struct graphics_backend *backend,
-+            struct linux_kernel_params *params)
-+{
-+    struct eg *eg;
-+
-+    if (!backend || !backend->priv)
-+        return;
-+
-+    eg = backend->priv;
-+    grub_efi_graphics_output_t *gop_intf = NULL;
-+    grub_efi_graphics_output_mode_t *gop_mode = NULL;
-+    grub_efi_status_t efi_status = GRUB_EFI_SUCCESS;
-+    grub_efi_graphics_output_mode_information_t *gop_info = NULL;
-+    grub_efi_uintn_t size;
-+
-+    gop_intf = grub_efi_locate_protocol (&graphics_output_guid, NULL);
-+    if (gop_intf == NULL)
-+        return;
-+
-+    gop_mode = gop_intf->mode;
-+
-+    efi_status = Call_Service_4 (gop_intf->query_mode,
-+                             gop_intf, gop_mode->mode, &size, &gop_info);
-+
-+
-+    if (efi_status == GRUB_EFI_SUCCESS) {
-+        /* No VBE on EFI.  */
-+        params->lfb_width = gop_info->horizontal_resolution;
-+        params->lfb_height = gop_info->vertical_resolution;
-+        params->lfb_base = gop_mode->frame_buffer_base;
-+        params->lfb_size = gop_mode->frame_buffer_size;
-+        params->lfb_pages = 1;
-+        params->vesapm_segment = 0;
-+        params->vesapm_offset = 0;
-+        params->vesa_attrib = 0;
-+        if (gop_info->pixel_format == GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR) {
-+            params->lfb_depth = 32;
-+            params->red_mask_size = 8;
-+            params->red_field_pos = 0;
-+            params->green_mask_size = 8;
-+            params->green_field_pos = 8;
-+            params->blue_mask_size = 8;
-+            params->blue_field_pos = 16;
-+            params->reserved_mask_size = 8;
-+            params->reserved_field_pos = 24;
-+            params->lfb_line_len = gop_info->pixels_per_scan_line * 4;
-+        } else if (gop_info->pixel_format ==
-+                GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR) {
-+            params->lfb_depth = 32;
-+            params->red_mask_size = 8;
-+            params->red_field_pos = 16;
-+            params->green_mask_size = 8;
-+            params->green_field_pos = 8;
-+            params->blue_mask_size = 8;
-+            params->blue_field_pos = 0;
-+            params->reserved_mask_size = 8;
-+            params->reserved_field_pos = 24;
-+          params->lfb_line_len = gop_info->pixels_per_scan_line * 4;
-+        } else if (gop_info->pixel_format == GRUB_EFI_PIXEL_BIT_MASK) {
-+            find_bits (gop_info->pixel_information.red_mask,
-+                       &params->red_field_pos, &params->red_mask_size);
-+            find_bits (gop_info->pixel_information.green_mask,
-+                       &params->green_field_pos, &params->green_mask_size);
-+            find_bits (gop_info->pixel_information.blue_mask,
-+                       &params->blue_field_pos, &params->blue_mask_size);
-+            find_bits (gop_info->pixel_information.reserved_mask,
-+                       &params->reserved_field_pos, &params->reserved_mask_size);
-+            params->lfb_depth = params->red_mask_size
-+                                + params->green_mask_size
-+                                + params->blue_mask_size
-+                                + params->reserved_mask_size;
-+            params->lfb_line_len =
-+                (gop_info->pixels_per_scan_line * params->lfb_depth) / 8;
-+        } else  {
-+            params->lfb_depth = 4;
-+            params->red_mask_size = 0;
-+            params->red_field_pos = 0;
-+            params->green_mask_size = 0;
-+            params->green_field_pos = 0;
-+            params->blue_mask_size = 0;
-+            params->blue_field_pos = 0;
-+            params->reserved_mask_size = 0;
-+            params->reserved_field_pos = 0;
-+            params->lfb_line_len = params->lfb_width / 2;
-+        }
-+#if 0
-+        params->video_cursor_x = 0;
-+        params->video_cursor_y = 0;
-+        params->video_page = 0;
-+        params->video_mode = 0;
-+        params->video_width = 0;
-+        params->video_ega_bx = 0;
-+        params->video_height = 0;
-+        params->have_vga = 0x70;
-+        params->font_size = 0;
-+#else
-+        params->video_cursor_x = grub_efi_system_table->con_out->mode->cursor_column;
-+        params->video_cursor_y = grub_efi_system_table->con_out->mode->cursor_row;
-+        params->video_page = 0; /* ??? */
-+        params->video_mode = grub_efi_system_table->con_out->mode->mode;
-+        params->video_width = (grub_console_getwh () >> 8);
-+        params->video_ega_bx = 0;
-+        params->video_height = (grub_console_getwh () & 0xff);
-+        params->have_vga = VIDEO_TYPE_EFI;
-+        params->font_size = 16; /* XXX */
-+#endif
-+    }
-+}
-+
-+static void
-+pixel_to_rgb(grub_efi_graphics_output_pixel_t *pixel,
-+             int *red, int *green, int *blue)
-+{
-+    *red = pixel->bgrr.red;
-+    *green = pixel->bgrr.green;
-+    *blue = pixel->bgrr.blue;
-+}
-+
-+static void
-+rgb_to_pixel(int red, int green, int blue,
-+             grub_efi_graphics_output_pixel_t *pixel)
-+{
-+    pixel->bgrr.red = red;
-+    pixel->bgrr.green = green;
-+    pixel->bgrr.blue = blue;
-+}
-+
-+static void
-+position_to_phys(struct eg *eg, position_t *virt, position_t *phys)
-+{
-+    phys->x = virt->x + eg->screen_pos.x;
-+    phys->y = virt->y + eg->screen_pos.y;
-+}
-+
-+static int
-+abs_paddr(struct eg *eg, position_t *virt)
-+{
-+    position_t phys;
-+    position_to_phys(eg, virt, &phys);
-+    return phys.x + phys.y * eg->screen_size.x;
-+}
-+
-+struct bltbuf {
-+    grub_efi_uintn_t width;
-+    grub_efi_uintn_t height;
-+    grub_efi_graphics_output_pixel_t pixbuf[];
-+};
-+
-+static struct bltbuf *alloc_bltbuf(grub_efi_uintn_t width,
-+                                         grub_efi_uintn_t height)
-+{
-+      struct bltbuf *buf = NULL;
-+      grub_efi_uintn_t pixbuf_size = width * height *
-+              sizeof (grub_efi_graphics_output_pixel_t);
-+
-+      if (!(buf = grub_malloc(sizeof(buf->width) + sizeof(buf->height) +
-+                              pixbuf_size)))
-+              return NULL;
-+
-+      buf->width = width;
-+      buf->height = height;
-+      grub_memset(buf->pixbuf, '\0', pixbuf_size);
-+      return buf;
-+}
-+
-+
-+static void
-+hw_blt_pos_to_screen_pos(struct eg *eg, struct bltbuf *bltbuf,
-+                      position_t *bltpos, position_t *bltsz, position_t *pos)
-+{
-+    position_t phys;
-+
-+    position_to_phys(eg, pos, &phys);
-+
-+    Call_Service_10(eg->output_intf->blt, eg->output_intf, (void *)bltbuf->pixbuf,
-+                    GRUB_EFI_BLT_BUFFER_TO_VIDEO,
-+                    bltpos->x, bltpos->y,
-+                    phys.x, phys.y,
-+                    bltsz->x, bltsz->y,
-+                    0);
-+}
-+
-+static void
-+blt_pos_to_screen_pos(struct eg *eg, struct bltbuf *bltbuf,
-+        position_t *bltpos, position_t *bltsz, position_t *pos)
-+{
-+    grub_efi_graphics_output_mode_information_t *info = get_graphics_mode_info(eg);
-+    grub_efi_graphics_output_pixel_t *pixel;
-+    position_t phys;
-+    const int pxlstride = info->pixels_per_scan_line;
-+    const int bytestride = pxlstride * sizeof (*pixel);
-+
-+    position_to_phys(eg, pos, &phys);
-+
-+    if (info->pixel_format == GRUB_EFI_PIXEL_BLT_ONLY || 1) {
-+        hw_blt_pos_to_screen_pos(eg, bltbuf, bltpos, bltsz, pos);
-+#if 0
-+    } else if (info->pixel_format == GRUB_EFI_PIXEL_BIT_MASK) {
-+        int y;
-+        grub_pixel_info_t *pinfo = &eg->pixel_info;
-+        const int maxpixels =
-+            MIN(info->horizontal_resolution - pos->x, bltsz->x);
-+
-+        for (y = bltpos->y; y < bltpos->y + bltsz->y; y++, phys.y++) {
-+            char raw_pixels[maxpixels * pinfo->depth_bytes];
-+            char *fb = (char *)(unsigned long)eg->output_intf->mode->frame_buffer_base;
-+            int x;
-+
-+            pixel = (void *)&bltbuf->pixbuf[y * bltbuf->width + bltpos->x];
-+            fb += phys.y * pinfo->line_length + phys.x * pinfo->depth_bytes;
-+
-+            for (x = 0; x < maxpixels; x++) {
-+                char depth_bytes = pinfo->depth_bytes;
-+                char *raw_pixel = raw_pixels + x * depth_bytes;
-+
-+                int red, green, blue, color;
-+                char *colorp;
-+
-+#if 0
-+                red = pixel[x].bgrr.red & 0x3f;
-+                green = pixel[x].bgrr.green & 0x3f;
-+                blue = pixel[x].bgrr.blue & 0x3f;
-+                red = red * ((1 << pinfo->red_size) - 1) / 0x3f;
-+                green = green * ((1 << pinfo->green_size) - 1) / 0x3f;
-+                blue = blue * ((1 << pinfo->blue_size) - 1) / 0x3f;
-+#else
-+                red = pixel[x].bgrr.red;
-+                green = pixel[x].bgrr.green;
-+                blue = pixel[x].bgrr.blue;
-+
-+                red >>= 8 - pinfo->red_size;
-+                green >>= 8 - pinfo->green_size;
-+                blue >>= 8 - pinfo->blue_size;
-+#endif
-+
-+                color = (red << pinfo->red_pos) |
-+                        (green << pinfo->green_pos) |
-+                        (blue << pinfo->blue_pos);
-+                colorp = (void *)&color;
-+                while (depth_bytes--)
-+                    *raw_pixel++ = *colorp++;
-+            }
-+            memmove(fb, raw_pixels, maxpixels * pinfo->depth_bytes);
-+        }
-+#endif
-+    } else {
-+        int y;
-+        grub_pixel_info_t *pinfo = &eg->pixel_info;
-+        const int maxpixels =
-+            MIN(info->horizontal_resolution - pos->x, bltsz->x);
-+
-+      //char *line = &fb[phys.y * bytestride + phys.x * sizeof(*pixel)];
-+        for (y = bltpos->y; y < bltpos->y + bltsz->y; y++, phys.y++) {
-+          char raw_pixels[maxpixels * sizeof(*pixel)];
-+            char *fb = (char *)(unsigned long)eg->output_intf->mode->frame_buffer_base;
-+            int x;
-+
-+            pixel = (void *)&bltbuf->pixbuf[y * bltbuf->width + bltpos->x];
-+            fb += phys.y * pinfo->line_length + phys.x * pinfo->depth_bytes;
-+
-+            if (info->pixel_format == GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR) {
-+                memmove(raw_pixels, pixel, maxpixels * sizeof (*pixel));
-+                continue;
-+            } else if (info->pixel_format==GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR) {
-+                grub_efi_graphics_output_pixel_t shadow[maxpixels];
-+                for (x = 0; x < maxpixels; x++) {
-+                    shadow[x].rgbr.red = pixel[x].bgrr.red;
-+                    shadow[x].rgbr.green = pixel[x].bgrr.green;
-+                    shadow[x].rgbr.blue = pixel[x].bgrr.blue;
-+                }
-+
-+                memmove(raw_pixels, shadow, maxpixels * sizeof (*pixel));
-+            } else if (info->pixel_format == GRUB_EFI_PIXEL_BIT_MASK) {
-+                for (x = 0; x < maxpixels; x++) {
-+                    char depth_bytes = pinfo->depth_bytes;
-+                    char *raw_pixel = raw_pixels + x * depth_bytes;
-+
-+                    int red, green, blue, color;
-+                    char *colorp;
-+
-+#if 0
-+                    red = pixel[x].bgrr.red & 0x3f;
-+                    green = pixel[x].bgrr.green & 0x3f;
-+                    blue = pixel[x].bgrr.blue & 0x3f;
-+                    red = red * ((1 << pinfo->red_size) - 1) / 0x3f;
-+                    green = green * ((1 << pinfo->green_size) - 1) / 0x3f;
-+                    blue = blue * ((1 << pinfo->blue_size) - 1) / 0x3f;
-+#else
-+                    red = pixel[x].bgrr.red;
-+                    green = pixel[x].bgrr.green;
-+                    blue = pixel[x].bgrr.blue;
-+
-+                    red >>= 8 - pinfo->red_size;
-+                    green >>= 8 - pinfo->green_size;
-+                    blue >>= 8 - pinfo->blue_size;
-+#endif
-+
-+                    color = (red << pinfo->red_pos) |
-+                            (green << pinfo->green_pos) |
-+                            (blue << pinfo->blue_pos);
-+                    colorp = (void *)&color;
-+                    while (depth_bytes--)
-+                        *raw_pixel++ = *colorp++;
-+                }
-+          }
-+          memmove(fb, raw_pixels, maxpixels * pinfo->depth_bytes);
-+        }
-+    }
-+}
-+
-+static void
-+blt_to_screen(struct eg *eg, struct bltbuf *bltbuf)
-+{
-+#if 0
-+    position_t addr = {0, 0};
-+
-+    position_to_phys(eg, &addr, &addr);
-+
-+    Call_Service_10(eg->output_intf->blt, eg->output_intf, bltbuf->pixbuf,
-+                    GRUB_EFI_BLT_BUFFER_TO_VIDEO,
-+                    0, 0,
-+                    addr.x, addr.y,
-+                    bltbuf->width, bltbuf->height,
-+                    0);
-+#else
-+    const int pxlstride = eg->output_intf->mode->info->pixels_per_scan_line;
-+    position_t bltsz, bltpos = { 0, 0 }, pos = { 0, 0 };
-+    bltsz.x = MIN(bltbuf->width, pxlstride);
-+    bltsz.y = MIN(bltbuf->height, eg->output_intf->mode->info->vertical_resolution);
-+
-+    blt_pos_to_screen_pos(eg, bltbuf, &bltpos, &bltsz, &pos);
-+#endif
-+}
-+
-+static void
-+blt_to_screen_pos(struct eg *eg, struct bltbuf *bltbuf, position_t *pos)
-+{
-+    position_t bltpos = {0, 0};
-+    position_t bltsz = { bltbuf->width, bltbuf->height };
-+    blt_pos_to_screen_pos(eg, bltbuf, &bltpos, &bltsz, pos);
-+}
-+
-+static int
-+save_video_mode(struct eg *eg, struct video_mode *mode)
-+{
-+      grub_efi_status_t status;
-+
-+
-+
-+      status = Call_Service_4(eg->output_intf->query_mode, eg->output_intf,
-+                                mode->number, &mode->size, &mode->info);
-+      return status == GRUB_EFI_SUCCESS;
-+}
-+
-+static void
-+get_screen_size(struct graphics_backend *backend, position_t *size)
-+{
-+    struct eg *eg = backend->priv;
-+    grub_efi_graphics_output_mode_information_t *info;
-+
-+    info = get_graphics_mode_info(eg);
-+
-+    size->x = info->horizontal_resolution;
-+    size->y = info->vertical_resolution;
-+}
-+
-+static void
-+bltbuf_set_pixel(struct bltbuf *bltbuf, position_t *pos,
-+                             grub_efi_graphics_output_pixel_t *pixel)
-+{
-+    if (pos->x < 0 || pos->x >= bltbuf->width)
-+        return;
-+    if (pos->x < 0 || pos->y >= bltbuf->height)
-+        return;
-+    grub_memmove(&bltbuf->pixbuf[pos->x + pos->y * bltbuf->width], pixel,
-+            sizeof *pixel);
-+}
-+
-+static void
-+bltbuf_get_pixel(struct bltbuf *bltbuf, position_t *pos,
-+                 grub_efi_graphics_output_pixel_t *pixel)
-+{
-+    if (bltbuf && pos->x < bltbuf->width && pos->y < bltbuf->height) {
-+      grub_memmove(pixel, &bltbuf->pixbuf[pos->x + pos->y * bltbuf->width],
-+            sizeof *pixel);
-+    } else {
-+      pixel->bgrr.red = 0x00;
-+      pixel->bgrr.green = 0x00;
-+      pixel->bgrr.blue = 0x00;
-+    }
-+}
-+
-+static void
-+bltbuf_set_pixel_rgb(struct bltbuf *bltbuf, position_t *pos,
-+                     int red, int green, int blue)
-+{
-+    grub_efi_graphics_output_pixel_t pixel;
-+    rgb_to_pixel(red, green, blue, &pixel);
-+    bltbuf_set_pixel(bltbuf, pos, &pixel);
-+}
-+
-+static void
-+bltbuf_set_pixel_idx(struct eg *eg, struct bltbuf *bltbuf,
-+                     position_t *pos, int idx)
-+{
-+    bltbuf_set_pixel(bltbuf, pos, &eg->palette[idx]);
-+}
-+
-+static void
-+bltbuf_get_pixel_idx(struct bltbuf *bltbuf, position_t *pos, int *idx)
-+{
-+    grub_efi_graphics_output_pixel_t pixel;
-+
-+    rgb_to_pixel(0, 0, 0, &pixel);
-+    bltbuf_get_pixel(bltbuf, pos, &pixel);
-+    for (*idx = 0; *idx < 16; (*idx)++) {
-+        if (pixel_equal(cga_colors[*idx], pixel))
-+            break;
-+    }
-+}
-+
-+static struct bltbuf *
-+xpm_to_bltbuf(struct xpm *xpm)
-+{
-+    struct bltbuf *bltbuf = NULL;
-+    position_t pos;
-+
-+    if (!(bltbuf = alloc_bltbuf(xpm->width, xpm->height)))
-+        return NULL;
-+
-+    for (pos.y = 0; pos.y < xpm->height; pos.y++) {
-+        for (pos.x = 0; pos.x < xpm->width; pos.x++) {
-+            xpm_pixel_t xpl;
-+            unsigned char idx;
-+
-+            idx = xpm_get_pixel_idx(xpm, pos.x, pos.y);
-+            xpm_get_idx(xpm, idx, &xpl);
-+
-+            bltbuf_set_pixel_rgb(bltbuf, &pos, xpl.red, xpl.green, xpl.blue);
-+        }
-+    }
-+
-+    return bltbuf;
-+}
-+
-+static void
-+cursor(struct graphics_backend *backend, int set)
-+{
-+    struct eg *eg;
-+    int ch, invert;
-+    unsigned short *text;
-+    position_t fpos, screensz;
-+    int offset;
-+
-+    eg = backend->priv;
-+
-+    if (set && !graphics_get_scroll())
-+        return;
-+
-+    text = graphics_get_text_buf();
-+    graphics_get_font_position(&fpos);
-+    graphics_get_screen_rowscols(&screensz);
-+
-+    offset = fpos.y * screensz.x + fpos.x;
-+
-+    if (set)
-+        text[offset] |= 0x0200;
-+
-+    graphics_clbl(fpos.x, fpos.y, 1, 1, 1);
-+
-+    if (set)
-+        text[offset] &= 0xfdff;
-+}
-+
-+static void blank(struct graphics_backend *backend);
-+
-+static void
-+reset_screen_geometry(struct graphics_backend *backend)
-+{
-+    struct eg *eg = backend->priv;
-+    struct xpm *xpm = graphics_get_splash_xpm();
-+    grub_efi_graphics_output_mode_information_t *info;
-+    position_t screensz;
-+
-+    info = get_graphics_mode_info(eg);
-+
-+    if (xpm) {
-+        eg->screen_pos.x =
-+            (info->horizontal_resolution - xpm->width) / 2;
-+        eg->screen_pos.y =
-+            (info->vertical_resolution - xpm->height) / 2;
-+    } else {
-+        eg->screen_pos.x = 0;
-+        eg->screen_pos.y = 0;
-+    }
-+
-+    blank(backend);
-+    graphics_get_screen_rowscols(&screensz);
-+    graphics_clbl(0, 0, screensz.x, screensz.y, 0);
-+    graphics_clbl(0, 0, screensz.x, screensz.y, 1);
-+}
-+
-+static void
-+setxy(struct graphics_backend *backend, position_t *pos)
-+{
-+    position_t fpos;
-+
-+    fpos.x = pos->x;
-+    fpos.y = pos->y;
-+    graphics_set_font_position(&fpos);
-+}
-+
-+static void
-+eg_getxy(struct graphics_backend *backend, position_t *pos)
-+{
-+    graphics_get_font_position(pos);
-+}
-+
-+static void
-+draw_pixel(struct graphics_backend *backend, position_t *pos, pixel_t *pixel)
-+{
-+    struct bltbuf *bltbuf = NULL;
-+    grub_efi_graphics_output_pixel_t *eup = (grub_efi_graphics_output_pixel_t *)pixel;
-+
-+    bltbuf = alloc_bltbuf(1,1);
-+    if (!bltbuf)
-+        return;
-+
-+    grub_memmove(&bltbuf->pixbuf[0], eup, sizeof (*eup));
-+
-+    blt_to_screen_pos(backend->priv, bltbuf, pos);
-+
-+    grub_free(bltbuf);
-+}
-+
-+static pixel_t *
-+get_pixel_idx(struct graphics_backend *backend, int idx)
-+{
-+    static grub_efi_graphics_output_pixel_t pixel;
-+    struct eg *eg = backend->priv;
-+    if (idx < 0 || idx > MAX_PALETTE)
-+        return NULL;
-+    pixel.bgrr.red = eg->palette[idx].bgrr.red;
-+    pixel.bgrr.green = eg->palette[idx].bgrr.green;
-+    pixel.bgrr.blue = eg->palette[idx].bgrr.blue;
-+    return (pixel_t *)&pixel;
-+}
-+
-+static pixel_t *
-+get_pixel_rgb(struct graphics_backend *backend, int red, int green, int blue)
-+{
-+    static grub_efi_graphics_output_pixel_t pixel;
-+    rgb_to_pixel(red, green, blue, &pixel);
-+    return &pixel;
-+}
-+
-+static void
-+set_palette(struct graphics_backend *backend, int idx,
-+            int red, int green, int blue)
-+{
-+    grub_efi_graphics_output_pixel_t pixel;
-+    struct eg *eg = backend->priv;
-+
-+    if (idx > MAX_PALETTE)
-+        return;
-+    rgb_to_pixel(red, green, blue, &pixel);
-+    grub_memmove(&eg->palette[idx], &pixel, sizeof pixel);
-+}
-+
-+static void
-+blank(struct graphics_backend *backend)
-+{
-+    struct eg *eg = backend->priv;
-+    struct bltbuf *bltbuf;
-+    position_t pos = {0, 0};
-+    grub_efi_graphics_output_mode_information_t *info;
-+    grub_efi_uintn_t x, y, i, j;
-+    unsigned char r = 0 ,g = 0;
-+
-+    info = get_graphics_mode_info(eg);
-+    x = info->horizontal_resolution;
-+    y = info->vertical_resolution;
-+
-+    if (x == 0 || y == 0)
-+        return;
-+
-+    bltbuf = alloc_bltbuf(x, y);
-+    for (j = 0; j < y; j++) {
-+        if (debug_graphics && j % 16 == 0) {
-+            g = g == 0 ? 7 : 0;
-+            r = g == 0 ? 7 : 0;
-+        }
-+        for (i = 0; i < x; i++) {
-+            if (debug_graphics && i % 16 == 0) {
-+                g = g == 0 ? 7 : 0;
-+                r = g == 0 ? 7 : 0;
-+            }
-+            pos.x = i;
-+            pos.y = j;
-+            bltbuf_set_pixel_rgb(bltbuf, &pos, r * 16, g * 16, 0x0);
-+        }
-+    }
-+
-+    blt_to_screen(eg, bltbuf);
-+
-+    grub_free(bltbuf);
-+}
-+
-+
-+static void
-+draw_white_box(struct graphics_backend *backend)
-+{
-+    struct eg *eg = backend->priv;
-+    struct bltbuf *bltbuf;
-+    position_t pos = {0, 0}, bltpos = {0, 0}, bltsz = {100,100};
-+
-+    bltbuf = alloc_bltbuf(bltsz.x, bltsz.y);
-+    for (pos.y = 0; pos.y < bltsz.y; pos.y++) {
-+        for (pos.x = 0; pos.x < bltsz.x; pos.x++) {
-+            bltbuf_set_pixel_rgb(bltbuf, &pos, 0xff, 0xff, 0xff);
-+        }
-+    }
-+
-+    blt_pos_to_screen_pos(eg, bltbuf, &bltpos, &bltsz, &pos);
-+
-+#if 0
-+    Call_Service_10(eg->output_intf->blt, eg->output_intf, bltbuf->pixbuf,
-+        GRUB_EFI_BLT_BUFFER_TO_VIDEO, 0, 0, 100, 100, x, y, 0);
-+#endif
-+
-+    grub_free(bltbuf);
-+}
-+
-+static void
-+bltbuf_cp_bl(struct bltbuf *d, position_t dpos,
-+             struct bltbuf *s, position_t spos)
-+{
-+    grub_efi_graphics_output_pixel_t *dp, *sp;
-+
-+    const int xavail = MAX(0, s ? s->width - spos.x : 0);
-+    const int xtotal = MAX(0, d->width - dpos.x);
-+    const int xcp = MAX(0, MIN(xtotal, xavail));
-+    const int xcl = MAX(0, xtotal - xcp);
-+
-+    const int yavail = MAX(0, s ? s->height - spos.y : 0);
-+    const int ytotal = MAX(0, d->height - dpos.y);
-+    const int ycp = MAX(0, MIN(ytotal, yavail));
-+    const int ycl = MAX(0, ytotal - ycp);
-+
-+    int y, x;
-+
-+    for (y = 0; y < ytotal; y++) {
-+        dp = &d->pixbuf[(dpos.y + y) * d->width + dpos.x];
-+
-+        if (y < yavail) {
-+            sp = &s->pixbuf[(spos.y + y) * s->width + spos.x];
-+            memmove(dp, sp, xcp * sizeof (*dp));
-+            dp = &d->pixbuf[(dpos.y + y) * d->width + dpos.x + xcp];
-+            memset(dp, '\0', xcl * sizeof (*dp));
-+        } else {
-+            memset(dp, '\0', xtotal * sizeof (*dp));
-+        }
-+    }
-+}
-+
-+/* copy a region the size of bltbuf from the background into bltbuf,
-+ * starting at offset bgpos
-+ */
-+static void
-+bltbuf_draw_bg(struct graphics_backend *backend, struct bltbuf *bltbuf,
-+        position_t bgpos)
-+{
-+    struct eg *eg = backend->priv;
-+    position_t blpos = { 0, 0 };
-+
-+    bltbuf_cp_bl(bltbuf, blpos, eg->background, bgpos);
-+}
-+
-+static void
-+dbg_dump_palette(struct graphics_backend *backend)
-+{
-+    struct eg *eg;
-+    int i;
-+    if (!backend || !backend->priv)
-+        return;
-+    eg = backend->priv;
-+    if (!eg->palette)
-+        return;
-+}
-+
-+static int
-+is_shadow_pixel(position_t screensz, position_t textpos, position_t bitpos,
-+                position_t fontsz)
-+{
-+    unsigned short *text = graphics_get_text_buf();
-+    const unsigned char *glyph;
-+    position_t glyphpos = { textpos.x, textpos.y };
-+    position_t glyphbit = { bitpos.x, bitpos.y };
-+    unsigned short ch;
-+
-+    if (glyphbit.x == 0) {
-+        glyphbit.x = fontsz.x;
-+        glyphpos.x--;
-+    }
-+    if (glyphbit.y == 0) {
-+        glyphbit.y = fontsz.y;
-+        glyphpos.y--;
-+    }
-+    glyphbit.x--;
-+    glyphbit.y--;
-+
-+    if (glyphpos.x < 0 || glyphpos.y < 0)
-+        return 0;
-+
-+    ch = text[glyphpos.y * screensz.x + glyphpos.x] & 0xff;
-+    glyph = font8x16 + (ch << 4);
-+    return glyph[glyphbit.y] & (1 << ((fontsz.x-1) - glyphbit.x));
-+}
-+
-+static void
-+bltbuf_draw_character(struct graphics_backend *backend,
-+        struct bltbuf *bltbuf,  /* the bltbuf to draw into */
-+        position_t target,      /* the position in the bltbuf to draw to */
-+        position_t fontsz,      /* the size of the font, in pixels */
-+        position_t charpos,     /* the position of the character in the text
-+                                   screen buffer */
-+        position_t screensz,    /* the size of the screen in characters */
-+        unsigned short ch       /* the character to draw, plus flags */
-+    )
-+{
-+    struct eg *eg = backend->priv;
-+    position_t blpos;
-+    position_t glyphpos;
-+
-+    blpos.y = target.y;
-+    for (glyphpos.y = 0; glyphpos.y < fontsz.y; glyphpos.y++, blpos.y++) {
-+        blpos.x = target.x;
-+        for (glyphpos.x = 0; glyphpos.x < fontsz.x; glyphpos.x++, blpos.x++) {
-+            int invert = (ch & 0x0100) != 0;
-+            int set = (ch & 0x0200) != 0;
-+            const unsigned char *glyph = font8x16 + ((ch & 0xff) << 4);
-+            int bit = glyph[glyphpos.y] & (1 << ((fontsz.x-1) - glyphpos.x));
-+            int idx = -1;
-+
-+            if (!set) {
-+                if (invert)
-+                    idx = bit ? 0 : 15;
-+                else if (bit)
-+                    idx = 15;
-+
-+                if (idx == -1) {
-+                    if (is_shadow_pixel(screensz, charpos, glyphpos, fontsz) ||
-+                            !eg->background)
-+                        idx = invert ? 15 : 0;
-+                }
-+            } else {
-+                idx = bit ? 0 : 15;
-+            }
-+
-+            if (idx != -1)
-+                bltbuf_set_pixel_idx(eg, bltbuf, &blpos, idx);
-+        }
-+    }
-+}
-+
-+static void
-+bltbuf_draw_text(struct graphics_backend *backend,
-+        struct bltbuf *bltbuf,  /* the buffer to draw into */
-+        position_t screensz,    /* the size of the screen in characters */
-+        position_t fontsz,      /* the size of the font in pixels */
-+        position_t txtpos,      /* the position of the text on the screen
-+                                   (in characters) */
-+        position_t txtsz        /* the size of the block to fill in
-+                                   (in characters) */
-+    )
-+{
-+    struct eg *eg = backend->priv;
-+    unsigned short *text = graphics_get_text_buf();
-+    position_t charpos;
-+
-+    for (charpos.y = txtpos.y; charpos.y < txtpos.y + txtsz.y; charpos.y++) {
-+        for (charpos.x = txtpos.x; charpos.x < txtpos.x + txtsz.x; charpos.x++){
-+            int offset = charpos.y * screensz.x + charpos.x;
-+            position_t blpos = { (charpos.x-txtpos.x)*fontsz.x,
-+                                 (charpos.y-txtpos.y)*fontsz.y };
-+
-+            bltbuf_draw_character(backend, bltbuf, blpos, fontsz, charpos,
-+                    screensz, text[offset]);
-+        }
-+    }
-+}
-+
-+static void
-+clbl(struct graphics_backend *backend, int col, int row, int width, int height,
-+        int draw_text)
-+{
-+    struct eg *eg = backend->priv;
-+    struct xpm *xpm;
-+
-+    struct bltbuf *bltbuf;
-+    position_t fontsz, blpos, blsz, screensz;
-+    unsigned short *text;
-+
-+//    blank(backend);
-+//
-+    xpm = graphics_get_splash_xpm();
-+    if (xpm && !eg->background)
-+        eg->background = xpm_to_bltbuf(xpm);
-+
-+    graphics_get_screen_rowscols(&screensz);
-+    width = MIN(width, screensz.x - col);
-+    height = MIN(height, screensz.y - row);
-+    graphics_get_font_size(&fontsz);
-+
-+    blsz.x = width * fontsz.x;
-+    blsz.y = height * fontsz.y;
-+
-+    bltbuf = alloc_bltbuf(blsz.x, blsz.y);
-+    if (!bltbuf)
-+        return;
-+
-+    blsz.x = col * fontsz.x;
-+    blsz.y = row * fontsz.y;
-+
-+    text = graphics_get_text_buf();
-+    bltbuf_draw_bg(backend, bltbuf, blsz);
-+
-+    if (draw_text) {
-+        blsz.x = width;
-+        blsz.y = height;
-+        blpos.x = col;
-+        blpos.y = row;
-+
-+        bltbuf_draw_text(backend, bltbuf, screensz, fontsz, blpos, blsz);
-+    }
-+
-+    blpos.x = col * fontsz.x;
-+    blpos.y = row * fontsz.y;
-+
-+    blt_to_screen_pos(eg, bltbuf, &blpos);
-+}
-+
-+static void
-+setup_cga_palette(struct eg *eg)
-+{
-+    rgb_to_pixel(0x00,0x00,0x00, &eg->palette[0]); //  0 Black
-+    rgb_to_pixel(0x7f,0x00,0x00, &eg->palette[1]); //  1 Dark Red
-+    rgb_to_pixel(0x00,0x7f,0x00, &eg->palette[2]); //  2 Dark Green
-+    rgb_to_pixel(0x7f,0x7f,0x00, &eg->palette[3]); //  3 Dark Yellow
-+    rgb_to_pixel(0x00,0x00,0x7f, &eg->palette[4]); //  4 Dark Blue
-+    rgb_to_pixel(0x7f,0x00,0x7f, &eg->palette[5]); //  5 Dark Magenta
-+    rgb_to_pixel(0x00,0x7f,0x7f, &eg->palette[6]); //  6 Dark Cyan
-+    rgb_to_pixel(0xc0,0xc0,0xc0, &eg->palette[7]); //  7 Light Grey
-+    rgb_to_pixel(0x7f,0x7f,0x7f, &eg->palette[8]); //  8 Dark Grey
-+    rgb_to_pixel(0xff,0x00,0x00, &eg->palette[9]); //  9 Red
-+    rgb_to_pixel(0x00,0xff,0x00, &eg->palette[10]); // 10 Green
-+    rgb_to_pixel(0xff,0xff,0x00, &eg->palette[11]); // 11 Yellow
-+    rgb_to_pixel(0x00,0x00,0xff, &eg->palette[12]); // 12 Blue
-+    rgb_to_pixel(0xff,0x00,0xff, &eg->palette[13]); // 13 Magenta
-+    rgb_to_pixel(0x00,0xff,0xff, &eg->palette[14]); // 14 Cyan
-+    rgb_to_pixel(0xff,0xff,0xff, &eg->palette[15]); // 15 White
-+    rgb_to_pixel(0xff,0xff,0xff, &eg->palette[16]); // 16 Also white ;)
-+}
-+
-+static grub_efi_status_t
-+set_video_mode(struct eg *eg, int mode)
-+{
-+      grub_efi_status_t efi_status;
-+      efi_status = Call_Service_2(eg->output_intf->set_mode, eg->output_intf, mode);
-+      return efi_status;
-+}
-+
-+static void disable(struct graphics_backend *backend)
-+{
-+    struct eg *eg;
-+
-+    if (!backend)
-+        return;
-+
-+    eg = backend->priv;
-+    if (!eg || eg->current_mode != GRAPHICS)
-+        return;
-+
-+#if 0
-+    blank(backend);
-+
-+    set_video_mode(eg, eg->text_mode);
-+    grub_efi_set_text_mode(1);
-+#endif
-+    eg->current_mode = TEXT;
-+}
-+
-+static int
-+fill_pixel_info (grub_pixel_info_t *pixel_info,
-+               grub_efi_graphics_output_mode_information_t *mode_info)
-+{
-+  if (mode_info->pixel_format == GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR)
-+    {
-+      pixel_info->depth_bits = 32;
-+      pixel_info->depth_bytes = 4;
-+      pixel_info->red_size = 8;
-+      pixel_info->red_pos = 0;
-+      pixel_info->green_size = 8;
-+      pixel_info->green_pos = 8;
-+      pixel_info->blue_size = 8;
-+      pixel_info->blue_pos = 16;
-+      pixel_info->reserved_size = 8;
-+      pixel_info->reserved_pos = 24;
-+      pixel_info->line_length = mode_info->pixels_per_scan_line * 4;
-+    }
-+  else if (mode_info->pixel_format == GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR)
-+    {
-+      pixel_info->depth_bits = 32;
-+      pixel_info->depth_bytes = 4;
-+      pixel_info->red_size = 8;
-+      pixel_info->red_pos = 16;
-+      pixel_info->green_size = 8;
-+      pixel_info->green_pos = 8;
-+      pixel_info->blue_size = 8;
-+      pixel_info->blue_pos = 0;
-+      pixel_info->reserved_size = 8;
-+      pixel_info->reserved_pos = 24;
-+      pixel_info->line_length = mode_info->pixels_per_scan_line * 4;
-+    }
-+  else if (mode_info->pixel_format == GRUB_EFI_PIXEL_BIT_MASK)
-+    {
-+      find_bits (mode_info->pixel_information.red_mask,
-+               &pixel_info->red_pos, &pixel_info->red_size);
-+      find_bits (mode_info->pixel_information.green_mask,
-+               &pixel_info->green_pos, &pixel_info->green_size);
-+      find_bits (mode_info->pixel_information.blue_mask,
-+               &pixel_info->blue_pos, &pixel_info->blue_size);
-+      find_bits (mode_info->pixel_information.reserved_mask,
-+               &pixel_info->reserved_pos, &pixel_info->reserved_size);
-+      pixel_info->depth_bits = pixel_info->red_size + pixel_info->green_size +
-+      pixel_info->blue_size + pixel_info->reserved_size;
-+      pixel_info->depth_bytes = (pixel_info->depth_bits + 7) / 8;
-+      pixel_info->line_length = mode_info->pixels_per_scan_line *
-+      pixel_info->depth_bytes;
-+    }
-+  else
-+    return 0;
-+  return 1;
-+}
-+
-+/* 1 = prefer a
-+ * 0 = prefer neither
-+ * -1 = prefer b
-+ */
-+static int
-+modecmp_helper(struct eg *eg, struct video_mode *amode, struct video_mode *bmode)
-+{
-+        grub_efi_graphics_output_mode_information_t *a = amode->info;
-+        grub_efi_graphics_output_mode_information_t *b = bmode->info;
-+
-+        if (a != NULL && b == NULL)
-+                return 1;
-+        if (a == NULL && b == NULL)
-+                return 0;
-+        if (a == NULL && b != NULL)
-+                return -1;
-+
-+#if 0
-+      if (amode->number == eg->graphics_mode && bmode->number != eg->graphics_mode)
-+              return 1;
-+      if (amode->number == eg->graphics_mode && bmode->number == eg->graphics_mode)
-+              return 0;
-+      if (amode->number != eg->graphics_mode && bmode->number == eg->graphics_mode)
-+              return -1;
-+#endif
-+
-+
-+      /* kernel doesn't deal with blt only modes, so prefer against them. */
-+        if (a->pixel_format != GRUB_EFI_PIXEL_BLT_ONLY &&
-+                        b->pixel_format == GRUB_EFI_PIXEL_BLT_ONLY)
-+                return 1;
-+        if (b->pixel_format != GRUB_EFI_PIXEL_BLT_ONLY &&
-+                        a->pixel_format == GRUB_EFI_PIXEL_BLT_ONLY)
-+                return -1;
-+
-+      /* XXX PJFIX there's something wrong with what we're passing to the
-+       * kernel for stride in the bgrr/rgbr modes, and I haven't figured out
-+       * just what yet, so for now, prefer bitmask modes.
-+       */
-+      if (a->pixel_format == GRUB_EFI_PIXEL_BIT_MASK &&
-+                      b->pixel_format != GRUB_EFI_PIXEL_BIT_MASK)
-+              return 1;
-+      if (a->pixel_format != GRUB_EFI_PIXEL_BIT_MASK &&
-+                      b->pixel_format == GRUB_EFI_PIXEL_BIT_MASK)
-+              return -1;
-+
-+        if (a->pixel_format == GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR &&
-+                      b->pixel_format != GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR)
-+              return 1;
-+        if (a->pixel_format != GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR &&
-+                      b->pixel_format == GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR)
-+              return -1;
-+
-+        if (a->pixel_format == GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR &&
-+                      b->pixel_format != GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR)
-+              return 1;
-+        if (a->pixel_format != GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR &&
-+                      b->pixel_format == GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR)
-+              return -1;
-+
-+        if (a->horizontal_resolution > b->horizontal_resolution &&
-+                        a->vertical_resolution > b->vertical_resolution)
-+                return 1;
-+        if (a->horizontal_resolution < b->horizontal_resolution &&
-+                        a->vertical_resolution < b->vertical_resolution)
-+                return -1;
-+        return 0;
-+}
-+
-+static int
-+modecmp(struct eg *eg, struct video_mode *amode, struct video_mode *bmode)
-+{
-+        int rc;
-+#if 0
-+        grub_efi_graphics_output_mode_information_t *a = amode->info;
-+        grub_efi_graphics_output_mode_information_t *b = bmode->info;
-+#endif
-+        rc = modecmp_helper(eg, amode, bmode);
-+#if 0
-+        grub_printf("comparing nodes:\n");
-+        print_mode_info(amode);
-+        print_mode_info(bmode);
-+        if (rc > 0)
-+                grub_printf("result: a > b\n");
-+        else if (rc < 0)
-+                grub_printf("result: a < b\n");
-+        else
-+                grub_printf("result: a == b\n");
-+
-+        //dbgdelay(__FILE__, __LINE__);
-+#endif
-+        return rc;
-+}
-+
-+static void
-+modeswap(struct video_mode *amode, struct video_mode *bmode)
-+{
-+        struct video_mode tmp;
-+
-+        memcpy(&tmp, amode, sizeof (tmp));
-+        memcpy(amode, bmode, sizeof (tmp));
-+        memcpy(bmode, &tmp, sizeof(tmp));
-+}
-+
-+static void
-+sort_modes(struct eg *eg, int p, int r)
-+{
-+      struct video_mode **modes = eg->modes;
-+
-+        int i, j;
-+      for (i = 0; i < eg->max_mode; i++) {
-+              for (j = i + 1; j < eg->max_mode; j++) {
-+                      if (modecmp(eg, modes[j], modes[i]) < 0)
-+                              modeswap(modes[j], modes[i]);
-+              }
-+      }
-+}
-+
-+static int
-+try_enable(struct graphics_backend *backend)
-+{
-+    struct eg *eg = backend->priv;
-+    grub_efi_status_t efi_status = GRUB_EFI_UNSUPPORTED;
-+    int i;
-+
-+    if (eg->text_mode == 0xffffffff) {
-+        grub_efi_set_text_mode(1);
-+        eg->text_mode = eg->output_intf->mode->mode;
-+    }
-+
-+    if (eg->graphics_mode == 0xffffffff) {
-+        grub_efi_graphics_output_mode_information_t *info;
-+
-+        if (!graphics_alloc_text_buf())
-+            return 0;
-+
-+        grub_efi_set_text_mode(0);
-+        eg->graphics_mode = eg->output_intf->mode->mode;
-+        grub_efi_set_text_mode(1);
-+#if 0
-+      dprintf("graphics mode is %d\n", eg->graphics_mode);
-+      /* this is okay here because we haven't sorted yet.*/
-+      print_mode_info(eg->modes[eg->graphics_mode]);
-+      dprintf("text mode is %d\n", eg->text_mode);
-+      print_mode_info(eg->modes[eg->text_mode]);
-+#endif
-+
-+        sort_modes(eg, 0, eg->max_mode-1);
-+
-+#if 0
-+        for (i = eg->max_mode - 1; i >= 0; i--)
-+            print_mode_info(eg->modes[i]);
-+      dbgdelay(__FILE__, __LINE__);
-+#endif
-+
-+      efi_status = GRUB_EFI_UNSUPPORTED;
-+
-+        for (i = eg->max_mode - 1; i >= 0; i--) {
-+            if (!eg->modes[i])
-+                continue;
-+
-+            info = eg->modes[i]->info;
-+
-+#if 0
-+            if (info->pixel_format != GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR &&
-+                 info->pixel_format != GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR &&
-+                 info->pixel_format != GRUB_EFI_PIXEL_BIT_MASK) {
-+                continue;
-+            }
-+#endif
-+
-+            grub_efi_set_text_mode(0);
-+            efi_status = set_video_mode(eg, eg->modes[i]->number);
-+            if (efi_status == GRUB_EFI_SUCCESS) {
-+#if 0
-+                grub_efi_set_text_mode(1);
-+              dprintf("switched to mode %d successfully\n",
-+                      eg->modes[i]->number);
-+              dbgdelay(__FILE__,__LINE__);
-+                grub_efi_set_text_mode(0);
-+#endif
-+                eg->graphics_mode = eg->modes[i]->number;
-+              fill_pixel_info(&eg->pixel_info, info);
-+                break;
-+            } else {
-+#if 0
-+                set_video_mode(eg, eg->text_mode);
-+                grub_efi_set_text_mode(1);
-+              dprintf("return code was %d\n", efi_status);
-+#endif
-+            }
-+        }
-+        if (efi_status != GRUB_EFI_SUCCESS) {
-+#if 1
-+            grub_efi_set_text_mode(1);
-+            set_video_mode(eg, eg->text_mode);
-+#endif
-+            return 0;
-+        }
-+
-+    }
-+
-+    eg->current_mode = GRAPHICS;
-+    return 1;
-+}
-+
-+static int
-+enable(struct graphics_backend *backend)
-+{
-+    struct eg *eg = backend->priv;
-+    int i;
-+
-+    if (eg) {
-+        if (eg->current_mode == GRAPHICS) {
-+            return 1;
-+        }
-+    } else {
-+        grub_efi_status_t efi_status;
-+      grub_efi_handle_t *handle, *handles;
-+      grub_efi_uintn_t num_handles;
-+      grub_efi_pci_io_t *pci_proto;
-+
-+        if (!(eg = grub_malloc(sizeof (*eg))))
-+            return 0;
-+
-+        grub_memset(eg, '\0', sizeof (*eg));
-+
-+        eg->backend = backend;
-+        eg->current_mode = TEXT;
-+
-+      handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL,
-+                                        &graphics_output_guid,
-+                                        NULL, &num_handles);
-+
-+      if (!num_handles || !handles)
-+        goto fail;
-+
-+      for (handle = handles; num_handles--; handle++)
-+        {
-+          pci_proto = grub_efi_open_protocol (*handle, &pci_io_guid,
-+                                       GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-+
-+          if (!pci_proto)
-+            continue;
-+
-+          eg->output_intf = grub_efi_open_protocol (*handle,
-+                 &graphics_output_guid, GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-+
-+          if (eg->output_intf)
-+            {
-+              grub_efi_setup_gfx_pci(*handle);
-+              break;
-+            }
-+        }
-+
-+      grub_free(handles);
-+
-+      if (!eg->output_intf)
-+          eg->output_intf = grub_efi_locate_protocol(&graphics_output_guid, NULL);
-+
-+        if (!eg->output_intf)
-+            goto fail;
-+
-+        eg->text_mode = eg->graphics_mode = 0xffffffff;
-+
-+        eg->max_mode = eg->output_intf->mode->max_mode;
-+        eg->modes = grub_malloc(eg->max_mode * sizeof (void *));
-+        if (!eg->modes)
-+            goto fail;
-+        memset(eg->modes, '\0', eg->max_mode * sizeof (void *));
-+
-+        for (i = 0; i < eg->max_mode; i++) {
-+            eg->modes[i] = grub_malloc(sizeof *(eg->modes[0]));
-+            if (!eg->modes[i])
-+                goto fail;
-+            memset(eg->modes[i], '\0', sizeof *(eg->modes[0]));
-+            eg->modes[i]->number = i;
-+
-+            efi_status = Call_Service_4(eg->output_intf->query_mode,
-+                    eg->output_intf, i, &eg->modes[i]->size,
-+                    &eg->modes[i]->info);
-+          if (efi_status == GRUB_EFI_NOT_STARTED) {
-+              /* The firmware didn't turn on GRAPHICS_OUTPUT_PROTOCOL, so
-+               * try to do so ourselves. Thanks, Intel. */
-+              set_video_mode(eg, eg->output_intf->mode->mode);
-+              efi_status = Call_Service_4(eg->output_intf->query_mode,
-+                    eg->output_intf, i, &eg->modes[i]->size,
-+                    &eg->modes[i]->info);
-+          }
-+            if (efi_status != GRUB_EFI_SUCCESS) {
-+                grub_free(eg->modes[i]);
-+                eg->modes[i] = NULL;
-+                //eg->max_mode = i;
-+                break;
-+            }
-+        }
-+
-+        backend->priv = eg;
-+        setup_cga_palette(eg);
-+        for (i = 0; i < n_cga_colors; i++) {
-+            eg->palette[i].bgrr.red = cga_colors[i].bgrr.red;
-+            eg->palette[i].bgrr.green = cga_colors[i].bgrr.green;
-+            eg->palette[i].bgrr.blue = cga_colors[i].bgrr.blue;
-+        }
-+    }
-+
-+    if (try_enable(backend)) {
-+        reset_screen_geometry(backend);
-+        return 1;
-+    }
-+
-+fail:
-+    backend->priv = NULL;
-+    if (eg->modes) {
-+        for (i = 0; i < eg->max_mode; i++) {
-+            if (eg->modes[i])
-+                grub_free(eg->modes[i]);
-+        }
-+        grub_free(eg->modes);
-+    }
-+    grub_free(eg);
-+    return 0;
-+}
-+
-+struct graphics_backend eg_backend = {
-+    .name = "eg",
-+    .enable = enable,
-+    .disable = disable,
-+    .set_kernel_params = set_kernel_params,
-+    .clbl = clbl,
-+    .set_palette = set_palette,
-+    .get_pixel_idx = get_pixel_idx,
-+    .get_pixel_rgb = get_pixel_rgb,
-+    .draw_pixel = draw_pixel,
-+    .reset_screen_geometry = reset_screen_geometry,
-+    .get_screen_size = get_screen_size,
-+    .getxy = eg_getxy,
-+    .setxy = setxy,
-+    .gotoxy = NULL,
-+    .cursor = cursor,
-+};
-+
-+#endif /* SUPPORT_GRAPHICS */
-diff --git a/efi/efimain.c b/efi/efimain.c
-new file mode 100644
-index 0000000..e1a1e66
---- /dev/null
-+++ b/efi/efimain.c
-@@ -0,0 +1,129 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2007 Intel Corp.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-+ *  MA  02110-1301, USA.
-+ */
-+
-+#include <grub/efi/efi.h>
-+#include <grub/efi/api.h>
-+#include <grub/efi/misc.h>
-+#include <grub/misc.h>
-+
-+#include <shared.h>
-+#include <efistubs.h>
-+
-+#include "pxe.h"
-+
-+#define GRUB_SCRATCH_MEM_PAGES  (GRUB_SCRATCH_MEM_SIZE >> 12)
-+
-+/* Emulation requirements. */
-+void *grub_scratch_mem = NULL;
-+
-+#define LOW_STACK_SIZE  0x100000
-+#define LOW_STACK_PAGES (LOW_STACK_SIZE >> 12)
-+static void *low_stack, *real_stack;
-+
-+extern int grub_test_pxe(grub_efi_loaded_image_t *loaded_image);
-+
-+static void
-+real_main (void)
-+{
-+  grub_efi_loaded_image_t *loaded_image;
-+  char *path_name = NULL;
-+
-+  loaded_image = grub_efi_get_loaded_image (grub_efi_image_handle);
-+
-+  path_name = grub_efi_pxe_get_config_path(loaded_image);
-+
-+  if (path_name) {
-+    network_ready = 1;
-+
-+    grub_set_config_file (path_name);
-+    grub_free (path_name);
-+  } else {
-+      grub_get_drive_partition_from_bdev_handle (loaded_image->device_handle,
-+                                               &boot_drive,
-+                                               &install_partition);
-+      path_name = grub_efi_file_path_to_path_name (loaded_image->file_path);
-+
-+    if (path_name)
-+      {
-+        grub_set_config_file (path_name);
-+        grub_free (path_name);
-+      }
-+
-+    grub_load_saved_default (loaded_image->device_handle);
-+  }
-+
-+  init_bios_info ();
-+  while (console_getkey() < 0)
-+    grub_efi_stall(1000);
-+}
-+
-+grub_efi_status_t
-+efi_main (grub_efi_handle_t image_handle, grub_efi_system_table_t *sys_tab)
-+{
-+  grub_efi_image_handle = image_handle;
-+  grub_efi_system_table = sys_tab;
-+  grub_efi_init ();
-+
-+  grub_scratch_mem = grub_efi_allocate_pages (0, GRUB_SCRATCH_MEM_PAGES);
-+  if (! grub_scratch_mem)
-+    {
-+      grub_printf ("Failed to allocate scratch mem!\n");
-+      return GRUB_EFI_OUT_OF_RESOURCES;
-+    }
-+
-+  /* If current stack reside in memory region > 2G, switch stack to a
-+     memory region < 2G */
-+  if ((unsigned long)&image_handle >= 0x80000000UL)
-+    {
-+      low_stack = grub_efi_allocate_pages (0, LOW_STACK_PAGES);
-+      if (! low_stack)
-+      {
-+        grub_printf("Failed to allocate low memory stack!\n");
-+        return GRUB_EFI_OUT_OF_RESOURCES;
-+      }
-+
-+#ifdef __x86_64__
-+      asm volatile ("movq %%rsp, %0\n\tmovq %1, %%rsp\n"
-+                  : "=&r" (real_stack) : "r" (low_stack+LOW_STACK_SIZE));
-+#else
-+      asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
-+                  : "=&r" (real_stack) : "r" (low_stack+LOW_STACK_SIZE));
-+#endif
-+    }
-+
-+  real_main ();
-+
-+  if (real_stack) {
-+#ifdef __x86_64__
-+    asm volatile ("movq %0, %%rsp\n" : : "r" (real_stack));
-+#else
-+    asm volatile ("movl %0, %%esp\n" : : "r" (real_stack));
-+#endif
-+
-+    grub_efi_free_pages ((grub_efi_physical_address_t)(unsigned long) low_stack,
-+                       LOW_STACK_PAGES);
-+  }
-+
-+  grub_efi_free_pages ((grub_efi_physical_address_t)(unsigned long)grub_scratch_mem,
-+                     GRUB_SCRATCH_MEM_PAGES);
-+  grub_efi_fini ();
-+
-+  return GRUB_EFI_SUCCESS;
-+}
-diff --git a/efi/efimisc.c b/efi/efimisc.c
-new file mode 100644
-index 0000000..480ba25
---- /dev/null
-+++ b/efi/efimisc.c
-@@ -0,0 +1,665 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2006  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-+ *  MA  02110-1301, USA.
-+ */
-+
-+#include <config.h>
-+#include <grub/efi/efi.h>
-+#include <grub/efi/time.h>
-+#include <grub/efi/misc.h>
-+#include <grub/misc.h>
-+
-+#include <shared.h>
-+
-+unsigned long install_partition = 0x20000;
-+unsigned long boot_drive = 0x80;
-+int saved_entryno = 0;
-+char version_string[] = VERSION;
-+char config_file[128] = "/boot/grub/menu.lst";
-+unsigned short io_map[IO_MAP_SIZE];
-+struct apm_info apm_bios_info;
-+/* The key map.  */
-+unsigned short bios_key_map[KEY_MAP_SIZE + 1];
-+unsigned short ascii_key_map[KEY_MAP_SIZE + 1];
-+
-+void
-+grub_efi_init (void)
-+{
-+  /* First of all, initialize the console so that GRUB can display
-+     messages.  */
-+  grub_console_init ();
-+  /* Initialize the memory management system.  */
-+  grub_efi_mm_init ();
-+  grub_efidisk_init ();
-+}
-+
-+void
-+grub_efi_fini (void)
-+{
-+  grub_efidisk_fini ();
-+  grub_efi_mm_fini ();
-+  grub_console_fini ();
-+}
-+
-+void *
-+grub_malloc (grub_size_t size)
-+{
-+  return grub_efi_allocate_pool (size);
-+}
-+
-+void
-+grub_free (void *p)
-+{
-+  grub_efi_free_pool (p);
-+}
-+
-+char *
-+grub_stpcpy (char *dest, const char *src)
-+{
-+  char *d = dest;
-+  const char *s = src;
-+
-+  do
-+    *d++ = *s;
-+  while (*s++ != '\0');
-+
-+  return d - 1;
-+}
-+
-+void
-+grub_fatal (const char *fmt, ...)
-+{
-+  va_list ap;
-+
-+  va_start (ap, fmt);
-+  grub_vsprintf (NULL, fmt, ap);
-+  va_end (ap);
-+
-+  grub_exit ();
-+}
-+
-+void
-+grub_real_dprintf (const char *file, const int line, const char *condition,
-+                 const char *fmt, ...)
-+{
-+  va_list args;
-+
-+  if (! debug)
-+    return;
-+
-+  grub_printf ("%s:%d: ", file, line);
-+  va_start (args, fmt);
-+  grub_vsprintf (0, fmt, args);
-+  va_end (args);
-+}
-+
-+grub_size_t
-+grub_utf8_char_len(grub_uint8_t ch)
-+{
-+  return ((0xe5000000 >> ((ch >> 3) & 0x1e)) & 3) + 1;
-+}
-+
-+#define UTF8_SHIFT_AND_MASK(unicode, byte)  (unicode)<<=6; (unicode) |= (0x3f & (byte))
-+
-+/* convert utf8 to utf32 */
-+grub_uint32_t
-+grub_utf8_to_utf32(const grub_uint8_t *src, grub_size_t length)
-+{
-+  grub_uint32_t unicode;
-+
-+  switch (length)
-+    {
-+    case 1:
-+      return src[0];
-+    case 2:
-+      unicode = src[0] & 0x1f;
-+      UTF8_SHIFT_AND_MASK(unicode, src[1]);
-+      return unicode;
-+    case 3:
-+      unicode = src[0] & 0x0f;
-+      UTF8_SHIFT_AND_MASK(unicode, src[1]);
-+      UTF8_SHIFT_AND_MASK(unicode, src[2]);
-+      return unicode;
-+    case 4:
-+      unicode = src[0] & 0x07;
-+      UTF8_SHIFT_AND_MASK(unicode, src[1]);
-+      UTF8_SHIFT_AND_MASK(unicode, src[2]);
-+      UTF8_SHIFT_AND_MASK(unicode, src[3]);
-+      return unicode;
-+    default:
-+      return 0xffff;
-+    }
-+}
-+
-+/* convert utf8 to utf16 */
-+void
-+grub_utf8_to_utf16(const grub_uint8_t *src, grub_size_t srclen,
-+                 grub_uint16_t *dst, grub_size_t dstlen)
-+{
-+  const grub_uint8_t *end = src + srclen;
-+  grub_efi_char16_t *dstend = dst + dstlen;
-+
-+  while (src < end && dst < dstend)
-+    {
-+      grub_size_t len = grub_utf8_char_len(*src);
-+      /* get the utf32 codepoint */
-+      grub_uint32_t codepoint = grub_utf8_to_utf32(src, len);
-+
-+      /* convert that codepoint to utf16 codepoints */
-+      if (codepoint <= 0xffff)
-+      {
-+        /* it's a single utf16 character */
-+        *dst++ = (grub_efi_char16_t) codepoint;
-+      }
-+      else
-+      {
-+        /* it's multiple utf16 characters, with surrogate pairs */
-+        codepoint = codepoint - 0x10000;
-+        *dst++ = (grub_efi_char16_t) ((codepoint >> 10) + 0xd800);
-+        *dst++ = (grub_efi_char16_t) ((codepoint & 0x3ff) + 0xdc00);
-+      }
-+
-+      src += len;
-+    }
-+
-+  if (dst < dstend)
-+    *dst = 0;
-+}
-+
-+/* Convert UTF-16 to UTF-8.  */
-+grub_uint8_t *
-+grub_utf16_to_utf8 (grub_uint8_t *dest, grub_uint16_t *src,
-+                  grub_size_t size)
-+{
-+  grub_uint32_t code_high = 0;
-+
-+  while (size--)
-+    {
-+      grub_uint32_t code = *src++;
-+
-+      if (code_high)
-+      {
-+        if (code >= 0xDC00 && code <= 0xDFFF)
-+          {
-+            /* Surrogate pair.  */
-+            code = ((code_high - 0xD800) << 12) + (code - 0xDC00) + 0x10000;
-+
-+            *dest++ = (code >> 18) | 0xF0;
-+            *dest++ = ((code >> 12) & 0x3F) | 0x80;
-+            *dest++ = ((code >> 6) & 0x3F) | 0x80;
-+            *dest++ = (code & 0x3F) | 0x80;
-+          }
-+        else
-+          {
-+            /* Error...  */
-+            *dest++ = '?';
-+          }
-+
-+        code_high = 0;
-+      }
-+      else
-+      {
-+        if (code <= 0x007F)
-+          *dest++ = code;
-+        else if (code <= 0x07FF)
-+          {
-+            *dest++ = (code >> 6) | 0xC0;
-+            *dest++ = (code & 0x3F) | 0x80;
-+          }
-+        else if (code >= 0xD800 && code <= 0xDBFF)
-+          {
-+            code_high = code;
-+            continue;
-+          }
-+        else if (code >= 0xDC00 && code <= 0xDFFF)
-+          {
-+            /* Error... */
-+            *dest++ = '?';
-+          }
-+        else
-+          {
-+            *dest++ = (code >> 16) | 0xE0;
-+            *dest++ = ((code >> 12) & 0x3F) | 0x80;
-+            *dest++ = (code & 0x3F) | 0x80;
-+          }
-+      }
-+    }
-+
-+  return dest;
-+}
-+
-+/* low-level timing info */
-+int
-+getrtsecs (void)
-+{
-+  return grub_get_rtc() / GRUB_TICKS_PER_SECOND;
-+}
-+
-+void
-+grub_reboot (void)
-+{
-+  grub_efi_runtime_services_t *r;
-+
-+  r = grub_efi_system_table->runtime_services;
-+  Call_Service_4 (r->reset_system, GRUB_EFI_RESET_COLD,
-+                GRUB_EFI_SUCCESS, 0, NULL);
-+  for (;;);
-+}
-+
-+void
-+grub_halt (int no_apm)
-+{
-+  grub_efi_runtime_services_t *r;
-+
-+  r = grub_efi_system_table->runtime_services;
-+  Call_Service_4 (r->reset_system, GRUB_EFI_RESET_SHUTDOWN,
-+                GRUB_EFI_SUCCESS, 0, NULL);
-+  for (;;);
-+}
-+
-+void
-+stop (void)
-+{
-+  grub_exit ();
-+}
-+
-+/* booting a multiboot executable */
-+void
-+multi_boot (int start, int mb_info)
-+{
-+  stop ();
-+}
-+
-+/* sets it to linear or wired A20 operation */
-+void
-+gateA20 (int linear)
-+{
-+}
-+
-+/* Set up the int15 handler.  */
-+void
-+set_int15_handler (void)
-+{
-+}
-+
-+/* Restore the original int15 handler.  */
-+void
-+unset_int15_handler (void)
-+{
-+}
-+
-+/* Copy MAP to the drive map and set up the int13 handler.  */
-+void
-+set_int13_handler (unsigned short *map)
-+{
-+}
-+
-+/* Get the ROM configuration table.  */
-+unsigned long
-+get_rom_config_table (void)
-+{
-+  return 0;
-+}
-+
-+/* Get APM BIOS information.  */
-+void
-+get_apm_info (void)
-+{
-+  /* Nothing to do in the simulator.  */
-+}
-+
-+void
-+stop_floppy (void)
-+{
-+  /* NOTUSED */
-+}
-+
-+char *
-+grub_strndup (const char *s, int n)
-+{
-+  int l = grub_strnlen(s, n);
-+  char *new = grub_malloc(l + 1);
-+
-+  if (new == NULL)
-+    return NULL;
-+
-+  new[l] = '\0';
-+  return grub_strncpy(new, s, l);
-+}
-+
-+int
-+safe_parse_maxulong (char **str_ptr, unsigned long *myulong_ptr)
-+{
-+  char *ptr = *str_ptr;
-+  unsigned long myulong = 0;
-+  unsigned int mult = 10, found = 0;
-+
-+  /*
-+   *  Is this a hex number?
-+   */
-+  if (*ptr == '0' && tolower (*(ptr + 1)) == 'x')
-+    {
-+      ptr += 2;
-+      mult = 16;
-+    }
-+
-+  while (1)
-+    {
-+      /* A bit tricky. This below makes use of the equivalence:
-+       (A >= B && A <= C) <=> ((A - B) <= (C - B))
-+       when C > B and A is unsigned.  */
-+      unsigned int digit;
-+
-+      digit = tolower (*ptr) - '0';
-+      if (digit > 9)
-+      {
-+        digit -= 'a' - '0';
-+        if (mult == 10 || digit > 5)
-+          break;
-+        digit += 10;
-+      }
-+
-+      found = 1;
-+      if (myulong > ((~0UL - digit) / mult))
-+      {
-+        errnum = ERR_NUMBER_OVERFLOW;
-+        return 0;
-+      }
-+      myulong = (myulong * mult) + digit;
-+      ptr++;
-+    }
-+
-+  if (!found)
-+    {
-+      errnum = ERR_NUMBER_PARSING;
-+      return 0;
-+    }
-+
-+  *str_ptr = ptr;
-+  *myulong_ptr = myulong;
-+
-+  return 1;
-+}
-+
-+int
-+currticks (void)
-+{
-+  return grub_get_rtc ();
-+}
-+
-+static char *
-+fix_path_name (char *path_name)
-+{
-+  char *p1, *p2;
-+
-+  p1 = path_name;
-+  p2 = p1 + 1;
-+  if (*p1 == '\\')
-+    *p1 = '/';
-+  while (*p1)
-+    {
-+      switch (*p2)
-+      {
-+      case '\0':
-+        *++p1 = *p2;
-+        break;
-+      case '.':
-+        if (*p1 == '/' && *(p2+1) == '\\')
-+          p2 += 2;
-+        else
-+          *++p1=*p2++;
-+        break;
-+      case '\\':
-+        if (*p1 == '/')
-+          p2++;
-+        else
-+          *++p1 = '/';
-+        break;
-+      default:
-+        *++p1=*p2++;
-+        break;
-+      }
-+    }
-+  return path_name;
-+}
-+
-+char *
-+grub_efi_file_path_to_path_name (grub_efi_device_path_t *file_path)
-+{
-+  char *str;
-+  grub_efi_uint32_t str_len = 16;
-+  grub_efi_uint32_t str_pos = 0;
-+
-+  str = grub_malloc (str_len);
-+  if (! str)
-+    return NULL;
-+  str[0] = '\0';
-+
-+  while (1)
-+    {
-+      grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (file_path);
-+      grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE (file_path);
-+      grub_efi_uint16_t len = GRUB_EFI_DEVICE_PATH_LENGTH (file_path);
-+
-+      switch (type)
-+      {
-+      case GRUB_EFI_MEDIA_DEVICE_PATH_TYPE:
-+        switch (subtype)
-+          {
-+          case GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE:
-+            {
-+              grub_efi_file_path_device_path_t *fp;
-+              grub_uint8_t buf[(len - 4) * 2 + 2];
-+              grub_uint32_t path_name_len;
-+              char *tmp_str;
-+
-+              fp = (grub_efi_file_path_device_path_t *) file_path;
-+              *grub_utf16_to_utf8 (buf, fp->path_name,
-+                                   (len - 4) / sizeof (grub_efi_char16_t))
-+                = '\0';
-+              path_name_len = strlen ((char *)buf) + 1;
-+              if ((str_len - str_pos) <= path_name_len)
-+                {
-+                  do
-+                    str_len *= 2;
-+                  while ((str_len - str_pos) <= path_name_len);
-+                  tmp_str = grub_malloc (str_len);
-+                  if (tmp_str == NULL)
-+                    goto fail;
-+                  grub_memmove (tmp_str, str, str_pos);
-+                  grub_free (str);
-+                  str = tmp_str;
-+                }
-+              str[str_pos] = '\\';
-+              strcpy (str + str_pos + 1, (char *)buf);
-+              str_pos += path_name_len;
-+            }
-+            break;
-+          default:
-+            break;
-+          }
-+        break;
-+      default:
-+        break;
-+      }
-+
-+      if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (file_path))
-+      break;
-+
-+      file_path = (grub_efi_device_path_t *) ((char *) file_path + len);
-+    }
-+  return fix_path_name (str);
-+
-+ fail:
-+  grub_free (str);
-+  return NULL;
-+}
-+
-+#define DEFAULT_SAVED_DEFAULT_FILE_NAME               "grub.default"
-+#define DEFAULT_CONFIG_FILE_NAME              "grub.conf"
-+
-+static char saved_default_file[128] = "/boot/grub/grub.default";
-+
-+void
-+grub_set_config_file (char *path_name)
-+{
-+  char *dir_end;
-+  grub_uint32_t path_name_len;
-+
-+  path_name_len = strlen (path_name);
-+  if (path_name_len > 4
-+      && path_name[path_name_len - 4] == '.'
-+      && grub_tolower (path_name[path_name_len - 3]) == 'e'
-+      && grub_tolower (path_name[path_name_len - 2]) == 'f'
-+      && grub_tolower (path_name[path_name_len - 1]) == 'i')
-+    {
-+      /* Bigger than buffer of config_file */
-+      if (path_name_len + 1 > 127)
-+      return;
-+      grub_memmove (config_file, path_name, path_name_len - 4);
-+      grub_strcpy (config_file + path_name_len - 4, ".conf");
-+      /* Bigger than buffer of default file */
-+      if (path_name_len + 4 > 127)
-+      return;
-+      grub_memmove (saved_default_file, path_name, path_name_len - 4);
-+      grub_strcpy (saved_default_file + path_name_len - 4, ".default");
-+      return;
-+    }
-+  dir_end = grub_strrchr (path_name, '/');
-+  if (! dir_end)
-+    {
-+      grub_strcpy (config_file, DEFAULT_CONFIG_FILE_NAME);
-+      grub_strcpy (saved_default_file, DEFAULT_SAVED_DEFAULT_FILE_NAME);
-+      return;
-+    }
-+  if (strlen(dir_end) == 1) {
-+    path_name_len = dir_end + 1 - path_name;
-+    if (path_name_len + sizeof (DEFAULT_CONFIG_FILE_NAME) > 128)
-+      return;
-+    grub_memmove (config_file, path_name, path_name_len);
-+    grub_strcpy (config_file + path_name_len, DEFAULT_CONFIG_FILE_NAME);
-+  } else {
-+    grub_memmove (config_file, path_name, path_name_len+1);
-+  }
-+  if (path_name_len + sizeof (DEFAULT_SAVED_DEFAULT_FILE_NAME) > 128)
-+    return;
-+  path_name_len = dir_end + 1 - path_name;
-+  grub_memmove (saved_default_file, path_name, path_name_len);
-+  grub_strcpy (saved_default_file + path_name_len,
-+             DEFAULT_SAVED_DEFAULT_FILE_NAME);
-+}
-+
-+grub_efi_guid_t simple_file_system_guid = GRUB_EFI_SIMPLE_FILE_SYSTEM_GUID;
-+
-+static grub_efi_file_t *
-+simple_open_file(grub_efi_handle_t dev_handle,
-+               char *file_name,
-+               int for_write)
-+{
-+  grub_efi_simple_file_system_t *file_system;
-+  grub_efi_file_t *root;
-+  grub_efi_file_t *file = NULL;
-+  grub_efi_status_t status;
-+  grub_efi_char16_t *file_name_w = NULL;
-+  grub_efi_char16_t *chp_w;
-+  grub_efi_uint64_t open_mode;
-+
-+  file_system = grub_efi_open_protocol (dev_handle,
-+                                      &simple_file_system_guid,
-+                                      GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-+  if (! file_system)
-+    return NULL;
-+  status = Call_Service_2 (file_system->open_volume, file_system, &root);
-+  if (status != GRUB_EFI_SUCCESS)
-+    return NULL;
-+  file_name_w = grub_malloc (2 * strlen(file_name) + 2);
-+  if (! file_name_w)
-+    goto done;
-+  for (chp_w = file_name_w; *file_name; chp_w++, file_name++)
-+    if (*file_name == '/')
-+      *chp_w = '\\';
-+    else
-+      *chp_w = *file_name;
-+  *chp_w = '\0';
-+  open_mode = for_write ? GRUB_EFI_FILE_MODE_READ | GRUB_EFI_FILE_MODE_WRITE \
-+    | GRUB_EFI_FILE_MODE_CREATE : GRUB_EFI_FILE_MODE_READ;
-+  status = Call_Service_5 (root->open, root, &file, file_name_w,
-+                         open_mode, 0);
-+ done:
-+  if (file_name_w)
-+    grub_free (file_name_w);
-+  Call_Service_1 (root->close, root);
-+  return file;
-+}
-+
-+void
-+grub_load_saved_default (grub_efi_handle_t dev_handle)
-+{
-+  grub_efi_file_t *file;
-+  char buf[16];
-+  char *ptr = buf;
-+  grub_efi_status_t status;
-+  int val;
-+  grub_efi_uintn_t buf_size = sizeof(buf);
-+
-+  file = simple_open_file (dev_handle, saved_default_file, 0);
-+  if (! file)
-+    return;
-+  status = Call_Service_3 (file->read, file, &buf_size, buf);
-+  if (status != GRUB_EFI_SUCCESS)
-+    goto done;
-+  if (buf_size >= sizeof(buf))
-+    buf_size = sizeof(buf) - 1;
-+  buf[buf_size] = '\0';
-+  if (safe_parse_maxint (&ptr, &val))
-+    saved_entryno = val;
-+ done:
-+  Call_Service_1 (file->close, file);
-+}
-+
-+int
-+grub_save_saved_default (int new_default)
-+{
-+  grub_efi_loaded_image_t *loaded_image;
-+  grub_efi_file_t *file;
-+  char buf[16];
-+  grub_efi_status_t status;
-+  grub_efi_uintn_t buf_size;
-+  int ret = 0;
-+
-+  loaded_image = grub_efi_get_loaded_image (grub_efi_image_handle);
-+  file = simple_open_file (loaded_image->device_handle,
-+                         saved_default_file, 1);
-+  if (! file)
-+    {
-+      errnum = ERR_FILE_NOT_FOUND;
-+      return 1;
-+    }
-+  sprintf (buf, "%d", new_default);
-+  buf_size = strlen (buf);
-+  status = Call_Service_3 (file->write, file, &buf_size, buf);
-+  if (status != GRUB_EFI_SUCCESS)
-+    {
-+      errnum = ERR_WRITE;
-+      ret = 1;
-+      goto done;
-+    }
-+ done:
-+  Call_Service_1 (file->close, file);
-+  return ret;
-+}
-diff --git a/efi/efimm.c b/efi/efimm.c
-new file mode 100644
-index 0000000..836188d
---- /dev/null
-+++ b/efi/efimm.c
-@@ -0,0 +1,539 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2006  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-+ *  MA  02110-1301, USA.
-+ */
-+
-+#include <config.h>
-+#include <grub/misc.h>
-+#include <grub/efi/api.h>
-+#include <grub/efi/efi.h>
-+#include <grub/efi/misc.h>
-+
-+#include <shared.h>
-+
-+#define NEXT_MEMORY_DESCRIPTOR(desc, size)    \
-+  ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size)))
-+
-+#define BYTES_TO_PAGES(bytes) ((bytes) >> 12)
-+#define PAGES_TO_BYTES(pages) ((pages) << 12)
-+
-+/* Global variables used to store memory map, its size, and the number of
-+ * pages allocated for the buffer. */
-+void *mmap_buf;
-+grub_efi_uintn_t mmap_size;
-+grub_efi_uintn_t mmap_pages;
-+
-+/* Maintain the list of allocated pages.  */
-+struct allocated_page
-+{
-+  grub_efi_physical_address_t addr;
-+  grub_efi_uint64_t num_pages;
-+};
-+
-+#define ALLOCATED_PAGES_SIZE  0x1000
-+#define MAX_ALLOCATED_PAGES   \
-+  (ALLOCATED_PAGES_SIZE / sizeof (struct allocated_page))
-+
-+static struct allocated_page *allocated_pages = 0;
-+
-+/* The minimum and maximum heap size for GRUB itself.  */
-+#define MIN_HEAP_SIZE 0x100000
-+#define MAX_HEAP_SIZE (16 * 0x100000)
-+
-+
-+void *
-+grub_efi_allocate_pool (grub_efi_uintn_t size)
-+{
-+  grub_efi_status_t status;
-+  void *p;
-+  grub_efi_boot_services_t *b;
-+
-+  b = grub_efi_system_table->boot_services;
-+  status = Call_Service_3(b->allocate_pool, GRUB_EFI_LOADER_DATA, size, &p);
-+  if (status != GRUB_EFI_SUCCESS)
-+    return NULL;
-+
-+  return p;
-+}
-+
-+void
-+grub_efi_free_pool (void *buffer)
-+{
-+  grub_efi_boot_services_t *b;
-+
-+  b = grub_efi_system_table->boot_services;
-+  Call_Service_1(b->free_pool, buffer);
-+}
-+
-+void *
-+grub_efi_allocate_anypages(grub_efi_uintn_t pages)
-+{
-+  grub_efi_boot_services_t *b;
-+  grub_efi_status_t status;
-+  grub_efi_physical_address_t address;
-+
-+  b = grub_efi_system_table->boot_services;
-+  status = Call_Service_4 (b->allocate_pages,
-+                          GRUB_EFI_ALLOCATE_ANY_PAGES,
-+                          GRUB_EFI_LOADER_DATA,
-+                          pages,
-+                          &address);
-+  if (status != GRUB_EFI_SUCCESS)
-+      return 0;
-+
-+  if (allocated_pages)
-+     {
-+       unsigned i;
-+ 
-+       for (i = 0; i < MAX_ALLOCATED_PAGES; i++)
-+      if (allocated_pages[i].addr == 0)
-+        {
-+              allocated_pages[i].addr = address;
-+              allocated_pages[i].num_pages = pages;
-+              break;
-+        }
-+ 
-+       if (i == MAX_ALLOCATED_PAGES)
-+        {
-+           grub_printf ("too many page allocations");
-+           return NULL;
-+        }
-+     }
-+ 
-+  return (void *) ((grub_addr_t) address);
-+
-+}
-+
-+/* Allocate pages. Return the pointer to the first of allocated pages.  */
-+static void *
-+grub_efi_allocate_pages_real (grub_efi_physical_address_t address,
-+                            grub_efi_uintn_t pages,
-+                            grub_efi_memory_type_t memtype)
-+{
-+  grub_efi_allocate_type_t type;
-+  grub_efi_status_t status;
-+  grub_efi_boot_services_t *b;
-+
-+  /* Limit the memory access to less than 2GB to avoid 64bit
-+   * compatible problem of grub  */
-+  if (address > 0x7fffffff)
-+    return 0;
-+
-+  if (address == 0)
-+    {
-+      type = GRUB_EFI_ALLOCATE_MAX_ADDRESS;
-+      address = 0x7fffffff;
-+    }
-+  else
-+    type = GRUB_EFI_ALLOCATE_ADDRESS;
-+
-+  b = grub_efi_system_table->boot_services;
-+  status = Call_Service_4 (b->allocate_pages, type,
-+                         memtype, pages, &address);
-+
-+  if (status != GRUB_EFI_SUCCESS)
-+    {
-+      /* EFI_NOT_FOUND means the region was unavailable, which means we can
-+       probably just use it. This is only for hacks to start with */
-+      if (memtype == GRUB_EFI_RUNTIME_SERVICES_DATA &&
-+        status == GRUB_EFI_NOT_FOUND)
-+      return (void *) ((grub_addr_t) address);
-+      else
-+      return 0;
-+    }
-+
-+  if (address == 0)
-+    {
-+      /* Uggh, the address 0 was allocated... This is too annoying,
-+       so reallocate another one.  */
-+      address = 0x7fffffff;
-+      status = Call_Service_4 (b->allocate_pages,
-+                              type, GRUB_EFI_LOADER_DATA, pages, &address);
-+      grub_efi_free_pages (0, pages);
-+      if (status != GRUB_EFI_SUCCESS)
-+      return 0;
-+    }
-+
-+  /* We don't want to free anything we've allocated for runtime */
-+  if (allocated_pages && memtype != GRUB_EFI_RUNTIME_SERVICES_DATA)
-+    {
-+      unsigned i;
-+
-+      for (i = 0; i < MAX_ALLOCATED_PAGES; i++)
-+      if (allocated_pages[i].addr == 0)
-+        {
-+          allocated_pages[i].addr = address;
-+          allocated_pages[i].num_pages = pages;
-+          break;
-+        }
-+
-+      if (i == MAX_ALLOCATED_PAGES)
-+      {
-+        grub_printf ("too many page allocations");
-+        return NULL;
-+      }
-+    }
-+
-+  return (void *) ((grub_addr_t) address);
-+}
-+
-+void *
-+grub_efi_allocate_pages (grub_efi_physical_address_t address,
-+                       grub_efi_uintn_t pages)
-+
-+{
-+  return grub_efi_allocate_pages_real(address, pages, GRUB_EFI_LOADER_DATA);
-+}
-+
-+void *
-+grub_efi_allocate_runtime_pages (grub_efi_physical_address_t address,
-+                               grub_efi_uintn_t pages)
-+
-+{
-+  return grub_efi_allocate_pages_real(address, pages,
-+                                    GRUB_EFI_RUNTIME_SERVICES_DATA);
-+}
-+/* Free pages starting from ADDRESS.  */
-+void
-+grub_efi_free_pages (grub_efi_physical_address_t address,
-+                   grub_efi_uintn_t pages)
-+{
-+  grub_efi_boot_services_t *b;
-+
-+  if (allocated_pages
-+      && ((grub_efi_physical_address_t) ((grub_addr_t) allocated_pages)
-+        != address))
-+    {
-+      unsigned i;
-+
-+      for (i = 0; i < MAX_ALLOCATED_PAGES; i++)
-+      if (allocated_pages[i].addr == address)
-+        {
-+          allocated_pages[i].addr = 0;
-+          break;
-+        }
-+    }
-+
-+  b = grub_efi_system_table->boot_services;
-+  Call_Service_2 (b->free_pages ,address, pages);
-+}
-+
-+/* Get the memory map as defined in the EFI spec. Return 1 if successful,
-+   return 0 if partial, or return -1 if an error occurs.
-+
-+   This function will allocate memory for (global) mmap_buf if there isn't
-+   already a buffer allocated, and will free & reallocate if it needs to
-+   be larger. */
-+
-+int
-+grub_efi_get_memory_map (grub_efi_uintn_t *map_key,
-+                       grub_efi_uintn_t *descriptor_size,
-+                       grub_efi_uint32_t *descriptor_version)
-+{
-+  grub_efi_status_t status;
-+  grub_efi_boot_services_t *b;
-+  grub_efi_uintn_t key;
-+  grub_efi_uint32_t version;
-+  grub_efi_uintn_t tmp_mmap_size;
-+
-+  /* Allow some parameters to be missing.  */
-+  if (! map_key)
-+    map_key = &key;
-+  if (! descriptor_version)
-+    descriptor_version = &version;
-+
-+  while (1)
-+    {
-+      b = grub_efi_system_table->boot_services;
-+      tmp_mmap_size = PAGES_TO_BYTES(mmap_pages);
-+      status = Call_Service_5 (b->get_memory_map,
-+                            &tmp_mmap_size, mmap_buf, map_key,
-+                            descriptor_size, descriptor_version);
-+      if (status == GRUB_EFI_SUCCESS)
-+        {
-+          mmap_size = tmp_mmap_size;
-+          return 1;
-+        }
-+      else if (status != GRUB_EFI_BUFFER_TOO_SMALL)
-+        return -1;
-+
-+      /* we need a larger buffer */
-+      if (mmap_buf)
-+        grub_efi_free_pages ((grub_addr_t) mmap_buf, mmap_pages);
-+
-+      /* get 1 more page than we need, just in case */
-+      mmap_pages = BYTES_TO_PAGES(tmp_mmap_size + 4095) + 1;
-+      mmap_buf = grub_efi_allocate_pages (0, mmap_pages);
-+      if (! mmap_buf)
-+        {
-+          mmap_pages = 0;
-+          grub_printf ("cannot allocate memory for memory map");
-+          return -1;
-+        }
-+    }
-+}
-+
-+#define MMAR_DESC_LENGTH      20
-+
-+/*
-+ * Add a memory region to the kernel e820 map.
-+ *
-+ * Convert EFI memory map to E820 map for the operating system
-+ * This code is based on a Linux kernel patch submitted by Edgar Hucek 
-+ */
-+static void
-+add_memory_region (struct e820_entry *e820_map,
-+                 int *e820_nr_map,
-+                 unsigned long long start,
-+                 unsigned long long size,
-+                 unsigned int type)
-+{
-+  int x = *e820_nr_map;
-+  static unsigned long long estart = 0ULL;
-+  static unsigned long esize = 0L;
-+  static unsigned int etype = -1;
-+  static int merge = 0;
-+
-+  /* merge adjacent regions of same type */
-+  if ((x > 0) && e820_map[x-1].addr + e820_map[x-1].size == start
-+      && e820_map[x-1].type == type)
-+    {
-+      e820_map[x-1].size += size;
-+      estart = e820_map[x-1].addr;
-+      esize  = e820_map[x-1].size;
-+      etype  = e820_map[x-1].type;
-+      merge++;
-+      return;
-+    }
-+
-+    /* fill up to E820_MAX */
-+    if ( x < E820_MAX )
-+    {
-+      e820_map[x].addr = start;
-+      e820_map[x].size = size;
-+      e820_map[x].type = type;
-+      (*e820_nr_map)++;
-+      merge=0;
-+      return;
-+    }
-+
-+    /* different type means another region didn't fit */
-+    /* or same type, but there's a hole */
-+    if (etype != type || (estart + esize) != start)
-+    {
-+      merge = 0;
-+      estart = start;
-+      esize = size;
-+      etype = type;
-+      return;
-+    }
-+
-+    /* same type and no hole, merge it */
-+    estart += esize;
-+    esize += size;
-+    merge++;
-+}
-+
-+/*
-+ * Make a e820 memory map
-+ */
-+void
-+e820_map_from_efi_map (struct e820_entry *e820_map,
-+                     int *e820_nr_map,
-+                     grub_efi_memory_descriptor_t *memory_map,
-+                     grub_efi_uintn_t desc_size,
-+                     grub_efi_uintn_t memory_map_size)
-+{
-+  grub_efi_memory_descriptor_t *desc;
-+  unsigned long long start = 0;
-+  unsigned long long end = 0;
-+  unsigned long long size = 0;
-+  grub_efi_memory_descriptor_t *memory_map_end;
-+
-+  memory_map_end = NEXT_MEMORY_DESCRIPTOR (memory_map, memory_map_size);
-+  *e820_nr_map = 0;
-+  for (desc = memory_map;
-+       desc < memory_map_end;
-+       desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size))
-+    {
-+      switch (desc->type)
-+      {
-+      case GRUB_EFI_ACPI_RECLAIM_MEMORY:
-+        add_memory_region (e820_map, e820_nr_map,
-+                           desc->physical_start, desc->num_pages << 12,
-+                           E820_ACPI);
-+        break;
-+      case GRUB_EFI_RUNTIME_SERVICES_CODE:
-+      case GRUB_EFI_RUNTIME_SERVICES_DATA:
-+      case GRUB_EFI_RESERVED_MEMORY_TYPE:
-+      case GRUB_EFI_MEMORY_MAPPED_IO:
-+      case GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE:
-+      case GRUB_EFI_UNUSABLE_MEMORY:
-+      case GRUB_EFI_PAL_CODE:
-+        add_memory_region (e820_map, e820_nr_map,
-+                           desc->physical_start, desc->num_pages << 12,
-+                           E820_RESERVED);
-+        break;
-+      case GRUB_EFI_LOADER_CODE:
-+      case GRUB_EFI_LOADER_DATA:
-+      case GRUB_EFI_BOOT_SERVICES_CODE:
-+      case GRUB_EFI_BOOT_SERVICES_DATA:
-+      case GRUB_EFI_CONVENTIONAL_MEMORY:
-+        start = desc->physical_start;
-+        size = desc->num_pages << 12;
-+        end = start + size;
-+        if (start < 0x100000ULL && end > 0xA0000ULL)
-+          {
-+            if (start < 0xA0000ULL)
-+              add_memory_region (e820_map, e820_nr_map,
-+                                 start, 0xA0000ULL-start,
-+                                 E820_RAM);
-+            if (end <= 0x100000ULL)
-+              continue;
-+            start = 0x100000ULL;
-+            size = end - start;
-+          }
-+        add_memory_region (e820_map, e820_nr_map,
-+                           start, size, E820_RAM);
-+        break;
-+      case GRUB_EFI_ACPI_MEMORY_NVS:
-+        add_memory_region (e820_map, e820_nr_map,
-+                           desc->physical_start, desc->num_pages << 12,
-+                           E820_NVS);
-+        break;
-+      }
-+    }
-+}
-+
-+static void
-+update_e820_map (struct e820_entry *e820_map,
-+               int *e820_nr_map)
-+{
-+  grub_efi_uintn_t desc_size;
-+
-+  if (grub_efi_get_memory_map (0, &desc_size, 0) < 0)
-+    {
-+      grub_printf ("cannot get memory map");
-+      return;
-+    }
-+
-+  e820_map_from_efi_map (e820_map, e820_nr_map,
-+                       mmap_buf, desc_size, mmap_size);
-+}
-+
-+/* Simulated memory sizes. */
-+#define EXTENDED_MEMSIZE (3 * 1024 * 1024)    /* 3MB */
-+#define CONVENTIONAL_MEMSIZE (640 * 1024)     /* 640kB */
-+
-+int
-+get_code_end (void)
-+{
-+  /* Just return a little area for simulation. */
-+  return BOOTSEC_LOCATION + (60 * 1024);
-+}
-+
-+/* memory probe routines */
-+int
-+get_memsize (int type)
-+{
-+  if (! type)
-+    return CONVENTIONAL_MEMSIZE >> 10;
-+  else
-+    return EXTENDED_MEMSIZE >> 10;
-+}
-+
-+/* get_eisamemsize() :  return packed EISA memory map, lower 16 bits is
-+ *            memory between 1M and 16M in 1K parts, upper 16 bits is
-+ *            memory above 16M in 64K parts.  If error, return -1.
-+ */
-+int
-+get_eisamemsize (void)
-+{
-+  return (EXTENDED_MEMSIZE >> 10);
-+}
-+
-+static int grub_e820_nr_map;
-+static struct e820_entry grub_e820_map[E820_MAX];
-+
-+/* Fetch the next entry in the memory map and return the continuation
-+   value.  DESC is a pointer to the descriptor buffer, and CONT is the
-+   previous continuation value (0 to get the first entry in the
-+   map).  */
-+int
-+get_mmap_entry (struct mmar_desc *desc, int cont)
-+{
-+  if (cont < 0 || cont >= grub_e820_nr_map)
-+    {
-+      /* Should not happen.  */
-+      desc->desc_len = 0;
-+    }
-+  else
-+    {
-+      struct e820_entry *entry;
-+      /* Copy the entry.  */
-+      desc->desc_len = MMAR_DESC_LENGTH;
-+      entry = &grub_e820_map[cont++];
-+      desc->addr = entry->addr;
-+      desc->length = entry->size;
-+      desc->type = entry->type;
-+
-+      /* If the next entry exists, return the index.  */
-+      if (cont < grub_e820_nr_map)
-+      return cont;
-+    }
-+
-+  return 0;
-+}
-+
-+void
-+grub_efi_mm_init (void)
-+{
-+  /* First of all, allocate pages to maintain allocations.  */
-+  allocated_pages
-+    = grub_efi_allocate_pages (0, BYTES_TO_PAGES (ALLOCATED_PAGES_SIZE));
-+  if (! allocated_pages)
-+    {
-+      grub_printf ("cannot allocate memory");
-+      return;
-+    }
-+
-+  grub_memset (allocated_pages, 0, ALLOCATED_PAGES_SIZE);
-+
-+  update_e820_map (grub_e820_map, &grub_e820_nr_map);
-+}
-+
-+void
-+grub_efi_mm_fini (void)
-+{
-+  if (allocated_pages)
-+    {
-+      unsigned i;
-+
-+      for (i = 0; i < MAX_ALLOCATED_PAGES; i++)
-+      {
-+        struct allocated_page *p;
-+
-+        p = allocated_pages + i;
-+        if (p->addr != 0)
-+          grub_efi_free_pages ((grub_addr_t) p->addr, p->num_pages);
-+      }
-+
-+      grub_efi_free_pages ((grub_addr_t) allocated_pages,
-+                         BYTES_TO_PAGES (ALLOCATED_PAGES_SIZE));
-+    }
-+}
-diff --git a/efi/efinic.c b/efi/efinic.c
-new file mode 100644
-index 0000000..e69de29
-diff --git a/efi/efiserial.c b/efi/efiserial.c
-new file mode 100644
-index 0000000..32898a9
---- /dev/null
-+++ b/efi/efiserial.c
-@@ -0,0 +1,265 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2007 Intel Corp.
-+ *
-+ *  GRUB is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with GRUB; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifdef SUPPORT_SERIAL
-+
-+#include <grub/types.h>
-+#include <grub/misc.h>
-+#include <grub/efi/api.h>
-+#include <grub/efi/efi.h>
-+#include <grub/efi/misc.h>
-+
-+#include <shared.h>
-+#include <serial.h>
-+#include <term.h>
-+
-+struct grub_efiserial_data
-+{
-+  grub_efi_handle_t handle;
-+  grub_efi_serial_io_t *serial_io;
-+  struct grub_efiserial_data *next;
-+};
-+
-+/* GUIDs.  */
-+static grub_efi_guid_t serial_io_guid = GRUB_EFI_SERIAL_IO_GUID;
-+
-+static grub_efi_serial_io_t *serial_device = NULL;
-+
-+static struct grub_efiserial_data *
-+make_devices (void)
-+{
-+  grub_efi_uintn_t num_handles;
-+  grub_efi_handle_t *handles;
-+  grub_efi_handle_t *handle;
-+  struct grub_efiserial_data *devices = 0;
-+
-+  /* Find handles which support the serial io interface.  */
-+  handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, &serial_io_guid,
-+                                  0, &num_handles);
-+  if (! handles)
-+    return 0;
-+
-+  /* Make a linked list of devices.  */
-+  for (handle = handles; num_handles--; handle++)
-+    {
-+      struct grub_efiserial_data *s;
-+      grub_efi_serial_io_t *sio;
-+
-+      sio = grub_efi_open_protocol (*handle, &serial_io_guid,
-+                                  GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-+      if (! sio)
-+      /* This should not happen... Why?  */
-+      continue;
-+
-+      s = grub_malloc (sizeof (*s));
-+      if (! s)
-+      {
-+        /* Uggh.  */
-+        grub_free (handles);
-+        return 0;
-+      }
-+
-+      s->handle = *handle;
-+      s->serial_io = sio;
-+      s->next = devices;
-+      devices = s;
-+    }
-+
-+  grub_free (handles);
-+
-+  return devices;
-+}
-+
-+static void
-+free_devices (struct grub_efiserial_data *devices)
-+{
-+  struct grub_efiserial_data *p, *q;
-+
-+  for (p = devices; p; p = q)
-+    {
-+      q = p->next;
-+      grub_free (p);
-+    }
-+}
-+
-+static struct grub_efiserial_data *
-+get_device (struct grub_efiserial_data *devices, int num)
-+{
-+  struct grub_efiserial_data *s;
-+
-+  for (s = devices; s && num; s = s->next, num--)
-+    ;
-+
-+  if (num == 0)
-+    return s;
-+
-+  return 0;
-+}
-+
-+/* Fetch a key from a serial device.  */
-+int
-+serial_hw_fetch (void)
-+{
-+  grub_efi_status_t status;
-+  char buf[1];
-+  grub_efi_uintn_t buf_siz = sizeof (buf);
-+  grub_efi_uint32_t control;
-+
-+  if (! serial_device)
-+    return -1;
-+
-+  status = Call_Service_2 (serial_device->get_control_bits, serial_device, &control);
-+  if (status != GRUB_EFI_SUCCESS)
-+    return -1;
-+  if (control & GRUB_EFI_SERIAL_INPUT_BUFFER_EMPTY)
-+    return -1;
-+  status = Call_Service_3 (serial_device->read, serial_device, &buf_siz, buf);
-+  if (status != GRUB_EFI_SUCCESS)
-+    return -1;
-+
-+  return buf[0];
-+}
-+
-+/* Put a character to a serial device.  */
-+void
-+serial_hw_put (int c)
-+{
-+  grub_efi_status_t status;
-+  char ch = c;
-+  grub_efi_uintn_t buf_size = sizeof (ch);
-+
-+  if (! serial_device)
-+    return;
-+
-+  status = Call_Service_3 (serial_device->write, serial_device, &buf_size, &ch);
-+}
-+
-+void
-+serial_hw_delay (void)
-+{
-+}
-+
-+/* Get the port number of the unit UNIT, the port number is same as
-+   serial port unit number in EFI. */
-+unsigned short
-+serial_hw_get_port (int unit)
-+{
-+  return unit;
-+}
-+
-+static inline grub_efi_uint8_t
-+efi_data_bits_from_8250_LCR (int word_len)
-+{
-+  switch (word_len & 0x3)
-+    {
-+    case 0:
-+      return 5;
-+    case 1:
-+      return 6;
-+    case 2:
-+      return 7;
-+    case 3:
-+      return 8;
-+    default:
-+      return 0;
-+    }
-+}
-+
-+static inline grub_efi_stop_bits_t
-+efi_stop_bits_from_8250_LCR (int stop_bit_len)
-+{
-+  switch (stop_bit_len & 0x4)
-+    {
-+    case 0x0:
-+      return GRUB_EFI_ONE_STOP_BIT;
-+    case 0x4:
-+      return GRUB_EFI_TWO_STOP_BITS;
-+    default:
-+      return GRUB_EFI_DEFAULT_STOP_BITS;
-+    }
-+}
-+
-+static inline grub_efi_parity_t
-+efi_parity_from_8250_LCR (int parity_8250)
-+{
-+  if (! (parity_8250 & 0x8))
-+    return GRUB_EFI_NO_PARITY;
-+
-+  switch (parity_8250 & 0x30)
-+    {
-+    case 0x00:
-+      return GRUB_EFI_ODD_PARITY;
-+    case 0x10:
-+      return GRUB_EFI_EVEN_PARITY;
-+    case 0x20:
-+      return GRUB_EFI_MARK_PARITY;
-+    case 0x30:
-+      return GRUB_EFI_SPACE_PARITY;
-+    default:
-+      return GRUB_EFI_DEFAULT_PARITY;
-+    }
-+}
-+
-+/* Initialize a serial device. In EFI, PORT is used to assign
-+   serial port unit number.  */
-+int
-+serial_hw_init (unsigned short port, unsigned int speed,
-+              int word_len, int parity, int stop_bit_len)
-+{
-+  grub_efi_serial_io_t *sio;
-+  struct grub_efiserial_data *devices, *s;
-+  grub_efi_parity_t efi_parity;
-+  grub_efi_stop_bits_t efi_stop_bits;
-+  grub_efi_uint8_t efi_data_bits;
-+  grub_efi_status_t status;
-+  int i;
-+
-+  devices = make_devices ();
-+  s = get_device (devices, port);
-+  if (!s)
-+    return 0;
-+  sio = s->serial_io;
-+  free_devices (devices);
-+
-+  efi_data_bits = efi_data_bits_from_8250_LCR (word_len);
-+  efi_parity = efi_parity_from_8250_LCR (parity);
-+  efi_stop_bits = efi_stop_bits_from_8250_LCR (stop_bit_len);
-+
-+  status = Call_Service_1 (sio->reset, sio);
-+  if (status != GRUB_EFI_SUCCESS)
-+    return 0;
-+
-+  status = Call_Service_7 (sio->set_attributes, sio, speed, 0, 0,
-+                         efi_parity, efi_data_bits, efi_stop_bits);
-+  if (status != GRUB_EFI_SUCCESS)
-+    return 0;
-+
-+  serial_device = sio;
-+  /* Get rid of TERM_NEED_INIT from the serial terminal.  */
-+  for (i = 0; term_table[i].name; i++)
-+    if (grub_strcmp (term_table[i].name, "serial") == 0)
-+      {
-+      term_table[i].flags &= ~TERM_NEED_INIT;
-+      break;
-+      }
-+
-+  return 1;
-+}
-+
-+#endif /* SUPPORT_SERIAL */
-diff --git a/efi/efitftp.c b/efi/efitftp.c
-new file mode 100644
-index 0000000..ba6918f
---- /dev/null
-+++ b/efi/efitftp.c
-@@ -0,0 +1,228 @@
-+#include <grub/efi/efi.h>
-+#include <grub/efi/api.h>
-+#include <grub/efi/misc.h>
-+#include <grub/misc.h>
-+
-+#include <shared.h>
-+#include <filesys.h>
-+#include "pxe.h"
-+
-+struct tftp_info tftp_info = {
-+      .LoadedImage = NULL,
-+      .Pxe = NULL,
-+      .ServerIp = NULL,
-+      .BasePath = NULL
-+};
-+
-+/*
-+ * CLIENT MAC ADDR: 00 15 17 4C E6 74
-+ * CLIENT IP: 10.16.52.158  MASK: 255.255.255.0  DHCP IP: 10.16.52.16
-+ * GATEWAY IP: 10.16.52.254
-+ *
-+ * TSize.Running LoadFile()
-+ *
-+ * TFTP.status: 5
-+ * got to grub_efi_pxe_get_config_path
-+ * SiAddr: 10.16.52.16
-+ * BootpHwAddr: 00:15:17:4c:e6:74:00:00:00:00:00:00:00:00:00:00
-+ * BootpSrvName:
-+ * BootpBootFile: X86PC/UNDI/pxelinux/bootx64.efi
-+ */
-+
-+static grub_efi_status_t tftp_get_file_size_defective_buffer_fallback(
-+      char *Filename,
-+      grub_efi_uintn_t *Size)
-+{
-+      EFI_PXE_BASE_CODE_TFTP_OPCODE OpCode = EFI_PXE_BASE_CODE_TFTP_READ_FILE;
-+      char *Buffer = NULL;
-+      grub_efi_boolean_t Overwrite = 0;
-+      grub_efi_boolean_t DontUseBuffer = 0;
-+      grub_efi_uint64_t BufferSize = 4096;
-+      grub_efi_uintn_t BlockSize = 512;
-+      grub_efi_status_t rc = GRUB_EFI_BUFFER_TOO_SMALL;
-+      char *FullPath = NULL;
-+
-+      while (rc == GRUB_EFI_BUFFER_TOO_SMALL) {
-+              char *NewBuffer;
-+
-+              if (Buffer) {
-+                      grub_free(Buffer);
-+                      Buffer = NULL;
-+              }
-+              BufferSize *= 2;
-+              NewBuffer = grub_malloc(BufferSize);
-+              if (!NewBuffer)
-+                      return GRUB_EFI_OUT_OF_RESOURCES;
-+              Buffer = NewBuffer;
-+
-+              if (tftp_info.BasePath) {
-+                      int PathSize = 0;
-+                      PathSize = strlen(tftp_info.BasePath) + 2 +
-+                                 strlen(Filename);
-+                      FullPath = grub_malloc(PathSize);
-+                      grub_sprintf(FullPath, "%s/%s", tftp_info.BasePath,
-+                                   Filename);
-+              } else {
-+                      FullPath = grub_malloc(strlen(Filename));
-+                      strcpy(FullPath, Filename);
-+              }
-+
-+              rc = Call_Service_10(tftp_info.Pxe->Mtftp, tftp_info.Pxe,
-+                      OpCode, Buffer, Overwrite, &BufferSize, &BlockSize,
-+                      tftp_info.ServerIp, FullPath, NULL, DontUseBuffer);
-+              if (rc == GRUB_EFI_SUCCESS || rc == GRUB_EFI_BUFFER_TOO_SMALL)
-+                      *Size = BufferSize;
-+      }
-+      grub_free(FullPath);
-+      grub_free(Buffer);
-+      return rc;
-+}
-+
-+grub_efi_status_t tftp_get_file_size(
-+      char *Filename,
-+      grub_efi_uintn_t *Size)
-+{
-+      EFI_PXE_BASE_CODE_TFTP_OPCODE OpCode = EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE;
-+      char Buffer[8192];
-+      grub_efi_boolean_t Overwrite = 0;
-+      grub_efi_boolean_t DontUseBuffer = 0;
-+      grub_efi_uint64_t BufferSize = 8192;
-+      grub_efi_uintn_t BlockSize = 512;
-+      grub_efi_status_t rc;
-+      char *FullPath = NULL;
-+
-+      if (tftp_info.BasePath) {
-+              int PathSize = 0;
-+              PathSize = strlen(tftp_info.BasePath) + 2 + strlen(Filename);
-+              FullPath = grub_malloc(PathSize);
-+              grub_sprintf(FullPath, "%s/%s", tftp_info.BasePath, Filename);
-+      } else {
-+              FullPath = grub_malloc(strlen(Filename));
-+              strcpy(FullPath, Filename);
-+      }
-+
-+      rc = Call_Service_10(tftp_info.Pxe->Mtftp, tftp_info.Pxe, OpCode,
-+              Buffer, Overwrite, &BufferSize, &BlockSize, tftp_info.ServerIp,
-+              FullPath, NULL, DontUseBuffer);
-+      if (rc == GRUB_EFI_BUFFER_TOO_SMALL)
-+              rc = tftp_get_file_size_defective_buffer_fallback(Filename, Size);
-+      if (rc == GRUB_EFI_SUCCESS)
-+              *Size = BufferSize;
-+      grub_free(FullPath);
-+      return rc;
-+}
-+
-+static grub_efi_status_t tftp_read_file(
-+      char *Filename,
-+      char *Buffer,
-+      grub_efi_uint64_t BufferSize)
-+{
-+      EFI_PXE_BASE_CODE_TFTP_OPCODE OpCode = EFI_PXE_BASE_CODE_TFTP_READ_FILE;
-+      grub_efi_boolean_t Overwrite = 0;
-+      grub_efi_boolean_t DontUseBuffer = 0;
-+      grub_efi_uintn_t BlockSize = 512;
-+      grub_efi_status_t rc;
-+      char *FullPath = NULL;
-+
-+      if (tftp_info.BasePath) {
-+              int PathSize = 0;
-+              PathSize = strlen(tftp_info.BasePath) + 2 + strlen(Filename);
-+              FullPath = grub_malloc(PathSize);
-+              grub_sprintf(FullPath, "%s/%s", tftp_info.BasePath, Filename);
-+      } else {
-+              FullPath = grub_malloc(strlen(Filename));
-+              strcpy(FullPath, Filename);
-+      }
-+
-+      rc = Call_Service_10(tftp_info.Pxe->Mtftp, tftp_info.Pxe, OpCode,
-+              Buffer, Overwrite, &BufferSize, &BlockSize, tftp_info.ServerIp,
-+              FullPath, NULL, DontUseBuffer);
-+      grub_free(FullPath);
-+      return rc;
-+}
-+
-+int
-+efi_tftp_mount (void)
-+{
-+      if (current_drive != NETWORK_DRIVE) {
-+              return 0;
-+      }
-+      return 1;
-+}
-+
-+int
-+efi_tftp_read (char *addr, int size)
-+{
-+      int rc;
-+
-+      if (tftp_info.LastPath == NULL) {
-+              grub_printf(" = 0 (no path known)\n");
-+              return 0;
-+      }
-+      if (tftp_info.Buffer == NULL) {
-+              grub_printf(" = 0 (no file open)\n");
-+              return 0;
-+      }
-+      if (filemax == -1) {
-+              grub_printf(" = 0 (file not found)\n");
-+              return 0;
-+      }
-+      if (filepos == 0) {
-+              rc = tftp_read_file(tftp_info.LastPath, tftp_info.Buffer,
-+                                  filemax);
-+      }
-+
-+      grub_memmove(addr, tftp_info.Buffer+filepos, size);
-+      filepos += size;
-+
-+      return size;
-+}
-+
-+int
-+efi_tftp_dir (char *dirname)
-+{
-+      int rc;
-+      int ch;
-+      grub_efi_uintn_t size;
-+      int len;
-+      char *name;
-+
-+      ch = nul_terminate(dirname);
-+      len = strlen(dirname);
-+
-+      name = grub_malloc(len + 1);
-+      grub_memmove(name, dirname, len);
-+      name[len] = '\0';
-+      dirname[len] = ch;
-+
-+#if 0
-+      if (print_possibilities)
-+              return 1;
-+#endif
-+
-+      filemax = -1;
-+
-+      rc = tftp_get_file_size(name, &size);
-+      if (rc == GRUB_EFI_SUCCESS) {
-+              tftp_info.LastPath = grub_malloc(strlen(name) + 1);
-+              sprintf(tftp_info.LastPath, "%s", name);
-+              filemax = size;
-+              filepos = 0;
-+
-+              tftp_info.Buffer = grub_malloc(filemax);
-+
-+              return 1;
-+      }
-+      return 0;
-+}
-+
-+void
-+efi_tftp_close (void)
-+{
-+      filepos = 0;
-+      filemax = -1;
-+      grub_free(tftp_info.LastPath);
-+      tftp_info.LastPath = NULL;
-+      grub_free(tftp_info.Buffer);
-+      tftp_info.Buffer = NULL;
-+}
-diff --git a/efi/efiuga.c b/efi/efiuga.c
-new file mode 100644
-index 0000000..b27500b
---- /dev/null
-+++ b/efi/efiuga.c
-@@ -0,0 +1,982 @@
-+/* efiuga.c - "univeral graphics adapter" support for GRUB/EFI */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright 2007 Red Hat, Inc.
-+ *  Copyright (C) 2007 Intel Corp.
-+ *  Copyright (C) 2001,2002  Red Hat, Inc.
-+ *  Portions copyright (C) 2000  Conectiva, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifdef SUPPORT_GRAPHICS
-+
-+#include <grub/misc.h>
-+#include <grub/types.h>
-+#include <grub/cpu/linux.h>
-+#include <grub/efi/api.h>
-+#include <grub/efi/efi.h>
-+#include <grub/misc.h>
-+
-+#include <term.h>
-+#include <shared.h>
-+#include <graphics.h>
-+
-+#include "graphics.h"
-+#include "xpm.h"
-+
-+static grub_efi_guid_t draw_guid = GRUB_EFI_UGA_DRAW_GUID;
-+static grub_efi_guid_t pci_io_guid = GRUB_EFI_PCI_IO_GUID;
-+
-+#if 0
-+#define UGA
-+#include "ugadebug.h"
-+#endif
-+
-+#ifndef MIN
-+#define MIN(x,y) ( ((x) < (y)) ? (x) : (y))
-+#endif
-+#ifndef MAX
-+#define MAX(x,y) ( ((x) < (y)) ? (y) : (x))
-+#endif
-+
-+#define pixel_equal(x,y) ((x).red == (y).red && \
-+                          (x).green == (y).green && \
-+                          (x).blue == (y).blue)
-+
-+struct video_mode {
-+    grub_efi_uint32_t horizontal_resolution;
-+    grub_efi_uint32_t vertical_resolution;
-+    grub_efi_uint32_t color_depth;
-+    grub_efi_uint32_t refresh_rate;
-+};
-+
-+static void
-+xpnd_6_to_8(grub_efi_uga_pixel_t *pixel)
-+{
-+    if (!((pixel->red | pixel->green | pixel->blue) & 0xc0)) {
-+        pixel->red <<= 2;
-+        pixel->red |= ((pixel->red & 0xc0) >> 6);
-+        pixel->red &= 0xff;
-+        pixel->green <<= 2;
-+        pixel->green |= ((pixel->green & 0xc0) >> 6);
-+        pixel->green &= 0xff;
-+        pixel->blue <<= 2;
-+        pixel->blue |= ((pixel->blue & 0xc0) >> 6);
-+        pixel->blue &= 0xff;
-+    }
-+}
-+
-+
-+
-+#define MAX_PALETTE 16
-+struct uga {
-+    grub_efi_uga_draw_t *draw_intf;
-+    struct video_mode graphics_mode;
-+    struct video_mode text_mode;
-+    enum { TEXT, GRAPHICS } current_mode;
-+
-+    position_t screen_size;
-+    position_t screen_pos;
-+
-+    struct bltbuf *background;
-+
-+    grub_efi_uga_pixel_t palette[MAX_PALETTE + 1];
-+};
-+
-+#define RGB(r,g,b) { .red = r, .green = g, .blue = b }
-+
-+static grub_efi_uga_pixel_t cga_colors[] = {
-+    RGB(0x00,0x00,0x00), //  0 Black
-+    RGB(0x7f,0x00,0x00), //  1 Dark Red
-+    RGB(0x00,0x7f,0x00), //  2 Dark Green
-+    RGB(0x7f,0x7f,0x00), //  3 Dark Yellow
-+    RGB(0x00,0x00,0x7f), //  4 Dark Blue
-+    RGB(0x7f,0x00,0x7f), //  5 Dark Magenta
-+    RGB(0x00,0x7f,0x7f), //  6 Dark Cyan
-+    RGB(0xc0,0xc0,0xc0), //  7 Light Grey
-+    RGB(0x7f,0x7f,0x7f), //  8 Dark Grey
-+    RGB(0xff,0x00,0x00), //  9 Red
-+    RGB(0x00,0xff,0x00), // 10 Green
-+    RGB(0xff,0xff,0x00), // 11 Yellow
-+    RGB(0x00,0x00,0xff), // 12 Blue
-+    RGB(0xff,0x00,0xff), // 13 Magenta
-+    RGB(0x00,0xff,0xff), // 14 Cyan
-+    RGB(0xff,0xff,0xff), // 15 White
-+    RGB(0xff,0xff,0xff), // 16 Also white ;)
-+};
-+
-+static const int n_cga_colors = sizeof (cga_colors) / sizeof (cga_colors[0]);
-+
-+static void
-+set_kernel_params(struct graphics_backend *backend,
-+            struct linux_kernel_params *params)
-+{
-+    struct uga *uga;
-+    
-+    if (!backend || !backend->priv)
-+        return;
-+
-+    uga = backend->priv;
-+
-+    params->lfb_width = uga->graphics_mode.horizontal_resolution;
-+    params->lfb_height = uga->graphics_mode.vertical_resolution;
-+    params->lfb_depth = 32;
-+    params->red_mask_size = 8;
-+    params->red_field_pos = 16;
-+    params->green_mask_size = 8;
-+    params->green_field_pos = 8;
-+    params->blue_mask_size = 8;
-+    params->blue_field_pos = 0;
-+    params->reserved_mask_size = 8;
-+    params->reserved_field_pos = 24;
-+    params->have_vga = VIDEO_TYPE_EFI;
-+}
-+
-+static void
-+pixel_to_rgb(grub_efi_uga_pixel_t *pixel, int *red, int *green, int *blue)
-+{
-+    *red = pixel->red;
-+    *green = pixel->green;
-+    *blue = pixel->blue;
-+}
-+
-+static void
-+rgb_to_pixel(int red, int green, int blue, grub_efi_uga_pixel_t *pixel)
-+{
-+    pixel->red = red;
-+    pixel->green = green;
-+    pixel->blue = blue;
-+}
-+
-+static void
-+position_to_phys(struct uga *uga, position_t *virt, position_t *phys)
-+{
-+    phys->x = virt->x + uga->screen_pos.x;
-+    phys->y = virt->y + uga->screen_pos.y;
-+}
-+
-+static int
-+abs_paddr(struct uga *uga, position_t *virt)
-+{
-+    position_t phys;
-+    position_to_phys(uga, virt, &phys);
-+    return phys.x + phys.y * uga->screen_size.x;
-+}
-+
-+struct bltbuf {
-+    grub_efi_uintn_t width;
-+    grub_efi_uintn_t height;
-+    grub_efi_uga_pixel_t pixbuf[];
-+};
-+
-+static struct bltbuf *alloc_bltbuf(grub_efi_uintn_t width,
-+                                         grub_efi_uintn_t height)
-+{
-+      struct bltbuf *buf = NULL;
-+      grub_efi_uintn_t pixbuf_size = width * height *
-+              sizeof (grub_efi_uga_pixel_t);
-+
-+      if (!(buf = grub_malloc(sizeof(buf->width) + sizeof(buf->height) +
-+                              pixbuf_size)))
-+              return NULL;
-+
-+      buf->width = width;
-+      buf->height = height;
-+      grub_memset(buf->pixbuf, '\0', pixbuf_size);
-+      return buf;
-+}
-+
-+static void
-+blt_to_screen(struct uga *uga, struct bltbuf *bltbuf)
-+{
-+    position_t addr = {0, 0};
-+
-+    position_to_phys(uga, &addr, &addr);
-+
-+    Call_Service_10(uga->draw_intf->blt, uga->draw_intf, bltbuf->pixbuf,
-+                  EfiUgaBltBufferToVideo,
-+                    0, 0,
-+                    addr.x, addr.y,
-+                    bltbuf->width, bltbuf->height,
-+                    0);
-+}
-+
-+static void
-+blt_pos_to_screen_pos(struct uga *uga, struct bltbuf *bltbuf,
-+                      position_t *bltpos, position_t *bltsz, position_t *pos)
-+{
-+    position_t phys;
-+
-+    position_to_phys(uga, pos, &phys);
-+
-+    Call_Service_10(uga->draw_intf->blt, uga->draw_intf, bltbuf->pixbuf,
-+                    EfiUgaBltBufferToVideo,
-+                    bltpos->x, bltpos->y,
-+                    phys.x, phys.y,
-+                    bltsz->x, bltsz->y,
-+                    0);
-+}
-+
-+static void
-+blt_to_screen_pos(struct uga *uga, struct bltbuf *bltbuf, position_t *pos)
-+{
-+    position_t bltpos = {0, 0};
-+    position_t bltsz = { bltbuf->width, bltbuf->height };
-+    blt_pos_to_screen_pos(uga, bltbuf, &bltpos, &bltsz, pos);
-+}
-+
-+static int
-+blt_from_screen_pos(struct uga *uga, struct bltbuf **retbuf,
-+    position_t *pos, position_t *size)
-+{
-+    struct bltbuf *bltbuf = NULL;
-+    position_t phys;
-+
-+    if (!retbuf)
-+        return 0;
-+
-+    if (*retbuf)
-+        grub_free(*retbuf);
-+
-+    bltbuf = alloc_bltbuf(size->x, size->y);
-+    if (!bltbuf)
-+        return 0;
-+
-+    position_to_phys(uga, pos, &phys);
-+
-+    Call_Service_10(uga->draw_intf->blt, uga->draw_intf, bltbuf->pixbuf,
-+            EfiUgaVideoToBltBuffer,
-+            phys.x, phys.y,
-+            0, 0,
-+            size->x, size->y, 0);
-+    *retbuf = bltbuf;
-+    return 1;
-+}
-+
-+static int
-+save_video_mode(struct uga *uga, struct video_mode *mode)
-+{
-+      grub_efi_status_t status;
-+
-+      status = Call_Service_5(uga->draw_intf->get_mode, uga->draw_intf,
-+              &mode->horizontal_resolution, &mode->vertical_resolution,
-+              &mode->color_depth, &mode->refresh_rate);
-+      return status == GRUB_EFI_SUCCESS;
-+}
-+
-+static grub_efi_status_t
-+set_video_mode(struct uga *uga, struct video_mode *mode)
-+{
-+    grub_efi_status_t status;
-+
-+    status = Call_Service_5(uga->draw_intf->set_mode, uga->draw_intf,
-+                            mode->horizontal_resolution,
-+                            mode->vertical_resolution,
-+                            mode->color_depth,
-+                            mode->refresh_rate);
-+    return status;
-+}
-+
-+static int
-+cmp_video_modes(struct video_mode *vm0, struct video_mode *vm1)
-+{
-+    if (vm0->horizontal_resolution == vm1->horizontal_resolution &&
-+            vm0->vertical_resolution == vm1->vertical_resolution)
-+        return 0;
-+    if (vm0->horizontal_resolution >= vm1->horizontal_resolution &&
-+            vm0->vertical_resolution >= vm1->vertical_resolution)
-+        return 1;
-+    return -1;
-+}
-+
-+static int
-+blt_from_screen(struct uga *uga, struct bltbuf **retbuf)
-+{
-+    struct bltbuf *bltbuf = NULL;
-+    position_t pos = {0 ,0};
-+    position_t size = {
-+            .x = uga->graphics_mode.horizontal_resolution,
-+            .y = uga->graphics_mode.vertical_resolution
-+        };
-+
-+    return blt_from_screen_pos(uga, retbuf, &pos, &size);
-+}
-+
-+static void 
-+bltbuf_set_pixel(struct bltbuf *bltbuf, position_t *pos,
-+                             grub_efi_uga_pixel_t *pixel)
-+{
-+    if (pos->x < 0 || pos->x >= bltbuf->width)
-+        return;
-+    if (pos->x < 0 || pos->y >= bltbuf->height)
-+        return;
-+    grub_memmove(&bltbuf->pixbuf[pos->x + pos->y * bltbuf->width], pixel,
-+            sizeof *pixel);
-+}
-+
-+static void
-+bltbuf_get_pixel(struct bltbuf *bltbuf, position_t *pos,
-+                 grub_efi_uga_pixel_t *pixel)
-+{
-+    if (bltbuf && pos->x < bltbuf->width && pos->y < bltbuf->height) {
-+      grub_memmove(pixel, &bltbuf->pixbuf[pos->x + pos->y * bltbuf->width],
-+            sizeof *pixel);
-+    } else {
-+      pixel->red = 0x00;
-+      pixel->green = 0x00;
-+      pixel->blue = 0x00;
-+    }
-+}
-+
-+static void
-+bltbuf_set_pixel_rgb(struct bltbuf *bltbuf, position_t *pos,
-+                     int red, int green, int blue)
-+{
-+    grub_efi_uga_pixel_t pixel;
-+    rgb_to_pixel(red, green, blue, &pixel);
-+    bltbuf_set_pixel(bltbuf, pos, &pixel);
-+}
-+
-+static void
-+bltbuf_set_pixel_idx(struct uga *uga, struct bltbuf *bltbuf,
-+                     position_t *pos, int idx)
-+{
-+    bltbuf_set_pixel(bltbuf, pos, &uga->palette[idx]);
-+}
-+
-+static void
-+bltbuf_get_pixel_idx(struct bltbuf *bltbuf, position_t *pos, int *idx)
-+{
-+    grub_efi_uga_pixel_t pixel;
-+    
-+    rgb_to_pixel(0, 0, 0, &pixel);
-+    bltbuf_get_pixel(bltbuf, pos, &pixel);
-+    for (*idx = 0; *idx < 16; (*idx)++) {
-+        if (pixel_equal(cga_colors[*idx], pixel))
-+            break;
-+    }
-+}
-+
-+static struct bltbuf *
-+xpm_to_bltbuf(struct xpm *xpm)
-+{
-+    struct bltbuf *bltbuf = NULL;
-+    position_t pos;
-+
-+    if (!(bltbuf = alloc_bltbuf(xpm->width, xpm->height)))
-+        return NULL;
-+
-+    for (pos.y = 0; pos.y < xpm->height; pos.y++) {
-+        for (pos.x = 0; pos.x < xpm->width; pos.x++) {
-+            xpm_pixel_t xpl;
-+            unsigned char idx;
-+        
-+            idx = xpm_get_pixel_idx(xpm, pos.x, pos.y);
-+            xpm_get_idx(xpm, idx, &xpl);
-+
-+            bltbuf_set_pixel_rgb(bltbuf, &pos, xpl.red, xpl.green, xpl.blue);
-+        }
-+    }
-+
-+    return bltbuf;
-+}
-+
-+static void
-+cursor(struct graphics_backend *backend, int set)
-+{
-+    struct uga *uga;
-+    int ch, invert;
-+    unsigned short *text;
-+    position_t fpos, screensz;
-+    int offset;
-+    
-+    uga = backend->priv;
-+    
-+    if (set && !graphics_get_scroll())
-+        return;
-+
-+    text = graphics_get_text_buf();
-+    graphics_get_font_position(&fpos);
-+    graphics_get_screen_rowscols(&screensz);
-+
-+    offset = fpos.y * screensz.x + fpos.x;
-+
-+    if (set)
-+        text[offset] |= 0x200;
-+
-+    graphics_clbl(fpos.x, fpos.y, 1, 1, 1);
-+
-+    if (set)
-+        text[offset] &= 0xfdff;
-+}
-+
-+static void blank(struct graphics_backend *backend);
-+
-+static void
-+reset_screen_geometry(struct graphics_backend *backend)
-+{
-+    struct uga *uga = backend->priv;
-+    struct xpm *xpm = graphics_get_splash_xpm();
-+    position_t screensz = { .x = 640, .y = 480 };
-+
-+    if (xpm) {
-+        screensz.x = xpm->width;
-+        screensz.y = xpm->height;
-+    }
-+
-+    uga->screen_pos.x =
-+        (uga->graphics_mode.horizontal_resolution - screensz.x) / 2;
-+    uga->screen_pos.y =
-+        (uga->graphics_mode.vertical_resolution - screensz.y) / 2;
-+
-+    blank(backend);
-+    graphics_get_screen_rowscols(&screensz);
-+    graphics_clbl(0, 0, screensz.x, screensz.y, 0);
-+    graphics_clbl(0, 0, screensz.x, screensz.y, 1);
-+}
-+
-+static void
-+get_screen_size(struct graphics_backend *backend, position_t *size)
-+{
-+    struct uga *uga = backend->priv;
-+    size->x = uga->graphics_mode.horizontal_resolution;
-+    size->y = uga->graphics_mode.vertical_resolution;
-+}
-+
-+static void
-+setxy(struct graphics_backend *backend, position_t *pos)
-+{
-+    position_t fpos;
-+
-+    fpos.x = pos->x;
-+    fpos.y = pos->y;
-+    graphics_set_font_position(&fpos);
-+}
-+
-+static void
-+uga_getxy(struct graphics_backend *backend, position_t *pos)
-+{
-+    graphics_get_font_position(pos);
-+}
-+
-+static void
-+draw_pixel(struct graphics_backend *backend, position_t *pos, pixel_t *pixel)
-+{
-+    struct bltbuf *bltbuf = NULL;
-+    grub_efi_uga_pixel_t *eup = (grub_efi_uga_pixel_t *)pixel;
-+
-+    bltbuf = alloc_bltbuf(1,1);
-+    if (!bltbuf)
-+        return;
-+
-+    grub_memmove(&bltbuf->pixbuf[0], eup, sizeof (*eup));
-+
-+    blt_to_screen_pos(backend->priv, bltbuf, pos);
-+
-+    grub_free(bltbuf);
-+}
-+
-+static pixel_t *
-+get_pixel_idx(struct graphics_backend *backend, int idx)
-+{
-+    static grub_efi_uga_pixel_t pixel;
-+    struct uga *uga = backend->priv;
-+    if (idx < 0 || idx > MAX_PALETTE)
-+        return NULL;
-+    pixel.red = uga->palette[idx].red;
-+    pixel.green = uga->palette[idx].green;
-+    pixel.blue = uga->palette[idx].blue;
-+    return (pixel_t *)&pixel;
-+}
-+
-+static pixel_t *
-+get_pixel_rgb(struct graphics_backend *backend, int red, int green, int blue)
-+{
-+    static grub_efi_uga_pixel_t pixel;
-+    rgb_to_pixel(red, green, blue, &pixel);
-+    return &pixel;
-+}
-+
-+static void
-+set_palette(struct graphics_backend *backend, int idx,
-+            int red, int green, int blue)
-+{
-+    grub_efi_uga_pixel_t pixel;
-+    struct uga *uga = backend->priv;
-+
-+    if (idx > MAX_PALETTE)
-+        return;
-+    rgb_to_pixel(red, green, blue, &pixel);
-+    grub_memmove(&uga->palette[idx], &pixel, sizeof pixel);
-+}
-+
-+static void
-+blank(struct graphics_backend *backend)
-+{
-+    struct uga *uga = backend->priv;
-+    struct bltbuf *bltbuf;
-+    position_t pos = {0, 0};
-+    grub_efi_uintn_t x, y, i, j;
-+    unsigned char r = 0 ,g = 0;
-+
-+    x = uga->graphics_mode.horizontal_resolution;
-+    y = uga->graphics_mode.vertical_resolution;
-+
-+    if (x == 0 || y == 0)
-+        return;
-+
-+    bltbuf = alloc_bltbuf(x, y);
-+    for (j = 0; j < y; j++) {
-+        if (debug_graphics && j % 16 == 0) {
-+            g = g == 0 ? 7 : 0;
-+            r = g == 0 ? 7 : 0;
-+        }
-+        for (i = 0; i < x; i++) {
-+            if (debug_graphics && i % 16 == 0) {
-+                g = g == 0 ? 7 : 0;
-+                r = g == 0 ? 7 : 0;
-+            }
-+            pos.x = i;
-+            pos.y = j;
-+            bltbuf_set_pixel_rgb(bltbuf, &pos, r * 16, g * 16, 0x0);
-+        }
-+    }
-+
-+    Call_Service_10(uga->draw_intf->blt, uga->draw_intf, bltbuf->pixbuf,
-+        EfiUgaBltBufferToVideo, 0, 0, 0, 0, x, y, 0);
-+
-+    grub_free(bltbuf);
-+}
-+
-+static void
-+bltbuf_cp_bl(struct bltbuf *d, position_t dpos,
-+             struct bltbuf *s, position_t spos)
-+{
-+    grub_efi_uga_pixel_t *dp, *sp;
-+
-+    const int xavail = MAX(0, s ? s->width - spos.x : 0);
-+    const int xtotal = MAX(0, d->width - dpos.x);
-+    const int xcp = MAX(0, MIN(xtotal, xavail));
-+    const int xcl = MAX(0, xtotal - xcp);
-+
-+    const int yavail = MAX(0, s ? s->height - spos.y : 0);
-+    const int ytotal = MAX(0, d->height - dpos.y);
-+    const int ycp = MAX(0, MIN(ytotal, yavail));
-+    const int ycl = MAX(0, ytotal - ycp);
-+
-+    int y, x;
-+
-+    for (y = 0; y < ytotal; y++) {
-+        dp = &d->pixbuf[(dpos.y + y) * d->width + dpos.x];
-+
-+        if (y < yavail) {
-+            sp = &s->pixbuf[(spos.y + y) * s->width + spos.x];
-+            memmove(dp, sp, xcp * sizeof (*dp));
-+            dp = &d->pixbuf[(dpos.y + y) * d->width + dpos.x + xcp];
-+            memset(dp, '\0', xcl * sizeof (*dp));
-+        } else {
-+            memset(dp, '\0', xtotal * sizeof (*dp));
-+        }
-+    }
-+}
-+
-+/* copy a region the size of bltbuf from the background into bltbuf,
-+ * starting at offset bgpos
-+ */
-+static void
-+bltbuf_draw_bg(struct graphics_backend *backend, struct bltbuf *bltbuf,
-+        position_t bgpos)
-+{
-+    struct uga *uga = backend->priv;
-+    position_t blpos = { 0, 0 };
-+
-+    bltbuf_cp_bl(bltbuf, blpos, uga->background, bgpos);
-+}
-+
-+static void
-+dbg_dump_palette(struct graphics_backend *backend)
-+{
-+    struct uga *uga;
-+    int i;
-+    if (!backend || !backend->priv)
-+        return;
-+    uga = backend->priv;
-+    if (!uga->palette)
-+        return;
-+}
-+
-+static int
-+is_shadow_pixel(position_t screensz, position_t textpos, position_t bitpos,
-+                position_t fontsz)
-+{
-+    unsigned short *text = graphics_get_text_buf();
-+    const unsigned char *glyph;
-+    position_t glyphpos = { textpos.x, textpos.y };
-+    position_t glyphbit = { bitpos.x, bitpos.y };
-+    unsigned short ch;
-+
-+    if (glyphbit.x == 0) {
-+        glyphbit.x = fontsz.x;
-+        glyphpos.x--;
-+    }
-+    if (glyphbit.y == 0) {
-+        glyphbit.y = fontsz.y;
-+        glyphpos.y--;
-+    }
-+    glyphbit.x--;
-+    glyphbit.y--;
-+
-+    if (glyphpos.x < 0 || glyphpos.y < 0)
-+        return 0;
-+        
-+    ch = text[glyphpos.y * screensz.x + glyphpos.x] & 0xff;
-+    glyph = font8x16 + (ch << 4);
-+    return glyph[glyphbit.y] & (1 << ((fontsz.x-1) - glyphbit.x));
-+}
-+
-+static void
-+bltbuf_draw_character(struct graphics_backend *backend,
-+        struct bltbuf *bltbuf,  /* the bltbuf to draw into */
-+        position_t target,      /* the position in the bltbuf to draw to */
-+        position_t fontsz,      /* the size of the font, in pixels */
-+        position_t charpos,     /* the position of the character in the text
-+                                   screen buffer */
-+        position_t screensz,    /* the size of the screen in characters */
-+        unsigned short ch       /* the character to draw, plus flags */
-+    )
-+{
-+    struct uga *uga = backend->priv;
-+    position_t blpos;
-+    position_t glyphpos;
-+
-+    blpos.y = target.y;
-+    for (glyphpos.y = 0; glyphpos.y < fontsz.y; glyphpos.y++, blpos.y++) {
-+        blpos.x = target.x;
-+        for (glyphpos.x = 0; glyphpos.x < fontsz.x; glyphpos.x++, blpos.x++) {
-+            int invert = (ch & 0x0100) != 0;
-+            int set = (ch & 0x0200) != 0;
-+            const unsigned char *glyph = font8x16 + ((ch & 0xff) << 4);
-+            int bit = glyph[glyphpos.y] & (1 << ((fontsz.x-1) - glyphpos.x));
-+            int idx = -1;
-+
-+            if (!set) {
-+                if (invert)
-+                    idx = bit ? 0 : 15;
-+                else if (bit)
-+                    idx = 15;
-+
-+                if (idx == -1) {
-+                    if (is_shadow_pixel(screensz, charpos, glyphpos, fontsz) ||
-+                            !uga->background)
-+                        idx = invert ? 15 : 0;
-+                }
-+            } else {
-+                idx = bit ? 0 : 15;
-+            }
-+
-+            if (idx != -1)
-+                bltbuf_set_pixel_idx(uga, bltbuf, &blpos, idx);
-+        }
-+    }
-+}
-+
-+static void
-+bltbuf_draw_text(struct graphics_backend *backend,
-+        struct bltbuf *bltbuf,  /* the buffer to draw into */
-+        position_t screensz,    /* the size of the screen in characters */
-+        position_t fontsz,      /* the size of the font in pixels */
-+        position_t txtpos,      /* the position of the text on the screen
-+                                   (in characters) */
-+        position_t txtsz        /* the size of the block to fill in
-+                                   (in characters) */
-+    )
-+{
-+    struct uga *uga = backend->priv;
-+    unsigned short *text = graphics_get_text_buf();
-+    position_t charpos;
-+
-+    for (charpos.y = txtpos.y; charpos.y < txtpos.y + txtsz.y; charpos.y++) {
-+        for (charpos.x = txtpos.x; charpos.x < txtpos.x + txtsz.x; charpos.x++){
-+            int offset = charpos.y * screensz.x + charpos.x;
-+            position_t blpos = { (charpos.x-txtpos.x)*fontsz.x,
-+                                 (charpos.y-txtpos.y)*fontsz.y };
-+
-+            bltbuf_draw_character(backend, bltbuf, blpos, fontsz, charpos,
-+                    screensz, text[offset]);
-+        }
-+    }
-+}
-+
-+static void
-+clbl(struct graphics_backend *backend, int col, int row, int width, int height,
-+        int draw_text)
-+{
-+    struct uga *uga = backend->priv;
-+    struct xpm *xpm;
-+
-+    struct bltbuf *bltbuf;
-+    position_t fontsz, blpos, blsz, screensz;
-+    unsigned short *text;
-+
-+//    blank(backend);
-+//
-+    xpm = graphics_get_splash_xpm();
-+    if (xpm && !uga->background)
-+        uga->background = xpm_to_bltbuf(xpm);
-+
-+    graphics_get_screen_rowscols(&screensz);
-+    width = MIN(width, screensz.x - col);
-+    height = MIN(height, screensz.y - row);
-+    graphics_get_font_size(&fontsz);
-+ 
-+    blsz.x = width * fontsz.x;
-+    blsz.y = height * fontsz.y;
-+   
-+    bltbuf = alloc_bltbuf(blsz.x, blsz.y);
-+    if (!bltbuf)
-+        return;
-+
-+    blsz.x = col * fontsz.x;
-+    blsz.y = row * fontsz.y;
-+
-+    text = graphics_get_text_buf();
-+    bltbuf_draw_bg(backend, bltbuf, blsz);
-+
-+    if (draw_text) {
-+        blsz.x = width;
-+        blsz.y = height;
-+        blpos.x = col;
-+        blpos.y = row;
-+
-+        bltbuf_draw_text(backend, bltbuf, screensz, fontsz, blpos, blsz);
-+    }
-+
-+    blpos.x = col * fontsz.x;
-+    blpos.y = row * fontsz.y;
-+
-+    blt_to_screen_pos(uga, bltbuf, &blpos);
-+}
-+
-+static void
-+setup_cga_palette(void)
-+{
-+/*
-+ * Nov 27 15:53:19 <pjones> ping?
-+ * Nov 27 15:54:13 <ajax> pong?
-+ * Nov 27 15:54:16 <pjones> say I've got a color channel in 6 bits, and it's
-+ *                          stored in an 8-bit value.  let's call it white.
-+ *                          now let's say I've got hardware with 8 bits per
-+ *                          channel that I'm blitting to.  What's the right
-+ *                          way to expand 0x3f to 0xff?
-+ * Nov 27 15:55:17 <pjones> (my naive idea, which I haven't tried yet, is
-+ *                          "x <<= 2; if (x) x |= 3;")
-+ * Nov 27 15:55:35 <ajax> no.
-+ * Nov 27 15:55:43 <pjones> yeah, figured I'd ask instead of doing that.
-+ * Nov 27 15:56:15 <ajax>  x <<= 2; x |= ((x & 0xc0) >> 6);
-+ */
-+    int i;
-+    for (i = 0; i < n_cga_colors; i++) {
-+        grub_efi_uga_pixel_t *pixel = &cga_colors[i];
-+
-+        if ((pixel->red | pixel->green | pixel->blue) & 0xc0)
-+            continue;
-+        pixel->red <<= 2;
-+        pixel->red |= ((pixel->red & 0xc0) >> 6);
-+        pixel->red &= 0xff;
-+        pixel->green <<= 2;
-+        pixel->green |= ((pixel->green & 0xc0) >> 6);
-+        pixel->green &= 0xff;
-+        pixel->blue <<= 2;
-+        pixel->blue |= ((pixel->blue & 0xc0) >> 6);
-+        pixel->blue &= 0xff;
-+    }
-+}
-+
-+static int
-+try_enable(struct graphics_backend *backend)
-+{
-+    struct uga *uga = backend->priv;
-+    struct video_mode modes[] = {
-+        { 1440, 900, 32, 60 },
-+        { 640, 480, 32, 60 },
-+        { 800, 600, 32, 60 },
-+        { 640, 480, 16, 60 },
-+        { 800, 600, 16, 60 },
-+        { 640, 480, 8, 60 },
-+        { 800, 600, 8, 60 }
-+    };
-+    struct video_mode mode;
-+    position_t font_size;
-+    int i;
-+
-+    if (uga->text_mode.horizontal_resolution == 0) {
-+        grub_efi_set_text_mode(1);
-+        save_video_mode(uga, &uga->text_mode);
-+    }
-+
-+    if (uga->graphics_mode.horizontal_resolution == 0) {
-+        grub_efi_set_text_mode(0);
-+        save_video_mode(uga, &uga->graphics_mode);
-+
-+        if (cmp_video_modes(&uga->graphics_mode, &modes[0]) >= 0) {
-+            uga->current_mode = GRAPHICS;
-+            graphics_alloc_text_buf();
-+            return 1;
-+        }
-+        for (i = 0; i < sizeof (modes) / sizeof (modes[0]); i++) {
-+            set_video_mode(uga, &modes[i]);
-+            save_video_mode(uga, &mode);
-+            if (!cmp_video_modes(&modes[i], &mode)) {
-+                grub_memmove(&uga->graphics_mode, &mode, sizeof (mode));
-+                uga->current_mode = GRAPHICS;
-+                graphics_alloc_text_buf();
-+                return 1;
-+            }
-+        }
-+        set_video_mode(uga, &uga->graphics_mode);
-+        save_video_mode(uga, &mode);
-+        if (!cmp_video_modes(&uga->graphics_mode, &mode)) {
-+            uga->current_mode = GRAPHICS;
-+            graphics_alloc_text_buf();
-+            return 1;
-+        }
-+        grub_efi_set_text_mode(1);
-+        return 0;
-+    }
-+    set_video_mode(uga, &uga->graphics_mode);
-+
-+    uga->current_mode = GRAPHICS;
-+    return 1;
-+}
-+
-+static int
-+enable(struct graphics_backend *backend)
-+{
-+    struct uga *uga = backend->priv;
-+    grub_efi_handle_t *handle, *handles;
-+    grub_efi_uintn_t num_handles;
-+    grub_efi_pci_io_t *pci_proto;
-+    int i;
-+
-+    if (uga) {
-+        if (uga->current_mode == GRAPHICS) {
-+            return 1;
-+        }
-+    } else {
-+        if (!(uga = grub_malloc(sizeof (*uga)))) {
-+            return 0;
-+        }
-+      grub_memset(uga, '\0', sizeof (*uga));
-+
-+        uga->current_mode = TEXT;
-+
-+        handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL,
-+                                          &draw_guid, NULL, &num_handles);
-+
-+        if (!num_handles || !handles)
-+        {
-+            grub_free(uga);
-+          return 0;
-+        }
-+
-+      for (handle = handles; num_handles--; handle++)
-+          {
-+            pci_proto = grub_efi_open_protocol (*handle, &pci_io_guid,
-+                                        GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-+
-+            if (!pci_proto)
-+              continue;
-+
-+            uga->draw_intf = grub_efi_open_protocol (*handle, &draw_guid,
-+                                        GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-+
-+            if (uga->draw_intf)
-+              {
-+                grub_efi_setup_gfx_pci(*handle);
-+                break;
-+              }
-+          }
-+
-+      grub_free(handles);
-+
-+      if (!uga->draw_intf)
-+          uga->draw_intf = grub_efi_locate_protocol(&draw_guid, NULL);
-+
-+        if (!uga->draw_intf) {
-+            grub_free(uga);
-+            return 0;
-+        }
-+        grub_memset(&uga->graphics_mode, '\0', sizeof (uga->graphics_mode));
-+        grub_memset(&uga->text_mode, '\0', sizeof (uga->text_mode));
-+        backend->priv = uga;
-+
-+        setup_cga_palette();
-+        for (i = 0; i < n_cga_colors; i++) {
-+            uga->palette[i].red = cga_colors[i].red;
-+            uga->palette[i].green = cga_colors[i].green;
-+            uga->palette[i].blue = cga_colors[i].blue;
-+        }
-+    }
-+
-+    if (try_enable(backend)) {
-+        reset_screen_geometry(backend);
-+        return 1;
-+    }
-+    
-+    backend->priv = NULL;
-+    grub_free(uga);
-+    return 0;
-+}
-+
-+static void disable(struct graphics_backend *backend)
-+{
-+    struct uga *uga;
-+    
-+    if (!backend)
-+        return;
-+    
-+    uga = backend->priv;
-+    if (!uga || uga->current_mode != GRAPHICS)
-+        return;
-+
-+#if 0
-+    blank(backend);
-+
-+    set_video_mode(uga, &uga->text_mode);
-+    grub_efi_set_text_mode(1);
-+#endif
-+    uga->current_mode = TEXT;
-+}
-+
-+struct graphics_backend uga_backend = {
-+    .name = "uga",
-+    .enable = enable,
-+    .disable = disable,
-+    .set_kernel_params = set_kernel_params,
-+    .clbl = clbl,
-+    .set_palette = set_palette,
-+    .get_pixel_idx = get_pixel_idx,
-+    .get_pixel_rgb = get_pixel_rgb,
-+    .draw_pixel = draw_pixel,
-+    .reset_screen_geometry = reset_screen_geometry,
-+    .get_screen_size = get_screen_size,
-+    .getxy = uga_getxy,
-+    .setxy = setxy,
-+    .gotoxy = NULL,
-+    .cursor = cursor,
-+};
-+
-+#endif /* SUPPORT_GRAPHICS */
-diff --git a/efi/font_8x16.c b/efi/font_8x16.c
-new file mode 100644
-index 0000000..94829ec
---- /dev/null
-+++ b/efi/font_8x16.c
-@@ -0,0 +1,4638 @@
-+/* font_8x16.c - 8x16 font for GRUB/EFI */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copied from Linux kernel drivers/video/console/font_8x16.c,
-+ *    which is generated by cpi2fnt.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You 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.
-+ */
-+
-+#ifdef SUPPORT_GRAPHICS
-+
-+#define FONTDATAMAX 4096
-+
-+const unsigned char font8x16[FONTDATAMAX] = {
-+
-+      /* 0 0x00 '^@' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 1 0x01 '^A' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7e, /* 01111110 */
-+      0x81, /* 10000001 */
-+      0xa5, /* 10100101 */
-+      0x81, /* 10000001 */
-+      0x81, /* 10000001 */
-+      0xbd, /* 10111101 */
-+      0x99, /* 10011001 */
-+      0x81, /* 10000001 */
-+      0x81, /* 10000001 */
-+      0x7e, /* 01111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 2 0x02 '^B' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7e, /* 01111110 */
-+      0xff, /* 11111111 */
-+      0xdb, /* 11011011 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xc3, /* 11000011 */
-+      0xe7, /* 11100111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0x7e, /* 01111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 3 0x03 '^C' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x6c, /* 01101100 */
-+      0xfe, /* 11111110 */
-+      0xfe, /* 11111110 */
-+      0xfe, /* 11111110 */
-+      0xfe, /* 11111110 */
-+      0x7c, /* 01111100 */
-+      0x38, /* 00111000 */
-+      0x10, /* 00010000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 4 0x04 '^D' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x10, /* 00010000 */
-+      0x38, /* 00111000 */
-+      0x7c, /* 01111100 */
-+      0xfe, /* 11111110 */
-+      0x7c, /* 01111100 */
-+      0x38, /* 00111000 */
-+      0x10, /* 00010000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 5 0x05 '^E' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x3c, /* 00111100 */
-+      0xe7, /* 11100111 */
-+      0xe7, /* 11100111 */
-+      0xe7, /* 11100111 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 6 0x06 '^F' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x7e, /* 01111110 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0x7e, /* 01111110 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 7 0x07 '^G' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x3c, /* 00111100 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 8 0x08 '^H' */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xe7, /* 11100111 */
-+      0xc3, /* 11000011 */
-+      0xc3, /* 11000011 */
-+      0xe7, /* 11100111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+
-+      /* 9 0x09 '^I' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x3c, /* 00111100 */
-+      0x66, /* 01100110 */
-+      0x42, /* 01000010 */
-+      0x42, /* 01000010 */
-+      0x66, /* 01100110 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 10 0x0a '^J' */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xc3, /* 11000011 */
-+      0x99, /* 10011001 */
-+      0xbd, /* 10111101 */
-+      0xbd, /* 10111101 */
-+      0x99, /* 10011001 */
-+      0xc3, /* 11000011 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+
-+      /* 11 0x0b '^K' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x1e, /* 00011110 */
-+      0x0e, /* 00001110 */
-+      0x1a, /* 00011010 */
-+      0x32, /* 00110010 */
-+      0x78, /* 01111000 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x78, /* 01111000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 12 0x0c '^L' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x3c, /* 00111100 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x3c, /* 00111100 */
-+      0x18, /* 00011000 */
-+      0x7e, /* 01111110 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 13 0x0d '^M' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x3f, /* 00111111 */
-+      0x33, /* 00110011 */
-+      0x3f, /* 00111111 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x70, /* 01110000 */
-+      0xf0, /* 11110000 */
-+      0xe0, /* 11100000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 14 0x0e '^N' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7f, /* 01111111 */
-+      0x63, /* 01100011 */
-+      0x7f, /* 01111111 */
-+      0x63, /* 01100011 */
-+      0x63, /* 01100011 */
-+      0x63, /* 01100011 */
-+      0x63, /* 01100011 */
-+      0x67, /* 01100111 */
-+      0xe7, /* 11100111 */
-+      0xe6, /* 11100110 */
-+      0xc0, /* 11000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 15 0x0f '^O' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0xdb, /* 11011011 */
-+      0x3c, /* 00111100 */
-+      0xe7, /* 11100111 */
-+      0x3c, /* 00111100 */
-+      0xdb, /* 11011011 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 16 0x10 '^P' */
-+      0x00, /* 00000000 */
-+      0x80, /* 10000000 */
-+      0xc0, /* 11000000 */
-+      0xe0, /* 11100000 */
-+      0xf0, /* 11110000 */
-+      0xf8, /* 11111000 */
-+      0xfe, /* 11111110 */
-+      0xf8, /* 11111000 */
-+      0xf0, /* 11110000 */
-+      0xe0, /* 11100000 */
-+      0xc0, /* 11000000 */
-+      0x80, /* 10000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 17 0x11 '^Q' */
-+      0x00, /* 00000000 */
-+      0x02, /* 00000010 */
-+      0x06, /* 00000110 */
-+      0x0e, /* 00001110 */
-+      0x1e, /* 00011110 */
-+      0x3e, /* 00111110 */
-+      0xfe, /* 11111110 */
-+      0x3e, /* 00111110 */
-+      0x1e, /* 00011110 */
-+      0x0e, /* 00001110 */
-+      0x06, /* 00000110 */
-+      0x02, /* 00000010 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 18 0x12 '^R' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x7e, /* 01111110 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x7e, /* 01111110 */
-+      0x3c, /* 00111100 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 19 0x13 '^S' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x00, /* 00000000 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 20 0x14 '^T' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7f, /* 01111111 */
-+      0xdb, /* 11011011 */
-+      0xdb, /* 11011011 */
-+      0xdb, /* 11011011 */
-+      0x7b, /* 01111011 */
-+      0x1b, /* 00011011 */
-+      0x1b, /* 00011011 */
-+      0x1b, /* 00011011 */
-+      0x1b, /* 00011011 */
-+      0x1b, /* 00011011 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 21 0x15 '^U' */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0x60, /* 01100000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x6c, /* 01101100 */
-+      0x38, /* 00111000 */
-+      0x0c, /* 00001100 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 22 0x16 '^V' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0xfe, /* 11111110 */
-+      0xfe, /* 11111110 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 23 0x17 '^W' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x7e, /* 01111110 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x7e, /* 01111110 */
-+      0x3c, /* 00111100 */
-+      0x18, /* 00011000 */
-+      0x7e, /* 01111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 24 0x18 '^X' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x7e, /* 01111110 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 25 0x19 '^Y' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x7e, /* 01111110 */
-+      0x3c, /* 00111100 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 26 0x1a '^Z' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x0c, /* 00001100 */
-+      0xfe, /* 11111110 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 27 0x1b '^[' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0xfe, /* 11111110 */
-+      0x60, /* 01100000 */
-+      0x30, /* 00110000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 28 0x1c '^\' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 29 0x1d '^]' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x28, /* 00101000 */
-+      0x6c, /* 01101100 */
-+      0xfe, /* 11111110 */
-+      0x6c, /* 01101100 */
-+      0x28, /* 00101000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 30 0x1e '^^' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x10, /* 00010000 */
-+      0x38, /* 00111000 */
-+      0x38, /* 00111000 */
-+      0x7c, /* 01111100 */
-+      0x7c, /* 01111100 */
-+      0xfe, /* 11111110 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 31 0x1f '^_' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0xfe, /* 11111110 */
-+      0x7c, /* 01111100 */
-+      0x7c, /* 01111100 */
-+      0x38, /* 00111000 */
-+      0x38, /* 00111000 */
-+      0x10, /* 00010000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 32 0x20 ' ' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 33 0x21 '!' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x3c, /* 00111100 */
-+      0x3c, /* 00111100 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 34 0x22 '"' */
-+      0x00, /* 00000000 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x24, /* 00100100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 35 0x23 '#' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0xfe, /* 11111110 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0xfe, /* 11111110 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 36 0x24 '$' */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc2, /* 11000010 */
-+      0xc0, /* 11000000 */
-+      0x7c, /* 01111100 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x86, /* 10000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 37 0x25 '%' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc2, /* 11000010 */
-+      0xc6, /* 11000110 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0xc6, /* 11000110 */
-+      0x86, /* 10000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 38 0x26 '&' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0x38, /* 00111000 */
-+      0x76, /* 01110110 */
-+      0xdc, /* 11011100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x76, /* 01110110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 39 0x27 ''' */
-+      0x00, /* 00000000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 40 0x28 '(' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x18, /* 00011000 */
-+      0x0c, /* 00001100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 41 0x29 ')' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x30, /* 00110000 */
-+      0x18, /* 00011000 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 42 0x2a '*' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x66, /* 01100110 */
-+      0x3c, /* 00111100 */
-+      0xff, /* 11111111 */
-+      0x3c, /* 00111100 */
-+      0x66, /* 01100110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 43 0x2b '+' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x7e, /* 01111110 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 44 0x2c ',' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 45 0x2d '-' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 46 0x2e '.' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 47 0x2f '/' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x02, /* 00000010 */
-+      0x06, /* 00000110 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0xc0, /* 11000000 */
-+      0x80, /* 10000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 48 0x30 '0' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xd6, /* 11010110 */
-+      0xd6, /* 11010110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x6c, /* 01101100 */
-+      0x38, /* 00111000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 49 0x31 '1' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x38, /* 00111000 */
-+      0x78, /* 01111000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x7e, /* 01111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 50 0x32 '2' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0x06, /* 00000110 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0xc0, /* 11000000 */
-+      0xc6, /* 11000110 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 51 0x33 '3' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x3c, /* 00111100 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 52 0x34 '4' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x0c, /* 00001100 */
-+      0x1c, /* 00011100 */
-+      0x3c, /* 00111100 */
-+      0x6c, /* 01101100 */
-+      0xcc, /* 11001100 */
-+      0xfe, /* 11111110 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x1e, /* 00011110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 53 0x35 '5' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xfc, /* 11111100 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 54 0x36 '6' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x38, /* 00111000 */
-+      0x60, /* 01100000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xfc, /* 11111100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 55 0x37 '7' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0xc6, /* 11000110 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 56 0x38 '8' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 57 0x39 '9' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7e, /* 01111110 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x0c, /* 00001100 */
-+      0x78, /* 01111000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 58 0x3a ':' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 59 0x3b ';' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 60 0x3c '<' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x06, /* 00000110 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0x30, /* 00110000 */
-+      0x18, /* 00011000 */
-+      0x0c, /* 00001100 */
-+      0x06, /* 00000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 61 0x3d '=' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7e, /* 01111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7e, /* 01111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 62 0x3e '>' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x60, /* 01100000 */
-+      0x30, /* 00110000 */
-+      0x18, /* 00011000 */
-+      0x0c, /* 00001100 */
-+      0x06, /* 00000110 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 63 0x3f '?' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 64 0x40 '@' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xde, /* 11011110 */
-+      0xde, /* 11011110 */
-+      0xde, /* 11011110 */
-+      0xdc, /* 11011100 */
-+      0xc0, /* 11000000 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 65 0x41 'A' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x10, /* 00010000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xfe, /* 11111110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 66 0x42 'B' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfc, /* 11111100 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x7c, /* 01111100 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0xfc, /* 11111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 67 0x43 'C' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x3c, /* 00111100 */
-+      0x66, /* 01100110 */
-+      0xc2, /* 11000010 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc2, /* 11000010 */
-+      0x66, /* 01100110 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 68 0x44 'D' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xf8, /* 11111000 */
-+      0x6c, /* 01101100 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x6c, /* 01101100 */
-+      0xf8, /* 11111000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 69 0x45 'E' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0x66, /* 01100110 */
-+      0x62, /* 01100010 */
-+      0x68, /* 01101000 */
-+      0x78, /* 01111000 */
-+      0x68, /* 01101000 */
-+      0x60, /* 01100000 */
-+      0x62, /* 01100010 */
-+      0x66, /* 01100110 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 70 0x46 'F' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0x66, /* 01100110 */
-+      0x62, /* 01100010 */
-+      0x68, /* 01101000 */
-+      0x78, /* 01111000 */
-+      0x68, /* 01101000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0xf0, /* 11110000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 71 0x47 'G' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x3c, /* 00111100 */
-+      0x66, /* 01100110 */
-+      0xc2, /* 11000010 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xde, /* 11011110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x66, /* 01100110 */
-+      0x3a, /* 00111010 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 72 0x48 'H' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xfe, /* 11111110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 73 0x49 'I' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x3c, /* 00111100 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 74 0x4a 'J' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x1e, /* 00011110 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x78, /* 01111000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 75 0x4b 'K' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xe6, /* 11100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x6c, /* 01101100 */
-+      0x78, /* 01111000 */
-+      0x78, /* 01111000 */
-+      0x6c, /* 01101100 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0xe6, /* 11100110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 76 0x4c 'L' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xf0, /* 11110000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x62, /* 01100010 */
-+      0x66, /* 01100110 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 77 0x4d 'M' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0xee, /* 11101110 */
-+      0xfe, /* 11111110 */
-+      0xfe, /* 11111110 */
-+      0xd6, /* 11010110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 78 0x4e 'N' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0xe6, /* 11100110 */
-+      0xf6, /* 11110110 */
-+      0xfe, /* 11111110 */
-+      0xde, /* 11011110 */
-+      0xce, /* 11001110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 79 0x4f 'O' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 80 0x50 'P' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfc, /* 11111100 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x7c, /* 01111100 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0xf0, /* 11110000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 81 0x51 'Q' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xd6, /* 11010110 */
-+      0xde, /* 11011110 */
-+      0x7c, /* 01111100 */
-+      0x0c, /* 00001100 */
-+      0x0e, /* 00001110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 82 0x52 'R' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfc, /* 11111100 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x7c, /* 01111100 */
-+      0x6c, /* 01101100 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0xe6, /* 11100110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 83 0x53 'S' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x60, /* 01100000 */
-+      0x38, /* 00111000 */
-+      0x0c, /* 00001100 */
-+      0x06, /* 00000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 84 0x54 'T' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7e, /* 01111110 */
-+      0x7e, /* 01111110 */
-+      0x5a, /* 01011010 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 85 0x55 'U' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 86 0x56 'V' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x6c, /* 01101100 */
-+      0x38, /* 00111000 */
-+      0x10, /* 00010000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 87 0x57 'W' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xd6, /* 11010110 */
-+      0xd6, /* 11010110 */
-+      0xd6, /* 11010110 */
-+      0xfe, /* 11111110 */
-+      0xee, /* 11101110 */
-+      0x6c, /* 01101100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 88 0x58 'X' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x6c, /* 01101100 */
-+      0x7c, /* 01111100 */
-+      0x38, /* 00111000 */
-+      0x38, /* 00111000 */
-+      0x7c, /* 01111100 */
-+      0x6c, /* 01101100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 89 0x59 'Y' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x3c, /* 00111100 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 90 0x5a 'Z' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0xc6, /* 11000110 */
-+      0x86, /* 10000110 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0xc2, /* 11000010 */
-+      0xc6, /* 11000110 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 91 0x5b '[' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x3c, /* 00111100 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 92 0x5c '\' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x80, /* 10000000 */
-+      0xc0, /* 11000000 */
-+      0xe0, /* 11100000 */
-+      0x70, /* 01110000 */
-+      0x38, /* 00111000 */
-+      0x1c, /* 00011100 */
-+      0x0e, /* 00001110 */
-+      0x06, /* 00000110 */
-+      0x02, /* 00000010 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 93 0x5d ']' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x3c, /* 00111100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 94 0x5e '^' */
-+      0x10, /* 00010000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 95 0x5f '_' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xff, /* 11111111 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 96 0x60 '`' */
-+      0x00, /* 00000000 */
-+      0x30, /* 00110000 */
-+      0x18, /* 00011000 */
-+      0x0c, /* 00001100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 97 0x61 'a' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x78, /* 01111000 */
-+      0x0c, /* 00001100 */
-+      0x7c, /* 01111100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x76, /* 01110110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 98 0x62 'b' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xe0, /* 11100000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x78, /* 01111000 */
-+      0x6c, /* 01101100 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 99 0x63 'c' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 100 0x64 'd' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x1c, /* 00011100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x3c, /* 00111100 */
-+      0x6c, /* 01101100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x76, /* 01110110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 101 0x65 'e' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xfe, /* 11111110 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 102 0x66 'f' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x1c, /* 00011100 */
-+      0x36, /* 00110110 */
-+      0x32, /* 00110010 */
-+      0x30, /* 00110000 */
-+      0x78, /* 01111000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x78, /* 01111000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 103 0x67 'g' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x76, /* 01110110 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x7c, /* 01111100 */
-+      0x0c, /* 00001100 */
-+      0xcc, /* 11001100 */
-+      0x78, /* 01111000 */
-+      0x00, /* 00000000 */
-+
-+      /* 104 0x68 'h' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xe0, /* 11100000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x6c, /* 01101100 */
-+      0x76, /* 01110110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0xe6, /* 11100110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 105 0x69 'i' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x38, /* 00111000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 106 0x6a 'j' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x00, /* 00000000 */
-+      0x0e, /* 00001110 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+
-+      /* 107 0x6b 'k' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xe0, /* 11100000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x66, /* 01100110 */
-+      0x6c, /* 01101100 */
-+      0x78, /* 01111000 */
-+      0x78, /* 01111000 */
-+      0x6c, /* 01101100 */
-+      0x66, /* 01100110 */
-+      0xe6, /* 11100110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 108 0x6c 'l' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x38, /* 00111000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 109 0x6d 'm' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xec, /* 11101100 */
-+      0xfe, /* 11111110 */
-+      0xd6, /* 11010110 */
-+      0xd6, /* 11010110 */
-+      0xd6, /* 11010110 */
-+      0xd6, /* 11010110 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 110 0x6e 'n' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xdc, /* 11011100 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 111 0x6f 'o' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 112 0x70 'p' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xdc, /* 11011100 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x7c, /* 01111100 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0xf0, /* 11110000 */
-+      0x00, /* 00000000 */
-+
-+      /* 113 0x71 'q' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x76, /* 01110110 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x7c, /* 01111100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x1e, /* 00011110 */
-+      0x00, /* 00000000 */
-+
-+      /* 114 0x72 'r' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xdc, /* 11011100 */
-+      0x76, /* 01110110 */
-+      0x66, /* 01100110 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0xf0, /* 11110000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 115 0x73 's' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0x60, /* 01100000 */
-+      0x38, /* 00111000 */
-+      0x0c, /* 00001100 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 116 0x74 't' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x10, /* 00010000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0xfc, /* 11111100 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x36, /* 00110110 */
-+      0x1c, /* 00011100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 117 0x75 'u' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x76, /* 01110110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 118 0x76 'v' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x6c, /* 01101100 */
-+      0x38, /* 00111000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 119 0x77 'w' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xd6, /* 11010110 */
-+      0xd6, /* 11010110 */
-+      0xd6, /* 11010110 */
-+      0xfe, /* 11111110 */
-+      0x6c, /* 01101100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 120 0x78 'x' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0x6c, /* 01101100 */
-+      0x38, /* 00111000 */
-+      0x38, /* 00111000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 121 0x79 'y' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7e, /* 01111110 */
-+      0x06, /* 00000110 */
-+      0x0c, /* 00001100 */
-+      0xf8, /* 11111000 */
-+      0x00, /* 00000000 */
-+
-+      /* 122 0x7a 'z' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0xcc, /* 11001100 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0xc6, /* 11000110 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 123 0x7b '{' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x0e, /* 00001110 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x70, /* 01110000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x0e, /* 00001110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 124 0x7c '|' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 125 0x7d '}' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x70, /* 01110000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x0e, /* 00001110 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x70, /* 01110000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 126 0x7e '~' */
-+      0x00, /* 00000000 */
-+      0x76, /* 01110110 */
-+      0xdc, /* 11011100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 127 0x7f '\7f' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x10, /* 00010000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 128 0x80 '\80' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x3c, /* 00111100 */
-+      0x66, /* 01100110 */
-+      0xc2, /* 11000010 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc2, /* 11000010 */
-+      0x66, /* 01100110 */
-+      0x3c, /* 00111100 */
-+      0x18, /* 00011000 */
-+      0x70, /* 01110000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 129 0x81 '\81' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xcc, /* 11001100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x76, /* 01110110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 130 0x82 '\82' */
-+      0x00, /* 00000000 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xfe, /* 11111110 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 131 0x83 '\83' */
-+      0x00, /* 00000000 */
-+      0x10, /* 00010000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0x00, /* 00000000 */
-+      0x78, /* 01111000 */
-+      0x0c, /* 00001100 */
-+      0x7c, /* 01111100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x76, /* 01110110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 132 0x84 '\84' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xcc, /* 11001100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x78, /* 01111000 */
-+      0x0c, /* 00001100 */
-+      0x7c, /* 01111100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x76, /* 01110110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 133 0x85 '\85' */
-+      0x00, /* 00000000 */
-+      0x60, /* 01100000 */
-+      0x30, /* 00110000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x78, /* 01111000 */
-+      0x0c, /* 00001100 */
-+      0x7c, /* 01111100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x76, /* 01110110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 134 0x86 '\86' */
-+      0x00, /* 00000000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0x38, /* 00111000 */
-+      0x00, /* 00000000 */
-+      0x78, /* 01111000 */
-+      0x0c, /* 00001100 */
-+      0x7c, /* 01111100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x76, /* 01110110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 135 0x87 '\87' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x18, /* 00011000 */
-+      0x70, /* 01110000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 136 0x88 '\88' */
-+      0x00, /* 00000000 */
-+      0x10, /* 00010000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xfe, /* 11111110 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 137 0x89 '\89' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xfe, /* 11111110 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 138 0x8a '\8a' */
-+      0x00, /* 00000000 */
-+      0x60, /* 01100000 */
-+      0x30, /* 00110000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xfe, /* 11111110 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 139 0x8b '\8b' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x66, /* 01100110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x38, /* 00111000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 140 0x8c '\8c' */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x66, /* 01100110 */
-+      0x00, /* 00000000 */
-+      0x38, /* 00111000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 141 0x8d '\8d' */
-+      0x00, /* 00000000 */
-+      0x60, /* 01100000 */
-+      0x30, /* 00110000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x38, /* 00111000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 142 0x8e '\8e' */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x10, /* 00010000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xfe, /* 11111110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 143 0x8f '\8f' */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0x38, /* 00111000 */
-+      0x10, /* 00010000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0xc6, /* 11000110 */
-+      0xfe, /* 11111110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 144 0x90 '\90' */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0x66, /* 01100110 */
-+      0x62, /* 01100010 */
-+      0x68, /* 01101000 */
-+      0x78, /* 01111000 */
-+      0x68, /* 01101000 */
-+      0x62, /* 01100010 */
-+      0x66, /* 01100110 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 145 0x91 '\91' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xec, /* 11101100 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x7e, /* 01111110 */
-+      0xd8, /* 11011000 */
-+      0xd8, /* 11011000 */
-+      0x6e, /* 01101110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 146 0x92 '\92' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x3e, /* 00111110 */
-+      0x6c, /* 01101100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xfe, /* 11111110 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xce, /* 11001110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 147 0x93 '\93' */
-+      0x00, /* 00000000 */
-+      0x10, /* 00010000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 148 0x94 '\94' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 149 0x95 '\95' */
-+      0x00, /* 00000000 */
-+      0x60, /* 01100000 */
-+      0x30, /* 00110000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 150 0x96 '\96' */
-+      0x00, /* 00000000 */
-+      0x30, /* 00110000 */
-+      0x78, /* 01111000 */
-+      0xcc, /* 11001100 */
-+      0x00, /* 00000000 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x76, /* 01110110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 151 0x97 '\97' */
-+      0x00, /* 00000000 */
-+      0x60, /* 01100000 */
-+      0x30, /* 00110000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x76, /* 01110110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 152 0x98 '\98' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7e, /* 01111110 */
-+      0x06, /* 00000110 */
-+      0x0c, /* 00001100 */
-+      0x78, /* 01111000 */
-+      0x00, /* 00000000 */
-+
-+      /* 153 0x99 '\99' */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 154 0x9a '\9a' */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 155 0x9b '\9b' */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 156 0x9c '\9c' */
-+      0x00, /* 00000000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0x64, /* 01100100 */
-+      0x60, /* 01100000 */
-+      0xf0, /* 11110000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0xe6, /* 11100110 */
-+      0xfc, /* 11111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 157 0x9d '\9d' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x3c, /* 00111100 */
-+      0x18, /* 00011000 */
-+      0x7e, /* 01111110 */
-+      0x18, /* 00011000 */
-+      0x7e, /* 01111110 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 158 0x9e '\9e' */
-+      0x00, /* 00000000 */
-+      0xf8, /* 11111000 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xf8, /* 11111000 */
-+      0xc4, /* 11000100 */
-+      0xcc, /* 11001100 */
-+      0xde, /* 11011110 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 159 0x9f '\9f' */
-+      0x00, /* 00000000 */
-+      0x0e, /* 00001110 */
-+      0x1b, /* 00011011 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x7e, /* 01111110 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0xd8, /* 11011000 */
-+      0x70, /* 01110000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 160 0xa0 ' ' */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0x00, /* 00000000 */
-+      0x78, /* 01111000 */
-+      0x0c, /* 00001100 */
-+      0x7c, /* 01111100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x76, /* 01110110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 161 0xa1 '¡' */
-+      0x00, /* 00000000 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x00, /* 00000000 */
-+      0x38, /* 00111000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 162 0xa2 '¢' */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 163 0xa3 '£' */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0x00, /* 00000000 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0x76, /* 01110110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 164 0xa4 '¤' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x76, /* 01110110 */
-+      0xdc, /* 11011100 */
-+      0x00, /* 00000000 */
-+      0xdc, /* 11011100 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 165 0xa5 '¥' */
-+      0x76, /* 01110110 */
-+      0xdc, /* 11011100 */
-+      0x00, /* 00000000 */
-+      0xc6, /* 11000110 */
-+      0xe6, /* 11100110 */
-+      0xf6, /* 11110110 */
-+      0xfe, /* 11111110 */
-+      0xde, /* 11011110 */
-+      0xce, /* 11001110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 166 0xa6 '¦' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x3c, /* 00111100 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0x3e, /* 00111110 */
-+      0x00, /* 00000000 */
-+      0x7e, /* 01111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 167 0xa7 '§' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0x38, /* 00111000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 168 0xa8 '¨' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x00, /* 00000000 */
-+      0x30, /* 00110000 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0xc0, /* 11000000 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x7c, /* 01111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 169 0xa9 '©' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 170 0xaa 'ª' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 171 0xab '«' */
-+      0x00, /* 00000000 */
-+      0x60, /* 01100000 */
-+      0xe0, /* 11100000 */
-+      0x62, /* 01100010 */
-+      0x66, /* 01100110 */
-+      0x6c, /* 01101100 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0xdc, /* 11011100 */
-+      0x86, /* 10000110 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x3e, /* 00111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 172 0xac '¬' */
-+      0x00, /* 00000000 */
-+      0x60, /* 01100000 */
-+      0xe0, /* 11100000 */
-+      0x62, /* 01100010 */
-+      0x66, /* 01100110 */
-+      0x6c, /* 01101100 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x66, /* 01100110 */
-+      0xce, /* 11001110 */
-+      0x9a, /* 10011010 */
-+      0x3f, /* 00111111 */
-+      0x06, /* 00000110 */
-+      0x06, /* 00000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 173 0xad '­' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x3c, /* 00111100 */
-+      0x3c, /* 00111100 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 174 0xae '®' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x36, /* 00110110 */
-+      0x6c, /* 01101100 */
-+      0xd8, /* 11011000 */
-+      0x6c, /* 01101100 */
-+      0x36, /* 00110110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 175 0xaf '¯' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xd8, /* 11011000 */
-+      0x6c, /* 01101100 */
-+      0x36, /* 00110110 */
-+      0x6c, /* 01101100 */
-+      0xd8, /* 11011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 176 0xb0 '°' */
-+      0x11, /* 00010001 */
-+      0x44, /* 01000100 */
-+      0x11, /* 00010001 */
-+      0x44, /* 01000100 */
-+      0x11, /* 00010001 */
-+      0x44, /* 01000100 */
-+      0x11, /* 00010001 */
-+      0x44, /* 01000100 */
-+      0x11, /* 00010001 */
-+      0x44, /* 01000100 */
-+      0x11, /* 00010001 */
-+      0x44, /* 01000100 */
-+      0x11, /* 00010001 */
-+      0x44, /* 01000100 */
-+      0x11, /* 00010001 */
-+      0x44, /* 01000100 */
-+
-+      /* 177 0xb1 '±' */
-+      0x55, /* 01010101 */
-+      0xaa, /* 10101010 */
-+      0x55, /* 01010101 */
-+      0xaa, /* 10101010 */
-+      0x55, /* 01010101 */
-+      0xaa, /* 10101010 */
-+      0x55, /* 01010101 */
-+      0xaa, /* 10101010 */
-+      0x55, /* 01010101 */
-+      0xaa, /* 10101010 */
-+      0x55, /* 01010101 */
-+      0xaa, /* 10101010 */
-+      0x55, /* 01010101 */
-+      0xaa, /* 10101010 */
-+      0x55, /* 01010101 */
-+      0xaa, /* 10101010 */
-+
-+      /* 178 0xb2 '²' */
-+      0xdd, /* 11011101 */
-+      0x77, /* 01110111 */
-+      0xdd, /* 11011101 */
-+      0x77, /* 01110111 */
-+      0xdd, /* 11011101 */
-+      0x77, /* 01110111 */
-+      0xdd, /* 11011101 */
-+      0x77, /* 01110111 */
-+      0xdd, /* 11011101 */
-+      0x77, /* 01110111 */
-+      0xdd, /* 11011101 */
-+      0x77, /* 01110111 */
-+      0xdd, /* 11011101 */
-+      0x77, /* 01110111 */
-+      0xdd, /* 11011101 */
-+      0x77, /* 01110111 */
-+
-+      /* 179 0xb3 '³' */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+
-+      /* 180 0xb4 '´' */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0xf8, /* 11111000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+
-+      /* 181 0xb5 'µ' */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0xf8, /* 11111000 */
-+      0x18, /* 00011000 */
-+      0xf8, /* 11111000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+
-+      /* 182 0xb6 '¶' */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0xf6, /* 11110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+
-+      /* 183 0xb7 '·' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+
-+      /* 184 0xb8 '¸' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xf8, /* 11111000 */
-+      0x18, /* 00011000 */
-+      0xf8, /* 11111000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+
-+      /* 185 0xb9 '¹' */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0xf6, /* 11110110 */
-+      0x06, /* 00000110 */
-+      0xf6, /* 11110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+
-+      /* 186 0xba 'º' */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+
-+      /* 187 0xbb '»' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0x06, /* 00000110 */
-+      0xf6, /* 11110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+
-+      /* 188 0xbc '¼' */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0xf6, /* 11110110 */
-+      0x06, /* 00000110 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 189 0xbd '½' */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 190 0xbe '¾' */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0xf8, /* 11111000 */
-+      0x18, /* 00011000 */
-+      0xf8, /* 11111000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 191 0xbf '¿' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xf8, /* 11111000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+
-+      /* 192 0xc0 'À' */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x1f, /* 00011111 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 193 0xc1 'Á' */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0xff, /* 11111111 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 194 0xc2 'Â' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xff, /* 11111111 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+
-+      /* 195 0xc3 'Ã' */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x1f, /* 00011111 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+
-+      /* 196 0xc4 'Ä' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xff, /* 11111111 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 197 0xc5 'Å' */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0xff, /* 11111111 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+
-+      /* 198 0xc6 'Æ' */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x1f, /* 00011111 */
-+      0x18, /* 00011000 */
-+      0x1f, /* 00011111 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+
-+      /* 199 0xc7 'Ç' */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x37, /* 00110111 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+
-+      /* 200 0xc8 'È' */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x37, /* 00110111 */
-+      0x30, /* 00110000 */
-+      0x3f, /* 00111111 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 201 0xc9 'É' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x3f, /* 00111111 */
-+      0x30, /* 00110000 */
-+      0x37, /* 00110111 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+
-+      /* 202 0xca 'Ê' */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0xf7, /* 11110111 */
-+      0x00, /* 00000000 */
-+      0xff, /* 11111111 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 203 0xcb 'Ë' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xff, /* 11111111 */
-+      0x00, /* 00000000 */
-+      0xf7, /* 11110111 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+
-+      /* 204 0xcc 'Ì' */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x37, /* 00110111 */
-+      0x30, /* 00110000 */
-+      0x37, /* 00110111 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+
-+      /* 205 0xcd 'Í' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xff, /* 11111111 */
-+      0x00, /* 00000000 */
-+      0xff, /* 11111111 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 206 0xce 'Î' */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0xf7, /* 11110111 */
-+      0x00, /* 00000000 */
-+      0xf7, /* 11110111 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+
-+      /* 207 0xcf 'Ï' */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0xff, /* 11111111 */
-+      0x00, /* 00000000 */
-+      0xff, /* 11111111 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 208 0xd0 'Ð' */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0xff, /* 11111111 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 209 0xd1 'Ñ' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xff, /* 11111111 */
-+      0x00, /* 00000000 */
-+      0xff, /* 11111111 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+
-+      /* 210 0xd2 'Ò' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xff, /* 11111111 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+
-+      /* 211 0xd3 'Ó' */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x3f, /* 00111111 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 212 0xd4 'Ô' */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x1f, /* 00011111 */
-+      0x18, /* 00011000 */
-+      0x1f, /* 00011111 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 213 0xd5 'Õ' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x1f, /* 00011111 */
-+      0x18, /* 00011000 */
-+      0x1f, /* 00011111 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+
-+      /* 214 0xd6 'Ö' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x3f, /* 00111111 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+
-+      /* 215 0xd7 '×' */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0xff, /* 11111111 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+
-+      /* 216 0xd8 'Ø' */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0xff, /* 11111111 */
-+      0x18, /* 00011000 */
-+      0xff, /* 11111111 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+
-+      /* 217 0xd9 'Ù' */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0xf8, /* 11111000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 218 0xda 'Ú' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x1f, /* 00011111 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+
-+      /* 219 0xdb 'Û' */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+
-+      /* 220 0xdc 'Ü' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+
-+      /* 221 0xdd 'Ý' */
-+      0xf0, /* 11110000 */
-+      0xf0, /* 11110000 */
-+      0xf0, /* 11110000 */
-+      0xf0, /* 11110000 */
-+      0xf0, /* 11110000 */
-+      0xf0, /* 11110000 */
-+      0xf0, /* 11110000 */
-+      0xf0, /* 11110000 */
-+      0xf0, /* 11110000 */
-+      0xf0, /* 11110000 */
-+      0xf0, /* 11110000 */
-+      0xf0, /* 11110000 */
-+      0xf0, /* 11110000 */
-+      0xf0, /* 11110000 */
-+      0xf0, /* 11110000 */
-+      0xf0, /* 11110000 */
-+
-+      /* 222 0xde 'Þ' */
-+      0x0f, /* 00001111 */
-+      0x0f, /* 00001111 */
-+      0x0f, /* 00001111 */
-+      0x0f, /* 00001111 */
-+      0x0f, /* 00001111 */
-+      0x0f, /* 00001111 */
-+      0x0f, /* 00001111 */
-+      0x0f, /* 00001111 */
-+      0x0f, /* 00001111 */
-+      0x0f, /* 00001111 */
-+      0x0f, /* 00001111 */
-+      0x0f, /* 00001111 */
-+      0x0f, /* 00001111 */
-+      0x0f, /* 00001111 */
-+      0x0f, /* 00001111 */
-+      0x0f, /* 00001111 */
-+
-+      /* 223 0xdf 'ß' */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0xff, /* 11111111 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 224 0xe0 'à' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x76, /* 01110110 */
-+      0xdc, /* 11011100 */
-+      0xd8, /* 11011000 */
-+      0xd8, /* 11011000 */
-+      0xd8, /* 11011000 */
-+      0xdc, /* 11011100 */
-+      0x76, /* 01110110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 225 0xe1 'á' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x78, /* 01111000 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xcc, /* 11001100 */
-+      0xd8, /* 11011000 */
-+      0xcc, /* 11001100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xcc, /* 11001100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 226 0xe2 'â' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0xc0, /* 11000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 227 0xe3 'ã' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 228 0xe4 'ä' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0xc6, /* 11000110 */
-+      0x60, /* 01100000 */
-+      0x30, /* 00110000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0xc6, /* 11000110 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 229 0xe5 'å' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7e, /* 01111110 */
-+      0xd8, /* 11011000 */
-+      0xd8, /* 11011000 */
-+      0xd8, /* 11011000 */
-+      0xd8, /* 11011000 */
-+      0xd8, /* 11011000 */
-+      0x70, /* 01110000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 230 0xe6 'æ' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x7c, /* 01111100 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0xc0, /* 11000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 231 0xe7 'ç' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x76, /* 01110110 */
-+      0xdc, /* 11011100 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 232 0xe8 'è' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7e, /* 01111110 */
-+      0x18, /* 00011000 */
-+      0x3c, /* 00111100 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x3c, /* 00111100 */
-+      0x18, /* 00011000 */
-+      0x7e, /* 01111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 233 0xe9 'é' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xfe, /* 11111110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x6c, /* 01101100 */
-+      0x38, /* 00111000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 234 0xea 'ê' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0xee, /* 11101110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 235 0xeb 'ë' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x1e, /* 00011110 */
-+      0x30, /* 00110000 */
-+      0x18, /* 00011000 */
-+      0x0c, /* 00001100 */
-+      0x3e, /* 00111110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x66, /* 01100110 */
-+      0x3c, /* 00111100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 236 0xec 'ì' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7e, /* 01111110 */
-+      0xdb, /* 11011011 */
-+      0xdb, /* 11011011 */
-+      0xdb, /* 11011011 */
-+      0x7e, /* 01111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 237 0xed 'í' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x03, /* 00000011 */
-+      0x06, /* 00000110 */
-+      0x7e, /* 01111110 */
-+      0xdb, /* 11011011 */
-+      0xdb, /* 11011011 */
-+      0xf3, /* 11110011 */
-+      0x7e, /* 01111110 */
-+      0x60, /* 01100000 */
-+      0xc0, /* 11000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 238 0xee 'î' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x1c, /* 00011100 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x7c, /* 01111100 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x60, /* 01100000 */
-+      0x30, /* 00110000 */
-+      0x1c, /* 00011100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 239 0xef 'ï' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7c, /* 01111100 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0xc6, /* 11000110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 240 0xf0 'ð' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0xfe, /* 11111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 241 0xf1 'ñ' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x7e, /* 01111110 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7e, /* 01111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 242 0xf2 'ò' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x30, /* 00110000 */
-+      0x18, /* 00011000 */
-+      0x0c, /* 00001100 */
-+      0x06, /* 00000110 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x00, /* 00000000 */
-+      0x7e, /* 01111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 243 0xf3 'ó' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x30, /* 00110000 */
-+      0x60, /* 01100000 */
-+      0x30, /* 00110000 */
-+      0x18, /* 00011000 */
-+      0x0c, /* 00001100 */
-+      0x00, /* 00000000 */
-+      0x7e, /* 01111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 244 0xf4 'ô' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x0e, /* 00001110 */
-+      0x1b, /* 00011011 */
-+      0x1b, /* 00011011 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+
-+      /* 245 0xf5 'õ' */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0xd8, /* 11011000 */
-+      0xd8, /* 11011000 */
-+      0xd8, /* 11011000 */
-+      0x70, /* 01110000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 246 0xf6 'ö' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x7e, /* 01111110 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 247 0xf7 '÷' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x76, /* 01110110 */
-+      0xdc, /* 11011100 */
-+      0x00, /* 00000000 */
-+      0x76, /* 01110110 */
-+      0xdc, /* 11011100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 248 0xf8 'ø' */
-+      0x00, /* 00000000 */
-+      0x38, /* 00111000 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0x38, /* 00111000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 249 0xf9 'ù' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 250 0xfa 'ú' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x18, /* 00011000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 251 0xfb 'û' */
-+      0x00, /* 00000000 */
-+      0x0f, /* 00001111 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0x0c, /* 00001100 */
-+      0xec, /* 11101100 */
-+      0x6c, /* 01101100 */
-+      0x6c, /* 01101100 */
-+      0x3c, /* 00111100 */
-+      0x1c, /* 00011100 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 252 0xfc 'ü' */
-+      0x00, /* 00000000 */
-+      0x6c, /* 01101100 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x36, /* 00110110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 253 0xfd 'ý' */
-+      0x00, /* 00000000 */
-+      0x3c, /* 00111100 */
-+      0x66, /* 01100110 */
-+      0x0c, /* 00001100 */
-+      0x18, /* 00011000 */
-+      0x32, /* 00110010 */
-+      0x7e, /* 01111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 254 0xfe 'þ' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x7e, /* 01111110 */
-+      0x7e, /* 01111110 */
-+      0x7e, /* 01111110 */
-+      0x7e, /* 01111110 */
-+      0x7e, /* 01111110 */
-+      0x7e, /* 01111110 */
-+      0x7e, /* 01111110 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+      /* 255 0xff 'ÿ' */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+      0x00, /* 00000000 */
-+
-+};
-+
-+#endif
-diff --git a/efi/graphics.c b/efi/graphics.c
-new file mode 100644
-index 0000000..eb98d8a
---- /dev/null
-+++ b/efi/graphics.c
-@@ -0,0 +1,666 @@
-+#ifdef SUPPORT_GRAPHICS
-+
-+#include <grub/misc.h>
-+#include <grub/types.h>
-+#include <grub/cpu/linux.h>
-+#include <grub/efi/api.h>
-+#include <grub/efi/efi.h>
-+#include <grub/efi/misc.h>
-+
-+#include <term.h>
-+#include <shared.h>
-+#include <graphics.h>
-+
-+#include "graphics.h"
-+
-+#if 0
-+#include "ugadebug.h"
-+#endif
-+
-+int foreground = 0x00ffffff, background = 0; 
-+int graphics_inited = 0;
-+
-+/* Convert a character which is a hex digit to the appropriate integer */
-+int
-+hex (int v)
-+{
-+  if (v >= 'A' && v <= 'F')
-+    return (v - 'A' + 10);
-+  if (v >= 'a' && v <= 'f')
-+    return (v - 'a' + 10);
-+  return (v - '0');
-+}
-+
-+grub_uint16_t
-+grub_console_getwh (void)
-+{
-+  grub_efi_simple_text_output_interface_t *o;
-+  grub_efi_uintn_t columns, rows;
-+
-+  o = grub_efi_system_table->con_out;
-+  if (Call_Service_4 (o->query_mode , o, o->mode->mode, &columns, &rows)
-+      != GRUB_EFI_SUCCESS)
-+    {
-+      /* Why does this fail?  */
-+      columns = 80;
-+      rows = 25;
-+    }
-+
-+  return ((columns << 8) | rows);
-+}
-+
-+extern struct graphics_backend uga_backend;
-+extern struct graphics_backend eg_backend;
-+
-+static struct graphics_backend *backends[] = {
-+    &eg_backend,
-+    &uga_backend,
-+    NULL
-+};
-+static struct graphics_backend *backend;
-+
-+struct graphics {
-+    int scroll;
-+    int fontx;
-+    int fonty;
-+
-+    int standard_color;
-+    int normal_color;
-+    int highlight_color;
-+    int current_color;
-+    color_state color_state;
-+
-+    char splashpath[64];
-+    struct xpm *splashimage;
-+
-+    unsigned short *text;
-+};
-+
-+static grub_efi_guid_t device_path_guid = GRUB_EFI_DEVICE_PATH_GUID;
-+static grub_efi_guid_t pci_io_guid = GRUB_EFI_PCI_IO_GUID;
-+static grub_efi_guid_t pci_root_io_guid = GRUB_EFI_PCI_ROOT_IO_GUID;
-+
-+static void
-+grub_efi_configure_pci(grub_efi_handle_t handle)
-+{
-+  grub_efi_device_path_t *path, *parent;
-+  grub_efi_handle_t parent_handle;
-+  grub_efi_pci_io_t *pci_proto;
-+  grub_efi_pci_root_io_t *pci_root_proto;
-+  grub_efi_status_t status;
-+
-+  path = grub_efi_get_device_path(handle);
-+  parent = find_parent_device_path(path);
-+
-+  if (!parent)
-+    return;
-+
-+  status = grub_efi_locate_device_path (&device_path_guid, &parent,
-+                                      &parent_handle);
-+  if (status != GRUB_EFI_SUCCESS)
-+    return;
-+
-+  pci_proto = grub_efi_open_protocol (parent_handle, &pci_io_guid,
-+                                    GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-+
-+  pci_root_proto = grub_efi_open_protocol (parent_handle, &pci_root_io_guid,
-+                                         GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-+
-+
-+  if (pci_proto || pci_root_proto)
-+    {
-+      if (pci_proto)
-+      {
-+        Call_Service_4 (pci_proto->attributes, pci_proto,
-+                        grub_efi_pci_io_attribute_operation_enable,
-+                        GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY |
-+                        GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_IO |
-+                        GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO, NULL);
-+
-+        grub_efi_configure_pci (parent_handle);
-+      }
-+      else
-+      {
-+        grub_uint8_t value = 0x33;
-+        grub_uint16_t vendor;
-+
-+        Call_Service_5 (pci_root_proto->pci.read, pci_root_proto,
-+                        grub_efi_pci_io_width_uint16, 0x00, 1, &vendor);
-+
-+        if (vendor == 0x8086) {
-+          Call_Service_5 (pci_root_proto->pci.write, pci_root_proto,
-+                          grub_efi_pci_io_width_uint8, 0x91, 1, &value);
-+          Call_Service_5 (pci_root_proto->pci.write, pci_root_proto,
-+                          grub_efi_pci_io_width_uint8, 0x92, 1, &value);
-+        }
-+      }
-+    }
-+  grub_free(parent);
-+}
-+
-+void
-+grub_efi_setup_gfx_pci(grub_efi_handle_t handle)
-+{
-+  grub_efi_uint64_t romsize;
-+  grub_efi_uint16_t *header;
-+  void *vrom;
-+  grub_efi_pci_io_t *pci_proto;
-+
-+  pci_proto = grub_efi_open_protocol (handle, &pci_io_guid,
-+                                    GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-+
-+  if (!pci_proto)
-+    return;
-+
-+  romsize = pci_proto->rom_size;
-+
-+  if (!romsize || romsize > 65536 || !pci_proto->rom_image)
-+    return;
-+
-+  /* Copy the ROM */
-+  vrom = grub_efi_allocate_runtime_pages(0xc0000, 16);
-+
-+  if (!vrom)
-+    return;
-+
-+  header = vrom;
-+
-+  if (*header == 0xaa55)
-+    return;
-+
-+  grub_efi_configure_pci(handle);
-+
-+  grub_memcpy(vrom, pci_proto->rom_image, romsize);
-+}
-+
-+void
-+graphics_set_kernel_params(struct linux_kernel_params *params)
-+{
-+    params->video_cursor_x = grub_efi_system_table->con_out->mode->cursor_column;
-+    params->video_cursor_y = grub_efi_system_table->con_out->mode->cursor_row;
-+    params->video_page = 0; /* ??? */
-+    params->video_mode = grub_efi_system_table->con_out->mode->mode;
-+    params->video_width = (grub_console_getwh () >> 8);
-+    params->video_ega_bx = 0;
-+    params->video_height = (grub_console_getwh () & 0xff);
-+    params->have_vga = 0;
-+    params->font_size = 16; /* XXX */
-+
-+    /* No VBE.  */
-+    params->lfb_width = 0;
-+    params->lfb_height = 0;
-+    params->lfb_depth = 0;
-+    params->lfb_base = 0;
-+    params->lfb_size = 0;
-+    params->lfb_line_len = 0;
-+    params->red_mask_size = 0;
-+    params->red_field_pos = 0;
-+    params->green_mask_size = 0;
-+    params->green_field_pos = 0;
-+    params->blue_mask_size = 0;
-+    params->blue_field_pos = 0;
-+    params->reserved_mask_size = 0;
-+    params->reserved_field_pos = 0;
-+    params->vesapm_segment = 0;
-+    params->vesapm_offset = 0;
-+    params->lfb_pages = 0;
-+    params->vesa_attrib = 0;
-+
-+    if (backend && backend->set_kernel_params)
-+        backend->set_kernel_params(backend, params);
-+}
-+
-+int
-+graphics_alloc_text_buf(void)
-+{
-+    if (backend) {
-+        struct graphics *graphics = backend->graphics;
-+        position_t screen_size;
-+
-+        if (graphics->text) {
-+            grub_free(graphics->text);
-+            graphics->text = NULL;
-+        }
-+        graphics_get_screen_rowscols(&screen_size);
-+        graphics->text = grub_malloc(screen_size.x
-+                                     * screen_size.y
-+                                     * sizeof (graphics->text[0]));
-+        if (graphics->text) {
-+            int x, y;
-+            for (y = 0; y < screen_size.y; y++)
-+                for (x = 0; x < screen_size.x; x++)
-+                    graphics->text[y * screen_size.x + x] = ' ';
-+            return 1;
-+        }
-+    }
-+    return 0;
-+}
-+
-+unsigned short *
-+graphics_get_text_buf(void)
-+{
-+    return backend ? backend->graphics->text : NULL;
-+    return NULL;
-+}
-+
-+int
-+graphics_get_screen_rowscols(position_t *size)
-+{
-+#if 0
-+    if (backend && backend->get_screen_size) {
-+        backend->get_screen_size(backend, size);
-+        size->x >>= 3;
-+        size->y >>= 4;
-+        return 1;
-+    }
-+    size->x = -1;
-+    size->y = -1;
-+    return 0;
-+#else
-+    size->x = 80;
-+    size->y = 30;
-+    return 1;
-+#endif
-+}
-+
-+int
-+graphics_get_scroll(void)
-+{
-+    return backend ? backend->graphics->scroll : 1;
-+}
-+
-+void
-+graphics_set_palette(int idx, int red, int green, int blue)
-+{
-+    if (backend && backend->set_palette) {
-+        backend->set_palette(backend, idx, red, green, blue);
-+      backend->set_palette(backend, 0, 0x00, 0x00, 0x00);
-+      backend->set_palette(backend, 15, 0xff, 0xff, 0xff);
-+      backend->set_palette(backend, 16, 0x00, 0x00, 0x00);
-+    }
-+}
-+
-+static char splashpath[64] = "";
-+
-+static void
-+graphics_set_splash_helper(void)
-+{
-+    if (backend) {
-+        struct xpm *xpm = NULL;
-+
-+        if (backend->graphics->splashimage)
-+            xpm_free(backend->graphics->splashimage);
-+
-+        if (splashpath[0])
-+            xpm = xpm_open(splashpath);
-+
-+        if (xpm) {
-+            backend->graphics->splashimage = xpm;
-+          grub_strcpy(backend->graphics->splashpath, splashpath);
-+        } else {
-+            backend->graphics->splashimage = NULL;
-+            backend->graphics->splashpath[0] = '\0';
-+        }
-+        backend->reset_screen_geometry(backend);
-+    }
-+}
-+
-+void
-+graphics_set_splash(char *s)
-+{
-+    if (s && s[0] != '\0')
-+        grub_strcpy(splashpath, s);
-+    else
-+        splashpath[0] = '\0';
-+    graphics_set_splash_helper();
-+}
-+
-+char *
-+graphics_get_splash(void)
-+{
-+    if (backend)
-+        return backend->graphics->splashpath;
-+    if (splashpath[0] != '\0')
-+        return splashpath;
-+    return NULL;
-+}
-+
-+struct xpm *
-+graphics_get_splash_xpm(void)
-+{
-+    if (backend)
-+        return backend->graphics->splashimage;
-+    return NULL;
-+}
-+
-+void
-+graphics_putchar(int ch)
-+{
-+    struct graphics *graphics;
-+    position_t screensz;
-+    int offset;
-+
-+    void *old_term = current_term;
-+
-+    if (!backend)
-+        return;
-+
-+    graphics = backend->graphics;
-+    graphics_get_screen_rowscols(&screensz);
-+
-+    ch &= 0xff;
-+
-+    graphics_cursor(0);
-+
-+    if (ch == '\n') {
-+        if (graphics->fonty + 1 < screensz.y) {
-+            graphics_setxy(graphics->fontx, graphics->fonty + 1);
-+        } else
-+            graphics_scroll();
-+        graphics_cursor(1);
-+        return;
-+    } else if (ch == '\r') {
-+        graphics_setxy(0, graphics->fonty);
-+        graphics_cursor(1);
-+        return;
-+    }
-+
-+    graphics_cursor(0);
-+
-+    offset = graphics->fontx + graphics->fonty * screensz.x;
-+    graphics->text[offset] = ch;
-+    graphics->text[offset] &= 0x00ff;
-+    if (graphics->current_color & 0xf0)
-+        graphics->text[offset] |= 0x100;
-+
-+    graphics_cursor(0);
-+
-+    if ((graphics->fontx + 1) >= screensz.x) {
-+        graphics_setxy(0, graphics->fonty);
-+        if (graphics->fonty + 1 < screensz.y)
-+            graphics_setxy(0, graphics->fonty + 1);
-+        else
-+            graphics_scroll();
-+    } else {
-+        graphics_setxy(graphics->fontx + 1, graphics->fonty);
-+    }
-+
-+    graphics_cursor(1);
-+}
-+
-+void
-+graphics_set_font_position(position_t *pos)
-+{
-+    if (backend) {
-+        backend->graphics->fontx = pos->x;
-+        backend->graphics->fonty = pos->y;
-+    }
-+}
-+
-+void
-+graphics_get_font_position(position_t *pos)
-+{
-+    if (backend) {
-+        pos->x = backend->graphics->fontx;
-+        pos->y = backend->graphics->fonty;
-+        return;
-+    }
-+    pos->x = -1;
-+    pos->y = -1;
-+}
-+
-+void
-+graphics_get_font_size(position_t *size)
-+{
-+    size->x = 8;
-+    size->y = 16;
-+}
-+
-+void
-+graphics_setxy(int x, int y)
-+{
-+    if (!backend)
-+        return;
-+
-+    if (backend->setxy) {
-+        position_t pos = {x, y};
-+        backend->setxy(backend, &pos);
-+        return;
-+    }
-+}
-+
-+int
-+graphics_getxy(void)
-+{
-+    int ret = 0;
-+    if (backend) {
-+        if (backend->getxy) {
-+            position_t pos;
-+            backend->getxy(backend, &pos);
-+            ret = ((pos.x & 0xff) << 8) | (pos.y & 0xff);
-+        } else {
-+            ret = ((backend->graphics->fontx & 0xff) << 8) | (backend->graphics->fonty & 0xff);
-+        }
-+    }
-+    return ret;
-+}
-+
-+void
-+graphics_scroll (void)
-+{
-+    struct graphics *graphics;
-+    position_t screensz;
-+    int i;
-+    unsigned short *text;
-+    int linesz;
-+
-+    if (!backend)
-+        return;
-+
-+    graphics = backend->graphics;
-+
-+    /* we don't want to scroll recursively... that would be bad */
-+    if (!graphics->scroll)
-+        return;
-+    graphics->scroll = 0;
-+    graphics_get_screen_rowscols(&screensz);
-+
-+    text = graphics_get_text_buf();
-+    linesz = screensz.x * sizeof (text[0]);
-+    for (i = 1; i < screensz.y; i++) {
-+        unsigned short *prev = &text[(i-1) * screensz.x];
-+        unsigned short *this = prev + screensz.x;
-+
-+        memmove(prev, this, linesz);
-+        prev = this;
-+        this += screensz.x;
-+    }
-+    graphics_setxy(0, screensz.y - 1);
-+    for (i = 0; i < screensz.x; i++) {
-+        graphics_putchar(' ');
-+        //text[(screensz.y-1) + i] = ' ';
-+    }
-+
-+    graphics_clbl(0, 0, screensz.x, screensz.y, 1);
-+    graphics_setxy(0, screensz.y - 1);
-+    graphics->scroll = 1;
-+}
-+
-+void
-+graphics_cursor(int set)
-+{
-+    if (backend && backend->cursor)
-+        backend->cursor(backend, set);
-+}
-+
-+void
-+graphics_gotoxy(int x, int y)
-+{
-+    position_t pos = {x,y};
-+    if (backend) {
-+        if (backend->gotoxy) {
-+            backend->gotoxy(backend, &pos);
-+        } else {
-+            graphics_cursor(0);
-+            graphics_setxy(x, y);
-+            graphics_cursor(1);
-+        }
-+    }
-+}
-+
-+void
-+graphics_cls(void)
-+{
-+    int x = 0, y = 0, xy;
-+    unsigned short *text;
-+    position_t screensz;
-+
-+    graphics_get_screen_rowscols(&screensz);
-+    text = graphics_get_text_buf();
-+    for (y = 0; y < screensz.y; y++)
-+            for (x = 0; x < screensz.x; x++)
-+                text[x + y * screensz.x] = ' ';
-+
-+    if (backend) {
-+        //int xy = graphics_getxy();
-+
-+        graphics_clbl(0, 0, screensz.x, screensz.y, 0);
-+        //graphics_gotoxy(xy & 0xf0 >> 8, xy & 0xf);
-+        graphics_gotoxy(0, 0);
-+    }
-+}
-+
-+void
-+graphics_clbl(int col, int row, int width, int height, int draw_text)
-+{
-+    if (backend) {
-+        int x = 0, y = 0, xy;
-+        unsigned short *text;
-+        position_t screensz;
-+
-+        graphics_get_screen_rowscols(&screensz);
-+
-+#if 0
-+        xy = graphics_getxy();
-+#endif
-+        if (backend->clbl) {
-+            backend->clbl(backend, col, row, width, height, draw_text);
-+        } else {
-+            for (y = 0; y < screensz.y; y++) {
-+                for (x = 0; x < screensz.x; x++) {
-+                    graphics_setxy(x, y);
-+                    graphics_cursor(0);
-+                }
-+            }
-+        }
-+#if 0
-+        graphics_gotoxy(xy >> 8, xy & 0xf);
-+#endif
-+    }
-+}
-+
-+void
-+graphics_setcolorstate (color_state state)
-+{
-+    struct graphics *graphics;
-+    if (!backend)
-+        return;
-+
-+    graphics = backend->graphics;
-+    
-+    switch (state) {
-+        case COLOR_STATE_STANDARD:
-+            graphics->current_color = graphics->standard_color;
-+            break;
-+        case COLOR_STATE_NORMAL:
-+            graphics->current_color = graphics->normal_color;
-+            break;
-+        case COLOR_STATE_HIGHLIGHT:
-+            graphics->current_color = graphics->highlight_color;
-+            break;
-+        default:
-+            graphics->current_color = graphics->standard_color;
-+            break;
-+    }
-+
-+    graphics->color_state = state;
-+}
-+
-+void
-+graphics_setcolor (int normal_color, int highlight_color)
-+{
-+    backend->graphics->normal_color = normal_color;
-+    backend->graphics->highlight_color = highlight_color;
-+
-+    graphics_setcolorstate (backend->graphics->color_state);
-+}
-+
-+int 
-+graphics_setcursor(int on)
-+{
-+    /* FIXME: we don't have a cursor in graphics */
-+    return 0;
-+}
-+
-+int
-+graphics_init(void)
-+{
-+    struct graphics *graphics;
-+    int i;
-+
-+    if (graphics_inited)
-+        return 1;
-+
-+    if (backend) {
-+        if (backend->enable(backend)) {
-+            graphics_inited = 1;
-+            graphics_set_splash_helper();
-+            return 1;
-+        }
-+        return 0;
-+    }
-+
-+    graphics = grub_malloc(sizeof (*graphics));
-+    if (!graphics)
-+        return 0;
-+
-+    grub_memset(graphics, '\0', sizeof (*graphics));
-+
-+    graphics->scroll = 1;
-+    graphics->fontx = 0;
-+    graphics->fonty = 0;
-+
-+    graphics->standard_color = A_NORMAL;
-+    graphics->normal_color = A_NORMAL;
-+    graphics->highlight_color = A_REVERSE;
-+    graphics->current_color = A_NORMAL;
-+    graphics->color_state = COLOR_STATE_STANDARD;
-+
-+    grub_memset(graphics->splashpath, '\0', sizeof (graphics->splashpath));
-+
-+    for(i = 0; backends[i] != NULL; i++) {
-+        backend = backends[i];
-+        backend->graphics = graphics;
-+        if (backend->enable(backend)) {
-+            graphics_inited = 1;
-+            graphics_set_splash_helper();
-+            return 1;
-+        }
-+        backend->graphics = NULL;
-+    }
-+    current_term = term_table;
-+    grub_free(graphics->text);
-+    grub_free(graphics);
-+    return 0;
-+}
-+
-+void
-+graphics_end(void)
-+{
-+    if (backend && graphics_inited) {
-+        graphics_inited = 0;
-+        backend->disable(backend);
-+    }
-+}
-+
-+#endif /* SUPPORT_GRAPHICS */
-diff --git a/efi/graphics.h b/efi/graphics.h
-new file mode 100644
-index 0000000..ecf9e0e
---- /dev/null
-+++ b/efi/graphics.h
-@@ -0,0 +1,81 @@
-+#ifndef GRUB_EFI_GRAPHICS_H
-+#define GRUB_EFI_GRAPHICS_H
-+
-+#ifdef SUPPORT_GRAPHICS
-+
-+#include <term.h>
-+#include "xpm.h"
-+
-+#define VIDEO_TYPE_EFI 0x70
-+
-+typedef void pixel_t;
-+struct graphics;
-+
-+struct position {
-+    int x;
-+    int y;
-+};
-+typedef struct position position_t;
-+
-+extern void grub_efi_setup_gfx_pci (grub_efi_handle_t handle);
-+
-+extern grub_uint16_t grub_console_getwh (void);
-+extern void graphics_set_kernel_params(struct linux_kernel_params *params);
-+extern void graphics_set_font_position(position_t *pos);
-+extern void graphics_get_font_position(position_t *pos);
-+extern void graphics_get_font_size(position_t *size);
-+extern int graphics_get_screen_rowscols(position_t *size);
-+extern int graphics_alloc_text_buf(void);
-+extern unsigned short *graphics_get_text_buf(void);
-+
-+extern int graphics_get_scroll(void);
-+
-+extern char *graphics_get_splash(void);
-+extern void graphics_setxy(int x, int y);
-+extern void graphics_cls(void);
-+extern void graphics_clbl(int x, int y, int width, int height, int draw_text);
-+extern void graphics_setcolorstate (color_state state);
-+extern void graphics_setcolor (int normal_color, int highlight_color);
-+extern int graphics_setcursor(int on);
-+extern int graphics_init(void);
-+extern void graphics_end(void);
-+extern struct xpm *graphics_get_splash_xpm(void);
-+extern void graphics_cursor(int set);
-+extern void graphics_scroll(void);
-+
-+struct graphics_backend {
-+    char *name;
-+    struct graphics *graphics;
-+    void *priv;
-+
-+    int (*enable)(struct graphics_backend *backend);
-+    void (*disable)(struct graphics_backend *backend);
-+
-+    void (*set_kernel_params)(struct graphics_backend *backend,
-+            struct linux_kernel_params *params);
-+
-+    void (*clbl)(struct graphics_backend *backend, int col, int row,
-+                                                 int width, int height,
-+                                                   int draw_text);
-+
-+    void (*set_palette)(struct graphics_backend *backend,
-+                        int idx, int red, int green, int blue);
-+    pixel_t *(*get_pixel_idx)(struct graphics_backend *backend, int idx);
-+    pixel_t *(*get_pixel_rgb)(struct graphics_backend *backend,
-+                              int red, int green, int blue);
-+    void (*draw_pixel)(struct graphics_backend *backend,
-+                       position_t *pos, pixel_t *pixel);
-+
-+    void (*reset_screen_geometry)(struct graphics_backend *backend);
-+    void (*get_screen_size)(struct graphics_backend *backend, position_t *size);
-+    void (*getxy)(struct graphics_backend *backend, position_t *pos);
-+    void (*setxy)(struct graphics_backend *backend, position_t *pos);
-+    void (*gotoxy)(struct graphics_backend *backend, position_t *pos);
-+    void (*cursor)(struct graphics_backend *backend, int set);
-+//    void (*putchar)(struct graphics_backend *backend, int ch);
-+};
-+
-+extern const unsigned char font8x16[];
-+
-+#endif /* SUPPORT_GRAPHCIS */
-+#endif /* GRUB_EFI_GRAPHICS_H */
-diff --git a/efi/grub/.gitignore b/efi/grub/.gitignore
-new file mode 100644
-index 0000000..40a991e
---- /dev/null
-+++ b/efi/grub/.gitignore
-@@ -0,0 +1 @@
-+cpu
-diff --git a/efi/grub/efi/api.h b/efi/grub/efi/api.h
-new file mode 100644
-index 0000000..81a0b3f
---- /dev/null
-+++ b/efi/grub/efi/api.h
-@@ -0,0 +1,1716 @@
-+/* efi.h - declare EFI types and functions */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2006  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifndef GRUB_EFI_API_HEADER
-+#define GRUB_EFI_API_HEADER   1
-+
-+#include <grub/types.h>
-+#include <grub/efi/eficall.h>
-+
-+/* For consistency and safety, we name the EFI-defined types differently.
-+   All names are transformed into lower case, _t appended, and
-+   grub_efi_ prepended.  */
-+
-+/* Constants.  */
-+#define GRUB_EFI_EVT_TIMER                            0x80000000
-+#define GRUB_EFI_EVT_RUNTIME                          0x40000000
-+#define GRUB_EFI_EVT_RUNTIME_CONTEXT                  0x20000000
-+#define GRUB_EFI_EVT_NOTIFY_WAIT                      0x00000100
-+#define GRUB_EFI_EVT_NOTIFY_SIGNAL                    0x00000200
-+#define GRUB_EFI_EVT_SIGNAL_EXIT_BOOT_SERVICES                0x00000201
-+#define GRUB_EFI_EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE    0x60000202
-+
-+#define GRUB_EFI_TPL_APPLICATION      4
-+#define GRUB_EFI_TPL_CALLBACK         8
-+#define GRUB_EFI_TPL_NOTIFY           16
-+#define GRUB_EFI_TPL_HIGH_LEVEL               31
-+
-+#define GRUB_EFI_MEMORY_UC    0x0000000000000001
-+#define GRUB_EFI_MEMORY_WC    0x0000000000000002
-+#define GRUB_EFI_MEMORY_WT    0x0000000000000004
-+#define GRUB_EFI_MEMORY_WB    0x0000000000000008
-+#define GRUB_EFI_MEMORY_UCE   0x0000000000000010
-+#define GRUB_EFI_MEMORY_WP    0x0000000000001000
-+#define GRUB_EFI_MEMORY_RP    0x0000000000002000
-+#define GRUB_EFI_MEMORY_XP    0x0000000000004000
-+#define GRUB_EFI_MEMORY_RUNTIME       0x8000000000000000
-+
-+#define GRUB_EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL     0x00000001
-+#define GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL           0x00000002
-+#define GRUB_EFI_OPEN_PROTOCOL_TEST_PROTOCOL          0x00000004
-+#define GRUB_EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER    0x00000008
-+#define GRUB_EFI_OPEN_PROTOCOL_BY_DRIVER              0x00000010
-+#define GRUB_EFI_OPEN_PROTOCOL_BY_EXCLUSIVE           0x00000020
-+
-+#define GRUB_EFI_VARIABLE_NON_VOLATILE                0x0000000000000001
-+#define GRUB_EFI_VARIABLE_BOOTSERVICE_ACCESS  0x0000000000000002
-+#define GRUB_EFI_VARIABLE_RUNTIME_ACCESS      0x0000000000000004
-+
-+#define GRUB_EFI_TIME_ADJUST_DAYLIGHT 0x01
-+#define GRUB_EFI_TIME_IN_DAYLIGHT     0x02
-+
-+#define GRUB_EFI_UNSPECIFIED_TIMEZONE 0x07FF
-+
-+#define GRUB_EFI_OPTIONAL_PTR 0x00000001
-+
-+#define GRUB_EFI_PCI_IO_GUID  \
-+  { 0x4cf5b200, 0x68b8, 0x4ca5, \
-+    { 0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x02, 0x9a } \
-+  }
-+
-+#define GRUB_EFI_PCI_ROOT_IO_GUID \
-+  { 0x2F707EBB, 0x4A1A, 0x11d4, \
-+      { 0x9A, 0x38, 0x00, 0x90,       0x27, 0x3F, 0xC1, 0x4D } \
-+  }
-+
-+#define GRUB_EFI_LOADED_IMAGE_GUID    \
-+  { 0x5b1b31a1, 0x9562, 0x11d2, \
-+    { 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
-+  }
-+
-+#define GRUB_EFI_DISK_IO_GUID \
-+  { 0xce345171, 0xba0b, 0x11d2, \
-+    { 0x8e, 0x4f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
-+  }
-+
-+#define GRUB_EFI_BLOCK_IO_GUID        \
-+  { 0x964e5b21, 0x6459, 0x11d2, \
-+    { 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
-+  }
-+
-+#define GRUB_EFI_DEVICE_PATH_GUID     \
-+  { 0x09576e91, 0x6d3f, 0x11d2, \
-+    { 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
-+  }
-+
-+#define GRUB_EFI_DEVICE_PATH_FROM_TEXT_GUID   \
-+  { 0x05c99a21, 0xc70f, 0x4ad2, \
-+    { 0x8a, 0x5f, 0x35, 0xdf, 0x33, 0x43, 0xf5, 0x1e } \
-+  }
-+
-+#define GRUB_EFI_GRAPHICS_OUTPUT_GUID \
-+  { 0x9042a9de, 0x23dc, 0x4a38, \
-+    { 0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } \
-+  }
-+
-+#define GRUB_EFI_UGA_DRAW_GUID \
-+  { 0x982c298b, 0xf4fa, 0x41cb, \
-+    { 0xb8, 0x38, 0x77, 0xaa, 0x68, 0x8f, 0xb8, 0x39 } \
-+  }
-+
-+#define GRUB_EFI_UGA_IO_GUID \
-+  { 0x61a4d49e, 0x6f68, 0x4f1b, \
-+    { 0xb9, 0x22, 0xa8, 0x6e, 0xed, 0xb, 0x7, 0xa2 } \
-+  }
-+
-+#define GRUB_EFI_SIMPLE_FILE_SYSTEM_GUID      \
-+  { 0x964e5b22, 0x6459, 0x11d2, \
-+    { 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
-+  }
-+
-+#define GRUB_EFI_SERIAL_IO_GUID               \
-+  { 0xbb25cf6f, 0xf1d4, 0x11d2, \
-+    { 0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3F, 0xc1, 0xfd } \
-+  }
-+
-+/* Enumerations.  */
-+enum grub_efi_timer_delay
-+{
-+  GRUB_EFI_TIMER_CANCEL,
-+  GRUB_EFI_TIMER_PERIODIC,
-+  GRUB_EFI_TIMER_RELATIVE
-+};
-+typedef enum grub_efi_timer_delay grub_efi_timer_delay_t;
-+
-+enum grub_efi_allocate_type
-+{
-+  GRUB_EFI_ALLOCATE_ANY_PAGES,
-+  GRUB_EFI_ALLOCATE_MAX_ADDRESS,
-+  GRUB_EFI_ALLOCATE_ADDRESS,
-+  GRUB_EFI_MAX_ALLOCATION_TYPE
-+};
-+typedef enum grub_efi_allocate_type grub_efi_allocate_type_t;
-+
-+enum grub_efi_memory_type
-+{
-+  GRUB_EFI_RESERVED_MEMORY_TYPE,
-+  GRUB_EFI_LOADER_CODE,
-+  GRUB_EFI_LOADER_DATA,
-+  GRUB_EFI_BOOT_SERVICES_CODE,
-+  GRUB_EFI_BOOT_SERVICES_DATA,
-+  GRUB_EFI_RUNTIME_SERVICES_CODE,
-+  GRUB_EFI_RUNTIME_SERVICES_DATA,
-+  GRUB_EFI_CONVENTIONAL_MEMORY,
-+  GRUB_EFI_UNUSABLE_MEMORY,
-+  GRUB_EFI_ACPI_RECLAIM_MEMORY,
-+  GRUB_EFI_ACPI_MEMORY_NVS,
-+  GRUB_EFI_MEMORY_MAPPED_IO,
-+  GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE,
-+  GRUB_EFI_PAL_CODE,
-+  GRUB_EFI_MAX_MEMORY_TYPE
-+};
-+typedef enum grub_efi_memory_type grub_efi_memory_type_t;
-+
-+enum grub_efi_interface_type
-+{
-+  GRUB_EFI_NATIVE_INTERFACE
-+};
-+typedef enum grub_efi_interface_type grub_efi_interface_type_t;
-+
-+enum grub_efi_locate_search_type
-+{
-+  GRUB_EFI_ALL_HANDLES,
-+  GRUB_EFI_BY_REGISTER_NOTIFY,
-+  GRUB_EFI_BY_PROTOCOL
-+};
-+typedef enum grub_efi_locate_search_type grub_efi_locate_search_type_t;
-+
-+enum grub_efi_reset_type
-+{
-+  GRUB_EFI_RESET_COLD,
-+  GRUB_EFI_RESET_WARM,
-+  GRUB_EFI_RESET_SHUTDOWN
-+};
-+typedef enum grub_efi_reset_type grub_efi_reset_type_t;
-+
-+/* Types.  */
-+typedef char grub_efi_boolean_t;
-+typedef long grub_efi_intn_t;
-+typedef unsigned long grub_efi_uintn_t;
-+typedef grub_int8_t grub_efi_int8_t;
-+typedef grub_uint8_t grub_efi_uint8_t;
-+typedef grub_int16_t grub_efi_int16_t;
-+typedef grub_uint16_t grub_efi_uint16_t;
-+typedef grub_int32_t grub_efi_int32_t;
-+typedef grub_uint32_t grub_efi_uint32_t;
-+typedef grub_int64_t grub_efi_int64_t;
-+typedef grub_uint64_t grub_efi_uint64_t;
-+typedef grub_uint8_t grub_efi_char8_t;
-+typedef grub_uint16_t grub_efi_char16_t;
-+
-+typedef grub_efi_intn_t grub_efi_status_t;
-+
-+#define GRUB_EFI_ERROR_CODE(value)    \
-+  ((1L << (sizeof (grub_efi_status_t) * 8 - 1)) | (value))
-+
-+#define GRUB_EFI_WARNING_CODE(value)  (value)
-+
-+#define GRUB_EFI_SUCCESS              0
-+
-+#define GRUB_EFI_LOAD_ERROR           GRUB_EFI_ERROR_CODE (1)
-+#define GRUB_EFI_INVALID_PARAMETER    GRUB_EFI_ERROR_CODE (2)
-+#define GRUB_EFI_UNSUPPORTED          GRUB_EFI_ERROR_CODE (3)
-+#define GRUB_EFI_BAD_BUFFER_SIZE      GRUB_EFI_ERROR_CODE (4)
-+#define GRUB_EFI_BUFFER_TOO_SMALL     GRUB_EFI_ERROR_CODE (5)
-+#define GRUB_EFI_NOT_READY            GRUB_EFI_ERROR_CODE (6)
-+#define GRUB_EFI_DEVICE_ERROR         GRUB_EFI_ERROR_CODE (7)
-+#define GRUB_EFI_WRITE_PROTECTED      GRUB_EFI_ERROR_CODE (8)
-+#define GRUB_EFI_OUT_OF_RESOURCES     GRUB_EFI_ERROR_CODE (9)
-+#define GRUB_EFI_VOLUME_CORRUPTED     GRUB_EFI_ERROR_CODE (10)
-+#define GRUB_EFI_VOLUME_FULL          GRUB_EFI_ERROR_CODE (11)
-+#define GRUB_EFI_NO_MEDIA             GRUB_EFI_ERROR_CODE (12)
-+#define GRUB_EFI_MEDIA_CHANGED                GRUB_EFI_ERROR_CODE (13)
-+#define GRUB_EFI_NOT_FOUND            GRUB_EFI_ERROR_CODE (14)
-+#define GRUB_EFI_ACCESS_DENIED                GRUB_EFI_ERROR_CODE (15)
-+#define GRUB_EFI_NO_RESPONSE          GRUB_EFI_ERROR_CODE (16)
-+#define GRUB_EFI_NO_MAPPING           GRUB_EFI_ERROR_CODE (17)
-+#define GRUB_EFI_TIMEOUT              GRUB_EFI_ERROR_CODE (18)
-+#define GRUB_EFI_NOT_STARTED          GRUB_EFI_ERROR_CODE (19)
-+#define GRUB_EFI_ALREADY_STARTED      GRUB_EFI_ERROR_CODE (20)
-+#define GRUB_EFI_ABORTED              GRUB_EFI_ERROR_CODE (21)
-+#define GRUB_EFI_ICMP_ERROR           GRUB_EFI_ERROR_CODE (22)
-+#define GRUB_EFI_TFTP_ERROR           GRUB_EFI_ERROR_CODE (23)
-+#define GRUB_EFI_PROTOCOL_ERROR               GRUB_EFI_ERROR_CODE (24)
-+#define GRUB_EFI_INCOMPATIBLE_VERSION GRUB_EFI_ERROR_CODE (25)
-+#define GRUB_EFI_SECURITY_VIOLATION   GRUB_EFI_ERROR_CODE (26)
-+#define GRUB_EFI_CRC_ERROR            GRUB_EFI_ERROR_CODE (27)
-+
-+#define GRUB_EFI_WARN_UNKNOWN_GLYPH   GRUB_EFI_WARNING_CODE (1)
-+#define GRUB_EFI_WARN_DELETE_FAILURE  GRUB_EFI_WARNING_CODE (2)
-+#define GRUB_EFI_WARN_WRITE_FAILURE   GRUB_EFI_WARNING_CODE (3)
-+#define GRUB_EFI_WARN_BUFFER_TOO_SMALL        GRUB_EFI_WARNING_CODE (4)
-+
-+typedef void *grub_efi_handle_t;
-+typedef void *grub_efi_event_t;
-+typedef grub_efi_uint64_t grub_efi_lba_t;
-+typedef grub_efi_uintn_t grub_efi_tpl_t;
-+typedef grub_uint8_t grub_efi_mac_address_t[32];
-+typedef grub_uint8_t grub_efi_ipv4_address_t[4];
-+typedef grub_uint16_t grub_efi_ipv6_address_t[8];
-+typedef grub_uint8_t grub_efi_ip_address_t[8] __attribute__ ((aligned (4)));
-+typedef grub_efi_uint64_t grub_efi_physical_address_t;
-+typedef grub_efi_uint64_t grub_efi_virtual_address_t;
-+
-+struct grub_efi_guid
-+{
-+  grub_uint32_t data1;
-+  grub_uint16_t data2;
-+  grub_uint16_t data3;
-+  grub_uint8_t data4[8];
-+} __attribute__ ((aligned (8)));
-+typedef struct grub_efi_guid grub_efi_guid_t;
-+
-+/* XXX although the spec does not specify the padding, this actually
-+   must have the padding!  */
-+struct grub_efi_memory_descriptor
-+{
-+  grub_efi_uint32_t type;
-+  grub_efi_uint32_t padding;
-+  grub_efi_physical_address_t physical_start;
-+  grub_efi_virtual_address_t virtual_start;
-+  grub_efi_uint64_t num_pages;
-+  grub_efi_uint64_t attribute;
-+};
-+typedef struct grub_efi_memory_descriptor grub_efi_memory_descriptor_t;
-+
-+/* Device Path definitions.  */
-+struct grub_efi_device_path
-+{
-+  grub_efi_uint8_t type;
-+  grub_efi_uint8_t subtype;
-+  grub_efi_uint8_t length[2];
-+};
-+typedef struct grub_efi_device_path grub_efi_device_path_t;
-+/* XXX EFI does not define EFI_DEVICE_PATH_PROTOCOL but uses it.
-+   It seems to be identical to EFI_DEVICE_PATH.  */
-+typedef struct grub_efi_device_path grub_efi_device_path_protocol_t;
-+
-+#define GRUB_EFI_DEVICE_PATH_TYPE(dp)         ((dp)->type & 0x7f)
-+#define GRUB_EFI_DEVICE_PATH_SUBTYPE(dp)      ((dp)->subtype)
-+#define GRUB_EFI_DEVICE_PATH_LENGTH(dp)               \
-+  ((dp)->length[0] | ((grub_efi_uint16_t) ((dp)->length[1]) << 8))
-+
-+/* The End of Device Path nodes.  */
-+#define GRUB_EFI_END_DEVICE_PATH_TYPE                 (0xff & 0x7f)
-+
-+#define GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE               0xff
-+#define GRUB_EFI_END_THIS_DEVICE_PATH_SUBTYPE         0x01
-+
-+#define GRUB_EFI_END_ENTIRE_DEVICE_PATH(dp)   \
-+  (GRUB_EFI_DEVICE_PATH_TYPE (dp) == GRUB_EFI_END_DEVICE_PATH_TYPE \
-+   && (GRUB_EFI_DEVICE_PATH_SUBTYPE (dp) \
-+       == GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE))
-+
-+#define GRUB_EFI_NEXT_DEVICE_PATH(dp) \
-+  ((grub_efi_device_path_t *) ((char *) (dp) \
-+                               + GRUB_EFI_DEVICE_PATH_LENGTH (dp)))
-+
-+/* Hardware Device Path.  */
-+#define GRUB_EFI_HARDWARE_DEVICE_PATH_TYPE            1
-+
-+#define GRUB_EFI_PCI_DEVICE_PATH_SUBTYPE              1
-+
-+struct grub_efi_pci_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint8_t function;
-+  grub_efi_uint8_t device;
-+};
-+typedef struct grub_efi_pci_device_path grub_efi_pci_device_path_t;
-+
-+#define GRUB_EFI_PCCARD_DEVICE_PATH_SUBTYPE           2
-+
-+struct grub_efi_pccard_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint8_t function;
-+};
-+typedef struct grub_efi_pccard_device_path grub_efi_pccard_device_path_t;
-+
-+#define GRUB_EFI_MEMORY_MAPPED_DEVICE_PATH_SUBTYPE    3
-+
-+struct grub_efi_memory_mapped_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_memory_type_t memory_type;
-+  grub_efi_physical_address_t start_address;
-+  grub_efi_physical_address_t end_address;
-+};
-+typedef struct grub_efi_memory_mapped_device_path
-+  grub_efi_memory_mapped_device_path_t;
-+
-+#define GRUB_EFI_VENDOR_DEVICE_PATH_SUBTYPE           4
-+
-+struct grub_efi_vendor_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_guid_t vendor_guid;
-+  grub_efi_uint8_t vendor_defined_data[0];
-+};
-+typedef struct grub_efi_vendor_device_path grub_efi_vendor_device_path_t;
-+
-+#define GRUB_EFI_CONTROLLER_DEVICE_PATH_SUBTYPE               5
-+
-+struct grub_efi_controller_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint32_t controller_number;
-+};
-+typedef struct grub_efi_controller_device_path
-+  grub_efi_controller_device_path_t;
-+
-+/* ACPI Device Path.  */
-+#define GRUB_EFI_ACPI_DEVICE_PATH_TYPE                        2
-+
-+#define GRUB_EFI_ACPI_DEVICE_PATH_SUBTYPE             1
-+
-+struct grub_efi_acpi_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint32_t hid;
-+  grub_efi_uint32_t uid;
-+};
-+typedef struct grub_efi_acpi_device_path grub_efi_acpi_device_path_t;
-+
-+#define GRUB_EFI_EXPANDED_ACPI_DEVICE_PATH_SUBTYPE    2
-+
-+struct grub_efi_expanded_acpi_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint32_t hid;
-+  grub_efi_uint32_t uid;
-+  grub_efi_uint32_t cid;
-+  char hidstr[1];
-+};
-+typedef struct grub_efi_expanded_acpi_device_path
-+  grub_efi_expanded_acpi_device_path_t;
-+
-+#define GRUB_EFI_EXPANDED_ACPI_HIDSTR(dp)     \
-+  (((grub_efi_expanded_acpi_device_path_t *) dp)->hidstr)
-+#define GRUB_EFI_EXPANDED_ACPI_UIDSTR(dp)     \
-+  (GRUB_EFI_EXPANDED_ACPI_HIDSTR(dp) \
-+   + grub_strlen (GRUB_EFI_EXPANDED_ACPI_HIDSTR(dp)) + 1)
-+#define GRUB_EFI_EXPANDED_ACPI_CIDSTR(dp)     \
-+  (GRUB_EFI_EXPANDED_ACPI_UIDSTR(dp) \
-+   + grub_strlen (GRUB_EFI_EXPANDED_ACPI_UIDSTR(dp)) + 1)
-+
-+/* Messaging Device Path.  */
-+#define GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE           3
-+
-+#define GRUB_EFI_ATAPI_DEVICE_PATH_SUBTYPE            1
-+
-+struct grub_efi_atapi_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint8_t primary_secondary;
-+  grub_efi_uint8_t slave_master;
-+  grub_efi_uint16_t lun;
-+};
-+typedef struct grub_efi_atapi_device_path grub_efi_atapi_device_path_t;
-+
-+#define GRUB_EFI_SCSI_DEVICE_PATH_SUBTYPE             2
-+
-+struct grub_efi_scsi_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint16_t pun;
-+  grub_efi_uint16_t lun;
-+};
-+typedef struct grub_efi_scsi_device_path grub_efi_scsi_device_path_t;
-+
-+#define GRUB_EFI_FIBRE_CHANNEL_DEVICE_PATH_SUBTYPE    3
-+
-+struct grub_efi_fibre_channel_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint32_t reserved;
-+  grub_efi_uint64_t wwn;
-+  grub_efi_uint64_t lun;
-+};
-+typedef struct grub_efi_fibre_channel_device_path
-+  grub_efi_fibre_channel_device_path_t;
-+
-+#define GRUB_EFI_1394_DEVICE_PATH_SUBTYPE             4
-+
-+struct grub_efi_1394_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint32_t reserved;
-+  grub_efi_uint64_t guid;
-+};
-+typedef struct grub_efi_1394_device_path grub_efi_1394_device_path_t;
-+
-+#define GRUB_EFI_USB_DEVICE_PATH_SUBTYPE              5
-+
-+struct grub_efi_usb_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint8_t parent_port_number;
-+  grub_efi_uint8_t interface;
-+};
-+typedef struct grub_efi_usb_device_path grub_efi_usb_device_path_t;
-+
-+#define GRUB_EFI_USB_CLASS_DEVICE_PATH_SUBTYPE                15
-+
-+struct grub_efi_usb_class_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint16_t vendor_id;
-+  grub_efi_uint16_t product_id;
-+  grub_efi_uint8_t device_class;
-+  grub_efi_uint8_t device_subclass;
-+  grub_efi_uint8_t device_protocol;
-+};
-+typedef struct grub_efi_usb_class_device_path
-+  grub_efi_usb_class_device_path_t;
-+
-+#define GRUB_EFI_I2O_DEVICE_PATH_SUBTYPE              6
-+
-+struct grub_efi_i2o_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint32_t tid;
-+};
-+typedef struct grub_efi_i2o_device_path grub_efi_i2o_device_path_t;
-+
-+#define GRUB_EFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE      11
-+
-+struct grub_efi_mac_address_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_mac_address_t mac_address;
-+  grub_efi_uint8_t if_type;
-+};
-+typedef struct grub_efi_mac_address_device_path
-+  grub_efi_mac_address_device_path_t;
-+
-+#define GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE             12
-+
-+struct grub_efi_ipv4_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_ipv4_address_t local_ip_address;
-+  grub_efi_ipv4_address_t remote_ip_address;
-+  grub_efi_uint16_t local_port;
-+  grub_efi_uint16_t remote_port;
-+  grub_efi_uint16_t protocol;
-+  grub_efi_uint8_t static_ip_address;
-+};
-+typedef struct grub_efi_ipv4_device_path grub_efi_ipv4_device_path_t;
-+
-+#define GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE             13
-+
-+struct grub_efi_ipv6_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_ipv6_address_t local_ip_address;
-+  grub_efi_ipv6_address_t remote_ip_address;
-+  grub_efi_uint16_t local_port;
-+  grub_efi_uint16_t remote_port;
-+  grub_efi_uint16_t protocol;
-+  grub_efi_uint8_t static_ip_address;
-+};
-+typedef struct grub_efi_ipv6_device_path grub_efi_ipv6_device_path_t;
-+
-+#define GRUB_EFI_INFINIBAND_DEVICE_PATH_SUBTYPE               9
-+
-+struct grub_efi_infiniband_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint32_t resource_flags;
-+  grub_efi_uint8_t port_gid[16];
-+  grub_efi_uint64_t remote_id;
-+  grub_efi_uint64_t target_port_id;
-+  grub_efi_uint64_t device_id;
-+};
-+typedef struct grub_efi_infiniband_device_path
-+  grub_efi_infiniband_device_path_t;
-+
-+#define GRUB_EFI_UART_DEVICE_PATH_SUBTYPE             14
-+
-+struct grub_efi_uart_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint32_t reserved;
-+  grub_efi_uint64_t baud_rate;
-+  grub_efi_uint8_t data_bits;
-+  grub_efi_uint8_t parity;
-+  grub_efi_uint8_t stop_bits;
-+};
-+typedef struct grub_efi_uart_device_path grub_efi_uart_device_path_t;
-+
-+#define GRUB_EFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE 10
-+
-+struct grub_efi_vendor_messaging_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_guid_t vendor_guid;
-+  grub_efi_uint8_t vendor_defined_data[0];
-+};
-+typedef struct grub_efi_vendor_messaging_device_path
-+  grub_efi_vendor_messaging_device_path_t;
-+
-+/* Media Device Path.  */
-+#define GRUB_EFI_MEDIA_DEVICE_PATH_TYPE                       4
-+
-+#define GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE               1
-+
-+struct grub_efi_hard_drive_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint32_t partition_number;
-+  grub_efi_lba_t partition_start;
-+  grub_efi_lba_t partition_size;
-+  grub_efi_uint8_t partition_signature[16];
-+  grub_efi_uint8_t mbr_type;
-+  grub_efi_uint8_t signature_type;
-+};
-+typedef struct grub_efi_hard_drive_device_path
-+  grub_efi_hard_drive_device_path_t;
-+
-+#define GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE            2
-+
-+struct grub_efi_cdrom_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint32_t boot_entry;
-+  grub_efi_lba_t partition_start;
-+  grub_efi_lba_t partition_size;
-+};
-+typedef struct grub_efi_cdrom_device_path grub_efi_cdrom_device_path_t;
-+
-+#define GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE     3
-+
-+struct grub_efi_vendor_media_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_guid_t vendor_guid;
-+  grub_efi_uint8_t vendor_defined_data[0];
-+};
-+typedef struct grub_efi_vendor_media_device_path
-+  grub_efi_vendor_media_device_path_t;
-+
-+#define GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE                4
-+
-+struct grub_efi_file_path_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_char16_t path_name[0];
-+};
-+typedef struct grub_efi_file_path_device_path
-+  grub_efi_file_path_device_path_t;
-+
-+#define GRUB_EFI_PROTOCOL_DEVICE_PATH_SUBTYPE         5
-+
-+struct grub_efi_protocol_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_guid_t guid;
-+};
-+typedef struct grub_efi_protocol_device_path grub_efi_protocol_device_path_t;
-+
-+/* BIOS Boot Specification Device Path.  */
-+#define GRUB_EFI_BIOS_DEVICE_PATH_TYPE                        5
-+
-+#define GRUB_EFI_BIOS_DEVICE_PATH_SUBTYPE             1
-+
-+struct grub_efi_bios_device_path
-+{
-+  grub_efi_device_path_t header;
-+  grub_efi_uint16_t device_type;
-+  grub_efi_uint16_t status_flags;
-+  char description[0];
-+};
-+typedef struct grub_efi_bios_device_path grub_efi_bios_device_path_t;
-+
-+struct grub_efi_device_path_from_text
-+{
-+  grub_efi_device_path_t * (*convert_text_to_device_node) (const grub_efi_char16_t *text_device_node);
-+  grub_efi_device_path_t * (*convert_text_to_device_path) (const grub_efi_char16_t *text_device_path);
-+};
-+typedef struct grub_efi_device_path_from_text grub_efi_device_path_from_text_t;
-+
-+struct grub_efi_open_protocol_information_entry
-+{
-+  grub_efi_handle_t agent_handle;
-+  grub_efi_handle_t controller_handle;
-+  grub_efi_uint32_t attributes;
-+  grub_efi_uint32_t open_count;
-+};
-+typedef struct grub_efi_open_protocol_information_entry
-+  grub_efi_open_protocol_information_entry_t;
-+
-+struct grub_efi_time
-+{
-+  grub_efi_uint16_t year;
-+  grub_efi_uint8_t month;
-+  grub_efi_uint8_t day;
-+  grub_efi_uint8_t hour;
-+  grub_efi_uint8_t minute;
-+  grub_efi_uint8_t second;
-+  grub_efi_uint8_t pad1;
-+  grub_efi_uint32_t nanosecond;
-+  grub_efi_int16_t time_zone;
-+  grub_efi_uint8_t daylight;
-+  grub_efi_uint8_t pad2;
-+};
-+typedef struct grub_efi_time grub_efi_time_t;
-+
-+struct grub_efi_time_capabilities
-+{
-+  grub_efi_uint32_t resolution;
-+  grub_efi_uint32_t accuracy;
-+  grub_efi_boolean_t sets_to_zero;
-+};
-+typedef struct grub_efi_time_capabilities grub_efi_time_capabilities_t;
-+
-+struct grub_efi_input_key
-+{
-+  grub_efi_uint16_t scan_code;
-+  grub_efi_char16_t unicode_char;
-+};
-+typedef struct grub_efi_input_key grub_efi_input_key_t;
-+
-+struct grub_efi_simple_text_output_mode
-+{
-+  grub_efi_int32_t max_mode;
-+  grub_efi_int32_t mode;
-+  grub_efi_int32_t attribute;
-+  grub_efi_int32_t cursor_column;
-+  grub_efi_int32_t cursor_row;
-+  grub_efi_boolean_t cursor_visible;
-+};
-+typedef struct grub_efi_simple_text_output_mode
-+  grub_efi_simple_text_output_mode_t;
-+
-+/* Tables.  */
-+struct grub_efi_table_header
-+{
-+  grub_efi_uint64_t signature;
-+  grub_efi_uint32_t revision;
-+  grub_efi_uint32_t header_size;
-+  grub_efi_uint32_t crc32;
-+  grub_efi_uint32_t reserved;
-+};
-+typedef struct grub_efi_table_header grub_efi_table_header_t;
-+
-+struct grub_efi_boot_services
-+{
-+  grub_efi_table_header_t hdr;
-+
-+    grub_efi_tpl_t (*raise_tpl) (grub_efi_tpl_t new_tpl);
-+
-+  void (*restore_tpl) (grub_efi_tpl_t old_tpl);
-+
-+    grub_efi_status_t
-+    (*allocate_pages) (grub_efi_allocate_type_t type,
-+                     grub_efi_memory_type_t memory_type,
-+                     grub_efi_uintn_t pages,
-+                     grub_efi_physical_address_t * memory);
-+
-+    grub_efi_status_t
-+    (*free_pages) (grub_efi_physical_address_t memory,
-+                 grub_efi_uintn_t pages);
-+
-+    grub_efi_status_t
-+    (*get_memory_map) (grub_efi_uintn_t * memory_map_size,
-+                     grub_efi_memory_descriptor_t * memory_map,
-+                     grub_efi_uintn_t * map_key,
-+                     grub_efi_uintn_t * descriptor_size,
-+                     grub_efi_uint32_t * descriptor_version);
-+
-+    grub_efi_status_t
-+    (*allocate_pool) (grub_efi_memory_type_t pool_type,
-+                    grub_efi_uintn_t size, void **buffer);
-+
-+    grub_efi_status_t (*free_pool) (void *buffer);
-+
-+    grub_efi_status_t
-+    (*create_event) (grub_efi_uint32_t type,
-+                   grub_efi_tpl_t notify_tpl,
-+                   void (*notify_function) (grub_efi_event_t event,
-+                                            void *context),
-+                   void *notify_context, grub_efi_event_t * event);
-+
-+    grub_efi_status_t
-+    (*set_timer) (grub_efi_event_t event,
-+                grub_efi_timer_delay_t type,
-+                grub_efi_uint64_t trigger_time);
-+
-+    grub_efi_status_t
-+    (*wait_for_event) (grub_efi_uintn_t num_events,
-+                     grub_efi_event_t * event, grub_efi_uintn_t * index);
-+
-+    grub_efi_status_t (*signal_event) (grub_efi_event_t event);
-+
-+    grub_efi_status_t (*close_event) (grub_efi_event_t event);
-+
-+    grub_efi_status_t (*check_event) (grub_efi_event_t event);
-+
-+    grub_efi_status_t
-+    (*install_protocol_interface) (grub_efi_handle_t * handle,
-+                                 grub_efi_guid_t * protocol,
-+                                 grub_efi_interface_type_t interface_type,
-+                                 void *interface);
-+
-+    grub_efi_status_t
-+    (*reinstall_protocol_interface) (grub_efi_handle_t handle,
-+                                   grub_efi_guid_t * protocol,
-+                                   void *old_interface, void *new_inteface);
-+
-+    grub_efi_status_t
-+    (*uninstall_protocol_interface) (grub_efi_handle_t handle,
-+                                   grub_efi_guid_t * protocol,
-+                                   void *interface);
-+
-+    grub_efi_status_t
-+    (*handle_protocol) (grub_efi_handle_t handle,
-+                      grub_efi_guid_t * protocol, void **interface);
-+
-+  void *reserved;
-+
-+    grub_efi_status_t
-+    (*register_protocol_notify) (grub_efi_guid_t * protocol,
-+                               grub_efi_event_t event, void **registration);
-+
-+    grub_efi_status_t
-+    (*locate_handle) (grub_efi_locate_search_type_t search_type,
-+                    grub_efi_guid_t * protocol,
-+                    void *search_key,
-+                    grub_efi_uintn_t * buffer_size,
-+                    grub_efi_handle_t * buffer);
-+
-+    grub_efi_status_t
-+    (*locate_device_path) (grub_efi_guid_t * protocol,
-+                         grub_efi_device_path_t ** device_path,
-+                         grub_efi_handle_t * device);
-+
-+    grub_efi_status_t
-+    (*install_configuration_table) (grub_efi_guid_t * guid, void *table);
-+
-+    grub_efi_status_t
-+    (*load_image) (grub_efi_boolean_t boot_policy,
-+                 grub_efi_handle_t parent_image_handle,
-+                 grub_efi_device_path_t * file_path,
-+                 void *source_buffer,
-+                 grub_efi_uintn_t source_size,
-+                 grub_efi_handle_t * image_handle);
-+
-+    grub_efi_status_t
-+    (*start_image) (grub_efi_handle_t image_handle,
-+                  grub_efi_uintn_t * exit_data_size,
-+                  grub_efi_char16_t ** exit_data);
-+
-+    grub_efi_status_t
-+    (*exit) (grub_efi_handle_t image_handle,
-+           grub_efi_status_t exit_status,
-+           grub_efi_uintn_t exit_data_size,
-+           grub_efi_char16_t * exit_data) __attribute__ ((noreturn));
-+
-+    grub_efi_status_t (*unload_image) (grub_efi_handle_t image_handle);
-+
-+    grub_efi_status_t
-+    (*exit_boot_services) (grub_efi_handle_t image_handle,
-+                         grub_efi_uintn_t map_key);
-+
-+    grub_efi_status_t (*get_next_monotonic_count) (grub_efi_uint64_t * count);
-+
-+    grub_efi_status_t (*stall) (grub_efi_uintn_t microseconds);
-+
-+    grub_efi_status_t
-+    (*set_watchdog_timer) (grub_efi_uintn_t timeout,
-+                         grub_efi_uint64_t watchdog_code,
-+                         grub_efi_uintn_t data_size,
-+                         grub_efi_char16_t * watchdog_data);
-+
-+    grub_efi_status_t
-+    (*connect_controller) (grub_efi_handle_t controller_handle,
-+                         grub_efi_handle_t * driver_image_handle,
-+                         grub_efi_device_path_protocol_t *
-+                         remaining_device_path,
-+                         grub_efi_boolean_t recursive);
-+
-+    grub_efi_status_t
-+    (*disconnect_controller) (grub_efi_handle_t controller_handle,
-+                            grub_efi_handle_t driver_image_handle,
-+                            grub_efi_handle_t child_handle);
-+
-+    grub_efi_status_t
-+    (*open_protocol) (grub_efi_handle_t handle,
-+                    grub_efi_guid_t * protocol,
-+                    void **interface,
-+                    grub_efi_handle_t agent_handle,
-+                    grub_efi_handle_t controller_handle,
-+                    grub_efi_uint32_t attributes);
-+
-+    grub_efi_status_t
-+    (*close_protocol) (grub_efi_handle_t handle,
-+                     grub_efi_guid_t * protocol,
-+                     grub_efi_handle_t agent_handle,
-+                     grub_efi_handle_t controller_handle);
-+
-+    grub_efi_status_t
-+    (*open_protocol_information) (grub_efi_handle_t handle,
-+                                grub_efi_guid_t * protocol,
-+                                grub_efi_open_protocol_information_entry_t
-+                                ** entry_buffer,
-+                                grub_efi_uintn_t * entry_count);
-+
-+    grub_efi_status_t
-+    (*protocols_per_handle) (grub_efi_handle_t handle,
-+                           grub_efi_guid_t *** protocol_buffer,
-+                           grub_efi_uintn_t * protocol_buffer_count);
-+
-+    grub_efi_status_t
-+    (*locate_handle_buffer) (grub_efi_locate_search_type_t search_type,
-+                           grub_efi_guid_t * protocol,
-+                           void *search_key,
-+                           grub_efi_uintn_t * no_handles,
-+                           grub_efi_handle_t ** buffer);
-+
-+    grub_efi_status_t
-+    (*locate_protocol) (grub_efi_guid_t * protocol,
-+                      void *registration, void **interface);
-+
-+    grub_efi_status_t
-+    (*install_multiple_protocol_interfaces) (grub_efi_handle_t * handle, ...);
-+
-+    grub_efi_status_t
-+    (*uninstall_multiple_protocol_interfaces) (grub_efi_handle_t handle, ...);
-+
-+    grub_efi_status_t
-+    (*calculate_crc32) (void *data,
-+                      grub_efi_uintn_t data_size,
-+                      grub_efi_uint32_t * crc32);
-+
-+  void (*copy_mem) (void *destination, void *source, grub_efi_uintn_t length);
-+
-+  void
-+    (*set_mem) (void *buffer, grub_efi_uintn_t size, grub_efi_uint8_t value);
-+};
-+typedef struct grub_efi_boot_services grub_efi_boot_services_t;
-+
-+struct grub_efi_runtime_services
-+{
-+  grub_efi_table_header_t hdr;
-+
-+    grub_efi_status_t
-+    (*get_time) (grub_efi_time_t * time,
-+               grub_efi_time_capabilities_t * capabilities);
-+
-+    grub_efi_status_t (*set_time) (grub_efi_time_t * time);
-+
-+    grub_efi_status_t
-+    (*get_wakeup_time) (grub_efi_boolean_t * enabled,
-+                      grub_efi_boolean_t * pending, grub_efi_time_t * time);
-+
-+    grub_efi_status_t
-+    (*set_wakeup_time) (grub_efi_boolean_t enabled, grub_efi_time_t * time);
-+
-+    grub_efi_status_t
-+    (*set_virtual_address_map) (grub_efi_uintn_t memory_map_size,
-+                              grub_efi_uintn_t descriptor_size,
-+                              grub_efi_uint32_t descriptor_version,
-+                              grub_efi_memory_descriptor_t * virtual_map);
-+
-+    grub_efi_status_t
-+    (*convert_pointer) (grub_efi_uintn_t debug_disposition, void **address);
-+
-+    grub_efi_status_t
-+    (*get_variable) (grub_efi_char16_t * variable_name,
-+                   grub_efi_guid_t * vendor_guid,
-+                   grub_efi_uint32_t * attributes,
-+                   grub_efi_uintn_t * data_size, void *data);
-+
-+    grub_efi_status_t
-+    (*get_next_variable_name) (grub_efi_uintn_t * variable_name_size,
-+                             grub_efi_char16_t * variable_name,
-+                             grub_efi_guid_t * vendor_guid);
-+
-+    grub_efi_status_t
-+    (*set_variable) (grub_efi_char16_t * variable_name,
-+                   grub_efi_guid_t * vendor_guid,
-+                   grub_efi_uint32_t attributes,
-+                   grub_efi_uintn_t data_size, void *data);
-+
-+    grub_efi_status_t
-+    (*get_next_high_monotonic_count) (grub_efi_uint32_t * high_count);
-+
-+  void
-+    (*reset_system) (grub_efi_reset_type_t reset_type,
-+                   grub_efi_status_t reset_status,
-+                   grub_efi_uintn_t data_size,
-+                   grub_efi_char16_t * reset_data);
-+};
-+typedef struct grub_efi_runtime_services grub_efi_runtime_services_t;
-+
-+struct grub_efi_configuration_table
-+{
-+  grub_efi_guid_t vendor_guid;
-+  void *vendor_table;
-+};
-+typedef struct grub_efi_configuration_table grub_efi_configuration_table_t;
-+
-+struct grub_efi_simple_input_interface
-+{
-+  grub_efi_status_t
-+    (*reset) (struct grub_efi_simple_input_interface * this,
-+            grub_efi_boolean_t extended_verification);
-+
-+  grub_efi_status_t
-+    (*read_key_stroke) (struct grub_efi_simple_input_interface * this,
-+                      grub_efi_input_key_t * key);
-+
-+  grub_efi_event_t wait_for_key;
-+};
-+typedef struct grub_efi_simple_input_interface
-+  grub_efi_simple_input_interface_t;
-+
-+struct grub_efi_simple_text_output_interface
-+{
-+  grub_efi_status_t
-+    (*reset) (struct grub_efi_simple_text_output_interface * this,
-+            grub_efi_boolean_t extended_verification);
-+
-+  grub_efi_status_t
-+    (*output_string) (struct grub_efi_simple_text_output_interface * this,
-+                    grub_efi_char16_t * string);
-+
-+  grub_efi_status_t
-+    (*test_string) (struct grub_efi_simple_text_output_interface * this,
-+                  grub_efi_char16_t * string);
-+
-+  grub_efi_status_t
-+    (*query_mode) (struct grub_efi_simple_text_output_interface * this,
-+                 grub_efi_uintn_t mode_number,
-+                 grub_efi_uintn_t * columns, grub_efi_uintn_t * rows);
-+
-+  grub_efi_status_t
-+    (*set_mode) (struct grub_efi_simple_text_output_interface * this,
-+               grub_efi_uintn_t mode_number);
-+
-+  grub_efi_status_t
-+    (*set_attributes) (struct grub_efi_simple_text_output_interface * this,
-+                     grub_efi_uintn_t attribute);
-+
-+  grub_efi_status_t
-+    (*clear_screen) (struct grub_efi_simple_text_output_interface * this);
-+
-+  grub_efi_status_t
-+    (*set_cursor_position) (struct grub_efi_simple_text_output_interface *
-+                          this, grub_efi_uintn_t column,
-+                          grub_efi_uintn_t row);
-+
-+  grub_efi_status_t
-+    (*enable_cursor) (struct grub_efi_simple_text_output_interface * this,
-+                    grub_efi_boolean_t visible);
-+
-+  grub_efi_simple_text_output_mode_t *mode;
-+};
-+typedef struct grub_efi_simple_text_output_interface
-+  grub_efi_simple_text_output_interface_t;
-+
-+#define GRUB_EFI_BLACK                0x00
-+#define GRUB_EFI_BLUE         0x01
-+#define GRUB_EFI_GREEN                0x02
-+#define GRUB_EFI_CYAN         0x03
-+#define GRUB_EFI_RED          0x04
-+#define GRUB_EFI_MAGENTA      0x05
-+#define GRUB_EFI_BROWN                0x06
-+#define GRUB_EFI_LIGHTGRAY    0x07
-+#define GRUB_EFI_BRIGHT               0x08
-+#define GRUB_EFI_DARKGRAY     0x08
-+#define GRUB_EFI_LIGHTBLUE    0x09
-+#define GRUB_EFI_LIGHTGREEN   0x0A
-+#define GRUB_EFI_LIGHTCYAN    0x0B
-+#define GRUB_EFI_LIGHTRED     0x0C
-+#define GRUB_EFI_LIGHTMAGENTA 0x0D
-+#define GRUB_EFI_YELLOW               0x0E
-+#define GRUB_EFI_WHITE                0x0F
-+
-+#define GRUB_EFI_BACKGROUND_BLACK     0x00
-+#define GRUB_EFI_BACKGROUND_BLUE      0x10
-+#define GRUB_EFI_BACKGROUND_GREEN     0x20
-+#define GRUB_EFI_BACKGROUND_CYAN      0x30
-+#define GRUB_EFI_BACKGROUND_RED               0x40
-+#define GRUB_EFI_BACKGROUND_MAGENTA   0x50
-+#define GRUB_EFI_BACKGROUND_BROWN     0x60
-+#define GRUB_EFI_BACKGROUND_LIGHTGRAY 0x70
-+
-+#define GRUB_EFI_TEXT_ATTR(fg, bg)    ((fg) | ((bg)))
-+
-+struct grub_efi_system_table
-+{
-+  grub_efi_table_header_t hdr;
-+  grub_efi_char16_t *firmware_vendor;
-+  grub_efi_uint32_t firmware_revision;
-+  grub_efi_handle_t console_in_handler;
-+  grub_efi_simple_input_interface_t *con_in;
-+  grub_efi_handle_t console_out_handler;
-+  grub_efi_simple_text_output_interface_t *con_out;
-+  grub_efi_handle_t standard_error_handle;
-+  grub_efi_simple_text_output_interface_t *std_err;
-+  grub_efi_runtime_services_t *runtime_services;
-+  grub_efi_boot_services_t *boot_services;
-+  grub_efi_uintn_t num_table_entries;
-+  grub_efi_configuration_table_t *configuration_table;
-+};
-+typedef struct grub_efi_system_table grub_efi_system_table_t;
-+
-+struct grub_efi_loaded_image
-+{
-+  grub_efi_uint32_t revision;
-+  grub_efi_handle_t parent_handle;
-+  grub_efi_system_table_t *system_table;
-+
-+  grub_efi_handle_t device_handle;
-+  grub_efi_device_path_t *file_path;
-+  void *reserved;
-+
-+  grub_efi_uint32_t load_options_size;
-+  void *load_options;
-+
-+  void *image_base;
-+  grub_efi_uint64_t image_size;
-+  grub_efi_memory_type_t image_code_type;
-+  grub_efi_memory_type_t image_data_type;
-+
-+    grub_efi_status_t (*unload) (grub_efi_handle_t image_handle);
-+};
-+typedef struct grub_efi_loaded_image grub_efi_loaded_image_t;
-+
-+struct grub_efi_disk_io
-+{
-+  grub_efi_uint64_t revision;
-+    grub_efi_status_t (*read) (struct grub_efi_disk_io * this,
-+                             grub_efi_uint32_t media_id,
-+                             grub_efi_uint64_t offset,
-+                             grub_efi_uintn_t buffer_size, void *buffer);
-+    grub_efi_status_t (*write) (struct grub_efi_disk_io * this,
-+                              grub_efi_uint32_t media_id,
-+                              grub_efi_uint64_t offset,
-+                              grub_efi_uintn_t buffer_size, void *buffer);
-+};
-+typedef struct grub_efi_disk_io grub_efi_disk_io_t;
-+
-+struct grub_efi_block_io_media
-+{
-+  grub_efi_uint32_t media_id;
-+  grub_efi_boolean_t removable_media;
-+  grub_efi_boolean_t media_present;
-+  grub_efi_boolean_t logical_partition;
-+  grub_efi_boolean_t read_only;
-+  grub_efi_boolean_t write_caching;
-+  grub_efi_uint8_t pad[3];
-+  grub_efi_uint32_t block_size;
-+  grub_efi_uint32_t io_align;
-+  grub_efi_uint8_t pad2[4];
-+  grub_efi_lba_t last_block;
-+};
-+typedef struct grub_efi_block_io_media grub_efi_block_io_media_t;
-+
-+struct grub_efi_block_io
-+{
-+  grub_efi_uint64_t revision;
-+  grub_efi_block_io_media_t *media;
-+    grub_efi_status_t (*reset) (struct grub_efi_block_io * this,
-+                              grub_efi_boolean_t extended_verification);
-+    grub_efi_status_t (*read_blocks) (struct grub_efi_block_io * this,
-+                                    grub_efi_uint32_t media_id,
-+                                    grub_efi_lba_t lba,
-+                                    grub_efi_uintn_t buffer_size,
-+                                    void *buffer);
-+    grub_efi_status_t (*write_blocks) (struct grub_efi_block_io * this,
-+                                     grub_efi_uint32_t media_id,
-+                                     grub_efi_lba_t lba,
-+                                     grub_efi_uintn_t buffer_size,
-+                                     void *buffer);
-+    grub_efi_status_t (*flush_blocks) (struct grub_efi_block_io * this);
-+};
-+typedef struct grub_efi_block_io grub_efi_block_io_t;
-+
-+struct grub_efi_pixel_bitmask
-+{
-+  grub_efi_uint32_t red_mask;
-+  grub_efi_uint32_t green_mask;
-+  grub_efi_uint32_t blue_mask;
-+  grub_efi_uint32_t reserved_mask;
-+};
-+typedef struct grub_efi_pixel_bitmask grub_efi_pixel_bitmask_t;
-+
-+enum grub_efi_graphics_pixel_format
-+{
-+  GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR,
-+  GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR,
-+  GRUB_EFI_PIXEL_BIT_MASK,
-+  GRUB_EFI_PIXEL_BLT_ONLY,
-+};
-+typedef enum grub_efi_graphics_pixel_format grub_efi_graphics_pixel_format_t;
-+
-+struct grub_efi_graphics_output_mode_information
-+{
-+  grub_efi_uint32_t version;
-+  grub_efi_uint32_t horizontal_resolution;
-+  grub_efi_uint32_t vertical_resolution;
-+  grub_efi_graphics_pixel_format_t pixel_format;
-+  grub_efi_pixel_bitmask_t pixel_information;
-+  grub_efi_uint32_t pixels_per_scan_line;
-+};
-+typedef struct grub_efi_graphics_output_mode_information
-+  grub_efi_graphics_output_mode_information_t;
-+
-+struct grub_efi_graphics_output_bgrr_pixel
-+{
-+  grub_efi_uint8_t blue;
-+  grub_efi_uint8_t green;
-+  grub_efi_uint8_t red;
-+  grub_efi_uint8_t reserved;
-+};
-+typedef struct grub_efi_graphics_output_bgrr_pixel
-+  grub_efi_graphics_output_bgrr_pixel_t;
-+typedef struct grub_efi_graphics_output_bgrr_pixel
-+  grub_efi_graphics_output_blt_pixel_t;
-+typedef struct grub_efi_graphics_output_bgrr_pixel
-+  grub_efi_uga_pixel_t;
-+
-+struct grub_efi_graphics_output_rgbr_pixel
-+{
-+  grub_efi_uint8_t red;
-+  grub_efi_uint8_t green;
-+  grub_efi_uint8_t blue;
-+  grub_efi_uint8_t reserved;
-+};
-+typedef struct grub_efi_graphics_output_rgbr_pixel
-+  grub_efi_graphics_output_rgbr_pixel_t;
-+
-+union grub_efi_graphics_output_pixel
-+{
-+  grub_efi_graphics_output_rgbr_pixel_t rgbr;
-+  grub_efi_graphics_output_bgrr_pixel_t bgrr;
-+  grub_efi_uint32_t raw;
-+};
-+typedef union grub_efi_graphics_output_pixel
-+  grub_efi_graphics_output_pixel_t;
-+
-+enum grub_efi_graphics_output_blt_operation
-+{
-+  GRUB_EFI_BLT_VIDEO_FILL,
-+  GRUB_EFI_BLT_VIDEO_TO_BLT_BUFFER,
-+  GRUB_EFI_BLT_BUFFER_TO_VIDEO,
-+  GRUB_EFI_BLT_VIDEO_TO_VIDEO,
-+};
-+typedef enum grub_efi_graphics_output_blt_operation
-+  grub_efi_graphics_output_blt_operation_t;
-+
-+struct grub_efi_graphics_output_mode
-+{
-+  grub_efi_uint32_t max_mode;
-+  grub_efi_uint32_t mode;
-+  grub_efi_graphics_output_mode_information_t *info;
-+  grub_efi_uintn_t size_of_info;
-+  grub_efi_physical_address_t frame_buffer_base;
-+  grub_efi_uintn_t frame_buffer_size;
-+};
-+typedef struct grub_efi_graphics_output_mode grub_efi_graphics_output_mode_t;
-+
-+struct grub_efi_graphics_output
-+{
-+  grub_efi_status_t (*query_mode) (struct grub_efi_graphics_output * this,
-+                                 grub_efi_uint32_t mode_number,
-+                                 grub_efi_uintn_t * size_of_info,
-+                                 grub_efi_graphics_output_mode_information_t
-+                                 ** info);
-+  grub_efi_status_t (*set_mode) (struct grub_efi_graphics_output * this,
-+                               grub_efi_uint32_t mode_number);
-+
-+  grub_efi_status_t (*blt) (struct grub_efi_graphics_output * this,
-+                          grub_efi_graphics_output_blt_pixel_t * blt_buffer,
-+                          grub_efi_graphics_output_blt_operation_t
-+                          blt_operation, grub_efi_uintn_t src_x,
-+                          grub_efi_uintn_t src_y, grub_efi_uintn_t dest_x,
-+                          grub_efi_uintn_t dest_y, grub_efi_uintn_t width,
-+                          grub_efi_uintn_t height, grub_efi_uintn_t delta);
-+  grub_efi_graphics_output_mode_t *mode;
-+};
-+typedef struct grub_efi_graphics_output grub_efi_graphics_output_t;
-+
-+typedef enum {
-+  EfiUgaVideoFill,
-+  EfiUgaVideoToBltBuffer,
-+  EfiUgaBltBufferToVideo,
-+  EfiUgaVideoToVideo,
-+  EfiUgaBltMax
-+} grub_efi_uga_blt_operation_t;
-+
-+typedef enum {
-+  grub_efi_pci_io_width_uint8,
-+  grub_efi_pci_io_width_uint16,
-+  grub_efi_pci_io_width_uint32,
-+  grub_efi_pci_io_width_uint64,
-+  grub_efi_pci_io_width_fifo_uint8,
-+  grub_efi_pci_io_width_fifo_uint16,
-+  grub_efi_pci_io_width_fifo_uint32,
-+  grub_efi_pci_io_width_fifo_uint64,
-+  grub_efi_pci_io_width_fill_uint8,
-+  grub_efi_pci_io_width_fill_uint16,
-+  grub_efi_pci_io_width_fill_uint32,
-+  grub_efi_pci_io_width_fill_uint64,
-+  grub_efi_pci_io_width_maximum
-+} grub_efi_pci_io_width;
-+
-+struct grub_efi_pci_io;
-+
-+typedef struct
-+{
-+  grub_efi_status_t(*read) (struct grub_efi_pci_io *this,
-+                          grub_efi_pci_io_width width,
-+                          grub_efi_uint8_t bar_index,
-+                          grub_efi_uint64_t offset,
-+                          grub_efi_uintn_t count,
-+                          void *buffer);
-+  grub_efi_status_t(*write) (struct grub_efi_pci_io *this,
-+                          grub_efi_pci_io_width width,
-+                          grub_efi_uint8_t bar_index,
-+                          grub_efi_uint64_t offset,
-+                          grub_efi_uintn_t count,
-+                          void *buffer);
-+} grub_efi_pci_io_access_t;
-+
-+typedef struct
-+{
-+  grub_efi_status_t( *read) (struct grub_efi_pci_io *this,
-+                           grub_efi_pci_io_width width,
-+                           grub_efi_uint32_t offset,
-+                           grub_efi_uintn_t count,
-+                           void *buffer);
-+  grub_efi_status_t( *write) (struct grub_efi_pci_io *this,
-+                           grub_efi_pci_io_width width,
-+                           grub_efi_uint32_t offset,
-+                           grub_efi_uintn_t count,
-+                           void *buffer);
-+} grub_efi_pci_io_config_access_t;
-+
-+typedef enum {
-+  grub_efi_pci_io_operation_bus_masterread,
-+  grub_efi_pci_io_operation_bus_masterwrite,
-+  grub_efi_pci_io_operation_bus_master_common_buffer,
-+  grub_efi_pci_io_operation_maximum
-+} grub_efi_pci_io_operation_t;
-+
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_ISA_IO               0x0002
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO       0x0004
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY           0x0008
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_IO               0x0010
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO       0x0020
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO     0x0040
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x0080
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_IO                   0x0100
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY               0x0200
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_BUS_MASTER           0x0400
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY_CACHED        0x0800
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY_DISABLE       0x1000
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_EMBEDDED_DEVICE      0x2000
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM         0x4000
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE   0x8000
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_ISA_IO_16            0x10000
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16    0x20000
-+#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_IO_16            0x40000
-+
-+typedef enum {
-+  grub_efi_pci_io_attribute_operation_get,
-+  grub_efi_pci_io_attribute_operation_set,
-+  grub_efi_pci_io_attribute_operation_enable,
-+  grub_efi_pci_io_attribute_operation_disable,
-+  grub_efi_pci_io_attribute_operation_supported,
-+  grub_efi_pci_io_attribute_operation_maximum
-+} grub_efi_pci_io_attribute_operation_t;
-+
-+struct grub_efi_pci_io {
-+  grub_efi_status_t (*poll_mem) (struct grub_efi_pci_io *this,
-+                               grub_efi_pci_io_width  width,
-+                               grub_efi_uint8_t bar_ndex,
-+                               grub_efi_uint64_t offset,
-+                               grub_efi_uint64_t mask,
-+                               grub_efi_uint64_t value,
-+                               grub_efi_uint64_t delay,
-+                               grub_efi_uint64_t *result);
-+  grub_efi_status_t (*poll_io) (struct grub_efi_pci_io *this,
-+                              grub_efi_pci_io_width  Width,
-+                              grub_efi_uint8_t bar_index,
-+                              grub_efi_uint64_t offset,
-+                              grub_efi_uint64_t mask,
-+                              grub_efi_uint64_t value,
-+                              grub_efi_uint64_t delay,
-+                              grub_efi_uint64_t *result);
-+  grub_efi_pci_io_access_t mem;
-+  grub_efi_pci_io_access_t io;
-+  grub_efi_pci_io_config_access_t pci;
-+  grub_efi_status_t (*copy_mem) (struct grub_efi_pci_io *this,
-+                               grub_efi_pci_io_width width,
-+                               grub_efi_uint8_t dest_bar_index,
-+                               grub_efi_uint64_t dest_offset,
-+                               grub_efi_uint8_t src_bar_index,
-+                               grub_efi_uint64_t src_offset,
-+                               grub_efi_uintn_t count);
-+  grub_efi_status_t (*map) ( struct grub_efi_pci_io *this,
-+                           grub_efi_pci_io_operation_t operation,
-+                           void *host_address,
-+                           grub_efi_uintn_t *number_of_bytes,
-+                           grub_efi_uint64_t *device_address,
-+                           void **mapping);
-+  grub_efi_status_t (*unmap) (struct grub_efi_pci_io *this,
-+                            void *mapping);
-+  grub_efi_status_t (*allocate_buffer) (struct grub_efi_pci_io *this,
-+                                      grub_efi_allocate_type_t type,
-+                                      grub_efi_memory_type_t memory_type,
-+                                      grub_efi_uintn_t pages,
-+                                      void **host_address,
-+                                      grub_efi_uint64_t attributes);
-+  grub_efi_status_t (*free_buffer) (struct grub_efi_pci_io *this,
-+                                      grub_efi_allocate_type_t type,
-+                                      grub_efi_memory_type_t memory_type,
-+                                      grub_efi_uintn_t pages,
-+                                      void **host_address,
-+                                      grub_efi_uint64_t attributes);
-+  grub_efi_status_t (*flush) (struct grub_efi_pci_io *this);
-+  grub_efi_status_t (*get_location) (struct grub_efi_pci_io *this,
-+                                   grub_efi_uintn_t *segment_number,
-+                                   grub_efi_uintn_t *bus_number,
-+                                   grub_efi_uintn_t *device_number,
-+                                   grub_efi_uintn_t *function_number);
-+  grub_efi_status_t (*attributes) (struct grub_efi_pci_io *this,
-+                                 grub_efi_pci_io_attribute_operation_t operation,
-+                                 grub_efi_uint64_t attributes,
-+                                 grub_efi_uint64_t *result);
-+  grub_efi_status_t (*get_bar_attributes) (struct grub_efi_pci_io *this,
-+                                         grub_efi_uint8_t bar_index,
-+                                         grub_efi_uint64_t *supports,
-+                                         void **resources);
-+  grub_efi_status_t (*set_bar_attributes) (struct grub_efi_pci_io *this,
-+                                         grub_efi_uint64_t attributes,
-+                                         grub_efi_uint8_t bar_index,
-+                                         grub_efi_uint64_t *offset,
-+                                         grub_efi_uint64_t *length);
-+  grub_efi_uint64_t rom_size;
-+  void *rom_image;
-+};
-+typedef struct grub_efi_pci_io grub_efi_pci_io_t;
-+
-+struct grub_efi_pci_root_io;
-+
-+typedef struct
-+{
-+  grub_efi_status_t(*read) (struct grub_efi_pci_root_io *this,
-+                          grub_efi_pci_io_width width,
-+                          grub_efi_uint64_t address,
-+                          grub_efi_uintn_t count,
-+                          void *buffer);
-+  grub_efi_status_t(*write) (struct grub_efi_pci_root_io *this,
-+                          grub_efi_pci_io_width width,
-+                          grub_efi_uint64_t address,
-+                          grub_efi_uintn_t count,
-+                          void *buffer);
-+} grub_efi_pci_root_io_access_t;
-+
-+typedef enum {
-+  grub_efi_pci_root_io_operation_bus_master_read,
-+  grub_efi_pci_root_io_operation_bus_master_write,
-+  grub_efi_pci_root_io_operation_bus_master_common_buffer,
-+  grub_efi_pci_root_io_operation_bus_master_read_64,
-+  grub_efi_pci_root_io_operation_bus_master_write_64,
-+  grub_efi_pci_root_io_operation_bus_master_common_buffer_64,
-+  grub_efi_pci_root_io_operation_maximum
-+} grub_efi_pci_root_io_operation_t;
-+
-+struct grub_efi_pci_root_io {
-+  grub_efi_handle_t parent;
-+  grub_efi_status_t (*poll_mem) (struct grub_efi_pci_root_io *this,
-+                               grub_efi_pci_io_width  width,
-+                               grub_efi_uint64_t address,
-+                               grub_efi_uint64_t mask,
-+                               grub_efi_uint64_t value,
-+                               grub_efi_uint64_t delay,
-+                               grub_efi_uint64_t *result);
-+  grub_efi_status_t (*poll_io) (struct grub_efi_pci_root_io *this,
-+                              grub_efi_pci_io_width  Width,
-+                              grub_efi_uint64_t address,
-+                              grub_efi_uint64_t mask,
-+                              grub_efi_uint64_t value,
-+                              grub_efi_uint64_t delay,
-+                              grub_efi_uint64_t *result);
-+  grub_efi_pci_root_io_access_t mem;
-+  grub_efi_pci_root_io_access_t io;
-+  grub_efi_pci_root_io_access_t pci;
-+  grub_efi_status_t (*copy_mem) (struct grub_efi_pci_root_io *this,
-+                               grub_efi_pci_io_width width,
-+                               grub_efi_uint64_t dest_offset,
-+                               grub_efi_uint64_t src_offset,
-+                               grub_efi_uintn_t count);
-+  grub_efi_status_t (*map) ( struct grub_efi_pci_root_io *this,
-+                           grub_efi_pci_root_io_operation_t operation,
-+                           void *host_address,
-+                           grub_efi_uintn_t *number_of_bytes,
-+                           grub_efi_uint64_t *device_address,
-+                           void **mapping);
-+  grub_efi_status_t (*unmap) (struct grub_efi_pci_root_io *this,
-+                            void *mapping);
-+  grub_efi_status_t (*allocate_buffer) (struct grub_efi_pci_root_io *this,
-+                                      grub_efi_allocate_type_t type,
-+                                      grub_efi_memory_type_t memory_type,
-+                                      grub_efi_uintn_t pages,
-+                                      void **host_address,
-+                                      grub_efi_uint64_t attributes);
-+  grub_efi_status_t (*free_buffer) (struct grub_efi_pci_root_io *this,
-+                                  grub_efi_uintn_t pages,
-+                                  void **host_address);
-+  grub_efi_status_t (*flush) (struct grub_efi_pci_root_io *this);
-+  grub_efi_status_t (*get_attributes) (struct grub_efi_pci_root_io *this,
-+                                     grub_efi_uint64_t *supports,
-+                                     void **resources);
-+  grub_efi_status_t (*set_attributes) (struct grub_efi_pci_root_io *this,
-+                                     grub_efi_uint64_t attributes,
-+                                     grub_efi_uint64_t *offset,
-+                                     grub_efi_uint64_t *length);
-+  grub_efi_status_t (*configuration) (struct grub_efi_pci_root_io *this,
-+                                    void **resources);
-+};
-+
-+typedef struct grub_efi_pci_root_io grub_efi_pci_root_io_t;
-+
-+struct grub_efi_uga_draw
-+{
-+  grub_efi_status_t (*get_mode) (struct grub_efi_uga_draw * this,
-+                                 grub_efi_uint32_t *horizontal_resolution,
-+                                 grub_efi_uint32_t *vertical_resolution,
-+                                 grub_efi_uint32_t *color_depth,
-+                                 grub_efi_uint32_t *refresh_rate);
-+  grub_efi_status_t (*set_mode) (struct grub_efi_uga_draw * this,
-+                                 grub_efi_uint32_t horizontal_resolution,
-+                                 grub_efi_uint32_t vertical_resolution,
-+                                 grub_efi_uint32_t color_depth,
-+                                 grub_efi_uint32_t refresh_rate);
-+  grub_efi_status_t (*blt) (struct grub_efi_uga_draw * this,
-+                            grub_efi_uga_pixel_t *blt_buffer,
-+                            grub_efi_uga_blt_operation_t blt_operation,
-+                            grub_efi_uintn_t source_x,
-+                            grub_efi_uintn_t source_y,
-+                            grub_efi_uintn_t destination_x,
-+                            grub_efi_uintn_t destination_y,
-+                            grub_efi_uintn_t width,
-+                            grub_efi_uintn_t height,
-+                            grub_efi_uintn_t delta);
-+};
-+typedef struct grub_efi_uga_draw grub_efi_uga_draw_t;
-+
-+typedef grub_uint32_t grub_uga_status_t;
-+
-+typedef enum {
-+  UgaDtParentBus = 1,
-+  UgaDtGraphicsController,
-+  UgaDtOutputController,
-+  UgaDtOutputPort,
-+  UgaDtOther
-+} grub_uga_device_type_t;
-+
-+typedef grub_efi_uint32_t grub_uga_device_id_t;
-+
-+struct grub_uga_device_data {
-+  grub_uga_device_type_t device_type;
-+  grub_uga_device_id_t device_id;
-+  grub_efi_uint32_t device_context_size;
-+  grub_efi_uint32_t shared_context_size;
-+};
-+typedef struct grub_uga_device_data grub_uga_device_data_t;
-+
-+struct grub_uga_device {
-+  void *device_context;
-+  void *shared_context;
-+  void *runtime_context;
-+  struct grub_uga_device *parent_device;
-+  void *bus_io_services;
-+  void *stdio_services;
-+  grub_uga_device_data_t device_data;
-+};
-+typedef struct grub_uga_device grub_uga_device_t;
-+
-+typedef enum {
-+  UgaIoGetVersion = 1,
-+  UgaIoGetChildDevice,
-+  UgaIoStartDevice,
-+  UgaIoStopDevice,
-+  UgaIoFlushDevice,
-+  UgaIoResetDevice,
-+  UgaIoGetDeviceState,
-+  UgaIoSetDeviceState,
-+  UgaIoSetPowerState,
-+  UgaIoGetMemoryConfiguration,
-+  UgaIoSetVideoMode,
-+  UgaIoCopyRectangle,
-+  UgaIoGetEdidSegment,
-+  UgaIoDeviceChannelOpen,
-+  UgaIoDeviceChannelClose,
-+  UgaIoDeviceChannelRead,
-+  UgaIoDeviceChannelWrite,
-+  UgaIoGetPersistentDataSize,
-+  UgaIoGetPersistentData,
-+  UgaIoSetPersistentData,
-+  UgaIoGetDevicePropertySize,
-+  UgaIoGetDeviceProperty,
-+  UgaIoBtPrivateInterface
-+} grub_uga_io_request_code_t;
-+
-+struct grub_uga_io_request {
-+  grub_uga_io_request_code_t io_request_code;
-+  void *in_buffer;
-+  grub_efi_uint64_t in_buffer_size;
-+  grub_efi_uint64_t bytes_returned;
-+};
-+typedef struct grub_uga_io_request grub_uga_io_request_t;
-+
-+struct grub_efi_uga_io
-+{
-+  grub_efi_status_t (*create_device) (struct grub_efi_uga_io * this,
-+                                      grub_uga_device_t *parent_device,
-+                                      grub_uga_device_data_t *device_data,
-+                                      void *runtime_context,
-+                                      grub_uga_device_t **device);
-+  grub_efi_status_t (*delete_device) (struct grub_efi_uga_io * this,
-+                                      grub_uga_device_t *device);
-+  grub_uga_status_t (*dispatch_service) (grub_uga_device_t *device,
-+                                         grub_uga_io_request_t *io_request);
-+};
-+typedef struct grub_efi_uga_io grub_efi_uga_io_t;
-+
-+/* XXX PJFIX add uga driver handoff stuff */
-+
-+// File Open Modes
-+#define GRUB_EFI_FILE_MODE_READ               0x0000000000000001ULL
-+#define GRUB_EFI_FILE_MODE_WRITE      0x0000000000000002ULL
-+#define GRUB_EFI_FILE_MODE_CREATE     0x8000000000000000ULL
-+
-+// File Attributes
-+#define GRUB_EFI_FILE_READ_ONLY               0x0000000000000001ULL
-+#define GRUB_EFI_FILE_HIDDEN          0x0000000000000002ULL
-+#define GRUB_EFI_FILE_SYSTEM          0x0000000000000004ULL
-+#define GRUB_EFI_FILE_RESERVED                0x0000000000000008ULL
-+#define GRUB_EFI_FILE_DIRECTORY               0x0000000000000010ULL
-+#define GRUB_EFI_FILE_ARCHIVE         0x0000000000000020ULL
-+#define GRUB_EFI_FILE_VALID_ATTR      0x0000000000000037ULL
-+
-+struct grub_efi_file
-+{
-+  grub_efi_uint64_t revision;
-+  grub_efi_status_t (*open) (struct grub_efi_file * this,
-+                           struct grub_efi_file ** new_handle,
-+                           grub_efi_char16_t * file_name,
-+                           grub_efi_uint64_t open_mode,
-+                           grub_efi_uint64_t attributes);
-+  grub_efi_status_t (*close) (struct grub_efi_file * this);
-+  grub_efi_status_t (*delete) (struct grub_efi_file * this);
-+  grub_efi_status_t (*read) (struct grub_efi_file * this,
-+                           grub_efi_uintn_t * buffer_size,
-+                           void * buffer);
-+  grub_efi_status_t (*write) (struct grub_efi_file * this,
-+                            grub_efi_uintn_t * buffer_size,
-+                            void * buffer);
-+  grub_efi_status_t (*get_position) (struct grub_efi_file * this,
-+                                   grub_efi_uint64_t * position);
-+  grub_efi_status_t (*set_position) (struct grub_efi_file * this,
-+                                   grub_efi_uint64_t position);
-+  grub_efi_status_t (*get_info) (struct grub_efi_file * this,
-+                               grub_efi_guid_t * information_type,
-+                               grub_efi_uintn_t * buffer_size,
-+                               void * buffer);
-+  grub_efi_status_t (*set_info) (struct grub_efi_file * this,
-+                               grub_efi_guid_t * information_type,
-+                               grub_efi_uintn_t buffer_size,
-+                               void * buffer);
-+  grub_efi_status_t (*flush) (struct grub_efi_file * this);
-+};
-+typedef struct grub_efi_file grub_efi_file_t;
-+
-+struct grub_efi_simple_file_system
-+{
-+  grub_efi_uint64_t revision;
-+  grub_efi_status_t (*open_volume) (struct grub_efi_simple_file_system * this,
-+                                  grub_efi_file_t ** root);
-+};
-+typedef struct grub_efi_simple_file_system grub_efi_simple_file_system_t;
-+
-+struct grub_efi_serial_io_mode
-+{
-+  grub_efi_uint32_t control_mask;
-+  grub_efi_uint32_t timeout;
-+  grub_efi_uint64_t baud_rate;
-+  grub_efi_uint32_t receive_fifo_depth;
-+  grub_efi_uint32_t data_bits;
-+  grub_efi_uint32_t parity;
-+  grub_efi_uint32_t stop_bits;
-+};
-+typedef struct grub_efi_serial_io_mode grub_efi_serial_io_mode_t;
-+
-+enum grub_efi_parity
-+{
-+  GRUB_EFI_DEFAULT_PARITY,
-+  GRUB_EFI_NO_PARITY,
-+  GRUB_EFI_EVEN_PARITY,
-+  GRUB_EFI_ODD_PARITY,
-+  GRUB_EFI_MARK_PARITY,
-+  GRUB_EFI_SPACE_PARITY
-+};
-+typedef enum grub_efi_parity grub_efi_parity_t;
-+
-+enum grub_efi_stop_bits
-+{
-+  GRUB_EFI_DEFAULT_STOP_BITS,
-+  GRUB_EFI_ONE_STOP_BIT,
-+  GRUB_EFI_ONE_FIVE_STOP_BITS,
-+  GRUB_EFI_TWO_STOP_BITS
-+};
-+typedef enum grub_efi_stop_bits grub_efi_stop_bits_t;
-+
-+#define GRUB_EFI_SERIAL_CLEAR_TO_SEND                 0x0010
-+#define GRUB_EFI_SERIAL_DATA_SET_READY                        0x0020
-+#define GRUB_EFI_SERIAL_RING_INDICATE                 0x0040
-+#define GRUB_EFI_SERIAL_CARRIER_DETECT                        0x0080
-+#define GRUB_EFI_SERIAL_REQUEST_TO_SEND                       0x0002
-+#define GRUB_EFI_SERIAL_DATA_TERMINAL_READY           0x0001
-+#define GRUB_EFI_SERIAL_INPUT_BUFFER_EMPTY            0x0100
-+#define GRUB_EFI_SERIAL_OUTPUT_BUFFER_EMPTY           0x0200
-+#define GRUB_EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE      0x1000
-+#define GRUB_EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE      0x2000
-+#define GRUB_EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE  0x4000
-+
-+struct grub_efi_serial_io
-+{
-+  grub_efi_uint32_t revision;
-+  grub_efi_status_t (*reset) (struct grub_efi_serial_io * this);
-+  grub_efi_status_t (*set_attributes) (struct grub_efi_serial_io * this,
-+                                     grub_efi_uint64_t baud_rate,
-+                                     grub_efi_uint32_t receive_fifo_depth,
-+                                     grub_efi_uint32_t timeout,
-+                                     grub_efi_parity_t parity,
-+                                     grub_efi_uint8_t data_bits,
-+                                     grub_efi_stop_bits_t stop_bits);
-+  grub_efi_status_t (*set_control_bits) (struct grub_efi_serial_io * this,
-+                                       grub_efi_uint32_t control);
-+  grub_efi_status_t (*get_control_bits) (struct grub_efi_serial_io * this,
-+                                       grub_efi_uint32_t * control);
-+  grub_efi_status_t (*write) (struct grub_efi_serial_io * this,
-+                            grub_efi_uintn_t * buffer_size,
-+                            void * buffer);
-+  grub_efi_status_t (*read) (struct grub_efi_serial_io * this,
-+                           grub_efi_uintn_t * buffer_size,
-+                           void * buffer);
-+  grub_efi_serial_io_mode_t *mode;
-+};
-+typedef struct grub_efi_serial_io grub_efi_serial_io_t;
-+
-+#endif /* ! GRUB_EFI_API_HEADER */
-diff --git a/efi/grub/efi/console_control.h b/efi/grub/efi/console_control.h
-new file mode 100644
-index 0000000..ffc4305
---- /dev/null
-+++ b/efi/grub/efi/console_control.h
-@@ -0,0 +1,59 @@
-+/* console_control.h - definitions of the console control protocol */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2006  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+/* The console control protocol is not a part of the EFI spec,
-+   but defined in Intel's Sample Implementation.  */
-+
-+#ifndef GRUB_EFI_CONSOLE_CONTROL_HEADER
-+#define GRUB_EFI_CONSOLE_CONTROL_HEADER       1
-+
-+#define GRUB_EFI_CONSOLE_CONTROL_GUID \
-+  { 0xf42f7782, 0x12e, 0x4c12, \
-+    { 0x99, 0x56, 0x49, 0xf9, 0x43, 0x4, 0xf7, 0x21 } \
-+  }
-+
-+enum grub_efi_screen_mode
-+{
-+  GRUB_EFI_SCREEN_TEXT,
-+  GRUB_EFI_SCREEN_GRAPHICS,
-+  GRUB_EFI_SCREEN_TEXT_MAX_VALUE
-+};
-+typedef enum grub_efi_screen_mode grub_efi_screen_mode_t;
-+
-+struct grub_efi_console_control_protocol
-+{
-+  grub_efi_status_t
-+    (*get_mode) (struct grub_efi_console_control_protocol * this,
-+               grub_efi_screen_mode_t * mode,
-+               grub_efi_boolean_t * uga_exists,
-+               grub_efi_boolean_t * std_in_locked);
-+
-+  grub_efi_status_t
-+    (*set_mode) (struct grub_efi_console_control_protocol * this,
-+               grub_efi_screen_mode_t mode);
-+
-+  grub_efi_status_t
-+    (*lock_std_in) (struct grub_efi_console_control_protocol * this,
-+                  grub_efi_char16_t * password);
-+};
-+typedef struct grub_efi_console_control_protocol
-+  grub_efi_console_control_protocol_t;
-+
-+#endif /* ! GRUB_EFI_CONSOLE_CONTROL_HEADER */
-diff --git a/efi/grub/efi/efi.h b/efi/grub/efi/efi.h
-new file mode 100644
-index 0000000..301f9d9
---- /dev/null
-+++ b/efi/grub/efi/efi.h
-@@ -0,0 +1,85 @@
-+/* efi.h - declare variables and functions for EFI support */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2006  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifndef GRUB_EFI_EFI_HEADER
-+#define GRUB_EFI_EFI_HEADER   1
-+
-+#include <grub/types.h>
-+#include <grub/efi/api.h>
-+
-+/* Functions.  */
-+grub_efi_status_t
-+grub_efi_locate_device_path (grub_efi_guid_t *protocol,
-+                             grub_efi_device_path_t **dp,
-+                             grub_efi_handle_t *handle);
-+grub_efi_status_t
-+grub_efi_locate_handle_buffer (grub_efi_locate_search_type_t search_type,
-+                              grub_efi_guid_t *protocol,
-+                              void *search_key,
-+                              grub_efi_uintn_t *no_handles,
-+                              grub_efi_handle_t **buffer);
-+void *grub_efi_locate_protocol (grub_efi_guid_t * protocol,
-+                              void *registration);
-+grub_efi_handle_t *grub_efi_locate_handle (grub_efi_locate_search_type_t
-+                                         search_type,
-+                                         grub_efi_guid_t * protocol,
-+                                         void *search_key,
-+                                         grub_efi_uintn_t * num_handles);
-+void *grub_efi_open_protocol (grub_efi_handle_t handle,
-+                            grub_efi_guid_t * protocol,
-+                            grub_efi_uint32_t attributes);
-+int grub_efi_set_text_mode (int on);
-+void grub_efi_stall (grub_efi_uintn_t microseconds);
-+void *grub_efi_allocate_pool (grub_efi_uintn_t size);
-+void grub_efi_free_pool (void *buffer);
-+void *grub_efi_allocate_anypages (grub_efi_uintn_t pages);
-+void *grub_efi_allocate_pages (grub_efi_physical_address_t address,
-+                             grub_efi_uintn_t pages);
-+void *grub_efi_allocate_runtime_pages (grub_efi_physical_address_t address,
-+                                     grub_efi_uintn_t pages);
-+void
-+grub_efi_free_pages (grub_efi_physical_address_t address,
-+                   grub_efi_uintn_t pages);
-+int
-+grub_efi_get_memory_map (grub_efi_uintn_t * map_key,
-+                       grub_efi_uintn_t * descriptor_size,
-+                       grub_efi_uint32_t * descriptor_version);
-+grub_efi_loaded_image_t *grub_efi_get_loaded_image (grub_efi_handle_t
-+                                                  image_handle);
-+void grub_efi_print_device_path (grub_efi_device_path_t * dp);
-+char *grub_efi_get_filename (grub_efi_device_path_t * dp);
-+grub_efi_device_path_t *grub_efi_get_device_path (grub_efi_handle_t handle);
-+int grub_efi_exit_boot_services (grub_efi_uintn_t map_key);
-+
-+void grub_efi_mm_init (void);
-+void grub_efi_mm_fini (void);
-+void grub_efi_init (void);
-+void grub_efi_fini (void);
-+void grub_efi_set_prefix (void);
-+
-+/* Variables.  */
-+extern void *mmap_buf;
-+extern grub_efi_uintn_t mmap_size;
-+extern grub_efi_uintn_t mmap_pages;
-+
-+extern grub_efi_system_table_t *grub_efi_system_table;
-+extern grub_efi_handle_t grub_efi_image_handle;
-+
-+#endif /* ! GRUB_EFI_EFI_HEADER */
-diff --git a/efi/grub/efi/eficall.h b/efi/grub/efi/eficall.h
-new file mode 100644
-index 0000000..2e79e04
---- /dev/null
-+++ b/efi/grub/efi/eficall.h
-@@ -0,0 +1,162 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2006  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifndef _EFI_CALL_INCLUDE_
-+#define _EFI_CALL_INCLUDE_ 1
-+
-+#include <grub/types.h>
-+
-+#ifndef __x86_64__
-+#ifdef EFI_FUNCTION_WRAPPER
-+#undef EFI_FUNCTION_WRAPPER
-+#endif
-+#endif
-+
-+#ifdef  EFI_FUNCTION_WRAPPER
-+typedef long EFI_STATUS;
-+
-+EFI_STATUS x64_call0 (unsigned long func);
-+EFI_STATUS x64_call1 (unsigned long func, unsigned long a);
-+EFI_STATUS x64_call2 (unsigned long func, unsigned long a, unsigned long b);
-+EFI_STATUS x64_call3 (unsigned long func, unsigned long a,
-+                    unsigned long b, unsigned long c);
-+EFI_STATUS x64_call4 (unsigned long func, unsigned long a,
-+                    unsigned long b, unsigned long c, unsigned long d);
-+EFI_STATUS x64_call5 (unsigned long func, unsigned long a,
-+                    unsigned long b, unsigned long c,
-+                    unsigned long d, unsigned long e);
-+EFI_STATUS x64_call6 (unsigned long func, unsigned long a,
-+                    unsigned long b, unsigned long c,
-+                    unsigned long d, unsigned long e, unsigned long f);
-+EFI_STATUS x64_call7 (unsigned long func, unsigned long a,
-+                    unsigned long b, unsigned long c,
-+                    unsigned long d, unsigned long e,
-+                    unsigned long f, unsigned long g);
-+EFI_STATUS x64_call8 (unsigned long func, unsigned long a,
-+                    unsigned long b, unsigned long c,
-+                    unsigned long d, unsigned long e,
-+                    unsigned long f, unsigned long g,
-+                    unsigned long h);
-+EFI_STATUS x64_call9 (unsigned long func, unsigned long a,
-+                    unsigned long b, unsigned long c,
-+                    unsigned long d, unsigned long e,
-+                    unsigned long f, unsigned long g,
-+                    unsigned long h, unsigned long i);
-+EFI_STATUS x64_call10(unsigned long func, unsigned long a,
-+                    unsigned long b, unsigned long c,
-+                    unsigned long d, unsigned long e,
-+                    unsigned long f, unsigned long g,
-+                    unsigned long h, unsigned long i,
-+                    unsigned long j);
-+
-+#define Call_Service(func)                      x64_call0((unsigned long)func)
-+
-+#define Call_Service_1(func,a)                  x64_call1((unsigned long)func, \
-+                                                        (unsigned long)a)
-+
-+#define Call_Service_2(func,a,b)                x64_call2((unsigned long)func, \
-+                                                        (unsigned long)a,    \
-+                                                        (unsigned long)b)
-+
-+#define Call_Service_3(func,a,b,c)              x64_call3((unsigned long)func, \
-+                                                        (unsigned long)a,    \
-+                                                        (unsigned long)b,    \
-+                                                        (unsigned long)c)
-+
-+#define Call_Service_4(func,a,b,c,d)            x64_call4((unsigned long)func, \
-+                                                        (unsigned long)a,    \
-+                                                        (unsigned long)b,    \
-+                                                        (unsigned long)c,    \
-+                                                        (unsigned long)d)
-+
-+#define Call_Service_5(func,a,b,c,d,e)          x64_call5((unsigned long)func, \
-+                                                        (unsigned long)a,    \
-+                                                        (unsigned long)b,    \
-+                                                        (unsigned long)c,    \
-+                                                        (unsigned long)d,    \
-+                                                        (unsigned long)e)
-+
-+#define Call_Service_6(func,a,b,c,d,e,f)        x64_call6((unsigned long)func, \
-+                                                        (unsigned long)a,    \
-+                                                        (unsigned long)b,    \
-+                                                        (unsigned long)c,    \
-+                                                        (unsigned long)d,    \
-+                                                        (unsigned long)e,    \
-+                                                        (unsigned long)f)
-+
-+#define Call_Service_7(func,a,b,c,d,e,f,g)      x64_call7((unsigned long)func, \
-+                                                        (unsigned long)a,    \
-+                                                        (unsigned long)b,    \
-+                                                        (unsigned long)c,    \
-+                                                        (unsigned long)d,    \
-+                                                        (unsigned long)e,    \
-+                                                        (unsigned long)f,    \
-+                                                        (unsigned long)g)
-+
-+#define Call_Service_8(func,a,b,c,d,e,f,g,h)    x64_call8((unsigned long)func, \
-+                                                        (unsigned long)a,    \
-+                                                        (unsigned long)b,    \
-+                                                        (unsigned long)c,    \
-+                                                        (unsigned long)d,    \
-+                                                        (unsigned long)e,    \
-+                                                        (unsigned long)f,    \
-+                                                        (unsigned long)g,    \
-+                                                        (unsigned long)h)
-+
-+#define Call_Service_9(func,a,b,c,d,e,f,g,h,i)  x64_call9((unsigned long)func, \
-+                                                        (unsigned long)a,    \
-+                                                        (unsigned long)b,    \
-+                                                        (unsigned long)c,    \
-+                                                        (unsigned long)d,    \
-+                                                        (unsigned long)e,    \
-+                                                        (unsigned long)f,    \
-+                                                        (unsigned long)g,    \
-+                                                        (unsigned long)h,    \
-+                                                        (unsigned long)i)
-+
-+#define Call_Service_10(func,a,b,c,d,e,f,g,h,i,j) \
-+                                             x64_call10((unsigned long)func, \
-+                                                        (unsigned long)a,    \
-+                                                        (unsigned long)b,    \
-+                                                        (unsigned long)c,    \
-+                                                        (unsigned long)d,    \
-+                                                        (unsigned long)e,    \
-+                                                        (unsigned long)f,    \
-+                                                        (unsigned long)g,    \
-+                                                        (unsigned long)h,    \
-+                                                        (unsigned long)i,    \
-+                                                        (unsigned long)j)
-+
-+#else
-+
-+typedef long EFI_STATUS;
-+#define Call_Service(func)                      func()
-+#define Call_Service_1(func,a)                  func(a)
-+#define Call_Service_2(func,a,b)                func(a,b)
-+#define Call_Service_3(func,a,b,c)              func(a,b,c)
-+#define Call_Service_4(func,a,b,c,d)            func(a,b,c,d)
-+#define Call_Service_5(func,a,b,c,d,e)          func(a,b,c,d,e)
-+#define Call_Service_6(func,a,b,c,d,e,f)        func(a,b,c,d,e,f)
-+#define Call_Service_7(func,a,b,c,d,e,f,g)      func(a,b,c,d,e,f,g)
-+#define Call_Service_8(func,a,b,c,d,e,f,g,h)    func(a,b,c,d,e,f,g,h)
-+#define Call_Service_9(func,a,b,c,d,e,f,g,h,i)  func(a,b,c,d,e,f,g,h,i)
-+#define Call_Service_10(func,a,b,c,d,e,f,g,h,i,j)  func(a,b,c,d,e,f,g,h,i,j)
-+#endif
-+
-+#endif
-diff --git a/efi/grub/efi/misc.h b/efi/grub/efi/misc.h
-new file mode 100644
-index 0000000..e06a2fb
---- /dev/null
-+++ b/efi/grub/efi/misc.h
-@@ -0,0 +1,60 @@
-+/* misc.h - prototypes for misc EFI functions */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2002,2003,2005,2006  Free Software Foundation, Inc.
-+ *
-+ *  GRUB is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with GRUB; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifndef GRUB_EFI_MISC_HEADER
-+#define GRUB_EFI_MISC_HEADER  1
-+
-+struct e820_entry;
-+void e820_map_from_efi_map (struct e820_entry *e820_map,
-+                          int *e820_nr_map,
-+                          grub_efi_memory_descriptor_t *memory_map,
-+                          grub_efi_uintn_t desc_size,
-+                          grub_efi_uintn_t memory_map_size);
-+
-+/* Initialize the console system.  */
-+void grub_console_init (void);
-+/* Finish the console system.  */
-+void grub_console_fini (void);
-+
-+void grub_efidisk_init (void);
-+void grub_efidisk_fini (void);
-+grub_efi_handle_t grub_efidisk_get_current_bdev_handle (void);
-+int grub_get_drive_partition_from_bdev_handle (grub_efi_handle_t handle,
-+                                             unsigned long *drive,
-+                                             unsigned long *partition);
-+
-+char *grub_efi_file_path_to_path_name (grub_efi_device_path_t *file_path);
-+void grub_load_saved_default (grub_efi_handle_t dev_handle);
-+
-+grub_efi_device_path_t *
-+find_last_device_path (const grub_efi_device_path_t *dp);
-+grub_efi_device_path_t *
-+find_parent_device_path (const grub_efi_device_path_t *dp);
-+grub_efi_device_path_t *
-+duplicate_device_path (const grub_efi_device_path_t *dp);
-+int
-+compare_device_paths (const grub_efi_device_path_t *dp1,
-+                    const grub_efi_device_path_t *dp2);
-+grub_efi_device_path_t *
-+device_path_from_utf8 (const char *device);
-+
-+extern grub_efi_guid_t simple_file_system_guid;
-+
-+#endif /* ! GRUB_EFI_MISC_HEADER */
-diff --git a/efi/grub/efi/net.h b/efi/grub/efi/net.h
-new file mode 100644
-index 0000000..e69de29
-diff --git a/efi/grub/efi/time.h b/efi/grub/efi/time.h
-new file mode 100644
-index 0000000..55bfe68
---- /dev/null
-+++ b/efi/grub/efi/time.h
-@@ -0,0 +1,31 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2006  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-+ *  MA  02110-1301, USA.
-+ */
-+
-+#ifndef GRUB_EFI_TIME_HEADER
-+#define GRUB_EFI_TIME_HEADER  1
-+
-+#include <grub/symbol.h>
-+
-+#define GRUB_TICKS_PER_SECOND 18
-+
-+/* Return the real time in ticks.  */
-+grub_uint32_t grub_get_rtc (void);
-+
-+#endif /* ! GRUB_EFI_TIME_HEADER */
-diff --git a/efi/grub/i386/linux.h b/efi/grub/i386/linux.h
-new file mode 100644
-index 0000000..1545a7a
---- /dev/null
-+++ b/efi/grub/i386/linux.h
-@@ -0,0 +1,226 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifndef GRUB_LINUX_MACHINE_HEADER
-+#define GRUB_LINUX_MACHINE_HEADER     1
-+
-+#define GRUB_LINUX_MAGIC_SIGNATURE    0x53726448      /* "HdrS" */
-+#define GRUB_LINUX_DEFAULT_SETUP_SECTS        4
-+#define GRUB_LINUX_FLAG_CAN_USE_HEAP  0x80
-+#define GRUB_LINUX_INITRD_MAX_ADDRESS 0x37FFFFFF
-+#define GRUB_LINUX_MAX_SETUP_SECTS    64
-+#define GRUB_LINUX_BOOT_LOADER_TYPE   0x72
-+#define GRUB_LINUX_HEAP_END_OFFSET    (0x9000 - 0x200)
-+
-+#define GRUB_LINUX_BZIMAGE_ADDR               0x100000
-+#define GRUB_LINUX_ZIMAGE_ADDR                0x10000
-+#define GRUB_LINUX_OLD_REAL_MODE_ADDR 0x90000
-+#define GRUB_LINUX_SETUP_STACK                0x9000
-+
-+#define GRUB_LINUX_FLAG_BIG_KERNEL    0x1
-+
-+/* Linux's video mode selection support. Actually I hate it!  */
-+#define GRUB_LINUX_VID_MODE_NORMAL    0xFFFF
-+#define GRUB_LINUX_VID_MODE_EXTENDED  0xFFFE
-+#define GRUB_LINUX_VID_MODE_ASK               0xFFFD
-+
-+#define GRUB_LINUX_CL_OFFSET          0x9000
-+#define GRUB_LINUX_CL_END_OFFSET      0x90FF
-+#define GRUB_LINUX_SETUP_MOVE_SIZE    0x9100
-+#define GRUB_LINUX_CL_MAGIC           0xA33F
-+
-+#if 0 
-+#define GRUB_LINUX_EFI_SIGNATURE_X64  \
-+  ('4' << 24 | '6' << 16 | 'L' << 8 | 'E')
-+#else
-+#define GRUB_LINUX_EFI_SIGNATURE_X64  \
-+  ('L' << 24 | 'I' << 16 | 'F' << 8 | 'E')
-+#endif
-+
-+#ifndef ASM_FILE
-+
-+/* For the Linux/i386 boot protocol version 2.07.  */
-+struct grub_linux_kernel_header
-+{
-+  grub_uint8_t setup_sects;   /* The size of the setup in sectors */
-+  grub_uint16_t root_flags;   /* If the root is mounted readonly */
-+  grub_uint32_t syssize;      /* obsolete */
-+  grub_uint16_t ram_size;     /* obsolete */
-+  grub_uint16_t vid_mode;     /* Video mode control */
-+  grub_uint16_t root_dev;     /* Default root device number */
-+  grub_uint16_t boot_flag;    /* 0xAA55 magic number */
-+  grub_uint8_t jump_ins;      /* Jump instruction */
-+  grub_uint8_t jump_off;      /* Jump offset */
-+  grub_uint32_t header;               /* Magic signature "HdrS" */
-+  grub_uint16_t version;      /* Boot protocol version supported */
-+  grub_uint32_t realmode_swtch;       /* Boot loader hook */
-+  grub_uint16_t start_sys;    /* The load-low segment (obsolete) */
-+  grub_uint16_t kernel_version;       /* Points to kernel version string */
-+  grub_uint8_t type_of_loader;        /* Boot loader identifier */
-+  grub_uint8_t loadflags;     /* Boot protocol option flags */
-+  grub_uint16_t setup_move_size;/* Move to high memory size */
-+  grub_uint32_t code32_start; /* Boot loader hook */
-+  grub_uint32_t ramdisk_image;        /* initrd load address */
-+  grub_uint32_t ramdisk_size; /* initrd size */
-+  grub_uint32_t bootsect_kludge;/* obsolete */
-+  grub_uint16_t heap_end_ptr; /* Free memory after setup end */
-+  grub_uint16_t pad1;         /* Unused */
-+  grub_uint32_t cmd_line_ptr; /* Points to the kernel command line */
-+  grub_uint32_t initrd_addr_max;/* Highest address for initrd */
-+  grub_uint32_t kernel_alignment;
-+  grub_uint8_t relocatable_kernel;
-+  grub_uint8_t pad2[3];
-+  grub_uint32_t hardware_subarch;
-+  grub_uint64_t hardware_subarch_data;
-+} __attribute__ ((packed));
-+
-+/* Boot parameters for Linux based on 2.6.12. This is used by the setup
-+   sectors of Linux, and must be simulated by GRUB on EFI, because
-+   the setup sectors depend on BIOS.  */
-+struct linux_kernel_params
-+{
-+  grub_uint8_t video_cursor_x;        /* 0 */
-+  grub_uint8_t video_cursor_y;
-+
-+  grub_uint16_t ext_mem;      /* 2 */
-+
-+  grub_uint16_t video_page;   /* 4 */
-+  grub_uint8_t video_mode;    /* 6 */
-+  grub_uint8_t video_width;   /* 7 */
-+
-+  grub_uint8_t padding1[0xa - 0x8];
-+
-+  grub_uint16_t video_ega_bx; /* a */
-+
-+  grub_uint8_t padding2[0xe - 0xc];
-+
-+  grub_uint8_t video_height;  /* e */
-+  grub_uint8_t have_vga;      /* f */
-+  grub_uint16_t font_size;    /* 10 */
-+
-+  grub_uint16_t lfb_width;    /* 12 */
-+  grub_uint16_t lfb_height;   /* 14 */
-+  grub_uint16_t lfb_depth;    /* 16 */
-+  grub_uint32_t lfb_base;     /* 18 */
-+  grub_uint32_t lfb_size;     /* 1c */
-+
-+  grub_uint16_t cl_magic;     /* 20 */
-+  grub_uint16_t cl_offset;
-+
-+  grub_uint16_t lfb_line_len; /* 24 */
-+  grub_uint8_t red_mask_size; /* 26 */
-+  grub_uint8_t red_field_pos;
-+  grub_uint8_t green_mask_size;
-+  grub_uint8_t green_field_pos;
-+  grub_uint8_t blue_mask_size;
-+  grub_uint8_t blue_field_pos;
-+  grub_uint8_t reserved_mask_size;
-+  grub_uint8_t reserved_field_pos;
-+  grub_uint16_t vesapm_segment;       /* 2e */
-+  grub_uint16_t vesapm_offset;        /* 30 */
-+  grub_uint16_t lfb_pages;    /* 32 */
-+  grub_uint16_t vesa_attrib;  /* 34 */
-+
-+  grub_uint8_t padding3[0x40 - 0x36];
-+
-+  grub_uint16_t apm_version;  /* 40 */
-+  grub_uint16_t apm_code_segment;     /* 42 */
-+  grub_uint32_t apm_entry;    /* 44 */
-+  grub_uint16_t apm_16bit_code_segment;       /* 48 */
-+  grub_uint16_t apm_data_segment;     /* 4a */
-+  grub_uint16_t apm_flags;    /* 4c */
-+  grub_uint32_t apm_code_len; /* 4e */
-+  grub_uint16_t apm_data_len; /* 52 */
-+
-+  grub_uint8_t padding4[0x60 - 0x54];
-+
-+  grub_uint32_t ist_signature;        /* 60 */
-+  grub_uint32_t ist_command;  /* 64 */
-+  grub_uint32_t ist_event;    /* 68 */
-+  grub_uint32_t ist_perf_level;       /* 6c */
-+
-+  grub_uint8_t padding5[0x80 - 0x70];
-+
-+  grub_uint8_t hd0_drive_info[0x10];  /* 80 */
-+  grub_uint8_t hd1_drive_info[0x10];  /* 90 */
-+  grub_uint16_t rom_config_len;       /* a0 */
-+
-+  grub_uint8_t padding6[0x1b8 - 0xa2];
-+
-+  union {
-+    struct {
-+      grub_uint32_t padding7_1; /* 0x1b8 */
-+      grub_uint32_t padding7_2; /* 0x1bc */
-+
-+      grub_uint32_t efi_signature;    /* 1c0 */
-+      grub_uint32_t efi_system_table; /* 1c4 */
-+      grub_uint32_t efi_mem_desc_size;        /* 1c8 */
-+      grub_uint32_t efi_mem_desc_version;     /* 1cc */
-+      grub_uint32_t efi_mmap;      /* 1d0 */
-+      grub_uint32_t efi_mmap_size;    /* 1d4 */
-+      grub_uint32_t efi_system_table_hi;      /* 1d8 */
-+      grub_uint32_t efi_mmap_hi;      /* 1dc */
-+    } dunno;
-+    struct {
-+      grub_uint32_t efi_system_table; /* 1b8 */
-+
-+      grub_uint32_t padding7_1; /* 0x1bc */
-+
-+      grub_uint32_t efi_signature;    /* 1c0 */
-+      grub_uint32_t efi_mem_desc_size;        /* 1c4 */
-+      grub_uint32_t efi_mem_desc_version;     /* 1c8 */
-+      grub_uint32_t efi_mmap_size;    /* 1cc */
-+      grub_uint32_t efi_mmap; /* 1d0 */
-+
-+      grub_uint8_t padding7_2[0x1e0 - 0x1d4]; /* 1d4 */
-+    } version_0204;
-+    struct {
-+      grub_uint32_t padding7_1; /* 0x1b8 */
-+      grub_uint32_t padding7_2; /* 0x1bc */
-+      grub_uint32_t padding7_3; /* 0x1c0 */
-+      grub_uint32_t efi_system_table; /* 0x1c4 */
-+      grub_uint32_t efi_mem_desc_size; /* 0x1c8 */
-+      grub_uint32_t efi_mem_desc_version; /* 0x1cc */
-+      grub_uint32_t efi_mmap; /* 0x1d0 */
-+      grub_uint32_t efi_mmap_size; /* 0x1d4 */
-+      grub_uint8_t padding7_4[0x1e0 - 0x1d8]; /* 0x1d8 */
-+    } version_0206;
-+  };
-+
-+  grub_uint32_t alt_mem;      /* 1e0 */
-+
-+  grub_uint8_t padding8[0x1e8 - 0x1e4];       /* 1e4 */
-+
-+  grub_uint8_t e820_nr_map;   /* 1e8 */
-+  grub_uint8_t eddbuf_entries;        /* 1e9 */
-+  grub_uint8_t edd_mbr_sig_buf_entries;       /* 1ea */
-+
-+  grub_uint8_t padding9[0x1f1 - 0x1eb];
-+
-+  struct grub_linux_kernel_header hdr;        /* 0x1f1 */
-+
-+  grub_uint8_t padding10[0x2d0-0x1f1-sizeof(struct grub_linux_kernel_header)];
-+
-+  grub_uint8_t e820_map[2560];        /* 0x2d0 */
-+
-+  grub_uint8_t padding11[0x1000 - 0xcd0];
-+} __attribute__ ((packed));
-+#endif /* ! ASM_FILE */
-+
-+#endif /* ! GRUB_LINUX_MACHINE_HEADER */
-diff --git a/efi/grub/i386/types.h b/efi/grub/i386/types.h
-new file mode 100644
-index 0000000..ec4174e
---- /dev/null
-+++ b/efi/grub/i386/types.h
-@@ -0,0 +1,32 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2002,2006  Free Software Foundation, Inc.
-+ *
-+ *  GRUB is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with GRUB; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifndef GRUB_TYPES_CPU_HEADER
-+#define GRUB_TYPES_CPU_HEADER 1
-+
-+/* The size of void *.  */
-+#define GRUB_TARGET_SIZEOF_VOID_P     4
-+
-+/* The size of long.  */
-+#define GRUB_TARGET_SIZEOF_LONG               4
-+
-+/* x64_64 is little-endian.  */
-+#undef GRUB_TARGET_WORDS_BIGENDIAN
-+
-+#endif /* ! GRUB_TYPES_CPU_HEADER */
-diff --git a/efi/grub/misc.h b/efi/grub/misc.h
-new file mode 100644
-index 0000000..5ef2226
---- /dev/null
-+++ b/efi/grub/misc.h
-@@ -0,0 +1,71 @@
-+/* misc.h - prototypes for misc functions */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2002,2003,2005,2006  Free Software Foundation, Inc.
-+ *
-+ *  GRUB is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with GRUB; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifndef GRUB_MISC_HEADER
-+#define GRUB_MISC_HEADER      1
-+
-+#include <stdarg.h>
-+#include <grub/types.h>
-+
-+#define grub_dprintf(condition, fmt, args...) \
-+      grub_real_dprintf(__FILE__, __LINE__, condition, fmt, ## args)
-+
-+char *grub_stpcpy (char *dest, const char *src);
-+void grub_real_dprintf (const char *file,
-+                      const int line,
-+                      const char *condition,
-+                      const char *fmt, ...)
-+  __attribute__ ((format (printf, 4, 5)));
-+void grub_exit (void) __attribute__ ((noreturn));
-+void grub_abort (void) __attribute__ ((noreturn));
-+void grub_fatal (const char *fmt, ...) __attribute__ ((noreturn));
-+grub_size_t grub_utf8_char_len(grub_uint8_t ch);
-+grub_uint32_t grub_utf8_to_utf32(const grub_uint8_t *src, grub_size_t length);
-+void grub_utf8_to_utf16(const grub_uint8_t *src, grub_size_t srclen,
-+                      grub_uint16_t *dst, grub_size_t dstlen);
-+grub_uint8_t *grub_utf16_to_utf8 (grub_uint8_t * dest,
-+                                grub_uint16_t * src, grub_size_t size);
-+
-+void *grub_malloc (grub_size_t size);
-+void grub_free (void *ptr);
-+
-+char *grub_strndup (const char *s, int n);
-+#define strndup grub_strndup
-+
-+int safe_parse_maxulong (char **str_ptr, unsigned long *myulong_ptr);
-+
-+#define E820_RAM        1
-+#define E820_RESERVED   2
-+#define E820_ACPI       3
-+#define E820_NVS        4
-+#define E820_EXEC_CODE  5
-+#define E820_MAX        128
-+
-+struct e820_entry
-+{
-+  grub_uint64_t addr;    /* start of memory segment */
-+  grub_uint64_t size;    /* size of memory segment */
-+  grub_uint32_t type;    /* type of memory segment */
-+} __attribute__ ((packed));
-+
-+int grub_load_linux (char *kernel, char *arg);
-+int grub_load_initrd (char *initrd);
-+
-+#endif /* ! GRUB_MISC_HEADER */
-diff --git a/efi/grub/symbol.h b/efi/grub/symbol.h
-new file mode 100644
-index 0000000..5204c54
---- /dev/null
-+++ b/efi/grub/symbol.h
-@@ -0,0 +1,34 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 1999,2000,2001,2002,2006  Free Software Foundation, Inc.
-+ *
-+ *  GRUB is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with GRUB; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifndef GRUB_SYMBOL_HEADER
-+#define GRUB_SYMBOL_HEADER    1
-+
-+#include <config.h>
-+
-+/* Add an underscore to a C symbol in assembler code if needed. */
-+#ifdef HAVE_ASM_USCORE
-+# define EXT_C(sym)   _ ## sym
-+#else
-+# define EXT_C(sym)   sym
-+#endif
-+
-+#define FUNCTION(x)   .globl EXT_C(x) ; .type EXT_C(x), "function" ; EXT_C(x):
-+
-+#endif /* ! GRUB_SYMBOL_HEADER */
-diff --git a/efi/grub/types.h b/efi/grub/types.h
-new file mode 100644
-index 0000000..173adb4
---- /dev/null
-+++ b/efi/grub/types.h
-@@ -0,0 +1,158 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2002,2005,2006  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifndef GRUB_TYPES_HEADER
-+#define GRUB_TYPES_HEADER     1
-+
-+#include <config.h>
-+#include <grub/cpu/types.h>
-+
-+#define UNUSED __attribute__ ((unused))
-+
-+#ifdef GRUB_UTIL
-+# define GRUB_CPU_SIZEOF_VOID_P       SIZEOF_VOID_P
-+# define GRUB_CPU_SIZEOF_LONG SIZEOF_LONG
-+# ifdef WORDS_BIGENDIAN
-+#  define GRUB_CPU_WORDS_BIGENDIAN    1
-+# else
-+#  undef GRUB_CPU_WORDS_BIGENDIAN
-+# endif
-+#else /* ! GRUB_UTIL */
-+# define GRUB_CPU_SIZEOF_VOID_P       GRUB_TARGET_SIZEOF_VOID_P
-+# define GRUB_CPU_SIZEOF_LONG GRUB_TARGET_SIZEOF_LONG
-+# ifdef GRUB_TARGET_WORDS_BIGENDIAN
-+#  define GRUB_CPU_WORDS_BIGENDIAN    1
-+# else
-+#  undef GRUB_CPU_WORDS_BIGENDIAN
-+# endif
-+#endif /* ! GRUB_UTIL */
-+
-+#if GRUB_CPU_SIZEOF_VOID_P != GRUB_CPU_SIZEOF_LONG
-+# error "This architecture is not supported because sizeof(void *) != sizeof(long)"
-+#endif
-+
-+#if GRUB_CPU_SIZEOF_VOID_P != 4 && GRUB_CPU_SIZEOF_VOID_P != 8
-+# error "This architecture is not supported because sizeof(void *) != 4 and sizeof(void *) != 8"
-+#endif
-+
-+/* Define various wide integers.  */
-+typedef signed char           grub_int8_t;
-+typedef short                 grub_int16_t;
-+typedef int                   grub_int32_t;
-+#if GRUB_CPU_SIZEOF_VOID_P == 8
-+typedef long                  grub_int64_t;
-+#else
-+typedef long long             grub_int64_t;
-+#endif
-+
-+typedef unsigned char         grub_uint8_t;
-+typedef unsigned short                grub_uint16_t;
-+typedef unsigned              grub_uint32_t;
-+#if GRUB_CPU_SIZEOF_VOID_P == 8
-+typedef unsigned long         grub_uint64_t;
-+#else
-+typedef unsigned long long    grub_uint64_t;
-+#endif
-+
-+/* Misc types.  */
-+#if GRUB_TARGET_SIZEOF_VOID_P == 8
-+typedef grub_uint64_t grub_target_addr_t;
-+typedef grub_uint64_t grub_target_off_t;
-+typedef grub_uint64_t grub_target_size_t;
-+typedef grub_int64_t  grub_target_ssize_t;
-+#else
-+typedef grub_uint32_t grub_target_addr_t;
-+typedef grub_uint32_t grub_target_off_t;
-+typedef grub_uint32_t grub_target_size_t;
-+typedef grub_int32_t  grub_target_ssize_t;
-+#endif
-+
-+typedef unsigned long   grub_addr_t;
-+#if GRUB_CPU_SIZEOF_VOID_P == 8
-+typedef grub_uint64_t grub_size_t;
-+typedef grub_int64_t  grub_ssize_t;
-+#else
-+typedef grub_uint32_t grub_size_t;
-+typedef grub_int32_t  grub_ssize_t;
-+#endif
-+
-+/* The type for representing a file offset.  */
-+typedef grub_uint64_t grub_off_t;
-+
-+/* The type for representing a disk block address.  */
-+typedef grub_uint64_t grub_disk_addr_t;
-+
-+/* Byte-orders.  */
-+#define grub_swap_bytes16(x)  \
-+({ \
-+   grub_uint16_t _x = (x); \
-+   (grub_uint16_t) ((_x << 8) | (_x >> 8)); \
-+})
-+
-+#define grub_swap_bytes32(x)  \
-+({ \
-+   grub_uint32_t _x = (x); \
-+   (grub_uint32_t) ((_x << 24) \
-+                    | ((_x & (grub_uint32_t) 0xFF00UL) << 8) \
-+                    | ((_x & (grub_uint32_t) 0xFF0000UL) >> 8) \
-+                    | (_x >> 24)); \
-+})
-+
-+#define grub_swap_bytes64(x)  \
-+({ \
-+   grub_uint64_t _x = (x); \
-+   (grub_uint64_t) ((_x << 56) \
-+                    | ((_x & (grub_uint64_t) 0xFF00ULL) << 40) \
-+                    | ((_x & (grub_uint64_t) 0xFF0000ULL) << 24) \
-+                    | ((_x & (grub_uint64_t) 0xFF000000ULL) << 8) \
-+                    | ((_x & (grub_uint64_t) 0xFF00000000ULL) >> 8) \
-+                    | ((_x & (grub_uint64_t) 0xFF0000000000ULL) >> 24) \
-+                    | ((_x & (grub_uint64_t) 0xFF000000000000ULL) >> 40) \
-+                    | (_x >> 56)); \
-+})
-+
-+#ifdef GRUB_CPU_WORDS_BIGENDIAN
-+# define grub_cpu_to_le16(x)  grub_swap_bytes16(x)
-+# define grub_cpu_to_le32(x)  grub_swap_bytes32(x)
-+# define grub_cpu_to_le64(x)  grub_swap_bytes64(x)
-+# define grub_le_to_cpu16(x)  grub_swap_bytes16(x)
-+# define grub_le_to_cpu32(x)  grub_swap_bytes32(x)
-+# define grub_le_to_cpu64(x)  grub_swap_bytes64(x)
-+# define grub_cpu_to_be16(x)  ((grub_uint16_t) (x))
-+# define grub_cpu_to_be32(x)  ((grub_uint32_t) (x))
-+# define grub_cpu_to_be64(x)  ((grub_uint64_t) (x))
-+# define grub_be_to_cpu16(x)  ((grub_uint16_t) (x))
-+# define grub_be_to_cpu32(x)  ((grub_uint32_t) (x))
-+# define grub_be_to_cpu64(x)  ((grub_uint64_t) (x))
-+#else /* ! WORDS_BIGENDIAN */
-+# define grub_cpu_to_le16(x)  ((grub_uint16_t) (x))
-+# define grub_cpu_to_le32(x)  ((grub_uint32_t) (x))
-+# define grub_cpu_to_le64(x)  ((grub_uint64_t) (x))
-+# define grub_le_to_cpu16(x)  ((grub_uint16_t) (x))
-+# define grub_le_to_cpu32(x)  ((grub_uint32_t) (x))
-+# define grub_le_to_cpu64(x)  ((grub_uint64_t) (x))
-+# define grub_cpu_to_be16(x)  grub_swap_bytes16(x)
-+# define grub_cpu_to_be32(x)  grub_swap_bytes32(x)
-+# define grub_cpu_to_be64(x)  grub_swap_bytes64(x)
-+# define grub_be_to_cpu16(x)  grub_swap_bytes16(x)
-+# define grub_be_to_cpu32(x)  grub_swap_bytes32(x)
-+# define grub_be_to_cpu64(x)  grub_swap_bytes64(x)
-+#endif /* ! WORDS_BIGENDIAN */
-+
-+#endif /* ! GRUB_TYPES_HEADER */
-diff --git a/efi/grub/x86_64/linux.h b/efi/grub/x86_64/linux.h
-new file mode 100644
-index 0000000..4e81ca6
---- /dev/null
-+++ b/efi/grub/x86_64/linux.h
-@@ -0,0 +1,234 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifndef GRUB_LINUX_MACHINE_HEADER
-+#define GRUB_LINUX_MACHINE_HEADER     1
-+
-+#define GRUB_LINUX_MAGIC_SIGNATURE    0x53726448      /* "HdrS" */
-+#define GRUB_LINUX_DEFAULT_SETUP_SECTS        4
-+#define GRUB_LINUX_FLAG_CAN_USE_HEAP  0x80
-+#define GRUB_LINUX_INITRD_MAX_ADDRESS 0x37FFFFFF
-+#define GRUB_LINUX_MAX_SETUP_SECTS    64
-+#define GRUB_LINUX_BOOT_LOADER_TYPE   0x72
-+#define GRUB_LINUX_HEAP_END_OFFSET    (0x9000 - 0x200)
-+
-+#define GRUB_LINUX_BZIMAGE_ADDR               0x100000
-+#define GRUB_LINUX_ZIMAGE_ADDR                0x10000
-+#define GRUB_LINUX_OLD_REAL_MODE_ADDR 0x90000
-+#define GRUB_LINUX_SETUP_STACK                0x9000
-+
-+#define GRUB_LINUX_FLAG_BIG_KERNEL    0x1
-+
-+/* Linux's video mode selection support. Actually I hate it!  */
-+#define GRUB_LINUX_VID_MODE_NORMAL    0xFFFF
-+#define GRUB_LINUX_VID_MODE_EXTENDED  0xFFFE
-+#define GRUB_LINUX_VID_MODE_ASK               0xFFFD
-+
-+#define GRUB_LINUX_CL_OFFSET          0x9000
-+#define GRUB_LINUX_CL_END_OFFSET      0x90FF
-+#define GRUB_LINUX_SETUP_MOVE_SIZE    0x9100
-+#define GRUB_LINUX_CL_MAGIC           0xA33F
-+
-+#if 0 
-+#define GRUB_LINUX_EFI_SIGNATURE_X64  \
-+  ('4' << 24 | '6' << 16 | 'L' << 8 | 'E')
-+#else
-+#define GRUB_LINUX_EFI_SIGNATURE_X64  \
-+  ('L' << 24 | 'I' << 16 | 'F' << 8 | 'E')
-+#endif
-+
-+#ifndef ASM_FILE
-+
-+/* For the Linux/i386 boot protocol version 2.07.  */
-+struct grub_linux_kernel_header
-+{
-+  grub_uint8_t setup_sects;   /* The size of the setup in sectors */
-+  grub_uint16_t root_flags;   /* If the root is mounted readonly */
-+  grub_uint32_t syssize;      /* obsolete */
-+  grub_uint16_t ram_size;     /* obsolete */
-+  grub_uint16_t vid_mode;     /* Video mode control */
-+  grub_uint16_t root_dev;     /* Default root device number */
-+  grub_uint16_t boot_flag;    /* 0xAA55 magic number */
-+  grub_uint8_t jump_ins;      /* Jump instruction */
-+  grub_uint8_t jump_off;      /* Jump offset */
-+  grub_uint32_t header;               /* Magic signature "HdrS" */
-+  grub_uint16_t version;      /* Boot protocol version supported */
-+  grub_uint32_t realmode_swtch;       /* Boot loader hook */
-+  grub_uint16_t start_sys;    /* The load-low segment (obsolete) */
-+  grub_uint16_t kernel_version;       /* Points to kernel version string */
-+  grub_uint8_t type_of_loader;        /* Boot loader identifier */
-+  grub_uint8_t loadflags;     /* Boot protocol option flags */
-+  grub_uint16_t setup_move_size;/* Move to high memory size */
-+  grub_uint32_t code32_start; /* Boot loader hook */
-+  grub_uint32_t ramdisk_image;        /* initrd load address */
-+  grub_uint32_t ramdisk_size; /* initrd size */
-+  grub_uint32_t bootsect_kludge;/* obsolete */
-+  grub_uint16_t heap_end_ptr; /* Free memory after setup end */
-+  grub_uint16_t pad1;         /* Unused */
-+  grub_uint32_t cmd_line_ptr; /* Points to the kernel command line */
-+  grub_uint32_t initrd_addr_max;/* Highest address for initrd */
-+  grub_uint32_t kernel_alignment;
-+  grub_uint8_t relocatable_kernel;
-+  grub_uint8_t min_alignment;
-+  grub_uint8_t pad2[2];
-+  grub_uint32_t cmdline_size;
-+  grub_uint32_t hardware_subarch;
-+  grub_uint64_t hardware_subarch_data;
-+  grub_uint32_t payload_offset;
-+  grub_uint32_t payload_length;
-+  grub_uint64_t setup_data;
-+  grub_uint64_t pref_address;
-+  grub_uint32_t init_size;
-+} __attribute__ ((packed));
-+
-+/* Boot parameters for Linux based on 2.6.12. This is used by the setup
-+   sectors of Linux, and must be simulated by GRUB on EFI, because
-+   the setup sectors depend on BIOS.  */
-+struct linux_kernel_params
-+{
-+  grub_uint8_t video_cursor_x;        /* 0 */
-+  grub_uint8_t video_cursor_y;
-+
-+  grub_uint16_t ext_mem;      /* 2 */
-+
-+  grub_uint16_t video_page;   /* 4 */
-+  grub_uint8_t video_mode;    /* 6 */
-+  grub_uint8_t video_width;   /* 7 */
-+
-+  grub_uint8_t padding1[0xa - 0x8];
-+
-+  grub_uint16_t video_ega_bx; /* a */
-+
-+  grub_uint8_t padding2[0xe - 0xc];
-+
-+  grub_uint8_t video_height;  /* e */
-+  grub_uint8_t have_vga;      /* f */
-+  grub_uint16_t font_size;    /* 10 */
-+
-+  grub_uint16_t lfb_width;    /* 12 */
-+  grub_uint16_t lfb_height;   /* 14 */
-+  grub_uint16_t lfb_depth;    /* 16 */
-+  grub_uint32_t lfb_base;     /* 18 */
-+  grub_uint32_t lfb_size;     /* 1c */
-+
-+  grub_uint16_t cl_magic;     /* 20 */
-+  grub_uint16_t cl_offset;
-+
-+  grub_uint16_t lfb_line_len; /* 24 */
-+  grub_uint8_t red_mask_size; /* 26 */
-+  grub_uint8_t red_field_pos;
-+  grub_uint8_t green_mask_size;
-+  grub_uint8_t green_field_pos;
-+  grub_uint8_t blue_mask_size;
-+  grub_uint8_t blue_field_pos;
-+  grub_uint8_t reserved_mask_size;
-+  grub_uint8_t reserved_field_pos;
-+  grub_uint16_t vesapm_segment;       /* 2e */
-+  grub_uint16_t vesapm_offset;        /* 30 */
-+  grub_uint16_t lfb_pages;    /* 32 */
-+  grub_uint16_t vesa_attrib;  /* 34 */
-+  grub_uint32_t capabilities;   /* 36 */
-+
-+  grub_uint8_t padding3[0x40 - 0x3a];
-+
-+  grub_uint16_t apm_version;  /* 40 */
-+  grub_uint16_t apm_code_segment;     /* 42 */
-+  grub_uint32_t apm_entry;    /* 44 */
-+  grub_uint16_t apm_16bit_code_segment;       /* 48 */
-+  grub_uint16_t apm_data_segment;     /* 4a */
-+  grub_uint16_t apm_flags;    /* 4c */
-+  grub_uint32_t apm_code_len; /* 4e */
-+  grub_uint16_t apm_data_len; /* 52 */
-+
-+  grub_uint8_t padding4[0x60 - 0x54];
-+
-+  grub_uint32_t ist_signature;        /* 60 */
-+  grub_uint32_t ist_command;  /* 64 */
-+  grub_uint32_t ist_event;    /* 68 */
-+  grub_uint32_t ist_perf_level;       /* 6c */
-+
-+  grub_uint8_t padding5[0x80 - 0x70];
-+
-+  grub_uint8_t hd0_drive_info[0x10];  /* 80 */
-+  grub_uint8_t hd1_drive_info[0x10];  /* 90 */
-+  grub_uint16_t rom_config_len;       /* a0 */
-+
-+  grub_uint8_t padding6[0x1b8 - 0xa2];
-+
-+  union {
-+    struct {
-+      grub_uint32_t padding7_1; /* 0x1b8 */
-+      grub_uint32_t padding7_2; /* 0x1bc */
-+
-+      grub_uint32_t efi_signature;    /* 1c0 */
-+      grub_uint32_t efi_system_table; /* 1c4 */
-+      grub_uint32_t efi_mem_desc_size;        /* 1c8 */
-+      grub_uint32_t efi_mem_desc_version;     /* 1cc */
-+      grub_uint32_t efi_mmap;      /* 1d0 */
-+      grub_uint32_t efi_mmap_size;    /* 1d4 */
-+      grub_uint32_t efi_system_table_hi;      /* 1d8 */
-+      grub_uint32_t efi_mmap_hi;      /* 1dc */
-+    } dunno;
-+    struct {
-+      grub_uint32_t efi_system_table; /* 1b8 */
-+
-+      grub_uint32_t padding7_1; /* 0x1bc */
-+
-+      grub_uint32_t efi_signature;    /* 1c0 */
-+      grub_uint32_t efi_mem_desc_size;        /* 1c4 */
-+      grub_uint32_t efi_mem_desc_version;     /* 1c8 */
-+      grub_uint32_t efi_mmap_size;    /* 1cc */
-+      grub_uint32_t efi_mmap; /* 1d0 */
-+
-+      grub_uint8_t padding7_2[0x1e0 - 0x1d4]; /* 1d4 */
-+    } version_0204;
-+    struct {
-+      grub_uint32_t padding7_1; /* 0x1b8 */
-+      grub_uint32_t padding7_2; /* 0x1bc */
-+      grub_uint32_t padding7_3; /* 0x1c0 */
-+      grub_uint32_t efi_system_table; /* 0x1c4 */
-+      grub_uint32_t efi_mem_desc_size; /* 0x1c8 */
-+      grub_uint32_t efi_mem_desc_version; /* 0x1cc */
-+      grub_uint32_t efi_mmap; /* 0x1d0 */
-+      grub_uint32_t efi_mmap_size; /* 0x1d4 */
-+      grub_uint8_t padding7_4[0x1e0 - 0x1d8]; /* 0x1d8 */
-+    } version_0206;
-+  };
-+
-+  grub_uint32_t alt_mem;      /* 1e0 */
-+
-+  grub_uint8_t padding8[0x1e8 - 0x1e4];       /* 1e4 */
-+
-+  grub_uint8_t e820_nr_map;   /* 1e8 */
-+  grub_uint8_t eddbuf_entries;        /* 1e9 */
-+  grub_uint8_t edd_mbr_sig_buf_entries;       /* 1ea */
-+
-+  grub_uint8_t padding9[0x1f1 - 0x1eb];
-+
-+  struct grub_linux_kernel_header hdr;        /* 0x1f1 */
-+
-+  grub_uint8_t padding10[0x2d0-0x1f1-sizeof(struct grub_linux_kernel_header)];
-+
-+  grub_uint8_t e820_map[2560];        /* 0x2d0 */
-+
-+  grub_uint8_t padding11[0x1000 - 0xcd0];
-+} __attribute__ ((packed));
-+#endif /* ! ASM_FILE */
-+
-+#endif /* ! GRUB_LINUX_MACHINE_HEADER */
-diff --git a/efi/grub/x86_64/types.h b/efi/grub/x86_64/types.h
-new file mode 100644
-index 0000000..0c077f6
---- /dev/null
-+++ b/efi/grub/x86_64/types.h
-@@ -0,0 +1,32 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2002,2006  Free Software Foundation, Inc.
-+ *
-+ *  GRUB is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with GRUB; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifndef GRUB_TYPES_CPU_HEADER
-+#define GRUB_TYPES_CPU_HEADER 1
-+
-+/* The size of void *.  */
-+#define GRUB_TARGET_SIZEOF_VOID_P     8
-+
-+/* The size of long.  */
-+#define GRUB_TARGET_SIZEOF_LONG               8
-+
-+/* x64_64 is little-endian.  */
-+#undef GRUB_TARGET_WORDS_BIGENDIAN
-+
-+#endif /* ! GRUB_TYPES_CPU_HEADER */
-diff --git a/efi/ia32/callwrap.S b/efi/ia32/callwrap.S
-new file mode 100644
-index 0000000..50d737f
---- /dev/null
-+++ b/efi/ia32/callwrap.S
-@@ -0,0 +1 @@
-+/* This file is a stub for ia32 building */
-diff --git a/efi/ia32/callwrap.c b/efi/ia32/callwrap.c
-new file mode 100644
-index 0000000..56df899
---- /dev/null
-+++ b/efi/ia32/callwrap.c
-@@ -0,0 +1,131 @@
-+
-+#define ENTRY(name)           \
-+      ".globl " #name ";"     \
-+      ".align 16;"            \
-+      #name ":"
-+
-+asm(
-+ENTRY(i386_call0)
-+      "pushl  %ebp            \n"
-+      "movl   %esp,%ebp       \n"
-+      "subl   $8, %esp        \n"
-+      "call   *8(%ebp)        \n"
-+      "leave                  \n"
-+      "ret                    \n"
-+      );
-+
-+asm(
-+ENTRY(i386_call1)
-+      "pushl  %ebp            \n"
-+      "movl   %esp,%ebp       \n"
-+      "subl   $20, %esp       \n"
-+      "pushl  12(%ebp)        \n"
-+      "call   *8(%ebp)        \n"
-+      "leave                  \n"
-+      "ret                    \n"
-+      );
-+
-+asm(
-+ENTRY(i386_call2)
-+      "pushl  %ebp            \n"
-+      "movl   %esp,%ebp       \n"
-+      "subl   $16, %esp       \n"
-+      "pushl  16(%ebp)        \n"
-+      "pushl  12(%ebp)        \n"
-+      "call   *8(%ebp)        \n"
-+      "leave                  \n"
-+      "ret                    \n"
-+      );
-+
-+asm(
-+ENTRY(i386_call3)
-+      "pushl  %ebp            \n"
-+      "movl   %esp,%ebp       \n"
-+      "subl   $12, %esp       \n"
-+      "pushl  20(%ebp)        \n"
-+      "pushl  16(%ebp)        \n"
-+      "pushl  12(%ebp)        \n"
-+      "call   *8(%ebp)        \n"
-+      "leave                  \n"
-+      "ret                    \n"
-+      );
-+
-+asm(
-+ENTRY(i386_call4)
-+      "pushl  %ebp            \n"
-+      "movl   %esp,%ebp       \n"
-+      "subl   $8, %esp        \n"
-+      "pushl  24(%ebp)        \n"
-+      "pushl  20(%ebp)        \n"
-+      "pushl  16(%ebp)        \n"
-+      "pushl  12(%ebp)        \n"
-+      "call   *8(%ebp)        \n"
-+      "leave                  \n"
-+      "ret                    \n"
-+      );
-+
-+asm(
-+ENTRY(i386_call5)
-+      "pushl  %ebp            \n"
-+      "movl   %esp,%ebp       \n"
-+      "subl   $20, %esp       \n"
-+      "pushl  28(%ebp)        \n"
-+      "pushl  24(%ebp)        \n"
-+      "pushl  20(%ebp)        \n"
-+      "pushl  16(%ebp)        \n"
-+      "pushl  12(%ebp)        \n"
-+      "call   *8(%ebp)        \n"
-+      "leave                  \n"
-+      "ret                    \n"
-+      );
-+
-+asm(
-+ENTRY(i386_64_call5)
-+      "pushl  %ebp            \n"
-+      "movl   %esp,%ebp       \n"
-+      "subl   $12, %esp       \n"
-+      "pushl  36(%ebp)        \n"
-+      "pushl  32(%ebp)        \n"
-+      "pushl  28(%ebp)        \n"
-+      "pushl  24(%ebp)        \n"
-+      "pushl  20(%ebp)        \n"
-+      "pushl  16(%ebp)        \n"
-+      "pushl  12(%ebp)        \n"
-+      "call   *8(%ebp)        \n"
-+      "leave                  \n"
-+      "ret                    \n"
-+      );
-+
-+
-+asm(
-+ENTRY(i386_call6)
-+      "pushl  %ebp            \n"
-+      "movl   %esp,%ebp       \n"
-+      "subl   $16, %esp       \n"
-+      "pushl  32(%ebp)        \n"
-+      "pushl  28(%ebp)        \n"
-+      "pushl  24(%ebp)        \n"
-+      "pushl  20(%ebp)        \n"
-+      "pushl  16(%ebp)        \n"
-+      "pushl  12(%ebp)        \n"
-+      "call   *8(%ebp)        \n"
-+      "leave                  \n"
-+      "ret                    \n"
-+      );
-+
-+asm(
-+ENTRY(i386_call7)
-+      "pushl  %ebp            \n"
-+      "movl   %esp,%ebp       \n"
-+      "subl   $12, %esp       \n"
-+      "pushl  36(%ebp)        \n"
-+      "pushl  32(%ebp)        \n"
-+      "pushl  28(%ebp)        \n"
-+      "pushl  24(%ebp)        \n"
-+      "pushl  20(%ebp)        \n"
-+      "pushl  16(%ebp)        \n"
-+      "pushl  12(%ebp)        \n"
-+      "call   *8(%ebp)        \n"
-+      "leave                  \n"
-+      "ret                    \n"
-+      );
-diff --git a/efi/ia32/loader/bin_to_h.c b/efi/ia32/loader/bin_to_h.c
-new file mode 100644
-index 0000000..4cff104
---- /dev/null
-+++ b/efi/ia32/loader/bin_to_h.c
-@@ -0,0 +1,29 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+
-+int
-+main (void)
-+{
-+  unsigned n = 0;
-+  int c;
-+
-+  printf ("unsigned char switch_image[] = {\n");
-+
-+  while ((c = getchar ()) != EOF)
-+    {
-+      printf("0x%02x,%s",
-+           c & 0xFF,
-+           (++n & 0x07) ? " " : "\n");
-+    }
-+
-+  if (n & 0x07)
-+    {
-+      printf("\n");
-+    }
-+
-+  printf("};\n"
-+       "int switch_size = sizeof switch_image;\n");
-+
-+  return 0;
-+}
-+
-diff --git a/efi/ia32/loader/linux.c b/efi/ia32/loader/linux.c
-new file mode 100644
-index 0000000..d795d28
---- /dev/null
-+++ b/efi/ia32/loader/linux.c
-@@ -0,0 +1,648 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2006  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#include <grub/misc.h>
-+#include <grub/types.h>
-+#include <grub/cpu/linux.h>
-+#include <grub/efi/api.h>
-+#include <grub/efi/efi.h>
-+#include <grub/efi/misc.h>
-+
-+#include "switch.h"
-+
-+#include <shared.h>
-+
-+#include "graphics.h"
-+
-+#define grub_file_size()    filemax
-+
-+#define NEXT_MEMORY_DESCRIPTOR(desc, size)      \
-+  ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size)))
-+
-+#define PTR_HI(x) ((grub_uint32_t) ((unsigned long long)((unsigned long)(x)) >> 32))
-+
-+#ifndef SECTOR_SIZE
-+#define SECTOR_SIZE 0x200
-+#endif /* defined(SECTOR_SIZE) */
-+#ifndef SECTOR_BITS
-+#define SECTOR_BITS 9
-+#endif /* defined(SECTOR_BITS) */
-+
-+static unsigned long linux_mem_size;
-+static int loaded;
-+static void *real_mode_mem;
-+static void *prot_mode_mem;
-+static void *initrd_mem;
-+static grub_efi_uintn_t real_mode_pages;
-+static grub_efi_uintn_t prot_mode_pages;
-+static grub_efi_uintn_t initrd_pages;
-+static grub_efi_guid_t graphics_output_guid = GRUB_EFI_GRAPHICS_OUTPUT_GUID;
-+
-+static inline grub_size_t
-+page_align (grub_size_t size)
-+{
-+  return (size + (1 << 12) - 1) & (~((1 << 12) - 1));
-+}
-+
-+static void
-+free_pages (void)
-+{
-+  if (real_mode_mem)
-+    {
-+      grub_efi_free_pages ((grub_addr_t) real_mode_mem, real_mode_pages);
-+      real_mode_mem = 0;
-+    }
-+
-+  if (prot_mode_mem)
-+    {
-+      grub_efi_free_pages ((grub_addr_t) prot_mode_mem, prot_mode_pages);
-+      prot_mode_mem = 0;
-+    }
-+
-+  if (initrd_mem)
-+    {
-+      grub_efi_free_pages ((grub_addr_t) initrd_mem, initrd_pages);
-+      initrd_mem = 0;
-+    }
-+
-+  if (mmap_buf)
-+    {
-+      grub_efi_free_pages ((grub_addr_t) mmap_buf, mmap_pages);
-+      mmap_buf = 0;
-+    }
-+}
-+
-+/* Allocate pages for the real mode code and the protected mode code
-+   for linux as well as a memory map buffer.  */
-+static int
-+allocate_pages (grub_size_t real_size, grub_size_t prot_size)
-+{
-+  grub_efi_uintn_t desc_size;
-+  grub_efi_memory_descriptor_t *mmap_end;
-+  grub_efi_memory_descriptor_t *desc;
-+  grub_efi_physical_address_t addr;
-+
-+  /* Make sure that each size is aligned to a page boundary.  */
-+  real_size = page_align (real_size + SECTOR_SIZE);
-+  prot_size = page_align (prot_size);
-+
-+  grub_dprintf ("linux", "real_size = %x, prot_size = %x, mmap_size = %x\n",
-+              (unsigned int) real_size, (unsigned int) prot_size,
-+              (unsigned int) mmap_size);
-+
-+  /* Calculate the number of pages; Combine the real mode code with
-+     the memory map buffer for simplicity.  */
-+  real_mode_pages = (real_size >> 12);
-+  prot_mode_pages = (prot_size >> 12);
-+
-+  /* Initialize the memory pointers with NULL for convenience.  */
-+  real_mode_mem = 0;
-+  prot_mode_mem = 0;
-+
-+  if (grub_efi_get_memory_map (0, &desc_size, 0) <= 0)
-+    grub_fatal ("cannot get memory map");
-+
-+  addr = 0;
-+  mmap_end = NEXT_MEMORY_DESCRIPTOR (mmap_buf, mmap_size);
-+  /* First, find free pages for the real mode code
-+     and the memory map buffer.  */
-+  for (desc = mmap_buf;
-+       desc < mmap_end;
-+       desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size))
-+    {
-+      if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY
-+        && desc->num_pages >= real_mode_pages)
-+      {
-+        grub_efi_physical_address_t physical_end;
-+
-+          physical_end = desc->physical_start + (desc->num_pages << 12);
-+
-+          grub_dprintf ("linux", "physical_start = %x, physical_end = %x\n",
-+                        (unsigned) desc->physical_start,
-+                        (unsigned) physical_end);
-+          addr = physical_end - real_size;
-+          if (addr < 0x10000)
-+            continue;
-+
-+          grub_dprintf ("linux", "trying to allocate %u pages at %x\n",
-+                        (unsigned) real_mode_pages, (unsigned) addr);
-+          real_mode_mem = grub_efi_allocate_pages (addr, real_mode_pages);
-+          if (! real_mode_mem)
-+            grub_fatal ("cannot allocate pages");
-+
-+          desc->num_pages -= real_mode_pages;
-+          break;
-+      }
-+    }
-+
-+  if (! real_mode_mem)
-+    {
-+      grub_printf ("cannot allocate real mode pages");
-+      errnum = ERR_WONT_FIT;
-+      goto fail;
-+    }
-+
-+  /* Next, find free pages for the protected mode code.  */
-+  /* XXX what happens if anything is using this address?  */
-+  prot_mode_mem = grub_efi_allocate_pages (0x100000, prot_mode_pages);
-+  if (! prot_mode_mem)
-+      grub_fatal("Cannot allocate pages for VMLINUZ");
-+
-+  return 1;
-+
-+ fail:
-+  free_pages ();
-+  return 0;
-+}
-+
-+/* do some funky stuff, then boot linux */
-+void
-+linux_boot (void)
-+{
-+  grub_printf ("zImage is not supported under EFI.\n");
-+  for (;;);
-+}
-+
-+#ifndef __x86_64__
-+struct {
-+    unsigned short limit;
-+    unsigned int base;
-+} __attribute__ ((packed)) 
-+  gdt_addr = { 0x800, 0x94000 },
-+  idt_addr = { 0, 0 };
-+
-+unsigned short init_gdt[] = {
-+  /* gdt[0]: dummy */
-+  0, 0, 0, 0,
-+
-+  /* gdt[1]: unused */
-+  0, 0, 0, 0,
-+
-+  /* gdt[2]: code */
-+  0xFFFF,         /* 4Gb - (0x100000*0x1000 = 4Gb) */
-+  0x0000,         /* base address=0 */
-+  0x9A00,         /* code read/exec */
-+  0x00CF,         /* granularity=4096, 386 (+5th nibble of limit) */
-+
-+  /* gdt[3]: data */
-+  0xFFFF,         /* 4Gb - (0x100000*0x1000 = 4Gb) */
-+  0x0000,         /* base address=0 */
-+  0x9200,         /* data read/write */
-+  0x00CF,         /* granularity=4096, 386 (+5th nibble of limit) */
-+};
-+#endif
-+
-+void
-+big_linux_boot (void)
-+{
-+  struct linux_kernel_params *params;
-+  struct grub_linux_kernel_header *lh;
-+  grub_efi_uintn_t map_key;
-+  grub_efi_uintn_t desc_size;
-+  grub_efi_uint32_t desc_version;
-+  int e820_nr_map;
-+  int i;
-+
-+  params = real_mode_mem;
-+
-+  graphics_set_kernel_params (params);
-+
-+  if (grub_efi_get_memory_map (&map_key, &desc_size, &desc_version) <= 0)
-+    grub_fatal ("cannot get memory map");
-+
-+  /* Pass e820 memmap. */
-+  e820_map_from_efi_map ((struct e820_entry *) params->e820_map, &e820_nr_map,
-+                       mmap_buf, desc_size, mmap_size);
-+  params->e820_nr_map = e820_nr_map;
-+
-+  grub_dprintf(__func__,"got to ExitBootServices...\n");
-+  if (! grub_efi_exit_boot_services (map_key))
-+    grub_fatal ("cannot exit boot services");
-+  /* Note that no boot services are available from here.  */
-+
-+  lh = &params->hdr;
-+  /* Pass EFI parameters.  */
-+  if (grub_le_to_cpu16 (lh->version) >= 0x0206) {
-+    params->version_0206.efi_mem_desc_size = desc_size;
-+    params->version_0206.efi_mem_desc_version = desc_version;
-+    params->version_0206.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf;
-+    params->version_0206.efi_mmap_size = mmap_size;
-+  } else if (grub_le_to_cpu16 (lh->version) >= 0x0204) {
-+    params->version_0204.efi_mem_desc_size = desc_size;
-+    params->version_0204.efi_mem_desc_version = desc_version;
-+    params->version_0204.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf;
-+    params->version_0204.efi_mmap_size = mmap_size;
-+  } else /* dunno */ {
-+    params->dunno.efi_mem_desc_size = desc_size;
-+    params->dunno.efi_mem_desc_version = desc_version;
-+    params->dunno.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf;
-+    params->dunno.efi_mmap_size = mmap_size;
-+    params->dunno.efi_mmap_hi = PTR_HI(mmap_buf);
-+  }
-+
-+#ifdef __x86_64__
-+  /* copy our real mode transition code to 0x700 */
-+  memcpy ((void *) 0x700, switch_image, switch_size);
-+  asm volatile ( "mov $0x700, %%rdi" : :);
-+
-+  /* Pass parameters.  */
-+  asm volatile ("mov %0, %%rsi" : : "m" (real_mode_mem));
-+  asm volatile ("movl %0, %%ebx" : : "m" (params->hdr.code32_start));
-+
-+  /* Enter Linux, switch from 64-bit long mode
-+   * to 32-bit protect mode, this code end address
-+   * must not exceed 0x1000, because linux kernel bootstrap
-+   * code will flush this area
-+   */
-+  asm volatile ( "jmp *%%rdi" : :);
-+#else
-+
-+  asm volatile ( "cli" : : );
-+
-+  grub_memset((void *)gdt_addr.base, gdt_addr.limit, 0);
-+  grub_memcpy((void *)gdt_addr.base, init_gdt, sizeof (init_gdt));
-+
-+  if (0) {
-+    /* copy our real mode transition code to 0x7C00 */
-+    memcpy ((void *) 0x7C00, switch_image, switch_size);
-+    asm volatile ( "mov $0x7C00, %%ebx" : : );
-+    asm volatile ( "jmp *%%ebx" : : );
-+  } else {
-+
-+    /* load descriptor table pointers */
-+    // asm volatile ( "lidt %0" : : "m" (idt_addr) );
-+    asm volatile ( "lgdt %0" : : "m" (gdt_addr) );
-+
-+    /*
-+     * ebx := 0  (%%TBD - do not know why, yet)
-+     * ecx := kernel entry point
-+     * esi := address of boot sector and setup data
-+     */
-+
-+    asm volatile ( "movl %0, %%esi" : : "m" (real_mode_mem) );
-+    asm volatile ( "movl %0, %%ecx" : : "m" (params->hdr.code32_start) );
-+    asm volatile ( "xorl %%ebx, %%ebx" : : );
-+
-+    /*
-+     * Jump to kernel entry point.
-+     */
-+
-+    asm volatile ( "jmp *%%ecx" : : );
-+  }
-+#endif
-+
-+  /* Never reach here.  */
-+  for (;;);
-+}
-+
-+int
-+grub_load_linux (char *kernel, char *arg)
-+{
-+  struct grub_linux_kernel_header *lh;
-+  struct linux_kernel_params *params;
-+  static struct linux_kernel_params params_buf;
-+  grub_uint8_t setup_sects;
-+  grub_size_t real_size, prot_size;
-+  grub_ssize_t len;
-+  char *dest;
-+
-+  if (kernel == NULL)
-+    {
-+      errnum = ERR_BAD_FILENAME;
-+      grub_printf ("no kernel specified");
-+      goto fail1;
-+    }
-+
-+  if (! grub_open (kernel))
-+    goto fail1;
-+
-+  if (grub_read ((char *) &params_buf, sizeof (params_buf))
-+      != sizeof (params_buf))
-+    {
-+      errnum = ERR_EXEC_FORMAT;
-+      grub_close();
-+      grub_printf ("cannot read the linux header");
-+      goto fail;
-+    }
-+
-+  lh = &params_buf.hdr;
-+
-+  if (lh->boot_flag != grub_cpu_to_le16 (0xaa55))
-+    {
-+      errnum = ERR_EXEC_FORMAT;
-+      grub_close();
-+      grub_printf ("invalid magic number: %x", lh->boot_flag);
-+      goto fail;
-+    }
-+
-+  /* EFI support is quite new, so reject old versions.  */
-+  if (lh->header != grub_cpu_to_le32 (GRUB_LINUX_MAGIC_SIGNATURE)
-+      || grub_le_to_cpu16 (lh->version) < 0x0203)
-+    {
-+      grub_close();
-+      errnum = ERR_EXEC_FORMAT;
-+      grub_printf ("too old version");
-+      goto fail;
-+    }
-+
-+  /* I'm not sure how to support zImage on EFI.  */
-+  if (! (lh->loadflags & GRUB_LINUX_FLAG_BIG_KERNEL))
-+    {
-+      errnum = ERR_EXEC_FORMAT;
-+      grub_printf ("zImage is not supported");
-+      goto fail;
-+    }
-+
-+  setup_sects = lh->setup_sects;
-+
-+  real_size = 0x1000 + grub_strlen(arg);
-+  prot_size = grub_file_size () - (setup_sects << SECTOR_BITS) - SECTOR_SIZE;
-+
-+  if (! allocate_pages (real_size, prot_size))
-+    goto fail;
-+
-+  /* XXX Linux assumes that only elilo can boot Linux on EFI!!!  */
-+  lh->type_of_loader = 0x50;
-+
-+  lh->cmd_line_ptr = (grub_uint32_t) (unsigned long) real_mode_mem + 0x1000;
-+
-+  lh->heap_end_ptr = LINUX_HEAP_END_OFFSET;
-+  lh->loadflags |= LINUX_FLAG_CAN_USE_HEAP;
-+
-+  lh->ramdisk_image = 0;
-+  lh->ramdisk_size = 0;
-+
-+  grub_memset(real_mode_mem, 0, real_size);
-+
-+  params = (struct linux_kernel_params *) real_mode_mem;
-+
-+  grub_memmove(&params->hdr, lh, 0x202 + lh->jump_off - 0x1f1);
-+
-+  params->cl_magic = GRUB_LINUX_CL_MAGIC;
-+  params->cl_offset = 0x1000;
-+
-+  /* These are not needed to be precise, because Linux uses these values
-+     only to raise an error when the decompression code cannot find good
-+     space.  */
-+  params->ext_mem = ((32 * 0x100000) >> 10);
-+  params->alt_mem = ((32 * 0x100000) >> 10);
-+
-+  /* No APM on EFI.  */
-+  params->apm_version = 0;
-+  params->apm_code_segment = 0;
-+  params->apm_entry = 0;
-+  params->apm_16bit_code_segment = 0;
-+  params->apm_data_segment = 0;
-+  params->apm_flags = 0;
-+  params->apm_code_len = 0;
-+  params->apm_data_len = 0;
-+
-+  /* XXX is there any way to use SpeedStep on EFI?  */
-+  params->ist_signature = 0;
-+  params->ist_command = 0;
-+  params->ist_event = 0;
-+  params->ist_perf_level = 0;
-+
-+  /* Let the kernel probe the information.  */
-+  grub_memset (params->hd0_drive_info, 0, sizeof (params->hd0_drive_info));
-+  grub_memset (params->hd1_drive_info, 0, sizeof (params->hd1_drive_info));
-+
-+  /* No MCA on EFI.  */
-+  params->rom_config_len = 0;
-+
-+  if (grub_le_to_cpu16 (lh->version) >= 0x0206) {
-+    grub_memcpy(&params->version_0204.efi_signature, "EL32", 4);
-+    params->version_0206.efi_system_table = \
-+                        (grub_uint32_t) (unsigned long) grub_efi_system_table;
-+  } else if (grub_le_to_cpu16 (lh->version) >= 0x0204) {
-+    grub_memcpy(&params->version_0204.efi_signature, "EFIL", 4);
-+    params->version_0204.efi_system_table = \
-+                        (grub_uint32_t) (unsigned long) grub_efi_system_table;
-+  } else /* dunno */ {
-+    params->dunno.efi_signature = GRUB_LINUX_EFI_SIGNATURE_X64;
-+    params->dunno.efi_system_table = \
-+                        (grub_uint32_t) (unsigned long) grub_efi_system_table;
-+    params->dunno.efi_system_table_hi = PTR_HI(grub_efi_system_table);
-+  }
-+  /* The other EFI parameters are filled when booting.  */
-+
-+  /* No EDD */
-+  params->eddbuf_entries = 0;
-+  params->edd_mbr_sig_buf_entries = 0;
-+
-+  /* XXX there is no way to know if the kernel really supports EFI.  */
-+  grub_printf ("[Linux-EFI, setup=0x%x, size=0x%x]\n", (unsigned int)real_size,
-+             (unsigned int)prot_size);
-+
-+  /* Check the mem= option to limit memory used for initrd.  */
-+  {
-+    char *mem;
-+
-+    mem = grub_strstr (arg, "mem=");
-+    if (mem)
-+      {
-+      char *value = mem + 4;
-+
-+      safe_parse_maxulong (&value, &linux_mem_size);
-+      switch (errnum)
-+        {
-+        case ERR_NUMBER_OVERFLOW:
-+          /* If an overflow occurs, use the maximum address for
-+             initrd instead. This is good, because MAXINT is
-+             greater than LINUX_INITRD_MAX_ADDRESS.  */
-+          linux_mem_size = LINUX_INITRD_MAX_ADDRESS;
-+          errnum = ERR_NONE;
-+          break;
-+
-+        case ERR_NONE:
-+          {
-+            int shift = 0;
-+
-+            switch (grub_tolower (*value))
-+              {
-+              case 'g':
-+                shift += 10;
-+              case 'm':
-+                shift += 10;
-+              case 'k':
-+                shift += 10;
-+              default:
-+                break;
-+              }
-+
-+            /* Check an overflow.  */
-+            if (linux_mem_size > (~0UL >> shift))
-+              linux_mem_size = 0;
-+            else
-+              linux_mem_size <<= shift;
-+          }
-+          break;
-+
-+        default:
-+          linux_mem_size = 0;
-+          errnum = ERR_NONE;
-+          break;
-+        }
-+      }
-+    else
-+      linux_mem_size = 0;
-+  }
-+
-+  dest = grub_stpcpy ((char *) real_mode_mem + 0x1000, skip_to(0, arg));
-+
-+  grub_seek ((setup_sects << SECTOR_BITS) + SECTOR_SIZE);
-+  len = prot_size;
-+  if (grub_read ((char *) GRUB_LINUX_BZIMAGE_ADDR, len) != len)
-+    grub_printf ("Couldn't read file");
-+
-+  if (errnum == ERR_NONE)
-+    {
-+      loaded = 1;
-+    }
-+
-+ fail:
-+
-+  grub_close ();
-+
-+ fail1:
-+
-+  if (errnum != ERR_NONE)
-+    {
-+      loaded = 0;
-+    }
-+  return errnum ? KERNEL_TYPE_NONE : KERNEL_TYPE_BIG_LINUX;
-+}
-+
-+int
-+grub_load_initrd (char *initrd)
-+{
-+  grub_ssize_t size;
-+  grub_addr_t addr_min, addr_max;
-+  grub_addr_t addr;
-+  grub_efi_uintn_t map_key;
-+  grub_efi_memory_descriptor_t *mmap_end;
-+  grub_efi_memory_descriptor_t *desc;
-+  grub_efi_memory_descriptor_t tdesc;
-+  grub_efi_uintn_t desc_size;
-+  grub_efi_uint32_t desc_version;
-+  struct linux_kernel_params *params;
-+
-+  if (initrd == NULL)
-+    {
-+      errnum = ERR_BAD_FILENAME;
-+      grub_printf ("No module specified");
-+      goto fail1;
-+    }
-+
-+  if (! loaded)
-+    {
-+      errnum = ERR_UNRECOGNIZED;
-+      grub_printf ("You need to load the kernel first.");
-+      goto fail1;
-+    }
-+
-+  if (! grub_open (initrd))
-+    goto fail1;
-+
-+  size = grub_file_size ();
-+  initrd_pages = (page_align (size) >> 12);
-+
-+  params = (struct linux_kernel_params *) real_mode_mem;
-+  grub_dprintf(__func__, "initrd_pages: %lu\n", initrd_pages);
-+
-+  addr_max = grub_cpu_to_le32 (params->hdr.initrd_addr_max);
-+  if (linux_mem_size != 0 && linux_mem_size < addr_max)
-+    addr_max = linux_mem_size;
-+  addr_max &= ~((1 << 12)-1);
-+
-+  /* Linux 2.3.xx has a bug in the memory range check, so avoid
-+     the last page.
-+     Linux 2.2.xx has a bug in the memory range check, which is
-+     worse than that of Linux 2.3.xx, so avoid the last 64kb.  */
-+  //addr_max -= 0x10000;
-+
-+  /* Usually, the compression ratio is about 50%.  */
-+  addr_min = (grub_addr_t) prot_mode_mem + ((prot_mode_pages * 3) << 12);
-+  grub_dprintf(__func__, "prot_mode_mem=%p prot_mode_pages=%lu\n", prot_mode_mem, prot_mode_pages);
-+
-+  /* Find the highest address to put the initrd.  */
-+  if (grub_efi_get_memory_map (&map_key, &desc_size, &desc_version) <= 0)
-+    grub_fatal ("cannot get memory map");
-+
-+  mmap_end = NEXT_MEMORY_DESCRIPTOR (mmap_buf, mmap_size);
-+  addr = 0;
-+  for (desc = mmap_buf;
-+       desc < mmap_end;
-+       desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size))
-+    {
-+      if (desc->type != GRUB_EFI_CONVENTIONAL_MEMORY)
-+        continue;
-+      memcpy(&tdesc, desc, sizeof (tdesc));
-+      if (tdesc.physical_start < addr_min
-+              && tdesc.num_pages > ((addr_min - tdesc.physical_start) >> 12))
-+        {
-+          tdesc.num_pages -= ((addr_min - tdesc.physical_start) >> 12);
-+          tdesc.physical_start = addr_min;
-+        }
-+
-+      grub_dprintf(__func__, "desc = {type=%d,ps=0x%llx,vs=0x%llx,sz=%llu,attr=%llu}\n", desc->type, (unsigned long long)desc->physical_start, (unsigned long long)desc->virtual_start, (unsigned long long)desc->num_pages, (unsigned long long)desc->attribute);
-+      if (tdesc.physical_start >= addr_min
-+        && tdesc.physical_start + page_align (size) <= addr_max
-+        && tdesc.num_pages >= initrd_pages)
-+      {
-+        grub_efi_physical_address_t physical_end;
-+
-+        physical_end = tdesc.physical_start + (tdesc.num_pages << 12);
-+        if (physical_end > addr_max)
-+          physical_end = addr_max;
-+
-+        if (physical_end <= 0x7fffffffUL && physical_end > addr)
-+          addr = physical_end - page_align (size);
-+      }
-+    }
-+
-+  if (addr == 0)
-+    {
-+      errnum = ERR_UNRECOGNIZED;
-+      grub_printf ("no free pages available");
-+      goto fail;
-+    }
-+
-+  initrd_mem = grub_efi_allocate_pages (addr, initrd_pages);
-+  if (! initrd_mem)
-+    grub_fatal ("cannot allocate pages: %x@%x", (unsigned)initrd_pages,
-+              (unsigned)addr);
-+
-+  if (grub_read (initrd_mem, size) != size)
-+    {
-+      grub_printf ("Couldn't read file");
-+      goto fail;
-+    }
-+
-+  grub_printf ("   [Initrd, addr=0x%x, size=0x%x]\n", (unsigned int) addr,
-+             (unsigned int) size);
-+
-+  params->hdr.ramdisk_image = addr;
-+  params->hdr.ramdisk_size = size;
-+
-+ fail:
-+  grub_close ();
-+ fail1:
-+  return !errnum;
-+}
-diff --git a/efi/ia32/loader/switch.S b/efi/ia32/loader/switch.S
-new file mode 100644
-index 0000000..14142e9
---- /dev/null
-+++ b/efi/ia32/loader/switch.S
-@@ -0,0 +1,118 @@
-+#
-+# Switch from protected mode to real mode and jump to setup.S
-+# image located at %cx:0.
-+#
-+# This module must be placed into physical memory at 0:7C00h.
-+# EFI has some real mode thunking code at 2000:0h.
-+#
-+# Processor and non-maskable interrupts should be disabled
-+# before control is passed to this module.
-+#
-+
-+.global _start
-+
-+.code32
-+.text
-+_start:
-+        #
-+        # Load identity mapped GDT & real mode IDT.
-+        # Add 7C00h to the addresses since this is linked to start
-+        # at 0h and it is being placed at 7C00h.
-+        #
-+
-+      lgdt    %cs:gdt_48 + 0x7C00
-+      lidt    %cs:idt_48 + 0x7C00
-+
-+      #
-+      # Turn off PG bit in CR0 and set CR3 to zero.
-+      #
-+
-+      movl    %cr0, %eax
-+      andl    $0x7FFFFFFF, %eax
-+      movl    %eax, %cr0
-+
-+      xorl    %eax, %eax
-+      movl    %eax, %cr3
-+
-+      #
-+      # Reload CS.
-+      # Now we add 7B00h because we need to force the segment
-+      # address and selector to be the same.
-+      #
-+
-+      .byte   0xEA
-+      .long   pm_reload + 0x7B00
-+      .word   0x10
-+
-+pm_reload:
-+
-+.code16
-+
-+      #
-+      # Reload DS, ES, FS, GS & SS.
-+      #
-+
-+      movw    $0x18, %ax
-+      movw    %ax, %ds
-+      movw    %ax, %es
-+      movw    %ax, %fs
-+      movw    %ax, %gs
-+      movw    %ax, %ss
-+
-+      #
-+      # Switch to real mode.  Clear PE bit in CR0.
-+      #
-+
-+      movl    %cr0, %eax
-+      andl    $0xFFFFFFFE, %eax
-+      movl    %eax, %cr0
-+
-+      #
-+      # Reload CS.
-+      #
-+
-+      .byte   0xEA
-+      .word   rm_reload + 0x7C00
-+      .word   0
-+
-+rm_reload:
-+
-+      #
-+      # Reload SS & SP.
-+      #
-+
-+      xorw    %ax, %ax
-+      movw    %ax, %ss
-+      movw    $0x7BFE, %sp
-+
-+      #
-+      # Start running setup.S
-+      #
-+
-+      .byte   0xEA
-+      .word   0
-+      .word   0x9020
-+
-+      #
-+      # GDT & IDT stuff for switching into real mode.
-+      #
-+
-+gdt:  .word   0, 0, 0, 0              # unused (00h)
-+      .word   0, 0, 0, 0              # dummy (08h)
-+      .word   0xFFFF, 0x100           # code (10h)
-+      .word   0x9A00, 0
-+      .word   0xFFFF, 0x180           # data (18h)
-+      .word   0x9200, 0
-+
-+gdt_48:       .word   0x08 * 0x400
-+      .long   gdt + 0x7C00
-+
-+idt_48:       .word   0x400
-+      .long   0
-+
-+      #
-+      # Be careful not to exceed 1F0h or the the bootsect.S
-+      # parameters will be lost!
-+      #
-+
-+.end
-diff --git a/efi/ia32/loader/switch.h b/efi/ia32/loader/switch.h
-new file mode 100644
-index 0000000..4e18dde
---- /dev/null
-+++ b/efi/ia32/loader/switch.h
-@@ -0,0 +1,19 @@
-+unsigned char switch_image[] = {
-+0x2e, 0x0f, 0x01, 0x15, 0x6f, 0x7c, 0x00, 0x00,
-+0x2e, 0x0f, 0x01, 0x1d, 0x75, 0x7c, 0x00, 0x00,
-+0x0f, 0x20, 0xc0, 0x25, 0xff, 0xff, 0xff, 0x7f,
-+0x0f, 0x22, 0xc0, 0x31, 0xc0, 0x0f, 0x22, 0xd8,
-+0xea, 0x27, 0x7b, 0x00, 0x00, 0x10, 0x00, 0xb8,
-+0x18, 0x00, 0x8e, 0xd8, 0x8e, 0xc0, 0x8e, 0xe0,
-+0x8e, 0xe8, 0x8e, 0xd0, 0x0f, 0x20, 0xc0, 0x66,
-+0x83, 0xe0, 0xfe, 0x0f, 0x22, 0xc0, 0xea, 0x43,
-+0x7c, 0x00, 0x00, 0x31, 0xc0, 0x8e, 0xd0, 0xbc,
-+0xfe, 0x7b, 0xea, 0x00, 0x00, 0x20, 0x90, 0x00,
-+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
-+0xff, 0x00, 0x01, 0x00, 0x9a, 0x00, 0x00, 0xff,
-+0xff, 0x80, 0x01, 0x00, 0x92, 0x00, 0x00, 0x00,
-+0x20, 0x4f, 0x7c, 0x00, 0x00, 0x00, 0x04, 0x00,
-+0x00, 0x00, 0x00, 
-+};
-+int switch_size = sizeof switch_image;
-diff --git a/efi/ia32/reloc.c b/efi/ia32/reloc.c
-new file mode 100644
-index 0000000..72db0f6
---- /dev/null
-+++ b/efi/ia32/reloc.c
-@@ -0,0 +1,79 @@
-+/* reloc_x86_64.c - position independent x86_64 ELF shared object relocator
-+   Copyright (C) 1999 Hewlett-Packard Co.
-+      Contributed by David Mosberger <davidm@hpl.hp.com>.
-+   Copyright (C) 2005 Intel Co.
-+      Contributed by Fenghua Yu <fenghua.yu@intel.com>.
-+
-+   This file is part of GNU-EFI, the GNU EFI development environment.
-+
-+   GNU EFI is free software; you can redistribute 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.
-+
-+   GNU EFI is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+   GNU General Public License for more details.
-+
-+   You should have received a copy of the GNU General Public License
-+   along with GNU EFI; see the file COPYING.  If not, write to the Free
-+   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-+   02111-1307, USA. */
-+
-+#include <grub/efi/efi.h>
-+#include <grub/efi/api.h>
-+#include <link.h>
-+
-+grub_efi_status_t _relocate (long ldbase, ElfW(Dyn) *dyn,
-+                           grub_efi_handle_t image_handle,
-+                           grub_efi_system_table_t *sys_tab)
-+{
-+      //extern EFI_STATUS efi_main (EFI_HANDLE, EFI_SYSTEM_TABLE *);
-+      long relsz = 0, relent = 0;
-+      ElfW(Rel) *rel = 0;
-+      unsigned long *addr;
-+      int i;
-+
-+      for (i = 0; dyn[i].d_tag != DT_NULL; ++i) {
-+              switch (dyn[i].d_tag) {
-+                    case DT_REL:
-+                      rel = (ElfW(Rel)*) ((long) dyn[i].d_un.d_ptr + ldbase);
-+                      break;
-+
-+                    case DT_RELSZ:
-+                      relsz = dyn[i].d_un.d_val;
-+                      break;
-+
-+                    case DT_RELENT:
-+                      relent = dyn[i].d_un.d_val;
-+                      break;
-+
-+                    default:
-+                        continue;
-+              }
-+      }
-+
-+      if (!rel || relent == 0){
-+              return GRUB_EFI_LOAD_ERROR;
-+      }
-+      while (relsz > 0) {
-+              /* apply the relocs */
-+              switch (ELF64_R_TYPE (rel->r_info)) {
-+                    case R_386_NONE:
-+                      break;
-+
-+                    case R_386_RELATIVE:
-+                       addr = (unsigned long *) (ldbase + rel->r_offset);
-+                       *addr += ldbase;
-+                       break;
-+
-+                    default:
-+                      break;
-+              }
-+              rel = (ElfW(Rel)*) ((char *) rel + relent);
-+              relsz -= relent;
-+      }
-+      return GRUB_EFI_SUCCESS;
-+}
-+
-diff --git a/efi/ia32/setjmp.S b/efi/ia32/setjmp.S
-new file mode 100644
-index 0000000..38c33af
---- /dev/null
-+++ b/efi/ia32/setjmp.S
-@@ -0,0 +1,86 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2000 Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+/* This is stolen from libc/x86/setjmp.S in the OSKit */
-+/* 
-+ * Mach Operating System
-+ * Copyright (c) 1991,1990,1989 Carnegie Mellon University
-+ * All Rights Reserved.
-+ * 
-+ * Permission to use, copy, modify and distribute this software and its
-+ * documentation is hereby granted, provided that both the copyright
-+ * notice and this permission notice appear in all copies of the
-+ * software, derivative works or modified versions, and any portions
-+ * thereof, and that both notices appear in supporting documentation.
-+ * 
-+ * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
-+ * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
-+ * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
-+ * 
-+ * Carnegie Mellon requests users of this software to return to
-+ * 
-+ *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
-+ *  School of Computer Science
-+ *  Carnegie Mellon University
-+ *  Pittsburgh PA 15213-3890
-+ * 
-+ * any improvements or extensions that they make and grant Carnegie Mellon
-+ * the rights to redistribute these changes.
-+ */
-+/*
-+ * C library -- _setjmp, _longjmp
-+ *
-+ *      _longjmp(a,v)
-+ * will generate a "return(v)" from
-+ * the last call to
-+ *      _setjmp(a)
-+ * by restoring registers from the stack,
-+ * The previous signal state is NOT restored.
-+ *
-+ */
-+#include <grub/symbol.h>
-+
-+      .file   "setjmp.S"
-+
-+      .text
-+      
-+FUNCTION(grub_setjmp)
-+      movl    4(%esp), %ecx           /* fetch buffer */
-+      movl    %ebx, 0(%ecx)
-+      movl    %esi, 4(%ecx)
-+      movl    %edi, 8(%ecx)
-+      movl    %ebp, 12(%ecx)          /* save frame pointer of caller */
-+      popl    %edx
-+      movl    %esp, 16(%ecx)          /* save stack pointer of caller */
-+      movl    %edx, 20(%ecx)          /* save pc of caller */
-+      xorl    %eax, %eax
-+        jmp     *%edx
-+
-+FUNCTION(grub_longjmp)
-+      movl    8(%esp), %eax           /* return(v) */
-+      movl    4(%esp), %ecx           /* fetch buffer */
-+      movl    0(%ecx), %ebx
-+      movl    4(%ecx), %esi
-+      movl    8(%ecx), %edi
-+      movl    12(%ecx), %ebp
-+      movl    16(%ecx), %esp
-+      orl     %eax, %eax
-+      jnz     0f
-+      incl    %eax
-+0:    jmp     *20(%ecx)               /* done, return.... */
-diff --git a/efi/pxe.c b/efi/pxe.c
-new file mode 100644
-index 0000000..59f0d0d
---- /dev/null
-+++ b/efi/pxe.c
-@@ -0,0 +1,460 @@
-+
-+#include <grub/efi/efi.h>
-+#include <grub/efi/api.h>
-+#include <grub/efi/misc.h>
-+#include <grub/misc.h>
-+
-+#include <shared.h>
-+#include <stddef.h>
-+
-+#include "pxe.h"
-+#include "dhcp.h"
-+
-+/* Search path is:
-+ *
-+ * X86PC/UNDI/pxelinux/pxelinux.cfg/1902dcf5-7190-d811-bbd6-6ef21c690030
-+ * X86PC/UNDI/pxelinux/pxelinux.cfg/01-00-30-6e-f2-1c-69
-+ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A103437
-+ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A10343
-+ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A1034
-+ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A103
-+ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A10
-+ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A1
-+ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A
-+ * X86PC/UNDI/pxelinux/pxelinux.cfg/0
-+ * X86PC/UNDI/pxelinux/pxelinux.cfg/default
-+ *
-+ * The paths we get from uefi are like:
-+ * .BootBootFile: X86PC/UNDI/pxelinux/bootx64.efi
-+ * .BootCiAddr: 0.0.0.0
-+ * .BootYiAddr: 10.16.52.158
-+ * .BootSiAddr: 10.16.52.16
-+ */
-+
-+typedef struct {
-+      char *options;
-+      EFI_DHCP4_PACKET_OPTION *current_option;
-+} dhcp_option_parser;
-+
-+static void dhcp_option_parser_reset(dhcp_option_parser *parser,
-+                              EFI_PXE_BASE_CODE_PACKET *packet)
-+{
-+      char *addr;
-+
-+      addr = (char *)packet;
-+      addr += offsetof(EFI_PXE_BASE_CODE_DHCPV4_PACKET, DhcpOptions);
-+      parser->current_option = (void *)addr;
-+      parser->options = (void *)addr;
-+}
-+
-+static int dhcp_option_parser_next(dhcp_option_parser *parser,
-+                              EFI_DHCP4_PACKET_OPTION **option)
-+{
-+      char *current_option;
-+      if (parser->current_option->OpCode == 255) {
-+              *option = NULL;
-+              return 0;
-+      }
-+      current_option = (char *)parser->current_option;
-+      current_option += 2 + parser->current_option->Length;
-+      parser->current_option = (EFI_DHCP4_PACKET_OPTION *)current_option;
-+
-+      *option = parser->current_option;
-+      return 1;
-+}
-+
-+#define DHCPMAGIK "\x63\x82\x53\x63"
-+
-+static int get_dhcp_client_id(EFI_PXE_BASE_CODE_PACKET *packet, uuid_t *uuid)
-+{
-+      dhcp_option_parser parser;
-+      EFI_DHCP4_PACKET_OPTION *option;
-+
-+      dhcp_option_parser_reset(&parser, packet);
-+
-+      if (memcmp((char *)&packet->Dhcpv4.DhcpMagik, DHCPMAGIK, 4))
-+              return 0;
-+
-+      while (dhcp_option_parser_next(&parser, &option)) {
-+              int i;
-+              char data[option->Length];
-+
-+              if (option->OpCode != 97)
-+                      continue;
-+
-+              if (option->Length != 17)
-+                      continue;
-+
-+              memcpy(data, option->Data, option->Length);
-+              if (data[0] != 0)
-+                      continue;
-+
-+              /* 97[17]: 009cfe245ed0c8bd45a79f54ea5fbd3d97
-+               *                               ^^^^^^^^^^^^ uint8_t[]
-+               *                             ^^ uint8_t
-+               *                           ^^ uint8_t
-+               *                       ^^^^ BE uint16_t
-+               *                   ^^^^ BE uint16_t
-+               *           ^^^^^^^^ BE uint32_t
-+               *         ^^ "type".  0 means UUID.
-+               */
-+              memcpy(uuid, data+1, 16);
-+              uuid->time_low = htonl(uuid->time_low);
-+              uuid->time_mid = htons(uuid->time_mid);
-+              uuid->time_hi_ver = htons(uuid->time_hi_ver);
-+
-+              return 1;
-+      }
-+      return 0;
-+}
-+
-+#if 0
-+static void grub_dump_dhcp_options(EFI_PXE_BASE_CODE_PACKET *packet)
-+{
-+      dhcp_option_parser parser;
-+      EFI_DHCP4_PACKET_OPTION *option;
-+      char hex[] = "0123456789abcdef";
-+      int i;
-+      int j = 0;
-+
-+      dhcp_option_parser_reset(&parser, packet);
-+
-+      if (memcmp((char *)&packet->Dhcpv4.DhcpMagik, DHCPMAGIK, 4))
-+              return;
-+
-+      /* 54[4]: a0014301
-+       * 51[4]: 00004506
-+       * 1[4]: ffffff00
-+       * 3[4]: a00143ef
-+       * 6[8]: a001ff20a001ff30
-+       * 15[48]: 96e6374716c6c6e226f637e2275646861647e236f6d60226f637e2275646861647e236f6d602275646861647e236f6d6
-+       * 28[4]: a00143ff
-+       * 40[10]: 275646861647e236f6d6
-+       * 41[8]: a001ff20a001ff30
-+       * 58[4]: 0000a203
-+       * 59[4]: 0000944d
-+       * this is the one we want:
-+       * 97[17]: 009cfe245ed0c8bd45a79f54ea5fbd3d97
-+       *                               ^^^^^^^^^^^^ in order
-+       *                             ^^
-+       *                           ^^
-+       *                       ^^^^ out of order
-+       *                   ^^^^ out of order
-+       *           ^^^^^^^^ out of order
-+       *         ^^ "type".  0 means UUID.
-+       * 255[0]:
-+       */
-+      while (dhcp_option_parser_next(&parser, &option)) {
-+              char data[option->Length + 1];
-+
-+              memcpy(data, option->Data, option->Length);
-+              data[option->Length] = '\0';
-+
-+              grub_printf("%d[%d]: ", option->OpCode, option->Length);
-+              for (i = 0; i < option->Length; i++) {
-+                      grub_printf("%c%c", hex[data[i] & 0xf],
-+                                      hex[(data[i] & 0xf0) >> 4]);
-+              }
-+              printf("\n");
-+      }
-+
-+}
-+
-+void grub_print_dhcp_info(grub_efi_loaded_image_t *loaded_image)
-+{
-+      EFI_PXE_BASE_CODE *pxe = NULL;
-+      EFI_PXE_BASE_CODE_PACKET *packet;
-+
-+      grub_printf("got to %s\n", __func__);
-+
-+      pxe = grub_efi_locate_protocol(&PxeBaseCodeProtocol, NULL);
-+      if (pxe == NULL)
-+              return;
-+
-+      printf("DhcpDiscover options:\n");
-+      packet = (EFI_PXE_BASE_CODE_PACKET *)&pxe->Mode->DhcpDiscover.Dhcpv4;
-+      grub_dump_dhcp_options(packet);
-+
-+      printf("DhcpAck options:\n");
-+      packet = (EFI_PXE_BASE_CODE_PACKET *)&pxe->Mode->DhcpAck.Dhcpv4;
-+      grub_dump_dhcp_options(packet);
-+
-+      printf("PxeDiscover options:\n");
-+      packet = (EFI_PXE_BASE_CODE_PACKET *)&pxe->Mode->PxeDiscover.Dhcpv4;
-+      grub_dump_dhcp_options(packet);
-+
-+      printf("PxeReply options:\n");
-+      packet = (EFI_PXE_BASE_CODE_PACKET *)&pxe->Mode->PxeReply.Dhcpv4;
-+      grub_dump_dhcp_options(packet);
-+
-+#if 0
-+      printf("pxe->Mode->DhcpAck.Dhcpv4: \n");
-+      printf("\t.BootSrvName: %s\n", pxe->Mode->DhcpAck.Dhcpv4.BootpSrvName);
-+      printf("\t.BootBootFile: %s\n", pxe->Mode->DhcpAck.Dhcpv4.BootpBootFile);
-+      printf("\t.BootCiAddr: %d.%d.%d.%d\n",
-+              pxe->Mode->DhcpAck.Dhcpv4.BootpCiAddr[0],
-+              pxe->Mode->DhcpAck.Dhcpv4.BootpCiAddr[1],
-+              pxe->Mode->DhcpAck.Dhcpv4.BootpCiAddr[2],
-+              pxe->Mode->DhcpAck.Dhcpv4.BootpCiAddr[3]);
-+      printf("\t.BootYiAddr: %d.%d.%d.%d\n",
-+              pxe->Mode->DhcpAck.Dhcpv4.BootpYiAddr[0],
-+              pxe->Mode->DhcpAck.Dhcpv4.BootpYiAddr[1],
-+              pxe->Mode->DhcpAck.Dhcpv4.BootpYiAddr[2],
-+              pxe->Mode->DhcpAck.Dhcpv4.BootpYiAddr[3]);
-+      printf("\t.BootSiAddr: %d.%d.%d.%d\n",
-+              pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr[0],
-+              pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr[1],
-+              pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr[2],
-+              pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr[3]);
-+      printf("\t.BootGiAddr: %d.%d.%d.%d\n",
-+              pxe->Mode->DhcpAck.Dhcpv4.BootpGiAddr[0],
-+              pxe->Mode->DhcpAck.Dhcpv4.BootpGiAddr[1],
-+              pxe->Mode->DhcpAck.Dhcpv4.BootpGiAddr[2],
-+              pxe->Mode->DhcpAck.Dhcpv4.BootpGiAddr[3]);
-+      }
-+      printf("\n");
-+#endif
-+
-+
-+}
-+#endif
-+
-+static void icmp_print_error(EFI_PXE_BASE_CODE *pxe)
-+{
-+      EFI_PXE_BASE_CODE_ICMP_ERROR *err = &pxe->Mode->IcmpError;
-+      int i;
-+      //char hex[] = "0123456789abcdef";
-+
-+      printf("icmp error\n");
-+      printf("type: %d code: %d\n", err->Type, err->Code);
-+      printf("data: \n");
-+      for(i = 0; i < 464; i+=16) {
-+              int x;
-+              for (x = i; x < i+4; x++)
-+                      printf("%02x ", err->Data[x]);
-+              printf(" ");
-+              for (x = i+4; x < i+8; x++)
-+                      printf("%02x ", err->Data[x]);
-+              printf(" ");
-+              printf(" ");
-+              for (x = i+8; x < i+12; x++)
-+                      printf("%02x ", err->Data[x]);
-+              printf(" ");
-+              for (x = i+12; x < i+16; x++)
-+                      printf("%02x ", err->Data[x]);
-+              printf("\n");
-+      }
-+}
-+
-+static int grub_efi_pxe_check_for_file(
-+      EFI_PXE_BASE_CODE *pxe,
-+      EFI_IP_ADDRESS *ServerIp,
-+      char *BootpBootFile,
-+      char *configname,
-+      char **returnpath)
-+{
-+      size_t bplen = strlen(BootpBootFile);
-+      char *Filename = grub_malloc(24 + bplen + 40);
-+      char *lastslash = Filename + bplen;
-+      grub_efi_uintn_t size;
-+      int i;
-+      EFI_STATUS rc;
-+      char Buffer[8192];
-+
-+      memcpy(Filename, BootpBootFile, bplen);
-+
-+      for (i = 0; i < bplen; i++) {
-+              if (Filename[i] == '/')
-+                      lastslash = Filename + i;
-+      }
-+      if (*lastslash) {
-+              *lastslash++ = '/';
-+              *lastslash = '\0';
-+      }
-+
-+      sprintf(lastslash, configname);
-+
-+      printf("tftp://%d.%d.%d.%d/%s\n",
-+              ServerIp->v4.Addr[0], ServerIp->v4.Addr[1],
-+              ServerIp->v4.Addr[2], ServerIp->v4.Addr[3],
-+              Filename);
-+
-+      rc = tftp_get_file_size(Filename, &size);
-+      if (rc == GRUB_EFI_ICMP_ERROR)
-+              icmp_print_error(pxe);
-+
-+      if (rc == GRUB_EFI_SUCCESS) {
-+              *returnpath = Filename;
-+              return size;
-+      }
-+      grub_free(Filename);
-+      return 0;
-+}
-+
-+static void get_pxe_server(EFI_PXE_BASE_CODE *pxe, EFI_IP_ADDRESS **Address)
-+{
-+      EFI_IP_ADDRESS *tmp = grub_malloc(sizeof *tmp);
-+      if (tmp) {
-+              memset(tmp, '\0', sizeof (*tmp));
-+              memcpy(&tmp->Addr[0], pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr, 4);
-+              *Address = tmp;
-+      }
-+}
-+
-+static char *get_pxe_file_dir(EFI_PXE_BASE_CODE *pxe)
-+{
-+      char *FileDir = NULL;
-+      char *DirEnd = NULL;
-+      char *BootpBootFile;
-+      size_t bplen;
-+
-+      BootpBootFile = pxe->Mode->DhcpAck.Dhcpv4.BootpBootFile;
-+      bplen = strlen(BootpBootFile);
-+      FileDir = grub_malloc(bplen + 1);
-+      memcpy(FileDir, BootpBootFile, bplen);
-+      FileDir[bplen] = '\0';
-+
-+      DirEnd = grub_strrchr(FileDir, '/');
-+      if (!DirEnd)
-+              DirEnd = FileDir;
-+
-+      *DirEnd = '\0';
-+
-+      return FileDir;
-+}
-+
-+static void set_pxe_info(grub_efi_loaded_image_t *LoadedImage,
-+                      EFI_PXE_BASE_CODE *pxe)
-+{
-+      tftp_info.LoadedImage = LoadedImage;
-+      tftp_info.Pxe = pxe;
-+      get_pxe_server(pxe, &tftp_info.ServerIp);
-+      tftp_info.BasePath = get_pxe_file_dir(pxe);
-+}
-+
-+char *grub_efi_pxe_get_config_path(grub_efi_loaded_image_t *LoadedImage)
-+{
-+      EFI_PXE_BASE_CODE *pxe = NULL;
-+      EFI_IP_ADDRESS ServerIp;
-+      char *FileName = NULL;
-+      EFI_PXE_BASE_CODE_DHCPV4_PACKET *packet;
-+      uuid_t uuid;
-+      grub_efi_uintn_t FileSize = 0;
-+      grub_efi_status_t rc = GRUB_EFI_SUCCESS;
-+      char *ConfigPath = NULL;
-+      char hex[] = "0123456789ABCDEF";
-+      char hexip[9];
-+      int hexiplen;
-+
-+      grub_efi_handle_t *handle, *handles;
-+      grub_efi_uintn_t num_handles;
-+
-+      handles = grub_efi_locate_handle(GRUB_EFI_BY_PROTOCOL,
-+                                      &PxeBaseCodeProtocol,
-+                                      NULL, &num_handles);
-+
-+      if (!handles)
-+        return NULL;
-+
-+      for (handle = handles; num_handles--; handle++) {
-+              pxe = grub_efi_open_protocol(*handle, &PxeBaseCodeProtocol,
-+                      GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-+              if (!pxe || !pxe->Mode)
-+                      continue;
-+              if (pxe->Mode->Started && pxe->Mode->DhcpAckReceived)
-+                      break;
-+      }
-+      grub_free(handles);
-+
-+      if (!pxe)
-+              return NULL;
-+
-+      set_pxe_info(LoadedImage, pxe);
-+
-+      FileName = grub_malloc(strlen("1902dcf5-7190-d811-bbd6-6ef21c690030"));
-+
-+      packet = &pxe->Mode->DhcpDiscover.Dhcpv4;
-+
-+      if (get_dhcp_client_id((EFI_PXE_BASE_CODE_PACKET *)packet, &uuid)) {
-+
-+              uuid.time_mid = 0x0011;
-+              sprintf(FileName,
-+                      "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X",
-+                      uuid.time_low, uuid.time_mid, uuid.time_hi_ver,
-+                      uuid.clock_seq_hi, uuid.clock_seq_low,
-+                      uuid.node[0], uuid.node[1], uuid.node[2],
-+                      uuid.node[3], uuid.node[4], uuid.node[5]);
-+
-+              rc = tftp_get_file_size(FileName, &FileSize);
-+              if (rc == GRUB_EFI_SUCCESS) {
-+                      char *ReturnFile = grub_malloc(strlen("(nd)/") +
-+                                              strlen(FileName) + 1);
-+                      sprintf(ReturnFile, "(nd)/%s", FileName);
-+                      grub_free(FileName);
-+                      //sprintf(tftp_info.LastPath, FileName);
-+                      return ReturnFile;
-+              }
-+      }
-+
-+      packet = &pxe->Mode->DhcpAck.Dhcpv4;
-+
-+      if (!memcmp(packet->BootpHwAddr + 6, "\x00\x00\x00\x00\x00"
-+                                           "\x00\x00\x00\x00\x00", 10) &&
-+                      memcmp(packet->BootpHwAddr, "\x00\x00\x00\x00\x00\x00",
-+                              6)) {
-+              char mac[21];
-+              sprintf(mac, "01-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c",
-+                      hex[(packet->BootpHwAddr[0] & 0xf0) >> 4],
-+                      hex[packet->BootpHwAddr[0] & 0xf],
-+                      hex[(packet->BootpHwAddr[1] & 0xf0) >> 4],
-+                      hex[packet->BootpHwAddr[1] & 0xf],
-+                      hex[(packet->BootpHwAddr[2] & 0xf0) >> 4],
-+                      hex[packet->BootpHwAddr[2] & 0xf],
-+                      hex[(packet->BootpHwAddr[3] & 0xf0) >> 4],
-+                      hex[packet->BootpHwAddr[3] & 0xf],
-+                      hex[(packet->BootpHwAddr[4] & 0xf0) >> 4],
-+                      hex[packet->BootpHwAddr[4] & 0xf],
-+                      hex[(packet->BootpHwAddr[5] & 0xf0) >> 4],
-+                      hex[packet->BootpHwAddr[5] & 0xf]);
-+
-+              rc = tftp_get_file_size(mac, &FileSize);
-+              if (rc == GRUB_EFI_SUCCESS) {
-+                      char *ReturnFile = grub_malloc(strlen("(nd)/") +
-+                                              strlen(mac) + 1);
-+                      sprintf(ReturnFile, "(nd)/%s", mac);
-+                      return ReturnFile;
-+              }
-+
-+      }
-+
-+      sprintf(hexip, "%c%c%c%c%c%c%c%c",
-+              hex[(packet->BootpYiAddr[0] & 0xf0) >> 4],
-+              hex[packet->BootpYiAddr[0] & 0xf],
-+              hex[(packet->BootpYiAddr[1] & 0xf0) >> 4],
-+              hex[packet->BootpYiAddr[1] & 0xf],
-+              hex[(packet->BootpYiAddr[2] & 0xf0) >> 4],
-+              hex[packet->BootpYiAddr[2] & 0xf],
-+              hex[(packet->BootpYiAddr[3] & 0xf0) >> 4],
-+              hex[packet->BootpYiAddr[3] & 0xf]);
-+
-+      for (hexiplen = strlen(hexip); hexiplen > 0; hexiplen--)
-+      {
-+              hexip[hexiplen] = '\0';
-+              rc = tftp_get_file_size(hexip, &FileSize);
-+              if (rc == GRUB_EFI_SUCCESS) {
-+                      char *ReturnFile = grub_malloc(strlen("(nd)/") +
-+                                              strlen(hexip) + 1);
-+                      sprintf(ReturnFile, "(nd)/%s", hexip);
-+                      return ReturnFile;
-+              }
-+      }
-+
-+      rc = tftp_get_file_size("efidefault", &FileSize);
-+      if (rc == GRUB_EFI_SUCCESS) {
-+              char *ReturnFile = grub_malloc(strlen("(nd)/efidefault")+1);
-+              sprintf(ReturnFile, "(nd)/efidefault");
-+              return ReturnFile;
-+      }
-+
-+      return NULL;
-+}
-diff --git a/efi/pxe.h b/efi/pxe.h
-new file mode 100644
-index 0000000..0a68007
---- /dev/null
-+++ b/efi/pxe.h
-@@ -0,0 +1,237 @@
-+#ifndef PXE_H
-+#define PXE_H 1
-+
-+#include "byteswap.h"
-+
-+extern char *grub_efi_pxe_get_config_path(grub_efi_loaded_image_t *LoadedImage);
-+extern void grub_print_dhcp_info(grub_efi_loaded_image_t *loaded_image);
-+extern char *grub_efi_pxe_path_to_path_name(void);
-+
-+
-+#define EFI_PXE_BASE_CODE_PROTOCOL \
-+    { 0x03c4e603, 0xac28, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
-+static grub_efi_guid_t PxeBaseCodeProtocol = EFI_PXE_BASE_CODE_PROTOCOL;
-+
-+struct _EFI_PXE_BASE_CODE;
-+
-+typedef enum {
-+      EFI_PXE_BASE_CODE_TFTP_FIRST,
-+      EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE,
-+      EFI_PXE_BASE_CODE_TFTP_READ_FILE,
-+      EFI_PXE_BASE_CODE_TFTP_WRITE_FILE,
-+      EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY,
-+      EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE,
-+      EFI_PXE_BASE_CODE_MTFTP_READ_FILE,
-+      EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY,
-+      EFI_PXE_BASE_CODE_MTFTP_LAST
-+} EFI_PXE_BASE_CODE_TFTP_OPCODE;
-+
-+typedef struct {
-+    grub_efi_uint8_t                   Addr[4];
-+} EFI_IPv4_ADDRESS;
-+
-+typedef struct {
-+    grub_efi_uint8_t                   Addr[16];
-+} EFI_IPv6_ADDRESS;
-+
-+typedef struct {
-+    grub_efi_uint8_t                   Addr[32];
-+} EFI_MAC_ADDRESS;
-+
-+typedef union {
-+    grub_efi_uint32_t      Addr[4];
-+    EFI_IPv4_ADDRESS    v4;
-+    EFI_IPv6_ADDRESS    v6;
-+} EFI_IP_ADDRESS;
-+
-+typedef grub_efi_uint16_t EFI_PXE_BASE_CODE_UDP_PORT;
-+
-+typedef struct {
-+      EFI_IP_ADDRESS MCastIp;
-+      EFI_PXE_BASE_CODE_UDP_PORT CPort;
-+      EFI_PXE_BASE_CODE_UDP_PORT SPort;
-+      grub_efi_uint16_t ListenTimeout;
-+      grub_efi_uint16_t TransmitTimeout;
-+} EFI_PXE_BASE_CODE_MTFTP_INFO;
-+
-+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_MTFTP)(
-+      struct _EFI_PXE_BASE_CODE *This,
-+      EFI_PXE_BASE_CODE_TFTP_OPCODE Operation,
-+      void *BufferPtr,
-+      grub_efi_boolean_t Overwrite,
-+      grub_efi_uint64_t *BufferSize,
-+      grub_efi_uintn_t *BlockSize,
-+      EFI_IP_ADDRESS *ServerIp,
-+      grub_efi_uint8_t *Filename,
-+      EFI_PXE_BASE_CODE_MTFTP_INFO *Info,
-+      grub_efi_boolean_t DontUseBuffer);
-+
-+typedef struct {
-+    grub_efi_uint8_t                           BootpOpcode;
-+    grub_efi_uint8_t                           BootpHwType;
-+    grub_efi_uint8_t                           BootpHwAddrLen;
-+    grub_efi_uint8_t                           BootpGateHops;
-+    grub_efi_uint32_t                          BootpIdent;
-+    grub_efi_uint16_t                          BootpSeconds;
-+    grub_efi_uint16_t                          BootpFlags;
-+    grub_efi_uint8_t                           BootpCiAddr[4];
-+    grub_efi_uint8_t                           BootpYiAddr[4];
-+    grub_efi_uint8_t                           BootpSiAddr[4];
-+    grub_efi_uint8_t                           BootpGiAddr[4];
-+    grub_efi_uint8_t                           BootpHwAddr[16];
-+    grub_efi_uint8_t                           BootpSrvName[64];
-+    grub_efi_uint8_t                           BootpBootFile[128];
-+    grub_efi_uint32_t                          DhcpMagik;
-+    grub_efi_uint8_t                           DhcpOptions[56];
-+} EFI_PXE_BASE_CODE_DHCPV4_PACKET;
-+
-+// TBD in EFI v1.1
-+//typedef struct {
-+//    grub_efi_uint8_t                           reserved;
-+//} EFI_PXE_BASE_CODE_DHCPV6_PACKET;
-+
-+typedef union {
-+    grub_efi_uint8_t                               Raw[1472];
-+    EFI_PXE_BASE_CODE_DHCPV4_PACKET     Dhcpv4;
-+//    EFI_PXE_BASE_CODE_DHCPV6_PACKET     Dhcpv6;
-+} EFI_PXE_BASE_CODE_PACKET;
-+
-+typedef struct {
-+    grub_efi_uint8_t                   Type;
-+    grub_efi_uint8_t                   Code;
-+    grub_efi_uint16_t                  Checksum;
-+    union {
-+        grub_efi_uint32_t              reserved;
-+        grub_efi_uint32_t              Mtu;
-+        grub_efi_uint32_t              Pointer;
-+        struct {
-+            grub_efi_uint16_t          Identifier;
-+            grub_efi_uint16_t          Sequence;
-+        } Echo;
-+    } u;
-+    grub_efi_uint8_t                   Data[494];
-+} EFI_PXE_BASE_CODE_ICMP_ERROR;
-+
-+typedef struct {
-+    grub_efi_uint8_t                   ErrorCode;
-+    grub_efi_char8_t                   ErrorString[127];
-+} EFI_PXE_BASE_CODE_TFTP_ERROR;
-+
-+
-+#define EFI_PXE_BASE_CODE_MAX_IPCNT             8
-+typedef struct {
-+    grub_efi_uint8_t                       Filters;
-+    grub_efi_uint8_t                       IpCnt;
-+    grub_efi_uint16_t                      reserved;
-+    EFI_IP_ADDRESS              IpList[EFI_PXE_BASE_CODE_MAX_IPCNT];
-+} EFI_PXE_BASE_CODE_IP_FILTER;
-+
-+#define EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP             0x0001
-+#define EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST              0x0002
-+#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS            0x0004
-+#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST  0x0008
-+
-+typedef struct {
-+    EFI_IP_ADDRESS       IpAddr;
-+    EFI_MAC_ADDRESS      MacAddr;
-+} EFI_PXE_BASE_CODE_ARP_ENTRY;
-+
-+typedef struct {
-+    EFI_IP_ADDRESS       IpAddr;
-+    EFI_IP_ADDRESS       SubnetMask;
-+    EFI_IP_ADDRESS       GwAddr;
-+} EFI_PXE_BASE_CODE_ROUTE_ENTRY;
-+
-+#define EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES       8
-+#define EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES     8
-+
-+typedef struct {
-+    grub_efi_boolean_t                         Started;
-+    grub_efi_boolean_t                         Ipv6Available;
-+    grub_efi_boolean_t                         Ipv6Supported;
-+    grub_efi_boolean_t                         UsingIpv6;
-+    grub_efi_boolean_t                         BisSupported;
-+    grub_efi_boolean_t                         BisDetected;
-+    grub_efi_boolean_t                         AutoArp;
-+    grub_efi_boolean_t                         SendGUID;
-+    grub_efi_boolean_t                         DhcpDiscoverValid;
-+    grub_efi_boolean_t                         DhcpAckReceived;
-+    grub_efi_boolean_t                         ProxyOfferReceived;
-+    grub_efi_boolean_t                         PxeDiscoverValid;
-+    grub_efi_boolean_t                         PxeReplyReceived;
-+    grub_efi_boolean_t                         PxeBisReplyReceived;
-+    grub_efi_boolean_t                         IcmpErrorReceived;
-+    grub_efi_boolean_t                         TftpErrorReceived;
-+    grub_efi_boolean_t                         MakeCallbacks;
-+    grub_efi_uint8_t                           TTL;
-+    grub_efi_uint8_t                           ToS;
-+    EFI_IP_ADDRESS                  StationIp;
-+    EFI_IP_ADDRESS                  SubnetMask;
-+    EFI_PXE_BASE_CODE_PACKET        DhcpDiscover;
-+    EFI_PXE_BASE_CODE_PACKET        DhcpAck;
-+    EFI_PXE_BASE_CODE_PACKET        ProxyOffer;
-+    EFI_PXE_BASE_CODE_PACKET        PxeDiscover;
-+    EFI_PXE_BASE_CODE_PACKET        PxeReply;
-+    EFI_PXE_BASE_CODE_PACKET        PxeBisReply;
-+    EFI_PXE_BASE_CODE_IP_FILTER     IpFilter;
-+    grub_efi_uint32_t                          ArpCacheEntries;
-+    EFI_PXE_BASE_CODE_ARP_ENTRY     ArpCache[EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES];
-+    grub_efi_uint32_t                          RouteTableEntries;
-+    EFI_PXE_BASE_CODE_ROUTE_ENTRY   RouteTable[EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES];
-+    EFI_PXE_BASE_CODE_ICMP_ERROR    IcmpError;
-+    EFI_PXE_BASE_CODE_TFTP_ERROR    TftpError;
-+} EFI_PXE_BASE_CODE_MODE;
-+
-+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_START)();
-+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_STOP)();
-+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_DHCP)();
-+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_DISCOVER)();
-+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_UDP_WRITE)();
-+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_UDP_READ)();
-+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_SET_IP_FILTER)();
-+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_ARP)();
-+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_SET_PARAMETERS)();
-+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_SET_STATION_IP)();
-+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_SET_PACKETS)();
-+
-+typedef struct _EFI_PXE_BASE_CODE{
-+      grub_efi_uint64_t Revision;
-+      EFI_PXE_BASE_CODE_START             Start;
-+      EFI_PXE_BASE_CODE_STOP              Stop;
-+      EFI_PXE_BASE_CODE_DHCP              Dhcp;
-+      EFI_PXE_BASE_CODE_DISCOVER          Discover;
-+      EFI_PXE_BASE_CODE_MTFTP             Mtftp;
-+      EFI_PXE_BASE_CODE_UDP_WRITE         UdpWrite;
-+      EFI_PXE_BASE_CODE_UDP_READ          UdpRead;
-+      EFI_PXE_BASE_CODE_SET_IP_FILTER     SetIpFilter;
-+      EFI_PXE_BASE_CODE_ARP               Arp;
-+      EFI_PXE_BASE_CODE_SET_PARAMETERS    SetParameters;
-+      EFI_PXE_BASE_CODE_SET_STATION_IP    SetStationIp;
-+      EFI_PXE_BASE_CODE_SET_PACKETS       SetPackets;
-+      EFI_PXE_BASE_CODE_MODE              *Mode;
-+} EFI_PXE_BASE_CODE;
-+
-+typedef struct {
-+      grub_efi_uint32_t time_low;
-+      grub_efi_uint16_t time_mid;
-+      grub_efi_uint16_t time_hi_ver;
-+      grub_efi_uint8_t clock_seq_hi;
-+      grub_efi_uint8_t clock_seq_low;
-+      grub_efi_uint8_t node[6];
-+} uuid_t;
-+
-+struct tftp_info {
-+      grub_efi_loaded_image_t *LoadedImage;
-+      EFI_PXE_BASE_CODE *Pxe;
-+      EFI_IP_ADDRESS *ServerIp;
-+      char *BasePath;
-+      char *LastPath;
-+      char *Buffer;
-+};
-+
-+extern struct tftp_info tftp_info;
-+extern grub_efi_status_t tftp_get_file_size(
-+      char *Filename,
-+      grub_efi_uintn_t *Size);
-+
-+#endif /* PXE_H */
-diff --git a/efi/ugadebug.h b/efi/ugadebug.h
-new file mode 100644
-index 0000000..f461c8b
---- /dev/null
-+++ b/efi/ugadebug.h
-@@ -0,0 +1,201 @@
-+#ifndef UGA_DEBUG_H
-+#define UGA_DEBUG_H
-+
-+extern void dc(char *file, int line);
-+extern void gm(char *file, int line, char *fmt, ...);
-+
-+#ifdef UGA
-+
-+extern const unsigned char font8x16[];
-+
-+extern grub_efi_guid_t draw_guid;
-+
-+static void *tmp_term;
-+
-+#define SCREEN_WIDTH 80
-+
-+#define LINE_SIZE_X ( 8 * 100 )
-+#define LINE_START_X(x) (1280 + (x))
-+#define LINE_END_X(x) (LINE_START_X(0) + LINE_SIZE_X - 1)
-+
-+#define POS_X(x) (LINE_START_X(x) + (8 * (x)))
-+
-+#define LINE_SIZE_Y 16
-+#define LINE_START_Y(y) ((y) * LINE_SIZE_Y)
-+#define LINE_END_Y(y) ( (((y)+1) * LINE_SIZE_Y ) - 1)
-+
-+#define POS_Y(y) LINE_START_Y(y)
-+
-+#define FIRST_LINE 0
-+#define LAST_LINE 75
-+
-+#define format_ascii(buf, val, is_hex, is_cap) ({                   \
-+        int _n = sizeof ((buf)) - 2;                                \
-+        typeof(val) _nval = (val);                                  \
-+        int _negative = 0;                                          \
-+        int _mult = is_hex ? 16 : 10;                               \
-+        char _a = is_cap ? 'A' : 'a';                               \
-+        grub_memset((buf), '\0', sizeof ((buf)));                        \
-+        if (!(_nval > 0LL))                                         \
-+            _negative = 1;                                          \
-+        if (_nval == 0LL)                                           \
-+            _negative = 0;                                          \
-+        if (_negative)                                              \
-+            _nval = (_nval ^ -1);                                   \
-+        do {                                                        \
-+            int _dig = _nval % _mult;                               \
-+            (buf)[_n--] = ((_dig > 9) ? _dig + _a - 10 : '0'+_dig); \
-+        } while (_nval /= _mult);                                   \
-+        if (_negative)                                              \
-+            (buf)[_n--] = '-';                                      \
-+        _mult = 0;                                                  \
-+        _n++;                                                       \
-+        while (_n < sizeof ((buf)))                                 \
-+            (buf)[_mult++] = (buf)[_n++];                           \
-+        if (_negative && _mult > 1)                                 \
-+            ((buf)[_mult-2])++;                                     \
-+    })
-+
-+static grub_efi_uga_draw_t *debug_draw_intf;
-+static void debug_putchar(int i, int j, int ch)
-+{
-+    grub_efi_uga_pixel_t pixbuf[8 * 16];
-+    grub_efi_uga_pixel_t black = { .red = 0x00, .green = 0x00, .blue = 0x00 },
-+                         white = { .red = 0xff, .green = 0xff, .blue = 0xff };
-+    const unsigned char *pat;
-+    int x, y;
-+
-+    if (!debug_draw_intf)
-+      debug_draw_intf = grub_efi_locate_protocol(&draw_guid, NULL);
-+    if (!debug_draw_intf)
-+        return;
-+
-+    pat = font8x16 + (ch << 4);
-+
-+    for (y = 0; y < 16; y++) {
-+        for (x = 0; x < 8; x++) {
-+            int bit = pat[y] & (1 << (7 - x));
-+
-+            grub_memmove(&pixbuf[x + y * 8], bit ? &white : &black,
-+                    sizeof (pixbuf[0]));
-+        }
-+    }
-+
-+    Call_Service_10(debug_draw_intf->blt, debug_draw_intf, pixbuf,
-+                  EfiUgaBltBufferToVideo,
-+                    0, 0,
-+                  POS_X(i), POS_Y(j),
-+                    8, 16,
-+                    0);
-+
-+}
-+
-+static void dputs(const char *s)
-+{
-+    static int row = -1;
-+    int col = 89;
-+    return;
-+
-+    if (s && *s) {
-+        do {
-+            if (col > 190) {
-+                row++;
-+                col = 89;
-+            }
-+            if (row > 50) {
-+                row = 0;
-+                col = 89;
-+            }
-+            col++;
-+
-+            if (*s == '\n') {
-+                col = 1;
-+                row++;
-+            } else {
-+                debug_putchar(col, row, *s);
-+            }
-+        } while (*(++s));
-+    }
-+    row++;
-+}
-+
-+static int dbg_row = 0;
-+static int dbg_col = 0;
-+
-+static void dbg_scroll(int new_dbg_col)
-+{
-+    grub_efi_uga_pixel_t black[1] ={{.red = 0x00, .green = 0x00, .blue = 0x00}};
-+
-+    if (dbg_row == LAST_LINE) {
-+        dbg_col = new_dbg_col;
-+        Call_Service_10(debug_draw_intf->blt, debug_draw_intf, NULL,
-+                  EfiUgaVideoToVideo,
-+                    640, LINE_START_Y(1),
-+                    640, LINE_START_Y(0),
-+                    LINE_SIZE_X, LINE_END_Y(LAST_LINE)+1,
-+                    0);
-+        Call_Service_10(debug_draw_intf->blt, debug_draw_intf, black,
-+                  EfiUgaVideoFill,
-+                    0, 0,
-+                    640, LINE_START_Y(LAST_LINE),
-+                    LINE_END_X(SCREEN_WIDTH)+1, LINE_END_Y(LAST_LINE)+1,
-+                    0);
-+    } else {
-+        dbg_row++;
-+        dbg_col = new_dbg_col;
-+    }
-+//    grub_efi_stall(1000000);
-+}
-+
-+static void dc_backend(char *file, int line)
-+{
-+    char linebuf[9] = "        ";
-+    int pos;
-+
-+    linebuf[8] = '\0';
-+
-+    format_ascii(linebuf, line, 0, 0);
-+    for (dbg_col=0, pos=0; linebuf[pos]; dbg_col++, pos++)
-+        debug_putchar(dbg_col, dbg_row, linebuf[pos]);
-+
-+    for (dbg_col=5, pos=0; file[pos]; dbg_col++, pos++) {
-+        if (dbg_col > 15)
-+            dbg_scroll(0);
-+
-+        debug_putchar(dbg_col, dbg_row, file[pos]);
-+    }
-+}
-+
-+void dc(char *file, int line)
-+{
-+      dc_backend(file, line);
-+      dbg_scroll(0);
-+}
-+
-+void
-+gm(char *file, int line, char *fmt, ...)
-+{
-+    va_list ap;
-+    char buf[1024]="";
-+    int pos;
-+
-+    va_start(ap, fmt);
-+    grub_vsprintf(buf, fmt, ap);
-+    va_end(ap);
-+
-+    dc_backend(file, line);
-+    for (dbg_col=16, pos=0; buf[pos]; dbg_col++, pos++) {
-+        if (buf[pos] == '\n')
-+            continue;
-+        if (dbg_col > SCREEN_WIDTH-1)
-+            dbg_scroll(16);
-+        debug_putchar(dbg_col, dbg_row, buf[pos]);
-+    }
-+    dbg_scroll(0);
-+}
-+
-+#define dm() ({ tmp_term = current_term; current_term = term_table; grub_dprintf(__func__, "got here\n"); current_term = tmp_term; })
-+
-+#endif
-+
-+#endif /* UGA_DEBUG_H */
-diff --git a/efi/x86_64/callwrap.S b/efi/x86_64/callwrap.S
-new file mode 100644
-index 0000000..f574ad0
---- /dev/null
-+++ b/efi/x86_64/callwrap.S
-@@ -0,0 +1,274 @@
-+/*
-+ * Function calling ABI conversion from Linux to EFI for x86_64
-+ *
-+ * Copyright (C) 2007 Intel Corp
-+ *    Bibo Mao <bibo.mao@intel.com>
-+ *    Huang Ying <ying.huang@intel.com>
-+ */
-+
-+/*
-+ * EFI calling conventions are documented at:
-+ *   http://msdn.microsoft.com/en-us/library/ms235286%28v=vs.80%29.aspx
-+ * ELF calling conventions are documented at:
-+ *   http://www.x86-64.org/documentation/abi.pdf
-+ *
-+ * Basically here are the conversion rules:
-+ * a) our function pointer is in %rdi
-+ * b) ELF gives us 8-byte aligned %rsp, so we need to pad out to 16-byte
-+ *    alignment.
-+ * c) inside each call thunker, we can only adjust the stack by
-+ *    multiples of 16 bytes. "offset" below refers to however much
-+ *    we allocate inside a thunker.
-+ * d) rsi through r8 (elf) aka rcx through r9 (ms) require stack space
-+ *    on the MS side even though it's not getting used at all.
-+ * e) arguments are as follows: (elf -> ms)
-+ *   1) rdi -> rcx (32 saved)
-+ *   2) rsi -> rdx (32 saved)
-+ *   3) rdx -> r8 ( 32 saved)
-+ *   4) rcx -> r9 (32 saved)
-+ *   5) r8 -> 32(%rsp) (48 saved)
-+ *   6) r9 -> 40(%rsp) (48 saved)
-+ *   7) pad+offset+0(%rsp) -> 48(%rsp) (64 saved)
-+ *   8) pad+offset+8(%rsp) -> 56(%rsp) (64 saved)
-+ *   9) pad+offset+16(%rsp) -> 64(%rsp) (80 saved)
-+ *  10) pad+offset+24(%rsp) -> 72(%rsp) (80 saved)
-+ *  11) pad+offset+32(%rsp) -> 80(%rsp) (96 saved)
-+ *  12) pad+offset+40(%rsp) -> 88(%rsp) (96 saved)
-+ * f) because the first argument we recieve in a thunker is actually the
-+ *    function to be called, arguments are offset as such:
-+ *   0) rdi -> caller
-+ *   1) rsi -> rcx (32 saved)
-+ *   2) rdx -> rdx (32 saved)
-+ *   3) rcx -> r8 (32 saved)
-+ *   4) r8 -> r9 (32 saved)
-+ *   5) r9 -> 32(%rsp) (48 saved)
-+ *   6) pad+offset+0(%rsp) -> 40(%rsp) (48 saved)
-+ *   7) pad+offset+8(%rsp) -> 48(%rsp) (64 saved)
-+ *   8) pad+offset+16(%rsp) -> 56(%rsp) (64 saved)
-+ *   9) pad+offset+24(%rsp) -> 64(%rsp) (80 saved)
-+ *  10) pad+offset+32(%rsp) -> 72(%rsp) (80 saved)
-+ *  11) pad+offset+40(%rsp) -> 80(%rsp) (96 saved)
-+ *  12) pad+offset+48(%rsp) -> 88(%rsp) (96 saved)
-+ * e) arguments need to be moved in opposite order to avoid clobbering
-+ * f) pad_stack leaves the amount of padding it added in %r11 for functions
-+ *    to use
-+ * g) efi -> elf calls don't need to pad the stack, because the 16-byte
-+ *    alignment is also always 8-byte aligned.
-+ */
-+
-+#define ENTRY(name)   \
-+      .globl name;    \
-+      name:
-+
-+#define out(val)              \
-+      push %rax ;             \
-+      mov val, %rax ;         \
-+      out %al, $128 ;         \
-+      pop %rax
-+
-+#define pad_stack                                                     \
-+      subq $8, %rsp ; /* must be a multiple of 16 - sizeof(%rip) */   \
-+      /* stash some handy integers */                                 \
-+      mov $0x8, %rax ;                                                \
-+      mov $0x10, %r10 ;                                               \
-+      /* see if we need padding */                                    \
-+      and %rsp, %rax ;                                                \
-+      /* store the pad amount in %r11 */                              \
-+      cmovnz %rax, %r11 ;                                             \
-+      cmovz %r10, %r11 ;                                              \
-+      /* insert the padding */                                        \
-+      subq %r11, %rsp ;                                               \
-+      /* add the $8 we saved above in %r11 */                         \
-+      addq $8, %r11 ;                                                 \
-+      /* store the pad amount */                                      \
-+      mov %r11, (%rsp) ;                                              \
-+      /* compensate for %rip being stored on the stack by call */     \
-+      addq $8, %r11
-+
-+#define unpad_stack                                                   \
-+      /* fetch the pad amount we saved (%r11 has been clobbered) */   \
-+      mov (%rsp), %r11 ;                                              \
-+      /* remove the padding */                                        \
-+      addq %r11, %rsp
-+
-+ENTRY(x64_call0)
-+      pad_stack
-+      subq $32, %rsp
-+      call *%rdi
-+      addq $32, %rsp
-+      unpad_stack
-+      ret
-+
-+ENTRY(x64_call1)
-+      pad_stack
-+      subq $32, %rsp
-+      mov  %rsi, %rcx
-+      call *%rdi
-+      addq $32, %rsp
-+      unpad_stack
-+      ret
-+
-+ENTRY(x64_call2)
-+      pad_stack
-+      subq $32, %rsp
-+      /* mov %rdx, %rdx */
-+      mov  %rsi, %rcx
-+      call *%rdi
-+      addq $32, %rsp
-+      unpad_stack
-+      ret
-+
-+ENTRY(x64_call3)
-+      pad_stack
-+      subq $32, %rsp
-+      mov  %rcx, %r8
-+      /* mov %rdx, %rdx */
-+      mov  %rsi, %rcx
-+      call *%rdi
-+      addq $32, %rsp
-+      unpad_stack
-+      ret
-+
-+ENTRY(x64_call4)
-+      pad_stack
-+      subq $32, %rsp
-+      mov %r8, %r9
-+      mov %rcx, %r8
-+      /* mov %rdx, %rdx */
-+      mov %rsi, %rcx
-+      call *%rdi
-+      addq $32, %rsp
-+      unpad_stack
-+      ret
-+
-+ENTRY(x64_call5)
-+      pad_stack
-+      subq $48, %rsp
-+      mov %r9, 32(%rsp)
-+      mov %r8, %r9
-+      mov %rcx, %r8
-+      /* mov %rdx, %rdx */
-+      mov %rsi, %rcx
-+      call *%rdi
-+      addq $48, %rsp
-+      unpad_stack
-+      ret
-+
-+ENTRY(x64_call6)
-+      pad_stack
-+      subq $48, %rsp
-+      addq $48, %r11
-+      addq %rsp, %r11
-+      mov (%r11), %rax
-+      mov %rax, 40(%rsp)
-+      mov %r9, 32(%rsp)
-+      mov %r8, %r9
-+      mov %rcx, %r8
-+      /* mov %rdx, %rdx */
-+      mov %rsi, %rcx
-+      call *%rdi
-+      addq $48, %rsp
-+      unpad_stack
-+      ret
-+
-+ENTRY(x64_call7)
-+      pad_stack
-+      subq $64, %rsp
-+      addq $64, %r11
-+      addq $8, %r11
-+      addq %rsp, %r11
-+      mov (%r11), %rax
-+      mov %rax, 48(%rsp)
-+      subq $8, %r11
-+      mov (%r11), %rax
-+      mov %rax, 40(%rsp)
-+      mov %r9, 32(%rsp)
-+      mov %r8, %r9
-+      mov %rcx, %r8
-+      /* mov %rdx, %rdx */
-+      mov %rsi, %rcx
-+      call *%rdi
-+      addq $64, %rsp
-+      unpad_stack
-+      ret
-+
-+ENTRY(x64_call8)
-+      pad_stack
-+      subq $64, %rsp
-+      addq $64, %r11
-+      addq $16, %r11
-+      addq %rsp, %r11
-+      mov (%r11), %rax
-+      mov %rax, 56(%rsp)
-+      subq $8, %r11
-+      mov (%r11), %rax
-+      mov %rax, 48(%rsp)
-+      subq $8, %r11
-+      mov (%r11), %rax
-+      mov %rax, 40(%rsp)
-+      mov %r9, 32(%rsp)
-+      mov %r8, %r9
-+      mov %rcx, %r8
-+      /* mov %rdx, %rdx */
-+      mov %rsi, %rcx
-+      call *%rdi
-+      addq $64, %rsp
-+      unpad_stack
-+      ret
-+
-+ENTRY(x64_call9)
-+      pad_stack
-+      subq $80, %rsp
-+      addq $80, %r11
-+      addq $24, %r11
-+      addq %rsp, %r11
-+      mov (%r11), %rax
-+      mov %rax, 64(%rsp)
-+      subq $8, %r11
-+      mov (%r11), %rax
-+      mov %rax, 56(%rsp)
-+      subq $8, %r11
-+      mov (%r11), %rax
-+      mov %rax, 48(%rsp)
-+      subq $8, %r11
-+      mov (%r11), %rax
-+      mov %rax, 40(%rsp)
-+      mov %r9, 32(%rsp)
-+      mov %r8, %r9
-+      mov %rcx, %r8
-+      /* mov %rdx, %rdx */
-+      mov %rsi, %rcx
-+      call *%rdi
-+      addq $80, %rsp
-+      unpad_stack
-+      ret
-+
-+ENTRY(x64_call10)
-+      pad_stack
-+      subq $80, %rsp
-+      addq $80, %r11
-+      addq $32, %r11
-+      addq %rsp, %r11
-+      mov (%r11), %rax
-+      mov %rax, 72(%rsp)
-+      subq $8, %r11
-+      mov (%r11), %rax
-+      mov %rax, 64(%rsp)
-+      subq $8, %r11
-+      mov (%r11), %rax
-+      mov %rax, 56(%rsp)
-+      subq $8, %r11
-+      mov (%r11), %rax
-+      mov %rax, 48(%rsp)
-+      subq $8, %r11
-+      mov (%r11), %rax
-+      mov %rax, 40(%rsp)
-+      mov %r9, 32(%rsp)
-+      mov %r8, %r9
-+      mov %rcx, %r8
-+      /* mov %rdx, %rdx */
-+      mov %rsi, %rcx
-+      call *%rdi
-+      addq $80, %rsp
-+      unpad_stack
-+      ret
-diff --git a/efi/x86_64/crt0-efi.S b/efi/x86_64/crt0-efi.S
-new file mode 100644
-index 0000000..8667694
---- /dev/null
-+++ b/efi/x86_64/crt0-efi.S
-@@ -0,0 +1,63 @@
-+/* crt0-efi-x86_64.S - x86_64 EFI startup code.
-+   Copyright (C) 1999 Hewlett-Packard Co.
-+      Contributed by David Mosberger <davidm@hpl.hp.com>.
-+   Copyright (C) 2005 Intel Co.
-+      Contributed by Fenghua Yu <fenghua.yu@intel.com>.
-+
-+   This file is part of GNU-EFI, the GNU EFI development environment.
-+
-+   GNU EFI is free software; you can redistribute 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.
-+
-+   GNU EFI is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+   GNU General Public License for more details.
-+
-+   You should have received a copy of the GNU General Public License
-+   along with GNU EFI; see the file COPYING.  If not, write to the Free
-+   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-+   02111-1307, USA. */
-+
-+      .text
-+      .align 4
-+
-+      .globl _start
-+_start:
-+      subq $8, %rsp
-+      pushq %rcx
-+      pushq %rdx
-+
-+0:
-+      lea ImageBase(%rip), %rdi
-+      lea _DYNAMIC(%rip), %rsi
-+
-+      popq %rcx
-+      popq %rdx
-+      pushq %rcx
-+      pushq %rdx
-+      call _relocate
-+
-+      popq %rdi
-+      popq %rsi
-+
-+      call efi_main
-+      addq $8, %rsp
-+
-+.exit:
-+      ret
-+
-+      // hand-craft a dummy .reloc section so EFI knows it's a relocatable executable:
-+
-+      .data
-+dummy:        .long   0
-+
-+#define IMAGE_REL_ABSOLUTE    0
-+      .section .reloc, "a"
-+label1:
-+      .long   dummy-label1                            // Page RVA
-+      .long   10                                      // Block Size (2*4+2)
-+      .word   (IMAGE_REL_ABSOLUTE<<12) +  0           // reloc for dummy
-+
-diff --git a/efi/x86_64/elf_efi.lds b/efi/x86_64/elf_efi.lds
-new file mode 100644
-index 0000000..18a9ab9
---- /dev/null
-+++ b/efi/x86_64/elf_efi.lds
-@@ -0,0 +1,58 @@
-+OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
-+OUTPUT_ARCH(i386:x86-64)
-+ENTRY(_start)
-+SECTIONS
-+{
-+  . = 0;
-+  ImageBase = .;
-+  .hash : { *(.hash) }        /* this MUST come first! */
-+  . = ALIGN(4096);
-+  .eh_frame :
-+  {
-+    *(.eh_frame)
-+  }
-+  . = ALIGN(4096);
-+  .text :
-+  {
-+   *(.text)
-+  }
-+  .reloc :
-+  {
-+   *(.reloc)
-+  }
-+  . = ALIGN(4096);
-+  .data :
-+  {
-+   *(.rodata*)
-+   *(.got.plt)
-+   *(.got)
-+   *(.data*)
-+   *(.sdata)
-+   /* the EFI loader doesn't seem to like a .bss section, so we stick
-+      it all into .data: */
-+   *(.sbss)
-+   *(.scommon)
-+   *(.dynbss)
-+   *(.bss)
-+   *(COMMON)
-+   *(.rel.local)
-+  }
-+  . = ALIGN(4096);
-+  .dynamic  : { *(.dynamic) }
-+  . = ALIGN(4096);
-+  .rela :
-+  {
-+    *(.rela.data*)
-+    *(.rela.got)
-+    *(.rela.stab)
-+  }
-+  . = ALIGN(4096);
-+  .dynsym   : { *(.dynsym) }
-+  . = ALIGN(4096);
-+  .dynstr   : { *(.dynstr) }
-+  . = ALIGN(4096);
-+  .ignored.reloc :
-+  {
-+    *(.rela.reloc)
-+  }
-+}
-diff --git a/efi/x86_64/loader/Makefile b/efi/x86_64/loader/Makefile
-new file mode 100644
-index 0000000..0d8b888
---- /dev/null
-+++ b/efi/x86_64/loader/Makefile
-@@ -0,0 +1,20 @@
-+
-+all : switch.h
-+
-+bin_to_h: bin_to_h.c
-+      $(CC) $(CFLAGS) -o $@ $<
-+
-+switch.h : switch.bin bin_to_h
-+      ./bin_to_h < $< > $@
-+
-+switch.bin : switch
-+      objcopy -O binary $< $@
-+
-+switch : switch.o
-+      ld.bfd -Ttext-segment=0x688 --init _start -o $@ $<
-+
-+switch.o : switch.S
-+      as -march=generic64 -defsym _start=0 -o $@ $<
-+
-+clean :
-+      @rm -vf switch.o switch switch.bin switch.h bin_to_h
-diff --git a/efi/x86_64/loader/bin_to_h.c b/efi/x86_64/loader/bin_to_h.c
-new file mode 100644
-index 0000000..4cff104
---- /dev/null
-+++ b/efi/x86_64/loader/bin_to_h.c
-@@ -0,0 +1,29 @@
-+#include <stdio.h>
-+#include <stdlib.h>
-+
-+int
-+main (void)
-+{
-+  unsigned n = 0;
-+  int c;
-+
-+  printf ("unsigned char switch_image[] = {\n");
-+
-+  while ((c = getchar ()) != EOF)
-+    {
-+      printf("0x%02x,%s",
-+           c & 0xFF,
-+           (++n & 0x07) ? " " : "\n");
-+    }
-+
-+  if (n & 0x07)
-+    {
-+      printf("\n");
-+    }
-+
-+  printf("};\n"
-+       "int switch_size = sizeof switch_image;\n");
-+
-+  return 0;
-+}
-+
-diff --git a/efi/x86_64/loader/linux.c b/efi/x86_64/loader/linux.c
-new file mode 100644
-index 0000000..49a668e
---- /dev/null
-+++ b/efi/x86_64/loader/linux.c
-@@ -0,0 +1,760 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2006  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#include <grub/misc.h>
-+#include <grub/types.h>
-+#include <grub/cpu/linux.h>
-+#include <grub/efi/api.h>
-+#include <grub/efi/efi.h>
-+#include <grub/efi/misc.h>
-+
-+#include "switch.h"
-+
-+#include <shared.h>
-+
-+#include "graphics.h"
-+
-+#define grub_file_size()    filemax
-+
-+#define NEXT_MEMORY_DESCRIPTOR(desc, size)      \
-+  ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size)))
-+
-+#define PTR_HI(x) ((grub_uint32_t) ((unsigned long long)((unsigned long)(x)) >> 32))
-+
-+#ifndef SECTOR_SIZE
-+#define SECTOR_SIZE 0x200
-+#endif /* defined(SECTOR_SIZE) */
-+#ifndef SECTOR_BITS
-+#define SECTOR_BITS 9
-+#endif /* defined(SECTOR_BITS) */
-+
-+static unsigned long linux_mem_size;
-+static int loaded;
-+static void *real_mode_mem;
-+static void *prot_mode_mem;
-+static grub_size_t prot_kernel_size;
-+static void *initrd_mem;
-+static grub_efi_uintn_t real_mode_pages;
-+static grub_efi_uintn_t prot_mode_pages;
-+static grub_efi_uintn_t initrd_pages;
-+static grub_efi_guid_t graphics_output_guid = GRUB_EFI_GRAPHICS_OUTPUT_GUID;
-+
-+static inline grub_size_t
-+page_align (grub_size_t size)
-+{
-+  return (size + (1 << 12) - 1) & (~((1 << 12) - 1));
-+}
-+
-+static void
-+free_pages (void)
-+{
-+  if (real_mode_mem)
-+    {
-+      grub_efi_free_pages ((grub_addr_t) real_mode_mem, real_mode_pages);
-+      real_mode_mem = 0;
-+    }
-+
-+  if (initrd_mem)
-+    {
-+      grub_efi_free_pages ((grub_addr_t) initrd_mem, initrd_pages);
-+      initrd_mem = 0;
-+    }
-+
-+  if (mmap_buf)
-+    {
-+      grub_efi_free_pages ((grub_addr_t) mmap_buf, mmap_pages);
-+      mmap_buf = 0;
-+    }
-+}
-+
-+/* Allocate pages for the real mode code and the protected mode code
-+   for linux as well as a memory map buffer.  */
-+static int
-+allocate_pages (grub_size_t real_size, grub_size_t prot_size)
-+{
-+  grub_efi_uintn_t desc_size;
-+  grub_efi_memory_descriptor_t *mmap_end;
-+  grub_efi_memory_descriptor_t *desc;
-+  grub_efi_physical_address_t addr;
-+
-+  /* Make sure that each size is aligned to a page boundary.  */
-+  real_size = page_align (real_size + SECTOR_SIZE);
-+  prot_size = page_align (prot_size);
-+
-+  grub_dprintf ("linux", "real_size = %x, prot_size = %x, mmap_size = %x\n",
-+              (unsigned int) real_size, (unsigned int) prot_size,
-+              (unsigned int) mmap_size);
-+
-+  /* Calculate the number of pages; Combine the real mode code with
-+     the memory map buffer for simplicity.  */
-+  real_mode_pages = (real_size >> 12);
-+  prot_mode_pages = (prot_size >> 12);
-+
-+  /* Initialize the memory pointers with NULL for convenience.  */
-+  real_mode_mem = 0;
-+  prot_mode_mem = 0;
-+
-+  if (grub_efi_get_memory_map (0, &desc_size, 0) <= 0)
-+    grub_fatal ("cannot get memory map");
-+
-+  addr = 0;
-+  mmap_end = NEXT_MEMORY_DESCRIPTOR (mmap_buf, mmap_size);
-+  /* First, find free pages for the real mode code
-+     and the memory map buffer.  */
-+  for (desc = mmap_buf;
-+       desc < mmap_end;
-+       desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size))
-+    {
-+      if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY
-+        && desc->num_pages >= real_mode_pages)
-+      {
-+        grub_efi_physical_address_t physical_end;
-+
-+          physical_end = desc->physical_start + (desc->num_pages << 12);
-+
-+          grub_dprintf ("linux", "physical_start = %x, physical_end = %x\n",
-+                        (unsigned) desc->physical_start,
-+                        (unsigned) physical_end);
-+          addr = physical_end - real_size;
-+          if (addr < 0x100000)
-+            continue;
-+
-+          /* the kernel wants this address to be under 1 gig.*/
-+          if (desc->physical_start > 0x40000000 - real_size)
-+            continue;
-+
-+          if (addr > 0x40000000 - real_size)
-+            addr = 0x40000000 - real_size;
-+
-+          grub_dprintf ("linux", "trying to allocate %u pages at %x\n",
-+                        (unsigned) real_mode_pages, (unsigned) addr);
-+          real_mode_mem = grub_efi_allocate_pages (addr, real_mode_pages);
-+          if (! real_mode_mem)
-+            grub_fatal ("cannot allocate pages");
-+
-+          desc->num_pages -= real_mode_pages;
-+          break;
-+      }
-+    }
-+
-+  if (! real_mode_mem)
-+    {
-+      grub_printf ("cannot allocate real mode pages");
-+      errnum = ERR_WONT_FIT;
-+      goto fail;
-+    }
-+
-+  grub_printf("Trying to allocate %u pages for VMLINUZ\n",
-+              (unsigned) prot_mode_pages);
-+  prot_mode_mem = grub_efi_allocate_anypages(prot_mode_pages);
-+
-+  if (!prot_mode_mem)
-+      grub_fatal("Cannot allocate pages for VMLINUZ");
-+  grub_printf("Got pages at %p\n", prot_mode_mem);
-+ 
-+  return 1;
-+
-+ fail:
-+  free_pages ();
-+  return 0;
-+}
-+
-+/* do some funky stuff, then boot linux */
-+void
-+linux_boot (void)
-+{
-+  grub_printf ("zImage is not supported under EFI.\n");
-+  for (;;);
-+}
-+
-+static void
-+grub_efi_disable_network (void)
-+{
-+  grub_efi_guid_t pci_io_guid = GRUB_EFI_PCI_IO_GUID;
-+  grub_efi_pci_io_t *pci_proto;
-+  grub_efi_uintn_t num_handles;
-+  grub_efi_handle_t *handle, *handles;
-+
-+  handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL,
-+                                        &pci_io_guid,
-+                                        NULL, &num_handles);
-+  if (!handles || !num_handles)
-+    return;
-+
-+  for (handle = handles; num_handles--; handle++)
-+    {
-+      grub_efi_uint8_t class, pos, id, pm = 0;
-+      grub_efi_uint16_t pm_state, vendor;
-+      int ttl = 48;
-+
-+      pci_proto = grub_efi_open_protocol (*handle, &pci_io_guid,
-+                                        GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-+
-+      if (!pci_proto)
-+      continue;
-+
-+      Call_Service_5 (pci_proto->pci.read, pci_proto,
-+                    grub_efi_pci_io_width_uint8, 0x0b, 1, &class);
-+
-+      /* Not a network device */
-+      if (class != 0x02)
-+      continue;
-+
-+      Call_Service_5 (pci_proto->pci.read, pci_proto,
-+                    grub_efi_pci_io_width_uint16, 0x00, 1, &vendor);
-+
-+      /* Not a Broadcom */
-+      if (vendor != 0x14e4)
-+      continue;
-+
-+      Call_Service_5 (pci_proto->pci.read, pci_proto,
-+                    grub_efi_pci_io_width_uint16, 0x2c, 1, &vendor);
-+
-+      /* Not an Apple */
-+      if (vendor != 0x106b)
-+      continue;
-+
-+      pos = 0x34;
-+
-+      /* Find the power management registers */
-+      while (ttl--)
-+      {
-+        Call_Service_5 (pci_proto->pci.read, pci_proto,
-+                        grub_efi_pci_io_width_uint8, pos, 1, &pos);
-+
-+        if (pos < 0x40)
-+          break;
-+
-+        pos &= ~3;
-+
-+        Call_Service_5 (pci_proto->pci.read, pci_proto,
-+                        grub_efi_pci_io_width_uint8, pos, 1, &id);
-+
-+        if (id == 0xff)
-+          break;
-+
-+        if (id == 0x01)
-+          {
-+            pm = pos;
-+            break;
-+          }
-+
-+        pos += 1;
-+      }
-+
-+      if (pm)
-+      {
-+        Call_Service_5 (pci_proto->pci.read, pci_proto,
-+                        grub_efi_pci_io_width_uint16, pm + 4, 1, &pm_state);
-+
-+        pm_state &= ~0x03;
-+        pm_state |= 0x03;
-+
-+        /* Set to D3 */
-+
-+        Call_Service_5 (pci_proto->pci.write, pci_proto,
-+                        grub_efi_pci_io_width_uint16, pm + 4, 1, &pm_state);
-+
-+        Call_Service_5 (pci_proto->pci.read, pci_proto,
-+                        grub_efi_pci_io_width_uint16, pm + 4, 1,
-+                        &pm_state);
-+      }
-+    }
-+}
-+
-+void
-+big_linux_boot (void)
-+{
-+  struct linux_kernel_params *params;
-+  struct grub_linux_kernel_header *lh;
-+  grub_efi_uintn_t map_key;
-+  grub_efi_uintn_t desc_size;
-+  grub_efi_uint32_t desc_version;
-+  int e820_nr_map;
-+
-+  params = real_mode_mem;
-+
-+  graphics_set_kernel_params (params);
-+
-+  if (grub_efi_get_memory_map (&map_key, &desc_size, &desc_version) <= 0)
-+    grub_fatal ("cannot get memory map");
-+
-+  /* Pass e820 memmap. */
-+  e820_map_from_efi_map ((struct e820_entry *) params->e820_map, &e820_nr_map,
-+                       mmap_buf, desc_size, mmap_size);
-+  params->e820_nr_map = e820_nr_map;
-+
-+  grub_efi_disable_network();
-+
-+  if (! grub_efi_exit_boot_services (map_key))
-+    grub_fatal ("cannot exit boot services");
-+
-+  /* Note that no boot services are available from here.  */
-+
-+  /* copy vmlinuz image to hdr.code32_start */
-+  memcpy ((char *)(unsigned long)(params->hdr.code32_start), (char *)prot_mode_mem,
-+        prot_kernel_size);
-+  /* copy switch image */
-+  memcpy ((void *) 0x700, switch_image, switch_size);
-+
-+  lh = &params->hdr;
-+  /* Pass EFI parameters.  */
-+  if (grub_le_to_cpu16 (lh->version) >= 0x0206) {
-+    params->version_0206.efi_mem_desc_size = desc_size;
-+    params->version_0206.efi_mem_desc_version = desc_version;
-+    params->version_0206.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf;
-+    params->version_0206.efi_mmap_size = mmap_size;
-+  } else if (grub_le_to_cpu16 (lh->version) >= 0x0204) {
-+    params->version_0204.efi_mem_desc_size = desc_size;
-+    params->version_0204.efi_mem_desc_version = desc_version;
-+    params->version_0204.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf;
-+    params->version_0204.efi_mmap_size = mmap_size;
-+  } else /* dunno */ {
-+    params->dunno.efi_mem_desc_size = desc_size;
-+    params->dunno.efi_mem_desc_version = desc_version;
-+    params->dunno.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf;
-+    params->dunno.efi_mmap_size = mmap_size;
-+    params->dunno.efi_mmap_hi = PTR_HI(mmap_buf);
-+  }
-+
-+#ifdef __x86_64__
-+  /* Pass parameters.  */
-+  asm volatile ("mov %0, %%rsi" : : "m" (real_mode_mem));
-+  asm volatile ("movl %0, %%ebx" : : "m" (params->hdr.code32_start));
-+
-+  /* Enter Linux, switch from 64-bit long mode
-+   * to 32-bit protect mode, this code end address
-+   * must not exceed 0x1000, because linux kernel bootstrap
-+   * code will flush this area
-+   */
-+  asm volatile ( "mov $0x700, %%rdi" : :);
-+  asm volatile ( "jmp *%%rdi" : :);
-+#else
-+  /* Pass parameters.  */
-+  asm volatile ("mov %0, %%esi" : : "m" (real_mode_mem));
-+  asm volatile ("movl %0, %%ebx" : : "m" (params->hdr.code32_start));
-+
-+  /* Enter Linux, switch from 64-bit long mode
-+   * to 32-bit protect mode, this code end address
-+   * must not exceed 0x1000, because linux kernel bootstrap
-+   * code will flush this area
-+   */
-+  asm volatile ( "mov $0x700, %%edi" : :);
-+  asm volatile ( "jmp *%%edi" : :);
-+#endif
-+
-+  /* Never reach here.  */
-+  for (;;);
-+}
-+
-+int
-+grub_load_linux (char *kernel, char *arg)
-+{
-+  struct grub_linux_kernel_header *lh;
-+  struct linux_kernel_params *params;
-+  static struct linux_kernel_params params_buf;
-+  grub_uint8_t setup_sects;
-+  grub_size_t real_size, prot_size;
-+  grub_uint64_t kernel_base, kernel_length, kernel_pages;
-+  grub_ssize_t len;
-+  char *dest;
-+  int align, min_alignment;
-+  int relocatable = 0;
-+
-+  if (kernel == NULL)
-+    {
-+      errnum = ERR_BAD_FILENAME;
-+      grub_printf ("no kernel specified");
-+      goto fail1;
-+    }
-+
-+  if (! grub_open (kernel))
-+    goto fail1;
-+
-+  if (grub_read ((char *) &params_buf, sizeof (params_buf))
-+      != sizeof (params_buf))
-+    {
-+      errnum = ERR_EXEC_FORMAT;
-+      grub_printf ("cannot read the linux header");
-+      goto fail;
-+    }
-+
-+  lh = &params_buf.hdr;
-+
-+  if (lh->boot_flag != grub_cpu_to_le16 (0xaa55))
-+    {
-+      errnum = ERR_EXEC_FORMAT;
-+      grub_printf ("invalid magic number: %x", lh->boot_flag);
-+      goto fail;
-+    }
-+
-+  /* EFI support is quite new, so reject old versions.  */
-+  if (lh->header != grub_cpu_to_le32 (GRUB_LINUX_MAGIC_SIGNATURE)
-+      || grub_le_to_cpu16 (lh->version) < 0x0203)
-+    {
-+      errnum = ERR_EXEC_FORMAT;
-+      grub_printf ("too old version");
-+      goto fail;
-+    }
-+
-+  /* I'm not sure how to support zImage on EFI.  */
-+  if (! (lh->loadflags & GRUB_LINUX_FLAG_BIG_KERNEL))
-+    {
-+      errnum = ERR_EXEC_FORMAT;
-+      grub_printf ("zImage is not supported");
-+      goto fail;
-+    }
-+
-+  setup_sects = lh->setup_sects;
-+
-+  real_size = 0x1000 + grub_strlen(arg);
-+  prot_size = grub_file_size () - (setup_sects << SECTOR_BITS) - SECTOR_SIZE;
-+  prot_kernel_size = prot_size;
-+
-+  if (! allocate_pages (real_size, prot_size))
-+    goto fail;
-+
-+  /* XXX Linux assumes that only elilo can boot Linux on EFI!!!  */
-+  lh->type_of_loader = 0x50;
-+
-+  lh->cmd_line_ptr = (grub_uint32_t) (unsigned long) real_mode_mem + 0x1000;
-+  lh->ramdisk_image = 0;
-+  lh->ramdisk_size = 0;
-+
-+  grub_memset(real_mode_mem, 0, real_size);
-+
-+  params = (struct linux_kernel_params *) real_mode_mem;
-+
-+  grub_memmove(&params->hdr, lh, 0x202 + lh->jump_off - 0x1f1);
-+
-+  params->cl_magic = GRUB_LINUX_CL_MAGIC;
-+  params->cl_offset = 0x1000;
-+
-+  /* These are not needed to be precise, because Linux uses these values
-+     only to raise an error when the decompression code cannot find good
-+     space.  */
-+  params->ext_mem = ((32 * 0x100000) >> 10);
-+  params->alt_mem = ((32 * 0x100000) >> 10);
-+
-+  /* No APM on EFI.  */
-+  params->apm_version = 0;
-+  params->apm_code_segment = 0;
-+  params->apm_entry = 0;
-+  params->apm_16bit_code_segment = 0;
-+  params->apm_data_segment = 0;
-+  params->apm_flags = 0;
-+  params->apm_code_len = 0;
-+  params->apm_data_len = 0;
-+
-+  /* XXX is there any way to use SpeedStep on EFI?  */
-+  params->ist_signature = 0;
-+  params->ist_command = 0;
-+  params->ist_event = 0;
-+  params->ist_perf_level = 0;
-+
-+  /* Let the kernel probe the information.  */
-+  grub_memset (params->hd0_drive_info, 0, sizeof (params->hd0_drive_info));
-+  grub_memset (params->hd1_drive_info, 0, sizeof (params->hd1_drive_info));
-+
-+  /* No MCA on EFI.  */
-+  params->rom_config_len = 0;
-+
-+  if (grub_le_to_cpu16 (lh->version) >= 0x0206) {
-+    grub_memcpy(&params->version_0204.efi_signature, "EL64", 4);
-+    params->version_0206.efi_system_table = \
-+                        (grub_uint32_t) (unsigned long) grub_efi_system_table;
-+  } else if (grub_le_to_cpu16 (lh->version) >= 0x0204) {
-+    grub_memcpy(&params->version_0204.efi_signature, "EFIL", 4);
-+    params->version_0204.efi_system_table = \
-+                        (grub_uint32_t) (unsigned long) grub_efi_system_table;
-+  } else /* dunno */ {
-+    params->dunno.efi_signature = GRUB_LINUX_EFI_SIGNATURE_X64;
-+    params->dunno.efi_system_table = \
-+                        (grub_uint32_t) (unsigned long) grub_efi_system_table;
-+    params->dunno.efi_system_table_hi = PTR_HI(grub_efi_system_table);
-+  }
-+  /* The other EFI parameters are filled when booting.  */
-+
-+  /* No EDD */
-+  params->eddbuf_entries = 0;
-+  params->edd_mbr_sig_buf_entries = 0;
-+
-+  /* XXX there is no way to know if the kernel really supports EFI.  */
-+  grub_printf ("[Linux-EFI, setup=0x%x, size=0x%x]\n", (unsigned int)real_size,
-+             (unsigned int)prot_size);
-+
-+  /* Check the mem= option to limit memory used for initrd.  */
-+  {
-+    char *mem;
-+
-+    mem = grub_strstr (arg, "mem=");
-+    if (mem)
-+      {
-+      char *value = mem + 4;
-+
-+      safe_parse_maxulong (&value, &linux_mem_size);
-+      switch (errnum)
-+        {
-+        case ERR_NUMBER_OVERFLOW:
-+          /* If an overflow occurs, use the maximum address for
-+             initrd instead. This is good, because MAXINT is
-+             greater than LINUX_INITRD_MAX_ADDRESS.  */
-+          linux_mem_size = LINUX_INITRD_MAX_ADDRESS;
-+          errnum = ERR_NONE;
-+          break;
-+
-+        case ERR_NONE:
-+          {
-+            int shift = 0;
-+
-+            switch (grub_tolower (*value))
-+              {
-+              case 'g':
-+                shift += 10;
-+              case 'm':
-+                shift += 10;
-+              case 'k':
-+                shift += 10;
-+              default:
-+                break;
-+              }
-+
-+            /* Check an overflow.  */
-+            if (linux_mem_size > (~0UL >> shift))
-+              linux_mem_size = 0;
-+            else
-+              linux_mem_size <<= shift;
-+          }
-+          break;
-+
-+        default:
-+          linux_mem_size = 0;
-+          errnum = ERR_NONE;
-+          break;
-+        }
-+      }
-+    else
-+      linux_mem_size = 0;
-+  }
-+
-+  dest = grub_stpcpy ((char *) real_mode_mem + 0x1000, skip_to(0, arg));
-+
-+  grub_seek ((setup_sects << SECTOR_BITS) + SECTOR_SIZE);
-+  len = prot_size;
-+  if (grub_read ((char *)prot_mode_mem, len) != len)
-+    grub_printf ("Couldn't read file");
-+
-+  if (lh->version >= 0x205) {
-+    for (align = lh->min_alignment; align < 32; align++) {
-+      if (lh->kernel_alignment & (1 << align)) {
-+      break;
-+      }
-+    }
-+    relocatable = lh->relocatable_kernel;
-+  }
-+
-+  if (lh->version >= 0x20a) {
-+    kernel_base = lh->pref_address;
-+    kernel_length = lh->init_size;
-+    min_alignment = lh->min_alignment;
-+  } else {
-+    kernel_base = lh->code32_start;
-+    kernel_length = prot_kernel_size;
-+    min_alignment = 0;
-+  }
-+
-+  kernel_pages = (kernel_length + 4095) >> 12;
-+
-+  /* Attempt to allocate address space for the kernel */
-+  kernel_base = (grub_uint64_t)grub_efi_allocate_pages(kernel_base, kernel_pages);
-+
-+  if (!kernel_base && relocatable) {
-+    grub_efi_memory_descriptor_t *desc;
-+    grub_efi_memory_descriptor_t tdesc;
-+    grub_efi_uintn_t desc_size;
-+
-+    if (grub_efi_get_memory_map (0, &desc_size, 0) <= 0)
-+      grub_fatal ("cannot get memory map");
-+
-+    while (align >= min_alignment) {
-+      for (desc = mmap_buf;
-+         desc < NEXT_MEMORY_DESCRIPTOR (mmap_buf, mmap_size);
-+         desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size))
-+      {
-+        grub_uint64_t addr;
-+        grub_uint64_t alignval = (1 << align) - 1;
-+
-+        if (desc->type != GRUB_EFI_CONVENTIONAL_MEMORY)
-+          continue;
-+
-+        memcpy(&tdesc, desc, sizeof(tdesc));
-+
-+        addr = (tdesc.physical_start + alignval) & ~(alignval);
-+
-+        if ((addr + kernel_length) >
-+            (tdesc.physical_start + (tdesc.num_pages << 12)))
-+          continue;
-+
-+        kernel_base = (grub_uint64_t)grub_efi_allocate_pages(addr, kernel_pages);
-+
-+        if (kernel_base) {
-+          lh->kernel_alignment = 1 << align;
-+          break;
-+        }
-+      }
-+      align--;
-+      if (kernel_base)
-+      break;
-+    }
-+  }
-+
-+  if (!kernel_base) {
-+    grub_printf("Failed to allocate kernel memory");
-+    errnum = ERR_UNRECOGNIZED;
-+    goto fail;
-+  }
-+
-+  lh->code32_start = kernel_base;
-+
-+  if (errnum == ERR_NONE)
-+    {
-+      loaded = 1;
-+    }
-+
-+ fail:
-+
-+  grub_close ();
-+
-+ fail1:
-+
-+  if (errnum != ERR_NONE)
-+    {
-+      loaded = 0;
-+    }
-+  return errnum ? KERNEL_TYPE_NONE : KERNEL_TYPE_BIG_LINUX;
-+}
-+
-+int
-+grub_load_initrd (char *initrd)
-+{
-+  grub_ssize_t size;
-+  grub_addr_t addr_min, addr_max;
-+  grub_addr_t addr;
-+  grub_efi_memory_descriptor_t *desc;
-+  grub_efi_memory_descriptor_t tdesc;
-+  grub_efi_uintn_t desc_size;
-+  struct linux_kernel_params *params;
-+
-+  if (initrd == NULL)
-+    {
-+      errnum = ERR_BAD_FILENAME;
-+      grub_printf ("No module specified");
-+      goto fail1;
-+    }
-+
-+  if (! loaded)
-+    {
-+      errnum = ERR_UNRECOGNIZED;
-+      grub_printf ("You need to load the kernel first.");
-+      goto fail1;
-+    }
-+
-+  if (! grub_open (initrd))
-+    goto fail1;
-+
-+  size = grub_file_size ();
-+  initrd_pages = (page_align (size) >> 12);
-+
-+  params = (struct linux_kernel_params *) real_mode_mem;
-+  grub_dprintf(__func__, "initrd_pages: %lu\n", initrd_pages);
-+
-+  addr_max = grub_cpu_to_le32 (params->hdr.initrd_addr_max);
-+  if (linux_mem_size != 0 && linux_mem_size < addr_max)
-+    addr_max = linux_mem_size;
-+  addr_max &= ~((1 << 12)-1);
-+
-+  /* Usually, the compression ratio is about 50%.  */
-+  addr_min = 0;
-+
-+  /* Find the highest address to put the initrd.  */
-+  grub_dprintf(__func__, "addr_min: 0x%lx addr_max: 0x%lx mmap_size: %lu\n", addr_min, addr_max, mmap_size);
-+  if (grub_efi_get_memory_map (0, &desc_size, 0) <= 0)
-+    grub_fatal ("cannot get memory map");
-+
-+  addr = 0;
-+  for (desc = mmap_buf;
-+       desc < NEXT_MEMORY_DESCRIPTOR (mmap_buf, mmap_size);
-+       desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size))
-+    {
-+      if (desc->type != GRUB_EFI_CONVENTIONAL_MEMORY)
-+        continue;
-+      memcpy(&tdesc, desc, sizeof (tdesc));
-+      if (tdesc.physical_start < addr_min
-+              && tdesc.num_pages > ((addr_min - tdesc.physical_start) >> 12))
-+        {
-+          tdesc.num_pages -= ((addr_min - tdesc.physical_start) >> 12);
-+          tdesc.physical_start = addr_min;
-+        }
-+
-+      grub_dprintf(__func__, "desc = {type=%d,ps=0x%llx,vs=0x%llx,sz=%llu,attr=%llu}\n", desc->type, (unsigned long long)desc->physical_start, (unsigned long long)desc->virtual_start, (unsigned long long)desc->num_pages, (unsigned long long)desc->attribute);
-+      if (tdesc.physical_start >= addr_min
-+        && tdesc.physical_start + page_align (size) <= addr_max
-+        && tdesc.num_pages >= initrd_pages)
-+      {
-+        grub_efi_physical_address_t physical_end;
-+
-+        physical_end = tdesc.physical_start + (tdesc.num_pages << 12);
-+        if (physical_end > addr_max)
-+          physical_end = addr_max;
-+
-+        if (physical_end <= 0x7fffffffUL && physical_end > addr)
-+          addr = physical_end - page_align (size);
-+      }
-+    }
-+
-+  if (addr == 0)
-+    {
-+      errnum = ERR_UNRECOGNIZED;
-+      grub_printf ("no free pages available");
-+      goto fail;
-+    }
-+
-+  initrd_mem = grub_efi_allocate_pages (addr, initrd_pages);
-+  if (! initrd_mem)
-+    grub_fatal ("cannot allocate pages: %x@%x", (unsigned)initrd_pages,
-+              (unsigned)addr);
-+
-+  if (grub_read (initrd_mem, size) != size)
-+    {
-+      grub_printf ("Couldn't read file");
-+      goto fail;
-+    }
-+
-+  grub_printf ("   [Initrd, addr=0x%x, size=0x%x]\n", (unsigned int) addr,
-+             (unsigned int) size);
-+
-+  params->hdr.ramdisk_image = addr;
-+  params->hdr.ramdisk_size = size;
-+  params->hdr.root_dev = 0x0100; /* XXX */
-+
-+ fail:
-+  grub_close ();
-+ fail1:
-+  return !errnum;
-+}
-diff --git a/efi/x86_64/loader/switch.S b/efi/x86_64/loader/switch.S
-new file mode 100644
-index 0000000..d0d8dca
---- /dev/null
-+++ b/efi/x86_64/loader/switch.S
-@@ -0,0 +1,92 @@
-+#
-+# Switch from protected mode to real mode and jump to setup.S
-+# image located at %cx:0.
-+#
-+# This module must be placed into physical memory at 0:7C00h.
-+# EFI has some real mode thunking code at 2000:0h.
-+#
-+# Processor and non-maskable interrupts should be disabled
-+# before control is passed to this module.
-+#
-+
-+#define __KERNEL_CS 0x38
-+#define MSR_EFER    0xc0000080
-+#define _EFER_LME 8  /* Long mode enable */
-+
-+.global _start
-+
-+.text
-+_start:
-+        #
-+        # Load identity mapped GDT & real mode IDT.
-+        # Add 7C00h to the addresses since this is linked to start
-+        # at 0h and it is being placed at 7C00h.
-+        #
-+
-+        # fixme here EFI bios cs segment is 0x38
-+        # switch to IA32e compatible mode
-+      # esi point to kernel parameter
-+      # ebx point to kernel entry point
-+.code64
-+      cli
-+      cld
-+        lgdt    gdt_64
-+        lidt    idt_64
-+      ljmp    *exit_ia32e
-+
-+      /* switch to IA32e compatible mode */
-+.code32
-+mode32:
-+        #
-+        # Turn off PG bit in CR0 and set CR3 to zero.
-+        #
-+        movl    %cr0, %eax
-+        andl    $0x7FFFFFFF, %eax
-+        movl    %eax, %cr0
-+
-+        /* Setup EFER (Extended Feature Enable Register) */
-+      nop
-+      nop
-+        movl    $0xc0000080, %ecx
-+        rdmsr
-+        /* Enable Long Mode */
-+        andl    $0xFFFFFEFF, %eax
-+        /* Make changes effective */
-+        wrmsr
-+
-+        /* Disable PAE */
-+        xorl    %eax, %eax
-+        movl    %eax, %cr4
-+
-+        jmp    2f
-+2:
-+              jmp     *%ebx
-+//jmp to kernel entry
-+
-+.align 8
-+exit_ia32e:
-+        .long mode32
-+        .long 0x10
-+
-+gdt_64: .word   0x08 * 9 -1
-+        .quad   gdt
-+
-+      .word   0, 0, 0
-+idt_64: .word   0
-+        .quad   0
-+        #
-+        # GDT & IDT stuff for switching into 32 bit protected mode.
-+        #
-+      .word   0,0,0
-+gdt:
-+        .quad   0x0000000000000000      /* NULL descriptor 0*/
-+        .quad   0x0                     /* unused 0x08 */
-+        .quad   0x00cf9a000000ffff      /* __KERNEL_CS 0x10 */
-+        .quad   0x00cf92000000ffff      /* __KERNEL_DS 0x18 */
-+        .quad   0x00cf92000000ffff
-+        .quad   0x00cf92000000ffff
-+        .quad   0x00cf92000000ffff
-+        .quad   0x00cf9a000000ffff      /* __KERNEL32_CS 0x38*/
-+        .quad   0                       /* unused */
-+.end
-+
-diff --git a/efi/x86_64/loader/switch.h b/efi/x86_64/loader/switch.h
-new file mode 100644
-index 0000000..b5dc39a
---- /dev/null
-+++ b/efi/x86_64/loader/switch.h
-@@ -0,0 +1,25 @@
-+unsigned char switch_image[] = {
-+0xfa, 0xfc, 0x0f, 0x01, 0x14, 0x25, 0x48, 0x07,
-+0x00, 0x00, 0x0f, 0x01, 0x1c, 0x25, 0x58, 0x07,
-+0x00, 0x00, 0xff, 0x2c, 0x25, 0x40, 0x07, 0x00,
-+0x00, 0x0f, 0x20, 0xc0, 0x25, 0xff, 0xff, 0xff,
-+0x7f, 0x0f, 0x22, 0xc0, 0x90, 0x90, 0xb9, 0x80,
-+0x00, 0x00, 0xc0, 0x0f, 0x32, 0x25, 0xff, 0xfe,
-+0xff, 0xff, 0x0f, 0x30, 0x31, 0xc0, 0x0f, 0x22,
-+0xe0, 0xeb, 0x00, 0xff, 0xe3, 0x8d, 0x76, 0x00,
-+0x19, 0x07, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
-+0x47, 0x00, 0x68, 0x07, 0x00, 0x00, 0x00, 0x00,
-+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+0xff, 0xff, 0x00, 0x00, 0x00, 0x9a, 0xcf, 0x00,
-+0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00,
-+0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00,
-+0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00,
-+0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00,
-+0xff, 0xff, 0x00, 0x00, 0x00, 0x9a, 0xcf, 0x00,
-+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-+};
-+int switch_size = sizeof switch_image;
-diff --git a/efi/x86_64/reloc.c b/efi/x86_64/reloc.c
-new file mode 100644
-index 0000000..b53eb63
---- /dev/null
-+++ b/efi/x86_64/reloc.c
-@@ -0,0 +1,79 @@
-+/* reloc_x86_64.c - position independent x86_64 ELF shared object relocator
-+   Copyright (C) 1999 Hewlett-Packard Co.
-+      Contributed by David Mosberger <davidm@hpl.hp.com>.
-+   Copyright (C) 2005 Intel Co.
-+      Contributed by Fenghua Yu <fenghua.yu@intel.com>.
-+
-+   This file is part of GNU-EFI, the GNU EFI development environment.
-+
-+   GNU EFI is free software; you can redistribute 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.
-+
-+   GNU EFI is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+   GNU General Public License for more details.
-+
-+   You should have received a copy of the GNU General Public License
-+   along with GNU EFI; see the file COPYING.  If not, write to the Free
-+   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
-+   02111-1307, USA. */
-+
-+#include <grub/efi/efi.h>
-+#include <grub/efi/api.h>
-+#include <link.h>
-+
-+grub_efi_status_t _relocate (long ldbase, ElfW(Dyn) *dyn,
-+                           grub_efi_handle_t image_handle,
-+                           grub_efi_system_table_t *sys_tab)
-+{
-+      //extern EFI_STATUS efi_main (EFI_HANDLE, EFI_SYSTEM_TABLE *);
-+      long relsz = 0, relent = 0;
-+      ElfW(Rel) *rel = 0;
-+      unsigned long *addr;
-+      int i;
-+
-+      for (i = 0; dyn[i].d_tag != DT_NULL; ++i) {
-+              switch (dyn[i].d_tag) {
-+                    case DT_RELA:
-+                      rel = (ElfW(Rel)*) ((long) dyn[i].d_un.d_ptr + ldbase);
-+                      break;
-+
-+                    case DT_RELASZ:
-+                      relsz = dyn[i].d_un.d_val;
-+                      break;
-+
-+                    case DT_RELAENT:
-+                      relent = dyn[i].d_un.d_val;
-+                      break;
-+
-+                    default:
-+                      break;
-+              }
-+      }
-+
-+      if (!rel || relent == 0){
-+              return GRUB_EFI_LOAD_ERROR;
-+      }
-+      while (relsz > 0) {
-+              /* apply the relocs */
-+              switch (ELF64_R_TYPE (rel->r_info)) {
-+                    case R_X86_64_NONE:
-+                      break;
-+
-+                    case R_X86_64_RELATIVE:
-+                       addr = (unsigned long *) (ldbase + rel->r_offset);
-+                       *addr += ldbase;
-+                            break;
-+
-+                    default:
-+                      break;
-+              }
-+              rel = (ElfW(Rel)*) ((char *) rel + relent);
-+              relsz -= relent;
-+      }
-+      return GRUB_EFI_SUCCESS;
-+}
-+
-diff --git a/efi/x86_64/setjmp.S b/efi/x86_64/setjmp.S
-new file mode 100644
-index 0000000..e042a14
---- /dev/null
-+++ b/efi/x86_64/setjmp.S
-@@ -0,0 +1,56 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2003  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#include <grub/symbol.h>
-+
-+      .file   "setjmp.S"
-+
-+      .text
-+
-+/*
-+ * int grub_setjmp (grub_jmp_buf env)
-+ */
-+FUNCTION(grub_setjmp)
-+      pop     %rsi            /* Return address, and adjust the stack */
-+      xor     %rax, %rax
-+      movq    %rbx, 0(%rdi)   /* RBX */
-+      movq    %rsp, 8(%rdi)   /* RSP */
-+      push    %rsi
-+      movq    %rbp, 16(%rdi)  /* RBP */
-+      movq    %r12, 24(%rdi)  /* R12 */
-+      movq    %r13, 32(%rdi)  /* R13 */
-+      movq    %r14, 40(%rdi)  /* R14 */
-+      movq    %r15, 48(%rdi)  /* R15 */
-+      movq    %rsi, 56(%rdi)  /* RSI */
-+      ret
-+
-+/*
-+ * int grub_longjmp (grub_jmp_buf env, int val)
-+ */
-+FUNCTION(grub_longjmp)
-+      movl    %esi, %eax
-+      movq    (%rdi), %rbx
-+      movq    8(%rdi), %rsp
-+      movq    16(%rdi), %rbp
-+      movq    24(%rdi), %r12
-+      movq    32(%rdi), %r13
-+      movq    40(%rdi), %r14
-+      movq    48(%rdi), %r15
-+      jmp     *56(%rdi)
-+
-diff --git a/efi/xpm.c b/efi/xpm.c
-new file mode 100644
-index 0000000..085a10c
---- /dev/null
-+++ b/efi/xpm.c
-@@ -0,0 +1,231 @@
-+
-+#if defined(SUPPORT_GRAPHICS) || defined(PLATFORM_EFI) || 1
-+
-+#include <grub/efi/api.h>
-+#include <grub/efi/efi.h>
-+#include <grub/misc.h>
-+
-+#include "xpm.h"
-+
-+unsigned char
-+xpm_get_pixel_idx(struct xpm *xpm, int x, int y)
-+{
-+    if (x < 0 || x >= xpm->width)
-+        return -1;
-+    if (y < 0 || y >= xpm->width)
-+        return -1;
-+    return xpm->image[x + (y * xpm->width)];
-+}
-+
-+void
-+xpm_set_pixel_idx(struct xpm *xpm, int x, int y, unsigned char idx)
-+{
-+    xpm->image[y * xpm->width + x] = idx;
-+}
-+
-+void
-+xpm_get_idx(struct xpm *xpm, unsigned char idx, xpm_pixel_t *pixel)
-+{
-+    xpm_pixel_t *xpl;
-+    if (!pixel)
-+        return;
-+    if (idx >= xpm->colors) {
-+        pixel->red = pixel->green = pixel->blue = 0;
-+        return;
-+    }
-+    xpl = &xpm->palette[idx];
-+    memcpy(pixel, xpl, sizeof (*pixel));
-+//    pixel->red = xpl->red;
-+//    pixel->green = xpl->green;
-+//    pixel->blue = xpl->blue;
-+}
-+
-+int
-+xpm_get_pixel(struct xpm *xpm, int x, int y, xpm_pixel_t *pixel)
-+{
-+    unsigned char idx;
-+    idx = xpm_get_pixel_idx(xpm, x, y);
-+    xpm_get_idx(xpm, idx, pixel);
-+    return 1;
-+}
-+
-+static int
-+hex_to_int(int v)
-+{
-+    if (v >= 'A' && v <= 'F')
-+        return (v - 'A' + 10);
-+    if (v >= 'a' && v <= 'f')
-+        return (v - 'a' + 10);
-+    return (v - '0');
-+}
-+
-+struct xpm *
-+xpm_open(char *path)
-+{
-+    char c, prev, target[]="/* XPM */\n", base;
-+    char buf[32];
-+    int pos = 0;
-+    unsigned int i, idx, len, x, y;
-+    unsigned char pal[XPM_MAX_COLORS];
-+    struct xpm *xpm;
-+
-+    xpm = grub_malloc(sizeof (*xpm));
-+    if (!xpm)
-+        return NULL;
-+
-+    if (!grub_open(path)) {
-+        grub_free(xpm);
-+        grub_printf("grub_open(\"%s\") failed\n", path);
-+        return NULL;
-+    }
-+
-+    grub_memset(xpm, '\0', sizeof (*xpm));
-+
-+    prev = '\n';
-+    c = 0;
-+    do {
-+        if (grub_read(&c, 1) != 1) {
-+            grub_printf("grub_read() failed\n");
-+            grub_free(xpm);
-+            grub_close();
-+            return NULL;
-+        }
-+        if ((pos == 0 && prev == '\n') || pos > 0) {
-+            if (c == target[pos])
-+                pos++;
-+            else
-+                pos = 0;
-+        }
-+        prev = c;
-+    } while (target[pos]);
-+
-+    /* parse info */
-+    while (grub_read(&c, 1)) {
-+        if (c == '"')
-+            break;
-+    }
-+    while (grub_read(&c, 1) && (c == ' ' || c == '\t'))
-+        ;
-+
-+    i = 0;
-+    xpm->width = c - '0';
-+    while (grub_read(&c, 1)) {
-+        if (c >= '0' && c <= '9')
-+            xpm->width = xpm->width * 10 + c - '0';
-+        else
-+            break;
-+    }
-+    if (xpm->width > XPM_MAX_WIDTH) {
-+        grub_printf("xpm->width (%d) was greater than XPM_MAX_WIDTH (%d)\n",
-+                xpm->width, XPM_MAX_WIDTH);
-+        grub_free(xpm);
-+        grub_close();
-+        return NULL;
-+    }
-+    while (grub_read(&c, 1) && (c == ' ' || c == '\t'))
-+        ;
-+
-+    xpm->height = c - '0';
-+    while (grub_read(&c, 1)) {
-+        if (c >= '0' && c <= '9')
-+            xpm->height = xpm->height * 10 + c - '0';
-+        else
-+            break;
-+    }
-+    if (xpm->height > XPM_MAX_HEIGHT) {
-+        grub_printf("xpm->height (%d) was greater than XPM_MAX_HEIGHT (%d)\n",
-+                xpm->height, XPM_MAX_HEIGHT);
-+        grub_free(xpm);
-+        grub_close();
-+        return NULL;
-+    }
-+
-+    while (grub_read(&c, 1) && (c == ' ' || c == '\t'))
-+        ;
-+
-+    xpm->colors = c - '0';
-+    while (grub_read(&c, 1)) {
-+        if (c >= '0' && c <= '9')
-+            xpm->colors = xpm->colors * 10 + c - '0';
-+        else
-+            break;
-+    }
-+
-+    base = 0;
-+    while (grub_read(&c, 1) && c != '"')
-+        ;
-+
-+    /* palette */
-+    for (i = 0, idx = 1; i < xpm->colors; i++) {
-+        len = 0;
-+
-+        while (grub_read(&c, 1) && c != '"')
-+            ;
-+        grub_read(&c, 1);       /* char */
-+        base = c;
-+        grub_read(buf, 4);      /* \t c # */
-+
-+        while (grub_read(&c, 1) && c != '"') {
-+            if (len < sizeof(buf))
-+                buf[len++] = c;
-+        }
-+
-+        if (len == 6 && idx < xpm->colors) {
-+            unsigned char r, g, b;
-+            
-+            r = (hex_to_int(buf[0]) << 4) | hex_to_int(buf[1]);
-+            g = (hex_to_int(buf[2]) << 4) | hex_to_int(buf[3]);
-+            b = (hex_to_int(buf[4]) << 4) | hex_to_int(buf[5]);
-+
-+            pal[idx] = base;
-+            xpm->palette[idx].red = r;
-+            xpm->palette[idx].green = g;
-+            xpm->palette[idx].blue = b;
-+            ++idx;
-+        }
-+    }
-+
-+    /* parse xpm data */
-+    x = y = 0;
-+    while (y < xpm->height) {
-+        xpm_pixel_t *pixel = NULL;
-+        while (1) {
-+            if (!grub_read(&c, 1)) {
-+                grub_printf("%s %s:%d grub_read() failed\n", __FILE__, __func__, __LINE__);
-+                grub_free(xpm);
-+                grub_close();
-+                return NULL;
-+            }
-+            if (c == '"')
-+                break;
-+        }
-+
-+        while (grub_read(&c, 1) && c != '"') {
-+            unsigned char *iaddr = NULL;
-+            for (i = 1; i < xpm->colors; i++)
-+                if (pal[i] == c) {
-+                    idx = i;
-+                    break;
-+                }
-+
-+            xpm_set_pixel_idx(xpm, x, y, idx);
-+           
-+            if (++x >= xpm->width) {
-+                x = 0;
-+
-+                ++y;
-+            }
-+        }
-+    }
-+    grub_close();
-+    return xpm;
-+}
-+
-+void
-+xpm_free(struct xpm *xpm)
-+{
-+    grub_free(xpm);
-+}
-+
-+
-+#endif /* SUPPORT_GRAPHICS || PLATFORM_EFI */
-diff --git a/efi/xpm.h b/efi/xpm.h
-new file mode 100644
-index 0000000..258abc1
---- /dev/null
-+++ b/efi/xpm.h
-@@ -0,0 +1,36 @@
-+#ifndef GRUB_XPM_H
-+#define GRUB_XPM_H
-+
-+#include <shared.h>
-+
-+#define XPM_MAX_COLORS 31
-+#define XPM_MAX_WIDTH 640
-+#define XPM_MAX_HEIGHT 480
-+
-+struct xpm_pixel {
-+    unsigned char reserved;
-+    unsigned char red;
-+    unsigned char green;
-+    unsigned char blue;
-+};
-+typedef struct xpm_pixel xpm_pixel_t;
-+
-+struct xpm {
-+    int colors;
-+    xpm_pixel_t palette[32];
-+
-+    int width;
-+    int height;
-+    unsigned char image[XPM_MAX_WIDTH * XPM_MAX_HEIGHT];
-+};
-+
-+extern struct xpm *xpm_open(char *path);
-+extern void xpm_free(struct xpm *xpm);
-+
-+extern unsigned char xpm_get_pixel_idx(struct xpm *xpm, int x, int y);
-+extern void xpm_set_pixel_idx(struct xpm *xpm, int x, int y, unsigned char idx);
-+extern int xpm_get_pixel(struct xpm *xpm, int x, int y, xpm_pixel_t *pixel);
-+
-+extern void xpm_get_idx(struct xpm *xpm, unsigned char idx, xpm_pixel_t *pixel);
-+
-+#endif /* GRUB_XPM_H */
-diff --git a/grub.spec b/grub.spec
-new file mode 100644
-index 0000000..7e5982d
---- /dev/null
-+++ b/grub.spec
-@@ -0,0 +1,438 @@
-+Name: grub
-+Version: 0.97
-+Release: 20%{?dist}
-+Summary: GRUB - the Grand Unified Boot Loader.
-+Group: System Environment/Base
-+License: GPLv2+
-+
-+ExclusiveArch: i386 x86_64
-+BuildRequires: binutils >= 2.9.1.0.23, ncurses-devel, ncurses-static, texinfo
-+BuildRequires: autoconf /usr/lib/crt1.o automake
-+PreReq: /sbin/install-info
-+Requires: mktemp
-+Requires: /usr/bin/cmp
-+Requires: system-logos
-+BuildRoot: %{_tmppath}/%{name}-%{version}-root
-+
-+URL: http://www.gnu.org/software/%{name}/
-+Source0: ftp://alpha.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz
-+Patch0: grub-fedora-9.patch
-+
-+%description
-+GRUB (Grand Unified Boot Loader) is an experimental boot loader
-+capable of booting into most free operating systems - Linux, FreeBSD,
-+NetBSD, GNU Mach, and others as well as most commercial operating
-+systems.
-+
-+%prep
-+%setup -q
-+%patch0 -p1 -b .fedora-9
-+
-+%build
-+autoreconf
-+autoconf
-+GCCVERS=$(gcc --version | head -1 | cut -d\  -f3 | cut -d. -f1)
-+CFLAGS="-Os -g -fno-strict-aliasing -Wall -Werror -Wno-shadow -Wno-unused"
-+if [ "$GCCVERS" == "4" ]; then
-+      CFLAGS="$CFLAGS -Wno-pointer-sign"
-+fi
-+export CFLAGS
-+%ifarch x86_64
-+%configure --sbindir=/sbin --disable-auto-linux-mem-opt --datarootdir=%{_datadir} --with-platform=efi
-+make
-+rm -fr $RPM_BUILD_ROOT
-+%makeinstall sbindir=${RPM_BUILD_ROOT}/sbin
-+mv ${RPM_BUILD_ROOT}/sbin/grub ${RPM_BUILD_ROOT}/sbin/grub-efi
-+make clean
-+autoreconf
-+autoconf
-+CFLAGS="$CFLAGS -static" 
-+export CFLAGS
-+%endif
-+%configure --sbindir=/sbin --disable-auto-linux-mem-opt --datarootdir=%{_datadir}
-+make
-+
-+%install
-+%makeinstall sbindir=${RPM_BUILD_ROOT}/sbin
-+mkdir -p ${RPM_BUILD_ROOT}/boot/grub
-+
-+rm -f ${RPM_BUILD_ROOT}/%{_infodir}/dir
-+
-+%clean
-+rm -fr $RPM_BUILD_ROOT
-+
-+%post
-+if [ "$1" = 1 ]; then
-+  /sbin/install-info --info-dir=%{_infodir} %{_infodir}/grub.info.gz || :
-+  /sbin/install-info --info-dir=%{_infodir} %{_infodir}/multiboot.info.gz || :
-+fi
-+
-+%preun
-+if [ "$1" = 0 ] ;then
-+  /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/grub.info.gz || :
-+  /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/multiboot.info.gz || :
-+fi
-+
-+%files
-+%defattr(-,root,root)
-+%doc AUTHORS ChangeLog NEWS README COPYING TODO docs/menu.lst
-+/boot/grub
-+/sbin/grub
-+/sbin/grub-install
-+/sbin/grub-terminfo
-+/sbin/grub-md5-crypt
-+%{_bindir}/mbchk
-+%{_infodir}/grub*
-+%{_infodir}/multiboot*
-+%{_mandir}/man*/*
-+%{_datadir}/grub
-+%ifarch x86_64
-+/sbin/grub-efi
-+%endif
-+
-+%changelog
-+* Mon Nov 05 2007 Peter Jones <pjones@redhat.com> - 0.97-20
-+- Add EFI support from Intel on x86_64
-+
-+* Thu Sep 20 2007 Peter Jones <pjones@redhat.com> - 0.97-19
-+- Fix dmraid detection on Intel (isw) controllers in grub-install .
-+
-+* Wed Aug 22 2007 Peter Jones <pjones@redhat.com> - 0.97-18
-+- Fix license tag.
-+
-+* Mon Aug 20 2007 Peter Jones <pjones@redhat.com> - 0.97-17
-+- Use --build-id=none instead of stripping out the build-id notes in the
-+  first and second stage loaders.
-+
-+* Tue Aug 7 2007 Peter Jones <pjones@redhat.com> - 0.97-16
-+- Add ext[23] large inode support (patch from Eric Sandeen)
-+- Fix auto* breakage that happened when we switched from autoreconf to autoconf
-+- Move to original tarball + patch generated from git
-+
-+* Mon Jul 16 2007 Peter Jones <pjones@redhat.com> - 0.97-15
-+- Support booting from GPT
-+
-+* Fri Feb 23 2007 Bill Nottingham <notting@redhat.com> - 0.97-14
-+- fix scriplet errors when installed with --nodocs
-+- coax grub into building (-ltinfo, autoconf instead of autoreconf)
-+
-+* Sun Oct 01 2006 Jesse Keating <jkeating@redhat.com> - 0.97-13
-+- rebuilt for unwind info generation, broken in gcc-4.1.1-21
-+
-+* Thu Sep 21 2006 Peter Jones <pjones@redhat.com> - 0.97-12
-+- Reenable patch 505, which fixes #116311
-+
-+* Tue Aug 15 2006 Peter Jones <pjones@redhat.com> - 0.97-11
-+- Disable patch 505 (#164497)
-+
-+* Wed Aug  2 2006 Peter Jones <pjones@redhat.com> - 0.97-10
-+- Fix grub-install for multipath
-+
-+* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 0.97-9.1
-+- rebuild
-+
-+* Fri Jul  7 2006 Peter Jones <pjones@redhat.com> - 0.97-9
-+- fix broken error reporting from helper functions
-+
-+* Mon Jun 12 2006 Peter Jones <pjones@redhat.com> - 0.97-8
-+- Fix BIOS keyboard handler to use extended keyboard interrupts, so the
-+  Mac Mini works.
-+
-+* Mon Jun  5 2006 Jesse Keating <jkeating@redhat.com> - 0.97-7
-+- Added BuildRequires on a 32bit library
-+
-+* Sat May 27 2006 Peter Jones <pjones@redhat.com> - 0.97-6
-+- Fix mactel keyboard problems, patch from Juergen Keil, forwarded by Linus.
-+
-+* Mon Mar 13 2006 Peter Jones <pjones@redhat.com> - 0.97-5
-+- Fix merge error for "bootonce" patch (broken in 0.95->0.97 update)
-+- Get rid of the 0.97 "default" stuff, since it conflicts with our working
-+  method.
-+
-+* Mon Mar  9 2006 Peter Jones <pjones@redhat.com> - 0.97-4
-+- Fix running "install" multiple times on the same fs in the same invocation
-+  of grub.  (bz #158426 , patch from lxo@redhat.com)
-+
-+* Mon Feb 13 2006 Peter Jones <pjones@redhat.com> - 0.97-3
-+- fix partition names on dmraid
-+
-+* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 0.97-2.1
-+- rebuilt for new gcc4.1 snapshot and glibc changes
-+
-+* Fri Jan 13 2006 Peter Jones <pjones@redhat.com> - 0.97-2
-+- add dmraid support
-+
-+* Wed Dec 14 2005 Peter Jones <pjones@redhat.com> - 0.97-1
-+- update to grub 0.97
-+
-+* Mon Dec  5 2005 Peter Jones <pjones@redhat.com> - 0.95-17
-+- fix configure conftest.c bugs
-+- add -Wno-unused to defeat gcc41 "unused" checking when there are aliases.
-+
-+* Mon Aug  1 2005 Peter Jones <pjones@redhat.com> - 0.95-16
-+- minor fix to the --recheck fix.
-+
-+* Mon Jul 25 2005 Peter Jones <pjones@redhat.com> 0.95-15
-+- Make "grub-install --recheck" warn the user about how bad it is,
-+  and keep a backup file, which it reverts to upon detecting some errors.
-+
-+* Wed Jul  6 2005 Peter Jones <pjones@redhat.com> 0.95-14
-+- Fix changelog to be UTF-8
-+
-+* Thu May 19 2005 Peter Jones <pjones@redhat.com> 0.95-13
-+- Make the spec work with gcc3 and gcc4, so people can test on existing
-+  installations.
-+- don't treat i2o like a cciss device, since its partition names aren't done
-+  that way. (#158158)
-+
-+* Wed Mar 16 2005 Peter Jones <pjones@redhat.com> 0.95-12
-+- Make installing on a partition work again when not using raid
-+
-+* Thu Mar  3 2005 Peter Jones <pjones@redhat.com> 0.95-11
-+- Make it build with gcc4
-+
-+* Sun Feb 20 2005 Peter Jones <pjones@redhat.com> 0.95-10
-+- Always install in MBR for raid1 /boot/
-+
-+* Sun Feb 20 2005 Peter Jones <pjones@redhat.com> 0.95-9
-+- Always use full path for mdadm in grub-install
-+
-+* Tue Feb  8 2005 Peter Jones <pjones@redhat.com> 0.95-8
-+- Mark the simulation stack executable
-+- Eliminate the use of inline functions in stage2/builtins.c
-+
-+* Wed Jan 11 2005 Peter Jones <pjones@redhat.com> 0.95-7
-+- Make grub ignore everything before the XPM header in the splash image,
-+  fixing #143879
-+- If the boot splash image is missing, use console mode instead 
-+  of graphics mode.
-+- Don't print out errors using the graphics terminal code if we're not
-+  actually in graphics mode.
-+
-+* Mon Jan  3 2005 Peter Jones <pjones@redhat.com> 0.95-6
-+- reworked much of how the RAID1 support in grub-install works.  This version
-+  does not require all the devices in the raid to be listed in device.map,
-+  as long as you specify a physical device or partition rather than an md
-+  device.  It should also work with a windows dual-boot on the first partition.
-+
-+* Fri Dec 17 2004 Peter Jones <pjones@redhat.com> 0.95-5
-+- added support for RAID1 devices to grub-install, partly based on a
-+  patch from David Knierim. (#114690)
-+
-+* Tue Nov 30 2004 Jeremy Katz <katzj@redhat.com> 0.95-4
-+- add patch from upstream CVS to handle sparse files on ext[23]
-+- make geometry detection a little bit more robust/correct
-+- use O_DIRECT when reading/writing from devices.  use aligned buffers as 
-+  needed for read/write (#125808)
-+- actually apply the i2o patch
-+- detect cciss/cpqarray devices better (#123249)
-+
-+* Thu Sep 30 2004 Jeremy Katz <katzj@redhat.com> - 0.95-3
-+- don't act on the keypress for the menu (#134029)
-+
-+* Mon Jun 28 2004 Jeremy Katz <katzj@redhat.com> - 0.95-2
-+- add patch from Nicholas Miell to make hiddenmenu work more 
-+  nicely with splashimage mode (#126764)
-+
-+* Fri Jun 18 2004 Jeremy Katz <katzj@redhat.com> - 0.95-1
-+- update to 0.95
-+- drop emd patch, E-MD isn't making forward progress upstream
-+- fix static build for x86_64 (#121095)
-+
-+* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com>
-+- rebuilt
-+
-+* Wed Jun  9 2004 Jeremy Katz <katzj@redhat.com>
-+- require system-logos (#120837)
-+
-+* Fri Jun  4 2004 Jeremy Katz <katzj@redhat.com>
-+- buildrequire automake (#125326)
-+
-+* Thu May 06 2004 Warren Togami <wtogami@redhat.com> - 0.94-5
-+- i2o patch from Markus Lidel
-+
-+* Wed Apr 14 2004 Jeremy Katz <katzj@redhat.com> - 0.94-4
-+- read geometry off of the disk since HDIO_GETGEO doesn't actually 
-+  return correct data with a 2.6 kernel
-+
-+* Fri Mar 12 2004 Jeremy Katz <katzj@redhat.com>
-+- add texinfo buildrequires (#118146)
-+
-+* Wed Feb 25 2004 Jeremy Katz <katzj@redhat.com> 0.94-3
-+- don't use initrd_max_address
-+
-+* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com> 0.94-2
-+- rebuilt
-+
-+* Thu Feb 12 2004 Jeremy Katz <katzj@redhat.com> 0.94-1
-+- update to 0.94, patch merging and updating as necessary
-+
-+* Sat Jan  3 2004 Jeremy Katz <katzj@redhat.com> 0.93-8
-+- new bootonce patch from Padraig Brady so that you don't lose 
-+  the old default (#112775)
-+
-+* Mon Nov 24 2003 Jeremy Katz <katzj@redhat.com>
-+- add ncurses-devel as a buildrequires (#110732)
-+
-+* Tue Oct 14 2003 Jeremy Katz <katzj@redhat.com> 0.93-7
-+- rebuild
-+
-+* Wed Jul  2 2003 Jeremy Katz <katzj@redhat.com> 
-+- Requires: /usr/bin/cmp (#98325)
-+
-+* Thu May 22 2003 Jeremy Katz <katzj@redhat.com> 0.93-6
-+- add patch from upstream to fix build with gcc 3.3
-+
-+* Wed Apr  2 2003 Jeremy Katz <katzj@redhat.com> 0.93-5
-+- add patch to fix support for serial terminfo (#85595)
-+
-+* Wed Jan 22 2003 Tim Powers <timp@redhat.com>
-+- rebuilt
-+
-+* Fri Jan 17 2003 Jeremy Katz <katzj@redhat.com> 0.93-3
-+- add patch from HJ Lu to support large disks (#80980, #63848)
-+- add patch to make message when ending edit clearer (#53846)
-+
-+* Sun Dec 29 2002 Jeremy Katz <katzj@redhat.com> 0.93-2
-+- add a patch to reset the terminal type to console before doing 'boot' from
-+  the command line (#61069)
-+
-+* Sat Dec 28 2002 Jeremy Katz <katzj@redhat.com> 0.93-1
-+- update to 0.93
-+- update configfile patch
-+- graphics patch rework to fit in as a terminal type as present in 0.93
-+- use CFLAGS="-Os -g"
-+- patch configure.in to allow building if host_cpu=x86_64, include -m32 in
-+  CFLAGS if building on x86_64
-+- link glibc static on x86_64 to not require glibc32
-+- include multiboot info pages
-+- drop obsolete patches, reorder remaining patches into some semblance of order
-+
-+* Thu Sep  5 2002 Jeremy Katz <katzj@redhat.com> 0.92-7
-+- splashscreen is in redhat-logos now
-+
-+* Tue Sep  3 2002 Jeremy Katz <katzj@redhat.com> 0.92-6
-+- update splashscreen again
-+
-+* Mon Sep  2 2002 Jeremy Katz <katzj@redhat.com> 0.92-5
-+- update splashscreen
-+
-+* Fri Jun 21 2002 Tim Powers <timp@redhat.com> 0.92-4
-+- automated rebuild
-+
-+* Thu May 23 2002 Tim Powers <timp@redhat.com> 0.92-3
-+- automated rebuild
-+
-+* Fri May  3 2002 Jeremy Katz <katzj@redhat.com> 0.92-2
-+- add patch from Grant Edwards to make vga16 + serial happier (#63491)
-+
-+* Wed May  1 2002 Jeremy Katz <katzj@redhat.com> 0.92-1
-+- update to 0.92
-+- back to autoreconf
-+- make it work with automake 1.6/autoconf 2.53
-+- use "-falign-jumps=1 -falign-loops=1 -falign-functions=1" instead of
-+  "-malign-jumps=1 -malign-loops=1 -malign-functions=1"       to not use 
-+  deprecated gcc options
-+
-+* Tue Apr  9 2002 Jeremy Katz <katzj@redhat.com> 0.91-4
-+- new splash screen
-+
-+* Fri Mar  8 2002 Jeremy Katz <katzj@redhat.com> 0.91-3
-+- include patch from Denis Kitzmen to fix typo causing several options to 
-+  never be defined (in upstream CVS)
-+- include patch from upstream CVS to make displaymem always use hex for 
-+  consistency
-+- add patch from GRUB mailing list from Keir Fraser to add a --once flag to
-+  savedefault function so that you can have the equivalent of lilo -R 
-+  functionality (use 'savedefault --default=N --once' from the grub shell)
-+- back to autoconf
-+
-+* Sun Jan 27 2002 Jeremy Katz <katzj@redhat.com> 
-+- change to use $grubdir instead of /boot/grub in the symlink patch (#58771)
-+
-+* Fri Jan 25 2002 Jeremy Katz <katzj@redhat.com> 0.91-2
-+- don't ifdef out the auto memory passing, use the configure flag instead
-+- add a patch so that grub respects mem= from the kernel command line when 
-+  deciding where to place the initrd (#52558)
-+
-+* Mon Jan 21 2002 Jeremy Katz <katzj@redhat.com> 0.91-1
-+- update to 0.91 final
-+- add documentation on splashimage param (#51609)
-+
-+* Wed Jan  2 2002 Jeremy Katz <katzj@redhat.com> 0.91-0.20020102cvs
-+- update to current CVS snapshot to fix some of the hangs on boot related
-+  to LBA probing (#57503, #55868, and others)
-+
-+* Fri Dec 21 2001 Erik Troan <ewt@redhat.com> 0.90-14
-+- fixed append patch to not require arguments to begin with
-+- changed to autoreconf from autoconf
-+
-+* Wed Oct 31 2001 Jeremy Katz <katzj@redhat.com> 0.90-13
-+- include additional patch from Erich to add sync calls in grub-install to 
-+  work around updated images not being synced to disk
-+- fix segfault in grub shell if 'password --md5' is used without specifying
-+  a password (#55008)
-+
-+* Fri Oct 26 2001 Jeremy Katz <katzj@redhat.com> 0.90-12
-+- Include Erich Boleyn <erich@uruk.org>'s patch to disconnect from the 
-+  BIOS after APM operations.  Should fix #54375
-+
-+* Wed Sep 12 2001 Erik Troan <ewt@redhat.com>
-+- added patch for 'a' option in grub boot menu
-+
-+* Wed Sep  5 2001 Jeremy Katz <katzj@redhat.com> 0.90-11
-+- grub-install: if /boot/grub/grub.conf doesn't exist but /boot/grub/menu.lst 
-+  does, create a symlink
-+
-+* Fri Aug 24 2001 Jeremy Katz <katzj@redhat.com>
-+- pull in patch from upstream CVS to fix md5crypt in grub shell (#52220)
-+- use mktemp in grub-install to avoid tmp races
-+
-+* Fri Aug  3 2001 Jeremy Katz <katzj@redhat.com>
-+- link curses statically (#49519)
-+
-+* Thu Aug  2 2001 Jeremy Katz <katzj@redhat.com>
-+- fix segfault with using the serial device before initialization (#50219)
-+
-+* Thu Jul 19 2001 Jeremy Katz <katzj@redhat.com>
-+- add --copy-only flag to grub-install
-+
-+* Thu Jul 19 2001 Jeremy Katz <katzj@redhat.com>
-+- copy files in grub-install prior to device probe
-+
-+* Thu Jul 19 2001 Jeremy Katz <katzj@redhat.com>
-+- original images don't go in /boot and then grub-install does the right
-+  thing
-+
-+* Thu Jul 19 2001 Jeremy Katz <katzj@redhat.com>
-+- fix the previous patch
-+- put the password prompt in the proper location
-+
-+* Thu Jul 19 2001 Jeremy Katz <katzj@redhat.com>
-+- reset the screen when the countdown is cancelled so text will disappear 
-+  in vga16 mode
-+
-+* Mon Jul 16 2001 Jeremy Katz <katzj@redhat.com>
-+- change configfile defaults to grub.conf
-+
-+* Sun Jul 15 2001 Jeremy Katz <katzj@redhat.com>
-+- updated to grub 0.90 final
-+
-+* Fri Jul  6 2001 Matt Wilson <msw@redhat.com>
-+- modifed splash screen to a nice shade of blue
-+
-+* Tue Jul  3 2001 Matt Wilson <msw@redhat.com>
-+- added a first cut at a splash screen
-+
-+* Sun Jul  1 2001 Nalin Dahyabhai <nalin@redhat.com>
-+- fix datadir mismatch between build and install phases
-+
-+* Mon Jun 25 2001 Jeremy Katz <katzj@redhat.com>
-+- update to current CVS 
-+- forward port VGA16 patch from Paulo César Pereira de 
-+  Andrade <pcpa@conectiva.com.br>
-+- add patch for cciss, ida, and rd raid controllers
-+- don't pass mem= to the kernel
-+
-+* Wed May 23 2001 Erik Troan <ewt@redhat.com>
-+- initial build for Red Hat
-diff --git a/grub/.gitignore b/grub/.gitignore
-new file mode 100644
-index 0000000..5d89f6d
---- /dev/null
-+++ b/grub/.gitignore
-@@ -0,0 +1,2 @@
-+Makefile.in
-+.deps
-diff --git a/grub/Makefile.am b/grub/Makefile.am
-index 7eb2eaa..d4353f7 100644
---- a/grub/Makefile.am
-+++ b/grub/Makefile.am
-@@ -15,5 +15,5 @@ AM_CPPFLAGS = -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \
- AM_CFLAGS = $(GRUB_CFLAGS)
--grub_SOURCES = main.c asmstub.c
-+grub_SOURCES = main.c asmstub.c efitftp.c
- grub_LDADD = ../stage2/libgrub.a  ../lib/libcommon.a $(GRUB_LIBS)
-diff --git a/grub/Makefile.in b/grub/Makefile.in
-deleted file mode 100644
-index 136c38f..0000000
---- a/grub/Makefile.in
-+++ /dev/null
-@@ -1,445 +0,0 @@
--# Makefile.in generated by automake 1.9.4 from Makefile.am.
--# @configure_input@
--
--# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
--# 2003, 2004  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@
--
--SOURCES = $(grub_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 = :
--build_triplet = @build@
--host_triplet = @host@
--sbin_PROGRAMS = grub$(EXEEXT)
--subdir = grub
--DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
--ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
--am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
--      $(top_srcdir)/configure.ac
--am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
--      $(ACLOCAL_M4)
--mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
--CONFIG_HEADER = $(top_builddir)/config.h
--CONFIG_CLEAN_FILES =
--am__installdirs = "$(DESTDIR)$(sbindir)"
--sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
--PROGRAMS = $(sbin_PROGRAMS)
--am_grub_OBJECTS = main.$(OBJEXT) asmstub.$(OBJEXT)
--grub_OBJECTS = $(am_grub_OBJECTS)
--am__DEPENDENCIES_1 =
--grub_DEPENDENCIES = ../stage2/libgrub.a ../lib/libcommon.a \
--      $(am__DEPENDENCIES_1)
--DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
--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 = $(grub_SOURCES)
--DIST_SOURCES = $(grub_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@
--BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@
--BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@
--CC = @CC@
--CCAS = @CCAS@
--CCASFLAGS = @CCASFLAGS@
--CCDEPMODE = @CCDEPMODE@
--CFLAGS = @CFLAGS@
--CPP = @CPP@
--CPPFLAGS = @CPPFLAGS@
--CYGPATH_W = @CYGPATH_W@
--DEFS = @DEFS@
--DEPDIR = @DEPDIR@
--DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@
--DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@
--ECHO_C = @ECHO_C@
--ECHO_N = @ECHO_N@
--ECHO_T = @ECHO_T@
--EGREP = @EGREP@
--EXEEXT = @EXEEXT@
--FSYS_CFLAGS = @FSYS_CFLAGS@
--GRUB_CFLAGS = @GRUB_CFLAGS@
--GRUB_LIBS = @GRUB_LIBS@
--HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@
--HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@
--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@
--MAINT = @MAINT@
--MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
--MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
--MAKEINFO = @MAKEINFO@
--NETBOOT_DRIVERS = @NETBOOT_DRIVERS@
--NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@
--NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@
--NET_CFLAGS = @NET_CFLAGS@
--NET_EXTRAFLAGS = @NET_EXTRAFLAGS@
--OBJCOPY = @OBJCOPY@
--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@
--RANLIB = @RANLIB@
--SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@
--SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@
--SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@
--SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@
--SET_MAKE = @SET_MAKE@
--SHELL = @SHELL@
--STAGE1_CFLAGS = @STAGE1_CFLAGS@
--STAGE2_CFLAGS = @STAGE2_CFLAGS@
--STRIP = @STRIP@
--VERSION = @VERSION@
--ac_ct_CC = @ac_ct_CC@
--ac_ct_OBJCOPY = @ac_ct_OBJCOPY@
--ac_ct_RANLIB = @ac_ct_RANLIB@
--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 = @build@
--build_alias = @build_alias@
--build_cpu = @build_cpu@
--build_os = @build_os@
--build_vendor = @build_vendor@
--datadir = @datadir@
--exec_prefix = @exec_prefix@
--host = @host@
--host_alias = @host_alias@
--host_cpu = @host_cpu@
--host_os = @host_os@
--host_vendor = @host_vendor@
--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@
--@SERIAL_SPEED_SIMULATION_FALSE@SERIAL_FLAGS = -DSUPPORT_SERIAL=1 
--@SERIAL_SPEED_SIMULATION_TRUE@SERIAL_FLAGS = -DSUPPORT_SERIAL=1 -DSIMULATE_SLOWNESS_OF_SERIAL=1
--AM_CPPFLAGS = -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \
--      -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \
--      -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \
--      -DUSE_MD5_PASSWORDS=1 -DSUPPORT_HERCULES=1 \
--      $(SERIAL_FLAGS) -I$(top_srcdir)/stage2 \
--      -I$(top_srcdir)/stage1 -I$(top_srcdir)/lib
--
--AM_CFLAGS = $(GRUB_CFLAGS)
--grub_SOURCES = main.c asmstub.c
--grub_LDADD = ../stage2/libgrub.a  ../lib/libcommon.a $(GRUB_LIBS)
--all: all-am
--
--.SUFFIXES:
--.SUFFIXES: .c .o .obj
--$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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  grub/Makefile'; \
--      cd $(top_srcdir) && \
--        $(AUTOMAKE) --gnu  grub/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
--      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
--$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
--      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
--install-sbinPROGRAMS: $(sbin_PROGRAMS)
--      @$(NORMAL_INSTALL)
--      test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)"
--      @list='$(sbin_PROGRAMS)'; for p in $$list; do \
--        p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
--        if test -f $$p \
--        ; then \
--          f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
--         echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
--         $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \
--        else :; fi; \
--      done
--
--uninstall-sbinPROGRAMS:
--      @$(NORMAL_UNINSTALL)
--      @list='$(sbin_PROGRAMS)'; for p in $$list; do \
--        f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
--        echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
--        rm -f "$(DESTDIR)$(sbindir)/$$f"; \
--      done
--
--clean-sbinPROGRAMS:
--      -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS)
--grub$(EXEEXT): $(grub_OBJECTS) $(grub_DEPENDENCIES) 
--      @rm -f grub$(EXEEXT)
--      $(LINK) $(grub_LDFLAGS) $(grub_OBJECTS) $(grub_LDADD) $(LIBS)
--
--mostlyclean-compile:
--      -rm -f *.$(OBJEXT)
--
--distclean-compile:
--      -rm -f *.tab.c
--
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asmstub.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.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)
--      @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)$(sbindir)"; 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-generic clean-sbinPROGRAMS 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-exec-am: install-sbinPROGRAMS
--
--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-info-am uninstall-sbinPROGRAMS
--
--.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
--      clean-sbinPROGRAMS ctags distclean distclean-compile \
--      distclean-generic distclean-tags 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-sbinPROGRAMS install-strip \
--      installcheck installcheck-am installdirs maintainer-clean \
--      maintainer-clean-generic mostlyclean mostlyclean-compile \
--      mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
--      uninstall-am uninstall-info-am uninstall-sbinPROGRAMS
--
--# 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/grub/asmstub.c b/grub/asmstub.c
-index ab95b4b..818be75 100644
---- a/grub/asmstub.c
-+++ b/grub/asmstub.c
-@@ -42,6 +42,7 @@ int grub_stage2 (void);
- #include <sys/time.h>
- #include <termios.h>
- #include <signal.h>
-+#include <sys/mman.h>
- #ifdef __linux__
- # include <sys/ioctl.h>               /* ioctl */
-@@ -53,6 +54,9 @@ int grub_stage2 (void);
- # ifndef BLKFLSBUF
- #  define BLKFLSBUF   _IO (0x12,97)   /* flush buffer cache */
- # endif /* ! BLKFLSBUF */
-+# ifndef O_DIRECT
-+#   define O_DIRECT 040000
-+# endif /* ! O_DIRECT */
- #endif /* __linux__ */
- /* We want to prevent any circularararity in our stubs, as well as
-@@ -71,7 +75,7 @@ unsigned long install_partition = 0x20000;
- unsigned long boot_drive = 0;
- int saved_entryno = 0;
- char version_string[] = VERSION;
--char config_file[128] = "/boot/grub/menu.lst"; /* FIXME: arbitrary */
-+char config_file[128] = "/boot/grub/grub.conf"; /* FIXME: arbitrary */
- unsigned long linux_text_len = 0;
- char *linux_data_tmp_addr = 0;
- char *linux_data_real_addr = 0;
-@@ -79,7 +83,7 @@ unsigned short io_map[IO_MAP_SIZE];
- struct apm_info apm_bios_info;
- /* Emulation requirements. */
--char *grub_scratch_mem = 0;
-+void *grub_scratch_mem = 0;
- struct geometry *disks = 0;
-@@ -103,14 +107,73 @@ static char *serial_device = 0;
- static unsigned int serial_speed;
- #endif /* SIMULATE_SLOWNESS_OF_SERIAL */
-+#ifdef GRUB_UTIL
-+int get_sector_size (int drive)
-+{
-+  return 0x200;
-+}
-+int get_sector_bits (int drive)
-+{
-+  return 9;
-+}
-+#endif /* GRUB_UTIL */
-+
-+/* This allocates page-aligned storage of the specified size, which must be
-+ * a multiple of the page size as determined by calling sysconf(_SC_PAGESIZE)
-+ */
-+#ifdef __linux__
-+static void *
-+grub_mmap_alloc(size_t len)
-+{
-+  int mmap_flags = MAP_ANONYMOUS|MAP_PRIVATE|MAP_EXECUTABLE;
-+
-+#ifdef MAP_32BIT
-+  mmap_flags |= MAP_32BIT;
-+#endif
-+  /* Mark the simulated stack executable, as GCC uses stack trampolines
-+   * to implement nested functions. */
-+  return mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC, mmap_flags, -1, 0);
-+}
-+#else /* !defined(__linux__) */
-+static void *
-+grub_mmap_alloc(size_t len)
-+{
-+  int fd = 0, offset = 0, ret = 0;
-+  void *pa = MAP_FAILED; 
-+  char template[] = "/tmp/grub_mmap_alloc_XXXXXX";
-+  errno_t e;
-+
-+  fd = mkstemp(template);
-+  if (fd < 0)
-+    return pa;
-+
-+  unlink(template);
-+
-+  ret = ftruncate(fd, len);
-+  if (ret < 0)
-+    return pa;
-+
-+  /* Mark the simulated stack executable, as GCC uses stack trampolines
-+   * to implement nested functions. */
-+  pa = mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC,
-+                  MAP_PRIVATE|MAP_EXECUTABLE, fd, offset);
-+
-+  e = errno;
-+  close(fd);
-+  errno = e;
-+  return pa;
-+}
-+#endif /* defined(__linux__) */
-+
- /* The main entry point into this mess. */
- int
- grub_stage2 (void)
- {
-   /* These need to be static, because they survive our stack transitions. */
-   static int status = 0;
--  static char *realstack;
--  char *scratch, *simstack;
-+  static void *realstack;
-+  void *simstack_alloc_base, *simstack;
-+  size_t simstack_size, page_size;
-   int i;
-   auto void doit (void);
-@@ -120,8 +183,13 @@ grub_stage2 (void)
-   void doit (void)
-     {
-       /* Make sure our stack lives in the simulated memory area. */
-+#ifdef __x86_64
-+      asm volatile ("movq %%rsp, %0\n\tmovq %1, %%rsp\n"
-+                  : "=&r" (realstack) : "r" (simstack));
-+#else
-       asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
-                   : "=&r" (realstack) : "r" (simstack));
-+#endif
-       
-       /* Do a setjmp here for the stop command.  */
-       if (! setjmp (env_for_exit))
-@@ -138,13 +206,43 @@ grub_stage2 (void)
-       }
-       
-       /* Replace our stack before we use any local variables. */
-+#ifdef __x86_64
-+      asm volatile ("movq %0, %%rsp\n" : : "r" (realstack));
-+#else
-       asm volatile ("movl %0, %%esp\n" : : "r" (realstack));
-+#endif
-     }
-   assert (grub_scratch_mem == 0);
--  scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15);
--  assert (scratch);
--  grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4);
-+
-+  /* Allocate enough pages for 0x100000 + EXTENDED_SIZE + 15, and
-+   * make sure the memory is aligned to a multiple of the system's
-+   * page size */
-+  page_size = sysconf (_SC_PAGESIZE);
-+  simstack_size = ( 0x100000 + EXTENDED_MEMSIZE + 15);
-+  if (simstack_size % page_size)
-+    {
-+      /* If we're not on a page_size boundary, round up to the next one */
-+      simstack_size &= ~(page_size-1);
-+      simstack_size += page_size;
-+    }
-+
-+  /* Add one for a PROT_NONE boundary page at each end. */
-+  simstack_size += 2 * page_size;
-+
-+  simstack_alloc_base = grub_mmap_alloc(simstack_size);
-+  assert (simstack_alloc_base != MAP_FAILED);
-+
-+  /* mark pages above and below our simstack area as innaccessable.
-+   * If the implementation we're using doesn't support that, then the
-+   * new protection modes are undefined.  It's safe to just ignore
-+   * them, though.  It'd be nice if we knew that we'd get a SEGV for
-+   * touching the area, but that's all.  it'd be nice to have. */
-+  mprotect (simstack_alloc_base, page_size, PROT_NONE);
-+  mprotect ((void *)((unsigned long)simstack_alloc_base +
-+                        simstack_size - page_size),  page_size, PROT_NONE);
-+
-+  grub_scratch_mem = (void *)((unsigned long)simstack_alloc_base + page_size);
-   /* FIXME: simulate the memory holes using mprot, if available. */
-@@ -217,7 +315,7 @@ grub_stage2 (void)
-   device_map = 0;
-   free (disks);
-   disks = 0;
--  free (scratch);
-+  munmap(simstack_alloc_base, simstack_size);
-   grub_scratch_mem = 0;
-   if (serial_device)
-@@ -699,6 +797,13 @@ console_getkey (void)
-   return console_translate_key (c);
- }
-+/* returns modifier status */
-+int
-+console_keystatus (void)
-+{
-+  return 0;
-+}
-+
- /* returns packed values, LSB+1 is x, LSB is y */
- int
- console_getxy (void)
-@@ -766,7 +871,7 @@ get_diskinfo (int drive, struct geometry *geometry)
-     {
-       /* The unpartitioned device name: /dev/XdX */
-       char *devname = device_map[drive];
--      char buf[512];
-+      char * buf, * buf_unaligned;
-       if (! devname)
-       return -1;
-@@ -777,13 +882,13 @@ get_diskinfo (int drive, struct geometry *geometry)
-       /* Open read/write, or read-only if that failed. */
-       if (! read_only)
--      disks[drive].flags = open (devname, O_RDWR);
-+      disks[drive].flags = open (devname, O_RDWR | O_DIRECT);
-       if (disks[drive].flags == -1)
-       {
-         if (read_only || errno == EACCES || errno == EROFS || errno == EPERM)
-           {
--            disks[drive].flags = open (devname, O_RDONLY);
-+            disks[drive].flags = open (devname, O_RDONLY | O_DIRECT);
-             if (disks[drive].flags == -1)
-               {
-                 assign_device_name (drive, 0);
-@@ -797,6 +902,10 @@ get_diskinfo (int drive, struct geometry *geometry)
-           }
-       }
-+      buf_unaligned = malloc((512 * sizeof(char)) + 4095);
-+      buf = (char *) (((unsigned long)buf_unaligned + 4096 - 1) &
-+                      (~(4096-1)));
-+
-       /* Attempt to read the first sector.  */
-       if (read (disks[drive].flags, buf, 512) != 512)
-       {
-@@ -808,6 +917,7 @@ get_diskinfo (int drive, struct geometry *geometry)
-       if (disks[drive].flags != -1)
-       get_drive_geometry (&disks[drive], device_map, drive);
-+      free(buf_unaligned);
-     }
-   if (disks[drive].flags == -1)
-@@ -829,24 +939,34 @@ static int
- nread (int fd, char *buf, size_t len)
- {
-   int size = len;
-+  char * buf_unaligned, * buff, * obuff;
-+  int ret;
-+
-+  buf_unaligned = malloc((len * sizeof(char)) + 4095);
-+  obuff = buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) &
-+                           (~(4096-1)));
-+
-   while (len)
-     {
--      int ret = read (fd, buf, len);
-+      ret = read (fd, buff, len);
-       if (ret <= 0)
-       {
-         if (errno == EINTR)
-           continue;
-         else
--          return ret;
-+            break;
-       }
-       len -= ret;
--      buf += ret;
-+      buff += ret;
-     }
--  return size;
-+  if (!len) ret = size;
-+
-+  buf = memcpy(buf, obuff, size);
-+  return ret;
- }
- /* Write LEN bytes from BUF to FD. Return less than or equal to zero if an
-@@ -855,10 +975,18 @@ static int
- nwrite (int fd, char *buf, size_t len)
- {
-   int size = len;
-+  char * buf_unaligned, * buff;
-+
-+  buf_unaligned = malloc((len * sizeof(char)) + 4095);
-+  buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) &
-+                   (~(4096-1)));
-   while (len)
-     {
--      int ret = write (fd, buf, len);
-+      int ret;
-+
-+      memcpy(buff, buf, len);
-+      ret = write (fd, buff, len);
-       if (ret <= 0)
-       {
-@@ -946,20 +1074,20 @@ biosdisk (int subfunc, int drive, struct geometry *geometry,
-     _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo,
-              loff_t *, res, uint, wh);
--    offset = (loff_t) sector * (loff_t) SECTOR_SIZE;
-+    offset = (loff_t) sector * (loff_t) get_sector_size(drive);
-     if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET))
-       return -1;
-   }
- #else
-   {
--    off_t offset = (off_t) sector * (off_t) SECTOR_SIZE;
-+    off_t offset = (off_t) sector * (off_t) get_sector_size(drive);
-     if (lseek (fd, offset, SEEK_SET) != offset)
-       return -1;
-   }
- #endif
--  buf = (char *) (segment << 4);
-+  buf = (char *) (unsigned long) (segment << 4);
-   switch (subfunc)
-     {
-@@ -971,13 +1099,13 @@ biosdisk (int subfunc, int drive, struct geometry *geometry,
-            sectors that are read together with the MBR in one read.  It
-            should only remap the MBR, so we split the read in two 
-            parts. -jochen  */
--        if (nread (fd, buf, SECTOR_SIZE) != SECTOR_SIZE)
-+        if (nread (fd, buf, get_sector_size(drive)) != get_sector_size(drive))
-           return -1;
--        buf += SECTOR_SIZE;
-+        buf += get_sector_size(drive);
-         nsec--;
-       }
- #endif
--      if (nread (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE)
-+      if (nread (fd, buf, nsec * get_sector_size(drive)) != nsec * get_sector_size(drive))
-       return -1;
-       break;
-@@ -987,10 +1115,10 @@ biosdisk (int subfunc, int drive, struct geometry *geometry,
-         grub_printf ("Write %d sectors starting from %d sector"
-                      " to drive 0x%x (%s)\n",
-                      nsec, sector, drive, device_map[drive]);
--        hex_dump (buf, nsec * SECTOR_SIZE);
-+        hex_dump (buf, nsec * get_sector_size(drive));
-       }
-       if (! read_only)
--      if (nwrite (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE)
-+      if (nwrite (fd, buf, nsec * get_sector_size(drive)) != nsec * get_sector_size(drive))
-         return -1;
-       break;
-@@ -1273,3 +1401,21 @@ hercules_setcursor (int on)
- {
-   return 1;
- }
-+
-+int
-+grub_load_linux (char *kernel, char *arg)
-+{
-+  return 0;
-+}
-+
-+int
-+grub_load_initrd (char *initrd)
-+{
-+  return 0;
-+}
-+
-+int
-+grub_chainloader (char *filename)
-+{
-+  return 0;
-+}
-diff --git a/grub/efitftp.c b/grub/efitftp.c
-new file mode 100644
-index 0000000..5355dec
---- /dev/null
-+++ b/grub/efitftp.c
-@@ -0,0 +1,34 @@
-+#include <shared.h>
-+#include <filesys.h>
-+
-+int efi_tftp_mount (void);
-+int efi_tftp_read (char *buf, int len);
-+int efi_tftp_dir (char *dirname);
-+void efi_tftp_close (void);
-+
-+int
-+efi_tftp_mount (void)
-+{
-+      grub_printf("non-efi efi_tftp_mount()\n");
-+      return 0;
-+}
-+
-+int
-+efi_tftp_read (char *addr, int size)
-+{
-+      grub_printf ("non-efi efi_tftp_read (0x%x, %d)\n", (long) addr, size);
-+      return 0;
-+}
-+
-+int
-+efi_tftp_dir (char *dirname)
-+{
-+      grub_printf ("non-efi efi_ftp_dir (%s)\n", dirname);
-+      return 0;
-+}
-+
-+void
-+efi_tftp_close (void)
-+{
-+      grub_printf ("non-efi efi_tftp_close ()\n");
-+}
-diff --git a/grub/main.c b/grub/main.c
-index dfe847e..6083641 100644
---- a/grub/main.c
-+++ b/grub/main.c
-@@ -140,7 +140,7 @@ main (int argc, char **argv)
-   program_name = argv[0];
-   default_boot_drive = boot_drive;
-   default_install_partition = install_partition;
--  if (config_file)
-+  if (config_file[0])
-     default_config_file = config_file;
-   else
-     default_config_file = "NONE";
-diff --git a/lib/.gitignore b/lib/.gitignore
-new file mode 100644
-index 0000000..5d89f6d
---- /dev/null
-+++ b/lib/.gitignore
-@@ -0,0 +1,2 @@
-+Makefile.in
-+.deps
-diff --git a/lib/Makefile.in b/lib/Makefile.in
-deleted file mode 100644
-index 3dae206..0000000
---- a/lib/Makefile.in
-+++ /dev/null
-@@ -1,416 +0,0 @@
--# Makefile.in generated by automake 1.9.4 from Makefile.am.
--# @configure_input@
--
--# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
--# 2003, 2004  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@
--
--SOURCES = $(libcommon_a_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 = :
--build_triplet = @build@
--host_triplet = @host@
--subdir = lib
--DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
--ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
--am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
--      $(top_srcdir)/configure.ac
--am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
--      $(ACLOCAL_M4)
--mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
--CONFIG_HEADER = $(top_builddir)/config.h
--CONFIG_CLEAN_FILES =
--LIBRARIES = $(noinst_LIBRARIES)
--AR = ar
--ARFLAGS = cru
--libcommon_a_AR = $(AR) $(ARFLAGS)
--libcommon_a_LIBADD =
--am_libcommon_a_OBJECTS = getopt.$(OBJEXT) getopt1.$(OBJEXT) \
--      device.$(OBJEXT)
--libcommon_a_OBJECTS = $(am_libcommon_a_OBJECTS)
--DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
--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 = $(libcommon_a_SOURCES)
--DIST_SOURCES = $(libcommon_a_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@
--BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@
--BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@
--CC = @CC@
--CCAS = @CCAS@
--CCASFLAGS = @CCASFLAGS@
--CCDEPMODE = @CCDEPMODE@
--CFLAGS = @CFLAGS@
--CPP = @CPP@
--CPPFLAGS = @CPPFLAGS@
--CYGPATH_W = @CYGPATH_W@
--DEFS = @DEFS@
--DEPDIR = @DEPDIR@
--DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@
--DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@
--ECHO_C = @ECHO_C@
--ECHO_N = @ECHO_N@
--ECHO_T = @ECHO_T@
--EGREP = @EGREP@
--EXEEXT = @EXEEXT@
--FSYS_CFLAGS = @FSYS_CFLAGS@
--GRUB_CFLAGS = @GRUB_CFLAGS@
--GRUB_LIBS = @GRUB_LIBS@
--HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@
--HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@
--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@
--MAINT = @MAINT@
--MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
--MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
--MAKEINFO = @MAKEINFO@
--NETBOOT_DRIVERS = @NETBOOT_DRIVERS@
--NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@
--NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@
--NET_CFLAGS = @NET_CFLAGS@
--NET_EXTRAFLAGS = @NET_EXTRAFLAGS@
--OBJCOPY = @OBJCOPY@
--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@
--RANLIB = @RANLIB@
--SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@
--SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@
--SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@
--SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@
--SET_MAKE = @SET_MAKE@
--SHELL = @SHELL@
--STAGE1_CFLAGS = @STAGE1_CFLAGS@
--STAGE2_CFLAGS = @STAGE2_CFLAGS@
--STRIP = @STRIP@
--VERSION = @VERSION@
--ac_ct_CC = @ac_ct_CC@
--ac_ct_OBJCOPY = @ac_ct_OBJCOPY@
--ac_ct_RANLIB = @ac_ct_RANLIB@
--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 = @build@
--build_alias = @build_alias@
--build_cpu = @build_cpu@
--build_os = @build_os@
--build_vendor = @build_vendor@
--datadir = @datadir@
--exec_prefix = @exec_prefix@
--host = @host@
--host_alias = @host_alias@
--host_cpu = @host_cpu@
--host_os = @host_os@
--host_vendor = @host_vendor@
--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_LIBRARIES = libcommon.a
--AM_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/stage2 \
--      -I$(top_srcdir)/stage1
--
--libcommon_a_SOURCES = getopt.c getopt1.c getopt.h device.c device.h
--all: all-am
--
--.SUFFIXES:
--.SUFFIXES: .c .o .obj
--$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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  lib/Makefile'; \
--      cd $(top_srcdir) && \
--        $(AUTOMAKE) --gnu  lib/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
--      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
--$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
--      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
--
--clean-noinstLIBRARIES:
--      -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
--libcommon.a: $(libcommon_a_OBJECTS) $(libcommon_a_DEPENDENCIES) 
--      -rm -f libcommon.a
--      $(libcommon_a_AR) libcommon.a $(libcommon_a_OBJECTS) $(libcommon_a_LIBADD)
--      $(RANLIB) libcommon.a
--
--mostlyclean-compile:
--      -rm -f *.$(OBJEXT)
--
--distclean-compile:
--      -rm -f *.tab.c
--
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/device.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.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)
--      @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 $(LIBRARIES)
--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:
--
--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 clean-noinstLIBRARIES 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-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-info-am
--
--.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
--      clean-noinstLIBRARIES ctags distclean distclean-compile \
--      distclean-generic distclean-tags 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-compile \
--      mostlyclean-generic pdf pdf-am ps ps-am tags 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/lib/device.c b/lib/device.c
-index d0663b3..50540bc 100644
---- a/lib/device.c
-+++ b/lib/device.c
-@@ -36,6 +36,9 @@
- #include <limits.h>
- #include <stdarg.h>
-+#define SECTOR_SIZE 0x200
-+#define SECTOR_BITS 9
-+
- #ifdef __linux__
- # if !defined(__GLIBC__) || \
-         ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))
-@@ -131,6 +134,152 @@ get_kfreebsd_version ()
- #include <shared.h>
- #include <device.h>
-+#if defined(__linux__)
-+/* The 2.6 kernel has removed all of the geometry handling for IDE drives
-+ * that did fixups for LBA, etc.  This means that the geometry we get
-+ * with the ioctl has a good chance of being wrong.  So, we get to 
-+ * also know about partition tables and try to read what the geometry
-+ * is there. *grumble*   Very closely based on code from cfdisk
-+ */
-+static void get_kernel_geometry(int fd, long long *cyl, int *heads, int *sectors) {
-+    struct hd_geometry hdg;
-+    
-+    if (ioctl (fd, HDIO_GETGEO, &hdg))
-+        return;
-+
-+    *cyl = hdg.cylinders;
-+    *heads = hdg.heads;
-+    *sectors = hdg.sectors;
-+}
-+
-+struct partition {
-+        unsigned char boot_ind;         /* 0x80 - active */
-+        unsigned char head;             /* starting head */
-+        unsigned char sector;           /* starting sector */
-+        unsigned char cyl;              /* starting cylinder */
-+        unsigned char sys_ind;          /* What partition type */
-+        unsigned char end_head;         /* end head */
-+        unsigned char end_sector;       /* end sector */
-+        unsigned char end_cyl;          /* end cylinder */
-+        unsigned char start4[4];        /* starting sector counting from 0 */
-+        unsigned char size4[4];         /* nr of sectors in partition */
-+};
-+
-+#define ALIGNMENT 2
-+typedef union {
-+    struct {
-+      unsigned char align[ALIGNMENT];
-+      unsigned char b[SECTOR_SIZE];
-+    } c;
-+    struct {
-+      unsigned char align[ALIGNMENT];
-+      unsigned char buffer[0x1BE];
-+      struct partition part[4];
-+      unsigned char magicflag[2];
-+    } p;
-+} partition_table;
-+
-+#define PART_TABLE_FLAG0 0x55
-+#define PART_TABLE_FLAG1 0xAA
-+
-+static void
-+get_partition_table_geometry(partition_table *bufp, long long *cyl, int *heads, 
-+                             int *sectors) {
-+    struct partition *p;
-+    int i,h,s,hh,ss;
-+    int first = 1;
-+    int bad = 0;
-+
-+    if (bufp->p.magicflag[0] != PART_TABLE_FLAG0 ||
-+      bufp->p.magicflag[1] != PART_TABLE_FLAG1) {
-+          /* Matthew Wilcox: slightly friendlier version of
-+             fatal(_("Bad signature on partition table"), 3);
-+          */
-+            fprintf(stderr, "Unknown partition table signature\n");
-+          return;
-+    }
-+
-+    hh = ss = 0;
-+    for (i=0; i<4; i++) {
-+      p = &(bufp->p.part[i]);
-+      if (p->sys_ind != 0) {
-+          h = p->end_head + 1;
-+          s = (p->end_sector & 077);
-+          if (first) {
-+              hh = h;
-+              ss = s;
-+              first = 0;
-+          } else if (hh != h || ss != s)
-+              bad = 1;
-+      }
-+    }
-+
-+    if (!first && !bad) {
-+      *heads = hh;
-+      *sectors = ss;
-+    }
-+}
-+
-+static long long my_lseek (unsigned int fd, long long offset, 
-+                           unsigned int origin)
-+{
-+#if defined(__linux__) && (!defined(__GLIBC__) || \
-+        ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))))
-+  /* Maybe libc doesn't have large file support.  */
-+  loff_t offset, result;
-+  static int _llseek (uint filedes, ulong hi, ulong lo,
-+                      loff_t *res, uint wh);
-+  _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo,
-+             loff_t *, res, uint, wh);
-+  
-+  if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET) < 0)
-+    return (long long) -1;
-+  return result;
-+#else
-+  return lseek(fd, offset, SEEK_SET);
-+#endif
-+}
-+
-+static void get_linux_geometry (int fd, struct geometry *geom) {
-+    long long kern_cyl = 0; int kern_head = 0, kern_sectors = 0;
-+    long long pt_cyl = 0; int pt_head = 0, pt_sectors = 0;
-+    partition_table bufp;
-+    char *buff, *buf_unaligned;
-+
-+    buf_unaligned = malloc(sizeof(partition_table) + 4095);
-+    buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) &
-+                     (~(4096-1)));
-+
-+    get_kernel_geometry(fd, &kern_cyl, &kern_head, &kern_sectors);
-+
-+    if (my_lseek (fd, 0*SECTOR_SIZE, SEEK_SET) < 0) {
-+        fprintf(stderr, "Unable to seek");
-+    }
-+
-+    if (read(fd, buff, SECTOR_SIZE) == SECTOR_SIZE) {
-+        memcpy(bufp.c.b, buff, SECTOR_SIZE);
-+        get_partition_table_geometry(&bufp, &pt_cyl, &pt_head, &pt_sectors);
-+    } else {
-+        fprintf(stderr, "Unable to read partition table: %s\n", strerror(errno));
-+    }
-+
-+    if (pt_head && pt_sectors) {
-+        int cyl_size;
-+
-+        geom->heads = pt_head;
-+        geom->sectors = pt_sectors;
-+        cyl_size = pt_head * pt_sectors;
-+        geom->cylinders = geom->total_sectors/cyl_size;
-+    } else {
-+        geom->heads = kern_head;
-+        geom->sectors = kern_sectors;
-+        geom->cylinders = kern_cyl;
-+    }
-+
-+    return;
-+}
-+#endif
-+
- /* Get the geometry of a drive DRIVE.  */
- void
- get_drive_geometry (struct geometry *geom, char **map, int drive)
-@@ -151,21 +300,16 @@ get_drive_geometry (struct geometry *geom, char **map, int drive)
- #if defined(__linux__)
-   /* Linux */
-   {
--    struct hd_geometry hdg;
-     unsigned long nr;
--    
--    if (ioctl (fd, HDIO_GETGEO, &hdg))
--      goto fail;
-     if (ioctl (fd, BLKGETSIZE, &nr))
-       goto fail;
-     
-     /* Got the geometry, so save it. */
--    geom->cylinders = hdg.cylinders;
--    geom->heads = hdg.heads;
--    geom->sectors = hdg.sectors;
-     geom->total_sectors = nr;
--    
-+    get_linux_geometry(fd, geom);
-+    if (!geom->heads && !geom->cylinders && !geom->sectors)
-+        goto fail;
-     goto success;
-   }
-@@ -403,10 +547,27 @@ get_dac960_disk_name (char *name, int controller, int drive)
- }
- static void
-+get_cciss_disk_name (char * name, int controller, int drive)
-+{
-+  sprintf (name, "/dev/cciss/c%dd%d", controller, drive);
-+}
-+
-+static void
-+get_cpqarray_disk_name (char * name, int controller, int drive)
-+{
-+  sprintf (name, "/dev/ida/c%dd%d", controller, drive);
-+}
-+static void
- get_ataraid_disk_name (char *name, int unit)
- {
-   sprintf (name, "/dev/ataraid/d%c", unit + '0');
- }
-+
-+static void
-+get_i2o_disk_name (char *name, int unit)
-+{
-+  sprintf (name, "/dev/i2o/hd%c", unit + 'a');
-+}
- #endif
- /* Check if DEVICE can be read. If an error occurs, return zero,
-@@ -490,27 +651,24 @@ check_device (const char *device)
- }
- /* Read mapping information from FP, and write it to MAP.  */
-+static void rdm_show_error (const char *map_file, int no, const char *msg)
-+{
-+  fprintf (stderr, "%s:%d: error: %s\n", map_file, no, msg);
-+}
-+
-+static void rdm_show_warning (const char *map_file,int no, const char *msg, ...)
-+{
-+  va_list ap;
-+  
-+  va_start (ap, msg);
-+  fprintf (stderr, "%s:%d: warning: ", map_file, no);
-+  vfprintf (stderr, msg, ap);
-+  va_end (ap);
-+}
-+
- static int
- read_device_map (FILE *fp, char **map, const char *map_file)
- {
--  auto void show_error (int no, const char *msg);
--  auto void show_warning (int no, const char *msg, ...);
--  
--  auto void show_error (int no, const char *msg)
--    {
--      fprintf (stderr, "%s:%d: error: %s\n", map_file, no, msg);
--    }
--  
--  auto void show_warning (int no, const char *msg, ...)
--    {
--      va_list ap;
--      
--      va_start (ap, msg);
--      fprintf (stderr, "%s:%d: warning: ", map_file, no);
--      vfprintf (stderr, msg, ap);
--      va_end (ap);
--    }
--  
-   /* If there is the device map file, use the data in it instead of
-      probing devices.  */
-   char buf[1024];             /* XXX */
-@@ -540,14 +698,14 @@ read_device_map (FILE *fp, char **map, const char *map_file)
-       
-       if (*ptr != '(')
-       {
--        show_error (line_number, "No open parenthesis found");
-+        rdm_show_error (map_file, line_number, "No open parenthesis found");
-         return 0;
-       }
-       
-       ptr++;
-       if ((*ptr != 'f' && *ptr != 'h') || *(ptr + 1) != 'd')
-       {
--        show_error (line_number, "Bad drive name");
-+        rdm_show_error (map_file, line_number, "Bad drive name");
-         return 0;
-       }
-       
-@@ -558,12 +716,12 @@ read_device_map (FILE *fp, char **map, const char *map_file)
-       drive = strtoul (ptr, &ptr, 10);
-       if (drive < 0)
-       {
--        show_error (line_number, "Bad device number");
-+        rdm_show_error (map_file, line_number, "Bad device number");
-         return 0;
-       }
-       else if (drive > 127)
-       {
--        show_warning (line_number,
-+        rdm_show_warning (map_file, line_number,
-                       "Ignoring %cd%d due to a BIOS limitation",
-                       is_floppy ? 'f' : 'h', drive);
-         continue;
-@@ -574,7 +732,7 @@ read_device_map (FILE *fp, char **map, const char *map_file)
-       
-       if (*ptr != ')')
-       {
--        show_error (line_number, "No close parenthesis found");
-+        rdm_show_error (map_file, line_number, "No close parenthesis found");
-         return 0;
-       }
-       
-@@ -585,7 +743,7 @@ read_device_map (FILE *fp, char **map, const char *map_file)
-       
-       if (! *ptr)
-       {
--        show_error (line_number, "No filename found");
-+        rdm_show_error (map_file, line_number, "No filename found");
-         return 0;
-       }
-       
-@@ -598,7 +756,7 @@ read_device_map (FILE *fp, char **map, const char *map_file)
-       /* Multiple entries for a given drive is not allowed.  */
-       if (map[drive])
-       {
--        show_error (line_number, "Duplicated entry found");
-+        rdm_show_error (map_file, line_number, "Duplicated entry found");
-         return 0;
-       }
-       
-@@ -782,7 +940,7 @@ init_device_map (char ***map, const char *map_file, int floppy_disks)
-     
-     for (controller = 0; controller < 8; controller++)
-       {
--      for (drive = 0; drive < 15; drive++)
-+      for (drive = 0; drive < 32; drive++)
-         {
-           char name[24];
-           
-@@ -801,6 +959,90 @@ init_device_map (char ***map, const char *map_file, int floppy_disks)
-         }
-       }
-   }
-+
-+  /* I2O disks.  */
-+  for (i = 0; i < 8; i++)
-+    {
-+      char name[16];
-+      
-+      get_i2o_disk_name (name, i);
-+      if (check_device (name))
-+      {
-+        (*map)[num_hd + 0x80] = strdup (name);
-+        assert ((*map)[num_hd + 0x80]);
-+        
-+        /* If the device map file is opened, write the map.  */
-+        if (fp)
-+          fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
-+        
-+        num_hd++;
-+      }
-+    }
-+  
-+#endif /* __linux__ */
-+
-+#ifdef __linux__
-+  /* This is for cciss - we have
-+     /dev/cciss/c<controller>d<logical drive>p<partition>.
-+     
-+     cciss driver currently supports up to 8 controllers, 16 logical
-+     drives, and 7 partitions.  */
-+  {
-+    int controller, drive;
-+    
-+    for (controller = 0; controller < 8; controller++)
-+      {
-+      for (drive = 0; drive < 16; drive++)
-+        {
-+          char name[24];
-+          
-+          get_cciss_disk_name (name, controller, drive);
-+          if (check_device (name))
-+            {
-+              (*map)[num_hd + 0x80] = strdup (name);
-+              assert ((*map)[num_hd + 0x80]);
-+              
-+              /* If the device map file is opened, write the map.  */
-+              if (fp)
-+                fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
-+              
-+              num_hd++;
-+            }
-+        }
-+      }
-+  }
-+#endif /* __linux__ */
-+
-+#ifdef __linux__
-+  /* This is for cpqarray - we have
-+     /dev/ida/c<controller>d<logical drive>p<partition>.
-+     
-+     cpqarray driver currently supports up to 8 controllers, 16 logical
-+     drives, and 15 partitions.  */
-+  {
-+    int controller, drive;
-+    
-+    for (controller = 0; controller < 8; controller++)
-+      {
-+      for (drive = 0; drive < 15; drive++)
-+        {
-+          char name[24];
-+          
-+          get_cpqarray_disk_name (name, controller, drive);
-+          if (check_device (name))
-+            {
-+              (*map)[num_hd + 0x80] = strdup (name);
-+              assert ((*map)[num_hd + 0x80]);
-+              
-+              /* If the device map file is opened, write the map.  */
-+              if (fp)
-+                fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
-+              
-+              num_hd++;
-+            }
-+        }
-+      }
-+  }
- #endif /* __linux__ */
-   
-   /* OK, close the device map file if opened.  */
-@@ -844,6 +1086,7 @@ write_to_partition (char **map, int drive, int partition,
- {
-   char dev[PATH_MAX]; /* XXX */
-   int fd;
-+  off_t offset = (off_t) sector * (off_t) SECTOR_SIZE;
-   
-   if ((partition & 0x00FF00) != 0x00FF00)
-     {
-@@ -861,44 +1104,35 @@ write_to_partition (char **map, int drive, int partition,
-       if (strcmp (dev + strlen(dev) - 5, "/disc") == 0)
-       strcpy (dev + strlen(dev) - 5, "/part");
-     }
--  sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1);
-+
-+  sprintf (dev + strlen(dev), "%s%d", 
-+         /* Compaq smart and others */
-+         (strncmp(dev, "/dev/ida/", 9) == 0 ||
-+          strncmp(dev, "/dev/ataraid/", 13) == 0 ||
-+          strncmp(dev, "/dev/mapper/", 12) == 0 || 
-+          strncmp(dev, "/dev/md", 7) == 0 ||
-+          strncmp(dev, "/dev/cciss/", 11) == 0 ||
-+          strncmp(dev, "/dev/rd/", 8) == 0) ? "p" : "",
-+         ((partition >> 16) & 0xFF) + 1);
-   
-   /* Open the partition.  */
-   fd = open (dev, O_RDWR);
-   if (fd < 0)
-     {
-+      /* No partition file, pass thru and not worry about
-+       * cache inconsistency. */
-+      if (errno == ENOENT)
-+        return -1;
-       errnum = ERR_NO_PART;
-       return 0;
-     }
--  
--#if defined(__linux__) && (!defined(__GLIBC__) || \
--        ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))))
--  /* Maybe libc doesn't have large file support.  */
--  {
--    loff_t offset, result;
--    static int _llseek (uint filedes, ulong hi, ulong lo,
--                        loff_t *res, uint wh);
--    _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo,
--               loff_t *, res, uint, wh);
--
--    offset = (loff_t) sector * (loff_t) SECTOR_SIZE;
--    if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET))
--      {
--      errnum = ERR_DEV_VALUES;
--      return 0;
--      }
--  }
--#else
--  {
--    off_t offset = (off_t) sector * (off_t) SECTOR_SIZE;
--    if (lseek (fd, offset, SEEK_SET) != offset)
--      {
--      errnum = ERR_DEV_VALUES;
--      return 0;
--      }
--  }
--#endif
-+
-+  if (my_lseek(fd, offset, SEEK_SET) != offset)
-+    {
-+      errnum = ERR_DEV_VALUES;
-+      return 0;
-+    }
-   
-   if (write (fd, buf, size * SECTOR_SIZE) != (size * SECTOR_SIZE))
-     {
-diff --git a/makediff b/makediff
-new file mode 100755
-index 0000000..a82b448
---- /dev/null
-+++ b/makediff
-@@ -0,0 +1,21 @@
-+#!/bin/bash
-+(
-+cat << EOF
-+From: Peter Jones <pjones@redhat.com>" 
-+Date: $(date)
-+Subject: [PATCH] Changes from grub-0.97 to master
-+
-+This patch is a bundle of the changes between grub-0.97 and master.
-+It can be reginerated from the git repository at:
-+
-+git://github.com/vathpela/grub-fedora.git
-+
-+Using the command:
-+
-+git diff grub-0.97 master
-+
-+EOF
-+git diff grub-0.97 master | diffstat -p1
-+echo
-+git diff grub-0.97 master
-+) | cat
-diff --git a/netboot/.gitignore b/netboot/.gitignore
-new file mode 100644
-index 0000000..5d89f6d
---- /dev/null
-+++ b/netboot/.gitignore
-@@ -0,0 +1,2 @@
-+Makefile.in
-+.deps
-diff --git a/netboot/Makefile.in b/netboot/Makefile.in
-deleted file mode 100644
-index 75ac299..0000000
---- a/netboot/Makefile.in
-+++ /dev/null
-@@ -1,1091 +0,0 @@
--# Makefile.in generated by automake 1.9.4 from Makefile.am.
--# @configure_input@
--
--# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
--# 2003, 2004  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@
--
--SOURCES = $(libdrivers_a_SOURCES) $(EXTRA_libdrivers_a_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 = :
--build_triplet = @build@
--host_triplet = @host@
--subdir = netboot
--DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
--ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
--am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
--      $(top_srcdir)/configure.ac
--am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
--      $(ACLOCAL_M4)
--mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
--CONFIG_HEADER = $(top_builddir)/config.h
--CONFIG_CLEAN_FILES =
--LIBRARIES = $(noinst_LIBRARIES)
--AR = ar
--ARFLAGS = cru
--libdrivers_a_AR = $(AR) $(ARFLAGS)
--am_libdrivers_a_OBJECTS = libdrivers_a-config.$(OBJEXT) \
--      libdrivers_a-fsys_tftp.$(OBJEXT) libdrivers_a-main.$(OBJEXT) \
--      libdrivers_a-misc.$(OBJEXT) libdrivers_a-pci.$(OBJEXT) \
--      libdrivers_a-timer.$(OBJEXT)
--libdrivers_a_OBJECTS = $(am_libdrivers_a_OBJECTS)
--DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
--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 = $(libdrivers_a_SOURCES) $(EXTRA_libdrivers_a_SOURCES)
--DIST_SOURCES = $(libdrivers_a_SOURCES) $(EXTRA_libdrivers_a_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@
--BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@
--BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@
--CC = @CC@
--CCAS = @CCAS@
--CCASFLAGS = @CCASFLAGS@
--CCDEPMODE = @CCDEPMODE@
--CFLAGS = @CFLAGS@
--CPP = @CPP@
--CPPFLAGS = @CPPFLAGS@
--CYGPATH_W = @CYGPATH_W@
--DEFS = @DEFS@
--DEPDIR = @DEPDIR@
--DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@
--DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@
--ECHO_C = @ECHO_C@
--ECHO_N = @ECHO_N@
--ECHO_T = @ECHO_T@
--EGREP = @EGREP@
--EXEEXT = @EXEEXT@
--FSYS_CFLAGS = @FSYS_CFLAGS@
--GRUB_CFLAGS = @GRUB_CFLAGS@
--GRUB_LIBS = @GRUB_LIBS@
--HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@
--HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@
--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@
--MAINT = @MAINT@
--MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
--MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
--MAKEINFO = @MAKEINFO@
--NETBOOT_DRIVERS = @NETBOOT_DRIVERS@
--NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@
--NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@
--NET_CFLAGS = @NET_CFLAGS@
--NET_EXTRAFLAGS = @NET_EXTRAFLAGS@
--OBJCOPY = @OBJCOPY@
--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@
--RANLIB = @RANLIB@
--SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@
--SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@
--SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@
--SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@
--SET_MAKE = @SET_MAKE@
--SHELL = @SHELL@
--STAGE1_CFLAGS = @STAGE1_CFLAGS@
--STAGE2_CFLAGS = @STAGE2_CFLAGS@
--STRIP = @STRIP@
--VERSION = @VERSION@
--ac_ct_CC = @ac_ct_CC@
--ac_ct_OBJCOPY = @ac_ct_OBJCOPY@
--ac_ct_RANLIB = @ac_ct_RANLIB@
--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 = @build@
--build_alias = @build_alias@
--build_cpu = @build_cpu@
--build_os = @build_os@
--build_vendor = @build_vendor@
--datadir = @datadir@
--exec_prefix = @exec_prefix@
--host = @host@
--host_alias = @host_alias@
--host_cpu = @host_cpu@
--host_os = @host_os@
--host_vendor = @host_vendor@
--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@
--
--# For <shared.h> and <stage1.h>.
--INCLUDES = -I$(top_srcdir)/stage2 -I$(top_srcdir)/stage1
--@NETBOOT_SUPPORT_FALSE@LIBDRIVERS = 
--
--# Don't build the netboot support by default.
--@NETBOOT_SUPPORT_TRUE@LIBDRIVERS = libdrivers.a
--noinst_LIBRARIES = $(LIBDRIVERS)
--libdrivers_a_SOURCES = cards.h config.c etherboot.h \
--      fsys_tftp.c linux-asm-io.h linux-asm-string.h \
--      main.c misc.c nic.h osdep.h pci.c pci.h timer.c timer.h
--
--EXTRA_libdrivers_a_SOURCES = 3c509.c 3c509.h 3c595.c 3c595.h 3c90x.c \
--      cs89x0.c cs89x0.h davicom.c depca.c eepro.c eepro100.c \
--      epic100.c epic100.h fa311.c i82586.c lance.c natsemi.c \
--      ni5010.c ns8390.c ns8390.h otulip.c otulip.h rtl8139.c \
--      sis900.c sis900.h sk_g16.c sk_g16.h smc9000.c smc9000.h \
--      tiara.c tlan.c tulip.c via-rhine.c w89c840.c
--
--libdrivers_a_CFLAGS = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--      -DFSYS_TFTP=1 $(NET_CFLAGS) $(NET_EXTRAFLAGS)
--
--# Filled by configure.
--libdrivers_a_LIBADD = @NETBOOT_DRIVERS@
--libdrivers_a_DEPENDENCIES = $(libdrivers_a_LIBADD)
--EXTRA_DIST = README.netboot 3c90x.txt cs89x0.txt sis900.txt tulip.txt
--
--# These below are several special rules for the device drivers.
--# We cannot use a simple rule for them...
--
--# What objects are derived from a driver?
--3c509_drivers = 3c509.o 3c529.o
--3c595_drivers = 3c595.o
--3c90x_drivers = 3c90x.o
--cs89x0_drivers = cs89x0.o
--davicom_drivers = davicom.o
--depca_drivers = depca.o
--eepro_drivers = eepro.o
--eepro100_drivers = eepro100.o
--epic100_drivers = epic100.o
--#fa311_drivers = fa311.o
--i82586_drivers = 3c507.o exos205.o ni5210.o
--lance_drivers = lance.o ne2100.o ni6510.o
--natsemi_drivers = natsemi.o
--ni5010_drivers = ni5010.o
--ns8390_drivers = 3c503.o ne.o ns8390.o wd.o
--otulip_drivers = otulip.o
--rtl8139_drivers = rtl8139.o
--sis900_drivers = sis900.o
--sk_g16_drivers = sk_g16.o
--smc9000_drivers = smc9000.o
--tiara_drivers = tiara.o
--#tlan_drivers = tlan.o
--tulip_drivers = tulip.o
--via_rhine_drivers = via_rhine.o
--w89c840_drivers = w89c840.o
--
--# Per-object flags.
--3c509_o_CFLAGS = -DINCLUDE_3C509=1
--3c529_o_CFLAGS = -DINCLUDE_3C529=1
--3c595_o_CFLAGS = -DINCLUDE_3C595=1
--3c90x_o_CFLAGS = -DINCLUDE_3C90X=1
--cs89x0_o_CFLAGS = -DINCLUDE_CS89X0=1
--davicom_o_CFLAGS = -DINCLUDE_DAVICOM=1
--depca_o_CFLAGS = -DINCLUDE_DEPCA=1
--eepro_o_CFLAGS = -DINCLUDE_EEPRO=1
--eepro100_o_CFLAGS = -DINCLUDE_EEPRO100=1
--epic100_o_CFLAGS = -DINCLUDE_EPIC100=1
--#fa311_o_CFLAGS = -DINCLUDE_FA311=1
--3c507_o_CFLAGS = -DINCLUDE_3C507=1
--exos205_o_CFLAGS = -DINCLUDE_EXOS205=1
--ni5210_o_CFLAGS = -DINCLUDE_NI5210=1
--lance_o_CFLAGS = -DINCLUDE_LANCE=1
--ne2100_o_CFLAGS = -DINCLUDE_NE2100=1
--ni6510_o_CFLAGS = -DINCLUDE_NI6510=1
--natsemi_o_CFLAGS = -DINCLUDE_NATSEMI=1
--ni5010_o_CFLAGS = -DINCLUDE_NI5010=1
--3c503_o_CFLAGS = -DINCLUDE_3C503=1
--ne_o_CFLAGS = -DINCLUDE_NE=1
--ns8390_o_CFLAGS = -DINCLUDE_NS8390=1
--wd_o_CFLAGS = -DINCLUDE_WD=1
--otulip_o_CFLAGS = -DINCLUDE_OTULIP=1
--rtl8139_o_CFLAGS = -DINCLUDE_RTL8139=1
--sis900_o_CFLAGS = -DINCLUDE_SIS900=1
--sk_g16_o_CFLAGS = -DINCLUDE_SK_G16=1
--smc9000_o_CFLAGS = -DINCLUDE_SMC9000=1
--tiara_o_CFLAGS = -DINCLUDE_TIARA=1
--#tlan_o_CFLAGS = -DINCLUDE_TLAN=1
--tulip_o_CFLAGS = -DINCLUDE_TULIP=1
--via_rhine_o_CFLAGS = -DINCLUDE_VIA_RHINE=1
--w89c840_o_CFLAGS = -DINCLUDE_W89C840=1
--all: all-am
--
--.SUFFIXES:
--.SUFFIXES: .c .o .obj
--$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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  netboot/Makefile'; \
--      cd $(top_srcdir) && \
--        $(AUTOMAKE) --gnu  netboot/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
--      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
--$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
--      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
--
--clean-noinstLIBRARIES:
--      -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
--libdrivers.a: $(libdrivers_a_OBJECTS) $(libdrivers_a_DEPENDENCIES) 
--      -rm -f libdrivers.a
--      $(libdrivers_a_AR) libdrivers.a $(libdrivers_a_OBJECTS) $(libdrivers_a_LIBADD)
--      $(RANLIB) libdrivers.a
--
--mostlyclean-compile:
--      -rm -f *.$(OBJEXT)
--
--distclean-compile:
--      -rm -f *.tab.c
--
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-3c509.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-3c595.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-3c90x.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-config.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-cs89x0.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-davicom.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-depca.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-eepro.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-eepro100.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-epic100.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-fa311.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-fsys_tftp.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-i82586.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-lance.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-main.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-misc.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-natsemi.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-ni5010.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-ns8390.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-otulip.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-pci.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-rtl8139.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-sis900.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-sk_g16.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-smc9000.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-tiara.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-timer.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-tlan.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-tulip.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-via-rhine.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-w89c840.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) '$<'`
--
--libdrivers_a-config.o: config.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-config.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-config.Tpo" -c -o libdrivers_a-config.o `test -f 'config.c' || echo '$(srcdir)/'`config.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-config.Tpo" "$(DEPDIR)/libdrivers_a-config.Po"; else rm -f "$(DEPDIR)/libdrivers_a-config.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='config.c' object='libdrivers_a-config.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-config.o `test -f 'config.c' || echo '$(srcdir)/'`config.c
--
--libdrivers_a-config.obj: config.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-config.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-config.Tpo" -c -o libdrivers_a-config.obj `if test -f 'config.c'; then $(CYGPATH_W) 'config.c'; else $(CYGPATH_W) '$(srcdir)/config.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-config.Tpo" "$(DEPDIR)/libdrivers_a-config.Po"; else rm -f "$(DEPDIR)/libdrivers_a-config.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='config.c' object='libdrivers_a-config.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-config.obj `if test -f 'config.c'; then $(CYGPATH_W) 'config.c'; else $(CYGPATH_W) '$(srcdir)/config.c'; fi`
--
--libdrivers_a-fsys_tftp.o: fsys_tftp.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-fsys_tftp.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo" -c -o libdrivers_a-fsys_tftp.o `test -f 'fsys_tftp.c' || echo '$(srcdir)/'`fsys_tftp.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo" "$(DEPDIR)/libdrivers_a-fsys_tftp.Po"; else rm -f "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_tftp.c' object='libdrivers_a-fsys_tftp.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-fsys_tftp.o `test -f 'fsys_tftp.c' || echo '$(srcdir)/'`fsys_tftp.c
--
--libdrivers_a-fsys_tftp.obj: fsys_tftp.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-fsys_tftp.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo" -c -o libdrivers_a-fsys_tftp.obj `if test -f 'fsys_tftp.c'; then $(CYGPATH_W) 'fsys_tftp.c'; else $(CYGPATH_W) '$(srcdir)/fsys_tftp.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo" "$(DEPDIR)/libdrivers_a-fsys_tftp.Po"; else rm -f "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_tftp.c' object='libdrivers_a-fsys_tftp.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-fsys_tftp.obj `if test -f 'fsys_tftp.c'; then $(CYGPATH_W) 'fsys_tftp.c'; else $(CYGPATH_W) '$(srcdir)/fsys_tftp.c'; fi`
--
--libdrivers_a-main.o: main.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-main.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-main.Tpo" -c -o libdrivers_a-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-main.Tpo" "$(DEPDIR)/libdrivers_a-main.Po"; else rm -f "$(DEPDIR)/libdrivers_a-main.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='main.c' object='libdrivers_a-main.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c
--
--libdrivers_a-main.obj: main.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-main.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-main.Tpo" -c -o libdrivers_a-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-main.Tpo" "$(DEPDIR)/libdrivers_a-main.Po"; else rm -f "$(DEPDIR)/libdrivers_a-main.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='main.c' object='libdrivers_a-main.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`
--
--libdrivers_a-misc.o: misc.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-misc.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-misc.Tpo" -c -o libdrivers_a-misc.o `test -f 'misc.c' || echo '$(srcdir)/'`misc.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-misc.Tpo" "$(DEPDIR)/libdrivers_a-misc.Po"; else rm -f "$(DEPDIR)/libdrivers_a-misc.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='misc.c' object='libdrivers_a-misc.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-misc.o `test -f 'misc.c' || echo '$(srcdir)/'`misc.c
--
--libdrivers_a-misc.obj: misc.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-misc.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-misc.Tpo" -c -o libdrivers_a-misc.obj `if test -f 'misc.c'; then $(CYGPATH_W) 'misc.c'; else $(CYGPATH_W) '$(srcdir)/misc.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-misc.Tpo" "$(DEPDIR)/libdrivers_a-misc.Po"; else rm -f "$(DEPDIR)/libdrivers_a-misc.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='misc.c' object='libdrivers_a-misc.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-misc.obj `if test -f 'misc.c'; then $(CYGPATH_W) 'misc.c'; else $(CYGPATH_W) '$(srcdir)/misc.c'; fi`
--
--libdrivers_a-pci.o: pci.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-pci.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-pci.Tpo" -c -o libdrivers_a-pci.o `test -f 'pci.c' || echo '$(srcdir)/'`pci.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-pci.Tpo" "$(DEPDIR)/libdrivers_a-pci.Po"; else rm -f "$(DEPDIR)/libdrivers_a-pci.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='pci.c' object='libdrivers_a-pci.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-pci.o `test -f 'pci.c' || echo '$(srcdir)/'`pci.c
--
--libdrivers_a-pci.obj: pci.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-pci.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-pci.Tpo" -c -o libdrivers_a-pci.obj `if test -f 'pci.c'; then $(CYGPATH_W) 'pci.c'; else $(CYGPATH_W) '$(srcdir)/pci.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-pci.Tpo" "$(DEPDIR)/libdrivers_a-pci.Po"; else rm -f "$(DEPDIR)/libdrivers_a-pci.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='pci.c' object='libdrivers_a-pci.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-pci.obj `if test -f 'pci.c'; then $(CYGPATH_W) 'pci.c'; else $(CYGPATH_W) '$(srcdir)/pci.c'; fi`
--
--libdrivers_a-timer.o: timer.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-timer.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-timer.Tpo" -c -o libdrivers_a-timer.o `test -f 'timer.c' || echo '$(srcdir)/'`timer.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-timer.Tpo" "$(DEPDIR)/libdrivers_a-timer.Po"; else rm -f "$(DEPDIR)/libdrivers_a-timer.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='timer.c' object='libdrivers_a-timer.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-timer.o `test -f 'timer.c' || echo '$(srcdir)/'`timer.c
--
--libdrivers_a-timer.obj: timer.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-timer.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-timer.Tpo" -c -o libdrivers_a-timer.obj `if test -f 'timer.c'; then $(CYGPATH_W) 'timer.c'; else $(CYGPATH_W) '$(srcdir)/timer.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-timer.Tpo" "$(DEPDIR)/libdrivers_a-timer.Po"; else rm -f "$(DEPDIR)/libdrivers_a-timer.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='timer.c' object='libdrivers_a-timer.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-timer.obj `if test -f 'timer.c'; then $(CYGPATH_W) 'timer.c'; else $(CYGPATH_W) '$(srcdir)/timer.c'; fi`
--
--libdrivers_a-3c509.o: 3c509.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c509.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c509.Tpo" -c -o libdrivers_a-3c509.o `test -f '3c509.c' || echo '$(srcdir)/'`3c509.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-3c509.Tpo" "$(DEPDIR)/libdrivers_a-3c509.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c509.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='3c509.c' object='libdrivers_a-3c509.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c509.o `test -f '3c509.c' || echo '$(srcdir)/'`3c509.c
--
--libdrivers_a-3c509.obj: 3c509.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c509.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c509.Tpo" -c -o libdrivers_a-3c509.obj `if test -f '3c509.c'; then $(CYGPATH_W) '3c509.c'; else $(CYGPATH_W) '$(srcdir)/3c509.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-3c509.Tpo" "$(DEPDIR)/libdrivers_a-3c509.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c509.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='3c509.c' object='libdrivers_a-3c509.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c509.obj `if test -f '3c509.c'; then $(CYGPATH_W) '3c509.c'; else $(CYGPATH_W) '$(srcdir)/3c509.c'; fi`
--
--libdrivers_a-3c595.o: 3c595.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c595.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c595.Tpo" -c -o libdrivers_a-3c595.o `test -f '3c595.c' || echo '$(srcdir)/'`3c595.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-3c595.Tpo" "$(DEPDIR)/libdrivers_a-3c595.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c595.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='3c595.c' object='libdrivers_a-3c595.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c595.o `test -f '3c595.c' || echo '$(srcdir)/'`3c595.c
--
--libdrivers_a-3c595.obj: 3c595.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c595.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c595.Tpo" -c -o libdrivers_a-3c595.obj `if test -f '3c595.c'; then $(CYGPATH_W) '3c595.c'; else $(CYGPATH_W) '$(srcdir)/3c595.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-3c595.Tpo" "$(DEPDIR)/libdrivers_a-3c595.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c595.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='3c595.c' object='libdrivers_a-3c595.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c595.obj `if test -f '3c595.c'; then $(CYGPATH_W) '3c595.c'; else $(CYGPATH_W) '$(srcdir)/3c595.c'; fi`
--
--libdrivers_a-3c90x.o: 3c90x.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c90x.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c90x.Tpo" -c -o libdrivers_a-3c90x.o `test -f '3c90x.c' || echo '$(srcdir)/'`3c90x.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-3c90x.Tpo" "$(DEPDIR)/libdrivers_a-3c90x.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c90x.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='3c90x.c' object='libdrivers_a-3c90x.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c90x.o `test -f '3c90x.c' || echo '$(srcdir)/'`3c90x.c
--
--libdrivers_a-3c90x.obj: 3c90x.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c90x.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c90x.Tpo" -c -o libdrivers_a-3c90x.obj `if test -f '3c90x.c'; then $(CYGPATH_W) '3c90x.c'; else $(CYGPATH_W) '$(srcdir)/3c90x.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-3c90x.Tpo" "$(DEPDIR)/libdrivers_a-3c90x.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c90x.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='3c90x.c' object='libdrivers_a-3c90x.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c90x.obj `if test -f '3c90x.c'; then $(CYGPATH_W) '3c90x.c'; else $(CYGPATH_W) '$(srcdir)/3c90x.c'; fi`
--
--libdrivers_a-cs89x0.o: cs89x0.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-cs89x0.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-cs89x0.Tpo" -c -o libdrivers_a-cs89x0.o `test -f 'cs89x0.c' || echo '$(srcdir)/'`cs89x0.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-cs89x0.Tpo" "$(DEPDIR)/libdrivers_a-cs89x0.Po"; else rm -f "$(DEPDIR)/libdrivers_a-cs89x0.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='cs89x0.c' object='libdrivers_a-cs89x0.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-cs89x0.o `test -f 'cs89x0.c' || echo '$(srcdir)/'`cs89x0.c
--
--libdrivers_a-cs89x0.obj: cs89x0.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-cs89x0.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-cs89x0.Tpo" -c -o libdrivers_a-cs89x0.obj `if test -f 'cs89x0.c'; then $(CYGPATH_W) 'cs89x0.c'; else $(CYGPATH_W) '$(srcdir)/cs89x0.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-cs89x0.Tpo" "$(DEPDIR)/libdrivers_a-cs89x0.Po"; else rm -f "$(DEPDIR)/libdrivers_a-cs89x0.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='cs89x0.c' object='libdrivers_a-cs89x0.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-cs89x0.obj `if test -f 'cs89x0.c'; then $(CYGPATH_W) 'cs89x0.c'; else $(CYGPATH_W) '$(srcdir)/cs89x0.c'; fi`
--
--libdrivers_a-davicom.o: davicom.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-davicom.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-davicom.Tpo" -c -o libdrivers_a-davicom.o `test -f 'davicom.c' || echo '$(srcdir)/'`davicom.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-davicom.Tpo" "$(DEPDIR)/libdrivers_a-davicom.Po"; else rm -f "$(DEPDIR)/libdrivers_a-davicom.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='davicom.c' object='libdrivers_a-davicom.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-davicom.o `test -f 'davicom.c' || echo '$(srcdir)/'`davicom.c
--
--libdrivers_a-davicom.obj: davicom.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-davicom.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-davicom.Tpo" -c -o libdrivers_a-davicom.obj `if test -f 'davicom.c'; then $(CYGPATH_W) 'davicom.c'; else $(CYGPATH_W) '$(srcdir)/davicom.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-davicom.Tpo" "$(DEPDIR)/libdrivers_a-davicom.Po"; else rm -f "$(DEPDIR)/libdrivers_a-davicom.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='davicom.c' object='libdrivers_a-davicom.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-davicom.obj `if test -f 'davicom.c'; then $(CYGPATH_W) 'davicom.c'; else $(CYGPATH_W) '$(srcdir)/davicom.c'; fi`
--
--libdrivers_a-depca.o: depca.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-depca.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-depca.Tpo" -c -o libdrivers_a-depca.o `test -f 'depca.c' || echo '$(srcdir)/'`depca.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-depca.Tpo" "$(DEPDIR)/libdrivers_a-depca.Po"; else rm -f "$(DEPDIR)/libdrivers_a-depca.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='depca.c' object='libdrivers_a-depca.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-depca.o `test -f 'depca.c' || echo '$(srcdir)/'`depca.c
--
--libdrivers_a-depca.obj: depca.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-depca.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-depca.Tpo" -c -o libdrivers_a-depca.obj `if test -f 'depca.c'; then $(CYGPATH_W) 'depca.c'; else $(CYGPATH_W) '$(srcdir)/depca.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-depca.Tpo" "$(DEPDIR)/libdrivers_a-depca.Po"; else rm -f "$(DEPDIR)/libdrivers_a-depca.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='depca.c' object='libdrivers_a-depca.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-depca.obj `if test -f 'depca.c'; then $(CYGPATH_W) 'depca.c'; else $(CYGPATH_W) '$(srcdir)/depca.c'; fi`
--
--libdrivers_a-eepro.o: eepro.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-eepro.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-eepro.Tpo" -c -o libdrivers_a-eepro.o `test -f 'eepro.c' || echo '$(srcdir)/'`eepro.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-eepro.Tpo" "$(DEPDIR)/libdrivers_a-eepro.Po"; else rm -f "$(DEPDIR)/libdrivers_a-eepro.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='eepro.c' object='libdrivers_a-eepro.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-eepro.o `test -f 'eepro.c' || echo '$(srcdir)/'`eepro.c
--
--libdrivers_a-eepro.obj: eepro.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-eepro.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-eepro.Tpo" -c -o libdrivers_a-eepro.obj `if test -f 'eepro.c'; then $(CYGPATH_W) 'eepro.c'; else $(CYGPATH_W) '$(srcdir)/eepro.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-eepro.Tpo" "$(DEPDIR)/libdrivers_a-eepro.Po"; else rm -f "$(DEPDIR)/libdrivers_a-eepro.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='eepro.c' object='libdrivers_a-eepro.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-eepro.obj `if test -f 'eepro.c'; then $(CYGPATH_W) 'eepro.c'; else $(CYGPATH_W) '$(srcdir)/eepro.c'; fi`
--
--libdrivers_a-eepro100.o: eepro100.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-eepro100.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-eepro100.Tpo" -c -o libdrivers_a-eepro100.o `test -f 'eepro100.c' || echo '$(srcdir)/'`eepro100.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-eepro100.Tpo" "$(DEPDIR)/libdrivers_a-eepro100.Po"; else rm -f "$(DEPDIR)/libdrivers_a-eepro100.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='eepro100.c' object='libdrivers_a-eepro100.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-eepro100.o `test -f 'eepro100.c' || echo '$(srcdir)/'`eepro100.c
--
--libdrivers_a-eepro100.obj: eepro100.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-eepro100.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-eepro100.Tpo" -c -o libdrivers_a-eepro100.obj `if test -f 'eepro100.c'; then $(CYGPATH_W) 'eepro100.c'; else $(CYGPATH_W) '$(srcdir)/eepro100.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-eepro100.Tpo" "$(DEPDIR)/libdrivers_a-eepro100.Po"; else rm -f "$(DEPDIR)/libdrivers_a-eepro100.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='eepro100.c' object='libdrivers_a-eepro100.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-eepro100.obj `if test -f 'eepro100.c'; then $(CYGPATH_W) 'eepro100.c'; else $(CYGPATH_W) '$(srcdir)/eepro100.c'; fi`
--
--libdrivers_a-epic100.o: epic100.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-epic100.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-epic100.Tpo" -c -o libdrivers_a-epic100.o `test -f 'epic100.c' || echo '$(srcdir)/'`epic100.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-epic100.Tpo" "$(DEPDIR)/libdrivers_a-epic100.Po"; else rm -f "$(DEPDIR)/libdrivers_a-epic100.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='epic100.c' object='libdrivers_a-epic100.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-epic100.o `test -f 'epic100.c' || echo '$(srcdir)/'`epic100.c
--
--libdrivers_a-epic100.obj: epic100.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-epic100.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-epic100.Tpo" -c -o libdrivers_a-epic100.obj `if test -f 'epic100.c'; then $(CYGPATH_W) 'epic100.c'; else $(CYGPATH_W) '$(srcdir)/epic100.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-epic100.Tpo" "$(DEPDIR)/libdrivers_a-epic100.Po"; else rm -f "$(DEPDIR)/libdrivers_a-epic100.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='epic100.c' object='libdrivers_a-epic100.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-epic100.obj `if test -f 'epic100.c'; then $(CYGPATH_W) 'epic100.c'; else $(CYGPATH_W) '$(srcdir)/epic100.c'; fi`
--
--libdrivers_a-fa311.o: fa311.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-fa311.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-fa311.Tpo" -c -o libdrivers_a-fa311.o `test -f 'fa311.c' || echo '$(srcdir)/'`fa311.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-fa311.Tpo" "$(DEPDIR)/libdrivers_a-fa311.Po"; else rm -f "$(DEPDIR)/libdrivers_a-fa311.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fa311.c' object='libdrivers_a-fa311.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-fa311.o `test -f 'fa311.c' || echo '$(srcdir)/'`fa311.c
--
--libdrivers_a-fa311.obj: fa311.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-fa311.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-fa311.Tpo" -c -o libdrivers_a-fa311.obj `if test -f 'fa311.c'; then $(CYGPATH_W) 'fa311.c'; else $(CYGPATH_W) '$(srcdir)/fa311.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-fa311.Tpo" "$(DEPDIR)/libdrivers_a-fa311.Po"; else rm -f "$(DEPDIR)/libdrivers_a-fa311.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fa311.c' object='libdrivers_a-fa311.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-fa311.obj `if test -f 'fa311.c'; then $(CYGPATH_W) 'fa311.c'; else $(CYGPATH_W) '$(srcdir)/fa311.c'; fi`
--
--libdrivers_a-i82586.o: i82586.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-i82586.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-i82586.Tpo" -c -o libdrivers_a-i82586.o `test -f 'i82586.c' || echo '$(srcdir)/'`i82586.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-i82586.Tpo" "$(DEPDIR)/libdrivers_a-i82586.Po"; else rm -f "$(DEPDIR)/libdrivers_a-i82586.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='i82586.c' object='libdrivers_a-i82586.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-i82586.o `test -f 'i82586.c' || echo '$(srcdir)/'`i82586.c
--
--libdrivers_a-i82586.obj: i82586.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-i82586.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-i82586.Tpo" -c -o libdrivers_a-i82586.obj `if test -f 'i82586.c'; then $(CYGPATH_W) 'i82586.c'; else $(CYGPATH_W) '$(srcdir)/i82586.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-i82586.Tpo" "$(DEPDIR)/libdrivers_a-i82586.Po"; else rm -f "$(DEPDIR)/libdrivers_a-i82586.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='i82586.c' object='libdrivers_a-i82586.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-i82586.obj `if test -f 'i82586.c'; then $(CYGPATH_W) 'i82586.c'; else $(CYGPATH_W) '$(srcdir)/i82586.c'; fi`
--
--libdrivers_a-lance.o: lance.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-lance.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-lance.Tpo" -c -o libdrivers_a-lance.o `test -f 'lance.c' || echo '$(srcdir)/'`lance.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-lance.Tpo" "$(DEPDIR)/libdrivers_a-lance.Po"; else rm -f "$(DEPDIR)/libdrivers_a-lance.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='lance.c' object='libdrivers_a-lance.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-lance.o `test -f 'lance.c' || echo '$(srcdir)/'`lance.c
--
--libdrivers_a-lance.obj: lance.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-lance.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-lance.Tpo" -c -o libdrivers_a-lance.obj `if test -f 'lance.c'; then $(CYGPATH_W) 'lance.c'; else $(CYGPATH_W) '$(srcdir)/lance.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-lance.Tpo" "$(DEPDIR)/libdrivers_a-lance.Po"; else rm -f "$(DEPDIR)/libdrivers_a-lance.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='lance.c' object='libdrivers_a-lance.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-lance.obj `if test -f 'lance.c'; then $(CYGPATH_W) 'lance.c'; else $(CYGPATH_W) '$(srcdir)/lance.c'; fi`
--
--libdrivers_a-natsemi.o: natsemi.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-natsemi.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-natsemi.Tpo" -c -o libdrivers_a-natsemi.o `test -f 'natsemi.c' || echo '$(srcdir)/'`natsemi.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-natsemi.Tpo" "$(DEPDIR)/libdrivers_a-natsemi.Po"; else rm -f "$(DEPDIR)/libdrivers_a-natsemi.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='natsemi.c' object='libdrivers_a-natsemi.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-natsemi.o `test -f 'natsemi.c' || echo '$(srcdir)/'`natsemi.c
--
--libdrivers_a-natsemi.obj: natsemi.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-natsemi.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-natsemi.Tpo" -c -o libdrivers_a-natsemi.obj `if test -f 'natsemi.c'; then $(CYGPATH_W) 'natsemi.c'; else $(CYGPATH_W) '$(srcdir)/natsemi.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-natsemi.Tpo" "$(DEPDIR)/libdrivers_a-natsemi.Po"; else rm -f "$(DEPDIR)/libdrivers_a-natsemi.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='natsemi.c' object='libdrivers_a-natsemi.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-natsemi.obj `if test -f 'natsemi.c'; then $(CYGPATH_W) 'natsemi.c'; else $(CYGPATH_W) '$(srcdir)/natsemi.c'; fi`
--
--libdrivers_a-ni5010.o: ni5010.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-ni5010.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-ni5010.Tpo" -c -o libdrivers_a-ni5010.o `test -f 'ni5010.c' || echo '$(srcdir)/'`ni5010.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-ni5010.Tpo" "$(DEPDIR)/libdrivers_a-ni5010.Po"; else rm -f "$(DEPDIR)/libdrivers_a-ni5010.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='ni5010.c' object='libdrivers_a-ni5010.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-ni5010.o `test -f 'ni5010.c' || echo '$(srcdir)/'`ni5010.c
--
--libdrivers_a-ni5010.obj: ni5010.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-ni5010.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-ni5010.Tpo" -c -o libdrivers_a-ni5010.obj `if test -f 'ni5010.c'; then $(CYGPATH_W) 'ni5010.c'; else $(CYGPATH_W) '$(srcdir)/ni5010.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-ni5010.Tpo" "$(DEPDIR)/libdrivers_a-ni5010.Po"; else rm -f "$(DEPDIR)/libdrivers_a-ni5010.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='ni5010.c' object='libdrivers_a-ni5010.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-ni5010.obj `if test -f 'ni5010.c'; then $(CYGPATH_W) 'ni5010.c'; else $(CYGPATH_W) '$(srcdir)/ni5010.c'; fi`
--
--libdrivers_a-ns8390.o: ns8390.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-ns8390.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-ns8390.Tpo" -c -o libdrivers_a-ns8390.o `test -f 'ns8390.c' || echo '$(srcdir)/'`ns8390.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-ns8390.Tpo" "$(DEPDIR)/libdrivers_a-ns8390.Po"; else rm -f "$(DEPDIR)/libdrivers_a-ns8390.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='ns8390.c' object='libdrivers_a-ns8390.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-ns8390.o `test -f 'ns8390.c' || echo '$(srcdir)/'`ns8390.c
--
--libdrivers_a-ns8390.obj: ns8390.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-ns8390.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-ns8390.Tpo" -c -o libdrivers_a-ns8390.obj `if test -f 'ns8390.c'; then $(CYGPATH_W) 'ns8390.c'; else $(CYGPATH_W) '$(srcdir)/ns8390.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-ns8390.Tpo" "$(DEPDIR)/libdrivers_a-ns8390.Po"; else rm -f "$(DEPDIR)/libdrivers_a-ns8390.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='ns8390.c' object='libdrivers_a-ns8390.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-ns8390.obj `if test -f 'ns8390.c'; then $(CYGPATH_W) 'ns8390.c'; else $(CYGPATH_W) '$(srcdir)/ns8390.c'; fi`
--
--libdrivers_a-otulip.o: otulip.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-otulip.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-otulip.Tpo" -c -o libdrivers_a-otulip.o `test -f 'otulip.c' || echo '$(srcdir)/'`otulip.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-otulip.Tpo" "$(DEPDIR)/libdrivers_a-otulip.Po"; else rm -f "$(DEPDIR)/libdrivers_a-otulip.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='otulip.c' object='libdrivers_a-otulip.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-otulip.o `test -f 'otulip.c' || echo '$(srcdir)/'`otulip.c
--
--libdrivers_a-otulip.obj: otulip.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-otulip.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-otulip.Tpo" -c -o libdrivers_a-otulip.obj `if test -f 'otulip.c'; then $(CYGPATH_W) 'otulip.c'; else $(CYGPATH_W) '$(srcdir)/otulip.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-otulip.Tpo" "$(DEPDIR)/libdrivers_a-otulip.Po"; else rm -f "$(DEPDIR)/libdrivers_a-otulip.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='otulip.c' object='libdrivers_a-otulip.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-otulip.obj `if test -f 'otulip.c'; then $(CYGPATH_W) 'otulip.c'; else $(CYGPATH_W) '$(srcdir)/otulip.c'; fi`
--
--libdrivers_a-rtl8139.o: rtl8139.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-rtl8139.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-rtl8139.Tpo" -c -o libdrivers_a-rtl8139.o `test -f 'rtl8139.c' || echo '$(srcdir)/'`rtl8139.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-rtl8139.Tpo" "$(DEPDIR)/libdrivers_a-rtl8139.Po"; else rm -f "$(DEPDIR)/libdrivers_a-rtl8139.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='rtl8139.c' object='libdrivers_a-rtl8139.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-rtl8139.o `test -f 'rtl8139.c' || echo '$(srcdir)/'`rtl8139.c
--
--libdrivers_a-rtl8139.obj: rtl8139.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-rtl8139.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-rtl8139.Tpo" -c -o libdrivers_a-rtl8139.obj `if test -f 'rtl8139.c'; then $(CYGPATH_W) 'rtl8139.c'; else $(CYGPATH_W) '$(srcdir)/rtl8139.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-rtl8139.Tpo" "$(DEPDIR)/libdrivers_a-rtl8139.Po"; else rm -f "$(DEPDIR)/libdrivers_a-rtl8139.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='rtl8139.c' object='libdrivers_a-rtl8139.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-rtl8139.obj `if test -f 'rtl8139.c'; then $(CYGPATH_W) 'rtl8139.c'; else $(CYGPATH_W) '$(srcdir)/rtl8139.c'; fi`
--
--libdrivers_a-sis900.o: sis900.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-sis900.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-sis900.Tpo" -c -o libdrivers_a-sis900.o `test -f 'sis900.c' || echo '$(srcdir)/'`sis900.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-sis900.Tpo" "$(DEPDIR)/libdrivers_a-sis900.Po"; else rm -f "$(DEPDIR)/libdrivers_a-sis900.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='sis900.c' object='libdrivers_a-sis900.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-sis900.o `test -f 'sis900.c' || echo '$(srcdir)/'`sis900.c
--
--libdrivers_a-sis900.obj: sis900.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-sis900.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-sis900.Tpo" -c -o libdrivers_a-sis900.obj `if test -f 'sis900.c'; then $(CYGPATH_W) 'sis900.c'; else $(CYGPATH_W) '$(srcdir)/sis900.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-sis900.Tpo" "$(DEPDIR)/libdrivers_a-sis900.Po"; else rm -f "$(DEPDIR)/libdrivers_a-sis900.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='sis900.c' object='libdrivers_a-sis900.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-sis900.obj `if test -f 'sis900.c'; then $(CYGPATH_W) 'sis900.c'; else $(CYGPATH_W) '$(srcdir)/sis900.c'; fi`
--
--libdrivers_a-sk_g16.o: sk_g16.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-sk_g16.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-sk_g16.Tpo" -c -o libdrivers_a-sk_g16.o `test -f 'sk_g16.c' || echo '$(srcdir)/'`sk_g16.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-sk_g16.Tpo" "$(DEPDIR)/libdrivers_a-sk_g16.Po"; else rm -f "$(DEPDIR)/libdrivers_a-sk_g16.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='sk_g16.c' object='libdrivers_a-sk_g16.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-sk_g16.o `test -f 'sk_g16.c' || echo '$(srcdir)/'`sk_g16.c
--
--libdrivers_a-sk_g16.obj: sk_g16.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-sk_g16.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-sk_g16.Tpo" -c -o libdrivers_a-sk_g16.obj `if test -f 'sk_g16.c'; then $(CYGPATH_W) 'sk_g16.c'; else $(CYGPATH_W) '$(srcdir)/sk_g16.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-sk_g16.Tpo" "$(DEPDIR)/libdrivers_a-sk_g16.Po"; else rm -f "$(DEPDIR)/libdrivers_a-sk_g16.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='sk_g16.c' object='libdrivers_a-sk_g16.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-sk_g16.obj `if test -f 'sk_g16.c'; then $(CYGPATH_W) 'sk_g16.c'; else $(CYGPATH_W) '$(srcdir)/sk_g16.c'; fi`
--
--libdrivers_a-smc9000.o: smc9000.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-smc9000.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-smc9000.Tpo" -c -o libdrivers_a-smc9000.o `test -f 'smc9000.c' || echo '$(srcdir)/'`smc9000.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-smc9000.Tpo" "$(DEPDIR)/libdrivers_a-smc9000.Po"; else rm -f "$(DEPDIR)/libdrivers_a-smc9000.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='smc9000.c' object='libdrivers_a-smc9000.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-smc9000.o `test -f 'smc9000.c' || echo '$(srcdir)/'`smc9000.c
--
--libdrivers_a-smc9000.obj: smc9000.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-smc9000.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-smc9000.Tpo" -c -o libdrivers_a-smc9000.obj `if test -f 'smc9000.c'; then $(CYGPATH_W) 'smc9000.c'; else $(CYGPATH_W) '$(srcdir)/smc9000.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-smc9000.Tpo" "$(DEPDIR)/libdrivers_a-smc9000.Po"; else rm -f "$(DEPDIR)/libdrivers_a-smc9000.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='smc9000.c' object='libdrivers_a-smc9000.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-smc9000.obj `if test -f 'smc9000.c'; then $(CYGPATH_W) 'smc9000.c'; else $(CYGPATH_W) '$(srcdir)/smc9000.c'; fi`
--
--libdrivers_a-tiara.o: tiara.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tiara.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-tiara.Tpo" -c -o libdrivers_a-tiara.o `test -f 'tiara.c' || echo '$(srcdir)/'`tiara.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-tiara.Tpo" "$(DEPDIR)/libdrivers_a-tiara.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tiara.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='tiara.c' object='libdrivers_a-tiara.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tiara.o `test -f 'tiara.c' || echo '$(srcdir)/'`tiara.c
--
--libdrivers_a-tiara.obj: tiara.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tiara.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-tiara.Tpo" -c -o libdrivers_a-tiara.obj `if test -f 'tiara.c'; then $(CYGPATH_W) 'tiara.c'; else $(CYGPATH_W) '$(srcdir)/tiara.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-tiara.Tpo" "$(DEPDIR)/libdrivers_a-tiara.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tiara.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='tiara.c' object='libdrivers_a-tiara.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tiara.obj `if test -f 'tiara.c'; then $(CYGPATH_W) 'tiara.c'; else $(CYGPATH_W) '$(srcdir)/tiara.c'; fi`
--
--libdrivers_a-tlan.o: tlan.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tlan.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-tlan.Tpo" -c -o libdrivers_a-tlan.o `test -f 'tlan.c' || echo '$(srcdir)/'`tlan.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-tlan.Tpo" "$(DEPDIR)/libdrivers_a-tlan.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tlan.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='tlan.c' object='libdrivers_a-tlan.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tlan.o `test -f 'tlan.c' || echo '$(srcdir)/'`tlan.c
--
--libdrivers_a-tlan.obj: tlan.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tlan.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-tlan.Tpo" -c -o libdrivers_a-tlan.obj `if test -f 'tlan.c'; then $(CYGPATH_W) 'tlan.c'; else $(CYGPATH_W) '$(srcdir)/tlan.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-tlan.Tpo" "$(DEPDIR)/libdrivers_a-tlan.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tlan.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='tlan.c' object='libdrivers_a-tlan.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tlan.obj `if test -f 'tlan.c'; then $(CYGPATH_W) 'tlan.c'; else $(CYGPATH_W) '$(srcdir)/tlan.c'; fi`
--
--libdrivers_a-tulip.o: tulip.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tulip.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-tulip.Tpo" -c -o libdrivers_a-tulip.o `test -f 'tulip.c' || echo '$(srcdir)/'`tulip.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-tulip.Tpo" "$(DEPDIR)/libdrivers_a-tulip.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tulip.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='tulip.c' object='libdrivers_a-tulip.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tulip.o `test -f 'tulip.c' || echo '$(srcdir)/'`tulip.c
--
--libdrivers_a-tulip.obj: tulip.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tulip.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-tulip.Tpo" -c -o libdrivers_a-tulip.obj `if test -f 'tulip.c'; then $(CYGPATH_W) 'tulip.c'; else $(CYGPATH_W) '$(srcdir)/tulip.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-tulip.Tpo" "$(DEPDIR)/libdrivers_a-tulip.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tulip.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='tulip.c' object='libdrivers_a-tulip.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tulip.obj `if test -f 'tulip.c'; then $(CYGPATH_W) 'tulip.c'; else $(CYGPATH_W) '$(srcdir)/tulip.c'; fi`
--
--libdrivers_a-via-rhine.o: via-rhine.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-via-rhine.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-via-rhine.Tpo" -c -o libdrivers_a-via-rhine.o `test -f 'via-rhine.c' || echo '$(srcdir)/'`via-rhine.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-via-rhine.Tpo" "$(DEPDIR)/libdrivers_a-via-rhine.Po"; else rm -f "$(DEPDIR)/libdrivers_a-via-rhine.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='via-rhine.c' object='libdrivers_a-via-rhine.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-via-rhine.o `test -f 'via-rhine.c' || echo '$(srcdir)/'`via-rhine.c
--
--libdrivers_a-via-rhine.obj: via-rhine.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-via-rhine.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-via-rhine.Tpo" -c -o libdrivers_a-via-rhine.obj `if test -f 'via-rhine.c'; then $(CYGPATH_W) 'via-rhine.c'; else $(CYGPATH_W) '$(srcdir)/via-rhine.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-via-rhine.Tpo" "$(DEPDIR)/libdrivers_a-via-rhine.Po"; else rm -f "$(DEPDIR)/libdrivers_a-via-rhine.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='via-rhine.c' object='libdrivers_a-via-rhine.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-via-rhine.obj `if test -f 'via-rhine.c'; then $(CYGPATH_W) 'via-rhine.c'; else $(CYGPATH_W) '$(srcdir)/via-rhine.c'; fi`
--
--libdrivers_a-w89c840.o: w89c840.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-w89c840.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-w89c840.Tpo" -c -o libdrivers_a-w89c840.o `test -f 'w89c840.c' || echo '$(srcdir)/'`w89c840.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-w89c840.Tpo" "$(DEPDIR)/libdrivers_a-w89c840.Po"; else rm -f "$(DEPDIR)/libdrivers_a-w89c840.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='w89c840.c' object='libdrivers_a-w89c840.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-w89c840.o `test -f 'w89c840.c' || echo '$(srcdir)/'`w89c840.c
--
--libdrivers_a-w89c840.obj: w89c840.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-w89c840.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-w89c840.Tpo" -c -o libdrivers_a-w89c840.obj `if test -f 'w89c840.c'; then $(CYGPATH_W) 'w89c840.c'; else $(CYGPATH_W) '$(srcdir)/w89c840.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libdrivers_a-w89c840.Tpo" "$(DEPDIR)/libdrivers_a-w89c840.Po"; else rm -f "$(DEPDIR)/libdrivers_a-w89c840.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='w89c840.c' object='libdrivers_a-w89c840.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-w89c840.obj `if test -f 'w89c840.c'; then $(CYGPATH_W) 'w89c840.c'; else $(CYGPATH_W) '$(srcdir)/w89c840.c'; fi`
--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)
--      @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 $(LIBRARIES)
--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:
--
--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 clean-noinstLIBRARIES 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-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-info-am
--
--.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
--      clean-noinstLIBRARIES ctags distclean distclean-compile \
--      distclean-generic distclean-tags 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-compile \
--      mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
--      uninstall-am uninstall-info-am
--
--
--# Is it really necessary to specify dependecies explicitly?
--$(3c509_drivers): 3c509.c 3c509.h
--$(3c509_drivers): %.o: 3c509.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(3c595_drivers): 3c595.c 3c595.h
--$(3c595_drivers): %.o: 3c595.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(3c90x_drivers): 3c90x.c
--$(3c90x_drivers): %.o: 3c90x.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(cs89x0_drivers): cs89x0.c cs89x0.h
--$(cs89x0_drivers): %.o: cs89x0.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(davicom_drivers): davicom.c
--$(davicom_drivers): %.o: davicom.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(depca_drivers): depca.c
--$(depca_drivers): %.o: depca.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(eepro_drivers): eepro.c
--$(eepro_drivers): %.o: eepro.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(eepro100_drivers): eepro100.c
--$(eepro100_drivers): %.o: eepro100.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(epic100_drivers): epic100.c epic100.h
--$(epic100_drivers): %.o: epic100.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--#$(fa311_drivers): fa311.c
--#$(fa311_drivers): %.o: fa311.c
--#     $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--#       $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(i82586_drivers): i82586.c
--$(i82586_drivers): %.o: i82586.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(lance_drivers): lance.c
--$(lance_drivers): %.o: lance.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(natsemi_drivers): natsemi.c
--$(natsemi_drivers): %.o: natsemi.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(ni5010_drivers): ni5010.c
--$(ni5010_drivers): %.o: ni5010.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(ns8390_drivers): ns8390.c ns8390.h
--$(ns8390_drivers): %.o: ns8390.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(otulip_drivers): otulip.c otulip.h
--$(otulip_drivers): %.o: otulip.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(rtl8139_drivers): rtl8139.c
--$(rtl8139_drivers): %.o: rtl8139.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(sis900_drivers): sis900.c
--$(sis900_drivers): %.o: sis900.c sis900.h
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(sk_g16_drivers): sk_g16.c sk_g16.h
--$(sk_g16_drivers): %.o: sk_g16.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(smc9000_drivers): smc9000.c smc9000.h
--$(smc9000_drivers): %.o: smc9000.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(tiara_drivers): tiara.c
--$(tiara_drivers): %.o: tiara.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--#$(tlan_drivers): tlan.c
--#$(tlan_drivers): %.o: tlan.c
--#     $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--#       $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(tulip_drivers): tulip.c
--$(tulip_drivers): %.o: tulip.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(via_rhine_drivers): via-rhine.c
--$(via_rhine_drivers): %.o: via-rhine.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--
--$(w89c840_drivers): w89c840.c
--$(w89c840_drivers): %.o: w89c840.c
--      $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--        $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $<
--# 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/netboot/etherboot.h b/netboot/etherboot.h
-index 74ca16f..9c02b25 100644
---- a/netboot/etherboot.h
-+++ b/netboot/etherboot.h
-@@ -246,7 +246,7 @@ Author: Martin Renters
- typedef struct
- {
--  unsigned long       s_addr;
-+  unsigned int        s_addr;
- }
- in_addr;
-@@ -302,7 +302,7 @@ struct bootp_t
-   char bp_htype;
-   char bp_hlen;
-   char bp_hops;
--  unsigned long bp_xid;
-+  unsigned int bp_xid;
-   unsigned short bp_secs;
-   unsigned short unused;
-   in_addr bp_ciaddr;
-@@ -411,25 +411,25 @@ struct rpc_t
-     
-     struct
-     {
--      long id;
--      long type;
--      long rpcvers;
--      long prog;
--      long vers;
--      long proc;
--      long data[1];
-+      int id;
-+      int type;
-+      int rpcvers;
-+      int prog;
-+      int vers;
-+      int proc;
-+      int data[1];
-     }
-     call;
-     
-     struct
-     {
--      long id;
--      long type;
--      long rstatus;
--      long verifier;
--      long v2;
--      long astatus;
--      long data[1];
-+      int id;
-+      int type;
-+      int rstatus;
-+      int verifier;
-+      int v2;
-+      int astatus;
-+      int data[1];
-     }
-     reply;
-   }
-@@ -531,9 +531,7 @@ extern int ip_abort;
- extern int network_ready;
- extern struct rom_info rom;
- extern struct arptable_t arptable[MAX_ARP];
--extern struct bootpd_t bootp_data;
- #define       BOOTP_DATA_ADDR (&bootp_data)
--extern unsigned char *end_of_rfc1533;
- /* config.c */
- extern struct nic nic;
-diff --git a/netboot/main.c b/netboot/main.c
-index 82759b6..b8ba920 100644
---- a/netboot/main.c
-+++ b/netboot/main.c
-@@ -53,9 +53,9 @@ int network_ready = 0;
- struct rom_info rom;
- static int vendorext_isvalid;
--static unsigned long netmask;
-+static unsigned int netmask;
- static struct bootpd_t bootp_data;
--static unsigned long xid;
-+static unsigned int xid;
- static unsigned char *end_of_rfc1533 = NULL;
- #ifndef       NO_DHCP_SUPPORT
-@@ -773,7 +773,7 @@ await_reply (int type, int ival, void *ptr, int timeout)
-         if (nic.packetlen >= ETH_HLEN + sizeof (struct arprequest)
-             && ptype == ARP)
-           {
--            unsigned long tmp;
-+            unsigned int tmp;
-             arpreply = (struct arprequest *) &nic.packet[ETH_HLEN];
-             
-diff --git a/netboot/misc.c b/netboot/misc.c
-index 28614fd..6ea9a8e 100644
---- a/netboot/misc.c
-+++ b/netboot/misc.c
-@@ -21,6 +21,7 @@
- #define GRUB  1
- #include <etherboot.h>
-+#include <stdarg.h>
- void
- sleep (int secs)
-@@ -71,9 +72,10 @@ PRINTF and friends
-       Note: width specification not supported
- **************************************************************************/
- static int
--etherboot_vsprintf (char *buf, const char *fmt, const int *dp)
-+etherboot_vsprintf (char *buf, const char *fmt, va_list args)
- {
-   char *p, *s;
-+  int n;
-   
-   s = buf;
-   for ( ; *fmt != '\0'; ++fmt)
-@@ -86,7 +88,7 @@ etherboot_vsprintf (char *buf, const char *fmt, const int *dp)
-       
-       if (*++fmt == 's')
-       {
--        for (p = (char *) *dp++; *p != '\0'; p++)
-+        for (p = va_arg (args, char *); *p != '\0'; p++)
-           buf ? *s++ = *p : grub_putchar (*p);
-       }
-       else
-@@ -120,46 +122,44 @@ etherboot_vsprintf (char *buf, const char *fmt, const int *dp)
-          */
-         if ((*fmt | 0x20) == 'x')
-           {
--            /* With x86 gcc, sizeof(long) == sizeof(int) */
--            const long *lp = (const long *) dp;
--            long h = *lp++;
-             int ncase = (*fmt & 0x20);
-+
-+            n = va_arg (args, int);
-             
--            dp = (const int *) lp;
-             if (alt)
-               {
-                 *q++ = '0';
-                 *q++ = 'X' | ncase;
-               }
-             for (; shift >= 0; shift -= 4)
--              *q++ = "0123456789ABCDEF"[(h >> shift) & 0xF] | ncase;
-+              *q++ = "0123456789ABCDEF"[(n >> shift) & 0xF] | ncase;
-           }
-         else if (*fmt == 'd')
-           {
--            int i = *dp++;
-             char *r;
--            
--            if (i < 0)
-+
-+            n = va_arg (args, int);
-+            if (n < 0)
-               {
-                 *q++ = '-';
--                i = -i;
-+                n = -n;
-               }
-             
-             p = q;            /* save beginning of digits */
-             do
-               {
--                *q++ = '0' + (i % 10);
--                i /= 10;
-+                *q++ = '0' + (n % 10);
-+                n /= 10;
-               }
--            while (i);
-+            while (n);
-             
-             /* reverse digits, stop in middle */
-             r = q;            /* don't alter q */
-             while (--r > p)
-               {
--                i = *r;
-+                n = *r;
-                 *r = *p;
--                *p++ = i;
-+                *p++ = n;
-               }
-           }
-         else if (*fmt == '@')
-@@ -167,14 +167,12 @@ etherboot_vsprintf (char *buf, const char *fmt, const int *dp)
-             unsigned char *r;
-             union
-             {
--              long            l;
-+              int             l;
-               unsigned char   c[4];
-             }
-             u;
--            const long *lp = (const long *) dp;
-             
--            u.l = *lp++;
--            dp = (const int *) lp;
-+            u.l = va_arg (args, int);
-             
-             for (r = &u.c[0]; r < &u.c[4]; ++r)
-               q += etherboot_sprintf (q, "%d.", *r);
-@@ -184,15 +182,15 @@ etherboot_vsprintf (char *buf, const char *fmt, const int *dp)
-         else if (*fmt == '!')
-           {
-             char *r;
--            p = (char *) *dp++;
--            
-+
-+            p = va_arg (args, char *);
-             for (r = p + ETH_ALEN; p < r; ++p)
-               q += etherboot_sprintf (q, "%hhX:", *p);
-             
-             --q;
-           }
-         else if (*fmt == 'c')
--          *q++ = *dp++;
-+          *q++ = va_arg (args, int);
-         else
-           *q++ = *fmt;
-         
-@@ -211,13 +209,23 @@ etherboot_vsprintf (char *buf, const char *fmt, const int *dp)
- int
- etherboot_sprintf (char *buf, const char *fmt, ...)
- {
--  return etherboot_vsprintf (buf, fmt, ((const int *) &fmt) + 1);
-+  va_list ap;
-+  int ret;
-+
-+  va_start (ap, fmt);
-+  ret = etherboot_vsprintf (buf, fmt, ap);
-+  va_end (ap);
-+  return ret;
- }
- void
- etherboot_printf (const char *fmt, ...)
- {
--  (void) etherboot_vsprintf (0, fmt, ((const int *) &fmt) + 1);
-+  va_list ap;
-+
-+  va_start (ap, fmt);
-+  (void) etherboot_vsprintf (0, fmt, ap);
-+  va_end (ap);
- }
- int
-diff --git a/netboot/osdep.h b/netboot/osdep.h
-index 57218bf..881141b 100644
---- a/netboot/osdep.h
-+++ b/netboot/osdep.h
-@@ -21,10 +21,10 @@
- #elif defined(__LITTLE_ENDIAN)
- #     if !defined(__constant_htonl)
- #             define __constant_htonl(x) \
--        ((unsigned long int)((((unsigned long int)(x) & 0x000000ffU) << 24) | \
--                             (((unsigned long int)(x) & 0x0000ff00U) <<  8) | \
--                             (((unsigned long int)(x) & 0x00ff0000U) >>  8) | \
--                             (((unsigned long int)(x) & 0xff000000U) >> 24)))
-+        ((unsigned int)((((unsigned int)(x) & 0x000000ffU) << 24) | \
-+                        (((unsigned int)(x) & 0x0000ff00U) <<  8) | \
-+                        (((unsigned int)(x) & 0x00ff0000U) >>  8) | \
-+                        (((unsigned int)(x) & 0xff000000U) >> 24)))
- #     endif
- #     if !defined(__constant_htons)
- #             define __constant_htons(x) \
-@@ -36,11 +36,11 @@
- #endif
- #define ntohl(x) \
--(__builtin_constant_p(x) ? \
-+(__builtin_constant_p((unsigned int)x) ? \
-  __constant_htonl((x)) : \
-  __swap32(x))
- #define htonl(x) \
--(__builtin_constant_p(x) ? \
-+(__builtin_constant_p((unsigned int)x) ? \
-  __constant_htonl((x)) : \
-  __swap32(x))
- #define ntohs(x) \
-@@ -52,21 +52,29 @@
-  __constant_htons((x)) : \
-  __swap16(x))
--static inline unsigned long int __swap32(unsigned long int x)
-+static inline unsigned int __swap32(unsigned int x)
- {
-+#ifdef PLATFORM_EFI
-+      __asm__("bswapl %0" : "=r" (x) : "0" (x));
-+#else
-       __asm__("xchgb %b0,%h0\n\t"
-               "rorl $16,%0\n\t"
-               "xchgb %b0,%h0"
-               : "=q" (x)
-               : "0" (x));
-+#endif
-       return x;
- }
- static inline unsigned short int __swap16(unsigned short int x)
- {
-+#ifdef PLATFORM_EFI
-+      return __constant_htons(x);
-+#else
-       __asm__("xchgb %b0,%h0"
-               : "=q" (x)
-               : "0" (x));
-+#endif
-       return x;
- }
-@@ -76,7 +84,7 @@ static inline unsigned short int __swap16(unsigned short int x)
- #include "linux-asm-io.h"
--typedef       unsigned long Address;
-+typedef       unsigned int Address;
- /* ANSI prototyping macro */
- #ifdef        __STDC__
-diff --git a/stage1/.gitignore b/stage1/.gitignore
-new file mode 100644
-index 0000000..5d89f6d
---- /dev/null
-+++ b/stage1/.gitignore
-@@ -0,0 +1,2 @@
-+Makefile.in
-+.deps
-diff --git a/stage1/Makefile.am b/stage1/Makefile.am
-index 0afc285..cbae397 100644
---- a/stage1/Makefile.am
-+++ b/stage1/Makefile.am
-@@ -1,11 +1,14 @@
--pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
--nodist_pkglib_DATA = stage1
--
--CLEANFILES = $(nodist_pkglib_DATA)
-+pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
- # We can't use builtins or standard includes.
- AM_CCASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc
--LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00
-+LDFLAGS = $(LOADER_LDFLAGS) -nostdlib -Wl,-N,-Ttext,7C00
-+
-+if !PLATFORM_EFI
-+
-+nodist_pkgdata_DATA = stage1
-+
-+CLEANFILES = $(nodist_pkgdata_DATA)
- noinst_PROGRAMS = stage1.exec
- stage1_exec_SOURCES = stage1.S stage1.h
-@@ -13,3 +16,5 @@ stage1_exec_SOURCES = stage1.S stage1.h
- SUFFIXES = .exec
- .exec:
-       $(OBJCOPY) -O binary $< $@
-+
-+endif
-diff --git a/stage1/Makefile.in b/stage1/Makefile.in
-deleted file mode 100644
-index 7134bdf..0000000
---- a/stage1/Makefile.in
-+++ /dev/null
-@@ -1,433 +0,0 @@
--# Makefile.in generated by automake 1.9.4 from Makefile.am.
--# @configure_input@
--
--# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
--# 2003, 2004  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@
--
--
--SOURCES = $(stage1_exec_SOURCES)
--
--srcdir = @srcdir@
--top_srcdir = @top_srcdir@
--VPATH = @srcdir@
--pkgdatadir = $(datadir)/@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 = :
--build_triplet = @build@
--host_triplet = @host@
--noinst_PROGRAMS = stage1.exec$(EXEEXT)
--subdir = stage1
--DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
--ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
--am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
--      $(top_srcdir)/configure.ac
--am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
--      $(ACLOCAL_M4)
--mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
--CONFIG_HEADER = $(top_builddir)/config.h
--CONFIG_CLEAN_FILES =
--PROGRAMS = $(noinst_PROGRAMS)
--am_stage1_exec_OBJECTS = stage1.$(OBJEXT)
--stage1_exec_OBJECTS = $(am_stage1_exec_OBJECTS)
--stage1_exec_LDADD = $(LDADD)
--DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
--CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)
--COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
--      $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
--CCLD = $(CC)
--LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
--SOURCES = $(stage1_exec_SOURCES)
--DIST_SOURCES = $(stage1_exec_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)$(pkglibdir)"
--nodist_pkglibDATA_INSTALL = $(INSTALL_DATA)
--DATA = $(nodist_pkglib_DATA)
--ETAGS = etags
--CTAGS = ctags
--DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
--pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
--ACLOCAL = @ACLOCAL@
--AMDEP_FALSE = @AMDEP_FALSE@
--AMDEP_TRUE = @AMDEP_TRUE@
--AMTAR = @AMTAR@
--AUTOCONF = @AUTOCONF@
--AUTOHEADER = @AUTOHEADER@
--AUTOMAKE = @AUTOMAKE@
--AWK = @AWK@
--BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@
--BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@
--CC = @CC@
--CCAS = @CCAS@
--CCASFLAGS = @CCASFLAGS@
--CCDEPMODE = @CCDEPMODE@
--CFLAGS = @CFLAGS@
--CPP = @CPP@
--CPPFLAGS = @CPPFLAGS@
--CYGPATH_W = @CYGPATH_W@
--DEFS = @DEFS@
--DEPDIR = @DEPDIR@
--DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@
--DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@
--ECHO_C = @ECHO_C@
--ECHO_N = @ECHO_N@
--ECHO_T = @ECHO_T@
--EGREP = @EGREP@
--EXEEXT = @EXEEXT@
--FSYS_CFLAGS = @FSYS_CFLAGS@
--GRUB_CFLAGS = @GRUB_CFLAGS@
--GRUB_LIBS = @GRUB_LIBS@
--HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@
--HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@
--INSTALL_DATA = @INSTALL_DATA@
--INSTALL_PROGRAM = @INSTALL_PROGRAM@
--INSTALL_SCRIPT = @INSTALL_SCRIPT@
--INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
--LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00
--LIBOBJS = @LIBOBJS@
--LIBS = @LIBS@
--LTLIBOBJS = @LTLIBOBJS@
--MAINT = @MAINT@
--MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
--MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
--MAKEINFO = @MAKEINFO@
--NETBOOT_DRIVERS = @NETBOOT_DRIVERS@
--NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@
--NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@
--NET_CFLAGS = @NET_CFLAGS@
--NET_EXTRAFLAGS = @NET_EXTRAFLAGS@
--OBJCOPY = @OBJCOPY@
--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@
--RANLIB = @RANLIB@
--SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@
--SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@
--SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@
--SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@
--SET_MAKE = @SET_MAKE@
--SHELL = @SHELL@
--STAGE1_CFLAGS = @STAGE1_CFLAGS@
--STAGE2_CFLAGS = @STAGE2_CFLAGS@
--STRIP = @STRIP@
--VERSION = @VERSION@
--ac_ct_CC = @ac_ct_CC@
--ac_ct_OBJCOPY = @ac_ct_OBJCOPY@
--ac_ct_RANLIB = @ac_ct_RANLIB@
--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 = @build@
--build_alias = @build_alias@
--build_cpu = @build_cpu@
--build_os = @build_os@
--build_vendor = @build_vendor@
--datadir = @datadir@
--exec_prefix = @exec_prefix@
--host = @host@
--host_alias = @host_alias@
--host_cpu = @host_cpu@
--host_os = @host_os@
--host_vendor = @host_vendor@
--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@
--nodist_pkglib_DATA = stage1
--CLEANFILES = $(nodist_pkglib_DATA)
--
--# We can't use builtins or standard includes.
--AM_CCASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc
--stage1_exec_SOURCES = stage1.S stage1.h
--SUFFIXES = .exec
--all: all-am
--
--.SUFFIXES:
--.SUFFIXES: .exec .S .o .obj
--$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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  stage1/Makefile'; \
--      cd $(top_srcdir) && \
--        $(AUTOMAKE) --gnu  stage1/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
--      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
--$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
--      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
--
--clean-noinstPROGRAMS:
--      -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
--stage1.exec$(EXEEXT): $(stage1_exec_OBJECTS) $(stage1_exec_DEPENDENCIES) 
--      @rm -f stage1.exec$(EXEEXT)
--      $(LINK) $(stage1_exec_LDFLAGS) $(stage1_exec_OBJECTS) $(stage1_exec_LDADD) $(LIBS)
--
--mostlyclean-compile:
--      -rm -f *.$(OBJEXT)
--
--distclean-compile:
--      -rm -f *.tab.c
--
--.S.o:
--      $(CCASCOMPILE) -c $<
--
--.S.obj:
--      $(CCASCOMPILE) -c `$(CYGPATH_W) '$<'`
--uninstall-info-am:
--install-nodist_pkglibDATA: $(nodist_pkglib_DATA)
--      @$(NORMAL_INSTALL)
--      test -z "$(pkglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkglibdir)"
--      @list='$(nodist_pkglib_DATA)'; for p in $$list; do \
--        if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
--        f=$(am__strip_dir) \
--        echo " $(nodist_pkglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkglibdir)/$$f'"; \
--        $(nodist_pkglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkglibdir)/$$f"; \
--      done
--
--uninstall-nodist_pkglibDATA:
--      @$(NORMAL_UNINSTALL)
--      @list='$(nodist_pkglib_DATA)'; for p in $$list; do \
--        f=$(am__strip_dir) \
--        echo " rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
--        rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
--      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:  $(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)
--      @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) $(DATA)
--installdirs:
--      for dir in "$(DESTDIR)$(pkglibdir)"; 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 clean-noinstPROGRAMS mostlyclean-am
--
--distclean: distclean-am
--      -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-exec-am: install-nodist_pkglibDATA
--
--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-compile mostlyclean-generic
--
--pdf: pdf-am
--
--pdf-am:
--
--ps: ps-am
--
--ps-am:
--
--uninstall-am: uninstall-info-am uninstall-nodist_pkglibDATA
--
--.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
--      clean-noinstPROGRAMS ctags distclean distclean-compile \
--      distclean-generic distclean-tags 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_pkglibDATA \
--      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-info-am \
--      uninstall-nodist_pkglibDATA
--
--.exec:
--      $(OBJCOPY) -O binary $< $@
--# 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/stage1/stage1.S b/stage1/stage1.S
-index 985963d..3a896be 100644
---- a/stage1/stage1.S
-+++ b/stage1/stage1.S
-@@ -31,6 +31,8 @@
-       /* Print message string */
- #define MSG(x)        movw $ABS(x), %si; call message
-+      /* Print verbose message string */
-+#define VMSG(x)
-       /* XXX: binutils-2.9.1.0.x doesn't produce a short opcode for this. */
- #define       MOV_MEM_TO_AL(x)        .byte 0xa0;  .word x
-@@ -151,7 +153,7 @@ real_start:
-       pushw   %dx
-       /* print a notification message on the screen */
--      MSG(notification_string)
-+      VMSG(notification_string)
-       /* do not probe LBA if the drive is a floppy */
-       testb   $STAGE1_BIOS_HD_FLAG, %dl
-diff --git a/stage2/.gitignore b/stage2/.gitignore
-new file mode 100644
-index 0000000..e0480a0
---- /dev/null
-+++ b/stage2/.gitignore
-@@ -0,0 +1,5 @@
-+Makefile.in
-+Makefile
-+.deps
-+*.a
-+*.o
-diff --git a/stage2/Makefile.am b/stage2/Makefile.am
-index f8e6d42..04ff165 100644
---- a/stage2/Makefile.am
-+++ b/stage2/Makefile.am
-@@ -7,19 +7,23 @@ noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \
-         fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \
-       imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \
-       nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \
--      terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h
-+      terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h graphics.h gpt.h
- EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS)
- # For <stage1.h>.
--INCLUDES = -I$(top_srcdir)/stage1
-+INCLUDES = -I$(top_srcdir)/stage1 -I$(top_srcdir)/efi
- # The library for /sbin/grub.
-+if PLATFORM_EFI
-+noinst_LIBRARIES = libgrub.a libstage2.a
-+else
- noinst_LIBRARIES = libgrub.a
-+endif
- libgrub_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \
-       disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \
--      fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \
--      fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \
--      terminfo.c tparm.c
-+      fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_uefi.c fsys_ufs2.c \
-+      fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c sha256crypt.c \
-+      sha512crypt.c stage2.c terminfo.c tparm.c graphics.c efistubs.c
- libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \
-       -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \
-       -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \
-@@ -27,12 +31,14 @@ libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \
-       -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1
- # Stage 2 and Stage 1.5's.
--pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
-+pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
-+
-+if !PLATFORM_EFI
- EXTRA_PROGRAMS = nbloader.exec pxeloader.exec diskless.exec
- if DISKLESS_SUPPORT
--pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
-+pkgdata_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
-       ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \
-       reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 \
-       nbgrub pxegrub
-@@ -43,7 +49,7 @@ noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \
-       reiserfs_stage1_5.exec ufs2_stage1_5.exec vstafs_stage1_5.exec \
-       xfs_stage1_5.exec nbloader.exec pxeloader.exec diskless.exec
- else
--pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
-+pkgdata_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
-       ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \
-       reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5
- noinst_DATA = pre_stage2 start start_eltorito
-@@ -55,11 +61,13 @@ noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \
- endif
- MOSTLYCLEANFILES = $(noinst_PROGRAMS)
--PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200
--START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000
--NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0
--PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00
--START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00
-+endif
-+
-+PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200 $(LOADER_LDFLAGS)
-+START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000 $(LOADER_LDFLAGS)
-+NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0 $(LOADER_LDFLAGS)
-+PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 $(LOADER_LDFLAGS)
-+START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 $(LOADER_LDFLAGS)
- if NETBOOT_SUPPORT
- NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1
-@@ -79,10 +87,25 @@ else
- HERCULES_FLAGS =
- endif
-+if GRAPHICS_SUPPORT
-+GRAPHICS_FLAGS = -DSUPPORT_GRAPHICS=1
-+else
-+GRAPHICS_FLAGS =
-+endif
-+
- STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--      $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS)
-+      $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) $(GRAPHICS_FLAGS)
-+
-+libstage2_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \
-+      disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \
-+      fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_uefi.c fsys_ufs2.c \
-+      fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c sha256crypt.c \
-+      sha512crypt.c stage2.c terminfo.c tparm.c efistubs.c
-+libstage2_a_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
--STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000
-+if !PLATFORM_EFI
-+
-+STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000 $(LOADER_LDFLAGS)
- STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1
- # For stage2 target.
-@@ -90,13 +113,15 @@ pre_stage2_exec_SOURCES = asm.S bios.c boot.c builtins.c char_io.c \
-       cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \
-       fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \
-       fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \
--      hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c
-+      hercules.c md5.c serial.c smp-imps.c sha256crypt.c sha512crypt.c \
-+      stage2.c terminfo.c tparm.c graphics.c
- pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
- pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
- pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK)
-+pre_stage2_exec_LDADD = @LIBGCC@
- if NETBOOT_SUPPORT
--pre_stage2_exec_LDADD = ../netboot/libdrivers.a
-+pre_stage2_exec_LDADD += ../netboot/libdrivers.a
- endif
- if DISKLESS_SUPPORT
-@@ -105,7 +130,7 @@ else
- BUILT_SOURCES = stage2_size.h
- endif
--CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES)
-+CLEANFILES = $(pkgdata_DATA) $(noinst_DATA) $(BUILT_SOURCES)
- stage2_size.h: pre_stage2
-       -rm -f stage2_size.h
-@@ -115,6 +140,7 @@ stage2_size.h: pre_stage2
- start_exec_SOURCES = start.S
- start_exec_CCASFLAGS = $(STAGE2_COMPILE)
- start_exec_LDFLAGS = $(START_LINK)
-+start_exec_LDADD = @LIBGCC@
- # XXX: automake doesn't provide a way to specify dependencies for object
- # files explicitly, so we must write this by a general Makefile scheme.
-@@ -129,6 +155,7 @@ stage2: pre_stage2 start
- start_eltorito_exec_SOURCES = start_eltorito.S
- start_eltorito_exec_CCASFLAGS = $(STAGE2_COMPILE)
- start_eltorito_exec_LDFLAGS = $(START_ELTORITO_LINK)
-+start_eltorito_exec_LDADD = @LIBGCC@
- start_eltorito_exec-start.$(OBJEXT): stage2_size.h
-@@ -144,6 +171,7 @@ e2fs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \
- e2fs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \
-       -DNO_BLOCK_FILES=1
- e2fs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+e2fs_stage1_5_exec_LDADD = @LIBGCC@
- # For fat_stage1_5 target.
- fat_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
-@@ -153,6 +181,7 @@ fat_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \
- fat_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \
-       -DNO_BLOCK_FILES=1
- fat_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+fat_stage1_5_exec_LDADD = @LIBGCC@
- # For ffs_stage1_5 target.
- ffs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
-@@ -162,6 +191,7 @@ ffs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \
- ffs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \
-       -DNO_BLOCK_FILES=1
- ffs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+ffs_stage1_5_exec_LDADD = @LIBGCC@
- # For ufs2_stage1_5 target.
- ufs2_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
-@@ -171,6 +201,7 @@ ufs2_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \
- ufs2_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \
-       -DNO_BLOCK_FILES=1
- ufs2_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+ufs2_stage1_5_exec_LDADD = @LIBGCC@
- # For minix_stage1_5 target.
- minix_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
-@@ -180,6 +211,7 @@ minix_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \
- minix_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \
-       -DNO_BLOCK_FILES=1
- minix_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+minix_stage1_5_exec_LDADD = @LIBGCC@
- # For reiserfs_stage1_5 target.
- reiserfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
-@@ -189,6 +221,7 @@ reiserfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \
- reiserfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \
-       -DNO_BLOCK_FILES=1
- reiserfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+reiserfs_stage1_5_exec_LDADD = @LIBGCC@
- # For vstafs_stage1_5 target.
- vstafs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
-@@ -198,6 +231,7 @@ vstafs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \
- vstafs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \
-       -DNO_BLOCK_FILES=1
- vstafs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+vstafs_stage1_5_exec_LDADD = @LIBGCC@
- # For jfs_stage1_5 target.
- jfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
-@@ -207,6 +241,7 @@ jfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
- jfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
-       -DNO_BLOCK_FILES=1
- jfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+jfs_stage1_5_exec_LDADD = @LIBGCC@
- # For xfs_stage1_5 target.
- xfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
-@@ -216,6 +251,7 @@ xfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
- xfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
-       -DNO_BLOCK_FILES=1
- xfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+xfs_stage1_5_exec_LDADD = @LIBGCC@
- # For iso9660_stage1_5 target.
- iso9660_stage1_5_exec_SOURCES = start_eltorito.S asm.S common.c char_io.c \
-@@ -225,6 +261,7 @@ iso9660_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \
- iso9660_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \
-       -DNO_BLOCK_FILES=1
- iso9660_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
-+iso9660_stage1_5_exec_LDADD = @LIBGCC@
- # For diskless target.
- diskless_exec_SOURCES = $(pre_stage2_exec_SOURCES)
-@@ -233,7 +270,7 @@ diskless_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \
- diskless_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \
-       -DSUPPORT_DISKLESS=1
- diskless_exec_LDFLAGS = $(PRE_STAGE2_LINK)
--diskless_exec_LDADD = ../netboot/libdrivers.a
-+diskless_exec_LDADD = ../netboot/libdrivers.a @LIBGCC@
- diskless_size.h: diskless
-       -rm -f $@
-@@ -270,3 +307,5 @@ pxegrub: pxeloader diskless
- SUFFIXES = .exec
- .exec:
-       $(OBJCOPY) -O binary $< $@
-+
-+endif
-diff --git a/stage2/Makefile.in b/stage2/Makefile.in
-deleted file mode 100644
-index d0062bd..0000000
---- a/stage2/Makefile.in
-+++ /dev/null
-@@ -1,3250 +0,0 @@
--# Makefile.in generated by automake 1.9.4 from Makefile.am.
--# @configure_input@
--
--# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
--# 2003, 2004  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@
--
--
--
--
--
--SOURCES = $(libgrub_a_SOURCES) $(diskless_exec_SOURCES) $(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) $(ffs_stage1_5_exec_SOURCES) $(iso9660_stage1_5_exec_SOURCES) $(jfs_stage1_5_exec_SOURCES) $(minix_stage1_5_exec_SOURCES) $(nbloader_exec_SOURCES) $(pre_stage2_exec_SOURCES) $(pxeloader_exec_SOURCES) $(reiserfs_stage1_5_exec_SOURCES) $(start_exec_SOURCES) $(start_eltorito_exec_SOURCES) $(ufs2_stage1_5_exec_SOURCES) $(vstafs_stage1_5_exec_SOURCES) $(xfs_stage1_5_exec_SOURCES)
--
--srcdir = @srcdir@
--top_srcdir = @top_srcdir@
--VPATH = @srcdir@
--pkgdatadir = $(datadir)/@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 = :
--build_triplet = @build@
--host_triplet = @host@
--EXTRA_PROGRAMS = nbloader.exec$(EXEEXT) pxeloader.exec$(EXEEXT) \
--      diskless.exec$(EXEEXT)
--@DISKLESS_SUPPORT_FALSE@noinst_PROGRAMS = pre_stage2.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_FALSE@      start.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_FALSE@      start_eltorito.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_FALSE@      e2fs_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_FALSE@      fat_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_FALSE@      ffs_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_FALSE@      iso9660_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_FALSE@      jfs_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_FALSE@      minix_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_FALSE@      reiserfs_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_FALSE@      ufs2_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_FALSE@      vstafs_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_FALSE@      xfs_stage1_5.exec$(EXEEXT)
--@DISKLESS_SUPPORT_TRUE@noinst_PROGRAMS = pre_stage2.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_TRUE@       start.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_TRUE@       start_eltorito.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_TRUE@       e2fs_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_TRUE@       fat_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_TRUE@       ffs_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_TRUE@       iso9660_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_TRUE@       jfs_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_TRUE@       minix_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_TRUE@       reiserfs_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_TRUE@       ufs2_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_TRUE@       vstafs_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_TRUE@       xfs_stage1_5.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_TRUE@       nbloader.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_TRUE@       pxeloader.exec$(EXEEXT) \
--@DISKLESS_SUPPORT_TRUE@       diskless.exec$(EXEEXT)
--subdir = stage2
--DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
--      $(srcdir)/Makefile.in
--ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
--am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
--      $(top_srcdir)/configure.ac
--am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
--      $(ACLOCAL_M4)
--mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
--CONFIG_HEADER = $(top_builddir)/config.h
--CONFIG_CLEAN_FILES =
--LIBRARIES = $(noinst_LIBRARIES)
--AR = ar
--ARFLAGS = cru
--libgrub_a_AR = $(AR) $(ARFLAGS)
--libgrub_a_LIBADD =
--am_libgrub_a_OBJECTS = libgrub_a-boot.$(OBJEXT) \
--      libgrub_a-builtins.$(OBJEXT) libgrub_a-char_io.$(OBJEXT) \
--      libgrub_a-cmdline.$(OBJEXT) libgrub_a-common.$(OBJEXT) \
--      libgrub_a-disk_io.$(OBJEXT) libgrub_a-fsys_ext2fs.$(OBJEXT) \
--      libgrub_a-fsys_fat.$(OBJEXT) libgrub_a-fsys_ffs.$(OBJEXT) \
--      libgrub_a-fsys_iso9660.$(OBJEXT) libgrub_a-fsys_jfs.$(OBJEXT) \
--      libgrub_a-fsys_minix.$(OBJEXT) \
--      libgrub_a-fsys_reiserfs.$(OBJEXT) \
--      libgrub_a-fsys_ufs2.$(OBJEXT) libgrub_a-fsys_vstafs.$(OBJEXT) \
--      libgrub_a-fsys_xfs.$(OBJEXT) libgrub_a-gunzip.$(OBJEXT) \
--      libgrub_a-md5.$(OBJEXT) libgrub_a-serial.$(OBJEXT) \
--      libgrub_a-stage2.$(OBJEXT) libgrub_a-terminfo.$(OBJEXT) \
--      libgrub_a-tparm.$(OBJEXT)
--libgrub_a_OBJECTS = $(am_libgrub_a_OBJECTS)
--PROGRAMS = $(noinst_PROGRAMS)
--am__objects_1 = diskless_exec-asm.$(OBJEXT) \
--      diskless_exec-bios.$(OBJEXT) diskless_exec-boot.$(OBJEXT) \
--      diskless_exec-builtins.$(OBJEXT) \
--      diskless_exec-char_io.$(OBJEXT) \
--      diskless_exec-cmdline.$(OBJEXT) diskless_exec-common.$(OBJEXT) \
--      diskless_exec-console.$(OBJEXT) \
--      diskless_exec-disk_io.$(OBJEXT) \
--      diskless_exec-fsys_ext2fs.$(OBJEXT) \
--      diskless_exec-fsys_fat.$(OBJEXT) \
--      diskless_exec-fsys_ffs.$(OBJEXT) \
--      diskless_exec-fsys_iso9660.$(OBJEXT) \
--      diskless_exec-fsys_jfs.$(OBJEXT) \
--      diskless_exec-fsys_minix.$(OBJEXT) \
--      diskless_exec-fsys_reiserfs.$(OBJEXT) \
--      diskless_exec-fsys_ufs2.$(OBJEXT) \
--      diskless_exec-fsys_vstafs.$(OBJEXT) \
--      diskless_exec-fsys_xfs.$(OBJEXT) \
--      diskless_exec-gunzip.$(OBJEXT) \
--      diskless_exec-hercules.$(OBJEXT) diskless_exec-md5.$(OBJEXT) \
--      diskless_exec-serial.$(OBJEXT) \
--      diskless_exec-smp-imps.$(OBJEXT) \
--      diskless_exec-stage2.$(OBJEXT) \
--      diskless_exec-terminfo.$(OBJEXT) diskless_exec-tparm.$(OBJEXT)
--am_diskless_exec_OBJECTS = $(am__objects_1)
--diskless_exec_OBJECTS = $(am_diskless_exec_OBJECTS)
--diskless_exec_DEPENDENCIES = ../netboot/libdrivers.a
--am_e2fs_stage1_5_exec_OBJECTS = e2fs_stage1_5_exec-start.$(OBJEXT) \
--      e2fs_stage1_5_exec-asm.$(OBJEXT) \
--      e2fs_stage1_5_exec-common.$(OBJEXT) \
--      e2fs_stage1_5_exec-char_io.$(OBJEXT) \
--      e2fs_stage1_5_exec-disk_io.$(OBJEXT) \
--      e2fs_stage1_5_exec-stage1_5.$(OBJEXT) \
--      e2fs_stage1_5_exec-fsys_ext2fs.$(OBJEXT) \
--      e2fs_stage1_5_exec-bios.$(OBJEXT)
--e2fs_stage1_5_exec_OBJECTS = $(am_e2fs_stage1_5_exec_OBJECTS)
--e2fs_stage1_5_exec_LDADD = $(LDADD)
--am_fat_stage1_5_exec_OBJECTS = fat_stage1_5_exec-start.$(OBJEXT) \
--      fat_stage1_5_exec-asm.$(OBJEXT) \
--      fat_stage1_5_exec-common.$(OBJEXT) \
--      fat_stage1_5_exec-char_io.$(OBJEXT) \
--      fat_stage1_5_exec-disk_io.$(OBJEXT) \
--      fat_stage1_5_exec-stage1_5.$(OBJEXT) \
--      fat_stage1_5_exec-fsys_fat.$(OBJEXT) \
--      fat_stage1_5_exec-bios.$(OBJEXT)
--fat_stage1_5_exec_OBJECTS = $(am_fat_stage1_5_exec_OBJECTS)
--fat_stage1_5_exec_LDADD = $(LDADD)
--am_ffs_stage1_5_exec_OBJECTS = ffs_stage1_5_exec-start.$(OBJEXT) \
--      ffs_stage1_5_exec-asm.$(OBJEXT) \
--      ffs_stage1_5_exec-common.$(OBJEXT) \
--      ffs_stage1_5_exec-char_io.$(OBJEXT) \
--      ffs_stage1_5_exec-disk_io.$(OBJEXT) \
--      ffs_stage1_5_exec-stage1_5.$(OBJEXT) \
--      ffs_stage1_5_exec-fsys_ffs.$(OBJEXT) \
--      ffs_stage1_5_exec-bios.$(OBJEXT)
--ffs_stage1_5_exec_OBJECTS = $(am_ffs_stage1_5_exec_OBJECTS)
--ffs_stage1_5_exec_LDADD = $(LDADD)
--am_iso9660_stage1_5_exec_OBJECTS =  \
--      iso9660_stage1_5_exec-start_eltorito.$(OBJEXT) \
--      iso9660_stage1_5_exec-asm.$(OBJEXT) \
--      iso9660_stage1_5_exec-common.$(OBJEXT) \
--      iso9660_stage1_5_exec-char_io.$(OBJEXT) \
--      iso9660_stage1_5_exec-disk_io.$(OBJEXT) \
--      iso9660_stage1_5_exec-stage1_5.$(OBJEXT) \
--      iso9660_stage1_5_exec-fsys_iso9660.$(OBJEXT) \
--      iso9660_stage1_5_exec-bios.$(OBJEXT)
--iso9660_stage1_5_exec_OBJECTS = $(am_iso9660_stage1_5_exec_OBJECTS)
--iso9660_stage1_5_exec_LDADD = $(LDADD)
--am_jfs_stage1_5_exec_OBJECTS = jfs_stage1_5_exec-start.$(OBJEXT) \
--      jfs_stage1_5_exec-asm.$(OBJEXT) \
--      jfs_stage1_5_exec-common.$(OBJEXT) \
--      jfs_stage1_5_exec-char_io.$(OBJEXT) \
--      jfs_stage1_5_exec-disk_io.$(OBJEXT) \
--      jfs_stage1_5_exec-stage1_5.$(OBJEXT) \
--      jfs_stage1_5_exec-fsys_jfs.$(OBJEXT) \
--      jfs_stage1_5_exec-bios.$(OBJEXT)
--jfs_stage1_5_exec_OBJECTS = $(am_jfs_stage1_5_exec_OBJECTS)
--jfs_stage1_5_exec_LDADD = $(LDADD)
--am_minix_stage1_5_exec_OBJECTS = minix_stage1_5_exec-start.$(OBJEXT) \
--      minix_stage1_5_exec-asm.$(OBJEXT) \
--      minix_stage1_5_exec-common.$(OBJEXT) \
--      minix_stage1_5_exec-char_io.$(OBJEXT) \
--      minix_stage1_5_exec-disk_io.$(OBJEXT) \
--      minix_stage1_5_exec-stage1_5.$(OBJEXT) \
--      minix_stage1_5_exec-fsys_minix.$(OBJEXT) \
--      minix_stage1_5_exec-bios.$(OBJEXT)
--minix_stage1_5_exec_OBJECTS = $(am_minix_stage1_5_exec_OBJECTS)
--minix_stage1_5_exec_LDADD = $(LDADD)
--am_nbloader_exec_OBJECTS = nbloader_exec-nbloader.$(OBJEXT)
--nbloader_exec_OBJECTS = $(am_nbloader_exec_OBJECTS)
--nbloader_exec_LDADD = $(LDADD)
--am_pre_stage2_exec_OBJECTS = pre_stage2_exec-asm.$(OBJEXT) \
--      pre_stage2_exec-bios.$(OBJEXT) pre_stage2_exec-boot.$(OBJEXT) \
--      pre_stage2_exec-builtins.$(OBJEXT) \
--      pre_stage2_exec-char_io.$(OBJEXT) \
--      pre_stage2_exec-cmdline.$(OBJEXT) \
--      pre_stage2_exec-common.$(OBJEXT) \
--      pre_stage2_exec-console.$(OBJEXT) \
--      pre_stage2_exec-disk_io.$(OBJEXT) \
--      pre_stage2_exec-fsys_ext2fs.$(OBJEXT) \
--      pre_stage2_exec-fsys_fat.$(OBJEXT) \
--      pre_stage2_exec-fsys_ffs.$(OBJEXT) \
--      pre_stage2_exec-fsys_iso9660.$(OBJEXT) \
--      pre_stage2_exec-fsys_jfs.$(OBJEXT) \
--      pre_stage2_exec-fsys_minix.$(OBJEXT) \
--      pre_stage2_exec-fsys_reiserfs.$(OBJEXT) \
--      pre_stage2_exec-fsys_ufs2.$(OBJEXT) \
--      pre_stage2_exec-fsys_vstafs.$(OBJEXT) \
--      pre_stage2_exec-fsys_xfs.$(OBJEXT) \
--      pre_stage2_exec-gunzip.$(OBJEXT) \
--      pre_stage2_exec-hercules.$(OBJEXT) \
--      pre_stage2_exec-md5.$(OBJEXT) pre_stage2_exec-serial.$(OBJEXT) \
--      pre_stage2_exec-smp-imps.$(OBJEXT) \
--      pre_stage2_exec-stage2.$(OBJEXT) \
--      pre_stage2_exec-terminfo.$(OBJEXT) \
--      pre_stage2_exec-tparm.$(OBJEXT)
--pre_stage2_exec_OBJECTS = $(am_pre_stage2_exec_OBJECTS)
--@NETBOOT_SUPPORT_TRUE@pre_stage2_exec_DEPENDENCIES =  \
--@NETBOOT_SUPPORT_TRUE@        ../netboot/libdrivers.a
--am_pxeloader_exec_OBJECTS = pxeloader_exec-pxeloader.$(OBJEXT)
--pxeloader_exec_OBJECTS = $(am_pxeloader_exec_OBJECTS)
--pxeloader_exec_LDADD = $(LDADD)
--am_reiserfs_stage1_5_exec_OBJECTS =  \
--      reiserfs_stage1_5_exec-start.$(OBJEXT) \
--      reiserfs_stage1_5_exec-asm.$(OBJEXT) \
--      reiserfs_stage1_5_exec-common.$(OBJEXT) \
--      reiserfs_stage1_5_exec-char_io.$(OBJEXT) \
--      reiserfs_stage1_5_exec-disk_io.$(OBJEXT) \
--      reiserfs_stage1_5_exec-stage1_5.$(OBJEXT) \
--      reiserfs_stage1_5_exec-fsys_reiserfs.$(OBJEXT) \
--      reiserfs_stage1_5_exec-bios.$(OBJEXT)
--reiserfs_stage1_5_exec_OBJECTS = $(am_reiserfs_stage1_5_exec_OBJECTS)
--reiserfs_stage1_5_exec_LDADD = $(LDADD)
--am_start_exec_OBJECTS = start_exec-start.$(OBJEXT)
--start_exec_OBJECTS = $(am_start_exec_OBJECTS)
--start_exec_LDADD = $(LDADD)
--am_start_eltorito_exec_OBJECTS =  \
--      start_eltorito_exec-start_eltorito.$(OBJEXT)
--start_eltorito_exec_OBJECTS = $(am_start_eltorito_exec_OBJECTS)
--start_eltorito_exec_LDADD = $(LDADD)
--am_ufs2_stage1_5_exec_OBJECTS = ufs2_stage1_5_exec-start.$(OBJEXT) \
--      ufs2_stage1_5_exec-asm.$(OBJEXT) \
--      ufs2_stage1_5_exec-common.$(OBJEXT) \
--      ufs2_stage1_5_exec-char_io.$(OBJEXT) \
--      ufs2_stage1_5_exec-disk_io.$(OBJEXT) \
--      ufs2_stage1_5_exec-stage1_5.$(OBJEXT) \
--      ufs2_stage1_5_exec-fsys_ufs2.$(OBJEXT) \
--      ufs2_stage1_5_exec-bios.$(OBJEXT)
--ufs2_stage1_5_exec_OBJECTS = $(am_ufs2_stage1_5_exec_OBJECTS)
--ufs2_stage1_5_exec_LDADD = $(LDADD)
--am_vstafs_stage1_5_exec_OBJECTS =  \
--      vstafs_stage1_5_exec-start.$(OBJEXT) \
--      vstafs_stage1_5_exec-asm.$(OBJEXT) \
--      vstafs_stage1_5_exec-common.$(OBJEXT) \
--      vstafs_stage1_5_exec-char_io.$(OBJEXT) \
--      vstafs_stage1_5_exec-disk_io.$(OBJEXT) \
--      vstafs_stage1_5_exec-stage1_5.$(OBJEXT) \
--      vstafs_stage1_5_exec-fsys_vstafs.$(OBJEXT) \
--      vstafs_stage1_5_exec-bios.$(OBJEXT)
--vstafs_stage1_5_exec_OBJECTS = $(am_vstafs_stage1_5_exec_OBJECTS)
--vstafs_stage1_5_exec_LDADD = $(LDADD)
--am_xfs_stage1_5_exec_OBJECTS = xfs_stage1_5_exec-start.$(OBJEXT) \
--      xfs_stage1_5_exec-asm.$(OBJEXT) \
--      xfs_stage1_5_exec-common.$(OBJEXT) \
--      xfs_stage1_5_exec-char_io.$(OBJEXT) \
--      xfs_stage1_5_exec-disk_io.$(OBJEXT) \
--      xfs_stage1_5_exec-stage1_5.$(OBJEXT) \
--      xfs_stage1_5_exec-fsys_xfs.$(OBJEXT) \
--      xfs_stage1_5_exec-bios.$(OBJEXT)
--xfs_stage1_5_exec_OBJECTS = $(am_xfs_stage1_5_exec_OBJECTS)
--xfs_stage1_5_exec_LDADD = $(LDADD)
--SCRIPTS = $(noinst_SCRIPTS)
--DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
--depcomp = $(SHELL) $(top_srcdir)/depcomp
--am__depfiles_maybe = depfiles
--CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS)
--COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
--      $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
--CCLD = $(CC)
--LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
--SOURCES = $(libgrub_a_SOURCES) $(diskless_exec_SOURCES) \
--      $(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) \
--      $(ffs_stage1_5_exec_SOURCES) $(iso9660_stage1_5_exec_SOURCES) \
--      $(jfs_stage1_5_exec_SOURCES) $(minix_stage1_5_exec_SOURCES) \
--      $(nbloader_exec_SOURCES) $(pre_stage2_exec_SOURCES) \
--      $(pxeloader_exec_SOURCES) $(reiserfs_stage1_5_exec_SOURCES) \
--      $(start_exec_SOURCES) $(start_eltorito_exec_SOURCES) \
--      $(ufs2_stage1_5_exec_SOURCES) $(vstafs_stage1_5_exec_SOURCES) \
--      $(xfs_stage1_5_exec_SOURCES)
--DIST_SOURCES = $(libgrub_a_SOURCES) $(diskless_exec_SOURCES) \
--      $(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) \
--      $(ffs_stage1_5_exec_SOURCES) $(iso9660_stage1_5_exec_SOURCES) \
--      $(jfs_stage1_5_exec_SOURCES) $(minix_stage1_5_exec_SOURCES) \
--      $(nbloader_exec_SOURCES) $(pre_stage2_exec_SOURCES) \
--      $(pxeloader_exec_SOURCES) $(reiserfs_stage1_5_exec_SOURCES) \
--      $(start_exec_SOURCES) $(start_eltorito_exec_SOURCES) \
--      $(ufs2_stage1_5_exec_SOURCES) $(vstafs_stage1_5_exec_SOURCES) \
--      $(xfs_stage1_5_exec_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)$(pkglibdir)"
--pkglibDATA_INSTALL = $(INSTALL_DATA)
--DATA = $(noinst_DATA) $(pkglib_DATA)
--HEADERS = $(noinst_HEADERS)
--ETAGS = etags
--CTAGS = ctags
--DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
--
--# Stage 2 and Stage 1.5's.
--pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
--ACLOCAL = @ACLOCAL@
--AMDEP_FALSE = @AMDEP_FALSE@
--AMDEP_TRUE = @AMDEP_TRUE@
--AMTAR = @AMTAR@
--AUTOCONF = @AUTOCONF@
--AUTOHEADER = @AUTOHEADER@
--AUTOMAKE = @AUTOMAKE@
--AWK = @AWK@
--BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@
--BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@
--CC = @CC@
--CCAS = @CCAS@
--CCASFLAGS = @CCASFLAGS@
--CCDEPMODE = @CCDEPMODE@
--CFLAGS = @CFLAGS@
--CPP = @CPP@
--CPPFLAGS = @CPPFLAGS@
--CYGPATH_W = @CYGPATH_W@
--DEFS = @DEFS@
--DEPDIR = @DEPDIR@
--DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@
--DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@
--ECHO_C = @ECHO_C@
--ECHO_N = @ECHO_N@
--ECHO_T = @ECHO_T@
--EGREP = @EGREP@
--EXEEXT = @EXEEXT@
--FSYS_CFLAGS = @FSYS_CFLAGS@
--GRUB_CFLAGS = @GRUB_CFLAGS@
--GRUB_LIBS = @GRUB_LIBS@
--HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@
--HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@
--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@
--MAINT = @MAINT@
--MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
--MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
--MAKEINFO = @MAKEINFO@
--NETBOOT_DRIVERS = @NETBOOT_DRIVERS@
--NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@
--NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@
--NET_CFLAGS = @NET_CFLAGS@
--NET_EXTRAFLAGS = @NET_EXTRAFLAGS@
--OBJCOPY = @OBJCOPY@
--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@
--RANLIB = @RANLIB@
--SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@
--SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@
--SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@
--SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@
--SET_MAKE = @SET_MAKE@
--SHELL = @SHELL@
--STAGE1_CFLAGS = @STAGE1_CFLAGS@
--STAGE2_CFLAGS = @STAGE2_CFLAGS@
--STRIP = @STRIP@
--VERSION = @VERSION@
--ac_ct_CC = @ac_ct_CC@
--ac_ct_OBJCOPY = @ac_ct_OBJCOPY@
--ac_ct_RANLIB = @ac_ct_RANLIB@
--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 = @build@
--build_alias = @build_alias@
--build_cpu = @build_cpu@
--build_os = @build_os@
--build_vendor = @build_vendor@
--datadir = @datadir@
--exec_prefix = @exec_prefix@
--host = @host@
--host_alias = @host_alias@
--host_cpu = @host_cpu@
--host_os = @host_os@
--host_vendor = @host_vendor@
--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@
--
--# For test target.
--TESTS = size_test
--noinst_SCRIPTS = $(TESTS)
--
--# For dist target.
--noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \
--        fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \
--      imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \
--      nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \
--      terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h
--
--EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS)
--
--# For <stage1.h>.
--INCLUDES = -I$(top_srcdir)/stage1
--
--# The library for /sbin/grub.
--noinst_LIBRARIES = libgrub.a
--libgrub_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \
--      disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \
--      fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \
--      fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \
--      terminfo.c tparm.c
--
--libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \
--      -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \
--      -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \
--      -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \
--      -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1
--
--@DISKLESS_SUPPORT_FALSE@pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
--@DISKLESS_SUPPORT_FALSE@      ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \
--@DISKLESS_SUPPORT_FALSE@      reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5
--
--@DISKLESS_SUPPORT_TRUE@pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
--@DISKLESS_SUPPORT_TRUE@       ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \
--@DISKLESS_SUPPORT_TRUE@       reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 \
--@DISKLESS_SUPPORT_TRUE@       nbgrub pxegrub
--
--@DISKLESS_SUPPORT_FALSE@noinst_DATA = pre_stage2 start start_eltorito
--@DISKLESS_SUPPORT_TRUE@noinst_DATA = pre_stage2 start start_eltorito nbloader pxeloader diskless
--MOSTLYCLEANFILES = $(noinst_PROGRAMS)
--PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200
--START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000
--NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0
--PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00
--START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00
--@NETBOOT_SUPPORT_FALSE@NETBOOT_FLAGS = 
--@NETBOOT_SUPPORT_TRUE@NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1
--@SERIAL_SUPPORT_FALSE@SERIAL_FLAGS = 
--@SERIAL_SUPPORT_TRUE@SERIAL_FLAGS = -DSUPPORT_SERIAL=1
--@HERCULES_SUPPORT_FALSE@HERCULES_FLAGS = 
--@HERCULES_SUPPORT_TRUE@HERCULES_FLAGS = -DSUPPORT_HERCULES=1
--STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
--      $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS)
--
--STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000
--STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1
--
--# For stage2 target.
--pre_stage2_exec_SOURCES = asm.S bios.c boot.c builtins.c char_io.c \
--      cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \
--      fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \
--      fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \
--      hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c
--
--pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
--pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
--pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK)
--@NETBOOT_SUPPORT_TRUE@pre_stage2_exec_LDADD = ../netboot/libdrivers.a
--@DISKLESS_SUPPORT_FALSE@BUILT_SOURCES = stage2_size.h
--@DISKLESS_SUPPORT_TRUE@BUILT_SOURCES = stage2_size.h diskless_size.h
--CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES)
--start_exec_SOURCES = start.S
--start_exec_CCASFLAGS = $(STAGE2_COMPILE)
--start_exec_LDFLAGS = $(START_LINK)
--start_eltorito_exec_SOURCES = start_eltorito.S
--start_eltorito_exec_CCASFLAGS = $(STAGE2_COMPILE)
--start_eltorito_exec_LDFLAGS = $(START_ELTORITO_LINK)
--
--# For e2fs_stage1_5 target.
--e2fs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
--      stage1_5.c fsys_ext2fs.c bios.c
--
--e2fs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \
--      -DNO_BLOCK_FILES=1
--
--e2fs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \
--      -DNO_BLOCK_FILES=1
--
--e2fs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
--
--# For fat_stage1_5 target.
--fat_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
--      stage1_5.c fsys_fat.c bios.c
--
--fat_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \
--      -DNO_BLOCK_FILES=1
--
--fat_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \
--      -DNO_BLOCK_FILES=1
--
--fat_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
--
--# For ffs_stage1_5 target.
--ffs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
--      stage1_5.c fsys_ffs.c bios.c
--
--ffs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \
--      -DNO_BLOCK_FILES=1
--
--ffs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \
--      -DNO_BLOCK_FILES=1
--
--ffs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
--
--# For ufs2_stage1_5 target.
--ufs2_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
--      stage1_5.c fsys_ufs2.c bios.c
--
--ufs2_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \
--      -DNO_BLOCK_FILES=1
--
--ufs2_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \
--      -DNO_BLOCK_FILES=1
--
--ufs2_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
--
--# For minix_stage1_5 target.
--minix_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
--      stage1_5.c fsys_minix.c bios.c
--
--minix_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \
--      -DNO_BLOCK_FILES=1
--
--minix_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \
--      -DNO_BLOCK_FILES=1
--
--minix_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
--
--# For reiserfs_stage1_5 target.
--reiserfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
--      disk_io.c stage1_5.c fsys_reiserfs.c bios.c
--
--reiserfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \
--      -DNO_BLOCK_FILES=1
--
--reiserfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \
--      -DNO_BLOCK_FILES=1
--
--reiserfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
--
--# For vstafs_stage1_5 target.
--vstafs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
--      disk_io.c stage1_5.c fsys_vstafs.c bios.c
--
--vstafs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \
--      -DNO_BLOCK_FILES=1
--
--vstafs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \
--      -DNO_BLOCK_FILES=1
--
--vstafs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
--
--# For jfs_stage1_5 target.
--jfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
--      disk_io.c stage1_5.c fsys_jfs.c bios.c
--
--jfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
--      -DNO_BLOCK_FILES=1
--
--jfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
--      -DNO_BLOCK_FILES=1
--
--jfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
--
--# For xfs_stage1_5 target.
--xfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
--      disk_io.c stage1_5.c fsys_xfs.c bios.c
--
--xfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
--      -DNO_BLOCK_FILES=1
--
--xfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
--      -DNO_BLOCK_FILES=1
--
--xfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
--
--# For iso9660_stage1_5 target.
--iso9660_stage1_5_exec_SOURCES = start_eltorito.S asm.S common.c char_io.c \
--      disk_io.c stage1_5.c fsys_iso9660.c bios.c
--
--iso9660_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \
--      -DNO_BLOCK_FILES=1
--
--iso9660_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \
--      -DNO_BLOCK_FILES=1
--
--iso9660_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
--
--# For diskless target.
--diskless_exec_SOURCES = $(pre_stage2_exec_SOURCES)
--diskless_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \
--      -DSUPPORT_DISKLESS=1
--
--diskless_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \
--      -DSUPPORT_DISKLESS=1
--
--diskless_exec_LDFLAGS = $(PRE_STAGE2_LINK)
--diskless_exec_LDADD = ../netboot/libdrivers.a
--
--# For nbloader target.
--nbloader_exec_SOURCES = nbloader.S
--nbloader_exec_CCASFLAGS = $(STAGE2_COMPILE)
--nbloader_exec_LDFLAGS = $(NBLOADER_LINK)
--
--# For pxeloader target.
--pxeloader_exec_SOURCES = pxeloader.S
--pxeloader_exec_CCASFLAGS = $(STAGE2_COMPILE)
--pxeloader_exec_LDFLAGS = $(PXELOADER_LINK)
--
--# General rule for making a raw binary.
--SUFFIXES = .exec
--all: $(BUILT_SOURCES)
--      $(MAKE) $(AM_MAKEFLAGS) all-am
--
--.SUFFIXES:
--.SUFFIXES: .exec .S .c .o .obj
--$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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  stage2/Makefile'; \
--      cd $(top_srcdir) && \
--        $(AUTOMAKE) --gnu  stage2/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
--      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
--$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
--      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
--
--clean-noinstLIBRARIES:
--      -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
--libgrub.a: $(libgrub_a_OBJECTS) $(libgrub_a_DEPENDENCIES) 
--      -rm -f libgrub.a
--      $(libgrub_a_AR) libgrub.a $(libgrub_a_OBJECTS) $(libgrub_a_LIBADD)
--      $(RANLIB) libgrub.a
--
--clean-noinstPROGRAMS:
--      -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
--diskless.exec$(EXEEXT): $(diskless_exec_OBJECTS) $(diskless_exec_DEPENDENCIES) 
--      @rm -f diskless.exec$(EXEEXT)
--      $(LINK) $(diskless_exec_LDFLAGS) $(diskless_exec_OBJECTS) $(diskless_exec_LDADD) $(LIBS)
--e2fs_stage1_5.exec$(EXEEXT): $(e2fs_stage1_5_exec_OBJECTS) $(e2fs_stage1_5_exec_DEPENDENCIES) 
--      @rm -f e2fs_stage1_5.exec$(EXEEXT)
--      $(LINK) $(e2fs_stage1_5_exec_LDFLAGS) $(e2fs_stage1_5_exec_OBJECTS) $(e2fs_stage1_5_exec_LDADD) $(LIBS)
--fat_stage1_5.exec$(EXEEXT): $(fat_stage1_5_exec_OBJECTS) $(fat_stage1_5_exec_DEPENDENCIES) 
--      @rm -f fat_stage1_5.exec$(EXEEXT)
--      $(LINK) $(fat_stage1_5_exec_LDFLAGS) $(fat_stage1_5_exec_OBJECTS) $(fat_stage1_5_exec_LDADD) $(LIBS)
--ffs_stage1_5.exec$(EXEEXT): $(ffs_stage1_5_exec_OBJECTS) $(ffs_stage1_5_exec_DEPENDENCIES) 
--      @rm -f ffs_stage1_5.exec$(EXEEXT)
--      $(LINK) $(ffs_stage1_5_exec_LDFLAGS) $(ffs_stage1_5_exec_OBJECTS) $(ffs_stage1_5_exec_LDADD) $(LIBS)
--iso9660_stage1_5.exec$(EXEEXT): $(iso9660_stage1_5_exec_OBJECTS) $(iso9660_stage1_5_exec_DEPENDENCIES) 
--      @rm -f iso9660_stage1_5.exec$(EXEEXT)
--      $(LINK) $(iso9660_stage1_5_exec_LDFLAGS) $(iso9660_stage1_5_exec_OBJECTS) $(iso9660_stage1_5_exec_LDADD) $(LIBS)
--jfs_stage1_5.exec$(EXEEXT): $(jfs_stage1_5_exec_OBJECTS) $(jfs_stage1_5_exec_DEPENDENCIES) 
--      @rm -f jfs_stage1_5.exec$(EXEEXT)
--      $(LINK) $(jfs_stage1_5_exec_LDFLAGS) $(jfs_stage1_5_exec_OBJECTS) $(jfs_stage1_5_exec_LDADD) $(LIBS)
--minix_stage1_5.exec$(EXEEXT): $(minix_stage1_5_exec_OBJECTS) $(minix_stage1_5_exec_DEPENDENCIES) 
--      @rm -f minix_stage1_5.exec$(EXEEXT)
--      $(LINK) $(minix_stage1_5_exec_LDFLAGS) $(minix_stage1_5_exec_OBJECTS) $(minix_stage1_5_exec_LDADD) $(LIBS)
--nbloader.exec$(EXEEXT): $(nbloader_exec_OBJECTS) $(nbloader_exec_DEPENDENCIES) 
--      @rm -f nbloader.exec$(EXEEXT)
--      $(LINK) $(nbloader_exec_LDFLAGS) $(nbloader_exec_OBJECTS) $(nbloader_exec_LDADD) $(LIBS)
--pre_stage2.exec$(EXEEXT): $(pre_stage2_exec_OBJECTS) $(pre_stage2_exec_DEPENDENCIES) 
--      @rm -f pre_stage2.exec$(EXEEXT)
--      $(LINK) $(pre_stage2_exec_LDFLAGS) $(pre_stage2_exec_OBJECTS) $(pre_stage2_exec_LDADD) $(LIBS)
--pxeloader.exec$(EXEEXT): $(pxeloader_exec_OBJECTS) $(pxeloader_exec_DEPENDENCIES) 
--      @rm -f pxeloader.exec$(EXEEXT)
--      $(LINK) $(pxeloader_exec_LDFLAGS) $(pxeloader_exec_OBJECTS) $(pxeloader_exec_LDADD) $(LIBS)
--reiserfs_stage1_5.exec$(EXEEXT): $(reiserfs_stage1_5_exec_OBJECTS) $(reiserfs_stage1_5_exec_DEPENDENCIES) 
--      @rm -f reiserfs_stage1_5.exec$(EXEEXT)
--      $(LINK) $(reiserfs_stage1_5_exec_LDFLAGS) $(reiserfs_stage1_5_exec_OBJECTS) $(reiserfs_stage1_5_exec_LDADD) $(LIBS)
--start.exec$(EXEEXT): $(start_exec_OBJECTS) $(start_exec_DEPENDENCIES) 
--      @rm -f start.exec$(EXEEXT)
--      $(LINK) $(start_exec_LDFLAGS) $(start_exec_OBJECTS) $(start_exec_LDADD) $(LIBS)
--start_eltorito.exec$(EXEEXT): $(start_eltorito_exec_OBJECTS) $(start_eltorito_exec_DEPENDENCIES) 
--      @rm -f start_eltorito.exec$(EXEEXT)
--      $(LINK) $(start_eltorito_exec_LDFLAGS) $(start_eltorito_exec_OBJECTS) $(start_eltorito_exec_LDADD) $(LIBS)
--ufs2_stage1_5.exec$(EXEEXT): $(ufs2_stage1_5_exec_OBJECTS) $(ufs2_stage1_5_exec_DEPENDENCIES) 
--      @rm -f ufs2_stage1_5.exec$(EXEEXT)
--      $(LINK) $(ufs2_stage1_5_exec_LDFLAGS) $(ufs2_stage1_5_exec_OBJECTS) $(ufs2_stage1_5_exec_LDADD) $(LIBS)
--vstafs_stage1_5.exec$(EXEEXT): $(vstafs_stage1_5_exec_OBJECTS) $(vstafs_stage1_5_exec_DEPENDENCIES) 
--      @rm -f vstafs_stage1_5.exec$(EXEEXT)
--      $(LINK) $(vstafs_stage1_5_exec_LDFLAGS) $(vstafs_stage1_5_exec_OBJECTS) $(vstafs_stage1_5_exec_LDADD) $(LIBS)
--xfs_stage1_5.exec$(EXEEXT): $(xfs_stage1_5_exec_OBJECTS) $(xfs_stage1_5_exec_DEPENDENCIES) 
--      @rm -f xfs_stage1_5.exec$(EXEEXT)
--      $(LINK) $(xfs_stage1_5_exec_LDFLAGS) $(xfs_stage1_5_exec_OBJECTS) $(xfs_stage1_5_exec_LDADD) $(LIBS)
--
--mostlyclean-compile:
--      -rm -f *.$(OBJEXT)
--
--distclean-compile:
--      -rm -f *.tab.c
--
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-bios.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-boot.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-builtins.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-char_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-cmdline.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-common.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-console.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-disk_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_ext2fs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_fat.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_ffs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_iso9660.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_jfs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_minix.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_reiserfs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_ufs2.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_vstafs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_xfs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-gunzip.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-hercules.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-md5.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-serial.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-smp-imps.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-stage2.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-terminfo.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-tparm.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-bios.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-char_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-common.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-bios.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-char_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-common.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-disk_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-stage1_5.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-bios.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-char_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-common.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-disk_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-bios.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-common.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-bios.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-char_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-common.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-disk_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-boot.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-builtins.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-char_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-cmdline.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-common.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-disk_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_ext2fs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_fat.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_ffs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_iso9660.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_jfs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_minix.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_reiserfs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_ufs2.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_vstafs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_xfs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-gunzip.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-md5.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-serial.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-stage2.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-terminfo.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-tparm.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-bios.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-char_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-common.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-disk_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-stage1_5.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-bios.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-boot.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-builtins.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-char_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-cmdline.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-common.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-console.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-disk_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_fat.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_ffs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_jfs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_minix.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_xfs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-gunzip.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-hercules.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-md5.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-serial.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-smp-imps.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-stage2.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-terminfo.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-tparm.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-bios.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-common.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-bios.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-char_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-common.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-bios.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-char_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-common.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-bios.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-char_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-common.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-disk_io.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Po@am__quote@
--
--.S.o:
--      $(CCASCOMPILE) -c $<
--
--.S.obj:
--      $(CCASCOMPILE) -c `$(CYGPATH_W) '$<'`
--
--diskless_exec-asm.o: asm.S
--      $(CCAS) $(diskless_exec_CCASFLAGS) $(CCASFLAGS) -c -o diskless_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S
--
--diskless_exec-asm.obj: asm.S
--      $(CCAS) $(diskless_exec_CCASFLAGS) $(CCASFLAGS) -c -o diskless_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi`
--
--e2fs_stage1_5_exec-start.o: start.S
--      $(CCAS) $(e2fs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o e2fs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S
--
--e2fs_stage1_5_exec-start.obj: start.S
--      $(CCAS) $(e2fs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o e2fs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi`
--
--e2fs_stage1_5_exec-asm.o: asm.S
--      $(CCAS) $(e2fs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o e2fs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S
--
--e2fs_stage1_5_exec-asm.obj: asm.S
--      $(CCAS) $(e2fs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o e2fs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi`
--
--fat_stage1_5_exec-start.o: start.S
--      $(CCAS) $(fat_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o fat_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S
--
--fat_stage1_5_exec-start.obj: start.S
--      $(CCAS) $(fat_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o fat_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi`
--
--fat_stage1_5_exec-asm.o: asm.S
--      $(CCAS) $(fat_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o fat_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S
--
--fat_stage1_5_exec-asm.obj: asm.S
--      $(CCAS) $(fat_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o fat_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi`
--
--ffs_stage1_5_exec-start.o: start.S
--      $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S
--
--ffs_stage1_5_exec-start.obj: start.S
--      $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi`
--
--ffs_stage1_5_exec-asm.o: asm.S
--      $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S
--
--ffs_stage1_5_exec-asm.obj: asm.S
--      $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi`
--
--iso9660_stage1_5_exec-start_eltorito.o: start_eltorito.S
--      $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-start_eltorito.o `test -f 'start_eltorito.S' || echo '$(srcdir)/'`start_eltorito.S
--
--iso9660_stage1_5_exec-start_eltorito.obj: start_eltorito.S
--      $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-start_eltorito.obj `if test -f 'start_eltorito.S'; then $(CYGPATH_W) 'start_eltorito.S'; else $(CYGPATH_W) '$(srcdir)/start_eltorito.S'; fi`
--
--iso9660_stage1_5_exec-asm.o: asm.S
--      $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S
--
--iso9660_stage1_5_exec-asm.obj: asm.S
--      $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi`
--
--jfs_stage1_5_exec-start.o: start.S
--      $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S
--
--jfs_stage1_5_exec-start.obj: start.S
--      $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi`
--
--jfs_stage1_5_exec-asm.o: asm.S
--      $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S
--
--jfs_stage1_5_exec-asm.obj: asm.S
--      $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi`
--
--minix_stage1_5_exec-start.o: start.S
--      $(CCAS) $(minix_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o minix_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S
--
--minix_stage1_5_exec-start.obj: start.S
--      $(CCAS) $(minix_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o minix_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi`
--
--minix_stage1_5_exec-asm.o: asm.S
--      $(CCAS) $(minix_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o minix_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S
--
--minix_stage1_5_exec-asm.obj: asm.S
--      $(CCAS) $(minix_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o minix_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi`
--
--nbloader_exec-nbloader.o: nbloader.S
--      $(CCAS) $(nbloader_exec_CCASFLAGS) $(CCASFLAGS) -c -o nbloader_exec-nbloader.o `test -f 'nbloader.S' || echo '$(srcdir)/'`nbloader.S
--
--nbloader_exec-nbloader.obj: nbloader.S
--      $(CCAS) $(nbloader_exec_CCASFLAGS) $(CCASFLAGS) -c -o nbloader_exec-nbloader.obj `if test -f 'nbloader.S'; then $(CYGPATH_W) 'nbloader.S'; else $(CYGPATH_W) '$(srcdir)/nbloader.S'; fi`
--
--pre_stage2_exec-asm.o: asm.S
--      $(CCAS) $(pre_stage2_exec_CCASFLAGS) $(CCASFLAGS) -c -o pre_stage2_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S
--
--pre_stage2_exec-asm.obj: asm.S
--      $(CCAS) $(pre_stage2_exec_CCASFLAGS) $(CCASFLAGS) -c -o pre_stage2_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi`
--
--pxeloader_exec-pxeloader.o: pxeloader.S
--      $(CCAS) $(pxeloader_exec_CCASFLAGS) $(CCASFLAGS) -c -o pxeloader_exec-pxeloader.o `test -f 'pxeloader.S' || echo '$(srcdir)/'`pxeloader.S
--
--pxeloader_exec-pxeloader.obj: pxeloader.S
--      $(CCAS) $(pxeloader_exec_CCASFLAGS) $(CCASFLAGS) -c -o pxeloader_exec-pxeloader.obj `if test -f 'pxeloader.S'; then $(CYGPATH_W) 'pxeloader.S'; else $(CYGPATH_W) '$(srcdir)/pxeloader.S'; fi`
--
--reiserfs_stage1_5_exec-start.o: start.S
--      $(CCAS) $(reiserfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o reiserfs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S
--
--reiserfs_stage1_5_exec-start.obj: start.S
--      $(CCAS) $(reiserfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o reiserfs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi`
--
--reiserfs_stage1_5_exec-asm.o: asm.S
--      $(CCAS) $(reiserfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o reiserfs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S
--
--reiserfs_stage1_5_exec-asm.obj: asm.S
--      $(CCAS) $(reiserfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o reiserfs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi`
--
--start_exec-start.o: start.S
--      $(CCAS) $(start_exec_CCASFLAGS) $(CCASFLAGS) -c -o start_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S
--
--start_exec-start.obj: start.S
--      $(CCAS) $(start_exec_CCASFLAGS) $(CCASFLAGS) -c -o start_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi`
--
--start_eltorito_exec-start_eltorito.o: start_eltorito.S
--      $(CCAS) $(start_eltorito_exec_CCASFLAGS) $(CCASFLAGS) -c -o start_eltorito_exec-start_eltorito.o `test -f 'start_eltorito.S' || echo '$(srcdir)/'`start_eltorito.S
--
--start_eltorito_exec-start_eltorito.obj: start_eltorito.S
--      $(CCAS) $(start_eltorito_exec_CCASFLAGS) $(CCASFLAGS) -c -o start_eltorito_exec-start_eltorito.obj `if test -f 'start_eltorito.S'; then $(CYGPATH_W) 'start_eltorito.S'; else $(CYGPATH_W) '$(srcdir)/start_eltorito.S'; fi`
--
--ufs2_stage1_5_exec-start.o: start.S
--      $(CCAS) $(ufs2_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ufs2_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S
--
--ufs2_stage1_5_exec-start.obj: start.S
--      $(CCAS) $(ufs2_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ufs2_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi`
--
--ufs2_stage1_5_exec-asm.o: asm.S
--      $(CCAS) $(ufs2_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ufs2_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S
--
--ufs2_stage1_5_exec-asm.obj: asm.S
--      $(CCAS) $(ufs2_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ufs2_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi`
--
--vstafs_stage1_5_exec-start.o: start.S
--      $(CCAS) $(vstafs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o vstafs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S
--
--vstafs_stage1_5_exec-start.obj: start.S
--      $(CCAS) $(vstafs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o vstafs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi`
--
--vstafs_stage1_5_exec-asm.o: asm.S
--      $(CCAS) $(vstafs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o vstafs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S
--
--vstafs_stage1_5_exec-asm.obj: asm.S
--      $(CCAS) $(vstafs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o vstafs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi`
--
--xfs_stage1_5_exec-start.o: start.S
--      $(CCAS) $(xfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o xfs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S
--
--xfs_stage1_5_exec-start.obj: start.S
--      $(CCAS) $(xfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o xfs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi`
--
--xfs_stage1_5_exec-asm.o: asm.S
--      $(CCAS) $(xfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o xfs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S
--
--xfs_stage1_5_exec-asm.obj: asm.S
--      $(CCAS) $(xfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o xfs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi`
--
--.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) '$<'`
--
--libgrub_a-boot.o: boot.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-boot.o -MD -MP -MF "$(DEPDIR)/libgrub_a-boot.Tpo" -c -o libgrub_a-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-boot.Tpo" "$(DEPDIR)/libgrub_a-boot.Po"; else rm -f "$(DEPDIR)/libgrub_a-boot.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='boot.c' object='libgrub_a-boot.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c
--
--libgrub_a-boot.obj: boot.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-boot.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-boot.Tpo" -c -o libgrub_a-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-boot.Tpo" "$(DEPDIR)/libgrub_a-boot.Po"; else rm -f "$(DEPDIR)/libgrub_a-boot.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='boot.c' object='libgrub_a-boot.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi`
--
--libgrub_a-builtins.o: builtins.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-builtins.o -MD -MP -MF "$(DEPDIR)/libgrub_a-builtins.Tpo" -c -o libgrub_a-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-builtins.Tpo" "$(DEPDIR)/libgrub_a-builtins.Po"; else rm -f "$(DEPDIR)/libgrub_a-builtins.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='builtins.c' object='libgrub_a-builtins.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c
--
--libgrub_a-builtins.obj: builtins.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-builtins.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-builtins.Tpo" -c -o libgrub_a-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-builtins.Tpo" "$(DEPDIR)/libgrub_a-builtins.Po"; else rm -f "$(DEPDIR)/libgrub_a-builtins.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='builtins.c' object='libgrub_a-builtins.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi`
--
--libgrub_a-char_io.o: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-char_io.o -MD -MP -MF "$(DEPDIR)/libgrub_a-char_io.Tpo" -c -o libgrub_a-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-char_io.Tpo" "$(DEPDIR)/libgrub_a-char_io.Po"; else rm -f "$(DEPDIR)/libgrub_a-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='libgrub_a-char_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c
--
--libgrub_a-char_io.obj: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-char_io.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-char_io.Tpo" -c -o libgrub_a-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-char_io.Tpo" "$(DEPDIR)/libgrub_a-char_io.Po"; else rm -f "$(DEPDIR)/libgrub_a-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='libgrub_a-char_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`
--
--libgrub_a-cmdline.o: cmdline.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-cmdline.o -MD -MP -MF "$(DEPDIR)/libgrub_a-cmdline.Tpo" -c -o libgrub_a-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-cmdline.Tpo" "$(DEPDIR)/libgrub_a-cmdline.Po"; else rm -f "$(DEPDIR)/libgrub_a-cmdline.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='cmdline.c' object='libgrub_a-cmdline.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c
--
--libgrub_a-cmdline.obj: cmdline.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-cmdline.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-cmdline.Tpo" -c -o libgrub_a-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-cmdline.Tpo" "$(DEPDIR)/libgrub_a-cmdline.Po"; else rm -f "$(DEPDIR)/libgrub_a-cmdline.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='cmdline.c' object='libgrub_a-cmdline.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi`
--
--libgrub_a-common.o: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-common.o -MD -MP -MF "$(DEPDIR)/libgrub_a-common.Tpo" -c -o libgrub_a-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-common.Tpo" "$(DEPDIR)/libgrub_a-common.Po"; else rm -f "$(DEPDIR)/libgrub_a-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='libgrub_a-common.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c
--
--libgrub_a-common.obj: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-common.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-common.Tpo" -c -o libgrub_a-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-common.Tpo" "$(DEPDIR)/libgrub_a-common.Po"; else rm -f "$(DEPDIR)/libgrub_a-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='libgrub_a-common.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`
--
--libgrub_a-disk_io.o: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-disk_io.o -MD -MP -MF "$(DEPDIR)/libgrub_a-disk_io.Tpo" -c -o libgrub_a-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-disk_io.Tpo" "$(DEPDIR)/libgrub_a-disk_io.Po"; else rm -f "$(DEPDIR)/libgrub_a-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='libgrub_a-disk_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c
--
--libgrub_a-disk_io.obj: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-disk_io.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-disk_io.Tpo" -c -o libgrub_a-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-disk_io.Tpo" "$(DEPDIR)/libgrub_a-disk_io.Po"; else rm -f "$(DEPDIR)/libgrub_a-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='libgrub_a-disk_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`
--
--libgrub_a-fsys_ext2fs.o: fsys_ext2fs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ext2fs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo" -c -o libgrub_a-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo" "$(DEPDIR)/libgrub_a-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ext2fs.c' object='libgrub_a-fsys_ext2fs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c
--
--libgrub_a-fsys_ext2fs.obj: fsys_ext2fs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ext2fs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo" -c -o libgrub_a-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo" "$(DEPDIR)/libgrub_a-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ext2fs.c' object='libgrub_a-fsys_ext2fs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`
--
--libgrub_a-fsys_fat.o: fsys_fat.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_fat.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_fat.Tpo" -c -o libgrub_a-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_fat.Tpo" "$(DEPDIR)/libgrub_a-fsys_fat.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_fat.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_fat.c' object='libgrub_a-fsys_fat.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c
--
--libgrub_a-fsys_fat.obj: fsys_fat.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_fat.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_fat.Tpo" -c -o libgrub_a-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_fat.Tpo" "$(DEPDIR)/libgrub_a-fsys_fat.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_fat.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_fat.c' object='libgrub_a-fsys_fat.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`
--
--libgrub_a-fsys_ffs.o: fsys_ffs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ffs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo" -c -o libgrub_a-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo" "$(DEPDIR)/libgrub_a-fsys_ffs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ffs.c' object='libgrub_a-fsys_ffs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c
--
--libgrub_a-fsys_ffs.obj: fsys_ffs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ffs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo" -c -o libgrub_a-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo" "$(DEPDIR)/libgrub_a-fsys_ffs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ffs.c' object='libgrub_a-fsys_ffs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`
--
--libgrub_a-fsys_iso9660.o: fsys_iso9660.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_iso9660.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" -c -o libgrub_a-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" "$(DEPDIR)/libgrub_a-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_iso9660.c' object='libgrub_a-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c
--
--libgrub_a-fsys_iso9660.obj: fsys_iso9660.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_iso9660.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" -c -o libgrub_a-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" "$(DEPDIR)/libgrub_a-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_iso9660.c' object='libgrub_a-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`
--
--libgrub_a-fsys_jfs.o: fsys_jfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_jfs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo" -c -o libgrub_a-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_jfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_jfs.c' object='libgrub_a-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c
--
--libgrub_a-fsys_jfs.obj: fsys_jfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_jfs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo" -c -o libgrub_a-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_jfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_jfs.c' object='libgrub_a-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`
--
--libgrub_a-fsys_minix.o: fsys_minix.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_minix.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_minix.Tpo" -c -o libgrub_a-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_minix.Tpo" "$(DEPDIR)/libgrub_a-fsys_minix.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_minix.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_minix.c' object='libgrub_a-fsys_minix.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c
--
--libgrub_a-fsys_minix.obj: fsys_minix.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_minix.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_minix.Tpo" -c -o libgrub_a-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_minix.Tpo" "$(DEPDIR)/libgrub_a-fsys_minix.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_minix.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_minix.c' object='libgrub_a-fsys_minix.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`
--
--libgrub_a-fsys_reiserfs.o: fsys_reiserfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_reiserfs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo" -c -o libgrub_a-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_reiserfs.c' object='libgrub_a-fsys_reiserfs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c
--
--libgrub_a-fsys_reiserfs.obj: fsys_reiserfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_reiserfs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo" -c -o libgrub_a-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_reiserfs.c' object='libgrub_a-fsys_reiserfs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`
--
--libgrub_a-fsys_ufs2.o: fsys_ufs2.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ufs2.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo" -c -o libgrub_a-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo" "$(DEPDIR)/libgrub_a-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ufs2.c' object='libgrub_a-fsys_ufs2.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c
--
--libgrub_a-fsys_ufs2.obj: fsys_ufs2.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ufs2.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo" -c -o libgrub_a-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo" "$(DEPDIR)/libgrub_a-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ufs2.c' object='libgrub_a-fsys_ufs2.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`
--
--libgrub_a-fsys_vstafs.o: fsys_vstafs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_vstafs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo" -c -o libgrub_a-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo" "$(DEPDIR)/libgrub_a-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_vstafs.c' object='libgrub_a-fsys_vstafs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c
--
--libgrub_a-fsys_vstafs.obj: fsys_vstafs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_vstafs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo" -c -o libgrub_a-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo" "$(DEPDIR)/libgrub_a-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_vstafs.c' object='libgrub_a-fsys_vstafs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`
--
--libgrub_a-fsys_xfs.o: fsys_xfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_xfs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo" -c -o libgrub_a-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_xfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_xfs.c' object='libgrub_a-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c
--
--libgrub_a-fsys_xfs.obj: fsys_xfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_xfs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo" -c -o libgrub_a-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_xfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_xfs.c' object='libgrub_a-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`
--
--libgrub_a-gunzip.o: gunzip.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-gunzip.o -MD -MP -MF "$(DEPDIR)/libgrub_a-gunzip.Tpo" -c -o libgrub_a-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-gunzip.Tpo" "$(DEPDIR)/libgrub_a-gunzip.Po"; else rm -f "$(DEPDIR)/libgrub_a-gunzip.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='gunzip.c' object='libgrub_a-gunzip.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c
--
--libgrub_a-gunzip.obj: gunzip.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-gunzip.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-gunzip.Tpo" -c -o libgrub_a-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-gunzip.Tpo" "$(DEPDIR)/libgrub_a-gunzip.Po"; else rm -f "$(DEPDIR)/libgrub_a-gunzip.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='gunzip.c' object='libgrub_a-gunzip.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi`
--
--libgrub_a-md5.o: md5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-md5.o -MD -MP -MF "$(DEPDIR)/libgrub_a-md5.Tpo" -c -o libgrub_a-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-md5.Tpo" "$(DEPDIR)/libgrub_a-md5.Po"; else rm -f "$(DEPDIR)/libgrub_a-md5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='md5.c' object='libgrub_a-md5.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c
--
--libgrub_a-md5.obj: md5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-md5.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-md5.Tpo" -c -o libgrub_a-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-md5.Tpo" "$(DEPDIR)/libgrub_a-md5.Po"; else rm -f "$(DEPDIR)/libgrub_a-md5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='md5.c' object='libgrub_a-md5.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`
--
--libgrub_a-serial.o: serial.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-serial.o -MD -MP -MF "$(DEPDIR)/libgrub_a-serial.Tpo" -c -o libgrub_a-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-serial.Tpo" "$(DEPDIR)/libgrub_a-serial.Po"; else rm -f "$(DEPDIR)/libgrub_a-serial.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='serial.c' object='libgrub_a-serial.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c
--
--libgrub_a-serial.obj: serial.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-serial.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-serial.Tpo" -c -o libgrub_a-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-serial.Tpo" "$(DEPDIR)/libgrub_a-serial.Po"; else rm -f "$(DEPDIR)/libgrub_a-serial.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='serial.c' object='libgrub_a-serial.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi`
--
--libgrub_a-stage2.o: stage2.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-stage2.o -MD -MP -MF "$(DEPDIR)/libgrub_a-stage2.Tpo" -c -o libgrub_a-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-stage2.Tpo" "$(DEPDIR)/libgrub_a-stage2.Po"; else rm -f "$(DEPDIR)/libgrub_a-stage2.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage2.c' object='libgrub_a-stage2.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c
--
--libgrub_a-stage2.obj: stage2.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-stage2.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-stage2.Tpo" -c -o libgrub_a-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-stage2.Tpo" "$(DEPDIR)/libgrub_a-stage2.Po"; else rm -f "$(DEPDIR)/libgrub_a-stage2.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage2.c' object='libgrub_a-stage2.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi`
--
--libgrub_a-terminfo.o: terminfo.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-terminfo.o -MD -MP -MF "$(DEPDIR)/libgrub_a-terminfo.Tpo" -c -o libgrub_a-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-terminfo.Tpo" "$(DEPDIR)/libgrub_a-terminfo.Po"; else rm -f "$(DEPDIR)/libgrub_a-terminfo.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='terminfo.c' object='libgrub_a-terminfo.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c
--
--libgrub_a-terminfo.obj: terminfo.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-terminfo.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-terminfo.Tpo" -c -o libgrub_a-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-terminfo.Tpo" "$(DEPDIR)/libgrub_a-terminfo.Po"; else rm -f "$(DEPDIR)/libgrub_a-terminfo.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='terminfo.c' object='libgrub_a-terminfo.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi`
--
--libgrub_a-tparm.o: tparm.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-tparm.o -MD -MP -MF "$(DEPDIR)/libgrub_a-tparm.Tpo" -c -o libgrub_a-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-tparm.Tpo" "$(DEPDIR)/libgrub_a-tparm.Po"; else rm -f "$(DEPDIR)/libgrub_a-tparm.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='tparm.c' object='libgrub_a-tparm.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c
--
--libgrub_a-tparm.obj: tparm.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-tparm.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-tparm.Tpo" -c -o libgrub_a-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/libgrub_a-tparm.Tpo" "$(DEPDIR)/libgrub_a-tparm.Po"; else rm -f "$(DEPDIR)/libgrub_a-tparm.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='tparm.c' object='libgrub_a-tparm.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi`
--
--diskless_exec-bios.o: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-bios.o -MD -MP -MF "$(DEPDIR)/diskless_exec-bios.Tpo" -c -o diskless_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-bios.Tpo" "$(DEPDIR)/diskless_exec-bios.Po"; else rm -f "$(DEPDIR)/diskless_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='diskless_exec-bios.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c
--
--diskless_exec-bios.obj: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-bios.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-bios.Tpo" -c -o diskless_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-bios.Tpo" "$(DEPDIR)/diskless_exec-bios.Po"; else rm -f "$(DEPDIR)/diskless_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='diskless_exec-bios.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`
--
--diskless_exec-boot.o: boot.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-boot.o -MD -MP -MF "$(DEPDIR)/diskless_exec-boot.Tpo" -c -o diskless_exec-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-boot.Tpo" "$(DEPDIR)/diskless_exec-boot.Po"; else rm -f "$(DEPDIR)/diskless_exec-boot.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='boot.c' object='diskless_exec-boot.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c
--
--diskless_exec-boot.obj: boot.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-boot.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-boot.Tpo" -c -o diskless_exec-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-boot.Tpo" "$(DEPDIR)/diskless_exec-boot.Po"; else rm -f "$(DEPDIR)/diskless_exec-boot.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='boot.c' object='diskless_exec-boot.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi`
--
--diskless_exec-builtins.o: builtins.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-builtins.o -MD -MP -MF "$(DEPDIR)/diskless_exec-builtins.Tpo" -c -o diskless_exec-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-builtins.Tpo" "$(DEPDIR)/diskless_exec-builtins.Po"; else rm -f "$(DEPDIR)/diskless_exec-builtins.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='builtins.c' object='diskless_exec-builtins.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c
--
--diskless_exec-builtins.obj: builtins.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-builtins.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-builtins.Tpo" -c -o diskless_exec-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-builtins.Tpo" "$(DEPDIR)/diskless_exec-builtins.Po"; else rm -f "$(DEPDIR)/diskless_exec-builtins.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='builtins.c' object='diskless_exec-builtins.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi`
--
--diskless_exec-char_io.o: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-char_io.o -MD -MP -MF "$(DEPDIR)/diskless_exec-char_io.Tpo" -c -o diskless_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-char_io.Tpo" "$(DEPDIR)/diskless_exec-char_io.Po"; else rm -f "$(DEPDIR)/diskless_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='diskless_exec-char_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c
--
--diskless_exec-char_io.obj: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-char_io.Tpo" -c -o diskless_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-char_io.Tpo" "$(DEPDIR)/diskless_exec-char_io.Po"; else rm -f "$(DEPDIR)/diskless_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='diskless_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`
--
--diskless_exec-cmdline.o: cmdline.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-cmdline.o -MD -MP -MF "$(DEPDIR)/diskless_exec-cmdline.Tpo" -c -o diskless_exec-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-cmdline.Tpo" "$(DEPDIR)/diskless_exec-cmdline.Po"; else rm -f "$(DEPDIR)/diskless_exec-cmdline.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='cmdline.c' object='diskless_exec-cmdline.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c
--
--diskless_exec-cmdline.obj: cmdline.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-cmdline.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-cmdline.Tpo" -c -o diskless_exec-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-cmdline.Tpo" "$(DEPDIR)/diskless_exec-cmdline.Po"; else rm -f "$(DEPDIR)/diskless_exec-cmdline.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='cmdline.c' object='diskless_exec-cmdline.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi`
--
--diskless_exec-common.o: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-common.o -MD -MP -MF "$(DEPDIR)/diskless_exec-common.Tpo" -c -o diskless_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-common.Tpo" "$(DEPDIR)/diskless_exec-common.Po"; else rm -f "$(DEPDIR)/diskless_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='diskless_exec-common.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c
--
--diskless_exec-common.obj: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-common.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-common.Tpo" -c -o diskless_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-common.Tpo" "$(DEPDIR)/diskless_exec-common.Po"; else rm -f "$(DEPDIR)/diskless_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='diskless_exec-common.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`
--
--diskless_exec-console.o: console.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-console.o -MD -MP -MF "$(DEPDIR)/diskless_exec-console.Tpo" -c -o diskless_exec-console.o `test -f 'console.c' || echo '$(srcdir)/'`console.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-console.Tpo" "$(DEPDIR)/diskless_exec-console.Po"; else rm -f "$(DEPDIR)/diskless_exec-console.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='console.c' object='diskless_exec-console.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-console.o `test -f 'console.c' || echo '$(srcdir)/'`console.c
--
--diskless_exec-console.obj: console.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-console.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-console.Tpo" -c -o diskless_exec-console.obj `if test -f 'console.c'; then $(CYGPATH_W) 'console.c'; else $(CYGPATH_W) '$(srcdir)/console.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-console.Tpo" "$(DEPDIR)/diskless_exec-console.Po"; else rm -f "$(DEPDIR)/diskless_exec-console.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='console.c' object='diskless_exec-console.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-console.obj `if test -f 'console.c'; then $(CYGPATH_W) 'console.c'; else $(CYGPATH_W) '$(srcdir)/console.c'; fi`
--
--diskless_exec-disk_io.o: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/diskless_exec-disk_io.Tpo" -c -o diskless_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-disk_io.Tpo" "$(DEPDIR)/diskless_exec-disk_io.Po"; else rm -f "$(DEPDIR)/diskless_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='diskless_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c
--
--diskless_exec-disk_io.obj: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-disk_io.Tpo" -c -o diskless_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-disk_io.Tpo" "$(DEPDIR)/diskless_exec-disk_io.Po"; else rm -f "$(DEPDIR)/diskless_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='diskless_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`
--
--diskless_exec-fsys_ext2fs.o: fsys_ext2fs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ext2fs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo" -c -o diskless_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/diskless_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ext2fs.c' object='diskless_exec-fsys_ext2fs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c
--
--diskless_exec-fsys_ext2fs.obj: fsys_ext2fs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ext2fs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo" -c -o diskless_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/diskless_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ext2fs.c' object='diskless_exec-fsys_ext2fs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`
--
--diskless_exec-fsys_fat.o: fsys_fat.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_fat.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_fat.Tpo" -c -o diskless_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_fat.Tpo" "$(DEPDIR)/diskless_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_fat.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_fat.c' object='diskless_exec-fsys_fat.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c
--
--diskless_exec-fsys_fat.obj: fsys_fat.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_fat.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_fat.Tpo" -c -o diskless_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_fat.Tpo" "$(DEPDIR)/diskless_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_fat.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_fat.c' object='diskless_exec-fsys_fat.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`
--
--diskless_exec-fsys_ffs.o: fsys_ffs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ffs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo" -c -o diskless_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo" "$(DEPDIR)/diskless_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ffs.c' object='diskless_exec-fsys_ffs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c
--
--diskless_exec-fsys_ffs.obj: fsys_ffs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ffs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo" -c -o diskless_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo" "$(DEPDIR)/diskless_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ffs.c' object='diskless_exec-fsys_ffs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`
--
--diskless_exec-fsys_iso9660.o: fsys_iso9660.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_iso9660.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" -c -o diskless_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" "$(DEPDIR)/diskless_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_iso9660.c' object='diskless_exec-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c
--
--diskless_exec-fsys_iso9660.obj: fsys_iso9660.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_iso9660.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" -c -o diskless_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" "$(DEPDIR)/diskless_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_iso9660.c' object='diskless_exec-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`
--
--diskless_exec-fsys_jfs.o: fsys_jfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_jfs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo" -c -o diskless_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_jfs.c' object='diskless_exec-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c
--
--diskless_exec-fsys_jfs.obj: fsys_jfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_jfs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo" -c -o diskless_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_jfs.c' object='diskless_exec-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`
--
--diskless_exec-fsys_minix.o: fsys_minix.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_minix.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_minix.Tpo" -c -o diskless_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_minix.Tpo" "$(DEPDIR)/diskless_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_minix.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_minix.c' object='diskless_exec-fsys_minix.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c
--
--diskless_exec-fsys_minix.obj: fsys_minix.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_minix.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_minix.Tpo" -c -o diskless_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_minix.Tpo" "$(DEPDIR)/diskless_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_minix.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_minix.c' object='diskless_exec-fsys_minix.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`
--
--diskless_exec-fsys_reiserfs.o: fsys_reiserfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_reiserfs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo" -c -o diskless_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_reiserfs.c' object='diskless_exec-fsys_reiserfs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c
--
--diskless_exec-fsys_reiserfs.obj: fsys_reiserfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_reiserfs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo" -c -o diskless_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_reiserfs.c' object='diskless_exec-fsys_reiserfs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`
--
--diskless_exec-fsys_ufs2.o: fsys_ufs2.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ufs2.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo" -c -o diskless_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo" "$(DEPDIR)/diskless_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ufs2.c' object='diskless_exec-fsys_ufs2.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c
--
--diskless_exec-fsys_ufs2.obj: fsys_ufs2.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ufs2.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo" -c -o diskless_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo" "$(DEPDIR)/diskless_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ufs2.c' object='diskless_exec-fsys_ufs2.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`
--
--diskless_exec-fsys_vstafs.o: fsys_vstafs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_vstafs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo" -c -o diskless_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo" "$(DEPDIR)/diskless_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_vstafs.c' object='diskless_exec-fsys_vstafs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c
--
--diskless_exec-fsys_vstafs.obj: fsys_vstafs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_vstafs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo" -c -o diskless_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo" "$(DEPDIR)/diskless_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_vstafs.c' object='diskless_exec-fsys_vstafs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`
--
--diskless_exec-fsys_xfs.o: fsys_xfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_xfs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo" -c -o diskless_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_xfs.c' object='diskless_exec-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c
--
--diskless_exec-fsys_xfs.obj: fsys_xfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_xfs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo" -c -o diskless_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_xfs.c' object='diskless_exec-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`
--
--diskless_exec-gunzip.o: gunzip.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-gunzip.o -MD -MP -MF "$(DEPDIR)/diskless_exec-gunzip.Tpo" -c -o diskless_exec-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-gunzip.Tpo" "$(DEPDIR)/diskless_exec-gunzip.Po"; else rm -f "$(DEPDIR)/diskless_exec-gunzip.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='gunzip.c' object='diskless_exec-gunzip.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c
--
--diskless_exec-gunzip.obj: gunzip.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-gunzip.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-gunzip.Tpo" -c -o diskless_exec-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-gunzip.Tpo" "$(DEPDIR)/diskless_exec-gunzip.Po"; else rm -f "$(DEPDIR)/diskless_exec-gunzip.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='gunzip.c' object='diskless_exec-gunzip.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi`
--
--diskless_exec-hercules.o: hercules.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-hercules.o -MD -MP -MF "$(DEPDIR)/diskless_exec-hercules.Tpo" -c -o diskless_exec-hercules.o `test -f 'hercules.c' || echo '$(srcdir)/'`hercules.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-hercules.Tpo" "$(DEPDIR)/diskless_exec-hercules.Po"; else rm -f "$(DEPDIR)/diskless_exec-hercules.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='hercules.c' object='diskless_exec-hercules.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-hercules.o `test -f 'hercules.c' || echo '$(srcdir)/'`hercules.c
--
--diskless_exec-hercules.obj: hercules.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-hercules.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-hercules.Tpo" -c -o diskless_exec-hercules.obj `if test -f 'hercules.c'; then $(CYGPATH_W) 'hercules.c'; else $(CYGPATH_W) '$(srcdir)/hercules.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-hercules.Tpo" "$(DEPDIR)/diskless_exec-hercules.Po"; else rm -f "$(DEPDIR)/diskless_exec-hercules.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='hercules.c' object='diskless_exec-hercules.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-hercules.obj `if test -f 'hercules.c'; then $(CYGPATH_W) 'hercules.c'; else $(CYGPATH_W) '$(srcdir)/hercules.c'; fi`
--
--diskless_exec-md5.o: md5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-md5.o -MD -MP -MF "$(DEPDIR)/diskless_exec-md5.Tpo" -c -o diskless_exec-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-md5.Tpo" "$(DEPDIR)/diskless_exec-md5.Po"; else rm -f "$(DEPDIR)/diskless_exec-md5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='md5.c' object='diskless_exec-md5.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c
--
--diskless_exec-md5.obj: md5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-md5.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-md5.Tpo" -c -o diskless_exec-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-md5.Tpo" "$(DEPDIR)/diskless_exec-md5.Po"; else rm -f "$(DEPDIR)/diskless_exec-md5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='md5.c' object='diskless_exec-md5.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`
--
--diskless_exec-serial.o: serial.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-serial.o -MD -MP -MF "$(DEPDIR)/diskless_exec-serial.Tpo" -c -o diskless_exec-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-serial.Tpo" "$(DEPDIR)/diskless_exec-serial.Po"; else rm -f "$(DEPDIR)/diskless_exec-serial.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='serial.c' object='diskless_exec-serial.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c
--
--diskless_exec-serial.obj: serial.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-serial.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-serial.Tpo" -c -o diskless_exec-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-serial.Tpo" "$(DEPDIR)/diskless_exec-serial.Po"; else rm -f "$(DEPDIR)/diskless_exec-serial.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='serial.c' object='diskless_exec-serial.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi`
--
--diskless_exec-smp-imps.o: smp-imps.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-smp-imps.o -MD -MP -MF "$(DEPDIR)/diskless_exec-smp-imps.Tpo" -c -o diskless_exec-smp-imps.o `test -f 'smp-imps.c' || echo '$(srcdir)/'`smp-imps.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-smp-imps.Tpo" "$(DEPDIR)/diskless_exec-smp-imps.Po"; else rm -f "$(DEPDIR)/diskless_exec-smp-imps.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='smp-imps.c' object='diskless_exec-smp-imps.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-smp-imps.o `test -f 'smp-imps.c' || echo '$(srcdir)/'`smp-imps.c
--
--diskless_exec-smp-imps.obj: smp-imps.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-smp-imps.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-smp-imps.Tpo" -c -o diskless_exec-smp-imps.obj `if test -f 'smp-imps.c'; then $(CYGPATH_W) 'smp-imps.c'; else $(CYGPATH_W) '$(srcdir)/smp-imps.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-smp-imps.Tpo" "$(DEPDIR)/diskless_exec-smp-imps.Po"; else rm -f "$(DEPDIR)/diskless_exec-smp-imps.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='smp-imps.c' object='diskless_exec-smp-imps.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-smp-imps.obj `if test -f 'smp-imps.c'; then $(CYGPATH_W) 'smp-imps.c'; else $(CYGPATH_W) '$(srcdir)/smp-imps.c'; fi`
--
--diskless_exec-stage2.o: stage2.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-stage2.o -MD -MP -MF "$(DEPDIR)/diskless_exec-stage2.Tpo" -c -o diskless_exec-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-stage2.Tpo" "$(DEPDIR)/diskless_exec-stage2.Po"; else rm -f "$(DEPDIR)/diskless_exec-stage2.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage2.c' object='diskless_exec-stage2.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c
--
--diskless_exec-stage2.obj: stage2.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-stage2.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-stage2.Tpo" -c -o diskless_exec-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-stage2.Tpo" "$(DEPDIR)/diskless_exec-stage2.Po"; else rm -f "$(DEPDIR)/diskless_exec-stage2.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage2.c' object='diskless_exec-stage2.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi`
--
--diskless_exec-terminfo.o: terminfo.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-terminfo.o -MD -MP -MF "$(DEPDIR)/diskless_exec-terminfo.Tpo" -c -o diskless_exec-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-terminfo.Tpo" "$(DEPDIR)/diskless_exec-terminfo.Po"; else rm -f "$(DEPDIR)/diskless_exec-terminfo.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='terminfo.c' object='diskless_exec-terminfo.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c
--
--diskless_exec-terminfo.obj: terminfo.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-terminfo.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-terminfo.Tpo" -c -o diskless_exec-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-terminfo.Tpo" "$(DEPDIR)/diskless_exec-terminfo.Po"; else rm -f "$(DEPDIR)/diskless_exec-terminfo.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='terminfo.c' object='diskless_exec-terminfo.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi`
--
--diskless_exec-tparm.o: tparm.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-tparm.o -MD -MP -MF "$(DEPDIR)/diskless_exec-tparm.Tpo" -c -o diskless_exec-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-tparm.Tpo" "$(DEPDIR)/diskless_exec-tparm.Po"; else rm -f "$(DEPDIR)/diskless_exec-tparm.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='tparm.c' object='diskless_exec-tparm.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c
--
--diskless_exec-tparm.obj: tparm.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-tparm.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-tparm.Tpo" -c -o diskless_exec-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/diskless_exec-tparm.Tpo" "$(DEPDIR)/diskless_exec-tparm.Po"; else rm -f "$(DEPDIR)/diskless_exec-tparm.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='tparm.c' object='diskless_exec-tparm.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi`
--
--e2fs_stage1_5_exec-common.o: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo" -c -o e2fs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='e2fs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c
--
--e2fs_stage1_5_exec-common.obj: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo" -c -o e2fs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='e2fs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`
--
--e2fs_stage1_5_exec-char_io.o: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo" -c -o e2fs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='e2fs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c
--
--e2fs_stage1_5_exec-char_io.obj: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo" -c -o e2fs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='e2fs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`
--
--e2fs_stage1_5_exec-disk_io.o: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo" -c -o e2fs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='e2fs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c
--
--e2fs_stage1_5_exec-disk_io.obj: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo" -c -o e2fs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='e2fs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`
--
--e2fs_stage1_5_exec-stage1_5.o: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo" -c -o e2fs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='e2fs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c
--
--e2fs_stage1_5_exec-stage1_5.obj: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo" -c -o e2fs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='e2fs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`
--
--e2fs_stage1_5_exec-fsys_ext2fs.o: fsys_ext2fs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-fsys_ext2fs.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo" -c -o e2fs_stage1_5_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ext2fs.c' object='e2fs_stage1_5_exec-fsys_ext2fs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c
--
--e2fs_stage1_5_exec-fsys_ext2fs.obj: fsys_ext2fs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-fsys_ext2fs.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo" -c -o e2fs_stage1_5_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ext2fs.c' object='e2fs_stage1_5_exec-fsys_ext2fs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`
--
--e2fs_stage1_5_exec-bios.o: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo" -c -o e2fs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='e2fs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c
--
--e2fs_stage1_5_exec-bios.obj: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo" -c -o e2fs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='e2fs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`
--
--fat_stage1_5_exec-common.o: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-common.Tpo" -c -o fat_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/fat_stage1_5_exec-common.Tpo" "$(DEPDIR)/fat_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='fat_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c
--
--fat_stage1_5_exec-common.obj: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-common.Tpo" -c -o fat_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/fat_stage1_5_exec-common.Tpo" "$(DEPDIR)/fat_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='fat_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`
--
--fat_stage1_5_exec-char_io.o: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo" -c -o fat_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/fat_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='fat_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c
--
--fat_stage1_5_exec-char_io.obj: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo" -c -o fat_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/fat_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='fat_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`
--
--fat_stage1_5_exec-disk_io.o: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo" -c -o fat_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/fat_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='fat_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c
--
--fat_stage1_5_exec-disk_io.obj: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo" -c -o fat_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/fat_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='fat_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`
--
--fat_stage1_5_exec-stage1_5.o: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo" -c -o fat_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='fat_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c
--
--fat_stage1_5_exec-stage1_5.obj: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo" -c -o fat_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='fat_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`
--
--fat_stage1_5_exec-fsys_fat.o: fsys_fat.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-fsys_fat.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo" -c -o fat_stage1_5_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo" "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_fat.c' object='fat_stage1_5_exec-fsys_fat.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c
--
--fat_stage1_5_exec-fsys_fat.obj: fsys_fat.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-fsys_fat.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo" -c -o fat_stage1_5_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo" "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_fat.c' object='fat_stage1_5_exec-fsys_fat.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`
--
--fat_stage1_5_exec-bios.o: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo" -c -o fat_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo" "$(DEPDIR)/fat_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='fat_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c
--
--fat_stage1_5_exec-bios.obj: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo" -c -o fat_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo" "$(DEPDIR)/fat_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='fat_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`
--
--ffs_stage1_5_exec-common.o: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo" -c -o ffs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='ffs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c
--
--ffs_stage1_5_exec-common.obj: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo" -c -o ffs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='ffs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`
--
--ffs_stage1_5_exec-char_io.o: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo" -c -o ffs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='ffs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c
--
--ffs_stage1_5_exec-char_io.obj: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo" -c -o ffs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='ffs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`
--
--ffs_stage1_5_exec-disk_io.o: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo" -c -o ffs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='ffs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c
--
--ffs_stage1_5_exec-disk_io.obj: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo" -c -o ffs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='ffs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`
--
--ffs_stage1_5_exec-stage1_5.o: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo" -c -o ffs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='ffs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c
--
--ffs_stage1_5_exec-stage1_5.obj: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo" -c -o ffs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='ffs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`
--
--ffs_stage1_5_exec-fsys_ffs.o: fsys_ffs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-fsys_ffs.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo" -c -o ffs_stage1_5_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ffs.c' object='ffs_stage1_5_exec-fsys_ffs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c
--
--ffs_stage1_5_exec-fsys_ffs.obj: fsys_ffs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-fsys_ffs.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo" -c -o ffs_stage1_5_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ffs.c' object='ffs_stage1_5_exec-fsys_ffs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`
--
--ffs_stage1_5_exec-bios.o: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo" -c -o ffs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='ffs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c
--
--ffs_stage1_5_exec-bios.obj: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo" -c -o ffs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='ffs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`
--
--iso9660_stage1_5_exec-common.o: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" -c -o iso9660_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='iso9660_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c
--
--iso9660_stage1_5_exec-common.obj: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" -c -o iso9660_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='iso9660_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`
--
--iso9660_stage1_5_exec-char_io.o: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" -c -o iso9660_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='iso9660_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c
--
--iso9660_stage1_5_exec-char_io.obj: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" -c -o iso9660_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='iso9660_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`
--
--iso9660_stage1_5_exec-disk_io.o: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" -c -o iso9660_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='iso9660_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c
--
--iso9660_stage1_5_exec-disk_io.obj: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" -c -o iso9660_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='iso9660_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`
--
--iso9660_stage1_5_exec-stage1_5.o: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" -c -o iso9660_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='iso9660_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c
--
--iso9660_stage1_5_exec-stage1_5.obj: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" -c -o iso9660_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='iso9660_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`
--
--iso9660_stage1_5_exec-fsys_iso9660.o: fsys_iso9660.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-fsys_iso9660.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" -c -o iso9660_stage1_5_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_iso9660.c' object='iso9660_stage1_5_exec-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c
--
--iso9660_stage1_5_exec-fsys_iso9660.obj: fsys_iso9660.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-fsys_iso9660.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" -c -o iso9660_stage1_5_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_iso9660.c' object='iso9660_stage1_5_exec-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`
--
--iso9660_stage1_5_exec-bios.o: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" -c -o iso9660_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='iso9660_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c
--
--iso9660_stage1_5_exec-bios.obj: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" -c -o iso9660_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='iso9660_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`
--
--jfs_stage1_5_exec-common.o: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo" -c -o jfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='jfs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c
--
--jfs_stage1_5_exec-common.obj: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo" -c -o jfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='jfs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`
--
--jfs_stage1_5_exec-char_io.o: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo" -c -o jfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='jfs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c
--
--jfs_stage1_5_exec-char_io.obj: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo" -c -o jfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='jfs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`
--
--jfs_stage1_5_exec-disk_io.o: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo" -c -o jfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='jfs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c
--
--jfs_stage1_5_exec-disk_io.obj: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo" -c -o jfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='jfs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`
--
--jfs_stage1_5_exec-stage1_5.o: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo" -c -o jfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='jfs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c
--
--jfs_stage1_5_exec-stage1_5.obj: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo" -c -o jfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='jfs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`
--
--jfs_stage1_5_exec-fsys_jfs.o: fsys_jfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-fsys_jfs.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo" -c -o jfs_stage1_5_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_jfs.c' object='jfs_stage1_5_exec-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c
--
--jfs_stage1_5_exec-fsys_jfs.obj: fsys_jfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-fsys_jfs.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo" -c -o jfs_stage1_5_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_jfs.c' object='jfs_stage1_5_exec-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`
--
--jfs_stage1_5_exec-bios.o: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo" -c -o jfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='jfs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c
--
--jfs_stage1_5_exec-bios.obj: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo" -c -o jfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='jfs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`
--
--minix_stage1_5_exec-common.o: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-common.Tpo" -c -o minix_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/minix_stage1_5_exec-common.Tpo" "$(DEPDIR)/minix_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='minix_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c
--
--minix_stage1_5_exec-common.obj: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-common.Tpo" -c -o minix_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/minix_stage1_5_exec-common.Tpo" "$(DEPDIR)/minix_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='minix_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`
--
--minix_stage1_5_exec-char_io.o: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo" -c -o minix_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/minix_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='minix_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c
--
--minix_stage1_5_exec-char_io.obj: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo" -c -o minix_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/minix_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='minix_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`
--
--minix_stage1_5_exec-disk_io.o: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo" -c -o minix_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/minix_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='minix_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c
--
--minix_stage1_5_exec-disk_io.obj: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo" -c -o minix_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/minix_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='minix_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`
--
--minix_stage1_5_exec-stage1_5.o: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo" -c -o minix_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='minix_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c
--
--minix_stage1_5_exec-stage1_5.obj: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo" -c -o minix_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='minix_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`
--
--minix_stage1_5_exec-fsys_minix.o: fsys_minix.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-fsys_minix.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo" -c -o minix_stage1_5_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo" "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_minix.c' object='minix_stage1_5_exec-fsys_minix.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c
--
--minix_stage1_5_exec-fsys_minix.obj: fsys_minix.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-fsys_minix.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo" -c -o minix_stage1_5_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo" "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_minix.c' object='minix_stage1_5_exec-fsys_minix.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`
--
--minix_stage1_5_exec-bios.o: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo" -c -o minix_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo" "$(DEPDIR)/minix_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='minix_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c
--
--minix_stage1_5_exec-bios.obj: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo" -c -o minix_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo" "$(DEPDIR)/minix_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='minix_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`
--
--pre_stage2_exec-bios.o: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-bios.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-bios.Tpo" -c -o pre_stage2_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-bios.Tpo" "$(DEPDIR)/pre_stage2_exec-bios.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='pre_stage2_exec-bios.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c
--
--pre_stage2_exec-bios.obj: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-bios.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-bios.Tpo" -c -o pre_stage2_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-bios.Tpo" "$(DEPDIR)/pre_stage2_exec-bios.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='pre_stage2_exec-bios.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`
--
--pre_stage2_exec-boot.o: boot.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-boot.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-boot.Tpo" -c -o pre_stage2_exec-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-boot.Tpo" "$(DEPDIR)/pre_stage2_exec-boot.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-boot.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='boot.c' object='pre_stage2_exec-boot.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c
--
--pre_stage2_exec-boot.obj: boot.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-boot.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-boot.Tpo" -c -o pre_stage2_exec-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-boot.Tpo" "$(DEPDIR)/pre_stage2_exec-boot.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-boot.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='boot.c' object='pre_stage2_exec-boot.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi`
--
--pre_stage2_exec-builtins.o: builtins.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-builtins.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-builtins.Tpo" -c -o pre_stage2_exec-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-builtins.Tpo" "$(DEPDIR)/pre_stage2_exec-builtins.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-builtins.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='builtins.c' object='pre_stage2_exec-builtins.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c
--
--pre_stage2_exec-builtins.obj: builtins.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-builtins.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-builtins.Tpo" -c -o pre_stage2_exec-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-builtins.Tpo" "$(DEPDIR)/pre_stage2_exec-builtins.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-builtins.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='builtins.c' object='pre_stage2_exec-builtins.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi`
--
--pre_stage2_exec-char_io.o: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-char_io.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-char_io.Tpo" -c -o pre_stage2_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-char_io.Tpo" "$(DEPDIR)/pre_stage2_exec-char_io.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='pre_stage2_exec-char_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c
--
--pre_stage2_exec-char_io.obj: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-char_io.Tpo" -c -o pre_stage2_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-char_io.Tpo" "$(DEPDIR)/pre_stage2_exec-char_io.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='pre_stage2_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`
--
--pre_stage2_exec-cmdline.o: cmdline.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-cmdline.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo" -c -o pre_stage2_exec-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo" "$(DEPDIR)/pre_stage2_exec-cmdline.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='cmdline.c' object='pre_stage2_exec-cmdline.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c
--
--pre_stage2_exec-cmdline.obj: cmdline.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-cmdline.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo" -c -o pre_stage2_exec-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo" "$(DEPDIR)/pre_stage2_exec-cmdline.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='cmdline.c' object='pre_stage2_exec-cmdline.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi`
--
--pre_stage2_exec-common.o: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-common.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-common.Tpo" -c -o pre_stage2_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-common.Tpo" "$(DEPDIR)/pre_stage2_exec-common.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='pre_stage2_exec-common.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c
--
--pre_stage2_exec-common.obj: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-common.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-common.Tpo" -c -o pre_stage2_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-common.Tpo" "$(DEPDIR)/pre_stage2_exec-common.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='pre_stage2_exec-common.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`
--
--pre_stage2_exec-console.o: console.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-console.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-console.Tpo" -c -o pre_stage2_exec-console.o `test -f 'console.c' || echo '$(srcdir)/'`console.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-console.Tpo" "$(DEPDIR)/pre_stage2_exec-console.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-console.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='console.c' object='pre_stage2_exec-console.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-console.o `test -f 'console.c' || echo '$(srcdir)/'`console.c
--
--pre_stage2_exec-console.obj: console.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-console.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-console.Tpo" -c -o pre_stage2_exec-console.obj `if test -f 'console.c'; then $(CYGPATH_W) 'console.c'; else $(CYGPATH_W) '$(srcdir)/console.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-console.Tpo" "$(DEPDIR)/pre_stage2_exec-console.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-console.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='console.c' object='pre_stage2_exec-console.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-console.obj `if test -f 'console.c'; then $(CYGPATH_W) 'console.c'; else $(CYGPATH_W) '$(srcdir)/console.c'; fi`
--
--pre_stage2_exec-disk_io.o: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo" -c -o pre_stage2_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo" "$(DEPDIR)/pre_stage2_exec-disk_io.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='pre_stage2_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c
--
--pre_stage2_exec-disk_io.obj: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo" -c -o pre_stage2_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo" "$(DEPDIR)/pre_stage2_exec-disk_io.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='pre_stage2_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`
--
--pre_stage2_exec-fsys_ext2fs.o: fsys_ext2fs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ext2fs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo" -c -o pre_stage2_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ext2fs.c' object='pre_stage2_exec-fsys_ext2fs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c
--
--pre_stage2_exec-fsys_ext2fs.obj: fsys_ext2fs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ext2fs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo" -c -o pre_stage2_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ext2fs.c' object='pre_stage2_exec-fsys_ext2fs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`
--
--pre_stage2_exec-fsys_fat.o: fsys_fat.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_fat.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo" -c -o pre_stage2_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_fat.c' object='pre_stage2_exec-fsys_fat.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c
--
--pre_stage2_exec-fsys_fat.obj: fsys_fat.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_fat.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo" -c -o pre_stage2_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_fat.c' object='pre_stage2_exec-fsys_fat.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`
--
--pre_stage2_exec-fsys_ffs.o: fsys_ffs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ffs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo" -c -o pre_stage2_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ffs.c' object='pre_stage2_exec-fsys_ffs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c
--
--pre_stage2_exec-fsys_ffs.obj: fsys_ffs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ffs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo" -c -o pre_stage2_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ffs.c' object='pre_stage2_exec-fsys_ffs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`
--
--pre_stage2_exec-fsys_iso9660.o: fsys_iso9660.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_iso9660.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" -c -o pre_stage2_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_iso9660.c' object='pre_stage2_exec-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c
--
--pre_stage2_exec-fsys_iso9660.obj: fsys_iso9660.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_iso9660.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" -c -o pre_stage2_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_iso9660.c' object='pre_stage2_exec-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`
--
--pre_stage2_exec-fsys_jfs.o: fsys_jfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_jfs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo" -c -o pre_stage2_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_jfs.c' object='pre_stage2_exec-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c
--
--pre_stage2_exec-fsys_jfs.obj: fsys_jfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_jfs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo" -c -o pre_stage2_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_jfs.c' object='pre_stage2_exec-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`
--
--pre_stage2_exec-fsys_minix.o: fsys_minix.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_minix.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo" -c -o pre_stage2_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_minix.c' object='pre_stage2_exec-fsys_minix.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c
--
--pre_stage2_exec-fsys_minix.obj: fsys_minix.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_minix.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo" -c -o pre_stage2_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_minix.c' object='pre_stage2_exec-fsys_minix.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`
--
--pre_stage2_exec-fsys_reiserfs.o: fsys_reiserfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_reiserfs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo" -c -o pre_stage2_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_reiserfs.c' object='pre_stage2_exec-fsys_reiserfs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c
--
--pre_stage2_exec-fsys_reiserfs.obj: fsys_reiserfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_reiserfs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo" -c -o pre_stage2_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_reiserfs.c' object='pre_stage2_exec-fsys_reiserfs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`
--
--pre_stage2_exec-fsys_ufs2.o: fsys_ufs2.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ufs2.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo" -c -o pre_stage2_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ufs2.c' object='pre_stage2_exec-fsys_ufs2.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c
--
--pre_stage2_exec-fsys_ufs2.obj: fsys_ufs2.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ufs2.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo" -c -o pre_stage2_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ufs2.c' object='pre_stage2_exec-fsys_ufs2.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`
--
--pre_stage2_exec-fsys_vstafs.o: fsys_vstafs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_vstafs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo" -c -o pre_stage2_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_vstafs.c' object='pre_stage2_exec-fsys_vstafs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c
--
--pre_stage2_exec-fsys_vstafs.obj: fsys_vstafs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_vstafs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo" -c -o pre_stage2_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_vstafs.c' object='pre_stage2_exec-fsys_vstafs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`
--
--pre_stage2_exec-fsys_xfs.o: fsys_xfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_xfs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo" -c -o pre_stage2_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_xfs.c' object='pre_stage2_exec-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c
--
--pre_stage2_exec-fsys_xfs.obj: fsys_xfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_xfs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo" -c -o pre_stage2_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_xfs.c' object='pre_stage2_exec-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`
--
--pre_stage2_exec-gunzip.o: gunzip.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-gunzip.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo" -c -o pre_stage2_exec-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo" "$(DEPDIR)/pre_stage2_exec-gunzip.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='gunzip.c' object='pre_stage2_exec-gunzip.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c
--
--pre_stage2_exec-gunzip.obj: gunzip.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-gunzip.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo" -c -o pre_stage2_exec-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo" "$(DEPDIR)/pre_stage2_exec-gunzip.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='gunzip.c' object='pre_stage2_exec-gunzip.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi`
--
--pre_stage2_exec-hercules.o: hercules.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-hercules.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-hercules.Tpo" -c -o pre_stage2_exec-hercules.o `test -f 'hercules.c' || echo '$(srcdir)/'`hercules.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-hercules.Tpo" "$(DEPDIR)/pre_stage2_exec-hercules.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-hercules.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='hercules.c' object='pre_stage2_exec-hercules.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-hercules.o `test -f 'hercules.c' || echo '$(srcdir)/'`hercules.c
--
--pre_stage2_exec-hercules.obj: hercules.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-hercules.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-hercules.Tpo" -c -o pre_stage2_exec-hercules.obj `if test -f 'hercules.c'; then $(CYGPATH_W) 'hercules.c'; else $(CYGPATH_W) '$(srcdir)/hercules.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-hercules.Tpo" "$(DEPDIR)/pre_stage2_exec-hercules.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-hercules.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='hercules.c' object='pre_stage2_exec-hercules.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-hercules.obj `if test -f 'hercules.c'; then $(CYGPATH_W) 'hercules.c'; else $(CYGPATH_W) '$(srcdir)/hercules.c'; fi`
--
--pre_stage2_exec-md5.o: md5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-md5.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-md5.Tpo" -c -o pre_stage2_exec-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-md5.Tpo" "$(DEPDIR)/pre_stage2_exec-md5.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-md5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='md5.c' object='pre_stage2_exec-md5.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c
--
--pre_stage2_exec-md5.obj: md5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-md5.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-md5.Tpo" -c -o pre_stage2_exec-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-md5.Tpo" "$(DEPDIR)/pre_stage2_exec-md5.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-md5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='md5.c' object='pre_stage2_exec-md5.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`
--
--pre_stage2_exec-serial.o: serial.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-serial.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-serial.Tpo" -c -o pre_stage2_exec-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-serial.Tpo" "$(DEPDIR)/pre_stage2_exec-serial.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-serial.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='serial.c' object='pre_stage2_exec-serial.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c
--
--pre_stage2_exec-serial.obj: serial.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-serial.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-serial.Tpo" -c -o pre_stage2_exec-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-serial.Tpo" "$(DEPDIR)/pre_stage2_exec-serial.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-serial.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='serial.c' object='pre_stage2_exec-serial.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi`
--
--pre_stage2_exec-smp-imps.o: smp-imps.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-smp-imps.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo" -c -o pre_stage2_exec-smp-imps.o `test -f 'smp-imps.c' || echo '$(srcdir)/'`smp-imps.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo" "$(DEPDIR)/pre_stage2_exec-smp-imps.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='smp-imps.c' object='pre_stage2_exec-smp-imps.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-smp-imps.o `test -f 'smp-imps.c' || echo '$(srcdir)/'`smp-imps.c
--
--pre_stage2_exec-smp-imps.obj: smp-imps.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-smp-imps.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo" -c -o pre_stage2_exec-smp-imps.obj `if test -f 'smp-imps.c'; then $(CYGPATH_W) 'smp-imps.c'; else $(CYGPATH_W) '$(srcdir)/smp-imps.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo" "$(DEPDIR)/pre_stage2_exec-smp-imps.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='smp-imps.c' object='pre_stage2_exec-smp-imps.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-smp-imps.obj `if test -f 'smp-imps.c'; then $(CYGPATH_W) 'smp-imps.c'; else $(CYGPATH_W) '$(srcdir)/smp-imps.c'; fi`
--
--pre_stage2_exec-stage2.o: stage2.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-stage2.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-stage2.Tpo" -c -o pre_stage2_exec-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-stage2.Tpo" "$(DEPDIR)/pre_stage2_exec-stage2.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-stage2.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage2.c' object='pre_stage2_exec-stage2.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c
--
--pre_stage2_exec-stage2.obj: stage2.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-stage2.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-stage2.Tpo" -c -o pre_stage2_exec-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-stage2.Tpo" "$(DEPDIR)/pre_stage2_exec-stage2.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-stage2.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage2.c' object='pre_stage2_exec-stage2.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi`
--
--pre_stage2_exec-terminfo.o: terminfo.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-terminfo.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo" -c -o pre_stage2_exec-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo" "$(DEPDIR)/pre_stage2_exec-terminfo.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='terminfo.c' object='pre_stage2_exec-terminfo.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c
--
--pre_stage2_exec-terminfo.obj: terminfo.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-terminfo.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo" -c -o pre_stage2_exec-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo" "$(DEPDIR)/pre_stage2_exec-terminfo.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='terminfo.c' object='pre_stage2_exec-terminfo.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi`
--
--pre_stage2_exec-tparm.o: tparm.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-tparm.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-tparm.Tpo" -c -o pre_stage2_exec-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-tparm.Tpo" "$(DEPDIR)/pre_stage2_exec-tparm.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-tparm.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='tparm.c' object='pre_stage2_exec-tparm.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c
--
--pre_stage2_exec-tparm.obj: tparm.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-tparm.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-tparm.Tpo" -c -o pre_stage2_exec-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/pre_stage2_exec-tparm.Tpo" "$(DEPDIR)/pre_stage2_exec-tparm.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-tparm.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='tparm.c' object='pre_stage2_exec-tparm.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi`
--
--reiserfs_stage1_5_exec-common.o: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo" -c -o reiserfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='reiserfs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c
--
--reiserfs_stage1_5_exec-common.obj: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo" -c -o reiserfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='reiserfs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`
--
--reiserfs_stage1_5_exec-char_io.o: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo" -c -o reiserfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='reiserfs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c
--
--reiserfs_stage1_5_exec-char_io.obj: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo" -c -o reiserfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='reiserfs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`
--
--reiserfs_stage1_5_exec-disk_io.o: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo" -c -o reiserfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='reiserfs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c
--
--reiserfs_stage1_5_exec-disk_io.obj: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo" -c -o reiserfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='reiserfs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`
--
--reiserfs_stage1_5_exec-stage1_5.o: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo" -c -o reiserfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='reiserfs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c
--
--reiserfs_stage1_5_exec-stage1_5.obj: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo" -c -o reiserfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='reiserfs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`
--
--reiserfs_stage1_5_exec-fsys_reiserfs.o: fsys_reiserfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-fsys_reiserfs.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo" -c -o reiserfs_stage1_5_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_reiserfs.c' object='reiserfs_stage1_5_exec-fsys_reiserfs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c
--
--reiserfs_stage1_5_exec-fsys_reiserfs.obj: fsys_reiserfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-fsys_reiserfs.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo" -c -o reiserfs_stage1_5_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_reiserfs.c' object='reiserfs_stage1_5_exec-fsys_reiserfs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`
--
--reiserfs_stage1_5_exec-bios.o: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo" -c -o reiserfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='reiserfs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c
--
--reiserfs_stage1_5_exec-bios.obj: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo" -c -o reiserfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='reiserfs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`
--
--ufs2_stage1_5_exec-common.o: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo" -c -o ufs2_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='ufs2_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c
--
--ufs2_stage1_5_exec-common.obj: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo" -c -o ufs2_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='ufs2_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`
--
--ufs2_stage1_5_exec-char_io.o: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo" -c -o ufs2_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='ufs2_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c
--
--ufs2_stage1_5_exec-char_io.obj: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo" -c -o ufs2_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='ufs2_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`
--
--ufs2_stage1_5_exec-disk_io.o: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo" -c -o ufs2_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='ufs2_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c
--
--ufs2_stage1_5_exec-disk_io.obj: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo" -c -o ufs2_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='ufs2_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`
--
--ufs2_stage1_5_exec-stage1_5.o: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo" -c -o ufs2_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='ufs2_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c
--
--ufs2_stage1_5_exec-stage1_5.obj: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo" -c -o ufs2_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='ufs2_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`
--
--ufs2_stage1_5_exec-fsys_ufs2.o: fsys_ufs2.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-fsys_ufs2.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo" -c -o ufs2_stage1_5_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ufs2.c' object='ufs2_stage1_5_exec-fsys_ufs2.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c
--
--ufs2_stage1_5_exec-fsys_ufs2.obj: fsys_ufs2.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-fsys_ufs2.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo" -c -o ufs2_stage1_5_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_ufs2.c' object='ufs2_stage1_5_exec-fsys_ufs2.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`
--
--ufs2_stage1_5_exec-bios.o: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo" -c -o ufs2_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='ufs2_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c
--
--ufs2_stage1_5_exec-bios.obj: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo" -c -o ufs2_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='ufs2_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`
--
--vstafs_stage1_5_exec-common.o: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo" -c -o vstafs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='vstafs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c
--
--vstafs_stage1_5_exec-common.obj: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo" -c -o vstafs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='vstafs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`
--
--vstafs_stage1_5_exec-char_io.o: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo" -c -o vstafs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='vstafs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c
--
--vstafs_stage1_5_exec-char_io.obj: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo" -c -o vstafs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='vstafs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`
--
--vstafs_stage1_5_exec-disk_io.o: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo" -c -o vstafs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='vstafs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c
--
--vstafs_stage1_5_exec-disk_io.obj: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo" -c -o vstafs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='vstafs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`
--
--vstafs_stage1_5_exec-stage1_5.o: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo" -c -o vstafs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='vstafs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c
--
--vstafs_stage1_5_exec-stage1_5.obj: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo" -c -o vstafs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='vstafs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`
--
--vstafs_stage1_5_exec-fsys_vstafs.o: fsys_vstafs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-fsys_vstafs.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo" -c -o vstafs_stage1_5_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_vstafs.c' object='vstafs_stage1_5_exec-fsys_vstafs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c
--
--vstafs_stage1_5_exec-fsys_vstafs.obj: fsys_vstafs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-fsys_vstafs.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo" -c -o vstafs_stage1_5_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_vstafs.c' object='vstafs_stage1_5_exec-fsys_vstafs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`
--
--vstafs_stage1_5_exec-bios.o: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo" -c -o vstafs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='vstafs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c
--
--vstafs_stage1_5_exec-bios.obj: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo" -c -o vstafs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='vstafs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`
--
--xfs_stage1_5_exec-common.o: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo" -c -o xfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='xfs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c
--
--xfs_stage1_5_exec-common.obj: common.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo" -c -o xfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='common.c' object='xfs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`
--
--xfs_stage1_5_exec-char_io.o: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo" -c -o xfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='xfs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c
--
--xfs_stage1_5_exec-char_io.obj: char_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo" -c -o xfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='char_io.c' object='xfs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`
--
--xfs_stage1_5_exec-disk_io.o: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo" -c -o xfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='xfs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c
--
--xfs_stage1_5_exec-disk_io.obj: disk_io.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo" -c -o xfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='disk_io.c' object='xfs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`
--
--xfs_stage1_5_exec-stage1_5.o: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo" -c -o xfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='xfs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c
--
--xfs_stage1_5_exec-stage1_5.obj: stage1_5.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo" -c -o xfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='stage1_5.c' object='xfs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`
--
--xfs_stage1_5_exec-fsys_xfs.o: fsys_xfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-fsys_xfs.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo" -c -o xfs_stage1_5_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_xfs.c' object='xfs_stage1_5_exec-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c
--
--xfs_stage1_5_exec-fsys_xfs.obj: fsys_xfs.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-fsys_xfs.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo" -c -o xfs_stage1_5_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='fsys_xfs.c' object='xfs_stage1_5_exec-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`
--
--xfs_stage1_5_exec-bios.o: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo" -c -o xfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='xfs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c
--
--xfs_stage1_5_exec-bios.obj: bios.c
--@am__fastdepCC_TRUE@  if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo" -c -o xfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \
--@am__fastdepCC_TRUE@  then mv -f "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo"; exit 1; fi
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     source='bios.c' object='xfs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@
--@AMDEP_TRUE@@am__fastdepCC_FALSE@     DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
--@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`
--uninstall-info-am:
--install-pkglibDATA: $(pkglib_DATA)
--      @$(NORMAL_INSTALL)
--      test -z "$(pkglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkglibdir)"
--      @list='$(pkglib_DATA)'; for p in $$list; do \
--        if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
--        f=$(am__strip_dir) \
--        echo " $(pkglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkglibdir)/$$f'"; \
--        $(pkglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkglibdir)/$$f"; \
--      done
--
--uninstall-pkglibDATA:
--      @$(NORMAL_UNINSTALL)
--      @list='$(pkglib_DATA)'; for p in $$list; do \
--        f=$(am__strip_dir) \
--        echo " rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \
--        rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \
--      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:  $(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
--
--check-TESTS: $(TESTS)
--      @failed=0; all=0; xfail=0; xpass=0; skip=0; \
--      srcdir=$(srcdir); export srcdir; \
--      list='$(TESTS)'; \
--      if test -n "$$list"; then \
--        for tst in $$list; do \
--          if test -f ./$$tst; then dir=./; \
--          elif test -f $$tst; then dir=; \
--          else dir="$(srcdir)/"; fi; \
--          if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
--            all=`expr $$all + 1`; \
--            case " $(XFAIL_TESTS) " in \
--            *" $$tst "*) \
--              xpass=`expr $$xpass + 1`; \
--              failed=`expr $$failed + 1`; \
--              echo "XPASS: $$tst"; \
--            ;; \
--            *) \
--              echo "PASS: $$tst"; \
--            ;; \
--            esac; \
--          elif test $$? -ne 77; then \
--            all=`expr $$all + 1`; \
--            case " $(XFAIL_TESTS) " in \
--            *" $$tst "*) \
--              xfail=`expr $$xfail + 1`; \
--              echo "XFAIL: $$tst"; \
--            ;; \
--            *) \
--              failed=`expr $$failed + 1`; \
--              echo "FAIL: $$tst"; \
--            ;; \
--            esac; \
--          else \
--            skip=`expr $$skip + 1`; \
--            echo "SKIP: $$tst"; \
--          fi; \
--        done; \
--        if test "$$failed" -eq 0; then \
--          if test "$$xfail" -eq 0; then \
--            banner="All $$all tests passed"; \
--          else \
--            banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
--          fi; \
--        else \
--          if test "$$xpass" -eq 0; then \
--            banner="$$failed of $$all tests failed"; \
--          else \
--            banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
--          fi; \
--        fi; \
--        dashes="$$banner"; \
--        skipped=""; \
--        if test "$$skip" -ne 0; then \
--          skipped="($$skip tests were not run)"; \
--          test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
--            dashes="$$skipped"; \
--        fi; \
--        report=""; \
--        if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
--          report="Please report to $(PACKAGE_BUGREPORT)"; \
--          test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
--            dashes="$$report"; \
--        fi; \
--        dashes=`echo "$$dashes" | sed s/./=/g`; \
--        echo "$$dashes"; \
--        echo "$$banner"; \
--        test -z "$$skipped" || echo "$$skipped"; \
--        test -z "$$report" || echo "$$report"; \
--        echo "$$dashes"; \
--        test "$$failed" -eq 0; \
--      else :; fi
--
--distdir: $(DISTFILES)
--      @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
--      topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
--      list='$(DISTFILES)'; for file in $$list; do \
--        case $$file in \
--          $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
--          $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
--        esac; \
--        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
--      $(MAKE) $(AM_MAKEFLAGS) check-TESTS
--check: $(BUILT_SOURCES)
--      $(MAKE) $(AM_MAKEFLAGS) check-am
--all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(SCRIPTS) $(DATA) \
--              $(HEADERS)
--installdirs:
--      for dir in "$(DESTDIR)$(pkglibdir)"; do \
--        test -z "$$dir" || $(mkdir_p) "$$dir"; \
--      done
--install: $(BUILT_SOURCES)
--      $(MAKE) $(AM_MAKEFLAGS) install-am
--install-exec: install-exec-am
--install-data: install-data-am
--uninstall: uninstall-am
--
--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:
--      -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
--
--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."
--      -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
--clean: clean-am
--
--clean-am: clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS \
--      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-exec-am: install-pkglibDATA
--
--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-info-am uninstall-pkglibDATA
--
--.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
--      clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \
--      distclean distclean-compile distclean-generic distclean-tags \
--      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-pkglibDATA 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-info-am \
--      uninstall-pkglibDATA
--
--
--stage2_size.h: pre_stage2
--      -rm -f stage2_size.h
--      set dummy `ls -l pre_stage2`; \
--      echo "#define STAGE2_SIZE $$6" > stage2_size.h
--
--# XXX: automake doesn't provide a way to specify dependencies for object
--# files explicitly, so we must write this by a general Makefile scheme.
--# If automake change the naming scheme for per-executable objects, this
--# will be broken.
--start_exec-start.$(OBJEXT): stage2_size.h
--
--stage2: pre_stage2 start
--      -rm -f stage2
--      cat start pre_stage2 > stage2
--
--start_eltorito_exec-start.$(OBJEXT): stage2_size.h
--
--stage2_eltorito: pre_stage2 start_eltorito
--      -rm -f stage2_eltorito
--      cat start_eltorito pre_stage2 > stage2_eltorito
--
--diskless_size.h: diskless
--      -rm -f $@
--      set dummy `ls -l $^`; \
--      echo "#define DISKLESS_SIZE $$6" > $@
--
--# XXX: See the comment for start_exec-start.o.
--nbloader_exec-nbloader.$(OBJEXT): diskless_size.h
--
--# For nbgrub target.
--nbgrub: nbloader diskless
--      -rm -f $@
--      cat $^ > $@
--
--# XXX: See the comment for start_exec-start.o.
--pxeloader_exec-pxeloader.$(OBJEXT): diskless_size.h
--
--# For pxegrub target.
--pxegrub: pxeloader diskless
--      -rm -f $@
--      cat $^ > $@
--.exec:
--      $(OBJCOPY) -O binary $< $@
--# 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/stage2/asm.S b/stage2/asm.S
-index 34b6e7d..5c4dd5e 100644
---- a/stage2/asm.S
-+++ b/stage2/asm.S
-@@ -98,7 +98,7 @@ VARIABLE(version_string)
-       .string VERSION
- VARIABLE(config_file)
- #ifndef STAGE1_5
--      .string "/boot/grub/menu.lst"
-+      .string "/boot/grub/grub.conf"
- #else   /* STAGE1_5 */
-       .long   0xffffffff
-       .string "/boot/grub/stage2"
-@@ -1622,36 +1622,78 @@ ENTRY(set_vbe_mode)
-  */
- ENTRY(gateA20)
-+      pushl   %ebx
-+      pushl   %edx
-+      call    testA20
-+      jnz     1f
-+      call    A20_BIOS
-+      call    testA20
-+      jnz     1f
-+      call    A20_PORT92
-+      call    testA20
-+      jnz     1f
-+      call    A20_KBDCTL
-+      call    testA20
-+      jnz     1f
-+      movl    $0,%eax
-+      jmp     2f
-+1:
-+      movl    $-1,%eax
-+2:
-+      popl    %edx
-+      popl    %ebx
-+      ret
-+
-+testA20:
-+      movl    0x500,%eax
-+      movl    0x100500,%ebx
-+      notl    %eax
-+      movl    %eax,0x100500
-+      cmpl    %eax,0x500
-+      pushfl
-+      movl    %ebx,0x100500
-+      notl    %eax
-+      movl    %eax,0x500
-+      popfl
-+      ret
-+
-+A20_BIOS:
-       /* first, try a BIOS call */
--      pushl   %ebp
--      movl    8(%esp), %edx
-       
-       call    EXT_C(prot_to_real)
-       
-       .code16
--      movw    $0x2400, %ax
--      testw   %dx, %dx
--      jz      1f
--      incw    %ax
-+      movw    $0x2401, %ax
- 1:    stc
-       int     $0x15
--      jnc     2f
--
--      /* set non-zero if failed */
--      movb    $1, %ah
--
--      /* save the status */
--2:    movb    %ah, %dl
-       DATA32  call    EXT_C(real_to_prot)
-       .code32
-+      ret
--      popl    %ebp
--      testb   %dl, %dl
--      jnz     3f
-+A20_PORT92:
-+      /*
-+      * try to switch gateA20 using PORT92, the "Fast A20 and Init"
-+      * register
-+      */
-+      mov     $0x92, %dx
-+      inb     %dx, %al
-+      /* skip the port92 code if it's unimplemented (read returns 0xff) */
-+      cmpb    $0xff, %al
-+      jz      6f
-+
-+      /* set bit1, the ALT_A20_GATE bit */
-+      orb     $2, %al
-+      /*      and     $0xfd, %al */
-+
-+      /* clear the INIT_NOW bit; don't accidently reset the machine */
-+      and     $0xfe, %al
-+      outb    %al, %dx
-+6:
-       ret
--3:    /* use keyboard controller */
-+A20_KBDCTL:
-+      /* use keyboard controller */
-       pushl   %eax
-       call    gloop1
-@@ -1665,11 +1707,7 @@ gloopint1:
-       jnz     gloopint1
-       movb    $KB_OUTPUT_MASK, %al
--      cmpb    $0, 0x8(%esp)
--      jz      gdoit
--
-       orb     $KB_A20_ENABLE, %al
--gdoit:
-       outb    $K_RDWR
-       call    gloop1
-@@ -1994,8 +2032,25 @@ ENTRY(console_getkey)
-       call    EXT_C(prot_to_real)
-       .code16
-+.again:
-+      mov     $0x11, %ah              /* poll kbd */
-       int     $0x16
-+      jz      .again
-+#if 0
-+/* XXX handle serial here? -- pj */
-+      jnz     .kbd
-+#endif
-+.kbd:
-+      mov     $0x10, %ah
-+      int     $0x16
-+      cmp     $0xe0, %al
-+      jnz     .not_ext
-+      xor     %al, %al
-+.not_ext:
-+      and     %al, %al
-+      jz      .func_key
-+.func_key:
-       movw    %ax, %dx                /* real_to_prot uses %eax */
-       call    translate_keycode
-       call    remap_ascii_char
-@@ -2003,7 +2058,7 @@ ENTRY(console_getkey)
-       DATA32  call    EXT_C(real_to_prot)
-       .code32
--      movw    %dx, %ax
-+      mov     %dx, %ax
-       pop     %ebp
-       ret
-@@ -2029,7 +2084,7 @@ ENTRY(console_checkkey)
-       call    EXT_C(prot_to_real)     /* enter real mode */
-       .code16
--      movb    $0x1, %ah
-+      movb    $0x11, %ah
-       int     $0x16
-       DATA32  jz      notpending
-@@ -2051,6 +2106,37 @@ pending:
-       pop     %ebp
-       ret
-+
-+/*
-+ * int console_keystatus (void)
-+ * BIOS call "INT 16H Function 02H" to get keyboard modifier status
-+ *    Call with       %ah = 0x2
-+ *    Return:         %al = keyboard state:
-+ *                            bit 3: alt key down
-+ *                            bit 2: ctrl key down
-+ *                            bit 1: left shift key down
-+ *                            bit 0: right shift key down
-+ */
-+ENTRY(console_keystatus)
-+      push    %ebp
-+
-+      call    EXT_C(prot_to_real)
-+      .code16
-+      
-+      movb    $0x12, %ah
-+      int     $0x16
-+      movw    %ax, %dx
-+
-+      DATA32  call    EXT_C(real_to_prot)
-+      .code32
-+
-+      movw    %dx, %ax
-+      
-+      /* Mask out numlock, capslock and insert state. */
-+      andl    $0x0f0f, %eax
-+      pop     %ebp
-+      ret
-+      
-       
- /*
-  * int console_getxy (void)
-@@ -2216,6 +2302,156 @@ ENTRY(console_setcursor)
-       pop     %ebx
-       pop     %ebp
-       ret
-+
-+/* graphics mode functions */
-+#ifdef SUPPORT_GRAPHICS
-+VARIABLE(cursorX)
-+.word 0
-+VARIABLE(cursorY)
-+.word 0
-+VARIABLE(cursorCount)
-+.word 0
-+VARIABLE(cursorBuf)
-+.byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-+
-+      
-+/*
-+ * int set_videomode(mode)
-+ * BIOS call "INT 10H Function 0h" to set video mode
-+ *    Call with       %ah = 0x0
-+ *                    %al = video mode
-+ *      Returns old videomode.
-+ */
-+ENTRY(set_videomode)
-+      push    %ebp
-+      push    %ebx
-+      push    %ecx
-+
-+      movb    0x10(%esp), %cl
-+
-+      call    EXT_C(prot_to_real)
-+      .code16
-+
-+      xorw    %bx, %bx
-+      movb    $0xf, %ah
-+      int     $0x10                   /* Get Current Video mode */
-+      movb    %al, %ch
-+      xorb    %ah, %ah
-+      movb    %cl, %al
-+        int   $0x10                   /* Set Video mode */
-+
-+      DATA32  call    EXT_C(real_to_prot)
-+      .code32
-+
-+      xorb    %ah, %ah
-+      movb    %ch, %al
-+
-+      pop     %ecx
-+      pop     %ebx
-+      pop     %ebp
-+      ret
-+
-+
-+/*
-+ * unsigned char * graphics_get_font()
-+ * BIOS call "INT 10H Function 11h" to set font
-+ *      Call with       %ah = 0x11
-+ */
-+ENTRY(graphics_get_font)
-+      push    %ebp
-+      push    %ebx
-+      push    %ecx
-+      push    %edx
-+
-+      call    EXT_C(prot_to_real)
-+      .code16
-+
-+      movw    $0x1130, %ax
-+      movb    $6, %bh         /* font 8x16 */
-+      int     $0x10
-+      movw    %bp, %dx
-+      movw    %es, %cx
-+
-+      DATA32  call    EXT_C(real_to_prot)
-+      .code32
-+
-+      xorl    %eax, %eax
-+      movw    %cx, %ax
-+      shll    $4, %eax
-+      movw    %dx, %ax
-+
-+      pop     %edx
-+      pop     %ecx
-+      pop     %ebx
-+      pop     %ebp
-+      ret
-+      
-+
-+      
-+/*
-+ * graphics_set_palette(index, red, green, blue)
-+ * BIOS call "INT 10H Function 10h" to set individual dac register
-+ *    Call with       %ah = 0x10
-+ *                    %bx = register number
-+ *                    %ch = new value for green (0-63)
-+ *                    %cl = new value for blue (0-63)
-+ *                    %dh = new value for red (0-63)
-+ */
-+
-+ENTRY(graphics_set_palette)
-+      push    %ebp
-+      push    %eax
-+      push    %ebx
-+      push    %ecx
-+      push    %edx
-+
-+      movw    $0x3c8, %bx             /* address write mode register */
-+
-+      /* wait vertical retrace */
-+
-+      movw    $0x3da, %dx
-+l1b:  inb     %dx, %al        /* wait vertical active display */
-+      test    $8, %al
-+      jnz     l1b
-+
-+l2b:  inb     %dx, %al        /* wait vertical retrace */
-+      test    $8, %al
-+      jnz     l2b
-+
-+      mov     %bx, %dx
-+      movb    0x18(%esp), %al         /* index */
-+      outb    %al, %dx
-+      inc     %dx
-+
-+      movb    0x1c(%esp), %al         /* red */
-+      outb    %al, %dx
-+
-+      movb    0x20(%esp), %al         /* green */
-+      outb    %al, %dx
-+
-+      movb    0x24(%esp), %al         /* blue */
-+      outb    %al, %dx
-+
-+      movw    0x18(%esp), %bx
-+
-+      call    EXT_C(prot_to_real)
-+      .code16
-+
-+      movb    %bl, %bh
-+      movw    $0x1000, %ax
-+      int     $0x10
-+
-+      DATA32  call    EXT_C(real_to_prot)
-+      .code32 
-+
-+      pop     %edx
-+      pop     %ecx
-+      pop     %ebx
-+      pop     %eax
-+      pop     %ebp
-+      ret
-+
-+#endif /* SUPPORT_GRAPHICS */
-               
- /*
-  * getrtsecs()
-diff --git a/stage2/boot.c b/stage2/boot.c
-index 4185d23..e30daf8 100644
---- a/stage2/boot.c
-+++ b/stage2/boot.c
-@@ -25,10 +25,14 @@
- #include "imgact_aout.h"
- #include "i386-elf.h"
-+#ifndef PLATFORM_EFI
- static int cur_addr;
-+#endif
- entry_func entry_addr;
-+#ifndef PLATFORM_EFI
- static struct mod_list mll[99];
- static int linux_mem_size;
-+#endif
- /*
-  *  The next two functions, 'load_image' and 'load_module', are the building
-@@ -40,6 +44,9 @@ kernel_t
- load_image (char *kernel, char *arg, kernel_t suggested_type,
-           unsigned long load_flags)
- {
-+#ifdef PLATFORM_EFI
-+      return grub_load_linux (kernel, arg);
-+#else
-   int len, i, exec_type = 0, align_4k = 1;
-   entry_func real_entry_addr = 0;
-   kernel_t type = KERNEL_TYPE_NONE;
-@@ -221,6 +228,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-     {
-       int big_linux = 0;
-       int setup_sects = lh->setup_sects;
-+      int cmdline_size = 0xff;
-       if (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0200)
-       {
-@@ -248,6 +256,14 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-             lh->cl_offset = LINUX_CL_OFFSET;
-             lh->setup_move_size = LINUX_SETUP_MOVE_SIZE;
-           }
-+
-+        if (lh->version >= 0x0206)
-+          {
-+            cmdline_size = lh->cmdline_size;
-+            if (cmdline_size > (LINUX_CL_END_OFFSET - LINUX_CL_OFFSET))
-+              cmdline_size = LINUX_CL_END_OFFSET - LINUX_CL_OFFSET;
-+          }
-+
-       }
-       else
-       {
-@@ -265,7 +281,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-       setup_sects = LINUX_DEFAULT_SETUP_SECTS;
-       data_len = setup_sects << 9;
--      text_len = filemax - data_len - SECTOR_SIZE;
-+      text_len = filemax - data_len - get_sector_size(current_drive);
-       linux_data_tmp_addr = (char *) LINUX_BZIMAGE_ADDR + text_len;
-       
-@@ -280,8 +296,12 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-       errnum = ERR_WONT_FIT;
-       else
-       {
--        grub_printf ("   [Linux-%s, setup=0x%x, size=0x%x]\n",
--                     (big_linux ? "bzImage" : "zImage"), data_len, text_len);
-+        grub_verbose_printf ("   [Linux-%s, setup=0x%x, size=0x%x]\n",
-+                             (big_linux ? "bzImage" : "zImage"),
-+                             data_len, text_len);
-+
-+        if (silent_grub)
-+          lh->vid_mode = 0x0f04;
-         /* Video mode selection support. What a mess!  */
-         /* NOTE: Even the word "mess" is not still enough to
-@@ -375,14 +395,15 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-       
-         /* It is possible that DATA_LEN + SECTOR_SIZE is greater than
-            MULTIBOOT_SEARCH, so the data may have been read partially.  */
--        if (data_len + SECTOR_SIZE <= MULTIBOOT_SEARCH)
-+        if (data_len + get_sector_size(current_drive) <= MULTIBOOT_SEARCH)
-           grub_memmove (linux_data_tmp_addr, buffer,
--                        data_len + SECTOR_SIZE);
-+                        data_len + get_sector_size(current_drive));
-         else
-           {
-             grub_memmove (linux_data_tmp_addr, buffer, MULTIBOOT_SEARCH);
-             grub_read (linux_data_tmp_addr + MULTIBOOT_SEARCH,
--                       data_len + SECTOR_SIZE - MULTIBOOT_SEARCH);
-+                       data_len + get_sector_size(current_drive)
-+                       - MULTIBOOT_SEARCH);
-           }
-         
-         if (lh->header != LINUX_MAGIC_SIGNATURE ||
-@@ -404,7 +425,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-           char *src = skip_to (0, arg);
-           char *dest = linux_data_tmp_addr + LINUX_CL_OFFSET;
-       
--          while (dest < linux_data_tmp_addr + LINUX_CL_END_OFFSET && *src)
-+          while (dest < linux_data_tmp_addr + LINUX_CL_OFFSET + cmdline_size && *src)
-             *(dest++) = *(src++);
-       
-           /* Old Linux kernels have problems determining the amount of
-@@ -425,7 +446,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-           if (! grub_strstr (arg, "mem=")
-               && ! (load_flags & KERNEL_LOAD_NO_MEM_OPTION)
-               && lh->version < 0x0203         /* kernel version < 2.4.18 */
--              && dest + 15 < linux_data_tmp_addr + LINUX_CL_END_OFFSET)
-+              && dest + 15 < linux_data_tmp_addr + LINUX_CL_OFFSET + cmdline_size)
-             {
-               *dest++ = ' ';
-               *dest++ = 'm';
-@@ -441,7 +462,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-         }
-       
-         /* offset into file */
--        grub_seek (data_len + SECTOR_SIZE);
-+        grub_seek (data_len + get_sector_size(current_drive));
-       
-         cur_addr = (int) linux_data_tmp_addr + LINUX_SETUP_MOVE_SIZE;
-         grub_read ((char *) LINUX_BZIMAGE_ADDR, text_len);
-@@ -487,7 +508,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-   mbi.syms.a.addr = 0;
-   mbi.syms.a.pad = 0;
--  printf ("   [%s-%s", str2, str);
-+  verbose_printf ("   [%s-%s", str2, str);
-   str = "";
-@@ -496,7 +517,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-       if (flags & MULTIBOOT_AOUT_KLUDGE)
-       str = "-and-data";
--      printf (", loadaddr=0x%x, text%s=0x%x", cur_addr, str, text_len);
-+      verbose_printf (", loadaddr=0x%x, text%s=0x%x", cur_addr, str, text_len);
-       /* read text, then read data */
-       if (grub_read ((char *) RAW_ADDR (cur_addr), text_len) == text_len)
-@@ -509,9 +530,9 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-             if (align_4k)
-               cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000;
-             else
--              printf (", C");
-+              verbose_printf (", C");
--            printf (", data=0x%x", data_len);
-+            verbose_printf (", data=0x%x", data_len);
-             if ((grub_read ((char *) RAW_ADDR (cur_addr), data_len)
-                  != data_len)
-@@ -525,7 +546,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-             memset ((char *) RAW_ADDR (cur_addr), 0, bss_len);
-             cur_addr += bss_len;
--            printf (", bss=0x%x", bss_len);
-+            verbose_printf (", bss=0x%x", bss_len);
-           }
-       }
-       else if (!errnum)
-@@ -545,7 +566,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-         *((int *) RAW_ADDR (cur_addr)) = pu.aout->a_syms;
-         cur_addr += sizeof (int);
-         
--        printf (", symtab=0x%x", pu.aout->a_syms);
-+        verbose_printf (", symtab=0x%x", pu.aout->a_syms);
-         if (grub_read ((char *) RAW_ADDR (cur_addr), pu.aout->a_syms)
-             == pu.aout->a_syms)
-@@ -562,7 +583,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-                 i -= sizeof (int);
--                printf (", strtab=0x%x", i);
-+                verbose_printf (", strtab=0x%x", i);
-                 symtab_err = (grub_read ((char *) RAW_ADDR (cur_addr), i)
-                               != i);
-@@ -576,7 +597,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-         if (symtab_err)
-           {
--            printf ("(bad)");
-+            verbose_printf ("(bad)");
-             cur_addr = orig_addr;
-             mbi.syms.a.tabsize = 0;
-             mbi.syms.a.strsize = 0;
-@@ -630,7 +651,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-             /* mark memory as used */
-             if (cur_addr < memaddr + memsiz)
-               cur_addr = memaddr + memsiz;
--            printf (", <0x%x:0x%x:0x%x>", memaddr, filesiz,
-+            verbose_printf (", <0x%x:0x%x:0x%x>", memaddr, filesiz,
-                     memsiz - filesiz);
-             /* increment number of segments */
-             loaded++;
-@@ -676,7 +697,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-                 shdr = (Elf32_Shdr *) mbi.syms.e.addr;
-                 cur_addr += tab_size;
-                 
--                printf (", shtab=0x%x", cur_addr);
-+                verbose_printf (", shtab=0x%x", cur_addr);
-                 
-                 for (i = 0; i < mbi.syms.e.num; i++)
-                   {
-@@ -718,7 +739,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-             
-             if (symtab_err) 
-               {
--                printf ("(bad)");
-+                verbose_printf ("(bad)");
-                 mbi.syms.e.num = 0;
-                 mbi.syms.e.size = 0;
-                 mbi.syms.e.addr = 0;
-@@ -733,7 +754,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-   if (! errnum)
-     {
--      grub_printf (", entry=0x%x]\n", (unsigned) entry_addr);
-+      grub_verbose_printf (", entry=0x%x]\n", (unsigned) entry_addr);
-       
-       /* If the entry address is physically different from that of the ELF
-        header, correct it here.  */
-@@ -756,8 +777,10 @@ load_image (char *kernel, char *arg, kernel_t suggested_type,
-     }
-   
-   return type;
-+#endif
- }
-+#ifndef PLATFORM_EFI
- int
- load_module (char *module, char *arg)
- {
-@@ -776,7 +799,7 @@ load_module (char *module, char *arg)
-       return 0;
-     }
--  printf ("   [Multiboot-module @ 0x%x, 0x%x bytes]\n", cur_addr, len);
-+  verbose_printf ("   [Multiboot-module @ 0x%x, 0x%x bytes]\n", cur_addr, len);
-   /* these two simply need to be set if any modules are loaded at all */
-   mbi.flags |= MB_INFO_MODS;
-@@ -794,11 +817,19 @@ load_module (char *module, char *arg)
-   grub_close ();
-   return 1;
- }
-+#endif
- int
- load_initrd (char *initrd)
- {
--  int len;
-+#ifdef PLATFORM_EFI
-+#ifndef NO_DECOMPRESSION
-+  no_decompression = 1;
-+#endif
-+  return grub_load_initrd (initrd);
-+#else
-+  int len, next_addr;
-+  char *singleimage, *pos;
-   unsigned long moveto;
-   unsigned long max_addr;
-   struct linux_kernel_header *lh
-@@ -807,16 +838,24 @@ load_initrd (char *initrd)
- #ifndef NO_DECOMPRESSION
-   no_decompression = 1;
- #endif
--  
--  if (! grub_open (initrd))
--    goto fail;
-+  len = 0;
-+  next_addr = cur_addr;
--  len = grub_read ((char *) cur_addr, -1);
--  if (! len)
--    {
--      grub_close ();
--      goto fail;
--    }
-+  /* loop over all initrd images and concatenate them in memory */
-+  singleimage = strtok_r(initrd," \t",&pos);
-+  while (singleimage) {
-+    if (! grub_open (singleimage))
-+      continue;
-+
-+    len += grub_read ((char *) next_addr, -1);
-+    grub_close ();
-+
-+    next_addr = cur_addr + len;
-+    singleimage = strtok_r(NULL," \t",&pos);
-+  }
-+
-+  if (!len)
-+    goto fail;
-   if (linux_mem_size)
-     moveto = linux_mem_size;
-@@ -824,8 +863,12 @@ load_initrd (char *initrd)
-     moveto = (mbi.mem_upper + 0x400) << 10;
-   
-   moveto = (moveto - len) & 0xfffff000;
-+#if 0
-   max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203
-             ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS);
-+#else
-+  max_addr = LINUX_INITRD_MAX_ADDRESS;
-+#endif
-   if (moveto + len >= max_addr)
-     moveto = (max_addr - len) & 0xfffff000;
-   
-@@ -836,13 +879,12 @@ load_initrd (char *initrd)
-   moveto -= 0x10000;
-   memmove ((void *) RAW_ADDR (moveto), (void *) cur_addr, len);
--  printf ("   [Linux-initrd @ 0x%x, 0x%x bytes]\n", moveto, len);
-+  verbose_printf ("   [Linux-initrd @ 0x%x, 0x%x bytes]\n", moveto, len);
-   /* FIXME: Should check if the kernel supports INITRD.  */
-   lh->ramdisk_image = RAW_ADDR (moveto);
-   lh->ramdisk_size = len;
--  grub_close ();
-  fail:
-   
-@@ -851,9 +893,11 @@ load_initrd (char *initrd)
- #endif
-   return ! errnum;
-+#endif
- }
-+#ifndef PLATFORM_EFI
- #ifdef GRUB_UTIL
- /* Dummy function to fake the *BSD boot.  */
- static void
-@@ -1018,3 +1062,5 @@ bsd_boot (kernel_t type, int bootdev, char *arg)
-                    extended_memory, mbi.mem_lower);
-     }
- }
-+#endif
-+
-diff --git a/stage2/builtins.c b/stage2/builtins.c
-index 3e08a86..b95b181 100644
---- a/stage2/builtins.c
-+++ b/stage2/builtins.c
-@@ -56,6 +56,9 @@ static int bootdev;
- /* True when the debug mode is turned on, and false
-    when it is turned off.  */
- int debug = 0;
-+int debug_graphics = 0;
-+/* Print what we're booting */
-+int grub_verbose = 0;
- /* The default entry.  */
- int default_entry = 0;
- /* The fallback entry.  */
-@@ -117,6 +120,27 @@ check_password (char *entered, char* expected, password_t type)
-     case PASSWORD_MD5:
-       return check_md5_password (entered, expected);
- #endif
-+
-+    case PASSWORD_ENCRYPTED:
-+      if (grub_memcmp (expected, "$1$", 3) == 0)
-+      return check_md5_password (entered, expected);
-+      else if (grub_memcmp (expected, "$5$", 3) == 0)
-+      {
-+        char *hashed;
-+
-+        hashed = sha256_crypt (entered, expected);
-+        return hashed == NULL || strcmp (expected, hashed);
-+      }
-+      else if (grub_memcmp (expected, "$6$", 3) == 0)
-+      {
-+        char *hashed;
-+
-+        hashed = sha512_crypt (entered, expected);
-+        return hashed == NULL || strcmp (expected, hashed);
-+      }
-+      else
-+      return strcmp (entered, expected);
-+
-     default: 
-       /* unsupported password type: be secure */
-       return 1;
-@@ -131,62 +155,98 @@ disk_read_print_func (int sector, int offset, int length)
- }
\f
-+/* blocklist_read_helper nee disk_read_blocklist_func was a nested
-+ * function, to which pointers were taken and exposed globally.  Even
-+ * in the GNU-C nested functions extension, they have local linkage,
-+ * and aren't guaranteed to be accessable *at all* outside of their 
-+ * containing scope.
-+ *
-+ * Above and beyond all of that, the variables within blocklist_func_context
-+ * are originally local variables, with local (not even static) linkage,
-+ * from within blocklist_func.  These were each referenced by
-+ * disk_read_blocklist_func, which is only called from other functions
-+ * through a globally scoped pointer.
-+ * 
-+ * The documentation in GCC actually uses the words "all hell will break
-+ * loose" to describe this scenario.
-+ *
-+ * Also, "start_sector" was also used uninitialized, but gcc doesn't warn
-+ * about it (possibly because of the scoping madness?)
-+ */
-+   
-+static struct {
-+      int start_sector;
-+      int num_sectors;
-+      int num_entries;
-+      int last_length;
-+} blocklist_func_context = {
-+      .start_sector = 0,
-+      .num_sectors = 0,
-+      .num_entries = 0,
-+      .last_length = 0
-+};
-+
-+/* Collect contiguous blocks into one entry as many as possible,
-+   and print the blocklist notation on the screen.  */
-+static void
-+blocklist_read_helper (int sector, int offset, int length)
-+{
-+  int *start_sector = &blocklist_func_context.start_sector;
-+  int *num_sectors = &blocklist_func_context.num_sectors;
-+  int *num_entries = &blocklist_func_context.num_entries;
-+  int *last_length = &blocklist_func_context.last_length;
-+  int sector_size = get_sector_size(current_drive);
-+
-+  if (*num_sectors > 0)
-+  {
-+    if (*start_sector + *num_sectors == sector
-+      && offset == 0 && *last_length == sector_size)
-+    {
-+      *num_sectors++;
-+      *last_length = length;
-+      return;
-+    }
-+    else
-+    {
-+      if (*last_length == sector_size)
-+        grub_printf ("%s%d+%d", *num_entries ? "," : "",
-+          *start_sector - part_start, *num_sectors);
-+      else if (*num_sectors > 1)
-+        grub_printf ("%s%d+%d,%d[0-%d]", *num_entries ? "," : "",
-+          *start_sector - part_start, *num_sectors-1,
-+          *start_sector + *num_sectors-1 - part_start, 
-+          *last_length);
-+      else
-+        grub_printf ("%s%d[0-%d]", *num_entries ? "," : "",
-+          *start_sector - part_start, *last_length);
-+      *num_entries++;
-+      *num_sectors = 0;
-+    }
-+  }
-+
-+  if (offset > 0)
-+  {
-+    grub_printf("%s%d[%d-%d]", *num_entries ? "," : "",
-+          sector-part_start, offset, offset+length);
-+    *num_entries++;
-+  }
-+  else
-+  {
-+    *start_sector = sector;
-+    *num_sectors = 1;
-+    *last_length = length;
-+  }
-+}
-+
- /* blocklist */
- static int
- blocklist_func (char *arg, int flags)
- {
-   char *dummy = (char *) RAW_ADDR (0x100000);
--  int start_sector;
--  int num_sectors = 0;
--  int num_entries = 0;
--  int last_length = 0;
--  auto void disk_read_blocklist_func (int sector, int offset, int length);
--  
--  /* Collect contiguous blocks into one entry as many as possible,
--     and print the blocklist notation on the screen.  */
--  auto void disk_read_blocklist_func (int sector, int offset, int length)
--    {
--      if (num_sectors > 0)
--      {
--        if (start_sector + num_sectors == sector
--            && offset == 0 && last_length == SECTOR_SIZE)
--          {
--            num_sectors++;
--            last_length = length;
--            return;
--          }
--        else
--          {
--            if (last_length == SECTOR_SIZE)
--              grub_printf ("%s%d+%d", num_entries ? "," : "",
--                           start_sector - part_start, num_sectors);
--            else if (num_sectors > 1)
--              grub_printf ("%s%d+%d,%d[0-%d]", num_entries ? "," : "",
--                           start_sector - part_start, num_sectors-1,
--                           start_sector + num_sectors-1 - part_start, 
--                           last_length);
--            else
--              grub_printf ("%s%d[0-%d]", num_entries ? "," : "",
--                           start_sector - part_start, last_length);
--            num_entries++;
--            num_sectors = 0;
--          }
--      }
--
--      if (offset > 0)
--      {
--        grub_printf("%s%d[%d-%d]", num_entries ? "," : "",
--                    sector-part_start, offset, offset+length);
--        num_entries++;
--      }
--      else
--      {
--        start_sector = sector;
--        num_sectors = 1;
--        last_length = length;
--      }
--    }
-+  int *start_sector = &blocklist_func_context.start_sector;
-+  int *num_sectors = &blocklist_func_context.num_sectors;
-+  int *num_entries = &blocklist_func_context.num_entries;
-   /* Open the file.  */
-   if (! grub_open (arg))
-@@ -206,15 +266,15 @@ blocklist_func (char *arg, int flags)
-   grub_printf (")");
-   /* Read in the whole file to DUMMY.  */
--  disk_read_hook = disk_read_blocklist_func;
-+  disk_read_hook = blocklist_read_helper;
-   if (! grub_read (dummy, -1))
-     goto fail;
-   /* The last entry may not be printed yet.  Don't check if it is a
-    * full sector, since it doesn't matter if we read too much. */
--  if (num_sectors > 0)
--    grub_printf ("%s%d+%d", num_entries ? "," : "",
--               start_sector - part_start, num_sectors);
-+  if (*num_sectors > 0)
-+    grub_printf ("%s%d+%d", *num_entries ? "," : "",
-+               *start_sector - part_start, *num_sectors);
-   grub_printf ("\n");
-   
-@@ -237,12 +297,25 @@ static struct builtin builtin_blocklist =
- static int
- boot_func (char *arg, int flags)
- {
-+  struct term_entry *prev_term = current_term;
-   /* Clear the int15 handler if we can boot the kernel successfully.
-      This assumes that the boot code never fails only if KERNEL_TYPE is
-      not KERNEL_TYPE_NONE. Is this assumption is bad?  */
-   if (kernel_type != KERNEL_TYPE_NONE)
-     unset_int15_handler ();
-+  /* if our terminal needed initialization, we should shut it down
-+   * before booting the kernel, but we want to save what it was so
-+   * we can come back if needed */
-+  if (current_term->shutdown) 
-+    {
-+      (*current_term->shutdown)();
-+      current_term = term_table; /* assumption: console is first */
-+    }
-+
-+  if (silent_grub)
-+    setcursor(0);
-+
- #ifdef SUPPORT_NETBOOT
-   /* Shut down the networking.  */
-   cleanup_net ();
-@@ -250,11 +323,13 @@ boot_func (char *arg, int flags)
-   
-   switch (kernel_type)
-     {
-+#ifndef PLATFORM_EFI
-     case KERNEL_TYPE_FREEBSD:
-     case KERNEL_TYPE_NETBSD:
-       /* *BSD */
-       bsd_boot (kernel_type, bootdev, (char *) mbi.cmdline);
-       break;
-+#endif
-     case KERNEL_TYPE_LINUX:
-       /* Linux */
-@@ -296,16 +371,25 @@ boot_func (char *arg, int flags)
-       chain_stage1 (0, BOOTSEC_LOCATION, boot_part_addr);
-       break;
-+#ifndef PLATFORM_EFI
-     case KERNEL_TYPE_MULTIBOOT:
-       /* Multiboot */
-       multi_boot ((int) entry_addr, (int) &mbi);
-       break;
-+#endif
-     default:
-       errnum = ERR_BOOT_COMMAND;
-       return 1;
-     }
-+  /* if we get back here, we should go back to what our term was before */
-+  current_term = prev_term;
-+  if (current_term->startup)
-+      /* if our terminal fails to initialize, fall back to console since
-+       * it should always work */
-+      if ((*current_term->startup)() == 0)
-+          current_term = term_table; /* we know that console is first */
-   return 0;
- }
-@@ -402,6 +486,10 @@ static struct builtin builtin_cat =
- static int
- chainloader_func (char *arg, int flags)
- {
-+#ifdef PLATFORM_EFI
-+  kernel_type = grub_chainloader(arg);
-+  return kernel_type == KERNEL_TYPE_NONE;
-+#else
-   int force = 0;
-   char *file = arg;
-@@ -458,6 +546,7 @@ chainloader_func (char *arg, int flags)
-   errnum = ERR_NONE;
-   
-   return 0;
-+#endif
- }
- static struct builtin builtin_chainloader =
-@@ -564,89 +653,88 @@ static struct builtin builtin_cmp =
- /* Set new colors used for the menu interface. Support two methods to
-    specify a color name: a direct integer representation and a symbolic
-    color name. An example of the latter is "blink-light-gray/blue".  */
--static int
--color_func (char *arg, int flags)
--{
--  char *normal;
--  char *highlight;
--  int new_normal_color;
--  int new_highlight_color;
--  static char *color_list[16] =
--  {
--    "black",
--    "blue",
--    "green",
--    "cyan",
--    "red",
--    "magenta",
--    "brown",
--    "light-gray",
--    "dark-gray",
--    "light-blue",
--    "light-green",
--    "light-cyan",
--    "light-red",
--    "light-magenta",
--    "yellow",
--    "white"
--  };
-+static const char * const color_list[16] =
-+{
-+  "black",
-+  "blue",
-+  "green",
-+  "cyan",
-+  "red",
-+  "magenta",
-+  "brown",
-+  "light-gray",
-+  "dark-gray",
-+  "light-blue",
-+  "light-green",
-+  "light-cyan",
-+  "light-red",
-+  "light-magenta",
-+  "yellow",
-+  "white"
-+};
--  auto int color_number (char *str);
-+/* Convert the color name STR into the magical number.  */
-+static int color_number (char *str)
-+{
-+  char *ptr;
-+  int i;
-+  int color = 0;
-   
--  /* Convert the color name STR into the magical number.  */
--  auto int color_number (char *str)
--    {
--      char *ptr;
--      int i;
--      int color = 0;
--      
--      /* Find the separator.  */
--      for (ptr = str; *ptr && *ptr != '/'; ptr++)
--      ;
-+  /* Find the separator.  */
-+  for (ptr = str; *ptr && *ptr != '/'; ptr++)
-+    ;
--      /* If not found, return -1.  */
--      if (! *ptr)
--      return -1;
-+  /* If not found, return -1.  */
-+  if (! *ptr)
-+    return -1;
--      /* Terminate the string STR.  */
--      *ptr++ = 0;
-+  /* Terminate the string STR.  */
-+  *ptr++ = 0;
--      /* If STR contains the prefix "blink-", then set the `blink' bit
--       in COLOR.  */
--      if (substring ("blink-", str) <= 0)
--      {
--        color = 0x80;
--        str += 6;
--      }
--      
--      /* Search for the color name.  */
--      for (i = 0; i < 16; i++)
--      if (grub_strcmp (color_list[i], str) == 0)
--        {
--          color |= i;
--          break;
--        }
-+  /* If STR contains the prefix "blink-", then set the `blink' bit
-+     in COLOR.  */
-+  if (substring ("blink-", str) <= 0)
-+    {
-+      color = 0x80;
-+      str += 6;
-+    }
-+  
-+  /* Search for the color name.  */
-+  for (i = 0; i < 16; i++)
-+    if (grub_strcmp (color_list[i], str) == 0)
-+      {
-+        color |= i;
-+        break;
-+      }
--      if (i == 16)
--      return -1;
-+  if (i == 16)
-+    return -1;
--      str = ptr;
--      nul_terminate (str);
-+  str = ptr;
-+  nul_terminate (str);
--      /* Search for the color name.  */      
--      for (i = 0; i < 8; i++)
--      if (grub_strcmp (color_list[i], str) == 0)
--        {
--          color |= i << 4;
--          break;
--        }
-+  /* Search for the color name.  */      
-+  for (i = 0; i < 8; i++)
-+    if (grub_strcmp (color_list[i], str) == 0)
-+      {
-+        color |= i << 4;
-+        break;
-+      }
--      if (i == 8)
--      return -1;
-+  if (i == 8)
-+    return -1;
-+
-+  return color;
-+}
-+
-+static int
-+color_func (char *arg, int flags)
-+{
-+  char *normal;
-+  char *highlight;
-+  int new_normal_color;
-+  int new_highlight_color;
--      return color;
--    }
--      
-   normal = arg;
-   highlight = skip_to (0, arg);
-@@ -690,7 +778,6 @@ static struct builtin builtin_color =
-   " But only the first eight names can be used for BG. You can prefix"
-   " \"blink-\" to FG if you want a blinking foreground color."
- };
--
\f
- /* configfile */
- static int
-@@ -737,14 +824,18 @@ static struct builtin builtin_configfile =
- static int
- debug_func (char *arg, int flags)
- {
--  if (debug)
-+  int *whichdebug = &debug;
-+  if (arg && !strcmp(arg, "--graphics"))
-+    whichdebug = &debug_graphics;
-+
-+  if (*whichdebug)
-     {
--      debug = 0;
-+      *whichdebug = 0;
-       grub_printf (" Debug mode is turned off\n");
-     }
-   else
-     {
--      debug = 1;
-+      *whichdebug = 1;
-       grub_printf (" Debug mode is turned on\n");
-     }
-@@ -755,17 +846,61 @@ static struct builtin builtin_debug =
- {
-   "debug",
-   debug_func,
--  BUILTIN_CMDLINE,
-+  BUILTIN_CMDLINE | BUILTIN_MENU,
-   "debug",
-   "Turn on/off the debug mode."
- };
\f
-+/* verbose */
-+static int
-+verbose_func (char *arg, int flags)
-+{
-+  if (grub_verbose)
-+    {
-+      grub_verbose = 0;
-+      grub_printf (" Verbose mode is turned off\n");
-+    }
-+  else
-+    {
-+      grub_verbose = 1;
-+      grub_printf (" Verbose mode is turned on\n");
-+    }
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_verbose =
-+{
-+  "verbose",
-+  verbose_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU,
-+  "verbose",
-+  "Turn on/off verbose output."
-+};
-+
-+\f
-+#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL) && !defined(PLATFORM_EFI)
-+static int savedefault_helper(int);
-+#endif
- /* default */
- static int
- default_func (char *arg, int flags)
- {
- #ifndef SUPPORT_DISKLESS
-+#ifndef GRUB_UTIL
-+#ifndef PLATFORM_EFI
-+  /* Has a forced once-only default been specified? */
-+  if ((saved_entryno & STAGE2_ONCEONLY_ENTRY) != 0)
-+    {
-+      int old_defaults=saved_entryno & ~STAGE2_ONCEONLY_ENTRY;
-+      grub_timeout = 0;
-+      default_entry = old_defaults >> 8;
-+      savedefault_helper(old_defaults & 0xff);
-+      return 0;
-+    }
-+#endif
-+#endif
-   if (grub_strcmp (arg, "saved") == 0)
-     {
-       default_entry = saved_entryno;
-@@ -792,7 +927,7 @@ static struct builtin builtin_default =
- };
\f
--#ifdef GRUB_UTIL
-+#if defined(GRUB_UTIL) || defined(PLATFORM_EFI)
- /* device */
- static int
- device_func (char *arg, int flags)
-@@ -800,16 +935,17 @@ device_func (char *arg, int flags)
-   char *drive = arg;
-   char *device;
--  /* Get the drive number from DRIVE.  */
--  if (! set_device (drive))
--    return 1;
--
-   /* Get the device argument.  */
-   device = skip_to (0, drive);
--  
-+
-+  nul_terminate (drive);
-   /* Terminate DEVICE.  */
-   nul_terminate (device);
-+  /* Get the drive number from DRIVE.  */
-+  if (! set_device (drive))
-+    return 1;
-+
-   if (! *device || ! check_device (device))
-     {
-       errnum = ERR_FILE_NOT_FOUND;
-@@ -817,7 +953,7 @@ device_func (char *arg, int flags)
-     }
-   assign_device_name (current_drive, device);
--  
-+
-   return 0;
- }
-@@ -828,9 +964,20 @@ static struct builtin builtin_device =
-   BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-   "device DRIVE DEVICE",
-   "Specify DEVICE as the actual drive for a BIOS drive DRIVE. This command"
--  " can be used only in the grub shell."
-+  " can be used only in the grub shell and in EFI."
- };
--#endif /* GRUB_UTIL */
-+#endif /* defined(GRUB_UTIL) || defined(PLATFORM_EFI) */
-+#ifdef PLATFORM_EFI
-+static struct builtin builtin_efimap =
-+{
-+  "efimap",
-+  device_func,
-+  BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "efimap DRIVE DEVICE",
-+  "Specify DEVICE as the actual drive for a BIOS drive DRIVE. This command"
-+  " can be used only in EFI."
-+};
-+#endif /* PLATFORM_EFI */
\f
- #ifdef SUPPORT_NETBOOT
-@@ -852,6 +999,139 @@ static struct builtin builtin_dhcp =
- };
- #endif /* SUPPORT_NETBOOT */
-+static int terminal_func (char *arg, int flags);
-+
-+#ifdef SUPPORT_GRAPHICS
-+\f
-+static int splashimage_func(char *arg, int flags) {
-+    char splashimage[64];
-+    int i;
-+    
-+    /* filename can only be 64 characters due to our buffer size */
-+    if (strlen(arg) > 63)
-+      return 1;
-+    if (flags == BUILTIN_CMDLINE) {
-+      if (!grub_open(arg))
-+          return 1;
-+      grub_close();
-+    }
-+
-+    strcpy(splashimage, arg);
-+
-+    /* get rid of TERM_NEED_INIT from the graphics terminal. */
-+    for (i = 0; term_table[i].name; i++) {
-+      if (grub_strcmp (term_table[i].name, "graphics") == 0) {
-+          term_table[i].flags &= ~TERM_NEED_INIT;
-+          break;
-+      }
-+    }
-+    
-+    graphics_set_splash(splashimage);
-+
-+    if (flags == BUILTIN_CMDLINE && graphics_inited) {
-+      graphics_end();
-+      graphics_init();
-+      graphics_cls();
-+    }
-+
-+    /* FIXME: should we be explicitly switching the terminal as a 
-+     * side effect here? */
-+    terminal_func("graphics", flags);
-+
-+    return 0;
-+}
-+
-+static struct builtin builtin_splashimage =
-+{
-+  "splashimage",
-+  splashimage_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "splashimage FILE",
-+  "Load FILE as the background image when in graphics mode."
-+};
-+
-+\f
-+/* foreground */
-+static int
-+foreground_func(char *arg, int flags)
-+{
-+    if (grub_strlen(arg) == 6) {
-+      int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2;
-+      int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2;
-+      int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2;
-+
-+      foreground = (r << 16) | (g << 8) | b;
-+      if (graphics_inited)
-+          graphics_set_palette(15, r, g, b);
-+
-+      return (0);
-+    }
-+
-+    return (1);
-+}
-+
-+static struct builtin builtin_foreground =
-+{
-+  "foreground",
-+  foreground_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "foreground RRGGBB",
-+  "Sets the foreground color when in graphics mode."
-+  "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal."
-+};
-+
-+\f
-+/* background */
-+static int
-+background_func(char *arg, int flags)
-+{
-+    if (grub_strlen(arg) == 6) {
-+      int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2;
-+      int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2;
-+      int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2;
-+
-+      background = (r << 16) | (g << 8) | b;
-+      if (graphics_inited)
-+          graphics_set_palette(0, r, g, b);
-+      return (0);
-+    }
-+
-+    return (1);
-+}
-+
-+static struct builtin builtin_background =
-+{
-+  "background",
-+  background_func,
-+  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
-+  "background RRGGBB",
-+  "Sets the background color when in graphics mode."
-+  "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal."
-+};
-+
-+#endif /* SUPPORT_GRAPHICS */
-+
-+\f
-+/* clear */
-+static int 
-+clear_func() 
-+{
-+  if (current_term->cls)
-+    current_term->cls();
-+
-+  return 0;
-+}
-+
-+static struct builtin builtin_clear =
-+{
-+  "clear",
-+  clear_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "clear",
-+  "Clear the screen"
-+};
-+
-+#ifndef PLATFORM_EFI
\f
- /* displayapm */
- static int
-@@ -893,6 +1173,7 @@ static struct builtin builtin_displayapm =
-   "displayapm",
-   "Display APM BIOS information."
- };
-+#endif /* !PLATFORM_EFI */
\f
- /* displaymem */
-@@ -912,11 +1193,11 @@ displaymem_func (char *arg, int flags)
-   if (mbi.flags & MB_INFO_MEM_MAP)
-     {
-       struct AddrRangeDesc *map = (struct AddrRangeDesc *) mbi.mmap_addr;
--      int end_addr = mbi.mmap_addr + mbi.mmap_length;
-+      unsigned long end_addr = mbi.mmap_addr + mbi.mmap_length;
-       grub_printf (" [Address Range Descriptor entries "
-                  "immediately follow (values are 64-bit)]\n");
--      while (end_addr > (int) map)
-+      while (end_addr > (unsigned long) map)
-       {
-         char *str;
-@@ -924,15 +1205,10 @@ displaymem_func (char *arg, int flags)
-           str = "Usable RAM";
-         else
-           str = "Reserved";
--        grub_printf ("   %s:  Base Address:  0x%x X 4GB + 0x%x,\n"
--                     "      Length:   0x%x X 4GB + 0x%x bytes\n",
--                     str,
--                     (unsigned long) (map->BaseAddr >> 32),
--                     (unsigned long) (map->BaseAddr & 0xFFFFFFFF),
--                     (unsigned long) (map->Length >> 32),
--                     (unsigned long) (map->Length & 0xFFFFFFFF));
--
--        map = ((struct AddrRangeDesc *) (((int) map) + 4 + map->size));
-+        grub_printf ("   %s:  Base Address: 0x%lx Length: 0x%lx bytes\n",
-+                      str, map->BaseAddr, map->Length);
-+
-+        map = ((struct AddrRangeDesc *) (((unsigned long) map) + 4 + map->size));
-       }
-     }
-@@ -1009,6 +1285,7 @@ static struct builtin builtin_dump =
-   };
- #endif /* GRUB_UTIL */
-+#ifndef PLATFORM_EFI
\f
- static char embed_info[32];
- /* embed */
-@@ -1143,6 +1420,7 @@ static struct builtin builtin_embed =
-   " is a drive, or in the \"bootloader\" area if DEVICE is a FFS partition."
-   " Print the number of sectors which STAGE1_5 occupies if successful."
- };
-+#endif /* ! PLATFORM_EFI */
\f
- /* fallback */
-@@ -1230,17 +1508,19 @@ find_func (char *arg, int flags)
-     }
-   /* Hard disks.  */
--  for (drive = 0x80; drive < 0x88; drive++)
-+  for (drive = 0x80; drive < (0x80 + MAX_HD_NUM); drive++)
-     {
-       unsigned long part = 0xFFFFFF;
--      unsigned long start, len, offset, ext_offset;
--      int type, entry;
--      char buf[SECTOR_SIZE];
-+      unsigned long start, len, offset, ext_offset, gpt_offset;
-+      int type, entry, gpt_count, gpt_size;
-+      int sector_size = get_sector_size(drive);
-+      char buf[sector_size];
-       current_drive = drive;
-       while (next_partition (drive, 0xFFFFFF, &part, &type,
-                            &start, &len, &offset, &entry,
--                           &ext_offset, buf))
-+                            &ext_offset, &gpt_offset,
-+                            &gpt_count, &gpt_size, buf))
-       {
-         if (type != PC_SLICE_TYPE_NONE
-             && ! IS_PC_SLICE_TYPE_BSD (type)
-@@ -1301,6 +1581,59 @@ static struct builtin builtin_find =
-   "Search for the filename FILENAME in all of partitions and print the list of"
-   " the devices which contain the file."
- };
-+\f
-+/* findiso */
-+\f
-+/* Search for an ISO 9660 partition.  */
-+static int
-+findiso_func (char *arg, int flags)
-+{
-+  unsigned long drive;
-+  unsigned long tmp_drive = saved_drive;
-+  unsigned long tmp_partition = saved_partition;
-+
-+  /* Hard disks.  */
-+  for (drive = 0x80; drive < 0x89; drive++)
-+    {
-+      unsigned long part = 0xFFFFFF;
-+
-+      if (drive == 0x88)
-+        drive = 0x100;
-+
-+      current_drive = drive;
-+      current_partition = part;
-+
-+      if (open_device ())
-+      {
-+        char *type = get_fsys_type();
-+        if (!grub_strcmp(type, "iso9660"))
-+        {
-+            saved_drive = current_drive;
-+            saved_partition = current_partition;
-+            errnum = ERR_NONE;
-+            return 0;
-+        }
-+      }
-+
-+      /* We want to ignore any error here.  */
-+      errnum = ERR_NONE;
-+    }
-+
-+  saved_drive = tmp_drive;
-+  saved_partition = tmp_partition;
-+
-+  errnum = ERR_FILE_NOT_FOUND;
-+  return 1;
-+}
-+
-+static struct builtin builtin_findiso =
-+{
-+  "findiso",
-+  findiso_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "findiso FILENAME",
-+  "Set root to the first device with a valid ISO 9660 filesystem."
-+};
\f
- /* fstest */
-@@ -1679,6 +2012,7 @@ static struct builtin builtin_ifconfig =
- };
- #endif /* SUPPORT_NETBOOT */
-+#ifndef PLATFORM_EFI
\f
- /* impsprobe */
- static int
-@@ -1706,6 +2040,7 @@ static struct builtin builtin_impsprobe =
-   " configuration table and boot the various CPUs which are found into"
-   " a tight loop."
- };
-+#endif /* ! PLATFORM_EFI */
\f
- /* initrd */
-@@ -1738,8 +2073,82 @@ static struct builtin builtin_initrd =
-   " appropriate parameters in the Linux setup area in memory."
- };
-+#ifndef PLATFORM_EFI
\f
- /* install */
-+static struct {
-+      int saved_sector;
-+      int installaddr;
-+      int installlist;
-+      int last_length;
-+      char *stage2_first_buffer;
-+} install_func_context = {
-+      .saved_sector = 0,
-+      .installaddr = 0,
-+      .installlist = 0,
-+      .last_length = SECTOR_SIZE,
-+      .stage2_first_buffer = NULL,
-+};
-+
-+/* Save the first sector of Stage2 in STAGE2_SECT.  */
-+/* Formerly disk_read_savesect_func with local scope inside install_func */
-+static void
-+install_savesect_helper(int sector, int offset, int length)
-+{
-+  if (debug)
-+    printf ("[%d]", sector);
-+
-+  /* ReiserFS has files which sometimes contain data not aligned
-+     on sector boundaries.  Returning an error is better than
-+     silently failing. */
-+  if (offset != 0 || length != SECTOR_SIZE)
-+    errnum = ERR_UNALIGNED;
-+
-+  install_func_context.saved_sector = sector;
-+}
-+
-+/* Write SECTOR to INSTALLLIST, and update INSTALLADDR and  INSTALLSECT.  */
-+/* Formerly disk_read_blocklist_func with local scope inside install_func */
-+static void
-+install_blocklist_helper (int sector, int offset, int length)
-+{
-+  int *installaddr = &install_func_context.installaddr;
-+  int *installlist = &install_func_context.installlist;
-+  char **stage2_first_buffer = &install_func_context.stage2_first_buffer;
-+  /* Was the last sector full? */
-+  int *last_length = &install_func_context.last_length;
-+
-+  if (debug)
-+    printf("[%d]", sector);
-+
-+  if (offset != 0 || *last_length != SECTOR_SIZE)
-+    {
-+      /* We found a non-sector-aligned data block. */
-+      errnum = ERR_UNALIGNED;
-+      return;
-+    }
-+
-+  *last_length = length;
-+
-+  if (*((unsigned long *) (*installlist - 4))
-+      + *((unsigned short *) *installlist) != sector
-+      || *installlist == (int) *stage2_first_buffer + SECTOR_SIZE + 4)
-+    {
-+      *installlist -= 8;
-+
-+      if (*((unsigned long *) (*installlist - 8)))
-+        errnum = ERR_WONT_FIT;
-+      else
-+        {
-+          *((unsigned short *) (*installlist + 2)) = (*installaddr >> 4);
-+          *((unsigned long *) (*installlist - 4)) = sector;
-+        }
-+    }
-+
-+  *((unsigned short *) *installlist) += 1;
-+  *installaddr += 512;
-+}
-+
- static int
- install_func (char *arg, int flags)
- {
-@@ -1747,8 +2156,12 @@ install_func (char *arg, int flags)
-   char *stage1_buffer = (char *) RAW_ADDR (0x100000);
-   char *stage2_buffer = stage1_buffer + SECTOR_SIZE;
-   char *old_sect = stage2_buffer + SECTOR_SIZE;
--  char *stage2_first_buffer = old_sect + SECTOR_SIZE;
--  char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE;
-+  /* stage2_first_buffer used to be defined as:
-+   * char *stage2_first_buffer = old_sect + SECTOR_SIZE;  */
-+  char **stage2_first_buffer = &install_func_context.stage2_first_buffer;
-+  /* and stage2_second_buffer was:
-+   * char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; */
-+  char *stage2_second_buffer = old_sect + SECTOR_SIZE + SECTOR_SIZE;
-   /* XXX: Probably SECTOR_SIZE is reasonable.  */
-   char *config_filename = stage2_second_buffer + SECTOR_SIZE;
-   char *dummy = config_filename + SECTOR_SIZE;
-@@ -1757,10 +2170,11 @@ install_func (char *arg, int flags)
-   int src_drive, src_partition, src_part_start;
-   int i;
-   struct geometry dest_geom, src_geom;
--  int saved_sector;
-+  int *saved_sector = &install_func_context.saved_sector;
-   int stage2_first_sector, stage2_second_sector;
-   char *ptr;
--  int installaddr, installlist;
-+  int *installaddr = &install_func_context.installaddr;
-+  int *installlist = &install_func_context.installlist;
-   /* Point to the location of the name of a configuration file in Stage 2.  */
-   char *config_file_location;
-   /* If FILE is a Stage 1.5?  */
-@@ -1769,68 +2183,18 @@ install_func (char *arg, int flags)
-   int is_open = 0;
-   /* If LBA is forced?  */
-   int is_force_lba = 0;
--  /* Was the last sector full? */
--  int last_length = SECTOR_SIZE;
-+  int *last_length = &install_func_context.last_length;
-   
-+  /* Reset state.  */
-+  *last_length = SECTOR_SIZE;
-+
-+  *stage2_first_buffer = old_sect + SECTOR_SIZE;
- #ifdef GRUB_UTIL
-   /* If the Stage 2 is in a partition mounted by an OS, this will store
-      the filename under the OS.  */
-   char *stage2_os_file = 0;
- #endif /* GRUB_UTIL */
-   
--  auto void disk_read_savesect_func (int sector, int offset, int length);
--  auto void disk_read_blocklist_func (int sector, int offset, int length);
--  
--  /* Save the first sector of Stage2 in STAGE2_SECT.  */
--  auto void disk_read_savesect_func (int sector, int offset, int length)
--    {
--      if (debug)
--      printf ("[%d]", sector);
--
--      /* ReiserFS has files which sometimes contain data not aligned
--         on sector boundaries.  Returning an error is better than
--         silently failing. */
--      if (offset != 0 || length != SECTOR_SIZE)
--      errnum = ERR_UNALIGNED;
--
--      saved_sector = sector;
--    }
--
--  /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and
--     INSTALLSECT.  */
--  auto void disk_read_blocklist_func (int sector, int offset, int length)
--    {
--      if (debug)
--      printf("[%d]", sector);
--
--      if (offset != 0 || last_length != SECTOR_SIZE)
--      {
--        /* We found a non-sector-aligned data block. */
--        errnum = ERR_UNALIGNED;
--        return;
--      }
--
--      last_length = length;
--
--      if (*((unsigned long *) (installlist - 4))
--        + *((unsigned short *) installlist) != sector
--        || installlist == (int) stage2_first_buffer + SECTOR_SIZE + 4)
--      {
--        installlist -= 8;
--
--        if (*((unsigned long *) (installlist - 8)))
--          errnum = ERR_WONT_FIT;
--        else
--          {
--            *((unsigned short *) (installlist + 2)) = (installaddr >> 4);
--            *((unsigned long *) (installlist - 4)) = sector;
--          }
--      }
--
--      *((unsigned short *) installlist) += 1;
--      installaddr += 512;
--    }
--
-   /* First, check the GNU-style long option.  */
-   while (1)
-     {
-@@ -1862,10 +2226,10 @@ install_func (char *arg, int flags)
-   addr = skip_to (0, file);
-   /* Get the installation address.  */
--  if (! safe_parse_maxint (&addr, &installaddr))
-+  if (! safe_parse_maxint (&addr, installaddr))
-     {
-       /* ADDR is not specified.  */
--      installaddr = 0;
-+      *installaddr = 0;
-       ptr = addr;
-       errnum = 0;
-     }
-@@ -1961,17 +2325,17 @@ install_func (char *arg, int flags)
-       = 0x9090;
-   
-   /* Read the first sector of Stage 2.  */
--  disk_read_hook = disk_read_savesect_func;
--  if (grub_read (stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE)
-+  disk_read_hook = install_savesect_helper;
-+  if (grub_read (*stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE)
-     goto fail;
--  stage2_first_sector = saved_sector;
-+  stage2_first_sector = *saved_sector;
-   
-   /* Read the second sector of Stage 2.  */
-   if (grub_read (stage2_second_buffer, SECTOR_SIZE) != SECTOR_SIZE)
-     goto fail;
--  stage2_second_sector = saved_sector;
-+  stage2_second_sector = *saved_sector;
-   
-   /* Check for the version of Stage 2.  */
-   if (*((short *) (stage2_second_buffer + STAGE2_VER_MAJ_OFFS))
-@@ -1987,27 +2351,27 @@ install_func (char *arg, int flags)
-   /* If INSTALLADDR is not specified explicitly in the command-line,
-      determine it by the Stage 2 id.  */
--  if (! installaddr)
-+  if (! *installaddr)
-     {
-       if (! is_stage1_5)
-       /* Stage 2.  */
--      installaddr = 0x8000;
-+      *installaddr = 0x8000;
-       else
-       /* Stage 1.5.  */
--      installaddr = 0x2000;
-+      *installaddr = 0x2000;
-     }
-   *((unsigned long *) (stage1_buffer + STAGE1_STAGE2_SECTOR))
-     = stage2_first_sector;
-   *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_ADDRESS))
--    = installaddr;
-+    = *installaddr;
-   *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_SEGMENT))
--    = installaddr >> 4;
-+    = *installaddr >> 4;
--  i = (int) stage2_first_buffer + SECTOR_SIZE - 4;
-+  i = (int) *stage2_first_buffer + SECTOR_SIZE - 4;
-   while (*((unsigned long *) i))
-     {
--      if (i < (int) stage2_first_buffer
-+      if (i < (int) *stage2_first_buffer
-         || (*((int *) (i - 4)) & 0x80000000)
-         || *((unsigned short *) i) >= 0xA00
-         || *((short *) (i + 2)) == 0)
-@@ -2021,13 +2385,13 @@ install_func (char *arg, int flags)
-       i -= 8;
-     }
--  installlist = (int) stage2_first_buffer + SECTOR_SIZE + 4;
--  installaddr += SECTOR_SIZE;
-+  *installlist = (int) *stage2_first_buffer + SECTOR_SIZE + 4;
-+  *installaddr += SECTOR_SIZE;
-   
-   /* Read the whole of Stage2 except for the first sector.  */
-   grub_seek (SECTOR_SIZE);
--  disk_read_hook = disk_read_blocklist_func;
-+  disk_read_hook = install_blocklist_helper;
-   if (! grub_read (dummy, -1))
-     goto fail;
-   
-@@ -2110,7 +2474,7 @@ install_func (char *arg, int flags)
-         /* Skip the first sector.  */
-         grub_seek (SECTOR_SIZE);
-         
--        disk_read_hook = disk_read_savesect_func;
-+        disk_read_hook = install_savesect_helper;
-         if (grub_read (stage2_buffer, SECTOR_SIZE) != SECTOR_SIZE)
-           goto fail;
-         
-@@ -2180,7 +2544,7 @@ install_func (char *arg, int flags)
-         else
- #endif /* GRUB_UTIL */
-           {
--            if (! devwrite (saved_sector - part_start, 1, stage2_buffer))
-+            if (! devwrite (*saved_sector - part_start, 1, stage2_buffer))
-               goto fail;
-           }
-       }
-@@ -2202,7 +2566,7 @@ install_func (char *arg, int flags)
-         goto fail;
-       }
--      if (fwrite (stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
-+      if (fwrite (*stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
-       {
-         fclose (fp);
-         errnum = ERR_WRITE;
-@@ -2229,7 +2593,7 @@ install_func (char *arg, int flags)
-       goto fail;
-       if (! devwrite (stage2_first_sector - src_part_start, 1,
--                    stage2_first_buffer))
-+                    *stage2_first_buffer))
-       goto fail;
-       if (! devwrite (stage2_second_sector - src_part_start, 1,
-@@ -2322,6 +2686,7 @@ static struct builtin builtin_ioprobe =
-   "ioprobe DRIVE",
-   "Probe I/O ports used for the drive DRIVE."
- };
-+#endif /* ! PLATFORM_EFI */
\f
- /* kernel */
-@@ -2456,6 +2821,7 @@ static struct builtin builtin_makeactive =
-   " This command is limited to _primary_ PC partitions on a hard disk."
- };
-+#ifndef PLATFORM_EFI
\f
- /* map */
- /* Map FROM_DRIVE to TO_DRIVE.  */
-@@ -2519,6 +2885,7 @@ static struct builtin builtin_map =
-   " when you chain-load some operating systems, such as DOS, if such an"
-   " OS resides at a non-first drive."
- };
-+#endif /* ! PLATFORM_EFI */
\f
- #ifdef USE_MD5_PASSWORDS
-@@ -2579,6 +2946,7 @@ static struct builtin builtin_md5crypt =
- };
- #endif /* USE_MD5_PASSWORDS */
-+#ifndef PLATFORM_EFI
\f
- /* module */
- static int
-@@ -2656,6 +3024,7 @@ static struct builtin builtin_modulenounzip =
-   "The same as `module', except that automatic decompression is"
-   " disabled."
- };
-+#endif /* !PLATFORM_EFI */
\f
- /* pager [on|off] */
-@@ -2698,7 +3067,6 @@ partnew_func (char *arg, int flags)
-   int start_cl, start_ch, start_dh;
-   int end_cl, end_ch, end_dh;
-   int entry;
--  char mbr[512];
-   /* Convert a LBA address to a CHS address in the INT 13 format.  */
-   auto void lba_to_chs (int lba, int *cl, int *ch, int *dh);
-@@ -2729,6 +3097,9 @@ partnew_func (char *arg, int flags)
-       return 1;
-     }
-+  int sector_size = get_sector_size(current_drive);
-+  char mbr[sector_size];
-+
-   /* The partition must a primary partition.  */
-   if ((current_partition >> 16) > 3
-       || (current_partition & 0xFFFF) != 0xFFFF)
-@@ -2762,7 +3133,7 @@ partnew_func (char *arg, int flags)
-     return 1;
-   /* Read the MBR.  */
--  if (! rawread (current_drive, 0, 0, SECTOR_SIZE, mbr))
-+  if (! rawread (current_drive, 0, 0, sector_size, mbr))
-     return 1;
-   /* Check if the new partition will fit in the disk.  */
-@@ -2815,9 +3186,8 @@ parttype_func (char *arg, int flags)
- {
-   int new_type;
-   unsigned long part = 0xFFFFFF;
--  unsigned long start, len, offset, ext_offset;
--  int entry, type;
--  char mbr[512];
-+  unsigned long start, len, offset, ext_offset, gpt_offset;
-+  int entry, type, gpt_count, gpt_size;
-   /* Get the drive and the partition.  */
-   if (! set_device (arg))
-@@ -2829,6 +3199,9 @@ parttype_func (char *arg, int flags)
-       errnum = ERR_BAD_ARGUMENT;
-       return 1;
-     }
-+
-+  int sector_size = get_sector_size(current_drive);
-+  char mbr[sector_size];
-   
-   /* The partition must be a PC slice.  */
-   if ((current_partition >> 16) == 0xFF
-@@ -2853,8 +3226,15 @@ parttype_func (char *arg, int flags)
-   /* Look for the partition.  */
-   while (next_partition (current_drive, 0xFFFFFF, &part, &type,
-                        &start, &len, &offset, &entry,
--                       &ext_offset, mbr))
-+                       &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr))
-     {
-+        /* The partition may not be a GPT partition.  */
-+        if (gpt_offset != 0)
-+          {
-+              errnum = ERR_BAD_ARGUMENT;
-+              return 1;
-+          }
-+
-       if (part == current_partition)
-       {
-         /* Found.  */
-@@ -2900,6 +3280,11 @@ password_func (char *arg, int flags)
-       arg = skip_to (0, arg);
-     }
- #endif
-+  else if (grub_memcmp (arg, "--encrypted", 5) == 0)
-+    {
-+      type = PASSWORD_ENCRYPTED;
-+      arg = skip_to (0, arg);
-+    }
-   if (grub_memcmp (arg, "--", 2) == 0)
-     {
-       type = PASSWORD_UNSUPPORTED;
-@@ -2947,7 +3332,7 @@ static struct builtin builtin_password =
-   "password",
-   password_func,
-   BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_NO_ECHO,
--  "password [--md5] PASSWD [FILE]",
-+  "password [--md5|--encrypted] PASSWD [FILE]",
-   "If used in the first section of a menu file, disable all"
-   " interactive editing control (menu entry editor and"
-   " command line). If the password PASSWD is entered, it loads the"
-@@ -2956,7 +3341,8 @@ static struct builtin builtin_password =
-   " instructions.  You can also use it in the script section, in"
-   " which case it will ask for the password, before continueing."
-   " The option --md5 tells GRUB that PASSWD is encrypted with"
--  " md5crypt."
-+  " md5crypt, --encrypted that PASSWD is encrypted (with algorithm"
-+  " specified in PASSWD: supported is md5, sha-256, sha-512)."
- };
\f
-@@ -2982,8 +3368,8 @@ static struct builtin builtin_pause =
-   "Print MESSAGE, then wait until a key is pressed."
- };
-+#if defined (GRUB_UTIL) || defined (PLATFORM_EFI)
\f
--#ifdef GRUB_UTIL
- /* quit */
- static int
- quit_func (char *arg, int flags)
-@@ -3002,7 +3388,7 @@ static struct builtin builtin_quit =
-   "quit",
-   "Exit from the GRUB shell."
- };
--#endif /* GRUB_UTIL */
-+#endif /* defined (GRUB_UTIL) || defined (PLATFORM_EFI) */
\f
- #ifdef SUPPORT_NETBOOT
-@@ -3165,7 +3551,8 @@ real_root_func (char *arg, int attempt_mount)
-       return 1;
-       
-       /* Print the type of the filesystem.  */
--      print_fsys_type ();
-+      if (grub_verbose)
-+      print_fsys_type ();
-     }
-   
-   return 0;
-@@ -3217,146 +3604,181 @@ static struct builtin builtin_rootnoverify =
- };
\f
--/* savedefault */
-+
-+#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL) && !defined(PLATFORM_EFI)
-+/* Write specified default entry number into stage2 file. */
- static int
--savedefault_func (char *arg, int flags)
-+savedefault_helper(int new_default)
- {
--#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL)
--  unsigned long tmp_drive = saved_drive;
--  unsigned long tmp_partition = saved_partition;
--  char *default_file = (char *) DEFAULT_FILE_BUF;
--  char buf[10];
--  char sect[SECTOR_SIZE];
--  int entryno;
--  int sector_count = 0;
--  int saved_sectors[2];
--  int saved_offsets[2];
--  int saved_lengths[2];
--
--  /* Save sector information about at most two sectors.  */
--  auto void disk_read_savesect_func (int sector, int offset, int length);
--  void disk_read_savesect_func (int sector, int offset, int length)
--    {
--      if (sector_count < 2)
--      {
--        saved_sectors[sector_count] = sector;
--        saved_offsets[sector_count] = offset;
--        saved_lengths[sector_count] = length;
--      }
--      sector_count++;
--    }
--  
--  /* This command is only useful when you boot an entry from the menu
--     interface.  */
--  if (! (flags & BUILTIN_SCRIPT))
-+  char buffer[512];
-+  int *entryno_ptr;
-+
-+  /* Get the geometry of the boot drive (i.e. the disk which contains
-+     this stage2).  */
-+  if (get_diskinfo (boot_drive, &buf_geom))
-     {
--      errnum = ERR_UNRECOGNIZED;
-+      errnum = ERR_NO_DISK;
-       return 1;
-     }
--  /* Determine a saved entry number.  */
--  if (*arg)
-+  /* Load the second sector of this stage2.  */
-+  if (! rawread (boot_drive, install_second_sector, 0, SECTOR_SIZE, buffer))
-     {
--      if (grub_memcmp (arg, "fallback", sizeof ("fallback") - 1) == 0)
--      {
--        int i;
--        int index = 0;
--        
--        for (i = 0; i < MAX_FALLBACK_ENTRIES; i++)
--          {
--            if (fallback_entries[i] < 0)
--              break;
--            if (fallback_entries[i] == current_entryno)
--              {
--                index = i + 1;
--                break;
--              }
--          }
--        
--        if (index >= MAX_FALLBACK_ENTRIES || fallback_entries[index] < 0)
--          {
--            /* This is the last.  */
--            errnum = ERR_BAD_ARGUMENT;
--            return 1;
--          }
-+      return 1;
-+    }
--        entryno = fallback_entries[index];
--      }
--      else if (! safe_parse_maxint (&arg, &entryno))
--      return 1;
-+  /* Sanity check.  */
-+  if (buffer[STAGE2_STAGE2_ID] != STAGE2_ID_STAGE2
-+      || *((short *) (buffer + STAGE2_VER_MAJ_OFFS)) != COMPAT_VERSION)
-+    {
-+      errnum = ERR_BAD_VERSION;
-+      return 1;
-     }
--  else
--    entryno = current_entryno;
-+  
-+  entryno_ptr = (int *) (buffer + STAGE2_SAVED_ENTRYNO);
--  /* Open the default file.  */
--  saved_drive = boot_drive;
--  saved_partition = install_partition;
--  if (grub_open (default_file))
-+  /* Check if the saved entry number differs from current entry number.  */
-+  if (*entryno_ptr != new_default)
-     {
--      int len;
-+      /* Overwrite the saved entry number.  */
-+      *entryno_ptr = new_default;
-       
--      disk_read_hook = disk_read_savesect_func;
--      len = grub_read (buf, sizeof (buf));
--      disk_read_hook = 0;
--      grub_close ();
-+      /* Save the image in the disk.  */
-+      if (! rawwrite (boot_drive, install_second_sector, buffer))
-+      return 1;
-       
--      if (len != sizeof (buf))
--      {
--        /* This is too small. Do not modify the file manually, please!  */
--        errnum = ERR_READ;
--        goto fail;
--      }
-+      /* Clear the cache.  */
-+      buf_track = -1;
-+    }
--      if (sector_count > 2)
--      {
--        /* Is this possible?! Too fragmented!  */
--        errnum = ERR_FSYS_CORRUPT;
--        goto fail;
--      }
--      
--      /* Set up a string to be written.  */
--      grub_memset (buf, '\n', sizeof (buf));
--      grub_sprintf (buf, "%d", entryno);
--      
--      if (saved_lengths[0] < sizeof (buf))
--      {
--        /* The file is anchored to another file and the first few bytes
--           are spanned in two sectors. Uggh...  */
--        if (! rawread (current_drive, saved_sectors[0], 0, SECTOR_SIZE,
--                       sect))
--          goto fail;
--        grub_memmove (sect + saved_offsets[0], buf, saved_lengths[0]);
--        if (! rawwrite (current_drive, saved_sectors[0], sect))
--          goto fail;
-+  return 0;
-+}
-+#endif
--        if (! rawread (current_drive, saved_sectors[1], 0, SECTOR_SIZE,
--                       sect))
--          goto fail;
--        grub_memmove (sect + saved_offsets[1],
--                      buf + saved_lengths[0],
--                      sizeof (buf) - saved_lengths[0]);
--        if (! rawwrite (current_drive, saved_sectors[1], sect))
--          goto fail;
--      }
-+#if !defined(SUPPORT_DISKLESS) && defined(GRUB_UTIL)
-+#define SECTOR_SIZE 0x200
-+/*
-+ * Full implementation of new `savedefault' for GRUB shell.
-+ * XXX This needs fixing for stage2 files which aren't accessible
-+ *     through a mounted filesystem.
-+ */
-+static int
-+savedefault_shell(char *arg, int flags)
-+{
-+  char *stage2_os_file = "/boot/grub/stage2"; /* Default filename */
-+  FILE *fp;
-+  char buffer[512];
-+  int *entryno_ptr;
-+  int new_default = 0;
-+  int old_default = 0;
-+
-+  while (1)
-+    {
-+      if (grub_memcmp ("--stage2=", arg, sizeof ("--stage2=") - 1) == 0)
-+        {
-+          stage2_os_file = arg + sizeof ("--stage2=") - 1;
-+          arg = skip_to (0, arg);
-+          nul_terminate (stage2_os_file);
-+        }
-+      else if (grub_memcmp ("--default=", arg, sizeof ("--default=") - 1) == 0)
-+        {
-+          char *p = arg + sizeof ("--default=") - 1;
-+          if (! safe_parse_maxint (&p, &new_default))
-+            return 1;
-+          arg = skip_to (0, arg);
-+        }
-+      else if (grub_memcmp ("--once", arg, sizeof ("--once") - 1) == 0)
-+        {
-+          new_default <<= 8;
-+          new_default |= STAGE2_ONCEONLY_ENTRY;
-+          arg = skip_to (0, arg);
-+        }
-       else
--      {
--        /* This is a simple case. It fits into a single sector.  */
--        if (! rawread (current_drive, saved_sectors[0], 0, SECTOR_SIZE,
--                       sect))
--          goto fail;
--        grub_memmove (sect + saved_offsets[0], buf, sizeof (buf));
--        if (! rawwrite (current_drive, saved_sectors[0], sect))
--          goto fail;
--      }
-+        break;
-+    }
--      /* Clear the cache.  */
--      buf_track = -1;
-+  if (! (fp = fopen(stage2_os_file, "r+")))
-+    {
-+      errnum = ERR_FILE_NOT_FOUND;
-+      return 1;
-+    }
-+  
-+  if (fseek (fp, SECTOR_SIZE, SEEK_SET) != 0)
-+    {
-+      fclose (fp);
-+      errnum = ERR_BAD_VERSION;
-+      return 1;
-+    }
-+  
-+  if (fread (buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
-+    {
-+      fclose (fp);
-+      errnum = ERR_READ;
-+      return 1;
-     }
-- fail:
--  saved_drive = tmp_drive;
--  saved_partition = tmp_partition;
--  return errnum;
-+  /* Sanity check.  */
-+  if (buffer[STAGE2_STAGE2_ID] != STAGE2_ID_STAGE2
-+      || *((short *) (buffer + STAGE2_VER_MAJ_OFFS)) != COMPAT_VERSION)
-+    {
-+      errnum = ERR_BAD_VERSION;
-+      return 1;
-+    }
-+  
-+  entryno_ptr = (int *) (buffer + STAGE2_SAVED_ENTRYNO);
-+  if (new_default & STAGE2_ONCEONLY_ENTRY)
-+    {
-+      old_default=*entryno_ptr;
-+      *entryno_ptr = new_default + (old_default & 0xFF);
-+    }
-+  else
-+    {
-+      *entryno_ptr = new_default;
-+    }
-+
-+  if (fseek (fp, SECTOR_SIZE, SEEK_SET) != 0)
-+    {
-+      fclose (fp);
-+      errnum = ERR_BAD_VERSION;
-+      return 1;
-+    }
-+  
-+  if (fwrite (buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
-+    {
-+      fclose (fp);
-+      errnum = ERR_WRITE;
-+      return 1;
-+    }
-+  
-+  (void)fflush (fp);
-+  fclose (fp);
-+  return 0;
-+}
-+#undef SECTOR_SIZE
-+#endif
-+
-+/* savedefault */
-+static int
-+savedefault_func (char *arg, int flags)
-+{
-+#if !defined(SUPPORT_DISKLESS)
-+#if !defined(GRUB_UTIL)
-+#if !defined(PLATFORM_EFI)
-+  /* This command is only useful when you boot an entry from the menu
-+     interface.  */
-+  if (! (flags & BUILTIN_SCRIPT))
-+    {
-+      errnum = ERR_UNRECOGNIZED;
-+      return 1;
-+    }
-+
-+  return savedefault_helper(current_entryno);
-+#else /* defined(PLATFORM_EFI) */
-+  return grub_save_saved_default (current_entryno);
-+#endif
-+#else /* defined(GRUB_UTIL) */
-+  return savedefault_shell(arg, flags);
-+#endif
- #else /* ! SUPPORT_DISKLESS && ! GRUB_UTIL */
-   errnum = ERR_UNRECOGNIZED;
-   return 1;
-@@ -3368,10 +3790,14 @@ static struct builtin builtin_savedefault =
-   "savedefault",
-   savedefault_func,
-   BUILTIN_CMDLINE,
--  "savedefault [NUM | `fallback']",
--  "Save the current entry as the default boot entry if no argument is"
--  " specified. If a number is specified, this number is saved. If"
--  " `fallback' is used, next fallback entry is saved."
-+#ifdef GRUB_UTIL
-+  "savedefault [--stage2=STAGE2_FILE] [--default=DEFAULT] [--once]",
-+  "Save DEFAULT as the default boot entry in STAGE2_FILE. If '--once'"
-+  " is specified, the default is reset after the next reboot."
-+#else
-+  "savedefault",
-+  "Save the current entry as the default boot entry."
-+#endif
- };
\f
-@@ -3527,6 +3953,7 @@ static struct builtin builtin_serial =
- };
- #endif /* SUPPORT_SERIAL */
-+#ifndef PLATFORM_EFI
\f
- /* setkey */
- struct keysym
-@@ -3612,50 +4039,47 @@ static struct keysym keysym_table[] =
-   {"delete",          0,              0x7f,   0,      0x53}
- };
--static int
--setkey_func (char *arg, int flags)
-+static int find_key_code (char *key)
- {
--  char *to_key, *from_key;
--  int to_code, from_code;
--  int map_in_interrupt = 0;
--  
--  auto int find_key_code (char *key);
--  auto int find_ascii_code (char *key);
--  
--  auto int find_key_code (char *key)
--    {
--      int i;
-+  int i;
--      for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++)
--      {
--        if (keysym_table[i].unshifted_name &&
--            grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
--          return keysym_table[i].keycode;
--        else if (keysym_table[i].shifted_name &&
--                 grub_strcmp (key, keysym_table[i].shifted_name) == 0)
--          return keysym_table[i].keycode;
--      }
--      
--      return 0;
-+  for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++)
-+    {
-+      if (keysym_table[i].unshifted_name &&
-+          grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
-+        return keysym_table[i].keycode;
-+      else if (keysym_table[i].shifted_name &&
-+               grub_strcmp (key, keysym_table[i].shifted_name) == 0)
-+        return keysym_table[i].keycode;
-     }
-   
--  auto int find_ascii_code (char *key)
-+  return 0;
-+}
-+  
-+static int find_ascii_code (char *key)
-+{
-+  int i;
-+  
-+  for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++)
-     {
--      int i;
--      
--      for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++)
--      {
--        if (keysym_table[i].unshifted_name &&
--            grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
--          return keysym_table[i].unshifted_ascii;
--        else if (keysym_table[i].shifted_name &&
--                 grub_strcmp (key, keysym_table[i].shifted_name) == 0)
--          return keysym_table[i].shifted_ascii;
--      }
--      
--      return 0;
-+      if (keysym_table[i].unshifted_name &&
-+          grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
-+        return keysym_table[i].unshifted_ascii;
-+      else if (keysym_table[i].shifted_name &&
-+               grub_strcmp (key, keysym_table[i].shifted_name) == 0)
-+        return keysym_table[i].shifted_ascii;
-     }
-   
-+  return 0;
-+}
-+
-+static int
-+setkey_func (char *arg, int flags)
-+{
-+  char *to_key, *from_key;
-+  int to_code, from_code;
-+  int map_in_interrupt = 0;
-+  
-   to_key = arg;
-   from_key = skip_to (0, to_key);
-@@ -3830,15 +4254,15 @@ setup_func (char *arg, int flags)
-       {
-         char tmp[16];
-         grub_sprintf (tmp, ",%d", (partition >> 16) & 0xFF);
--        grub_strncat (device, tmp, 256);
-+        grub_strncat (device, tmp, 16);
-       }
-       if ((partition & 0x00FF00) != 0x00FF00)
-       {
-         char tmp[16];
-         grub_sprintf (tmp, ",%c", 'a' + ((partition >> 8) & 0xFF));
--        grub_strncat (device, tmp, 256);
-+        grub_strncat (device, tmp, 16);
-       }
--      grub_strncat (device, ")", 256);
-+      grub_strncat (device, ")", 16);
-     }
-   
-   int embed_stage1_5 (char *stage1_5, int drive, int partition)
-@@ -3973,7 +4397,7 @@ setup_func (char *arg, int flags)
-   /* The prefix was determined.  */
-   grub_sprintf (stage2, "%s%s", prefix, "/stage2");
--  grub_sprintf (config_filename, "%s%s", prefix, "/menu.lst");
-+  grub_sprintf (config_filename, "%s%s", prefix, "/grub.conf");
-   *real_config_filename = 0;
-   /* Check if stage2 exists.  */
-@@ -4083,9 +4507,26 @@ static struct builtin builtin_setup =
-   " partition where GRUB images reside, specify the option `--stage2'"
-   " to tell GRUB the file name under your OS."
- };
-+#endif /* ! PLATFORM_EFI */
-+
-+\f
-+static int
-+silent_func (char *arg, int flags)
-+{
-+  silent_grub = 1;
-+  return 0;
-+}
-+
-+static struct builtin builtin_silent =
-+{
-+  "silent",
-+  silent_func,
-+  BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "grub will attempt to avoid printing anything to the screen"
-+};
\f
--#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES)
-+#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) || defined(SUPPORT_GRAPHICS)
- /* terminal */
- static int
- terminal_func (char *arg, int flags)
-@@ -4244,17 +4685,21 @@ terminal_func (char *arg, int flags)
-  end:
-   current_term = term_table + default_term;
-   current_term->flags = term_flags;
--  
-+
-   if (lines)
-     max_lines = lines;
-   else
--    /* 24 would be a good default value.  */
--    max_lines = 24;
--  
-+    max_lines = current_term->max_lines;
-+
-   /* If the interface is currently the command-line,
-      restart it to repaint the screen.  */
--  if (current_term != prev_term && (flags & BUILTIN_CMDLINE))
-+  if ((current_term != prev_term) && (flags & BUILTIN_CMDLINE)){
-+    if (prev_term->shutdown)
-+      prev_term->shutdown();
-+    if (current_term->startup)
-+      current_term->startup();
-     grub_longjmp (restart_cmdline_env, 0);
-+  }
-   
-   return 0;
- }
-@@ -4264,7 +4709,7 @@ static struct builtin builtin_terminal =
-   "terminal",
-   terminal_func,
-   BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
--  "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules]",
-+  "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules] [graphics]",
-   "Select a terminal. When multiple terminals are specified, wait until"
-   " you push any key to continue. If both console and serial are specified,"
-   " the terminal to which you input a key first will be selected. If no"
-@@ -4276,7 +4721,7 @@ static struct builtin builtin_terminal =
-   " seconds. The option --lines specifies the maximum number of lines."
-   " The option --silent is used to suppress messages."
- };
--#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */
-+#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES || SUPPORT_GRAPHICS */
\f
- #ifdef SUPPORT_SERIAL
-@@ -4462,6 +4907,7 @@ static struct builtin builtin_testload =
-   " step is to try loading a kernel."
- };
-+#ifndef PLATFORM_EFI
\f
- /* testvbe MODE */
- static int
-@@ -4566,6 +5012,7 @@ static struct builtin builtin_testvbe =
-   "testvbe MODE",
-   "Test the VBE mode MODE. Hit any key to return."
- };
-+#endif /* !PLATFORM_EFI */
\f
- #ifdef SUPPORT_NETBOOT
-@@ -4598,6 +5045,15 @@ static struct builtin builtin_tftpserver =
- static int
- timeout_func (char *arg, int flags)
- {
-+  /* One-shot default shenanigans -- don't piss around with the menu! */
-+  if (grub_timeout != -1)
-+    return 0;
-+  if ((saved_entryno & STAGE2_ONCEONLY_ENTRY) != 0)
-+    {
-+      grub_timeout = 0;
-+      return 0;
-+    }
-+
-   if (! safe_parse_maxint (&arg, &grub_timeout))
-     return 1;
-@@ -4661,6 +5117,7 @@ static struct builtin builtin_unhide =
-   " partition type code."
- };
-+#ifndef PLATFORM_EFI
\f
- /* uppermem */
- static int
-@@ -4790,11 +5247,34 @@ static struct builtin builtin_vbeprobe =
-   "Probe VBE information. If the mode number MODE is specified, show only"
-   " the information about only the mode."
- };
--  
-+#endif /* ! PLATFORM_EFI */
-+
-+\f
-+/* version */
-+static int
-+version_func (char *arg, int flags)
-+{
-+  grub_printf ("\n    GNU GRUB  version %s  (%dK lower / %dK upper memory)\n\n",
-+                version_string, mbi.mem_lower, mbi.mem_upper);
-+  return 0;
-+}
-+
-+static struct builtin builtin_version =
-+{
-+  "version",
-+  version_func,
-+  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
-+  "version",
-+  "Display grub version."
-+};
-+
\f
- /* The table of builtin commands. Sorted in dictionary order.  */
- struct builtin *builtin_table[] =
- {
-+#ifdef SUPPORT_GRAPHICS
-+  &builtin_background,
-+#endif
-   &builtin_blocklist,
-   &builtin_boot,
- #ifdef SUPPORT_NETBOOT
-@@ -4802,25 +5282,37 @@ struct builtin *builtin_table[] =
- #endif /* SUPPORT_NETBOOT */
-   &builtin_cat,
-   &builtin_chainloader,
-+  &builtin_clear,
-   &builtin_cmp,
-   &builtin_color,
-   &builtin_configfile,
-   &builtin_debug,
-   &builtin_default,
--#ifdef GRUB_UTIL
-+#if defined(GRUB_UTIL) || defined(PLATFORM_EFI)
-   &builtin_device,
--#endif /* GRUB_UTIL */
-+#endif /* defined(GRUB_UTIL) || defined(PLATFORM_EFI) */
- #ifdef SUPPORT_NETBOOT
-   &builtin_dhcp,
- #endif /* SUPPORT_NETBOOT */
-+#ifndef PLATFORM_EFI
-   &builtin_displayapm,
-+#endif
-   &builtin_displaymem,
- #ifdef GRUB_UTIL
-   &builtin_dump,
- #endif /* GRUB_UTIL */
-+#ifdef PLATFORM_EFI
-+  &builtin_efimap,
-+#endif
-+#ifndef PLATFORM_EFI
-   &builtin_embed,
-+#endif
-   &builtin_fallback,
-   &builtin_find,
-+  &builtin_findiso,
-+#ifdef SUPPORT_GRAPHICS
-+  &builtin_foreground,
-+#endif
-   &builtin_fstest,
-   &builtin_geometry,
-   &builtin_halt,
-@@ -4830,27 +5322,35 @@ struct builtin *builtin_table[] =
- #ifdef SUPPORT_NETBOOT
-   &builtin_ifconfig,
- #endif /* SUPPORT_NETBOOT */
-+#ifndef PLATFORM_EFI
-   &builtin_impsprobe,
-+#endif
-   &builtin_initrd,
-+#ifndef PLATFORM_EFI
-   &builtin_install,
-   &builtin_ioprobe,
-+#endif
-   &builtin_kernel,
-   &builtin_lock,
-   &builtin_makeactive,
-+#ifndef PLATFORM_EFI
-   &builtin_map,
-+#endif
- #ifdef USE_MD5_PASSWORDS
-   &builtin_md5crypt,
- #endif /* USE_MD5_PASSWORDS */
-+#ifndef PLATFORM_EFI
-   &builtin_module,
-   &builtin_modulenounzip,
-+#endif
-   &builtin_pager,
-   &builtin_partnew,
-   &builtin_parttype,
-   &builtin_password,
-   &builtin_pause,
--#ifdef GRUB_UTIL
-+#if defined(GRUB_UTIL) || defined(PLATFORM_EFI)
-   &builtin_quit,
--#endif /* GRUB_UTIL */
-+#endif /* defined(GRUB_UTIL) || defined(PLATFORM_EFI) */
- #ifdef SUPPORT_NETBOOT
-   &builtin_rarp,
- #endif /* SUPPORT_NETBOOT */
-@@ -4862,23 +5362,35 @@ struct builtin *builtin_table[] =
- #ifdef SUPPORT_SERIAL
-   &builtin_serial,
- #endif /* SUPPORT_SERIAL */
-+#ifndef PLATFORM_EFI
-   &builtin_setkey,
-   &builtin_setup,
--#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES)
-+#endif
-+  &builtin_silent,
-+#ifdef SUPPORT_GRAPHICS
-+  &builtin_splashimage,
-+#endif /* SUPPORT_GRAPHICS */
-+#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) || defined(SUPPORT_GRAPHICS)
-   &builtin_terminal,
--#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */
-+#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES || SUPPORT_GRAPHICS */
- #ifdef SUPPORT_SERIAL
-   &builtin_terminfo,
- #endif /* SUPPORT_SERIAL */
-   &builtin_testload,
-+#ifndef PLATFORM_EFI
-   &builtin_testvbe,
-+#endif
- #ifdef SUPPORT_NETBOOT
-   &builtin_tftpserver,
- #endif /* SUPPORT_NETBOOT */
-   &builtin_timeout,
-   &builtin_title,
-   &builtin_unhide,
-+#ifndef PLATFORM_EFI
-   &builtin_uppermem,
-   &builtin_vbeprobe,
-+#endif
-+  &builtin_verbose,
-+  &builtin_version,
-   0
- };
-diff --git a/stage2/char_io.c b/stage2/char_io.c
-index c86c240..073201a 100644
---- a/stage2/char_io.c
-+++ b/stage2/char_io.c
-@@ -35,29 +35,37 @@ struct term_entry term_table[] =
-     {
-       "console",
-       0,
-+      24,
-       console_putchar,
-       console_checkkey,
-       console_getkey,
-+      console_keystatus,
-       console_getxy,
-       console_gotoxy,
-       console_cls,
-       console_setcolorstate,
-       console_setcolor,
--      console_setcursor
-+      console_setcursor,
-+      0, 
-+      0
-     },
- #ifdef SUPPORT_SERIAL
-     {
-       "serial",
-       /* A serial device must be initialized.  */
-       TERM_NEED_INIT,
-+      24,
-       serial_putchar,
-       serial_checkkey,
-       serial_getkey,
-+      0,
-       serial_getxy,
-       serial_gotoxy,
-       serial_cls,
-       serial_setcolorstate,
-       0,
-+      0,
-+      0, 
-       0
-     },
- #endif /* SUPPORT_SERIAL */
-@@ -65,17 +73,39 @@ struct term_entry term_table[] =
-     {
-       "hercules",
-       0,
-+      24,
-       hercules_putchar,
-       console_checkkey,
-       console_getkey,
-+      console_keystatus,
-       hercules_getxy,
-       hercules_gotoxy,
-       hercules_cls,
-       hercules_setcolorstate,
-       hercules_setcolor,
--      hercules_setcursor
-+      hercules_setcursor,
-+      0,
-+      0
-     },      
- #endif /* SUPPORT_HERCULES */
-+#ifdef SUPPORT_GRAPHICS
-+    { "graphics",
-+      TERM_NEED_INIT, /* flags */
-+      30, /* number of lines */
-+      graphics_putchar, /* putchar */
-+      console_checkkey, /* checkkey */
-+      console_getkey, /* getkey */
-+      console_keystatus, /* keystatus */
-+      graphics_getxy, /* getxy */
-+      graphics_gotoxy, /* gotoxy */
-+      graphics_cls, /* cls */
-+      graphics_setcolorstate, /* setcolorstate */
-+      graphics_setcolor, /* setcolor */
-+      graphics_setcursor, /* nocursor */
-+      graphics_init, /* initialize */
-+      graphics_end /* shutdown */
-+    },
-+#endif /* SUPPORT_GRAPHICS */
-     /* This must be the last entry.  */
-     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
-   };
-@@ -101,16 +131,16 @@ print_error (void)
- }
- char *
--convert_to_ascii (char *buf, int c,...)
-+convert_to_ascii (char *buf, int c, unsigned int num)
- {
--  unsigned long num = *((&c) + 1), mult = 10;
-+  unsigned int mult = 10;
-   char *ptr = buf;
- #ifndef STAGE1_5
-   if (c == 'x' || c == 'X')
-     mult = 16;
--  if ((num & 0x80000000uL) && c == 'd')
-+  if ((int) num < 0 && c == 'd')
-     {
-       num = (~num) + 1;
-       *(ptr++) = '-';
-@@ -149,87 +179,266 @@ grub_putstr (const char *str)
-     grub_putchar (*str++);
- }
--void
--grub_printf (const char *format,...)
-+static void write_char(char **str, char c, int *count)
- {
--  int *dataptr = (int *) &format;
--  char c, str[16];
--  
--  dataptr++;
--
--  while ((c = *(format++)) != 0)
--    {
--      if (c != '%')
--      grub_putchar (c);
--      else
--      switch (c = *(format++))
--        {
--#ifndef STAGE1_5
--        case 'd':
--        case 'x':
--        case 'X':
--#endif
--        case 'u':
--          *convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0;
--          grub_putstr (str);
--          break;
--
--#ifndef STAGE1_5
--        case 'c':
--          grub_putchar ((*(dataptr++)) & 0xff);
--          break;
-+    if (str && *str)
-+        *(*str)++ = c;
-+    else
-+        putchar(c);
-+    (*count)++;
-+}
--        case 's':
--          grub_putstr ((char *) *(dataptr++));
--          break;
--#endif
--        }
-+static void write_str(char **str, char *s, int *count)
-+{
-+    if (s) {
-+        while (*s)
-+            write_char(str, *s++, count);
-+    } else {
-+        write_str(str, "(nil)", count);
-     }
- }
--#ifndef STAGE1_5
-+#define format_ascii(buf, val, is_hex, is_cap, num_pad_chars) ({    \
-+        int _n = sizeof ((buf)) - 2;                                \
-+        typeof(val) _nval = (val);                                  \
-+        int _negative = 0;                                          \
-+        int _mult = is_hex ? 16 : 10;                               \
-+        char _a = is_cap ? 'A' : 'a';                               \
-+      int _pad = num_pad_chars; \
-+                  char hex[] = "0123456789abcdef"; \
-+        memset((buf), '\0', sizeof ((buf)));                      \
-+        if (!(_nval > 0LL))                                         \
-+            _negative = 1;                                          \
-+        if (_nval == 0LL)                                           \
-+            _negative = 0;                                          \
-+        if (_negative)                                              \
-+            _nval = (_nval ^ -1);                                   \
-+        do {                                                        \
-+            int _dig = _nval % _mult;                               \
-+            (buf)[_n--] = ((_dig > 9) ? _dig + _a - 10 : '0'+_dig); \
-+          if (_pad > 0) _pad--; \
-+        } while (_nval /= _mult);                                   \
-+      while (_pad--) \
-+              (buf)[_n--] = '0'; \
-+        if (_negative)                                              \
-+            (buf)[_n--] = '-';                                      \
-+        _mult = 0;                                                  \
-+        _n++;                                                       \
-+        while (_n < sizeof ((buf)))                               \
-+            (buf)[_mult++] = (buf)[_n++];                           \
-+        if (_negative && _mult > 1)                                 \
-+            ((buf)[_mult-2])++;                                     \
-+    })
-+
- int
--grub_sprintf (char *buffer, const char *format, ...)
-+grub_vsprintf (char *str, const char *fmt, va_list args)
- {
--  /* XXX hohmuth
--     ugly hack -- should unify with printf() */
--  int *dataptr = (int *) &format;
--  char c, *ptr, str[16];
--  char *bp = buffer;
--
--  dataptr++;
--
--  while ((c = *format++) != 0)
--    {
--      if (c != '%')
--      *bp++ = c; /* putchar(c); */
--      else
--      switch (c = *(format++))
--        {
--        case 'd': case 'u': case 'x':
--          *convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0;
--
--          ptr = str;
-+    char c;
-+    char buf[40];
-+    int pos = 0;
-+
-+    int count = 0;
-+
-+    char *str_arg;
-+    int int_arg;
-+    unsigned char uchar_arg;
-+    unsigned ushort_arg;
-+    unsigned int uint_arg;
-+    signed long long_arg;
-+    unsigned long ulong_arg;
-+    signed long long longlong_arg;
-+    unsigned long long ulonglong_arg;
-+
-+    c = *fmt++;
-+    if (!c)
-+        return 0;
-+
-+    int is_fmt = 0, is_long = 0, is_signed = 1, is_cap = 0, is_zero_padded = 0;
-+    int num_pad_chars = 0;
-+    int restart = 1;
-+    do {
-+        if (restart) {
-+            restart = 0;
-+            is_fmt = 0;
-+            is_long = 0;
-+            is_cap = 0;
-+            is_signed = 1;
-+          is_zero_padded = 0;
-+          num_pad_chars = 0;
-+            buf[0] = '\0';
-+            pos = 0;
-+        }
-+
-+        if (!is_fmt) {
-+            if (c == '%') {
-+                is_fmt = 1;
-+                buf[pos++] = c;
-+                buf[pos] = '\0';
-+                continue;
-+            } else {
-+                write_char(&str, c, &count);
-+                continue;
-+            }
-+        }
-+
-+        /* below here we only ever hit when is_fmt is  1 */
-+        switch (c) {
-+            /* first, modifiers */
-+            case '%':
-+                if (pos != 0)
-+                    write_str(&str, buf, &count);
-+                write_char(&str, c, &count);
-+                restart = 1;
-+                continue;
-+          case '0':
-+              if (!is_zero_padded) {
-+                      buf[pos++] = c;
-+                      buf[pos] = '\0';
-+                      is_zero_padded++;
-+                      continue;
-+              }
-+          case '1':
-+          case '2':
-+          case '3':
-+          case '4':
-+          case '5':
-+          case '6':
-+          case '7':
-+          case '8':
-+          case '9':
-+              buf[pos++] = c;
-+              buf[pos] = '\0';
-+              num_pad_chars *= 10;
-+              num_pad_chars += c - '0';
-+              continue;
-+            case 'l':
-+                buf[pos++] = c;
-+                buf[pos] = '\0';
-+                is_long++;
-+                continue;
-+            case 'L':
-+                buf[pos++] = c;
-+                buf[pos] = '\0';
-+                is_long = 2;
-+                continue;
-+
-+            /* below here are things we actually have to print */
-+            case 'c':
-+                int_arg = va_arg(args, int) & 0xff;
-+                if (int_arg == 0) {
-+                    char *tmp_str = "\\x00";
-+                    write_str(&tmp_str, buf, &count);
-+                } else {
-+                    write_char(&str, int_arg, &count);
-+                }
-+                restart = 1;
-+                continue;
-+            case 'd':
-+                if (is_long == 0) {
-+                    int_arg = va_arg(args, signed int);
-+                    format_ascii(buf, int_arg, 0, 0, 0);
-+                } else if (is_long == 1) {
-+                    long_arg = va_arg(args, signed long);
-+                    format_ascii(buf, long_arg, 0, 0, 0);
-+                } else {
-+                    longlong_arg = va_arg(args, signed long long);
-+                    format_ascii(buf, longlong_arg, 0, 0, 0);
-+                }
-+                write_str(&str, buf, &count);
-+                restart = 1;
-+                continue;
-+            case 's':
-+                str_arg = va_arg(args, char *);
-+                write_str(&str, str_arg, &count);
-+                restart = 1;
-+                continue;
-+            case 'u':
-+            case 'U':
-+                if (is_long == 0) {
-+                    uint_arg = va_arg(args, unsigned int);
-+                    format_ascii(buf, uint_arg, 0, 0, 0);
-+                } else if (is_long == 1) {
-+                    ulong_arg = va_arg(args, unsigned long);
-+                    format_ascii(buf, ulong_arg, 0, 0, 0);
-+                } else {
-+                    ulonglong_arg = va_arg(args, unsigned long long);
-+                    format_ascii(buf, ulonglong_arg, 0, 0, 0);
-+                }
-+                write_str(&str, buf, &count);
-+                restart = 1;
-+                continue;
-+            case 'P':
-+                is_cap = 1;
-+            case 'p':
-+                ulong_arg = va_arg(args, unsigned long);
-+              is_zero_padded = 1;
-+                format_ascii(buf, ulong_arg, 1, is_cap, sizeof(ulong_arg));
-+                write_str(&str, is_cap ? "0X" : "0x", &count);
-+                write_str(&str, buf, &count);
-+                restart = 1;
-+                continue;
-+            case 'X':
-+                is_cap = 1;
-+            case 'x':
-+              if (num_pad_chars == 2) {
-+                  int i;
-+                  char hex[] = "0123456789abcdef";
-+                  uint_arg = va_arg(args, unsigned int);
-+                  uchar_arg = uint_arg & 0xff;
-+                  format_ascii(buf, uchar_arg, 1, is_cap, num_pad_chars);
-+              } else if (num_pad_chars == 4) {
-+                  uint_arg = va_arg(args, unsigned int);
-+                  ushort_arg = uint_arg & 0xffff;
-+                  format_ascii(buf, ushort_arg, 1, is_cap, num_pad_chars);
-+              } else if (is_long == 0) {
-+                    uint_arg = va_arg(args, unsigned int);
-+                    format_ascii(buf, uint_arg, 1, is_cap, num_pad_chars);
-+                } else if (is_long == 1) {
-+                    ulong_arg = va_arg(args, unsigned long);
-+                    format_ascii(buf, ulong_arg, 1, is_cap, num_pad_chars);
-+                } else {
-+                    ulonglong_arg = va_arg(args, unsigned long long);
-+                    format_ascii(buf, ulonglong_arg, 1, is_cap, num_pad_chars);
-+                }
-+                write_str(&str, buf, &count);
-+                restart = 1;
-+                continue;
-+            default:
-+                buf[pos++] = c;
-+                buf[pos] = '\0';
-+                write_str(&str, buf, &count);
-+                restart = 1;
-+                continue;
-+        }
-+    } while ((c = *fmt++));
-+
-+    if (str)
-+        *str = '\0';
-+    return count;
-+}
--          while (*ptr)
--            *bp++ = *(ptr++); /* putchar(*(ptr++)); */
--          break;
-+void
-+grub_printf (char *fmt, ...)
-+{
-+  va_list ap;
--        case 'c': *bp++ = (*(dataptr++))&0xff;
--          /* putchar((*(dataptr++))&0xff); */
--          break;
-+  va_start (ap, fmt);
-+  grub_vsprintf (0, fmt, ap);
-+  va_end (ap);
-+}
--        case 's':
--          ptr = (char *) (*(dataptr++));
-+#ifndef STAGE1_5
-+int
-+grub_sprintf (char *str, const char *fmt, ...)
-+{
-+  va_list ap;
-+  int ret;
--          while ((c = *ptr++) != 0)
--            *bp++ = c; /* putchar(c); */
--          break;
--        }
--    }
-+  va_start (ap, fmt);
-+  ret = grub_vsprintf (str, fmt, ap);
-+  va_end (ap);
--  *bp = 0;
--  return bp - buffer;
-+  return ret;
- }
-@@ -898,7 +1107,6 @@ safe_parse_maxint (char **str_ptr, int *myint_ptr)
- }
- #endif /* STAGE1_5 */
--#if !defined(STAGE1_5) || defined(FSYS_FAT)
- int
- grub_tolower (int c)
- {
-@@ -907,7 +1115,6 @@ grub_tolower (int c)
-   return c;
- }
--#endif /* ! STAGE1_5 || FSYS_FAT */
- int
- grub_isspace (int c)
-@@ -1004,6 +1211,16 @@ checkkey (void)
- {
-   return current_term->checkkey ();
- }
-+
-+/* Return keyboard modifier status. */
-+int
-+keystatus (void)
-+{
-+  if (current_term->keystatus)
-+    return current_term->keystatus ();
-+  else 
-+    return 0;
-+}
- #endif /* ! STAGE1_5 */
- /* Display an ASCII character.  */
-@@ -1046,13 +1263,15 @@ grub_putchar (int c)
-                the following grub_printf call will print newlines.  */
-             count_lines = -1;
-+            grub_printf("\n");
-             if (current_term->setcolorstate)
-               current_term->setcolorstate (COLOR_STATE_HIGHLIGHT);
-             
--            grub_printf ("\n[Hit return to continue]");
-+            grub_printf ("[Hit return to continue]");
-             if (current_term->setcolorstate)
-               current_term->setcolorstate (COLOR_STATE_NORMAL);
-+              
-             
-             do
-               {
-@@ -1090,7 +1309,7 @@ void
- cls (void)
- {
-   /* If the terminal is dumb, there is no way to clean the terminal.  */
--  if (current_term->flags & TERM_DUMB)
-+  if (current_term->flags & TERM_DUMB) 
-     grub_putchar ('\n');
-   else
-     current_term->cls ();
-@@ -1125,6 +1344,26 @@ substring (const char *s1, const char *s2)
-   return 1;
- }
-+int
-+subcasestring (const char *s1, const char *s2)
-+{
-+  while (tolower(*s1) == tolower(*s2))
-+    {
-+      /* The strings match exactly. */
-+      if (! *(s1++))
-+      return 0;
-+      s2 ++;
-+    }
-+
-+  /* S1 is a substring of S2. */
-+  if (*s1 == 0)
-+    return -1;
-+
-+  /* S1 isn't a substring. */
-+  return 1;
-+}
-+
-+
- #ifndef STAGE1_5
- /* Terminate the string STR with NUL.  */
- int
-@@ -1172,41 +1411,180 @@ grub_strlen (const char *str)
-   return len;
- }
--#endif /* ! STAGE1_5 */
-+/* this function "borrowed" from dietlibc */
- int
--memcheck (int addr, int len)
-+grub_strspn(const char *s, const char *accept)
- {
--#ifdef GRUB_UTIL
--  auto int start_addr (void);
--  auto int end_addr (void);
--  
--  auto int start_addr (void)
-+  int l=0;
-+  int a=1,i,al=grub_strlen(accept);
-+
-+  while((a)&&(*s))
-+  {
-+    for(a=i=0;(!a)&&(i<al);i++)
-+      if (*s==accept[i]) a=1;
-+    if (a) l++;
-+    s++;
-+  }
-+  return l;
-+}
-+
-+/* this function "borrowed" from dietlibc */
-+int
-+grub_strcspn(const char *s, const char *reject)
-+{
-+  int l=0;
-+  int a=1,i,al=grub_strlen(reject);
-+
-+  while((a)&&(*s))
-+  {
-+    for(i=0;(a)&&(i<al);i++)
-+      if (*s==reject[i]) a=0;
-+    if (a) l++;
-+    s++;
-+  }
-+  return l;
-+}
-+
-+/* this function "borrowed" from dietlibc */
-+char *
-+grub_strtok_r(char *s, const char *delim, char **ptrptr) {
-+  char *tmp=0;
-+
-+  if (s==0) s=*ptrptr;
-+  s+=grub_strspn(s,delim);           /* overread leading delimiter */
-+  if (*s) {
-+    tmp=s;
-+    s+=grub_strcspn(s,delim);
-+    if (*s) *s++=0;   /* not the end ? => terminate it */
-+  }
-+  *ptrptr=s;
-+  return tmp;
-+}
-+
-+char *
-+grub_strchr (const char *s, int c)
-+{
-+  while (*s)
-     {
--      int ret;
-+      if (*s == c)
-+      return (char *) s;
-+      s++;
-+    }
-+
-+  return 0;
-+}
-+
-+char *
-+grub_strnchr (const char *s, int c)
-+{
-+  while (*s)
-+    {
-+      if (*s != c)
-+      return (char *) s;
-+      s++;
-+    }
-+
-+  return 0;
-+}
-+
-+char *
-+grub_strrchr (const char *s, int c)
-+{
-+  char *p = 0;
-+
-+  while (*s)
-+    {
-+      if (*s == c)
-+      p = (char *) s;
-+      s++;
-+    }
-+
-+  return p;
-+}
-+
-+int
-+grub_strnlen (const char *s, int n)
-+{
-+  int i;
-+
-+  if (n == 0)
-+    return 0;
-+
-+  for (i = 0; s[i] != '\0' && i < n; i++)
-+    ;
-+  return i;
-+}
-+
-+char *
-+grub_strncpy(char *new, const char *s, int n)
-+{
-+  int i;
-+
-+  for (i = 0; s[i] != '\0' && i < n; i++)
-+    new[i] = s[i];
-+  return new;
-+}
-+
-+int
-+grub_strncasecmp(const char *s0, const char *s1, int n)
-+{
-+  int c0, c1;
-+
-+  if (s0 == s1 || n == 0)
-+    return 0;
-+
-+  do {
-+    c0 = *s0 & ~0x20;
-+    c1 = *s1 & ~0x20;
-+
-+    if (--n == 0 || c0 == '\0')
-+      break;
-+
-+    *s0++;
-+    *s1++;
-+  } while (c0 == c1);
-+
-+  return (c0 > c1 ? 1 : c0 < c1 ? -1 : 0);
-+}
-+
-+#endif /* ! STAGE1_5 */
-+
-+#ifdef GRUB_UTIL
-+static int memcheck_start_addr (void)
-+{
-+  int ret;
- # if defined(HAVE_START_SYMBOL)
--      asm volatile ("movl     $start, %0" : "=a" (ret));
-+  asm volatile ("movl $start, %0" : "=a" (ret));
- # elif defined(HAVE_USCORE_START_SYMBOL)
--      asm volatile ("movl     $_start, %0" : "=a" (ret));
-+  asm volatile ("movl $_start, %0" : "=a" (ret));
- # endif
--      return ret;
--    }
-+  return ret;
-+}
--  auto int end_addr (void)
--    {
--      int ret;
-+static int memcheck_end_addr (void)
-+{
-+  int ret;
- # if defined(HAVE_END_SYMBOL)
--      asm volatile ("movl     $end, %0" : "=a" (ret));
-+  asm volatile ("movl $end, %0" : "=a" (ret));
- # elif defined(HAVE_USCORE_END_SYMBOL)
--      asm volatile ("movl     $_end, %0" : "=a" (ret));
-+  asm volatile ("movl $_end, %0" : "=a" (ret));
- # endif
--      return ret;
--    }
-+  return ret;
-+}
-+#endif /* GRUB_UTIL */
--  if (start_addr () <= addr && end_addr () > addr + len)
-+int
-+memcheck (int addr, int len)
-+{
-+#ifdef GRUB_UTIL
-+  if (memcheck_start_addr () <= addr && memcheck_end_addr () > addr + len)
-     return ! errnum;
- #endif /* GRUB_UTIL */
-+#ifdef PLATFORM_EFI
-+  return 1;
-+#else
-   if ((addr < RAW_ADDR (0x1000))
-       || (addr < RAW_ADDR (0x100000)
-         && RAW_ADDR (mbi.mem_lower * 1024) < (addr + len))
-@@ -1215,12 +1593,23 @@ memcheck (int addr, int len)
-     errnum = ERR_WONT_FIT;
-   return ! errnum;
-+#endif
-+}
-+
-+void
-+grub_memcpy(void *dest, const void *src, int len)
-+{
-+  int i;
-+  register char *d = (char*)dest, *s = (char*)src;
-+
-+  for (i = 0; i < len; i++)
-+    d[i] = s[i];
- }
- void *
- grub_memmove (void *to, const void *from, int len)
- {
--   if (memcheck ((int) to, len))
-+  if (memcheck ((unsigned long) to, len))
-      {
-        /* This assembly code is stolen from
-         linux-2.2.2/include/asm-i386/string.h. This is not very fast
-@@ -1258,7 +1647,7 @@ grub_memset (void *start, int c, int len)
- {
-   char *p = start;
--  if (memcheck ((int) start, len))
-+  if (memcheck ((unsigned long) start, len))
-     {
-       while (len -- > 0)
-       *p ++ = c;
-@@ -1274,6 +1663,26 @@ grub_strcpy (char *dest, const char *src)
-   grub_memmove (dest, src, grub_strlen (src) + 1);
-   return dest;
- }
-+
-+char *
-+grub_stpncpy (char *dest, const char *src, int n)
-+{
-+  char *res;
-+
-+  res = NULL;
-+  while (n != 0) {
-+    *dest = *src;
-+    if (*src != 0)
-+      src++;
-+    else if (res == NULL)
-+      res = dest;
-+    dest++;
-+    n--;
-+  }
-+  if (res == NULL)
-+    res = dest;
-+  return res;
-+}
- #endif /* ! STAGE1_5 */
- #ifndef GRUB_UTIL
-diff --git a/stage2/cmdline.c b/stage2/cmdline.c
-index a6ee309..cb41eda 100644
---- a/stage2/cmdline.c
-+++ b/stage2/cmdline.c
-@@ -48,12 +48,17 @@ skip_to (int after_equal, char *cmdline)
- /* Print a helpful message for the command-line interface.  */
- void
--print_cmdline_message (int forever)
-+print_cmdline_message (int type)
- {
-   printf (" [ Minimal BASH-like line editing is supported.  For the first word, TAB\n"
-         "   lists possible command completions.  Anywhere else TAB lists the possible\n"
--        "   completions of a device/filename.%s ]\n",
--        (forever ? "" : "  ESC at any time exits."));
-+        "   completions of a device/filename.");
-+  if (type == CMDLINE_NORMAL_MODE)
-+    printf("  ESC at any time exits.");
-+  if (type == CMDLINE_EDIT_MODE)
-+    printf("  ESC at any time cancels.  ENTER \n"
-+           "   at any time accepts your changes.");
-+  printf("]\n");
- }
- /* Find the builtin whose command name is COMMAND and return the
-@@ -128,7 +133,7 @@ enter_cmdline (char *heap, int forever)
-   print_network_configuration ();
-   grub_putchar ('\n');
- #endif
--  print_cmdline_message (forever);
-+  print_cmdline_message (forever ? CMDLINE_FOREVER_MODE : CMDLINE_NORMAL_MODE);
-   
-   while (1)
-     {
-@@ -215,7 +220,7 @@ run_script (char *script, char *heap)
-       while (*cur_entry++)
-       ;
--      grub_memmove (heap, old_entry, (int) cur_entry - (int) old_entry);
-+      grub_memmove (heap, old_entry, cur_entry - old_entry);
-       if (! *heap)
-       {
-         /* If there is no more command in SCRIPT...  */
-@@ -232,12 +237,12 @@ run_script (char *script, char *heap)
-       builtin = find_command (heap);
-       if (! builtin)
-       {
--        grub_printf ("%s\n", old_entry);
-+        grub_verbose_printf ("%s\n", old_entry);
-         continue;
-       }
-       if (! (builtin->flags & BUILTIN_NO_ECHO))
--      grub_printf ("%s\n", old_entry);
-+      grub_verbose_printf ("%s\n", old_entry);
-       /* If BUILTIN cannot be run in the command-line, skip it.  */
-       if (! (builtin->flags & BUILTIN_CMDLINE))
-diff --git a/stage2/common.c b/stage2/common.c
-index 09f9e31..e96bec2 100644
---- a/stage2/common.c
-+++ b/stage2/common.c
-@@ -32,7 +32,7 @@
- struct multiboot_info mbi;
- unsigned long saved_drive;
- unsigned long saved_partition;
--unsigned long cdrom_drive;
-+unsigned long cdrom_drive = 0x100;
- #ifndef STAGE1_5
- unsigned long saved_mem_upper;
-@@ -114,7 +114,7 @@ mmap_avail_at (unsigned long bottom)
-     {
-       for (cont = 0, addr = mbi.mmap_addr;
-          addr < mbi.mmap_addr + mbi.mmap_length;
--         addr += *((unsigned long *) addr) + 4)
-+         addr += *((unsigned int *) addr) + 4)
-       {
-         struct AddrRangeDesc *desc = (struct AddrRangeDesc *) addr;
-         
-@@ -183,11 +183,11 @@ init_bios_info (void)
-       cont = get_mmap_entry ((void *) addr, cont);
-       /* If the returned buffer's length is zero, quit. */
--      if (! *((unsigned long *) addr))
-+      if (! *((unsigned int *) addr))
-       break;
--      mbi.mmap_length += *((unsigned long *) addr) + 4;
--      addr += *((unsigned long *) addr) + 4;
-+      mbi.mmap_length += *((unsigned int *) addr) + 4;
-+      addr += *((unsigned int *) addr) + 4;
-     }
-   while (cont);
-@@ -207,7 +207,7 @@ init_bios_info (void)
-       /* Find the maximum available address. Ignore any memory holes.  */
-       for (max_addr = 0, addr = mbi.mmap_addr;
-          addr < mbi.mmap_addr + mbi.mmap_length;
--         addr += *((unsigned long *) addr) + 4)
-+         addr += *((unsigned int *) addr) + 4)
-       {
-         struct AddrRangeDesc *desc = (struct AddrRangeDesc *) addr;
-         
-@@ -322,6 +322,9 @@ init_bios_info (void)
-   /* Set cdrom drive.  */
-   {
-+#ifdef PLATFORM_EFI
-+    cdrom_drive = 0x100;
-+#else
-     struct geometry geom;
-     
-     /* Get the geometry.  */
-@@ -330,6 +333,7 @@ init_bios_info (void)
-       cdrom_drive = GRUB_INVALID_DRIVE;
-     else
-       cdrom_drive = boot_drive;
-+#endif
-   }
-   
-   /* Start main routine here.  */
-diff --git a/stage2/disk_io.c b/stage2/disk_io.c
-index b9bc526..f3fed0e 100644
---- a/stage2/disk_io.c
-+++ b/stage2/disk_io.c
-@@ -21,12 +21,17 @@
- #include <shared.h>
- #include <filesys.h>
-+#include <gpt.h>
- #ifdef SUPPORT_NETBOOT
- # define GRUB 1
- # include <etherboot.h>
- #endif
-+#ifdef PLATFORM_EFI
-+#include "efistubs.h"
-+#endif
-+
- #ifdef GRUB_UTIL
- # include <device.h>
- #endif
-@@ -48,6 +53,9 @@ int fsmax;
- struct fsys_entry fsys_table[NUM_FSYS + 1] =
- {
-   /* TFTP should come first because others don't handle net device.  */
-+# ifdef PLATFORM_EFI
-+  {"efitftp", efi_tftp_mount, efi_tftp_read, efi_tftp_dir, efi_tftp_close, 0},
-+# endif
- # ifdef FSYS_TFTP
-   {"tftp", tftp_mount, tftp_read, tftp_dir, tftp_close, 0},
- # endif
-@@ -75,6 +83,9 @@ struct fsys_entry fsys_table[NUM_FSYS + 1] =
- # ifdef FSYS_UFS2
-   {"ufs2", ufs2_mount, ufs2_read, ufs2_dir, 0, ufs2_embed},
- # endif
-+# ifdef PLATFORM_EFI
-+  {"uefi", uefi_mount, uefi_read, uefi_dir, uefi_close, 0},
-+# endif
- # ifdef FSYS_ISO9660
-   {"iso9660", iso9660_mount, iso9660_read, iso9660_dir, 0, 0},
- # endif
-@@ -127,8 +138,8 @@ struct geometry buf_geom;
- int filepos;
- int filemax;
--static inline unsigned long
--log2 (unsigned long word)
-+static inline unsigned int
-+grub_log2 (unsigned int word)
- {
-   asm volatile ("bsfl %1,%0"
-               : "=r" (word)
-@@ -140,7 +151,7 @@ int
- rawread (int drive, int sector, int byte_offset, int byte_len, char *buf)
- {
-   int slen, sectors_per_vtrack;
--  int sector_size_bits = log2 (buf_geom.sector_size);
-+  int sector_size_bits = grub_log2 (buf_geom.sector_size);
-   if (byte_len <= 0)
-     return 1;
-@@ -163,7 +174,7 @@ rawread (int drive, int sector, int byte_offset, int byte_len, char *buf)
-           }
-         buf_drive = drive;
-         buf_track = -1;
--        sector_size_bits = log2 (buf_geom.sector_size);
-+        sector_size_bits = grub_log2 (buf_geom.sector_size);
-       }
-       /* Make sure that SECTOR is valid.  */
-@@ -297,7 +308,7 @@ devread (int sector, int byte_offset, int byte_len, char *buf)
-    *  Check partition boundaries
-    */
-   if (sector < 0
--      || ((sector + ((byte_offset + byte_len - 1) >> SECTOR_BITS))
-+      || ((sector + ((byte_offset + byte_len - 1) >> get_sector_bits(current_drive)))
-         >= part_length))
-     {
-       errnum = ERR_OUTSIDE_PART;
-@@ -307,8 +318,8 @@ devread (int sector, int byte_offset, int byte_len, char *buf)
-   /*
-    *  Get the read to the beginning of a partition.
-    */
--  sector += byte_offset >> SECTOR_BITS;
--  byte_offset &= SECTOR_SIZE - 1;
-+  sector += byte_offset >> get_sector_bits(current_drive);
-+  byte_offset &= get_sector_size(current_drive) - 1;
- #if !defined(STAGE1_5)
-   if (disk_read_hook && debug)
-@@ -347,7 +358,7 @@ rawwrite (int drive, int sector, char *buf)
-       sector = 1;
-     }
-   
--  memmove ((char *) SCRATCHADDR, buf, SECTOR_SIZE);
-+  memmove ((char *) SCRATCHADDR, buf, get_sector_size(drive));
-   if (biosdisk (BIOSDISK_WRITE, drive, &buf_geom,
-               sector, 1, SCRATCHSEG))
-     {
-@@ -373,23 +384,23 @@ devwrite (int sector, int sector_count, char *buf)
-        embed a Stage 1.5 into a partition instead of a MBR, use system
-        calls directly instead of biosdisk, because of the bug in
-        Linux. *sigh*  */
--      return write_to_partition (device_map, current_drive, current_partition,
--                               sector, sector_count, buf);
-+      int ret;
-+      ret = write_to_partition (device_map, current_drive, current_partition,
-+                              sector, sector_count, buf);
-+      if (ret != -1)
-+      return ret;
-     }
--  else
- #endif /* GRUB_UTIL && __linux__ */
--    {
--      int i;
--      
--      for (i = 0; i < sector_count; i++)
--      {
--        if (! rawwrite (current_drive, part_start + sector + i, 
--                        buf + (i << SECTOR_BITS)))
--            return 0;
-+    int i;
--      }
--      return 1;
--    }
-+    for (i = 0; i < sector_count; i++)
-+      {
-+      if (! rawwrite (current_drive, part_start + sector + i,
-+                      buf + (i << get_sector_bits(current_drive))))
-+          return 0;
-+
-+      }
-+    return 1;
- }
- static int
-@@ -400,7 +411,7 @@ sane_partition (void)
-     return 1;
-   
-   if (!(current_partition & 0xFF000000uL)
--      && ((current_drive & 0xFFFFFF7F) < 8
-+      && ((current_drive & 0xFFFFFF7F) < MAX_HD_NUM
-         || current_drive == cdrom_drive)
-       && (current_partition & 0xFF) == 0xFF
-       && ((current_partition & 0xFF00) == 0xFF00
-@@ -458,7 +469,7 @@ make_saved_active (void)
-       }
-       /* Read the MBR in the scratch space.  */
--      if (! rawread (saved_drive, 0, 0, SECTOR_SIZE, mbr))
-+      if (! rawread (saved_drive, 0, 0, get_sector_size(saved_drive), mbr))
-       return 0;
-       /* If the partition is an extended partition, setting the active
-@@ -502,8 +513,8 @@ int
- set_partition_hidden_flag (int hidden)
- {
-   unsigned long part = 0xFFFFFF;
--  unsigned long start, len, offset, ext_offset;
--  int entry, type;
-+  unsigned long start, len, offset, ext_offset, gpt_offset;
-+  int entry, type, gpt_count, gpt_size;
-   char mbr[512];
-   
-   /* The drive must be a hard disk.  */
-@@ -524,8 +535,15 @@ set_partition_hidden_flag (int hidden)
-   /* Look for the partition.  */
-   while (next_partition (current_drive, 0xFFFFFF, &part, &type,           
-                        &start, &len, &offset, &entry,
--                       &ext_offset, mbr))
--    {                                                                       
-+                       &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr))
-+    {
-+        /* The partition may not be a GPT partition.  */
-+        if (gpt_offset != 0)
-+          {
-+              errnum = ERR_BAD_ARGUMENT;
-+              return 1;
-+          }
-+
-       if (part == current_partition)
-       {
-         /* Found.  */
-@@ -577,11 +595,14 @@ next_partition (unsigned long drive, unsigned long dest,
-               unsigned long *partition, int *type,
-               unsigned long *start, unsigned long *len,
-               unsigned long *offset, int *entry,
--              unsigned long *ext_offset, char *buf)
-+               unsigned long *ext_offset,
-+               unsigned long *gpt_offset, int *gpt_count,
-+               int *gpt_size, char *buf)
- {
-   /* Forward declarations.  */
-   auto int next_bsd_partition (void);
-   auto int next_pc_slice (void);
-+  auto int next_gpt_slice(void);
-   /* Get next BSD partition in current PC slice.  */
-   int next_bsd_partition (void)
-@@ -601,7 +622,7 @@ next_partition (unsigned long drive, unsigned long dest,
-         /* Read the BSD label.  */
-         if (! rawread (drive, *start + BSD_LABEL_SECTOR,
--                       0, SECTOR_SIZE, buf))
-+                       0, get_sector_size(drive), buf))
-           return 0;
-         /* Check if it is valid.  */
-@@ -656,7 +677,7 @@ next_partition (unsigned long drive, unsigned long dest,
-       }
-       /* Read the MBR or the boot sector of the extended partition.  */
--      if (! rawread (drive, *offset, 0, SECTOR_SIZE, buf))
-+      if (! rawread (drive, *offset, 0, get_sector_size(drive), buf))
-       return 0;
-       /* Check if it is valid.  */
-@@ -666,6 +687,42 @@ next_partition (unsigned long drive, unsigned long dest,
-         return 0;
-       }
-+      /* If this is a GPT partition table, read it as such.  */
-+      if (*entry == -1 && *offset == 0 &&
-+        (PC_SLICE_TYPE (buf, 0) == PC_SLICE_TYPE_GPT ||
-+         PC_SLICE_TYPE (buf, 0) == PC_SLICE_TYPE_NONE))
-+       {
-+         struct grub_gpt_header *hdr = (struct grub_gpt_header *) buf;
-+
-+         /* Read in the GPT Partition table header.  */
-+         if (! rawread (drive, 1, 0, get_sector_size(drive), buf))
-+           return 0;
-+
-+         if (hdr->magic == GPT_HEADER_MAGIC && hdr->version == 0x10000)
-+           {
-+             /* Let gpt_offset point to the first entry in the GPT
-+                partition table.  This can also be used by callers of
-+                next_partition to determine if a entry comes from a
-+                GPT partition table or not.  */
-+             *gpt_offset = hdr->partitions;
-+             *gpt_count = hdr->maxpart;
-+             *gpt_size =  hdr->partentry_size;
-+             
-+             return next_gpt_slice();
-+           }
-+         else
-+           {
-+             /* This is not a valid header for a GPT partition table.
-+                Re-read the MBR or the boot sector of the extended
-+                partition.  */
-+             if (! rawread (drive, *offset, 0, get_sector_size(drive), buf))
-+               return 0;
-+           }
-+       }
-+
-+      /* Not a GPT partition.  */
-+      *gpt_offset = 0;
-+
-       /* Increase the entry number.  */
-       (*entry)++;
-@@ -710,6 +767,43 @@ next_partition (unsigned long drive, unsigned long dest,
-       return 1;
-     }
-+  /* Get the next GPT slice.  */
-+  int next_gpt_slice (void)
-+    {
-+      struct grub_gpt_partentry *gptentry = (struct grub_gpt_partentry *) buf;
-+      /* Make GPT partitions show up as PC slices.  */
-+      int pc_slice_no = (*partition & 0xFF0000) >> 16;
-+
-+      /* If this is the first time...  */
-+      if (pc_slice_no == 0xFF)
-+       {
-+         pc_slice_no = -1;
-+         *entry = -1;
-+       }
-+
-+      do {
-+       (*entry)++;
-+
-+       if (*entry >= *gpt_count)
-+         {
-+           errnum = ERR_NO_PART;
-+           return 0;
-+         }
-+       /* Read in the GPT Partition table entry.  */
-+       if (! rawread (drive, (*gpt_offset) + GPT_ENTRY_SECTOR (drive, *gpt_size, *entry), GPT_ENTRY_INDEX (drive, *gpt_size, *entry), *gpt_size, buf))
-+         return 0;
-+      } while (! (gptentry->type1 && gptentry->type2));
-+
-+      pc_slice_no++;
-+      *start = gptentry->start;
-+      *len = gptentry->end - gptentry->start + 1;
-+      *type = PC_SLICE_TYPE_EXT2FS;
-+      *entry = pc_slice_no;
-+      *partition = (*entry << 16) | 0xFFFF;
-+
-+      return 1;
-+    }
-+
-   /* Start the body of this function.  */
-   
- #ifndef STAGE1_5
-@@ -717,6 +811,9 @@ next_partition (unsigned long drive, unsigned long dest,
-     return 0;
- #endif
-+  if (*partition != 0xFFFFFF && *gpt_offset != 0)
-+    return next_gpt_slice ();
-+
-   /* If previous partition is a BSD partition or a PC slice which
-      contains BSD partitions...  */
-   if ((*partition != 0xFFFFFF && IS_PC_SLICE_TYPE_BSD (*type & 0xff))
-@@ -755,8 +852,11 @@ real_open_partition (int flags)
-   unsigned long dest_partition = current_partition;
-   unsigned long part_offset;
-   unsigned long ext_offset;
-+  unsigned long gpt_offset;
-+  int gpt_count;
-+  int gpt_size;
-   int entry;
--  char buf[SECTOR_SIZE];
-+  char buf[4096];
-   int bsd_part, pc_slice;
-   /* For simplicity.  */
-@@ -766,7 +866,8 @@ real_open_partition (int flags)
-       int ret = next_partition (current_drive, dest_partition,
-                               &current_partition, &current_slice,
-                               &part_start, &part_length,
--                              &part_offset, &entry, &ext_offset, buf);
-+                               &part_offset, &entry, &ext_offset,
-+                               &gpt_offset, &gpt_count, &gpt_size, buf);
-       bsd_part = (current_partition >> 8) & 0xFF;
-       pc_slice = current_partition >> 16;
-       return ret;
-@@ -926,6 +1027,17 @@ open_partition (void)
-   return real_open_partition (0);
- }
-+#if !defined(PLATFORM_EFI) && !defined(GRUB_UTIL)
-+int get_sector_size (int drive)
-+{
-+  return SECTOR_SIZE;
-+}
-+int get_sector_bits (int drive)
-+{
-+  return SECTOR_BITS;
-+}
-+#endif /* !defined(PLATFORM_EFI) && !defined(GRUB_UTIL) */
-+
- #ifndef STAGE1_5
- /* XX used for device completion in 'set_device' and 'print_completions' */
-@@ -978,7 +1090,7 @@ set_device (char *device)
-       if (*device != ',' && *device != ')')
-       {
-         char ch = *device;
--#ifdef SUPPORT_NETBOOT
-+#if defined(SUPPORT_NETBOOT) || defined(PLATFORM_EFI)
-         if (*device == 'f' || *device == 'h'
-             || (*device == 'n' && network_ready)
-             || (*device == 'c' && cdrom_drive != GRUB_INVALID_DRIVE))
-@@ -1002,14 +1114,14 @@ set_device (char *device)
-         if ((*device == 'f'
-              || *device == 'h'
--#ifdef SUPPORT_NETBOOT
-+#if defined(SUPPORT_NETBOOT) || defined(PLATFORM_EFI)
-              || (*device == 'n' && network_ready)
- #endif
-              || (*device == 'c' && cdrom_drive != GRUB_INVALID_DRIVE))
-             && (device += 2, (*(device - 1) != 'd')))
-           errnum = ERR_NUMBER_PARSING;
--        
--#ifdef SUPPORT_NETBOOT
-+
-+#if defined(SUPPORT_NETBOOT) || defined(PLATFORM_EFI)
-         if (ch == 'n' && network_ready)
-           current_drive = NETWORK_DRIVE;
-         else
-@@ -1131,7 +1243,7 @@ set_bootdev (int hdbias)
-   if ((saved_drive & 0x80) && cur_part_addr)
-     {
-       if (rawread (saved_drive, cur_part_offset,
--                 0, SECTOR_SIZE, (char *) SCRATCHADDR))
-+                 0, get_sector_size(saved_drive), (char *) SCRATCHADDR))
-       {
-         char *dst, *src;
-       
-@@ -1243,6 +1355,12 @@ setup_part (char *filename)
- #ifndef STAGE1_5
-+char *
-+get_fsys_type (void)
-+{
-+    return fsys_table[fsys_type].name;
-+}
-+
- /*
-  *  This prints the filesystem type or gives relevant information.
-  */
-@@ -1376,7 +1494,7 @@ print_completions (int is_filename, int is_completion)
-             if (!ptr
-                 || *(ptr-1) != 'd'
--#ifdef SUPPORT_NETBOOT
-+#if defined(SUPPORT_NETBOOT) || defined(PLATFORM_EFI)
-                 || *(ptr-2) != 'n'
- #endif /* SUPPORT_NETBOOT */
-                 || *(ptr-2) != 'c')
-@@ -1385,7 +1503,7 @@ print_completions (int is_filename, int is_completion)
-                      i < (ptr && (*(ptr-1) == 'd' && *(ptr-2) == 'f') ? 1:2);
-                      i++)
-                   {
--                    for (j = 0; j < 8; j++)
-+                    for (j = 0; j < MAX_HD_NUM; j++)
-                       {
-                         disk_no = (i * 0x80) + j;
-                         if ((disk_choice || disk_no == current_drive)
-@@ -1407,7 +1525,7 @@ print_completions (int is_filename, int is_completion)
-                     || (*(ptr-1) == 'd' && *(ptr-2) == 'c')))
-               print_a_completion ("cd");
--# ifdef SUPPORT_NETBOOT
-+# if defined(SUPPORT_NETBOOT) || defined(PLATFORM_EFI)
-             if (network_ready
-                 && (disk_choice || NETWORK_DRIVE == current_drive)
-                 && (!ptr
-@@ -1596,7 +1714,7 @@ grub_open (char *filename)
-         BLK_BLKLENGTH (list_addr) = tmp;
--        filemax += (tmp * SECTOR_SIZE);
-+        filemax += (tmp * get_sector_size(current_drive));
-         list_addr += BLK_BLKLIST_INC_VAL;
-         if (*ptr != ',')
-@@ -1673,6 +1791,7 @@ grub_read (char *buf, int len)
-   if (block_file)
-     {
-       int size, off, ret = 0;
-+      int sector_size = get_sector_size(current_drive);
-       while (len && !errnum)
-       {
-@@ -1687,10 +1806,10 @@ grub_read (char *buf, int len)
-         /* run BLK_CUR_FILEPOS up to filepos */
-         while (filepos > BLK_CUR_FILEPOS)
-           {
--            if ((filepos - (BLK_CUR_FILEPOS & ~(SECTOR_SIZE - 1)))
--                >= SECTOR_SIZE)
-+            if ((filepos - (BLK_CUR_FILEPOS & ~(sector_size - 1)))
-+                >= sector_size)
-               {
--                BLK_CUR_FILEPOS += SECTOR_SIZE;
-+                BLK_CUR_FILEPOS += sector_size;
-                 BLK_CUR_BLKNUM++;
-                 if (BLK_CUR_BLKNUM >= BLK_BLKLENGTH (BLK_CUR_BLKLIST))
-@@ -1703,9 +1822,9 @@ grub_read (char *buf, int len)
-               BLK_CUR_FILEPOS = filepos;
-           }
--        off = filepos & (SECTOR_SIZE - 1);
-+        off = filepos & (sector_size - 1);
-         size = ((BLK_BLKLENGTH (BLK_CUR_BLKLIST) - BLK_CUR_BLKNUM)
--                * SECTOR_SIZE) - off;
-+                * sector_size) - off;
-         if (size > len)
-           size = len;
-diff --git a/stage2/efistubs.c b/stage2/efistubs.c
-new file mode 100644
-index 0000000..29b086a
---- /dev/null
-+++ b/stage2/efistubs.c
-@@ -0,0 +1,7 @@
-+
-+#include "shared.h"
-+#include "efistubs.h"
-+
-+#if defined(PLATFORM_EFI)
-+int network_ready = 0;
-+#endif /* defined(PLATFORM_EFI) */
-diff --git a/stage2/efistubs.h b/stage2/efistubs.h
-new file mode 100644
-index 0000000..97e407d
---- /dev/null
-+++ b/stage2/efistubs.h
-@@ -0,0 +1,8 @@
-+#ifndef EFISTUBS_H
-+#define EFISTUBS_H 1
-+
-+#if defined(PLATFORM_EFI)
-+extern int network_ready;
-+#endif /* defined(PLATFORM_EFI) */
-+
-+#endif /* EFISTUBS_H */
-diff --git a/stage2/fat.h b/stage2/fat.h
-index 7fed6ba..f154eed 100644
---- a/stage2/fat.h
-+++ b/stage2/fat.h
-@@ -92,7 +92,7 @@ struct fat_bpb {
- #define FAT_DIRENTRY_FIRST_CLUSTER(entry) \
-   ((*((unsigned short *) (entry+26)))+(*((unsigned short *) (entry+20)) << 16))
- #define FAT_DIRENTRY_FILELENGTH(entry) \
--  (*((unsigned long *) (entry+28)))
-+  (*((unsigned int *) (entry+28)))
- #define FAT_LONGDIR_ID(entry) \
-   (*((unsigned char *) (entry)))
-diff --git a/stage2/filesys.h b/stage2/filesys.h
-index bbad8b9..79e5f1f 100644
---- a/stage2/filesys.h
-+++ b/stage2/filesys.h
-@@ -40,6 +40,16 @@ int ufs2_embed (int *start_sector, int needed_sectors);
- #define FSYS_UFS2_NUM 0
- #endif
-+#ifdef PLATFORM_EFI
-+#define FSYS_UEFI_NUM 1
-+int uefi_mount (void);
-+int uefi_read (char *buf, int len);
-+int uefi_dir (char *dirname);
-+void uefi_close (void);
-+#else
-+#define FSYS_UEFI_NUM 0
-+#endif
-+
- #ifdef FSYS_FAT
- #define FSYS_FAT_NUM 1
- int fat_mount (void);
-@@ -115,6 +125,17 @@ void tftp_close (void);
- #define FSYS_TFTP_NUM 0
- #endif
-+#ifdef PLATFORM_EFI
-+#define FSYS_EFI_TFTP_NUM 1
-+int efi_tftp_mount (void);
-+int efi_tftp_read (char *buf, int len);
-+int efi_tftp_dir (char *dirname);
-+void efi_tftp_close (void);
-+#else
-+#define FSYS_EFI_TFTP_NUM 0
-+#endif
-+
-+
- #ifdef FSYS_ISO9660
- #define FSYS_ISO9660_NUM 1
- int iso9660_mount (void);
-@@ -128,7 +149,8 @@ int iso9660_dir (char *dirname);
- #define NUM_FSYS      \
-   (FSYS_FFS_NUM + FSYS_FAT_NUM + FSYS_EXT2FS_NUM + FSYS_MINIX_NUM     \
-    + FSYS_REISERFS_NUM + FSYS_VSTAFS_NUM + FSYS_JFS_NUM + FSYS_XFS_NUM        \
--   + FSYS_TFTP_NUM + FSYS_ISO9660_NUM + FSYS_UFS2_NUM)
-+   + FSYS_TFTP_NUM + FSYS_EFI_TFTP_NUM + FSYS_ISO9660_NUM + FSYS_UFS2_NUM \
-+   + FSYS_UEFI_NUM)
- #endif
- /* defines for the block filesystem info area */
-@@ -137,8 +159,8 @@ int iso9660_dir (char *dirname);
- #define BLK_CUR_BLKLIST      (*((int*)(FSYS_BUF+4)))
- #define BLK_CUR_BLKNUM       (*((int*)(FSYS_BUF+8)))
- #define BLK_MAX_ADDR         (FSYS_BUF+0x7FF9)
--#define BLK_BLKSTART(l)      (*((int*)l))
--#define BLK_BLKLENGTH(l)     (*((int*)(l+4)))
-+#define BLK_BLKSTART(l)      (*((int*)(unsigned long)l))
-+#define BLK_BLKLENGTH(l)     (*((int*)(unsigned long)(l+4)))
- #define BLK_BLKLIST_START    (FSYS_BUF+12)
- #define BLK_BLKLIST_INC_VAL  8
- #endif /* NO_BLOCK_FILES */
-diff --git a/stage2/fsys_ext2fs.c b/stage2/fsys_ext2fs.c
-index 560048f..01386d1 100644
---- a/stage2/fsys_ext2fs.c
-+++ b/stage2/fsys_ext2fs.c
-@@ -25,7 +25,7 @@
- static int mapblock1, mapblock2;
- /* sizes are always in bytes, BLOCK values are always in DEV_BSIZE (sectors) */
--#define DEV_BSIZE 512
-+#define DEV_BSIZE get_sector_size(current_drive)
- /* include/linux/fs.h */
- #define BLOCK_SIZE 1024               /* initial block size for superblock read */
-@@ -33,6 +33,7 @@ static int mapblock1, mapblock2;
- #define WHICH_SUPER 1
- /* kind of from fs/ext2/super.c */
- #define SBLOCK (WHICH_SUPER * BLOCK_SIZE / DEV_BSIZE) /* = 2 */
-+#define SBOFF ((WHICH_SUPER * BLOCK_SIZE) % DEV_BSIZE)
- /* include/asm-i386/types.h */
- typedef __signed__ char __s8;
-@@ -41,6 +42,7 @@ typedef __signed__ short __s16;
- typedef unsigned short __u16;
- typedef __signed__ int __s32;
- typedef unsigned int __u32;
-+typedef unsigned long long __u64;
- /*
-  * Constants relative to the data blocks, from ext2_fs.h
-@@ -51,7 +53,7 @@ typedef unsigned int __u32;
- #define EXT2_TIND_BLOCK                 (EXT2_DIND_BLOCK + 1)
- #define EXT2_N_BLOCKS                   (EXT2_TIND_BLOCK + 1)
--/* include/linux/ext2_fs.h */
-+/* lib/ext2fs/ext2_fs.h from e2fsprogs */
- struct ext2_super_block
-   {
-     __u32 s_inodes_count;     /* Inodes count */
-@@ -61,9 +63,9 @@ struct ext2_super_block
-     __u32 s_free_inodes_count;        /* Free inodes count */
-     __u32 s_first_data_block; /* First Data Block */
-     __u32 s_log_block_size;   /* Block size */
--    __s32 s_log_frag_size;    /* Fragment size */
-+    __s32 s_obso_log_frag_size;       /* Obsoleted Fragment size */
-     __u32 s_blocks_per_group; /* # Blocks per group */
--    __u32 s_frags_per_group;  /* # Fragments per group */
-+    __u32 s_obso_frags_per_group;     /* Obsoleted Fragments per group */
-     __u32 s_inodes_per_group; /* # Inodes per group */
-     __u32 s_mtime;            /* Mount time */
-     __u32 s_wtime;            /* Write time */
-@@ -72,17 +74,76 @@ struct ext2_super_block
-     __u16 s_magic;            /* Magic signature */
-     __u16 s_state;            /* File system state */
-     __u16 s_errors;           /* Behaviour when detecting errors */
--    __u16 s_pad;
-+    __u16 s_minor_rev_level;  /* minor revision level */
-     __u32 s_lastcheck;                /* time of last check */
-     __u32 s_checkinterval;    /* max. time between checks */
-     __u32 s_creator_os;               /* OS */
-     __u32 s_rev_level;                /* Revision level */
-     __u16 s_def_resuid;               /* Default uid for reserved blocks */
-     __u16 s_def_resgid;               /* Default gid for reserved blocks */
--    __u32 s_reserved[235];    /* Padding to the end of the block */
--  };
--
--struct ext2_group_desc
-+    /*
-+     * These fields are for EXT2_DYNAMIC_REV superblocks only.
-+     *
-+     * Note: the difference between the compatible feature set and
-+     * the incompatible feature set is that if there is a bit set
-+     * in the incompatible feature set that the kernel doesn't
-+     * know about, it should refuse to mount the filesystem.
-+     *
-+     * e2fsck's requirements are more strict; if it doesn't know
-+     * about a feature in either the compatible or incompatible
-+     * feature set, it must abort and not try to meddle with
-+     * things it doesn't understand...
-+     */
-+    __u32 s_first_ino;                /* First non-reserved inode */
-+    __u16 s_inode_size;               /* size of inode structure */
-+    __u16 s_block_group_nr;   /* block group # of this superblock */
-+    __u32 s_feature_compat;   /* compatible feature set */
-+    __u32 s_feature_incompat; /* incompatible feature set */
-+    __u32 s_feature_ro_compat;        /* readonly-compatible feature set */
-+    __u8  s_uuid[16];         /* 128-bit uuid for volume */
-+    char  s_volume_name[16];  /* volume name */
-+    char  s_last_mounted[64]; /* directory where last mounted */
-+    __u32 s_algorithm_usage_bitmap; /* For compression */
-+    /*
-+     * Performance hints.  Directory preallocation should only
-+     * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
-+     */
-+    __u8  s_prealloc_blocks;  /* Nr of blocks to try to preallocate*/
-+    __u8  s_prealloc_dir_blocks;      /* Nr to preallocate for dirs */
-+    __u16 s_reserved_gdt_blocks;/* Per group table for online growth */
-+    /*
-+     * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
-+     */
-+    __u8 s_journal_uuid[16];  /* uuid of journal superblock */
-+    __u32 s_journal_inum;     /* inode number of journal file */
-+    __u32 s_journal_dev;      /* device number of journal file */
-+    __u32 s_last_orphan;      /* start of list of inodes to delete */
-+    __u32 s_hash_seed[4];     /* HTREE hash seed */
-+    __u8  s_def_hash_version; /* Default hash version to use */
-+    __u8  s_jnl_backup_type;  /* Default type of journal backup */
-+    __u16 s_desc_size;                /* size of group descriptor */
-+    __u32 s_default_mount_opts;
-+    __u32 s_first_meta_bg;    /* First metablock group */
-+    __u32 s_mkfs_time;                /* When the filesystem was created */
-+    __u32 s_jnl_blocks[17];   /* Backup of the journal inode */
-+    /* 64bit desc support valid if EXT4_FEATURE_INCOMPAT_64BIT */
-+    __u32 s_blocks_count_hi;  /* Blocks count */
-+    __u32 s_r_blocks_count_hi;        /* Reserved blocks count */
-+    __u32 s_free_blocks_count_hi; /* Free blocks count */
-+    __u16 s_min_extra_isize;  /* All inodes have at least # bytes */
-+    __u16 s_max_extra_isize;  /* New inodes should reverve # bytes */
-+    __u32 s_flags;            /* Miscellaneous flags */
-+    __u16 s_raid_stride;      /* Raid stride */
-+    __u16 s_mmp_interval;     /* # seconds to wait MMP checking */
-+    __u64 s_mmp_block;                /* Block for multi-mount protection */
-+    __u32 s_raid_stripe_width;        /* Blocks on all data disks (N*stride)*/
-+    __u8  s_log_groups_per_flex;/* FLEX_BG group size*/
-+    __u8  s_reserved_char_pad;
-+    __u16 s_reserved_pad;
-+    __u32 s_reserved[162];    /* Padding to the end of the block */
-+};
-+
-+struct ext4_group_desc
-   {
-     __u32 bg_block_bitmap;    /* Blocks bitmap block */
-     __u32 bg_inode_bitmap;    /* Inodes bitmap block */
-@@ -90,8 +151,18 @@ struct ext2_group_desc
-     __u16 bg_free_blocks_count;       /* Free blocks count */
-     __u16 bg_free_inodes_count;       /* Free inodes count */
-     __u16 bg_used_dirs_count; /* Directories count */
--    __u16 bg_pad;
--    __u32 bg_reserved[3];
-+    __u16 bg_flags;           /* EXT4_BG_flags (INODE_UNINIT, etc) */
-+    __u32 bg_reserved[2];             /* Likely block/inode bitmap checksum */
-+    __u16 bg_itable_unused;   /* Unused inodes count */
-+    __u16 bg_checksum;                /* crc16(sb_uuid+group+desc) */
-+    __u32 bg_block_bitmap_hi; /* Blocks bitmap block MSB */
-+    __u32 bg_inode_bitmap_hi; /* Inodes bitmap block MSB */
-+    __u32 bg_inode_table_hi;  /* Inodes table block MSB */
-+    __u16 bg_free_blocks_count_hi;/* Free blocks count MSB */
-+    __u16 bg_free_inodes_count_hi;/* Free inodes count MSB */
-+    __u16 bg_used_dirs_count_hi;      /* Directories count MSB */
-+    __u16 bg_itable_unused_hi;        /* Unused inodes count MSB */
-+    __u32 bg_reserved2[3];
-   };
- struct ext2_inode
-@@ -129,22 +200,22 @@ struct ext2_inode
-     __u32 i_block[EXT2_N_BLOCKS];     /* 40: Pointers to blocks */
-     __u32 i_version;          /* File version (for NFS) */
-     __u32 i_file_acl;         /* File ACL */
--    __u32 i_dir_acl;          /* Directory ACL */
--    __u32 i_faddr;            /* Fragment address */
-+    __u32 i_size_high;
-+    __u32 i_obso_faddr;               /* Obsoleted fragment address */
-     union
-       {
-       struct
-         {
--          __u8 l_i_frag;      /* Fragment number */
--          __u8 l_i_fsize;     /* Fragment size */
--          __u16 i_pad1;
--          __u32 l_i_reserved2[2];
-+              __u16   l_i_blocks_high; /* were l_i_reserved1 */
-+              __u16   l_i_file_acl_high;
-+              __u16   l_i_uid_high;   /* these 2 fields */
-+              __u16   l_i_gid_high;   /* were reserved2[0] */
-+              __u32   l_i_reserved2;
-         }
-       linux2;
-       struct
-         {
--          __u8 h_i_frag;      /* Fragment number */
--          __u8 h_i_fsize;     /* Fragment size */
-+              __u16   h_i_reserved1;  /* Obsoleted fragment number/size which are removed in ext4 */
-           __u16 h_i_mode_high;
-           __u16 h_i_uid_high;
-           __u16 h_i_gid_high;
-@@ -153,16 +224,36 @@ struct ext2_inode
-       hurd2;
-       struct
-         {
--          __u8 m_i_frag;      /* Fragment number */
--          __u8 m_i_fsize;     /* Fragment size */
--          __u16 m_pad1;
-+              __u16   h_i_reserved1;  /* Obsoleted fragment number/size which are removed in ext4 */
-+              __u16   m_i_file_acl_high;
-           __u32 m_i_reserved2[2];
-         }
-       masix2;
-       }
-     osd2;                     /* OS dependent 2 */
-+      __u16   i_extra_isize;
-+      __u16   i_pad1;
-+      __u32  i_ctime_extra;  /* extra Change time      (nsec << 2 | epoch) */
-+      __u32  i_mtime_extra;  /* extra Modification time(nsec << 2 | epoch) */
-+      __u32  i_atime_extra;  /* extra Access time      (nsec << 2 | epoch) */
-+      __u32  i_crtime;       /* File Creation time */
-+      __u32  i_crtime_extra; /* extra FileCreationtime (nsec << 2 | epoch) */
-+      __u32  i_version_hi;    /* high 32 bits for 64-bit version */
-   };
-+#define EXT4_FEATURE_INCOMPAT_EXTENTS         0x0040 /* extents support */
-+#define EXT4_FEATURE_INCOMPAT_64BIT                   0x0080 /* grub not supported*/
-+#define EXT4_FEATURE_INCOMPAT_MMP           0x0100
-+#define EXT4_FEATURE_INCOMPAT_FLEX_BG         0x0200
-+
-+#define EXT4_HAS_INCOMPAT_FEATURE(sb,mask)                    \
-+      ( sb->s_feature_incompat & mask )
-+
-+#define EXT4_EXTENTS_FL               0x00080000 /* Inode uses extents */
-+#define EXT4_HUGE_FILE_FL     0x00040000 /* Set to each huge file */
-+
-+#define EXT4_MIN_DESC_SIZE                    32
-+
- /* linux/limits.h */
- #define NAME_MAX         255  /* # chars in a file name */
-@@ -180,6 +271,57 @@ struct ext2_dir_entry
-     char name[EXT2_NAME_LEN]; /* File name */
-   };
-+/* linux/ext4_fs_extents.h */
-+/* This is the extent on-disk structure.
-+ * It's used at the bottom of the tree.
-+ */
-+struct ext4_extent
-+  {
-+      __u32  ee_block;   /* first logical block extent covers */
-+      __u16  ee_len;     /* number of blocks covered by extent */
-+      __u16  ee_start_hi;    /* high 16 bits of physical block */
-+      __u32  ee_start_lo;    /* low 32 bits of physical block */
-+  };
-+
-+/*
-+ * This is index on-disk structure.
-+ * It's used at all the levels except the bottom.
-+ */
-+struct ext4_extent_idx
-+  {
-+    __u32  ei_block;   /* index covers logical blocks from 'block' */
-+    __u32  ei_leaf_lo; /* pointer to the physical block of the next *
-+                           * level. leaf or next index could be there */
-+    __u16  ei_leaf_hi; /* high 16 bits of physical block */
-+    __u16  ei_unused;
-+  };
-+
-+/*
-+ * Each block (leaves and indexes), even inode-stored has header.
-+ */
-+struct ext4_extent_header
-+  {
-+    __u16  eh_magic;   /* probably will support different formats */
-+    __u16  eh_entries; /* number of valid entries */
-+    __u16  eh_max;     /* capacity of store in entries */
-+    __u16  eh_depth;   /* has tree real underlying blocks? */
-+    __u32  eh_generation;  /* generation of the tree */
-+  };
-+
-+#define EXT4_EXT_MAGIC      (0xf30a)
-+#define EXT_FIRST_EXTENT(__hdr__) \
-+    ((struct ext4_extent *) (((char *) (__hdr__)) +     \
-+                 sizeof(struct ext4_extent_header)))
-+#define EXT_FIRST_INDEX(__hdr__) \
-+    ((struct ext4_extent_idx *) (((char *) (__hdr__)) + \
-+                 sizeof(struct ext4_extent_header)))
-+#define EXT_LAST_EXTENT(__hdr__) \
-+    (EXT_FIRST_EXTENT((__hdr__)) + (__u16)((__hdr__)->eh_entries) - 1)
-+#define EXT_LAST_INDEX(__hdr__) \
-+    (EXT_FIRST_INDEX((__hdr__)) + (__u16)((__hdr__)->eh_entries) - 1)
-+
-+
-+
- /* linux/ext2fs.h */
- /*
-  * EXT2_DIR_PAD defines the directory entries boundaries
-@@ -206,25 +348,37 @@ struct ext2_dir_entry
-     ((struct ext2_super_block *)(FSYS_BUF))
- #define GROUP_DESC \
-     ((struct ext2_group_desc *) \
--     ((int)SUPERBLOCK + sizeof(struct ext2_super_block)))
-+     ((unsigned long)SUPERBLOCK + sizeof(struct ext2_super_block)))
- #define INODE \
--    ((struct ext2_inode *)((int)GROUP_DESC + EXT2_BLOCK_SIZE(SUPERBLOCK)))
-+    ((struct ext2_inode *)((unsigned long)GROUP_DESC + EXT2_BLOCK_SIZE(SUPERBLOCK)))
- #define DATABLOCK1 \
--    ((int)((int)INODE + sizeof(struct ext2_inode)))
-+    ((unsigned long)INODE + sizeof(struct ext2_inode))
- #define DATABLOCK2 \
--    ((int)((int)DATABLOCK1 + EXT2_BLOCK_SIZE(SUPERBLOCK)))
-+    ((unsigned long)DATABLOCK1 + EXT2_BLOCK_SIZE(SUPERBLOCK))
- /* linux/ext2_fs.h */
- #define EXT2_ADDR_PER_BLOCK(s)          (EXT2_BLOCK_SIZE(s) / sizeof (__u32))
- #define EXT2_ADDR_PER_BLOCK_BITS(s)           (log2(EXT2_ADDR_PER_BLOCK(s)))
-+#define EXT2_INODE_SIZE(s)            (SUPERBLOCK->s_inode_size)
-+#define EXT2_INODES_PER_BLOCK(s)      (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
-+
- /* linux/ext2_fs.h */
- #define EXT2_BLOCK_SIZE_BITS(s)        ((s)->s_log_block_size + 10)
- /* kind of from ext2/super.c */
- #define EXT2_BLOCK_SIZE(s)    (1 << EXT2_BLOCK_SIZE_BITS(s))
- /* linux/ext2fs.h */
-+/* sizeof(struct ext2_group_desc) is changed in ext4
-+ * in kernel code, ext2/3 uses sizeof(struct ext2_group_desc) to calculate
-+ * number of desc per block, while ext4 uses superblock->s_desc_size in stead
-+ * superblock->s_desc_size is not available in ext2/3
-+ * */
-+#define EXT2_DESC_SIZE(s) \
-+      (EXT4_HAS_INCOMPAT_FEATURE(s,EXT4_FEATURE_INCOMPAT_64BIT)? \
-+      s->s_desc_size : EXT4_MIN_DESC_SIZE)
- #define EXT2_DESC_PER_BLOCK(s) \
--     (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc))
-+      (EXT2_BLOCK_SIZE(s) / EXT2_DESC_SIZE(s))
-+
- /* linux/stat.h */
- #define S_IFMT  00170000
- #define S_IFLNK  0120000
-@@ -239,8 +393,8 @@ struct ext2_dir_entry
-  * ffz = Find First Zero in word. Undefined if no zero exists,
-  * so code should check against ~0UL first..
-  */
--static __inline__ unsigned long
--ffz (unsigned long word)
-+static __inline__ unsigned int
-+ffz (unsigned int word)
- {
-   __asm__ ("bsfl %1,%0"
- :        "=r" (word)
-@@ -260,7 +414,7 @@ ext2fs_mount (void)
-        && (! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_EXT2FS))
-        && (! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_OTHER)))
-       || part_length < (SBLOCK + (sizeof (struct ext2_super_block) / DEV_BSIZE))
--      || !devread (SBLOCK, 0, sizeof (struct ext2_super_block),
-+      || !devread (SBLOCK, SBOFF, sizeof (struct ext2_super_block),
-                  (char *) SUPERBLOCK)
-       || SUPERBLOCK->s_magic != EXT2_SUPER_MAGIC)
-       retval = 0;
-@@ -276,7 +430,7 @@ ext2_rdfsb (int fsblock, int buffer)
-   printf ("fsblock %d buffer %d\n", fsblock, buffer);
- #endif /* E2DEBUG */
-   return devread (fsblock * (EXT2_BLOCK_SIZE (SUPERBLOCK) / DEV_BSIZE), 0,
--                EXT2_BLOCK_SIZE (SUPERBLOCK), (char *) buffer);
-+                EXT2_BLOCK_SIZE (SUPERBLOCK), (char *) (unsigned long) buffer);
- }
- /* from
-@@ -386,6 +540,122 @@ ext2fs_block_map (int logical_block)
-     [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)];
- }
-+/* extent binary search index
-+ * find closest index in the current level extent tree
-+ * kind of from ext4_ext_binsearch_idx in ext4/extents.c
-+ */
-+static struct ext4_extent_idx*
-+ext4_ext_binsearch_idx(struct ext4_extent_header* eh, int logical_block)
-+{
-+  struct ext4_extent_idx *r, *l, *m;
-+  l = EXT_FIRST_INDEX(eh) + 1;
-+  r = EXT_LAST_INDEX(eh);
-+  while (l <= r)
-+    {
-+        m = l + (r - l) / 2;
-+        if (logical_block < m->ei_block)
-+                r = m - 1;
-+        else
-+                l = m + 1;
-+      }
-+  return (struct ext4_extent_idx*)(l - 1);
-+}
-+
-+/* extent binary search
-+ * find closest extent in the leaf level
-+ * kind of from ext4_ext_binsearch in ext4/extents.c
-+ */
-+static struct ext4_extent*
-+ext4_ext_binsearch(struct ext4_extent_header* eh, int logical_block)
-+{
-+  struct ext4_extent *r, *l, *m;
-+  l = EXT_FIRST_EXTENT(eh) + 1;
-+  r = EXT_LAST_EXTENT(eh);
-+  while (l <= r)
-+    {
-+        m = l + (r - l) / 2;
-+        if (logical_block < m->ee_block)
-+                r = m - 1;
-+        else
-+                l = m + 1;
-+      }
-+  return (struct ext4_extent*)(l - 1);
-+}
-+
-+/* Maps extents enabled logical block into physical block via an inode.
-+ * EXT4_HUGE_FILE_FL should be checked before calling this.
-+ */
-+static int
-+ext4fs_block_map (int logical_block)
-+{
-+  struct ext4_extent_header *eh;
-+  struct ext4_extent *ex, *extent;
-+  struct ext4_extent_idx *ei, *index;
-+  int depth;
-+  int i;
-+
-+#ifdef E2DEBUG
-+  unsigned char *i;
-+  for (i = (unsigned char *) INODE;
-+       i < ((unsigned char *) INODE + sizeof (struct ext2_inode));
-+       i++)
-+    {
-+      printf ("%c", "0123456789abcdef"[*i >> 4]);
-+      printf ("%c", "0123456789abcdef"[*i % 16]);
-+      if (!((i + 1 - (unsigned char *) INODE) % 16))
-+      {
-+        printf ("\n");
-+      }
-+      else
-+      {
-+        printf (" ");
-+      }
-+    }
-+  printf ("logical block %d\n", logical_block);
-+#endif /* E2DEBUG */
-+  eh = (struct ext4_extent_header*)INODE->i_block;
-+  if (eh->eh_magic != EXT4_EXT_MAGIC)
-+  {
-+          errnum = ERR_FSYS_CORRUPT;
-+          return -1;
-+  }
-+  while((depth = eh->eh_depth) != 0)
-+      { /* extent index */
-+        if (eh->eh_magic != EXT4_EXT_MAGIC)
-+        {
-+                errnum = ERR_FSYS_CORRUPT;
-+                return -1;
-+        }
-+        ei = ext4_ext_binsearch_idx(eh, logical_block);
-+        if (ei->ei_leaf_hi)
-+      {/* 64bit physical block number not supported */
-+        errnum = ERR_FILELENGTH;
-+        return -1;
-+      }
-+        if (!ext2_rdfsb(ei->ei_leaf_lo, DATABLOCK1))
-+      {
-+        errnum = ERR_FSYS_CORRUPT;
-+        return -1;
-+      }
-+        eh = (struct ext4_extent_header*)DATABLOCK1;
-+      }
-+
-+  /* depth==0, we come to the leaf */
-+  ex = ext4_ext_binsearch(eh, logical_block);
-+  if (ex->ee_start_hi)
-+      {/* 64bit physical block number not supported */
-+        errnum = ERR_FILELENGTH;
-+        return -1;
-+      }
-+  if ((ex->ee_block + ex->ee_len) < logical_block)
-+      {
-+        errnum = ERR_FSYS_CORRUPT;
-+        return -1;
-+      }
-+  return ex->ee_start_lo + logical_block - ex->ee_block;
-+
-+}
-+
- /* preconditions: all preconds of ext2fs_block_map */
- int
- ext2fs_read (char *buf, int len)
-@@ -420,6 +690,11 @@ ext2fs_read (char *buf, int len)
-       /* find the (logical) block component of our location */
-       logical_block = filepos >> EXT2_BLOCK_SIZE_BITS (SUPERBLOCK);
-       offset = filepos & (EXT2_BLOCK_SIZE (SUPERBLOCK) - 1);
-+      /* map extents enabled logical block number to physical fs on-disk block number */
-+      if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK,EXT4_FEATURE_INCOMPAT_EXTENTS)
-+                    && INODE->i_flags & EXT4_EXTENTS_FL)
-+          map = ext4fs_block_map (logical_block);
-+      else
-       map = ext2fs_block_map (logical_block);
- #ifdef E2DEBUG
-       printf ("map=%d\n", map);
-@@ -504,7 +779,7 @@ ext2fs_dir (char *dirname)
-   int desc;                   /* index within that group */
-   int ino_blk;                        /* fs pointer of the inode's information */
-   int str_chk = 0;            /* used to hold the results of a string compare */
--  struct ext2_group_desc *gdp;
-+  struct ext4_group_desc *ext4_gdp;
-   struct ext2_inode *raw_inode;       /* inode info corresponding to current_ino */
-   char linkbuf[PATH_MAX];     /* buffer for following symbolic links */
-@@ -546,18 +821,25 @@ ext2fs_dir (char *dirname)
- #endif /* E2DEBUG */
-       if (!ext2_rdfsb (
-                       (WHICH_SUPER + group_desc + SUPERBLOCK->s_first_data_block),
--                      (int) GROUP_DESC))
-+                      (unsigned long) GROUP_DESC))
-       {
-         return 0;
-       }
--      gdp = GROUP_DESC;
--      ino_blk = gdp[desc].bg_inode_table +
-+        ext4_gdp = (struct ext4_group_desc *)( (__u8*)GROUP_DESC +
-+                                      desc * EXT2_DESC_SIZE(SUPERBLOCK));
-+        if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK, EXT4_FEATURE_INCOMPAT_64BIT)
-+              && (! ext4_gdp->bg_inode_table_hi))
-+      {/* 64bit itable not supported */
-+        errnum = ERR_FILELENGTH;
-+        return -1;
-+      }
-+      ino_blk = ext4_gdp->bg_inode_table +
-       (((current_ino - 1) % (SUPERBLOCK->s_inodes_per_group))
--       >> log2 (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)));
-+       >> log2 (EXT2_INODES_PER_BLOCK (SUPERBLOCK)));
- #ifdef E2DEBUG
-       printf ("inode table fsblock=%d\n", ino_blk);
- #endif /* E2DEBUG */
--      if (!ext2_rdfsb (ino_blk, (int) INODE))
-+      if (!ext2_rdfsb (ino_blk, (unsigned long) INODE))
-       {
-         return 0;
-       }
-@@ -565,13 +847,12 @@ ext2fs_dir (char *dirname)
-       /* reset indirect blocks! */
-       mapblock2 = mapblock1 = -1;
--      raw_inode = INODE +
--      ((current_ino - 1)
--       & (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode) - 1));
-+      raw_inode = (struct ext2_inode *)((char *)INODE +
-+      ((current_ino - 1) & (EXT2_INODES_PER_BLOCK (SUPERBLOCK) - 1)) *
-+      EXT2_INODE_SIZE (SUPERBLOCK));
- #ifdef E2DEBUG
-       printf ("ipb=%d, sizeof(inode)=%d\n",
--            (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)),
--            sizeof (struct ext2_inode));
-+            EXT2_INODES_PER_BLOCK (SUPERBLOCK), EXT2_INODE_SIZE (SUPERBLOCK));
-       printf ("inode=%x, raw_inode=%x\n", INODE, raw_inode);
-       printf ("offset into inode table block=%d\n", (int) raw_inode - (int) INODE);
-       for (i = (unsigned char *) INODE; i <= (unsigned char *) raw_inode;
-@@ -629,7 +910,10 @@ ext2fs_dir (char *dirname)
-           }
-         linkbuf[filemax + len] = '\0';
--        /* Read the symlink data. */
-+        /* Read the symlink data.
-+         * Slow symlink is extents enabled
-+         * But since grub_read invokes ext2fs_read, nothing to change here
-+         */
-         if (! ext2_is_fast_symlink ())
-           {
-             /* Read the necessary blocks, and reset the file pointer. */
-@@ -640,7 +924,9 @@ ext2fs_dir (char *dirname)
-           }
-         else
-           {
--            /* Copy the data directly from the inode. */
-+            /* Copy the data directly from the inode.
-+             * Fast symlink is not extents enabled
-+             */
-             len = filemax;
-             memmove (linkbuf, (char *) INODE->i_block, len);
-           }
-@@ -674,6 +960,13 @@ ext2fs_dir (char *dirname)
-             errnum = ERR_BAD_FILETYPE;
-             return 0;
-           }
-+        /* if file is too large, just stop and report an error*/
-+        if ( (INODE->i_flags & EXT4_HUGE_FILE_FL) && !(INODE->i_size_high))
-+          {
-+                /* file too large, stop reading */
-+                errnum = ERR_FILELENGTH;
-+                return 0;
-+          }
-         filemax = (INODE->i_size);
-         return 1;
-@@ -728,17 +1021,28 @@ ext2fs_dir (char *dirname)
-           }
-         /* else, find the (logical) block component of our location */
-+        /* ext4 logical block number the same as ext2/3 */
-         blk = loc >> EXT2_BLOCK_SIZE_BITS (SUPERBLOCK);
-         /* we know which logical block of the directory entry we are looking
-            for, now we have to translate that to the physical (fs) block on
-            the disk */
-+        /* map extents enabled logical block number to physical fs on-disk block number */
-+        if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK,EXT4_FEATURE_INCOMPAT_EXTENTS)
-+                        && INODE->i_flags & EXT4_EXTENTS_FL)
-+              map = ext4fs_block_map (blk);
-+        else
-         map = ext2fs_block_map (blk);
- #ifdef E2DEBUG
-         printf ("fs block=%d\n", map);
- #endif /* E2DEBUG */
-         mapblock2 = -1;
--        if ((map < 0) || !ext2_rdfsb (map, DATABLOCK2))
-+        if (map < 0)
-+        {
-+            *rest = ch;
-+            return 0;
-+        }
-+          if (!ext2_rdfsb (map, DATABLOCK2))
-           {
-             errnum = ERR_FSYS_CORRUPT;
-             *rest = ch;
-diff --git a/stage2/fsys_fat.c b/stage2/fsys_fat.c
-index f40e658..f1157f4 100644
---- a/stage2/fsys_fat.c
-+++ b/stage2/fsys_fat.c
-@@ -49,13 +49,13 @@ struct fat_superblock
- /* pointer(s) into filesystem info buffer for DOS stuff */
- #define FAT_SUPER ( (struct fat_superblock *) \
-                   ( FSYS_BUF + 32256) )/* 512 bytes long */
--#define FAT_BUF   ( FSYS_BUF + 30208 )        /* 4 sector FAT buffer */
--#define NAME_BUF  ( FSYS_BUF + 29184 )        /* Filename buffer (833 bytes) */
-+#define FAT_BUF   ( FSYS_BUF + 28160 )        /* 4 sector FAT buffer */
-+#define NAME_BUF  ( FSYS_BUF + 27136 )        /* Filename buffer (833 bytes) */
--#define FAT_CACHE_SIZE 2048
-+#define FAT_CACHE_SIZE 4096
--static __inline__ unsigned long
--log2 (unsigned long word)
-+static __inline__ unsigned int
-+grub_log2 (unsigned int word)
- {
-   __asm__ ("bsfl %1,%0"
-          : "=r" (word)
-@@ -68,9 +68,12 @@ fat_mount (void)
- {
-   struct fat_bpb bpb;
-   __u32 magic, first_fat;
-+  int sector_size;
-   
-   /* Check partition type for harddisk */
-   if (((current_drive & 0x80) || (current_slice != 0))
-+      && (current_slice != PC_SLICE_TYPE_EXT2FS)
-+      && (current_slice != PC_SLICE_TYPE_LINUX_RAID)
-       && ! IS_PC_SLICE_TYPE_FAT (current_slice)
-       && (! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_MSDOS)))
-     return 0;
-@@ -79,14 +82,16 @@ fat_mount (void)
-   if (! devread (0, 0, sizeof (bpb), (char *) &bpb))
-     return 0;
-+  sector_size = get_sector_size(current_drive);
-+
-   /* Check if the number of sectors per cluster is zero here, to avoid
-      zero division.  */
-   if (bpb.sects_per_clust == 0)
-     return 0;
-   
--  FAT_SUPER->sectsize_bits = log2 (FAT_CVT_U16 (bpb.bytes_per_sect));
-+  FAT_SUPER->sectsize_bits = grub_log2 (FAT_CVT_U16 (bpb.bytes_per_sect));
-   FAT_SUPER->clustsize_bits
--    = FAT_SUPER->sectsize_bits + log2 (bpb.sects_per_clust);
-+    = FAT_SUPER->sectsize_bits + grub_log2 (bpb.sects_per_clust);
-   
-   /* Fill in info about super block */
-   FAT_SUPER->num_sectors = FAT_CVT_U16 (bpb.short_sectors) 
-@@ -106,7 +111,7 @@ fat_mount (void)
-   FAT_SUPER->data_offset = 
-     FAT_SUPER->root_offset
-     + ((FAT_SUPER->root_max - 1) >> FAT_SUPER->sectsize_bits) + 1;
--  FAT_SUPER->num_clust = 
-+  FAT_SUPER->num_clust =
-     2 + ((FAT_SUPER->num_sectors - FAT_SUPER->data_offset) 
-        / bpb.sects_per_clust);
-   FAT_SUPER->sects_per_clust = bpb.sects_per_clust;
-@@ -153,11 +158,11 @@ fat_mount (void)
-   /* Now do some sanity checks */
-   
-   if (FAT_CVT_U16(bpb.bytes_per_sect) != (1 << FAT_SUPER->sectsize_bits)
--      || FAT_CVT_U16(bpb.bytes_per_sect) != SECTOR_SIZE
-+      || FAT_CVT_U16(bpb.bytes_per_sect) != sector_size
-       || bpb.sects_per_clust != (1 << (FAT_SUPER->clustsize_bits
-                                      - FAT_SUPER->sectsize_bits))
-       || FAT_SUPER->num_clust <= 2
--      || (FAT_SUPER->fat_size * FAT_SUPER->num_clust / (2 * SECTOR_SIZE)
-+      || (FAT_SUPER->fat_size * FAT_SUPER->num_clust / (2 * sector_size)
-         > FAT_SUPER->fat_length))
-     return 0;
-   
-@@ -201,6 +206,7 @@ fat_read (char *buf, int len)
-   int offset;
-   int ret = 0;
-   int size;
-+  int sector_size = get_sector_size(current_drive);
-   
-   if (FAT_SUPER->file_cluster < 0)
-     {
-@@ -236,10 +242,10 @@ fat_read (char *buf, int len)
-         if (cached_pos < 0 || 
-             (cached_pos + FAT_SUPER->fat_size) > 2*FAT_CACHE_SIZE)
-           {
--            FAT_SUPER->cached_fat = (fat_entry & ~(2*SECTOR_SIZE - 1));
-+            FAT_SUPER->cached_fat = (fat_entry & ~(2*sector_size - 1));
-             cached_pos = (fat_entry - FAT_SUPER->cached_fat);
-             sector = FAT_SUPER->fat_offset
--              + FAT_SUPER->cached_fat / (2*SECTOR_SIZE);
-+              + FAT_SUPER->cached_fat / (2*sector_size);
-             if (!devread (sector, 0, FAT_CACHE_SIZE, (char*) FAT_BUF))
-               return 0;
-           }
-@@ -257,6 +263,8 @@ fat_read (char *buf, int len)
-           return ret;
-         if (next_cluster < 2 || next_cluster >= FAT_SUPER->num_clust)
-           {
-+            grub_printf("next_cluster: %d FAT_SUPER->num_clust: %d\n",
-+              next_cluster, FAT_SUPER->num_clust);
-             errnum = ERR_FSYS_CORRUPT;
-             return 0;
-           }
-@@ -340,7 +348,8 @@ fat_dir (char *dirname)
-   /* Directories don't have a file size */
-   filemax = MAXINT;
-   
--  for (rest = dirname; (ch = *rest) && !isspace (ch) && ch != '/'; rest++);
-+  for (rest = dirname; (ch = *rest) && !isspace (ch) && ch != '/'; rest++)
-+      *rest = tolower(*rest);
-   
-   *rest = 0;
-   
-@@ -432,7 +441,7 @@ fat_dir (char *dirname)
-               goto print_filename;
- # endif /* STAGE1_5 */
-             
--            if (substring (dirname, filename) == 0)
-+            if (subcasestring (dirname, filename) == 0)
-               break;
-           }
-       }
-@@ -459,7 +468,7 @@ fat_dir (char *dirname)
-       if (do_possibilities)
-       {
-       print_filename:
--        if (substring (dirname, filename) <= 0)
-+        if (subcasestring (dirname, filename) <= 0)
-           {
-             if (print_possibilities > 0)
-               print_possibilities = -print_possibilities;
-@@ -469,7 +478,7 @@ fat_dir (char *dirname)
-       }
- # endif /* STAGE1_5 */
-       
--      if (substring (dirname, filename) == 0)
-+      if (subcasestring (dirname, filename) == 0)
-       break;
-     }
-   
-diff --git a/stage2/fsys_iso9660.c b/stage2/fsys_iso9660.c
-index 90e4aa8..858238b 100644
---- a/stage2/fsys_iso9660.c
-+++ b/stage2/fsys_iso9660.c
-@@ -56,8 +56,8 @@ struct iso_inode_info {
- #define NAME_BUF        ((unsigned char *)(FSYS_BUF + 8192))
--static inline unsigned long
--log2 (unsigned long word)
-+static inline unsigned int
-+grub_log2 (unsigned int word)
- {
-   asm volatile ("bsfl %1,%0"
-               :          "=r" (word)
-@@ -68,7 +68,7 @@ log2 (unsigned long word)
- static int
- iso9660_devread (int sector, int byte_offset, int byte_len, char *buf)
- {
--  unsigned short sector_size_lg2 = log2(buf_geom.sector_size);
-+  unsigned short sector_size_lg2 = grub_log2(buf_geom.sector_size);
-   /*
-    * We have to use own devread() function since BIOS return wrong geometry
-@@ -81,8 +81,6 @@ iso9660_devread (int sector, int byte_offset, int byte_len, char *buf)
-   if (byte_len <= 0)
-     return 1;
--  sector += (byte_offset >> sector_size_lg2);
--  byte_offset &= (buf_geom.sector_size - 1);
-   asm volatile ("shl%L0 %1,%0"
-               : "=r"(sector)
-               : "Ic"((int8_t)(ISO_SECTOR_BITS - sector_size_lg2)),
-diff --git a/stage2/fsys_jfs.c b/stage2/fsys_jfs.c
-index 307f836..d63b1de 100644
---- a/stage2/fsys_jfs.c
-+++ b/stage2/fsys_jfs.c
-@@ -207,19 +207,20 @@ int
- jfs_mount (void)
- {
-       struct jfs_superblock super;
-+      int sector_bits = get_sector_bits(current_drive);
--      if (part_length < MINJFS >> SECTOR_BITS
--          || !devread (SUPER1_OFF >> SECTOR_BITS, 0,
-+      if (part_length < MINJFS >> sector_bits
-+          || !devread (SUPER1_OFF >> sector_bits, 0,
-                        sizeof(struct jfs_superblock), (char *)&super)
-           || (super.s_magic != JFS_MAGIC)
--          || !devread ((AITBL_OFF >> SECTOR_BITS) + FILESYSTEM_I,
-+          || !devread ((AITBL_OFF >> sector_bits) + FILESYSTEM_I,
-                        0, DISIZE, (char*)fileset)) {
-               return 0;
-       }
-       jfs.bsize = super.s_bsize;
-       jfs.l2bsize = super.s_l2bsize;
--      jfs.bdlog = jfs.l2bsize - SECTOR_BITS;
-+      jfs.bdlog = jfs.l2bsize - sector_bits;
-       return 1;
- }
-@@ -387,9 +388,10 @@ int
- jfs_embed (int *start_sector, int needed_sectors)
- {
-       struct jfs_superblock super;
-+      int sector_bits = get_sector_bits(current_drive);
-       if (needed_sectors > 63
--          || !devread (SUPER1_OFF >> SECTOR_BITS, 0,
-+          || !devread (SUPER1_OFF >> sector_bits, 0,
-                        sizeof (struct jfs_superblock),
-                        (char *)&super)
-           || (super.s_magic != JFS_MAGIC)) {
-diff --git a/stage2/fsys_minix.c b/stage2/fsys_minix.c
-index 5c76796..175ecf2 100644
---- a/stage2/fsys_minix.c
-+++ b/stage2/fsys_minix.c
-@@ -138,11 +138,11 @@ struct minix_dir_entry {
- #define SUPERBLOCK \
-     ((struct minix_super_block *)(FSYS_BUF))
- #define INODE \
--    ((struct minix_inode *)((int) SUPERBLOCK + BLOCK_SIZE))
-+    ((struct minix_inode *)((unsigned long) SUPERBLOCK + BLOCK_SIZE))
- #define DATABLOCK1 \
--    ((int)((int)INODE + sizeof(struct minix_inode)))
-+    ((unsigned long)INODE + sizeof(struct minix_inode))
- #define DATABLOCK2 \
--    ((int)((int)DATABLOCK1 + BLOCK_SIZE))
-+    ((unsigned long)DATABLOCK1 + BLOCK_SIZE)
- /* linux/stat.h */
- #define S_IFMT  00170000
-@@ -193,7 +193,7 @@ static int
- minix_rdfsb (int fsblock, int buffer)
- {
-   return devread (fsblock * (BLOCK_SIZE / DEV_BSIZE), 0,
--                BLOCK_SIZE, (char *) buffer);
-+                BLOCK_SIZE, (char *) (unsigned long) buffer);
- }
- /* Maps LOGICAL_BLOCK (the file offset divided by the blocksize) into
-@@ -336,7 +336,7 @@ minix_dir (char *dirname)
-       ino_blk = (2 + SUPERBLOCK->s_imap_blocks + SUPERBLOCK->s_zmap_blocks
-                + (current_ino - 1) / MINIX_INODES_PER_BLOCK);
--      if (! minix_rdfsb (ino_blk, (int) INODE))
-+      if (! minix_rdfsb (ino_blk, (unsigned long) INODE))
-       return 0;
-       /* reset indirect blocks! */
-diff --git a/stage2/fsys_reiserfs.c b/stage2/fsys_reiserfs.c
-index 93ec5f8..f46fcb2 100644
---- a/stage2/fsys_reiserfs.c
-+++ b/stage2/fsys_reiserfs.c
-@@ -292,7 +292,6 @@ struct reiserfs_de_head
- /* The size of the node cache */
- #define FSYSREISER_CACHE_SIZE 24*1024
--#define FSYSREISER_MIN_BLOCKSIZE SECTOR_SIZE
- #define FSYSREISER_MAX_BLOCKSIZE FSYSREISER_CACHE_SIZE / 3
- /* Info about currently opened file */
-@@ -341,19 +340,19 @@ struct fsys_reiser_info
- /* The cached s+tree blocks in FSYS_BUF,  see below
-  * for a more detailed description.
-  */
--#define ROOT     ((char *) ((int) FSYS_BUF))
-+#define ROOT     ((char *) ((unsigned long) FSYS_BUF))
- #define CACHE(i) (ROOT + ((i) << INFO->fullblocksize_shift))
- #define LEAF     CACHE (DISK_LEAF_NODE_LEVEL)
- #define BLOCKHEAD(cache) ((struct block_head *) cache)
--#define ITEMHEAD         ((struct item_head  *) ((int) LEAF + BLKH_SIZE))
--#define KEY(cache)       ((struct key        *) ((int) cache + BLKH_SIZE))
-+#define ITEMHEAD         ((struct item_head  *) ((unsigned long) LEAF + BLKH_SIZE))
-+#define KEY(cache)       ((struct key        *) ((unsigned long) cache + BLKH_SIZE))
- #define DC(cache)        ((struct disk_child *) \
--                        ((int) cache + BLKH_SIZE + KEY_SIZE * nr_item))
-+                        ((unsigned long) cache + BLKH_SIZE + KEY_SIZE * nr_item))
- /* The fsys_reiser_info block.
-  */
- #define INFO \
--    ((struct fsys_reiser_info *) ((int) FSYS_BUF + FSYSREISER_CACHE_SIZE))
-+    ((struct fsys_reiser_info *) ((unsigned long) FSYS_BUF + FSYSREISER_CACHE_SIZE))
- /* 
-  * The journal cache.  For each transaction it contains the number of
-  * blocks followed by the real block numbers of this transaction.  
-@@ -366,8 +365,8 @@ struct fsys_reiser_info
- #define JOURNAL_END      ((__u32 *) (FSYS_BUF + FSYS_BUFLEN))
--static __inline__ unsigned long
--log2 (unsigned long word)
-+static __inline__ unsigned int
-+grub_log2 (unsigned int word)
- {
-   __asm__ ("bsfl %1,%0"
-          : "=r" (word)
-@@ -569,9 +568,11 @@ int
- reiserfs_mount (void)
- {
-   struct reiserfs_super_block super;
--  int superblock = REISERFS_DISK_OFFSET_IN_BYTES >> SECTOR_BITS;
-+  int sector_bits = get_sector_bits(current_drive);
-+  int sector_size = get_sector_size(current_drive);
-+  int superblock = REISERFS_DISK_OFFSET_IN_BYTES >> sector_bits;
--  if (part_length < superblock + (sizeof (super) >> SECTOR_BITS)
-+  if (part_length < superblock + (sizeof (super) >> sector_bits)
-       || ! devread (superblock, 0, sizeof (struct reiserfs_super_block), 
-               (char *) &super)
-       || (substring (REISER3FS_SUPER_MAGIC_STRING, super.s_magic) > 0
-@@ -582,8 +583,8 @@ reiserfs_mount (void)
-         <= REISERFS_DISK_OFFSET_IN_BYTES))
-     {
-       /* Try old super block position */
--      superblock = REISERFS_OLD_DISK_OFFSET_IN_BYTES >> SECTOR_BITS;
--      if (part_length < superblock + (sizeof (super) >> SECTOR_BITS)
-+      superblock = REISERFS_OLD_DISK_OFFSET_IN_BYTES >> sector_bits;
-+      if (part_length < superblock + (sizeof (super) >> sector_bits)
-         || ! devread (superblock, 0, sizeof (struct reiserfs_super_block), 
-                       (char *) &super))
-       return 0;
-@@ -594,7 +595,7 @@ reiserfs_mount (void)
-       {
-         /* pre journaling super block ? */
-         if (substring (REISERFS_SUPER_MAGIC_STRING, 
--                       (char*) ((int) &super + 20)) > 0)
-+                       (char*) ((unsigned long) &super + 20)) > 0)
-           return 0;
-         
-         super.s_blocksize = REISERFS_OLD_BLOCKSIZE;
-@@ -609,8 +610,8 @@ reiserfs_mount (void)
-   
-   INFO->version = super.s_version;
-   INFO->blocksize = super.s_blocksize;
--  INFO->fullblocksize_shift = log2 (super.s_blocksize);
--  INFO->blocksize_shift = INFO->fullblocksize_shift - SECTOR_BITS;
-+  INFO->fullblocksize_shift = grub_log2 (super.s_blocksize);
-+  INFO->blocksize_shift = INFO->fullblocksize_shift - sector_bits;
-   INFO->cached_slots = 
-     (FSYSREISER_CACHE_SIZE >> INFO->fullblocksize_shift) - 1;
-@@ -622,9 +623,9 @@ reiserfs_mount (void)
-   /* Clear node cache. */
-   memset (INFO->blocks, 0, sizeof (INFO->blocks));
--  if (super.s_blocksize < FSYSREISER_MIN_BLOCKSIZE
-+  if (super.s_blocksize < get_sector_size(current_drive)
-       || super.s_blocksize > FSYSREISER_MAX_BLOCKSIZE
--      || (SECTOR_SIZE << INFO->blocksize_shift) != super.s_blocksize)
-+      || (sector_size << INFO->blocksize_shift) != super.s_blocksize)
-     return 0;
-   /* Initialize journal code.  If something fails we end with zero
-@@ -1215,9 +1216,10 @@ int
- reiserfs_embed (int *start_sector, int needed_sectors)
- {
-   struct reiserfs_super_block super;
-+  int sector_bits = get_sector_bits(current_drive);
-   int num_sectors;
--  
--  if (! devread (REISERFS_DISK_OFFSET_IN_BYTES >> SECTOR_BITS, 0, 
-+ 
-+  if (! devread (REISERFS_DISK_OFFSET_IN_BYTES >> sector_bits, 0,
-                sizeof (struct reiserfs_super_block), (char *) &super))
-     return 0;
-   
-@@ -1229,9 +1231,9 @@ reiserfs_embed (int *start_sector, int needed_sectors)
-          * the journal log */
-         super.s_journal_block * super.s_blocksize 
-         > REISERFS_DISK_OFFSET_IN_BYTES))
--    num_sectors = (REISERFS_DISK_OFFSET_IN_BYTES >> SECTOR_BITS) - 1;
-+    num_sectors = (REISERFS_DISK_OFFSET_IN_BYTES >> sector_bits) - 1;
-   else
--    num_sectors = (REISERFS_OLD_DISK_OFFSET_IN_BYTES >> SECTOR_BITS) - 1;
-+    num_sectors = (REISERFS_OLD_DISK_OFFSET_IN_BYTES >> sector_bits) - 1;
-   
-   return (needed_sectors <= num_sectors);
- }
-diff --git a/stage2/fsys_uefi.c b/stage2/fsys_uefi.c
-new file mode 100644
-index 0000000..58b7050
---- /dev/null
-+++ b/stage2/fsys_uefi.c
-@@ -0,0 +1,265 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2001   Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#include "shared.h"
-+#include "filesys.h"
-+
-+#ifdef PLATFORM_EFI
-+#undef GRUB_UTIL
-+
-+#include <grub/types.h>
-+#include <grub/misc.h>
-+#include <grub/efi/efi.h>
-+#include <grub/efi/misc.h>
-+#include <grub/efi/api.h>
-+
-+static grub_efi_simple_file_system_t *file_system;
-+static grub_efi_guid_t fsinfo_guid = GRUB_EFI_DEVICE_PATH_GUID;
-+grub_efi_file_t *root = NULL;
-+grub_efi_file_t *file = NULL;
-+
-+typedef struct {
-+  grub_efi_uint64_t size;
-+  grub_efi_uint64_t filesize;
-+  grub_efi_uint64_t physicalsize;
-+  grub_efi_time_t createtime;
-+  grub_efi_time_t accesstime;
-+  grub_efi_time_t modifytime;
-+  grub_efi_uint64_t attribute;
-+  grub_efi_char16_t filename[];
-+} grub_efi_file_info_t;
-+
-+int 
-+uefi_mount (void)
-+{
-+  grub_efi_handle_t dev_handle = grub_efidisk_get_current_bdev_handle();
-+  grub_efi_status_t status;
-+
-+  if (!dev_handle)
-+    return 0;
-+  
-+  file_system = grub_efi_open_protocol (dev_handle, &simple_file_system_guid,
-+                                      GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-+
-+  if (!file_system)
-+    return 0;
-+
-+  status = Call_Service_2 (file_system->open_volume, file_system, &root);
-+
-+  if (status != GRUB_EFI_SUCCESS)
-+    return 0;
-+
-+  return 1;
-+}
-+
-+int 
-+uefi_dir (char *dirname)
-+{
-+  grub_efi_status_t status;
-+  grub_efi_char16_t *file_name_w = NULL;
-+  grub_efi_char16_t *dir_name_w = NULL;
-+  grub_efi_file_info_t *fileinfo = NULL;
-+  grub_efi_uintn_t buffersize = 0;  
-+  grub_efi_file_t *directory = NULL;
-+  int i, dirlen = 0, ret = 0;
-+
-+  file_name_w = grub_malloc (2 * strlen(dirname) + 2);
-+  if (!file_name_w)
-+    goto done;
-+
-+  for (i=0; i<strlen(dirname); i++) {
-+    file_name_w[i] = dirname[i];
-+    if (file_name_w[i] == '/') {
-+      file_name_w[i] = '\\';
-+      dirlen = i;
-+    }
-+  }
-+
-+  file_name_w[i] = '\0';
-+
-+  status = Call_Service_5 (root->open, root, &file, file_name_w,
-+                         GRUB_EFI_FILE_MODE_READ, 0);
-+
-+  if (status != GRUB_EFI_SUCCESS)
-+    goto done;
-+
-+  if (dirname[i-1] == '/') {
-+    if (print_possibilities)
-+      grub_printf("\n");
-+
-+    while (1) {
-+      int filenamelen;
-+
-+      status = Call_Service_3 (file->read, file, &buffersize, fileinfo);
-+
-+      if (status == GRUB_EFI_BUFFER_TOO_SMALL) {
-+      fileinfo = grub_malloc(buffersize);
-+      continue;
-+      } else if (status) {
-+      goto done;
-+      } else if (buffersize == 0) {
-+      ret = 1;
-+      if (print_possibilities)
-+        grub_printf("\n");
-+      goto done;
-+      }
-+
-+      filenamelen = fileinfo->size - sizeof(*fileinfo);
-+
-+      if (print_possibilities) {
-+      for (i=0; i<filenamelen/2; i++)
-+        grub_printf("%c", (char)fileinfo->filename[i]);
-+      }
-+      grub_printf(" ");
-+    }
-+  } else {
-+    char *data = NULL;
-+    dir_name_w = grub_malloc (2 * dirlen + 2);
-+    if (!dir_name_w)
-+      goto done;
-+
-+    for (i=0; i<dirlen; i++)
-+      dir_name_w[i] = file_name_w[i];
-+
-+    dir_name_w[i] = '\0';
-+
-+    status = Call_Service_5 (root->open, root, &directory, dir_name_w,
-+                           GRUB_EFI_FILE_MODE_READ, 0);
-+
-+    while (1) {
-+      int filenamelen;
-+      int invalid = 0;
-+
-+      status = Call_Service_3 (directory->read, directory, &buffersize, fileinfo);
-+
-+      if (status == GRUB_EFI_BUFFER_TOO_SMALL) {
-+      fileinfo = grub_malloc(buffersize);
-+      continue;
-+      } else if (status) {
-+      goto done;
-+      } else if (buffersize == 0) {
-+      goto done;
-+      }
-+
-+      filenamelen = fileinfo->size - sizeof(*fileinfo);
-+
-+      if (filenamelen != ((strlen(dirname) - dirlen) * 2))
-+      continue;
-+
-+      for (i=0; i<filenamelen/2; i++) {
-+      if (fileinfo->filename[i] != file_name_w[i + dirlen + 1]) {
-+        if (fileinfo->filename[i] > 0xff ||
-+            (grub_tolower(fileinfo->filename[i]) !=
-+             grub_tolower(file_name_w[i + dirlen + 1])))
-+          invalid = 1;
-+      }
-+      }
-+
-+      if (!invalid)
-+      break;
-+    }
-+
-+    if (fileinfo->filesize < 256 && fileinfo->filesize > 3)
-+      {
-+      data = grub_malloc(fileinfo->filesize);
-+      filepos = 0;
-+
-+      uefi_read(data, fileinfo->filesize);
-+
-+      /*
-+       * UEFI doesn't really support symlinks. Apple's UEFI driver exposes
-+       * them as files containing the path of the target. This provides
-+       * hacky support in the absence of a real driver.
-+       */
-+      if (data[0] == '.' && data[1] == '.' && data[2] == '/')
-+        {
-+          int j;
-+          char *tmpdir = grub_malloc(dirlen + fileinfo->filesize);
-+
-+          for (j=0; j<dirlen+1; j++)
-+            tmpdir[j] = dirname[j];
-+          for (j=0; j<fileinfo->filesize; j++)
-+            tmpdir[j+dirlen+1] = data[j];
-+          tmpdir[j+dirlen+1] = '\0';
-+
-+          /* Open the new file */
-+          ret = uefi_dir(tmpdir);
-+          grub_free (tmpdir);
-+          grub_free (data);
-+          goto done;
-+        }
-+      }
-+
-+    if (data)
-+      grub_free(data);
-+    ret = 1;
-+    filemax = fileinfo->filesize;
-+    filepos = 0;
-+  }
-+
-+ done:
-+  if (fileinfo)
-+    grub_free (fileinfo);
-+  if (dir_name_w)
-+    grub_free (dir_name_w);
-+  if (file_name_w)
-+    grub_free (file_name_w);
-+
-+  return ret;
-+}
-+
-+void
-+uefi_close (void)
-+{
-+  grub_efi_status_t status = 0;
-+
-+  if (file)
-+    status = Call_Service_1 (file->close, file);
-+
-+  file = NULL;
-+}
-+
-+int 
-+uefi_read (char *addr, int len)
-+{
-+  grub_efi_status_t status;
-+  grub_efi_uintn_t length = len;
-+
-+  errnum = 0;
-+
-+  status = Call_Service_2 (file->set_position, file, filepos);
-+
-+  if (status != GRUB_EFI_SUCCESS)
-+    goto out;
-+
-+  status = Call_Service_3 (file->read, file, &length, addr);
-+  
-+  len = length;
-+
-+  if (status == GRUB_EFI_SUCCESS) {
-+    filepos += len;
-+    return len;
-+  }
-+
-+ out:
-+  errnum = ERR_FILE_NOT_FOUND;
-+
-+  return 0;
-+}
-+#endif
-diff --git a/stage2/fsys_vstafs.c b/stage2/fsys_vstafs.c
-index a116717..652e784 100644
---- a/stage2/fsys_vstafs.c
-+++ b/stage2/fsys_vstafs.c
-@@ -30,8 +30,8 @@ static struct dir_entry *vstafs_nextdir (void);
- #define FIRST_SECTOR  ((struct first_sector *) FSYS_BUF)
--#define FILE_INFO     ((struct fs_file *) (int) FIRST_SECTOR + 8192)
--#define DIRECTORY_BUF ((struct dir_entry *) (int) FILE_INFO + 512)
-+#define FILE_INFO     ((struct fs_file *) (unsigned long) FIRST_SECTOR + 8192)
-+#define DIRECTORY_BUF ((struct dir_entry *) (unsigned long) FILE_INFO + 512)
- #define ROOT_SECTOR   1
-@@ -186,35 +186,35 @@ vstafs_dir (char *dirname)
- int 
- vstafs_read (char *addr, int len)
- {
--  struct alloc *a;
-+  struct alloc *al;
-   int size, ret = 0, offset, curr_len = 0;
--  int curr_ext;
-+  int this_ext;
-   char extent;
-   int ext_size;
-   char *curr_pos;
-   
-   get_file_info (f_sector);
-   size = FILE_INFO->len-VSTAFS_START_DATA;
--  a = FILE_INFO->blocks;
-+  al = FILE_INFO->blocks;
-   
-   if (filepos > 0)
-     {
--      if (filepos < a[0].a_len * 512 - VSTAFS_START_DATA)
-+      if (filepos < al[0].a_len * 512 - VSTAFS_START_DATA)
-       {
-         offset = filepos + VSTAFS_START_DATA;
-         extent = 0;
--        curr_len = a[0].a_len * 512 - offset - filepos; 
-+        curr_len = al[0].a_len * 512 - offset - filepos; 
-       }
-       else
-       {
--        ext_size = a[0].a_len * 512 - VSTAFS_START_DATA;
-+        ext_size = al[0].a_len * 512 - VSTAFS_START_DATA;
-         offset = filepos - ext_size;
-         extent = 1;
-         do
-           {
-             curr_len -= ext_size;
-             offset -= ext_size;
--            ext_size = a[extent+1].a_len * 512;
-+            ext_size = al[extent+1].a_len * 512;
-           }
-         while (extent < FILE_INFO->extents && offset>ext_size);
-       }
-@@ -223,16 +223,16 @@ vstafs_read (char *addr, int len)
-     {
-       offset = VSTAFS_START_DATA;
-       extent = 0;
--      curr_len = a[0].a_len * 512 - offset;
-+      curr_len = al[0].a_len * 512 - offset;
-     }
-   
-   curr_pos = addr;
-   if (curr_len > len)
-     curr_len = len;
-   
--  for (curr_ext=extent;
--       curr_ext < FILE_INFO->extents; 
--       curr_len = a[curr_ext].a_len * 512, curr_pos += curr_len, curr_ext++)
-+  for (this_ext=extent;
-+       this_ext < FILE_INFO->extents; 
-+       curr_len = al[this_ext].a_len * 512, curr_pos += curr_len, this_ext++)
-     {
-       ret += curr_len;
-       size -= curr_len;
-@@ -242,7 +242,7 @@ vstafs_read (char *addr, int len)
-         curr_len += size;
-       }
-       
--      devread (a[curr_ext].a_start,offset, curr_len, curr_pos);
-+      devread (al[this_ext].a_start,offset, curr_len, curr_pos);
-       offset = 0;
-     }
-   
-diff --git a/stage2/fsys_xfs.c b/stage2/fsys_xfs.c
-index 76c4c13..226e343 100644
---- a/stage2/fsys_xfs.c
-+++ b/stage2/fsys_xfs.c
-@@ -97,19 +97,23 @@ ino2offset (xfs_ino_t ino)
-       return ino & XFS_INO_MASK(XFS_INO_OFFSET_BITS);
- }
--static inline __const__ xfs_uint16_t
--le16 (xfs_uint16_t x)
-+static inline xfs_uint16_t __attribute__((__const__))
-+le16 (xfs_uint16_t x) 
- {
-+#if 1
-+      return ((x & 0xff00) >> 8) | ((x & 0xff) << 8);
-+#else
-       __asm__("xchgb %b0,%h0" \
-               : "=q" (x) \
-               :  "0" (x)); \
-               return x;
-+#endif
- }
--static inline __const__ xfs_uint32_t
-+static inline xfs_uint32_t __attribute__((__const__))
- le32 (xfs_uint32_t x)
- {
--#if 0
-+#if 1
-         /* 386 doesn't have bswap.  */
-       __asm__("bswap %0" : "=r" (x) : "0" (x));
- #else
-@@ -122,7 +126,7 @@ le32 (xfs_uint32_t x)
-       return x;
- }
--static inline __const__ xfs_uint64_t
-+static inline xfs_uint64_t __attribute__((__const__))
- le64 (xfs_uint64_t x)
- {
-       xfs_uint32_t h = x >> 32;
-@@ -187,12 +191,12 @@ fsb2daddr (xfs_fsblock_t fsbno)
- }
- #undef offsetof
--#define offsetof(t,m) ((int)&(((t *)0)->m))
-+#define offsetof(t,m) __builtin_offsetof(t, m)
--static inline int
-+static inline xfs_uint64_t
- btroot_maxrecs (void)
- {
--      int tmp = icore.di_forkoff ? (icore.di_forkoff << 3) : xfs.isize;
-+      xfs_uint64_t tmp = icore.di_forkoff ? (icore.di_forkoff << 3) : xfs.isize;
-       return (tmp - sizeof(xfs_bmdr_block_t) - offsetof(xfs_dinode_t, di_u)) /
-               (sizeof (xfs_bmbt_key_t) + sizeof (xfs_bmbt_ptr_t));
-@@ -465,7 +469,7 @@ xfs_mount (void)
-       xfs.bsize = le32 (super.sb_blocksize);
-       xfs.blklog = super.sb_blocklog;
--      xfs.bdlog = xfs.blklog - SECTOR_BITS;
-+      xfs.bdlog = xfs.blklog - get_sector_bits(current_drive);
-       xfs.rootino = le64 (super.sb_rootino);
-       xfs.isize = le16 (super.sb_inodesize);
-       xfs.agblocks = le32 (super.sb_agblocks);
-diff --git a/stage2/gpt.h b/stage2/gpt.h
-new file mode 100644
-index 0000000..ad6d8f1
---- /dev/null
-+++ b/stage2/gpt.h
-@@ -0,0 +1,69 @@
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2002,2005,2006   Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifndef _GPT_H
-+#define _GPT_H
-+
-+typedef signed char grub_int8_t;
-+typedef signed short grub_int16_t;
-+typedef signed int grub_int32_t;
-+typedef signed long long int grub_int64_t;
-+typedef unsigned char grub_uint8_t;
-+typedef unsigned short grub_uint16_t;
-+typedef unsigned int grub_uint32_t;
-+typedef unsigned long long int grub_uint64_t;
-+
-+struct grub_gpt_header
-+{
-+  grub_uint64_t magic;
-+  grub_uint32_t version;
-+  grub_uint32_t headersize;
-+  grub_uint32_t crc32;
-+  grub_uint32_t unused1;
-+  grub_uint64_t primary;
-+  grub_uint64_t backup;
-+  grub_uint64_t start;
-+  grub_uint64_t end;
-+  grub_uint8_t guid[16];
-+  grub_uint64_t partitions;
-+  grub_uint32_t maxpart;
-+  grub_uint32_t partentry_size;
-+  grub_uint32_t partentry_crc32;
-+} __attribute__ ((packed));
-+
-+struct grub_gpt_partentry
-+{
-+  grub_uint64_t type1;
-+  grub_uint64_t type2;
-+  grub_uint8_t guid[16];
-+  grub_uint64_t start;
-+  grub_uint64_t end;
-+  grub_uint8_t attrib;
-+  char name[72];
-+} __attribute__ ((packed));
-+
-+#define GPT_HEADER_MAGIC       0x5452415020494645ULL
-+
-+#define        GPT_ENTRY_SECTOR(drive,size,entry)                      \
-+       ((((entry) * (size) + 1) & ~(get_sector_size(drive) - 1))       \
-+       >> get_sector_bits(drive))
-+#define        GPT_ENTRY_INDEX(drive, size,entry)                      \
-+       ((((entry) * (size) + 1) & (get_sector_size(drive) - 1)) - 1)
-+
-+#endif /* _GPT_H */
-diff --git a/stage2/graphics.c b/stage2/graphics.c
-new file mode 100644
-index 0000000..81109ae
---- /dev/null
-+++ b/stage2/graphics.c
-@@ -0,0 +1,573 @@
-+/* graphics.c - graphics mode support for GRUB */
-+/* Implemented as a terminal type by Jeremy Katz <katzj@redhat.com> based
-+ * on a patch by Paulo César Pereira de Andrade <pcpa@conectiva.com.br>
-+ */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2001,2002  Red Hat, Inc.
-+ *  Portions copyright (C) 2000  Conectiva, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+
-+
-+#ifdef SUPPORT_GRAPHICS
-+
-+#include <term.h>
-+#include <shared.h>
-+#include <graphics.h>
-+
-+int saved_videomode;
-+unsigned char *font8x16;
-+
-+int graphics_inited = 0;
-+static char splashimage[64];
-+
-+#define VSHADOW VSHADOW1
-+unsigned char VSHADOW1[38400];
-+unsigned char VSHADOW2[38400];
-+unsigned char VSHADOW4[38400];
-+unsigned char VSHADOW8[38400];
-+
-+/* constants to define the viewable area */
-+const int x0 = 0;
-+const int x1 = 80;
-+const int y0 = 0;
-+const int y1 = 30;
-+
-+/* text buffer has to be kept around so that we can write things as we
-+ * scroll and the like */
-+unsigned short text[80 * 30];
-+
-+/* why do these have to be kept here? */
-+int foreground = (63 << 16) | (63 << 8) | (63), background = 0, border = 0;
-+
-+/* current position */
-+static int fontx = 0;
-+static int fonty = 0;
-+
-+/* global state so that we don't try to recursively scroll or cursor */
-+static int no_scroll = 0;
-+
-+/* color state */
-+static int graphics_standard_color = A_NORMAL;
-+static int graphics_normal_color = A_NORMAL;
-+static int graphics_highlight_color = A_REVERSE;
-+static int graphics_current_color = A_NORMAL;
-+static color_state graphics_color_state = COLOR_STATE_STANDARD;
-+
-+
-+/* graphics local functions */
-+static void graphics_setxy(int col, int row);
-+static void graphics_scroll(void);
-+
-+/* FIXME: where do these really belong? */
-+static inline void outb(unsigned short port, unsigned char val)
-+{
-+    __asm __volatile ("outb %0,%1"::"a" (val), "d" (port));
-+}
-+
-+static void MapMask(int value) {
-+    outb(0x3c4, 2);
-+    outb(0x3c5, value);
-+}
-+
-+/* bit mask register */
-+static void BitMask(int value) {
-+    outb(0x3ce, 8);
-+    outb(0x3cf, value);
-+}
-+
-+
-+
-+/* Set the splash image */
-+void graphics_set_splash(char *splashfile) {
-+    grub_strcpy(splashimage, splashfile);
-+}
-+
-+/* Get the current splash image */
-+char *graphics_get_splash(void) {
-+    return splashimage;
-+}
-+
-+/* Initialize a vga16 graphics display with the palette based off of
-+ * the image in splashimage.  If the image doesn't exist, leave graphics
-+ * mode.  */
-+int graphics_init()
-+{
-+    if (!read_image(splashimage)) {
-+      current_term = term_table;
-+        grub_printf("failed to read image\n");
-+        return 0;
-+    }
-+
-+    font8x16 = (unsigned char*)graphics_get_font();
-+
-+    graphics_inited = 1;
-+
-+    /* make sure that the highlight color is set correctly */
-+    graphics_highlight_color = ((graphics_normal_color >> 4) | 
-+                              ((graphics_normal_color & 0xf) << 4));
-+
-+    return 1;
-+}
-+
-+/* Leave graphics mode */
-+void graphics_end(void)
-+{
-+    if (graphics_inited) {
-+        set_videomode(saved_videomode);
-+        graphics_inited = 0;
-+    }
-+}
-+
-+/* Print ch on the screen.  Handle any needed scrolling or the like */
-+void graphics_putchar(int ch) {
-+    ch &= 0xff;
-+
-+    graphics_cursor(0);
-+
-+    if (ch == '\n') {
-+        if (fonty + 1 < y1)
-+            graphics_setxy(fontx, fonty + 1);
-+        else
-+            graphics_scroll();
-+        graphics_cursor(1);
-+        return;
-+    } else if (ch == '\r') {
-+        graphics_setxy(x0, fonty);
-+        graphics_cursor(1);
-+        return;
-+    }
-+
-+    graphics_cursor(0);
-+
-+    text[fonty * 80 + fontx] = ch;
-+    text[fonty * 80 + fontx] &= 0x00ff;
-+    if (graphics_current_color & 0xf0)
-+        text[fonty * 80 + fontx] |= 0x100;
-+
-+    graphics_cursor(0);
-+
-+    if ((fontx + 1) >= x1) {
-+        graphics_setxy(x0, fonty);
-+        if (fonty + 1 < y1)
-+            graphics_setxy(x0, fonty + 1);
-+        else
-+            graphics_scroll();
-+    } else {
-+        graphics_setxy(fontx + 1, fonty);
-+    }
-+
-+    graphics_cursor(1);
-+}
-+
-+/* get the current location of the cursor */
-+int graphics_getxy(void) {
-+    return (fontx << 8) | fonty;
-+}
-+
-+void graphics_gotoxy(int x, int y) {
-+    graphics_cursor(0);
-+
-+    graphics_setxy(x, y);
-+
-+    graphics_cursor(1);
-+}
-+
-+void graphics_cls(void) {
-+    int i;
-+    unsigned char *mem, *s1, *s2, *s4, *s8;
-+
-+    graphics_cursor(0);
-+    graphics_gotoxy(x0, y0);
-+
-+    mem = (unsigned char*)VIDEOMEM;
-+    s1 = (unsigned char*)VSHADOW1;
-+    s2 = (unsigned char*)VSHADOW2;
-+    s4 = (unsigned char*)VSHADOW4;
-+    s8 = (unsigned char*)VSHADOW8;
-+
-+    for (i = 0; i < 80 * 30; i++)
-+        text[i] = ' ';
-+    graphics_cursor(1);
-+
-+    BitMask(0xff);
-+
-+    /* plano 1 */
-+    MapMask(1);
-+    grub_memcpy(mem, s1, 38400);
-+
-+    /* plano 2 */
-+    MapMask(2);
-+    grub_memcpy(mem, s2, 38400);
-+
-+    /* plano 3 */
-+    MapMask(4);
-+    grub_memcpy(mem, s4, 38400);
-+
-+    /* plano 4 */
-+    MapMask(8);
-+    grub_memcpy(mem, s8, 38400);
-+
-+    MapMask(15);
-+ 
-+}
-+
-+void graphics_setcolorstate (color_state state) {
-+    switch (state) {
-+    case COLOR_STATE_STANDARD:
-+        graphics_current_color = graphics_standard_color;
-+        break;
-+    case COLOR_STATE_NORMAL:
-+        graphics_current_color = graphics_normal_color;
-+        break;
-+    case COLOR_STATE_HIGHLIGHT:
-+        graphics_current_color = graphics_highlight_color;
-+        break;
-+    default:
-+        graphics_current_color = graphics_standard_color;
-+        break;
-+    }
-+
-+    graphics_color_state = state;
-+}
-+
-+void graphics_setcolor (int normal_color, int highlight_color) {
-+    graphics_normal_color = normal_color;
-+    graphics_highlight_color = highlight_color;
-+
-+    graphics_setcolorstate (graphics_color_state);
-+}
-+
-+int graphics_setcursor (int on) {
-+    /* FIXME: we don't have a cursor in graphics */
-+    return 0;
-+}
-+
-+/* Open the file, and search for a valid XPM header.  Return 1 if one is found,
-+ * leaving the current position as the start of the next line.  Else,
-+ * return 0.
-+ */
-+static int xpm_open(char *s) {
-+    char buf, prev, target[]="/* XPM */\n";
-+    int pos=0;
-+
-+    if (!grub_open(s))
-+        return 0;
-+
-+    prev='\n';
-+    buf=0;
-+    do {
-+        if (grub_read(&buf, 1) != 1) {
-+            grub_close();
-+            return 0;
-+        }
-+        if ((pos == 0 && prev == '\n') || pos > 0) {
-+            if (buf == target[pos])
-+                pos++;
-+            else
-+                pos=0;
-+        }
-+        prev=buf;
-+    } while (target[pos]);
-+    return 1;
-+}
-+
-+/* Read in the splashscreen image and set the palette up appropriately.
-+ * Format of splashscreen is an xpm (can be gzipped) with 16 colors and
-+ * 640x480. */
-+int read_image(char *s)
-+{
-+    char buf[32], pal[16];
-+    unsigned char c, base, mask, *s1, *s2, *s4, *s8;
-+    unsigned i, len, idx, colors, x, y, width, height;
-+
-+    if (!xpm_open(s))
-+        return 0;
-+
-+    saved_videomode = set_videomode(0x12);
-+
-+    /* parse info */
-+    while (grub_read(&c, 1)) {
-+        if (c == '"')
-+            break;
-+    }
-+
-+    while (grub_read(&c, 1) && (c == ' ' || c == '\t'))
-+        ;
-+
-+    i = 0;
-+    width = c - '0';
-+    while (grub_read(&c, 1)) {
-+        if (c >= '0' && c <= '9')
-+            width = width * 10 + c - '0';
-+        else
-+            break;
-+    }
-+    while (grub_read(&c, 1) && (c == ' ' || c == '\t'))
-+        ;
-+
-+    height = c - '0';
-+    while (grub_read(&c, 1)) {
-+        if (c >= '0' && c <= '9')
-+            height = height * 10 + c - '0';
-+        else
-+            break;
-+    }
-+    while (grub_read(&c, 1) && (c == ' ' || c == '\t'))
-+        ;
-+
-+    colors = c - '0';
-+    while (grub_read(&c, 1)) {
-+        if (c >= '0' && c <= '9')
-+            colors = colors * 10 + c - '0';
-+        else
-+            break;
-+    }
-+
-+    base = 0;
-+    while (grub_read(&c, 1) && c != '"')
-+        ;
-+
-+    /* palette */
-+    for (i = 0, idx = 1; i < colors; i++) {
-+        len = 0;
-+
-+        while (grub_read(&c, 1) && c != '"')
-+            ;
-+        grub_read(&c, 1);       /* char */
-+        base = c;
-+        grub_read(buf, 4);      /* \t c # */
-+
-+        while (grub_read(&c, 1) && c != '"') {
-+            if (len < sizeof(buf))
-+                buf[len++] = c;
-+        }
-+
-+        if (len == 6 && idx < 15) {
-+            int r = ((hex(buf[0]) << 4) | hex(buf[1])) >> 2;
-+            int g = ((hex(buf[2]) << 4) | hex(buf[3])) >> 2;
-+            int b = ((hex(buf[4]) << 4) | hex(buf[5])) >> 2;
-+
-+            pal[idx] = base;
-+            graphics_set_palette(idx, r, g, b);
-+            ++idx;
-+        }
-+    }
-+
-+    x = y = len = 0;
-+
-+    s1 = (unsigned char*)VSHADOW1;
-+    s2 = (unsigned char*)VSHADOW2;
-+    s4 = (unsigned char*)VSHADOW4;
-+    s8 = (unsigned char*)VSHADOW8;
-+
-+    for (i = 0; i < 38400; i++)
-+        s1[i] = s2[i] = s4[i] = s8[i] = 0;
-+
-+    /* parse xpm data */
-+    while (y < height) {
-+        while (1) {
-+            if (!grub_read(&c, 1)) {
-+                grub_close();
-+                return 0;
-+            }
-+            if (c == '"')
-+                break;
-+        }
-+
-+        while (grub_read(&c, 1) && c != '"') {
-+            for (i = 1; i < 15; i++)
-+                if (pal[i] == c) {
-+                    c = i;
-+                    break;
-+                }
-+
-+            mask = 0x80 >> (x & 7);
-+            if (c & 1)
-+                s1[len + (x >> 3)] |= mask;
-+            if (c & 2)
-+                s2[len + (x >> 3)] |= mask;
-+            if (c & 4)
-+                s4[len + (x >> 3)] |= mask;
-+            if (c & 8)
-+                s8[len + (x >> 3)] |= mask;
-+
-+            if (++x >= 640) {
-+                x = 0;
-+
-+                if (y < 480)
-+                    len += 80;
-+                ++y;
-+            }
-+        }
-+    }
-+
-+    grub_close();
-+
-+    graphics_set_palette(0, (background >> 16), (background >> 8) & 63, 
-+                background & 63);
-+    graphics_set_palette(15, (foreground >> 16), (foreground >> 8) & 63, 
-+                foreground & 63);
-+    graphics_set_palette(0x11, (border >> 16), (border >> 8) & 63, 
-+                         border & 63);
-+
-+    return 1;
-+}
-+
-+
-+/* Convert a character which is a hex digit to the appropriate integer */
-+int hex(int v)
-+{
-+    if (v >= 'A' && v <= 'F')
-+        return (v - 'A' + 10);
-+    if (v >= 'a' && v <= 'f')
-+        return (v - 'a' + 10);
-+    return (v - '0');
-+}
-+
-+
-+/* move the graphics cursor location to col, row */
-+static void graphics_setxy(int col, int row) {
-+    if (col >= x0 && col < x1) {
-+        fontx = col;
-+        cursorX = col << 3;
-+    }
-+    if (row >= y0 && row < y1) {
-+        fonty = row;
-+        cursorY = row << 4;
-+    }
-+}
-+
-+/* scroll the screen */
-+static void graphics_scroll(void) {
-+    int i, j;
-+
-+    /* we don't want to scroll recursively... that would be bad */
-+    if (no_scroll)
-+        return;
-+    no_scroll = 1;
-+
-+    /* move everything up a line */
-+    for (j = y0 + 1; j < y1; j++) {
-+        graphics_gotoxy(x0, j - 1);
-+        for (i = x0; i < x1; i++) {
-+            graphics_putchar(text[j * 80 + i]);
-+        }
-+    }
-+
-+    /* last line should be blank */
-+    graphics_gotoxy(x0, y1 - 1);
-+    for (i = x0; i < x1; i++)
-+        graphics_putchar(' ');
-+    graphics_setxy(x0, y1 - 1);
-+
-+    no_scroll = 0;
-+}
-+
-+
-+void graphics_cursor(int set) {
-+    unsigned char *pat, *mem, *ptr, chr[16 << 2];
-+    int i, ch, invert, offset;
-+
-+    if (set && no_scroll)
-+        return;
-+
-+    offset = cursorY * 80 + fontx;
-+    ch = text[fonty * 80 + fontx] & 0xff;
-+    invert = (text[fonty * 80 + fontx] & 0xff00) != 0;
-+    pat = font8x16 + (ch << 4);
-+
-+    mem = (unsigned char*)VIDEOMEM + offset;
-+
-+    if (!set) {
-+        for (i = 0; i < 16; i++) {
-+            unsigned char mask = pat[i];
-+
-+            if (!invert) {
-+                chr[i     ] = ((unsigned char*)VSHADOW1)[offset];
-+                chr[16 + i] = ((unsigned char*)VSHADOW2)[offset];
-+                chr[32 + i] = ((unsigned char*)VSHADOW4)[offset];
-+                chr[48 + i] = ((unsigned char*)VSHADOW8)[offset];
-+
-+                /* FIXME: if (shade) */
-+                if (1) {
-+                    if (ch == DISP_VERT || ch == DISP_LL ||
-+                        ch == DISP_UR || ch == DISP_LR) {
-+                        unsigned char pmask = ~(pat[i] >> 1);
-+
-+                        chr[i     ] &= pmask;
-+                        chr[16 + i] &= pmask;
-+                        chr[32 + i] &= pmask;
-+                        chr[48 + i] &= pmask;
-+                    }
-+                    if (i > 0 && ch != DISP_VERT) {
-+                        unsigned char pmask = ~(pat[i - 1] >> 1);
-+
-+                        chr[i     ] &= pmask;
-+                        chr[16 + i] &= pmask;
-+                        chr[32 + i] &= pmask;
-+                        chr[48 + i] &= pmask;
-+                        if (ch == DISP_HORIZ || ch == DISP_UR || ch == DISP_LR) {
-+                            pmask = ~pat[i - 1];
-+
-+                            chr[i     ] &= pmask;
-+                            chr[16 + i] &= pmask;
-+                            chr[32 + i] &= pmask;
-+                            chr[48 + i] &= pmask;
-+                        }
-+                    }
-+                }
-+                chr[i     ] |= mask;
-+                chr[16 + i] |= mask;
-+                chr[32 + i] |= mask;
-+                chr[48 + i] |= mask;
-+
-+                offset += 80;
-+            }
-+            else {
-+                chr[i     ] = ~mask;
-+                chr[16 + i] = ~mask;
-+                chr[32 + i] = ~mask;
-+                chr[48 + i] = ~mask;
-+            }
-+        }
-+    }
-+    else {
-+        MapMask(15);
-+        ptr = mem;
-+        for (i = 0; i < 16; i++, ptr += 80) {
-+            cursorBuf[i] = pat[i];
-+            *ptr = ~pat[i];
-+        }
-+        return;
-+    }
-+
-+    offset = 0;
-+    for (i = 1; i < 16; i <<= 1, offset += 16) {
-+        int j;
-+
-+        MapMask(i);
-+        ptr = mem;
-+        for (j = 0; j < 16; j++, ptr += 80)
-+            *ptr = chr[j + offset];
-+    }
-+
-+    MapMask(15);
-+}
-+
-+#endif /* SUPPORT_GRAPHICS */
-diff --git a/stage2/graphics.h b/stage2/graphics.h
-new file mode 100644
-index 0000000..a4cd9e8
---- /dev/null
-+++ b/stage2/graphics.h
-@@ -0,0 +1,42 @@
-+/* graphics.h - graphics console interface */
-+/*
-+ *  GRUB  --  GRand Unified Bootloader
-+ *  Copyright (C) 2002  Free Software Foundation, Inc.
-+ *
-+ *  This program is free software; you can redistribute it and/or modify
-+ *  it under the terms of the GNU General Public License as published by
-+ *  the Free Software Foundation; either version 2 of the License, or
-+ *  (at your option) any later version.
-+ *
-+ *  This program is distributed in the hope that it will be useful,
-+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ *  GNU General Public License for more details.
-+ *
-+ *  You should have received a copy of the GNU General Public License
-+ *  along with this program; if not, write to the Free Software
-+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+#ifndef GRAPHICS_H
-+#define GRAPHICS_H
-+
-+/* magic constant */
-+#define VIDEOMEM 0xA0000
-+
-+/* function prototypes */
-+char *graphics_get_splash(void);
-+
-+int read_image(char *s);
-+void graphics_cursor(int set);
-+
-+/* function prototypes for asm functions */
-+void * graphics_get_font();
-+void graphics_set_palette(int idx, int red, int green, int blue);
-+void set_int1c_handler();
-+void unset_int1c_handler();
-+
-+extern short cursorX, cursorY;
-+extern char cursorBuf[16];
-+
-+#endif /* GRAPHICS_H */
-diff --git a/stage2/gunzip.c b/stage2/gunzip.c
-index 8835089..45a2312 100644
---- a/stage2/gunzip.c
-+++ b/stage2/gunzip.c
-@@ -141,7 +141,7 @@ static int gzip_filepos;
- static int gzip_filemax;
- static int gzip_fsmax;
- static int saved_filepos;
--static unsigned long gzip_crc;
-+static unsigned int gzip_crc;
- /* internal extra variables for use of inflate code */
- static int block_type;
-@@ -169,7 +169,14 @@ linalloc (int size)
- static void
- reset_linalloc (void)
- {
-+#ifdef PLATFORM_EFI
-+  unsigned int top = (mbi.mem_upper << 10) + 0x100000;
-+  if (top > GRUB_SCRATCH_MEM_SIZE)
-+    top = GRUB_SCRATCH_MEM_SIZE;
-+  linalloc_topaddr = RAW_ADDR (top);
-+#else
-   linalloc_topaddr = RAW_ADDR ((mbi.mem_upper << 10) + 0x100000);
-+#endif
- }
-@@ -253,7 +260,7 @@ bad_field (int len)
- typedef unsigned char uch;
- typedef unsigned short ush;
--typedef unsigned long ulg;
-+typedef unsigned int ulg;
- /*
-  *  Window Size
-@@ -316,8 +323,8 @@ gunzip_test_header (void)
-       return 0;
-     }
--  gzip_crc = *((unsigned long *) buf);
--  gzip_fsmax = gzip_filemax = *((unsigned long *) (buf + 4));
-+  gzip_crc = *((unsigned int *) buf);
-+  gzip_fsmax = gzip_filemax = *((unsigned int *) (buf + 4));
-   initialize_tables ();
-diff --git a/stage2/iso9660.h b/stage2/iso9660.h
-index 4a6a8cc..c311ecf 100644
---- a/stage2/iso9660.h
-+++ b/stage2/iso9660.h
-@@ -73,11 +73,11 @@ typedef    union {
- typedef       struct __iso_16bit {
-   u_int16_t l, b;
--} iso_16bit_t __attribute__ ((packed));
-+} iso_16bit_t;
- typedef       struct __iso_32bit {
-   u_int32_t l, b;
--} iso_32bit_t __attribute__ ((packed));
-+} iso_32bit_t;
- typedef u_int8_t              iso_date_t[7];
-diff --git a/stage2/mb_info.h b/stage2/mb_info.h
-index 1e1e63b..3a8dcfb 100644
---- a/stage2/mb_info.h
-+++ b/stage2/mb_info.h
-@@ -44,10 +44,10 @@ struct mod_list
- struct AddrRangeDesc
- {
--  unsigned long size;
-+  unsigned int size;
-   unsigned long long BaseAddr;
-   unsigned long long Length;
--  unsigned long Type;
-+  unsigned int Type;
-   
-   /* unspecified optional padding... */
- } __attribute__ ((packed));
-diff --git a/stage2/pc_slice.h b/stage2/pc_slice.h
-index a38d97f..2206e82 100644
---- a/stage2/pc_slice.h
-+++ b/stage2/pc_slice.h
-@@ -38,50 +38,50 @@
-  */
- #define PC_MBR_CHECK_SIG(mbr_ptr) \
--  ( *( (unsigned short *) (((int) mbr_ptr) + PC_MBR_SIG_OFFSET) ) \
-+  ( *( (unsigned short *) (((unsigned long) mbr_ptr) + PC_MBR_SIG_OFFSET) ) \
-    == PC_MBR_SIGNATURE )
- #define PC_MBR_SIG(mbr_ptr) \
--  ( *( (unsigned short *) (((int) mbr_ptr) + PC_MBR_SIG_OFFSET) ) )
-+  ( *( (unsigned short *) (((unsigned long) mbr_ptr) + PC_MBR_SIG_OFFSET) ) )
- #define PC_SLICE_FLAG(mbr_ptr, part) \
--  ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET \
-+  ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET \
-                         + (part << 4)) ) )
- #define PC_SLICE_HEAD(mbr_ptr, part) \
--  ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 1 \
-+  ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 1 \
-                         + (part << 4)) ) )
- #define PC_SLICE_SEC(mbr_ptr, part) \
--  ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 2 \
-+  ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 2 \
-                         + (part << 4)) ) )
- #define PC_SLICE_CYL(mbr_ptr, part) \
--  ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 3 \
-+  ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 3 \
-                         + (part << 4)) ) )
- #define PC_SLICE_TYPE(mbr_ptr, part) \
--  ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 4 \
-+  ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 4 \
-                         + (part << 4)) ) )
- #define PC_SLICE_EHEAD(mbr_ptr, part) \
--  ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 5 \
-+  ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 5 \
-                         + (part << 4)) ) )
- #define PC_SLICE_ESEC(mbr_ptr, part) \
--  ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 6 \
-+  ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 6 \
-                         + (part << 4)) ) )
- #define PC_SLICE_ECYL(mbr_ptr, part) \
--  ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 7 \
-+  ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 7 \
-                         + (part << 4)) ) )
- #define PC_SLICE_START(mbr_ptr, part) \
--  ( *( (unsigned long *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 8 \
-+  ( *( (unsigned int *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 8 \
-                         + (part << 4)) ) )
- #define PC_SLICE_LENGTH(mbr_ptr, part) \
--  ( *( (unsigned long *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 12 \
-+  ( *( (unsigned int *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 12 \
-                         + (part << 4)) ) )
-@@ -115,6 +115,8 @@
- #define PC_SLICE_TYPE_LINUX_EXTENDED  0x85
- #define PC_SLICE_TYPE_VSTAFS          0x9e
- #define PC_SLICE_TYPE_DELL_UTIL               0xde
-+#define PC_SLICE_TYPE_GPT              0xee
-+#define PC_SLICE_TYPE_EFI             0xef
- #define PC_SLICE_TYPE_LINUX_RAID      0xfd
-@@ -129,7 +131,8 @@
-      || _type == PC_SLICE_TYPE_FAT16_LBA \
-      || _type == PC_SLICE_TYPE_FAT32 \
-      || _type == PC_SLICE_TYPE_FAT32_LBA \
--     || _type == PC_SLICE_TYPE_DELL_UTIL; })
-+     || _type == PC_SLICE_TYPE_DELL_UTIL \
-+     || _type == PC_SLICE_TYPE_EFI; })
- #define IS_PC_SLICE_TYPE_EXTENDED(type)       \
-   (((type) == PC_SLICE_TYPE_EXTENDED) \
-@@ -177,40 +180,40 @@
-  */
- #define BSD_LABEL_CHECK_MAG(l_ptr) \
--  ( *( (unsigned long *) (((int) l_ptr) + BSD_LABEL_MAG_OFFSET) ) \
--   == ( (unsigned long) BSD_LABEL_MAGIC ) )
-+  ( *( (unsigned int *) (((unsigned long) l_ptr) + BSD_LABEL_MAG_OFFSET) ) \
-+   == ( (unsigned int) BSD_LABEL_MAGIC ) )
- #define BSD_LABEL_MAG(l_ptr) \
--  ( *( (unsigned long *) (((int) l_ptr) + BSD_LABEL_MAG_OFFSET) ) )
-+  ( *( (unsigned int *) (((unsigned long) l_ptr) + BSD_LABEL_MAG_OFFSET) ) )
- #define BSD_LABEL_DTYPE(l_ptr) \
--  ( *( (unsigned short *) (((int) l_ptr) + BSD_LABEL_MAG_OFFSET + 4) ) )
-+  ( *( (unsigned short *) (((unsigned long) l_ptr) + BSD_LABEL_MAG_OFFSET + 4) ) )
- #define BSD_LABEL_NPARTS(l_ptr) \
--  ( *( (unsigned short *) (((int) l_ptr) + BSD_LABEL_NPARTS_OFFSET) ) )
-+  ( *( (unsigned short *) (((unsigned long) l_ptr) + BSD_LABEL_NPARTS_OFFSET) ) )
- #define BSD_PART_LENGTH(l_ptr, part) \
--  ( *( (unsigned long *) (((int) l_ptr) + BSD_PART_OFFSET \
-+  ( *( (unsigned int *) (((unsigned long) l_ptr) + BSD_PART_OFFSET \
-                         + (part << 4)) ) )
- #define BSD_PART_START(l_ptr, part) \
--  ( *( (unsigned long *) (((int) l_ptr) + BSD_PART_OFFSET + 4 \
-+  ( *( (unsigned int *) (((unsigned long) l_ptr) + BSD_PART_OFFSET + 4 \
-                         + (part << 4)) ) )
- #define BSD_PART_FRAG_SIZE(l_ptr, part) \
--  ( *( (unsigned long *) (((int) l_ptr) + BSD_PART_OFFSET + 8 \
-+  ( *( (unsigned int *) (((unsigned long) l_ptr) + BSD_PART_OFFSET + 8 \
-                         + (part << 4)) ) )
- #define BSD_PART_TYPE(l_ptr, part) \
--  ( *( (unsigned char *) (((int) l_ptr) + BSD_PART_OFFSET + 12 \
-+  ( *( (unsigned char *) (((unsigned long) l_ptr) + BSD_PART_OFFSET + 12 \
-                         + (part << 4)) ) )
- #define BSD_PART_FRAGS_PER_BLOCK(l_ptr, part) \
--  ( *( (unsigned char *) (((int) l_ptr) + BSD_PART_OFFSET + 13 \
-+  ( *( (unsigned char *) (((unsigned long) l_ptr) + BSD_PART_OFFSET + 13 \
-                         + (part << 4)) ) )
- #define BSD_PART_EXTRA(l_ptr, part) \
--  ( *( (unsigned short *) (((int) l_ptr) + BSD_PART_OFFSET + 14 \
-+  ( *( (unsigned short *) (((unsigned long) l_ptr) + BSD_PART_OFFSET + 14 \
-                         + (part << 4)) ) )
-diff --git a/stage2/serial.c b/stage2/serial.c
-index 16c376f..37b9532 100644
---- a/stage2/serial.c
-+++ b/stage2/serial.c
-@@ -37,7 +37,7 @@ static int keep_track = 1;
\f
- /* Hardware-dependent definitions.  */
--#ifndef GRUB_UTIL
-+#if ! defined (GRUB_UTIL) && ! defined (PLATFORM_EFI)
- /* The structure for speed vs. divisor.  */
- struct divisor
- {
-@@ -187,7 +187,7 @@ serial_hw_init (unsigned short port, unsigned int speed,
-   
-   return 1;
- }
--#endif /* ! GRUB_UTIL */
-+#endif /* ! defined (GRUB_UTIL) && ! defined (PLATFORM_EFI) */
\f
- /* Generic definitions.  */
-diff --git a/stage2/sha256crypt.c b/stage2/sha256crypt.c
-new file mode 100644
-index 0000000..db168a2
---- /dev/null
-+++ b/stage2/sha256crypt.c
-@@ -0,0 +1,723 @@
-+/* SHA256-based Unix crypt implementation.
-+   Released into the Public Domain by Ulrich Drepper <drepper@redhat.com>.
-+   Adapted for grub by Miloslav Trmac <mitr@redhat.com>. */
-+
-+#include <stdbool.h>
-+#include <stddef.h>
-+
-+#include <shared.h>
-+
-+typedef unsigned int uint32_t;
-+typedef size_t uintptr_t;
-+#define alloca(SIZE) (__builtin_alloca (SIZE))
-+#define MIN(A, B) ((A) < (B) ? (A) : (B))
-+#define MAX(A, B) ((A) > (B) ? (A) : (B))
-+
-+/* Structure to save state of computation between the single steps.  */
-+struct sha256_ctx
-+{
-+  uint32_t H[8];
-+
-+  uint32_t total[2];
-+  uint32_t buflen;
-+  char buffer[128];   /* NB: always correctly aligned for uint32_t.  */
-+};
-+
-+
-+#if 1 /* __BYTE_ORDER == __LITTLE_ENDIAN */
-+# define SWAP(n) \
-+    (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
-+#else
-+# define SWAP(n) (n)
-+#endif
-+
-+
-+/* This array contains the bytes used to pad the buffer to the next
-+   64-byte boundary.  (FIPS 180-2:5.1.1)  */
-+static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ...  */ };
-+
-+
-+/* Constants for SHA256 from FIPS 180-2:4.2.2.  */
-+static const uint32_t K[64] =
-+  {
-+    0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
-+    0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
-+    0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
-+    0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
-+    0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
-+    0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
-+    0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
-+    0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
-+    0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
-+    0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
-+    0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
-+    0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
-+    0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
-+    0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
-+    0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
-+    0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
-+  };
-+
-+
-+/* Process LEN bytes of BUFFER, accumulating context into CTX.
-+   It is assumed that LEN % 64 == 0.  */
-+static void
-+sha256_process_block (const void *buffer, size_t len, struct sha256_ctx *ctx)
-+{
-+  const uint32_t *words = buffer;
-+  size_t nwords = len / sizeof (uint32_t);
-+  uint32_t a = ctx->H[0];
-+  uint32_t b = ctx->H[1];
-+  uint32_t c = ctx->H[2];
-+  uint32_t d = ctx->H[3];
-+  uint32_t e = ctx->H[4];
-+  uint32_t f = ctx->H[5];
-+  uint32_t g = ctx->H[6];
-+  uint32_t h = ctx->H[7];
-+
-+  /* First increment the byte count.  FIPS 180-2 specifies the possible
-+     length of the file up to 2^64 bits.  Here we only compute the
-+     number of bytes.  Do a double word increment.  */
-+  ctx->total[0] += len;
-+  if (ctx->total[0] < len)
-+    ++ctx->total[1];
-+
-+  /* Process all bytes in the buffer with 64 bytes in each round of
-+     the loop.  */
-+  while (nwords > 0)
-+    {
-+      uint32_t W[64];
-+      uint32_t a_save = a;
-+      uint32_t b_save = b;
-+      uint32_t c_save = c;
-+      uint32_t d_save = d;
-+      uint32_t e_save = e;
-+      uint32_t f_save = f;
-+      uint32_t g_save = g;
-+      uint32_t h_save = h;
-+      unsigned int t;
-+
-+      /* Operators defined in FIPS 180-2:4.1.2.  */
-+#define Ch(x, y, z) ((x & y) ^ (~x & z))
-+#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
-+#define S0(x) (CYCLIC (x, 2) ^ CYCLIC (x, 13) ^ CYCLIC (x, 22))
-+#define S1(x) (CYCLIC (x, 6) ^ CYCLIC (x, 11) ^ CYCLIC (x, 25))
-+#define R0(x) (CYCLIC (x, 7) ^ CYCLIC (x, 18) ^ (x >> 3))
-+#define R1(x) (CYCLIC (x, 17) ^ CYCLIC (x, 19) ^ (x >> 10))
-+
-+      /* It is unfortunate that C does not provide an operator for
-+       cyclic rotation.  Hope the C compiler is smart enough.  */
-+#define CYCLIC(w, s) ((w >> s) | (w << (32 - s)))
-+
-+      /* Compute the message schedule according to FIPS 180-2:6.2.2 step 2.  */
-+      for (t = 0; t < 16; ++t)
-+      {
-+        W[t] = SWAP (*words);
-+        ++words;
-+      }
-+      for (t = 16; t < 64; ++t)
-+      W[t] = R1 (W[t - 2]) + W[t - 7] + R0 (W[t - 15]) + W[t - 16];
-+
-+      /* The actual computation according to FIPS 180-2:6.2.2 step 3.  */
-+      for (t = 0; t < 64; ++t)
-+      {
-+        uint32_t T1 = h + S1 (e) + Ch (e, f, g) + K[t] + W[t];
-+        uint32_t T2 = S0 (a) + Maj (a, b, c);
-+        h = g;
-+        g = f;
-+        f = e;
-+        e = d + T1;
-+        d = c;
-+        c = b;
-+        b = a;
-+        a = T1 + T2;
-+      }
-+
-+      /* Add the starting values of the context according to FIPS 180-2:6.2.2
-+       step 4.  */
-+      a += a_save;
-+      b += b_save;
-+      c += c_save;
-+      d += d_save;
-+      e += e_save;
-+      f += f_save;
-+      g += g_save;
-+      h += h_save;
-+
-+      /* Prepare for the next round.  */
-+      nwords -= 16;
-+    }
-+
-+  /* Put checksum in context given as argument.  */
-+  ctx->H[0] = a;
-+  ctx->H[1] = b;
-+  ctx->H[2] = c;
-+  ctx->H[3] = d;
-+  ctx->H[4] = e;
-+  ctx->H[5] = f;
-+  ctx->H[6] = g;
-+  ctx->H[7] = h;
-+}
-+
-+
-+/* Initialize structure containing state of computation.
-+   (FIPS 180-2:5.3.2)  */
-+static void
-+sha256_init_ctx (struct sha256_ctx *ctx)
-+{
-+  ctx->H[0] = 0x6a09e667;
-+  ctx->H[1] = 0xbb67ae85;
-+  ctx->H[2] = 0x3c6ef372;
-+  ctx->H[3] = 0xa54ff53a;
-+  ctx->H[4] = 0x510e527f;
-+  ctx->H[5] = 0x9b05688c;
-+  ctx->H[6] = 0x1f83d9ab;
-+  ctx->H[7] = 0x5be0cd19;
-+
-+  ctx->total[0] = ctx->total[1] = 0;
-+  ctx->buflen = 0;
-+}
-+
-+
-+/* Process the remaining bytes in the internal buffer and the usual
-+   prolog according to the standard and write the result to RESBUF.
-+
-+   IMPORTANT: On some systems it is required that RESBUF is correctly
-+   aligned for a 32 bits value.  */
-+static void *
-+sha256_finish_ctx (struct sha256_ctx *ctx, void *resbuf)
-+{
-+  /* Take yet unprocessed bytes into account.  */
-+  uint32_t bytes = ctx->buflen;
-+  size_t pad;
-+  unsigned int i;
-+
-+  /* Now count remaining bytes.  */
-+  ctx->total[0] += bytes;
-+  if (ctx->total[0] < bytes)
-+    ++ctx->total[1];
-+
-+  pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
-+  memcpy (&ctx->buffer[bytes], fillbuf, pad);
-+
-+  /* Put the 64-bit file length in *bits* at the end of the buffer.  */
-+  *(uint32_t *) &ctx->buffer[bytes + pad + 4] = SWAP (ctx->total[0] << 3);
-+  *(uint32_t *) &ctx->buffer[bytes + pad] = SWAP ((ctx->total[1] << 3) |
-+                                                (ctx->total[0] >> 29));
-+
-+  /* Process last bytes.  */
-+  sha256_process_block (ctx->buffer, bytes + pad + 8, ctx);
-+
-+  /* Put result from CTX in first 32 bytes following RESBUF.  */
-+  for (i = 0; i < 8; ++i)
-+    ((uint32_t *) resbuf)[i] = SWAP (ctx->H[i]);
-+
-+  return resbuf;
-+}
-+
-+
-+static void
-+sha256_process_bytes (const void *buffer, size_t len, struct sha256_ctx *ctx)
-+{
-+  /* When we already have some bits in our internal buffer concatenate
-+     both inputs first.  */
-+  if (ctx->buflen != 0)
-+    {
-+      size_t left_over = ctx->buflen;
-+      size_t add = 128 - left_over > len ? len : 128 - left_over;
-+
-+      memcpy (&ctx->buffer[left_over], buffer, add);
-+      ctx->buflen += add;
-+
-+      if (ctx->buflen > 64)
-+      {
-+        sha256_process_block (ctx->buffer, ctx->buflen & ~63, ctx);
-+
-+        ctx->buflen &= 63;
-+        /* The regions in the following copy operation cannot overlap.  */
-+        memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63],
-+                ctx->buflen);
-+      }
-+
-+      buffer = (const char *) buffer + add;
-+      len -= add;
-+    }
-+
-+  /* Process available complete blocks.  */
-+  if (len >= 64)
-+    {
-+/* To check alignment gcc has an appropriate operator.  Other
-+   compilers don't.  */
-+#if __GNUC__ >= 2
-+# define UNALIGNED_P(p) (((uintptr_t) p) % __alignof__ (uint32_t) != 0)
-+#else
-+# define UNALIGNED_P(p) (((uintptr_t) p) % sizeof (uint32_t) != 0)
-+#endif
-+      if (UNALIGNED_P (buffer))
-+      while (len > 64)
-+        {
-+          sha256_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx);
-+          buffer = (const char *) buffer + 64;
-+          len -= 64;
-+        }
-+      else
-+      {
-+        sha256_process_block (buffer, len & ~63, ctx);
-+        buffer = (const char *) buffer + (len & ~63);
-+        len &= 63;
-+      }
-+    }
-+
-+  /* Move remaining bytes into internal buffer.  */
-+  if (len > 0)
-+    {
-+      size_t left_over = ctx->buflen;
-+
-+      memcpy (&ctx->buffer[left_over], buffer, len);
-+      left_over += len;
-+      if (left_over >= 64)
-+      {
-+        sha256_process_block (ctx->buffer, 64, ctx);
-+        left_over -= 64;
-+        memcpy (ctx->buffer, &ctx->buffer[64], left_over);
-+      }
-+      ctx->buflen = left_over;
-+    }
-+}
-+
-+
-+/* Define our magic string to mark salt for SHA256 "encryption"
-+   replacement.  */
-+static const char sha256_salt_prefix[] = "$5$";
-+
-+/* Prefix for optional rounds specification.  */
-+static const char sha256_rounds_prefix[] = "rounds=";
-+
-+/* Maximum salt string length.  */
-+#define SALT_LEN_MAX 16
-+/* Default number of rounds if not explicitly specified.  */
-+#define ROUNDS_DEFAULT 5000
-+/* Minimum number of rounds.  */
-+#define ROUNDS_MIN 1000
-+/* Maximum number of rounds.  */
-+#define ROUNDS_MAX 999999999
-+
-+/* Table with characters for base64 transformation.  */
-+static const char b64t[64] =
-+"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-+
-+
-+static char *
-+sha256_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
-+{
-+  unsigned char alt_result[32]
-+    __attribute__ ((__aligned__ (__alignof__ (uint32_t))));
-+  unsigned char temp_result[32]
-+    __attribute__ ((__aligned__ (__alignof__ (uint32_t))));
-+  struct sha256_ctx ctx;
-+  struct sha256_ctx alt_ctx;
-+  size_t salt_len;
-+  size_t key_len;
-+  size_t cnt;
-+  char *cp;
-+  char *copied_key = NULL;
-+  char *copied_salt = NULL;
-+  char *p_bytes;
-+  char *s_bytes;
-+  /* Default number of rounds.  */
-+  size_t rounds = ROUNDS_DEFAULT;
-+  bool rounds_custom = false;
-+
-+  /* Find beginning of salt string.  The prefix should normally always
-+     be present.  Just in case it is not.  */
-+  if (grub_memcmp (sha256_salt_prefix, salt,
-+                 sizeof (sha256_salt_prefix) - 1) == 0)
-+    /* Skip salt prefix.  */
-+    salt += sizeof (sha256_salt_prefix) - 1;
-+
-+  if (grub_memcmp (salt, sha256_rounds_prefix,
-+                 sizeof (sha256_rounds_prefix) - 1) == 0)
-+    {
-+      const char *num = salt + sizeof (sha256_rounds_prefix) - 1;
-+      char *endp = (char *)num;
-+      int srounds = 0;
-+      if (*endp == '0' && tolower (endp[1]) == 'x')
-+      /* This would be interpreted as hexadecimal by safe_parse_maxint(). */
-+      endp++;
-+      else
-+      /* On error, endp and srounds is not changed. */
-+      safe_parse_maxint(&endp, &srounds);
-+      if (*endp == '$')
-+      {
-+        salt = endp + 1;
-+        rounds = MAX (ROUNDS_MIN, MIN (srounds, ROUNDS_MAX));
-+        rounds_custom = true;
-+      }
-+    }
-+
-+  salt_len = MIN (strcspn (salt, "$"), SALT_LEN_MAX);
-+  key_len = strlen (key);
-+
-+  if ((key - (char *) 0) % __alignof__ (uint32_t) != 0)
-+    {
-+      char *tmp = (char *) alloca (key_len + __alignof__ (uint32_t));
-+      key = copied_key =
-+      memcpy (tmp + __alignof__ (uint32_t)
-+              - (tmp - (char *) 0) % __alignof__ (uint32_t),
-+              key, key_len);
-+    }
-+
-+  if ((salt - (char *) 0) % __alignof__ (uint32_t) != 0)
-+    {
-+      char *tmp = (char *) alloca (salt_len + __alignof__ (uint32_t));
-+      salt = copied_salt =
-+      memcpy (tmp + __alignof__ (uint32_t)
-+              - (tmp - (char *) 0) % __alignof__ (uint32_t),
-+              salt, salt_len);
-+    }
-+
-+  /* Prepare for the real work.  */
-+  sha256_init_ctx (&ctx);
-+
-+  /* Add the key string.  */
-+  sha256_process_bytes (key, key_len, &ctx);
-+
-+  /* The last part is the salt string.  This must be at most 16
-+     characters and it ends at the first `$' character (for
-+     compatibility with existing implementations).  */
-+  sha256_process_bytes (salt, salt_len, &ctx);
-+
-+
-+  /* Compute alternate SHA256 sum with input KEY, SALT, and KEY.  The
-+     final result will be added to the first context.  */
-+  sha256_init_ctx (&alt_ctx);
-+
-+  /* Add key.  */
-+  sha256_process_bytes (key, key_len, &alt_ctx);
-+
-+  /* Add salt.  */
-+  sha256_process_bytes (salt, salt_len, &alt_ctx);
-+
-+  /* Add key again.  */
-+  sha256_process_bytes (key, key_len, &alt_ctx);
-+
-+  /* Now get result of this (32 bytes) and add it to the other
-+     context.  */
-+  sha256_finish_ctx (&alt_ctx, alt_result);
-+
-+  /* Add for any character in the key one byte of the alternate sum.  */
-+  for (cnt = key_len; cnt > 32; cnt -= 32)
-+    sha256_process_bytes (alt_result, 32, &ctx);
-+  sha256_process_bytes (alt_result, cnt, &ctx);
-+
-+  /* Take the binary representation of the length of the key and for every
-+     1 add the alternate sum, for every 0 the key.  */
-+  for (cnt = key_len; cnt > 0; cnt >>= 1)
-+    if ((cnt & 1) != 0)
-+      sha256_process_bytes (alt_result, 32, &ctx);
-+    else
-+      sha256_process_bytes (key, key_len, &ctx);
-+
-+  /* Create intermediate result.  */
-+  sha256_finish_ctx (&ctx, alt_result);
-+
-+  /* Start computation of P byte sequence.  */
-+  sha256_init_ctx (&alt_ctx);
-+
-+  /* For every character in the password add the entire password.  */
-+  for (cnt = 0; cnt < key_len; ++cnt)
-+    sha256_process_bytes (key, key_len, &alt_ctx);
-+
-+  /* Finish the digest.  */
-+  sha256_finish_ctx (&alt_ctx, temp_result);
-+
-+  /* Create byte sequence P.  */
-+  cp = p_bytes = alloca (key_len);
-+  for (cnt = key_len; cnt >= 32; cnt -= 32)
-+    {
-+      memcpy (cp, temp_result, 32);
-+      cp += 32;
-+    }
-+  memcpy (cp, temp_result, cnt);
-+
-+  /* Start computation of S byte sequence.  */
-+  sha256_init_ctx (&alt_ctx);
-+
-+  /* For every character in the password add the entire password.  */
-+  for (cnt = 0; cnt < 16 + alt_result[0]; ++cnt)
-+    sha256_process_bytes (salt, salt_len, &alt_ctx);
-+
-+  /* Finish the digest.  */
-+  sha256_finish_ctx (&alt_ctx, temp_result);
-+
-+  /* Create byte sequence S.  */
-+  cp = s_bytes = alloca (salt_len);
-+  for (cnt = salt_len; cnt >= 32; cnt -= 32)
-+    {
-+      memcpy (cp, temp_result, 32);
-+      cp += 32;
-+    }
-+  memcpy (cp, temp_result, cnt);
-+
-+  /* Repeatedly run the collected hash value through SHA256 to burn
-+     CPU cycles.  */
-+  for (cnt = 0; cnt < rounds; ++cnt)
-+    {
-+      /* New context.  */
-+      sha256_init_ctx (&ctx);
-+
-+      /* Add key or last result.  */
-+      if ((cnt & 1) != 0)
-+      sha256_process_bytes (p_bytes, key_len, &ctx);
-+      else
-+      sha256_process_bytes (alt_result, 32, &ctx);
-+
-+      /* Add salt for numbers not divisible by 3.  */
-+      if (cnt % 3 != 0)
-+      sha256_process_bytes (s_bytes, salt_len, &ctx);
-+
-+      /* Add key for numbers not divisible by 7.  */
-+      if (cnt % 7 != 0)
-+      sha256_process_bytes (p_bytes, key_len, &ctx);
-+
-+      /* Add key or last result.  */
-+      if ((cnt & 1) != 0)
-+      sha256_process_bytes (alt_result, 32, &ctx);
-+      else
-+      sha256_process_bytes (p_bytes, key_len, &ctx);
-+
-+      /* Create intermediate result.  */
-+      sha256_finish_ctx (&ctx, alt_result);
-+    }
-+
-+  /* Now we can construct the result string.  It consists of three
-+     parts.  */
-+  cp = stpncpy (buffer, sha256_salt_prefix, MAX (0, buflen));
-+  buflen -= sizeof (sha256_salt_prefix) - 1;
-+
-+  if (rounds_custom)
-+    {
-+      char sbuf[64];
-+      grub_sprintf (sbuf, "%s%llu$", sha256_rounds_prefix,
-+                  (unsigned long long)rounds);
-+      size_t n = strlen (sbuf);
-+      memcpy (cp, sbuf, MIN (MAX (0, buflen), n));
-+      cp += n;
-+      buflen -= n;
-+    }
-+
-+  cp = stpncpy (cp, salt, MIN ((size_t) MAX (0, buflen), salt_len));
-+  buflen -= MIN ((size_t) MAX (0, buflen), salt_len);
-+
-+  if (buflen > 0)
-+    {
-+      *cp++ = '$';
-+      --buflen;
-+    }
-+
-+#define b64_from_24bit(B2, B1, B0, N)                                       \
-+  do {                                                                              \
-+    unsigned int w = ((B2) << 16) | ((B1) << 8) | (B0);                             \
-+    int n = (N);                                                            \
-+    while (n-- > 0 && buflen > 0)                                           \
-+      {                                                                             \
-+      *cp++ = b64t[w & 0x3f];                                               \
-+      --buflen;                                                             \
-+      w >>= 6;                                                              \
-+      }                                                                             \
-+  } while (0)
-+
-+  b64_from_24bit (alt_result[0], alt_result[10], alt_result[20], 4);
-+  b64_from_24bit (alt_result[21], alt_result[1], alt_result[11], 4);
-+  b64_from_24bit (alt_result[12], alt_result[22], alt_result[2], 4);
-+  b64_from_24bit (alt_result[3], alt_result[13], alt_result[23], 4);
-+  b64_from_24bit (alt_result[24], alt_result[4], alt_result[14], 4);
-+  b64_from_24bit (alt_result[15], alt_result[25], alt_result[5], 4);
-+  b64_from_24bit (alt_result[6], alt_result[16], alt_result[26], 4);
-+  b64_from_24bit (alt_result[27], alt_result[7], alt_result[17], 4);
-+  b64_from_24bit (alt_result[18], alt_result[28], alt_result[8], 4);
-+  b64_from_24bit (alt_result[9], alt_result[19], alt_result[29], 4);
-+  b64_from_24bit (0, alt_result[31], alt_result[30], 3);
-+  if (buflen <= 0)
-+    buffer = NULL;
-+  else
-+    *cp = '\0';               /* Terminate the string.  */
-+
-+  /* Clear the buffer for the intermediate result so that people
-+     attaching to processes or reading core dumps cannot get any
-+     information.  We do it in this way to clear correct_words[]
-+     inside the SHA256 implementation as well.  */
-+  sha256_init_ctx (&ctx);
-+  sha256_finish_ctx (&ctx, alt_result);
-+  memset (temp_result, '\0', sizeof (temp_result));
-+  memset (p_bytes, '\0', key_len);
-+  memset (s_bytes, '\0', salt_len);
-+  memset (&ctx, '\0', sizeof (ctx));
-+  memset (&alt_ctx, '\0', sizeof (alt_ctx));
-+  if (copied_key != NULL)
-+    memset (copied_key, '\0', key_len);
-+  if (copied_salt != NULL)
-+    memset (copied_salt, '\0', salt_len);
-+
-+  return buffer;
-+}
-+
-+
-+/* This entry point is equivalent to the `crypt' function in Unix
-+   libcs.  */
-+char *
-+sha256_crypt (const char *key, const char *salt)
-+{
-+  static char buffer[sizeof (sha256_salt_prefix) - 1
-+                   + sizeof (sha256_rounds_prefix) + 9 + 1
-+                   + 256 + 1 + 43 + 1]; /* 256 bytes for salt */
-+  int needed = (sizeof (sha256_salt_prefix) - 1
-+              + sizeof (sha256_rounds_prefix) + 9 + 1
-+              + strlen (salt) + 1 + 43 + 1);
-+
-+  if (sizeof (buffer) < needed)
-+    return NULL;
-+
-+  return sha256_crypt_r (key, salt, buffer, sizeof (buffer));
-+}
-+
-+
-+#ifdef TEST
-+static const struct
-+{
-+  const char *input;
-+  const char result[32];
-+} tests[] =
-+  {
-+    /* Test vectors from FIPS 180-2: appendix B.1.  */
-+    { "abc",
-+      "\xba\x78\x16\xbf\x8f\x01\xcf\xea\x41\x41\x40\xde\x5d\xae\x22\x23"
-+      "\xb0\x03\x61\xa3\x96\x17\x7a\x9c\xb4\x10\xff\x61\xf2\x00\x15\xad" },
-+    /* Test vectors from FIPS 180-2: appendix B.2.  */
-+    { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
-+      "\x24\x8d\x6a\x61\xd2\x06\x38\xb8\xe5\xc0\x26\x93\x0c\x3e\x60\x39"
-+      "\xa3\x3c\xe4\x59\x64\xff\x21\x67\xf6\xec\xed\xd4\x19\xdb\x06\xc1" },
-+    /* Test vectors from the NESSIE project.  */
-+    { "",
-+      "\xe3\xb0\xc4\x42\x98\xfc\x1c\x14\x9a\xfb\xf4\xc8\x99\x6f\xb9\x24"
-+      "\x27\xae\x41\xe4\x64\x9b\x93\x4c\xa4\x95\x99\x1b\x78\x52\xb8\x55" },
-+    { "a",
-+      "\xca\x97\x81\x12\xca\x1b\xbd\xca\xfa\xc2\x31\xb3\x9a\x23\xdc\x4d"
-+      "\xa7\x86\xef\xf8\x14\x7c\x4e\x72\xb9\x80\x77\x85\xaf\xee\x48\xbb" },
-+    { "message digest",
-+      "\xf7\x84\x6f\x55\xcf\x23\xe1\x4e\xeb\xea\xb5\xb4\xe1\x55\x0c\xad"
-+      "\x5b\x50\x9e\x33\x48\xfb\xc4\xef\xa3\xa1\x41\x3d\x39\x3c\xb6\x50" },
-+    { "abcdefghijklmnopqrstuvwxyz",
-+      "\x71\xc4\x80\xdf\x93\xd6\xae\x2f\x1e\xfa\xd1\x44\x7c\x66\xc9\x52"
-+      "\x5e\x31\x62\x18\xcf\x51\xfc\x8d\x9e\xd8\x32\xf2\xda\xf1\x8b\x73" },
-+    { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
-+      "\x24\x8d\x6a\x61\xd2\x06\x38\xb8\xe5\xc0\x26\x93\x0c\x3e\x60\x39"
-+      "\xa3\x3c\xe4\x59\x64\xff\x21\x67\xf6\xec\xed\xd4\x19\xdb\x06\xc1" },
-+    { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
-+      "\xdb\x4b\xfc\xbd\x4d\xa0\xcd\x85\xa6\x0c\x3c\x37\xd3\xfb\xd8\x80"
-+      "\x5c\x77\xf1\x5f\xc6\xb1\xfd\xfe\x61\x4e\xe0\xa7\xc8\xfd\xb4\xc0" },
-+    { "123456789012345678901234567890123456789012345678901234567890"
-+      "12345678901234567890",
-+      "\xf3\x71\xbc\x4a\x31\x1f\x2b\x00\x9e\xef\x95\x2d\xd8\x3c\xa8\x0e"
-+      "\x2b\x60\x02\x6c\x8e\x93\x55\x92\xd0\xf9\xc3\x08\x45\x3c\x81\x3e" }
-+  };
-+#define ntests (sizeof (tests) / sizeof (tests[0]))
-+
-+
-+static const struct
-+{
-+  const char *salt;
-+  const char *input;
-+  const char *expected;
-+} tests2[] =
-+{
-+  { "$5$saltstring", "Hello world!",
-+    "$5$saltstring$5B8vYYiY.CVt1RlTTf8KbXBH3hsxY/GNooZaBBGWEc5" },
-+  { "$5$rounds=10000$saltstringsaltstring", "Hello world!",
-+    "$5$rounds=10000$saltstringsaltst$3xv.VbSHBb41AL9AvLeujZkZRBAwqFMz2."
-+    "opqey6IcA" },
-+  { "$5$rounds=5000$toolongsaltstring", "This is just a test",
-+    "$5$rounds=5000$toolongsaltstrin$Un/5jzAHMgOGZ5.mWJpuVolil07guHPvOW8"
-+    "mGRcvxa5" },
-+  { "$5$rounds=1400$anotherlongsaltstring",
-+    "a very much longer text to encrypt.  This one even stretches over more"
-+    "than one line.",
-+    "$5$rounds=1400$anotherlongsalts$Rx.j8H.h8HjEDGomFU8bDkXm3XIUnzyxf12"
-+    "oP84Bnq1" },
-+  { "$5$rounds=77777$short",
-+    "we have a short salt string but not a short password",
-+    "$5$rounds=77777$short$JiO1O3ZpDAxGJeaDIuqCoEFysAe1mZNJRs3pw0KQRd/" },
-+  { "$5$rounds=123456$asaltof16chars..", "a short string",
-+    "$5$rounds=123456$asaltof16chars..$gP3VQ/6X7UUEW3HkBn2w1/Ptq2jxPyzV/"
-+    "cZKmF/wJvD" },
-+  { "$5$rounds=10$roundstoolow", "the minimum number is still observed",
-+    "$5$rounds=1000$roundstoolow$yfvwcWrQ8l/K0DAWyuPMDNHpIVlTQebY9l/gL97"
-+    "2bIC" },
-+};
-+#define ntests2 (sizeof (tests2) / sizeof (tests2[0]))
-+
-+
-+int
-+sha256_test (void)
-+{
-+  struct sha256_ctx ctx;
-+  char sum[32];
-+  int result = 0;
-+  int cnt, i;
-+
-+  for (cnt = 0; cnt < (int) ntests; ++cnt)
-+    {
-+      sha256_init_ctx (&ctx);
-+      sha256_process_bytes (tests[cnt].input, strlen (tests[cnt].input), &ctx);
-+      sha256_finish_ctx (&ctx, sum);
-+      if (memcmp (tests[cnt].result, sum, 32) != 0)
-+      {
-+        printf ("test %d run %d failed\n", cnt, 1);
-+        result = 1;
-+      }
-+
-+      sha256_init_ctx (&ctx);
-+      for (i = 0; tests[cnt].input[i] != '\0'; ++i)
-+      sha256_process_bytes (&tests[cnt].input[i], 1, &ctx);
-+      sha256_finish_ctx (&ctx, sum);
-+      if (memcmp (tests[cnt].result, sum, 32) != 0)
-+      {
-+        printf ("test %d run %d failed\n", cnt, 2);
-+        result = 1;
-+      }
-+    }
-+
-+  /* Test vector from FIPS 180-2: appendix B.3.  */
-+  char buf[1000];
-+  memset (buf, 'a', sizeof (buf));
-+  sha256_init_ctx (&ctx);
-+  for (i = 0; i < 1000; ++i)
-+    sha256_process_bytes (buf, sizeof (buf), &ctx);
-+  sha256_finish_ctx (&ctx, sum);
-+  static const char expected[32] =
-+    "\xcd\xc7\x6e\x5c\x99\x14\xfb\x92\x81\xa1\xc7\xe2\x84\xd7\x3e\x67"
-+    "\xf1\x80\x9a\x48\xa4\x97\x20\x0e\x04\x6d\x39\xcc\xc7\x11\x2c\xd0";
-+  if (memcmp (expected, sum, 32) != 0)
-+    {
-+      printf ("test %d failed\n", cnt);
-+      result = 1;
-+    }
-+
-+  for (cnt = 0; cnt < ntests2; ++cnt)
-+    {
-+      char *cp = sha256_crypt (tests2[cnt].input, tests2[cnt].salt);
-+
-+      if (strcmp (cp, tests2[cnt].expected) != 0)
-+      {
-+        printf ("test %d: expected \"%s\", got \"%s\"\n",
-+                cnt, tests2[cnt].expected, cp);
-+        result = 1;
-+      }
-+    }
-+
-+  if (result == 0)
-+    printf ("all tests OK\n");
-+
-+  return result;
-+}
-+#endif
-diff --git a/stage2/sha512crypt.c b/stage2/sha512crypt.c
-new file mode 100644
-index 0000000..ff6cd26
---- /dev/null
-+++ b/stage2/sha512crypt.c
-@@ -0,0 +1,795 @@
-+/* SHA512-based Unix crypt implementation.
-+   Released into the Public Domain by Ulrich Drepper <drepper@redhat.com>.
-+   Adapted for grub by Miloslav Trmac <mitr@redhat.com>. */
-+
-+#include <stdbool.h>
-+#include <stddef.h>
-+
-+#include <shared.h>
-+
-+typedef unsigned long long uint64_t;
-+typedef size_t uintptr_t;
-+#define alloca(SIZE) (__builtin_alloca (SIZE))
-+#define UINT64_C(X) X ## ULL
-+#define MIN(a, b) ((a) < (b) ? (a) : (b))
-+#define MAX(a, b) ((a) > (b) ? (a) : (b))
-+
-+/* Structure to save state of computation between the single steps.  */
-+struct sha512_ctx
-+{
-+  uint64_t H[8];
-+
-+  uint64_t total[2];
-+  uint64_t buflen;
-+  char buffer[256];   /* NB: always correctly aligned for uint64_t.  */
-+};
-+
-+
-+#if 1 /* __BYTE_ORDER == __LITTLE_ENDIAN */
-+# define SWAP(n) \
-+  (((n) << 56)                                        \
-+   | (((n) & 0xff00) << 40)                   \
-+   | (((n) & 0xff0000) << 24)                 \
-+   | (((n) & 0xff000000) << 8)                        \
-+   | (((n) >> 8) & 0xff000000)                        \
-+   | (((n) >> 24) & 0xff0000)                 \
-+   | (((n) >> 40) & 0xff00)                   \
-+   | ((n) >> 56))
-+#else
-+# define SWAP(n) (n)
-+#endif
-+
-+
-+/* This array contains the bytes used to pad the buffer to the next
-+   64-byte boundary.  (FIPS 180-2:5.1.2)  */
-+static const unsigned char fillbuf[128] = { 0x80, 0 /* , 0, 0, ...  */ };
-+
-+
-+/* Constants for SHA512 from FIPS 180-2:4.2.3.  */
-+static const uint64_t K[80] =
-+  {
-+    UINT64_C (0x428a2f98d728ae22), UINT64_C (0x7137449123ef65cd),
-+    UINT64_C (0xb5c0fbcfec4d3b2f), UINT64_C (0xe9b5dba58189dbbc),
-+    UINT64_C (0x3956c25bf348b538), UINT64_C (0x59f111f1b605d019),
-+    UINT64_C (0x923f82a4af194f9b), UINT64_C (0xab1c5ed5da6d8118),
-+    UINT64_C (0xd807aa98a3030242), UINT64_C (0x12835b0145706fbe),
-+    UINT64_C (0x243185be4ee4b28c), UINT64_C (0x550c7dc3d5ffb4e2),
-+    UINT64_C (0x72be5d74f27b896f), UINT64_C (0x80deb1fe3b1696b1),
-+    UINT64_C (0x9bdc06a725c71235), UINT64_C (0xc19bf174cf692694),
-+    UINT64_C (0xe49b69c19ef14ad2), UINT64_C (0xefbe4786384f25e3),
-+    UINT64_C (0x0fc19dc68b8cd5b5), UINT64_C (0x240ca1cc77ac9c65),
-+    UINT64_C (0x2de92c6f592b0275), UINT64_C (0x4a7484aa6ea6e483),
-+    UINT64_C (0x5cb0a9dcbd41fbd4), UINT64_C (0x76f988da831153b5),
-+    UINT64_C (0x983e5152ee66dfab), UINT64_C (0xa831c66d2db43210),
-+    UINT64_C (0xb00327c898fb213f), UINT64_C (0xbf597fc7beef0ee4),
-+    UINT64_C (0xc6e00bf33da88fc2), UINT64_C (0xd5a79147930aa725),
-+    UINT64_C (0x06ca6351e003826f), UINT64_C (0x142929670a0e6e70),
-+    UINT64_C (0x27b70a8546d22ffc), UINT64_C (0x2e1b21385c26c926),
-+    UINT64_C (0x4d2c6dfc5ac42aed), UINT64_C (0x53380d139d95b3df),
-+    UINT64_C (0x650a73548baf63de), UINT64_C (0x766a0abb3c77b2a8),
-+    UINT64_C (0x81c2c92e47edaee6), UINT64_C (0x92722c851482353b),
-+    UINT64_C (0xa2bfe8a14cf10364), UINT64_C (0xa81a664bbc423001),
-+    UINT64_C (0xc24b8b70d0f89791), UINT64_C (0xc76c51a30654be30),
-+    UINT64_C (0xd192e819d6ef5218), UINT64_C (0xd69906245565a910),
-+    UINT64_C (0xf40e35855771202a), UINT64_C (0x106aa07032bbd1b8),
-+    UINT64_C (0x19a4c116b8d2d0c8), UINT64_C (0x1e376c085141ab53),
-+    UINT64_C (0x2748774cdf8eeb99), UINT64_C (0x34b0bcb5e19b48a8),
-+    UINT64_C (0x391c0cb3c5c95a63), UINT64_C (0x4ed8aa4ae3418acb),
-+    UINT64_C (0x5b9cca4f7763e373), UINT64_C (0x682e6ff3d6b2b8a3),
-+    UINT64_C (0x748f82ee5defb2fc), UINT64_C (0x78a5636f43172f60),
-+    UINT64_C (0x84c87814a1f0ab72), UINT64_C (0x8cc702081a6439ec),
-+    UINT64_C (0x90befffa23631e28), UINT64_C (0xa4506cebde82bde9),
-+    UINT64_C (0xbef9a3f7b2c67915), UINT64_C (0xc67178f2e372532b),
-+    UINT64_C (0xca273eceea26619c), UINT64_C (0xd186b8c721c0c207),
-+    UINT64_C (0xeada7dd6cde0eb1e), UINT64_C (0xf57d4f7fee6ed178),
-+    UINT64_C (0x06f067aa72176fba), UINT64_C (0x0a637dc5a2c898a6),
-+    UINT64_C (0x113f9804bef90dae), UINT64_C (0x1b710b35131c471b),
-+    UINT64_C (0x28db77f523047d84), UINT64_C (0x32caab7b40c72493),
-+    UINT64_C (0x3c9ebe0a15c9bebc), UINT64_C (0x431d67c49c100d4c),
-+    UINT64_C (0x4cc5d4becb3e42b6), UINT64_C (0x597f299cfc657e2a),
-+    UINT64_C (0x5fcb6fab3ad6faec), UINT64_C (0x6c44198c4a475817)
-+  };
-+
-+
-+/* Process LEN bytes of BUFFER, accumulating context into CTX.
-+   It is assumed that LEN % 128 == 0.  */
-+static void
-+sha512_process_block (const void *buffer, size_t len, struct sha512_ctx *ctx)
-+{
-+  const uint64_t *words = buffer;
-+  size_t nwords = len / sizeof (uint64_t);
-+  uint64_t a = ctx->H[0];
-+  uint64_t b = ctx->H[1];
-+  uint64_t c = ctx->H[2];
-+  uint64_t d = ctx->H[3];
-+  uint64_t e = ctx->H[4];
-+  uint64_t f = ctx->H[5];
-+  uint64_t g = ctx->H[6];
-+  uint64_t h = ctx->H[7];
-+
-+  /* First increment the byte count.  FIPS 180-2 specifies the possible
-+     length of the file up to 2^128 bits.  Here we only compute the
-+     number of bytes.  Do a double word increment.  */
-+  ctx->total[0] += len;
-+  if (ctx->total[0] < len)
-+    ++ctx->total[1];
-+
-+  /* Process all bytes in the buffer with 128 bytes in each round of
-+     the loop.  */
-+  while (nwords > 0)
-+    {
-+      uint64_t W[80];
-+      uint64_t a_save = a;
-+      uint64_t b_save = b;
-+      uint64_t c_save = c;
-+      uint64_t d_save = d;
-+      uint64_t e_save = e;
-+      uint64_t f_save = f;
-+      uint64_t g_save = g;
-+      uint64_t h_save = h;
-+      unsigned int t;
-+
-+      /* Operators defined in FIPS 180-2:4.1.2.  */
-+#define Ch(x, y, z) ((x & y) ^ (~x & z))
-+#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
-+#define S0(x) (CYCLIC (x, 28) ^ CYCLIC (x, 34) ^ CYCLIC (x, 39))
-+#define S1(x) (CYCLIC (x, 14) ^ CYCLIC (x, 18) ^ CYCLIC (x, 41))
-+#define R0(x) (CYCLIC (x, 1) ^ CYCLIC (x, 8) ^ (x >> 7))
-+#define R1(x) (CYCLIC (x, 19) ^ CYCLIC (x, 61) ^ (x >> 6))
-+
-+      /* It is unfortunate that C does not provide an operator for
-+       cyclic rotation.  Hope the C compiler is smart enough.  */
-+#define CYCLIC(w, s) ((w >> s) | (w << (64 - s)))
-+
-+      /* Compute the message schedule according to FIPS 180-2:6.3.2 step 2.  */
-+      for (t = 0; t < 16; ++t)
-+      {
-+        W[t] = SWAP (*words);
-+        ++words;
-+      }
-+      for (t = 16; t < 80; ++t)
-+      W[t] = R1 (W[t - 2]) + W[t - 7] + R0 (W[t - 15]) + W[t - 16];
-+
-+      /* The actual computation according to FIPS 180-2:6.3.2 step 3.  */
-+      for (t = 0; t < 80; ++t)
-+      {
-+        uint64_t T1 = h + S1 (e) + Ch (e, f, g) + K[t] + W[t];
-+        uint64_t T2 = S0 (a) + Maj (a, b, c);
-+        h = g;
-+        g = f;
-+        f = e;
-+        e = d + T1;
-+        d = c;
-+        c = b;
-+        b = a;
-+        a = T1 + T2;
-+      }
-+
-+      /* Add the starting values of the context according to FIPS 180-2:6.3.2
-+       step 4.  */
-+      a += a_save;
-+      b += b_save;
-+      c += c_save;
-+      d += d_save;
-+      e += e_save;
-+      f += f_save;
-+      g += g_save;
-+      h += h_save;
-+
-+      /* Prepare for the next round.  */
-+      nwords -= 16;
-+    }
-+
-+  /* Put checksum in context given as argument.  */
-+  ctx->H[0] = a;
-+  ctx->H[1] = b;
-+  ctx->H[2] = c;
-+  ctx->H[3] = d;
-+  ctx->H[4] = e;
-+  ctx->H[5] = f;
-+  ctx->H[6] = g;
-+  ctx->H[7] = h;
-+}
-+
-+
-+/* Initialize structure containing state of computation.
-+   (FIPS 180-2:5.3.3)  */
-+static void
-+sha512_init_ctx (struct sha512_ctx *ctx)
-+{
-+  ctx->H[0] = UINT64_C (0x6a09e667f3bcc908);
-+  ctx->H[1] = UINT64_C (0xbb67ae8584caa73b);
-+  ctx->H[2] = UINT64_C (0x3c6ef372fe94f82b);
-+  ctx->H[3] = UINT64_C (0xa54ff53a5f1d36f1);
-+  ctx->H[4] = UINT64_C (0x510e527fade682d1);
-+  ctx->H[5] = UINT64_C (0x9b05688c2b3e6c1f);
-+  ctx->H[6] = UINT64_C (0x1f83d9abfb41bd6b);
-+  ctx->H[7] = UINT64_C (0x5be0cd19137e2179);
-+
-+  ctx->total[0] = ctx->total[1] = 0;
-+  ctx->buflen = 0;
-+}
-+
-+
-+/* Process the remaining bytes in the internal buffer and the usual
-+   prolog according to the standard and write the result to RESBUF.
-+
-+   IMPORTANT: On some systems it is required that RESBUF is correctly
-+   aligned for a 32 bits value.  */
-+static void *
-+sha512_finish_ctx (struct sha512_ctx *ctx, void *resbuf)
-+{
-+  /* Take yet unprocessed bytes into account.  */
-+  uint64_t bytes = ctx->buflen;
-+  size_t pad;
-+  unsigned int i;
-+
-+  /* Now count remaining bytes.  */
-+  ctx->total[0] += bytes;
-+  if (ctx->total[0] < bytes)
-+    ++ctx->total[1];
-+
-+  pad = bytes >= 112 ? 128 + 112 - bytes : 112 - bytes;
-+  memcpy (&ctx->buffer[bytes], fillbuf, pad);
-+
-+  /* Put the 128-bit file length in *bits* at the end of the buffer.  */
-+  *(uint64_t *) &ctx->buffer[bytes + pad + 8] = SWAP (ctx->total[0] << 3);
-+  *(uint64_t *) &ctx->buffer[bytes + pad] = SWAP ((ctx->total[1] << 3) |
-+                                                (ctx->total[0] >> 61));
-+
-+  /* Process last bytes.  */
-+  sha512_process_block (ctx->buffer, bytes + pad + 16, ctx);
-+
-+  /* Put result from CTX in first 64 bytes following RESBUF.  */
-+  for (i = 0; i < 8; ++i)
-+    ((uint64_t *) resbuf)[i] = SWAP (ctx->H[i]);
-+
-+  return resbuf;
-+}
-+
-+
-+static void
-+sha512_process_bytes (const void *buffer, size_t len, struct sha512_ctx *ctx)
-+{
-+  /* When we already have some bits in our internal buffer concatenate
-+     both inputs first.  */
-+  if (ctx->buflen != 0)
-+    {
-+      size_t left_over = ctx->buflen;
-+      size_t add = 256 - left_over > len ? len : 256 - left_over;
-+
-+      memcpy (&ctx->buffer[left_over], buffer, add);
-+      ctx->buflen += add;
-+
-+      if (ctx->buflen > 128)
-+      {
-+        sha512_process_block (ctx->buffer, ctx->buflen & ~127, ctx);
-+
-+        ctx->buflen &= 127;
-+        /* The regions in the following copy operation cannot overlap.  */
-+        memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~127],
-+                ctx->buflen);
-+      }
-+
-+      buffer = (const char *) buffer + add;
-+      len -= add;
-+    }
-+
-+  /* Process available complete blocks.  */
-+  if (len >= 128)
-+    {
-+/* To check alignment gcc has an appropriate operator.  Other
-+   compilers don't.  */
-+# if __GNUC__ >= 2
-+#  define UNALIGNED_P(p) (((uintptr_t) p) % __alignof__ (uint64_t) != 0)
-+# else
-+#  define UNALIGNED_P(p) (((uintptr_t) p) % sizeof (uint64_t) != 0)
-+# endif
-+      if (UNALIGNED_P (buffer))
-+      while (len > 128)
-+        {
-+          sha512_process_block (memcpy (ctx->buffer, buffer, 128), 128,
-+                                  ctx);
-+          buffer = (const char *) buffer + 128;
-+          len -= 128;
-+        }
-+      else
-+      {
-+        sha512_process_block (buffer, len & ~127, ctx);
-+        buffer = (const char *) buffer + (len & ~127);
-+        len &= 127;
-+      }
-+    }
-+
-+  /* Move remaining bytes into internal buffer.  */
-+  if (len > 0)
-+    {
-+      size_t left_over = ctx->buflen;
-+
-+      memcpy (&ctx->buffer[left_over], buffer, len);
-+      left_over += len;
-+      if (left_over >= 128)
-+      {
-+        sha512_process_block (ctx->buffer, 128, ctx);
-+        left_over -= 128;
-+        memcpy (ctx->buffer, &ctx->buffer[128], left_over);
-+      }
-+      ctx->buflen = left_over;
-+    }
-+}
-+
-+
-+/* Define our magic string to mark salt for SHA512 "encryption"
-+   replacement.  */
-+static const char sha512_salt_prefix[] = "$6$";
-+
-+/* Prefix for optional rounds specification.  */
-+static const char sha512_rounds_prefix[] = "rounds=";
-+
-+/* Maximum salt string length.  */
-+#define SALT_LEN_MAX 16
-+/* Default number of rounds if not explicitly specified.  */
-+#define ROUNDS_DEFAULT 5000
-+/* Minimum number of rounds.  */
-+#define ROUNDS_MIN 1000
-+/* Maximum number of rounds.  */
-+#define ROUNDS_MAX 999999999
-+
-+/* Table with characters for base64 transformation.  */
-+static const char b64t[64] =
-+"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-+
-+
-+static char *
-+sha512_crypt_r (const char *key, const char *salt, char *buffer, int buflen)
-+{
-+  unsigned char alt_result[64]
-+    __attribute__ ((__aligned__ (__alignof__ (uint64_t))));
-+  unsigned char temp_result[64]
-+    __attribute__ ((__aligned__ (__alignof__ (uint64_t))));
-+  struct sha512_ctx ctx;
-+  struct sha512_ctx alt_ctx;
-+  size_t salt_len;
-+  size_t key_len;
-+  size_t cnt;
-+  char *cp;
-+  char *copied_key = NULL;
-+  char *copied_salt = NULL;
-+  char *p_bytes;
-+  char *s_bytes;
-+  /* Default number of rounds.  */
-+  size_t rounds = ROUNDS_DEFAULT;
-+  bool rounds_custom = false;
-+
-+  /* Find beginning of salt string.  The prefix should normally always
-+     be present.  Just in case it is not.  */
-+  if (grub_memcmp (sha512_salt_prefix, salt,
-+                 sizeof (sha512_salt_prefix) - 1) == 0)
-+    /* Skip salt prefix.  */
-+    salt += sizeof (sha512_salt_prefix) - 1;
-+
-+  if (grub_memcmp (salt, sha512_rounds_prefix,
-+                 sizeof (sha512_rounds_prefix) - 1) == 0)
-+    {
-+      const char *num = salt + sizeof (sha512_rounds_prefix) - 1;
-+      char *endp = (char *)num;
-+      int srounds = 0;
-+      if (*endp == '0' && tolower (endp[1]) == 'x')
-+      /* This would be interpreted as hexadecimal by safe_parse_maxint(). */
-+      endp++;
-+      else
-+      /* On error, endp and srounds is not changed. */
-+      safe_parse_maxint(&endp, &srounds);
-+      if (*endp == '$')
-+      {
-+        salt = endp + 1;
-+        rounds = MAX (ROUNDS_MIN, MIN (srounds, ROUNDS_MAX));
-+        rounds_custom = true;
-+      }
-+    }
-+
-+  salt_len = MIN (strcspn (salt, "$"), SALT_LEN_MAX);
-+  key_len = strlen (key);
-+
-+  if ((key - (char *) 0) % __alignof__ (uint64_t) != 0)
-+    {
-+      char *tmp = (char *) alloca (key_len + __alignof__ (uint64_t));
-+      key = copied_key =
-+      memcpy (tmp + __alignof__ (uint64_t)
-+              - (tmp - (char *) 0) % __alignof__ (uint64_t),
-+              key, key_len);
-+    }
-+
-+  if ((salt - (char *) 0) % __alignof__ (uint64_t) != 0)
-+    {
-+      char *tmp = (char *) alloca (salt_len + __alignof__ (uint64_t));
-+      salt = copied_salt =
-+      memcpy (tmp + __alignof__ (uint64_t)
-+              - (tmp - (char *) 0) % __alignof__ (uint64_t),
-+              salt, salt_len);
-+    }
-+
-+  /* Prepare for the real work.  */
-+  sha512_init_ctx (&ctx);
-+
-+  /* Add the key string.  */
-+  sha512_process_bytes (key, key_len, &ctx);
-+
-+  /* The last part is the salt string.  This must be at most 16
-+     characters and it ends at the first `$' character (for
-+     compatibility with existing implementations).  */
-+  sha512_process_bytes (salt, salt_len, &ctx);
-+
-+
-+  /* Compute alternate SHA512 sum with input KEY, SALT, and KEY.  The
-+     final result will be added to the first context.  */
-+  sha512_init_ctx (&alt_ctx);
-+
-+  /* Add key.  */
-+  sha512_process_bytes (key, key_len, &alt_ctx);
-+
-+  /* Add salt.  */
-+  sha512_process_bytes (salt, salt_len, &alt_ctx);
-+
-+  /* Add key again.  */
-+  sha512_process_bytes (key, key_len, &alt_ctx);
-+
-+  /* Now get result of this (64 bytes) and add it to the other
-+     context.  */
-+  sha512_finish_ctx (&alt_ctx, alt_result);
-+
-+  /* Add for any character in the key one byte of the alternate sum.  */
-+  for (cnt = key_len; cnt > 64; cnt -= 64)
-+    sha512_process_bytes (alt_result, 64, &ctx);
-+  sha512_process_bytes (alt_result, cnt, &ctx);
-+
-+  /* Take the binary representation of the length of the key and for every
-+     1 add the alternate sum, for every 0 the key.  */
-+  for (cnt = key_len; cnt > 0; cnt >>= 1)
-+    if ((cnt & 1) != 0)
-+      sha512_process_bytes (alt_result, 64, &ctx);
-+    else
-+      sha512_process_bytes (key, key_len, &ctx);
-+
-+  /* Create intermediate result.  */
-+  sha512_finish_ctx (&ctx, alt_result);
-+
-+  /* Start computation of P byte sequence.  */
-+  sha512_init_ctx (&alt_ctx);
-+
-+  /* For every character in the password add the entire password.  */
-+  for (cnt = 0; cnt < key_len; ++cnt)
-+    sha512_process_bytes (key, key_len, &alt_ctx);
-+
-+  /* Finish the digest.  */
-+  sha512_finish_ctx (&alt_ctx, temp_result);
-+
-+  /* Create byte sequence P.  */
-+  cp = p_bytes = alloca (key_len);
-+  for (cnt = key_len; cnt >= 64; cnt -= 64)
-+    {
-+      memcpy (cp, temp_result, 64);
-+      cp += 64;
-+    }
-+  memcpy (cp, temp_result, cnt);
-+
-+  /* Start computation of S byte sequence.  */
-+  sha512_init_ctx (&alt_ctx);
-+
-+  /* For every character in the password add the entire password.  */
-+  for (cnt = 0; cnt < 16 + alt_result[0]; ++cnt)
-+    sha512_process_bytes (salt, salt_len, &alt_ctx);
-+
-+  /* Finish the digest.  */
-+  sha512_finish_ctx (&alt_ctx, temp_result);
-+
-+  /* Create byte sequence S.  */
-+  cp = s_bytes = alloca (salt_len);
-+  for (cnt = salt_len; cnt >= 64; cnt -= 64)
-+    {
-+      memcpy (cp, temp_result, 64);
-+      cp += 64;
-+    }
-+  memcpy (cp, temp_result, cnt);
-+
-+  /* Repeatedly run the collected hash value through SHA512 to burn
-+     CPU cycles.  */
-+  for (cnt = 0; cnt < rounds; ++cnt)
-+    {
-+      /* New context.  */
-+      sha512_init_ctx (&ctx);
-+
-+      /* Add key or last result.  */
-+      if ((cnt & 1) != 0)
-+      sha512_process_bytes (p_bytes, key_len, &ctx);
-+      else
-+      sha512_process_bytes (alt_result, 64, &ctx);
-+
-+      /* Add salt for numbers not divisible by 3.  */
-+      if (cnt % 3 != 0)
-+      sha512_process_bytes (s_bytes, salt_len, &ctx);
-+
-+      /* Add key for numbers not divisible by 7.  */
-+      if (cnt % 7 != 0)
-+      sha512_process_bytes (p_bytes, key_len, &ctx);
-+
-+      /* Add key or last result.  */
-+      if ((cnt & 1) != 0)
-+      sha512_process_bytes (alt_result, 64, &ctx);
-+      else
-+      sha512_process_bytes (p_bytes, key_len, &ctx);
-+
-+      /* Create intermediate result.  */
-+      sha512_finish_ctx (&ctx, alt_result);
-+    }
-+
-+  /* Now we can construct the result string.  It consists of three
-+     parts.  */
-+  cp = stpncpy (buffer, sha512_salt_prefix, MAX (0, buflen));
-+  buflen -= sizeof (sha512_salt_prefix) - 1;
-+
-+  if (rounds_custom)
-+    {
-+      char sbuf[64];
-+      grub_sprintf (sbuf, "%s%llu$", sha512_rounds_prefix,
-+                  (unsigned long long)rounds);
-+      size_t n = strlen (sbuf);
-+      memcpy (cp, sbuf, MIN (MAX (0, buflen), n));
-+      cp += n;
-+      buflen -= n;
-+    }
-+
-+  cp = stpncpy (cp, salt, MIN ((size_t) MAX (0, buflen), salt_len));
-+  buflen -= MIN ((size_t) MAX (0, buflen), salt_len);
-+
-+  if (buflen > 0)
-+    {
-+      *cp++ = '$';
-+      --buflen;
-+    }
-+
-+#define b64_from_24bit(B2, B1, B0, N)                                       \
-+  do {                                                                              \
-+    unsigned int w = ((B2) << 16) | ((B1) << 8) | (B0);                             \
-+    int n = (N);                                                            \
-+    while (n-- > 0 && buflen > 0)                                           \
-+      {                                                                             \
-+      *cp++ = b64t[w & 0x3f];                                               \
-+      --buflen;                                                             \
-+      w >>= 6;                                                              \
-+      }                                                                             \
-+  } while (0)
-+
-+  b64_from_24bit (alt_result[0], alt_result[21], alt_result[42], 4);
-+  b64_from_24bit (alt_result[22], alt_result[43], alt_result[1], 4);
-+  b64_from_24bit (alt_result[44], alt_result[2], alt_result[23], 4);
-+  b64_from_24bit (alt_result[3], alt_result[24], alt_result[45], 4);
-+  b64_from_24bit (alt_result[25], alt_result[46], alt_result[4], 4);
-+  b64_from_24bit (alt_result[47], alt_result[5], alt_result[26], 4);
-+  b64_from_24bit (alt_result[6], alt_result[27], alt_result[48], 4);
-+  b64_from_24bit (alt_result[28], alt_result[49], alt_result[7], 4);
-+  b64_from_24bit (alt_result[50], alt_result[8], alt_result[29], 4);
-+  b64_from_24bit (alt_result[9], alt_result[30], alt_result[51], 4);
-+  b64_from_24bit (alt_result[31], alt_result[52], alt_result[10], 4);
-+  b64_from_24bit (alt_result[53], alt_result[11], alt_result[32], 4);
-+  b64_from_24bit (alt_result[12], alt_result[33], alt_result[54], 4);
-+  b64_from_24bit (alt_result[34], alt_result[55], alt_result[13], 4);
-+  b64_from_24bit (alt_result[56], alt_result[14], alt_result[35], 4);
-+  b64_from_24bit (alt_result[15], alt_result[36], alt_result[57], 4);
-+  b64_from_24bit (alt_result[37], alt_result[58], alt_result[16], 4);
-+  b64_from_24bit (alt_result[59], alt_result[17], alt_result[38], 4);
-+  b64_from_24bit (alt_result[18], alt_result[39], alt_result[60], 4);
-+  b64_from_24bit (alt_result[40], alt_result[61], alt_result[19], 4);
-+  b64_from_24bit (alt_result[62], alt_result[20], alt_result[41], 4);
-+  b64_from_24bit (0, 0, alt_result[63], 2);
-+
-+  if (buflen <= 0)
-+    buffer = NULL;
-+  else
-+    *cp = '\0';               /* Terminate the string.  */
-+
-+  /* Clear the buffer for the intermediate result so that people
-+     attaching to processes or reading core dumps cannot get any
-+     information.  We do it in this way to clear correct_words[]
-+     inside the SHA512 implementation as well.  */
-+  sha512_init_ctx (&ctx);
-+  sha512_finish_ctx (&ctx, alt_result);
-+  memset (temp_result, '\0', sizeof (temp_result));
-+  memset (p_bytes, '\0', key_len);
-+  memset (s_bytes, '\0', salt_len);
-+  memset (&ctx, '\0', sizeof (ctx));
-+  memset (&alt_ctx, '\0', sizeof (alt_ctx));
-+  if (copied_key != NULL)
-+    memset (copied_key, '\0', key_len);
-+  if (copied_salt != NULL)
-+    memset (copied_salt, '\0', salt_len);
-+
-+  return buffer;
-+}
-+
-+
-+/* This entry point is equivalent to the `crypt' function in Unix
-+   libcs.  */
-+char *
-+sha512_crypt (const char *key, const char *salt)
-+{
-+  /* We don't want to have an arbitrary limit in the size of the
-+     password.  We can compute an upper bound for the size of the
-+     result in advance and so we can prepare the buffer we pass to
-+     `sha512_crypt_r'.  */
-+  static char buffer[sizeof (sha512_salt_prefix) - 1
-+                   + sizeof (sha512_rounds_prefix) + 9 + 1
-+                   + 256 + 1 + 86 + 1]; /* 256 bytes for salt */
-+  int needed = (sizeof (sha512_salt_prefix) - 1
-+              + sizeof (sha512_rounds_prefix) + 9 + 1
-+              + strlen (salt) + 1 + 86 + 1);
-+
-+  if (sizeof (buffer) < needed)
-+    return NULL;
-+
-+  return sha512_crypt_r (key, salt, buffer, sizeof (buffer));
-+}
-+
-+
-+#ifdef TEST
-+static const struct
-+{
-+  const char *input;
-+  const char result[64];
-+} tests[] =
-+  {
-+    /* Test vectors from FIPS 180-2: appendix C.1.  */
-+    { "abc",
-+      "\xdd\xaf\x35\xa1\x93\x61\x7a\xba\xcc\x41\x73\x49\xae\x20\x41\x31"
-+      "\x12\xe6\xfa\x4e\x89\xa9\x7e\xa2\x0a\x9e\xee\xe6\x4b\x55\xd3\x9a"
-+      "\x21\x92\x99\x2a\x27\x4f\xc1\xa8\x36\xba\x3c\x23\xa3\xfe\xeb\xbd"
-+      "\x45\x4d\x44\x23\x64\x3c\xe8\x0e\x2a\x9a\xc9\x4f\xa5\x4c\xa4\x9f" },
-+    /* Test vectors from FIPS 180-2: appendix C.2.  */
-+    { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"
-+      "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
-+      "\x8e\x95\x9b\x75\xda\xe3\x13\xda\x8c\xf4\xf7\x28\x14\xfc\x14\x3f"
-+      "\x8f\x77\x79\xc6\xeb\x9f\x7f\xa1\x72\x99\xae\xad\xb6\x88\x90\x18"
-+      "\x50\x1d\x28\x9e\x49\x00\xf7\xe4\x33\x1b\x99\xde\xc4\xb5\x43\x3a"
-+      "\xc7\xd3\x29\xee\xb6\xdd\x26\x54\x5e\x96\xe5\x5b\x87\x4b\xe9\x09" },
-+    /* Test vectors from the NESSIE project.  */
-+    { "",
-+      "\xcf\x83\xe1\x35\x7e\xef\xb8\xbd\xf1\x54\x28\x50\xd6\x6d\x80\x07"
-+      "\xd6\x20\xe4\x05\x0b\x57\x15\xdc\x83\xf4\xa9\x21\xd3\x6c\xe9\xce"
-+      "\x47\xd0\xd1\x3c\x5d\x85\xf2\xb0\xff\x83\x18\xd2\x87\x7e\xec\x2f"
-+      "\x63\xb9\x31\xbd\x47\x41\x7a\x81\xa5\x38\x32\x7a\xf9\x27\xda\x3e" },
-+    { "a",
-+      "\x1f\x40\xfc\x92\xda\x24\x16\x94\x75\x09\x79\xee\x6c\xf5\x82\xf2"
-+      "\xd5\xd7\xd2\x8e\x18\x33\x5d\xe0\x5a\xbc\x54\xd0\x56\x0e\x0f\x53"
-+      "\x02\x86\x0c\x65\x2b\xf0\x8d\x56\x02\x52\xaa\x5e\x74\x21\x05\x46"
-+      "\xf3\x69\xfb\xbb\xce\x8c\x12\xcf\xc7\x95\x7b\x26\x52\xfe\x9a\x75" },
-+    { "message digest",
-+      "\x10\x7d\xbf\x38\x9d\x9e\x9f\x71\xa3\xa9\x5f\x6c\x05\x5b\x92\x51"
-+      "\xbc\x52\x68\xc2\xbe\x16\xd6\xc1\x34\x92\xea\x45\xb0\x19\x9f\x33"
-+      "\x09\xe1\x64\x55\xab\x1e\x96\x11\x8e\x8a\x90\x5d\x55\x97\xb7\x20"
-+      "\x38\xdd\xb3\x72\xa8\x98\x26\x04\x6d\xe6\x66\x87\xbb\x42\x0e\x7c" },
-+    { "abcdefghijklmnopqrstuvwxyz",
-+      "\x4d\xbf\xf8\x6c\xc2\xca\x1b\xae\x1e\x16\x46\x8a\x05\xcb\x98\x81"
-+      "\xc9\x7f\x17\x53\xbc\xe3\x61\x90\x34\x89\x8f\xaa\x1a\xab\xe4\x29"
-+      "\x95\x5a\x1b\xf8\xec\x48\x3d\x74\x21\xfe\x3c\x16\x46\x61\x3a\x59"
-+      "\xed\x54\x41\xfb\x0f\x32\x13\x89\xf7\x7f\x48\xa8\x79\xc7\xb1\xf1" },
-+    { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
-+      "\x20\x4a\x8f\xc6\xdd\xa8\x2f\x0a\x0c\xed\x7b\xeb\x8e\x08\xa4\x16"
-+      "\x57\xc1\x6e\xf4\x68\xb2\x28\xa8\x27\x9b\xe3\x31\xa7\x03\xc3\x35"
-+      "\x96\xfd\x15\xc1\x3b\x1b\x07\xf9\xaa\x1d\x3b\xea\x57\x78\x9c\xa0"
-+      "\x31\xad\x85\xc7\xa7\x1d\xd7\x03\x54\xec\x63\x12\x38\xca\x34\x45" },
-+    { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
-+      "\x1e\x07\xbe\x23\xc2\x6a\x86\xea\x37\xea\x81\x0c\x8e\xc7\x80\x93"
-+      "\x52\x51\x5a\x97\x0e\x92\x53\xc2\x6f\x53\x6c\xfc\x7a\x99\x96\xc4"
-+      "\x5c\x83\x70\x58\x3e\x0a\x78\xfa\x4a\x90\x04\x1d\x71\xa4\xce\xab"
-+      "\x74\x23\xf1\x9c\x71\xb9\xd5\xa3\xe0\x12\x49\xf0\xbe\xbd\x58\x94" },
-+    { "123456789012345678901234567890123456789012345678901234567890"
-+      "12345678901234567890",
-+      "\x72\xec\x1e\xf1\x12\x4a\x45\xb0\x47\xe8\xb7\xc7\x5a\x93\x21\x95"
-+      "\x13\x5b\xb6\x1d\xe2\x4e\xc0\xd1\x91\x40\x42\x24\x6e\x0a\xec\x3a"
-+      "\x23\x54\xe0\x93\xd7\x6f\x30\x48\xb4\x56\x76\x43\x46\x90\x0c\xb1"
-+      "\x30\xd2\xa4\xfd\x5d\xd1\x6a\xbb\x5e\x30\xbc\xb8\x50\xde\xe8\x43" }
-+  };
-+#define ntests (sizeof (tests) / sizeof (tests[0]))
-+
-+
-+static const struct
-+{
-+  const char *salt;
-+  const char *input;
-+  const char *expected;
-+} tests2[] =
-+{
-+  { "$6$saltstring", "Hello world!",
-+    "$6$saltstring$svn8UoSVapNtMuq1ukKS4tPQd8iKwSMHWjl/O817G3uBnIFNjnQJu"
-+    "esI68u4OTLiBFdcbYEdFCoEOfaS35inz1" },
-+  { "$6$rounds=10000$saltstringsaltstring", "Hello world!",
-+    "$6$rounds=10000$saltstringsaltst$OW1/O6BYHV6BcXZu8QVeXbDWra3Oeqh0sb"
-+    "HbbMCVNSnCM/UrjmM0Dp8vOuZeHBy/YTBmSK6H9qs/y3RnOaw5v." },
-+  { "$6$rounds=5000$toolongsaltstring", "This is just a test",
-+    "$6$rounds=5000$toolongsaltstrin$lQ8jolhgVRVhY4b5pZKaysCLi0QBxGoNeKQ"
-+    "zQ3glMhwllF7oGDZxUhx1yxdYcz/e1JSbq3y6JMxxl8audkUEm0" },
-+  { "$6$rounds=1400$anotherlongsaltstring",
-+    "a very much longer text to encrypt.  This one even stretches over more"
-+    "than one line.",
-+    "$6$rounds=1400$anotherlongsalts$POfYwTEok97VWcjxIiSOjiykti.o/pQs.wP"
-+    "vMxQ6Fm7I6IoYN3CmLs66x9t0oSwbtEW7o7UmJEiDwGqd8p4ur1" },
-+  { "$6$rounds=77777$short",
-+    "we have a short salt string but not a short password",
-+    "$6$rounds=77777$short$WuQyW2YR.hBNpjjRhpYD/ifIw05xdfeEyQoMxIXbkvr0g"
-+    "ge1a1x3yRULJ5CCaUeOxFmtlcGZelFl5CxtgfiAc0" },
-+  { "$6$rounds=123456$asaltof16chars..", "a short string",
-+    "$6$rounds=123456$asaltof16chars..$BtCwjqMJGx5hrJhZywWvt0RLE8uZ4oPwc"
-+    "elCjmw2kSYu.Ec6ycULevoBK25fs2xXgMNrCzIMVcgEJAstJeonj1" },
-+  { "$6$rounds=10$roundstoolow", "the minimum number is still observed",
-+    "$6$rounds=1000$roundstoolow$kUMsbe306n21p9R.FRkW3IGn.S9NPN0x50YhH1x"
-+    "hLsPuWGsUSklZt58jaTfF4ZEQpyUNGc0dqbpBYYBaHHrsX." },
-+};
-+#define ntests2 (sizeof (tests2) / sizeof (tests2[0]))
-+
-+
-+int
-+sha512_test (void)
-+{
-+  struct sha512_ctx ctx;
-+  char sum[64];
-+  int result = 0;
-+  int cnt, i;
-+
-+  for (cnt = 0; cnt < (int) ntests; ++cnt)
-+    {
-+      sha512_init_ctx (&ctx);
-+      sha512_process_bytes (tests[cnt].input, strlen (tests[cnt].input), &ctx);
-+      sha512_finish_ctx (&ctx, sum);
-+      if (memcmp (tests[cnt].result, sum, 64) != 0)
-+      {
-+        printf ("test %d run %d failed\n", cnt, 1);
-+        result = 1;
-+      }
-+
-+      sha512_init_ctx (&ctx);
-+      for (i = 0; tests[cnt].input[i] != '\0'; ++i)
-+      sha512_process_bytes (&tests[cnt].input[i], 1, &ctx);
-+      sha512_finish_ctx (&ctx, sum);
-+      if (memcmp (tests[cnt].result, sum, 64) != 0)
-+      {
-+        printf ("test %d run %d failed\n", cnt, 2);
-+        result = 1;
-+      }
-+    }
-+
-+  /* Test vector from FIPS 180-2: appendix C.3.  */
-+  char buf[1000];
-+  memset (buf, 'a', sizeof (buf));
-+  sha512_init_ctx (&ctx);
-+  for (i = 0; i < 1000; ++i)
-+    sha512_process_bytes (buf, sizeof (buf), &ctx);
-+  sha512_finish_ctx (&ctx, sum);
-+  static const char expected[64] =
-+    "\xe7\x18\x48\x3d\x0c\xe7\x69\x64\x4e\x2e\x42\xc7\xbc\x15\xb4\x63"
-+    "\x8e\x1f\x98\xb1\x3b\x20\x44\x28\x56\x32\xa8\x03\xaf\xa9\x73\xeb"
-+    "\xde\x0f\xf2\x44\x87\x7e\xa6\x0a\x4c\xb0\x43\x2c\xe5\x77\xc3\x1b"
-+    "\xeb\x00\x9c\x5c\x2c\x49\xaa\x2e\x4e\xad\xb2\x17\xad\x8c\xc0\x9b";
-+  if (memcmp (expected, sum, 64) != 0)
-+    {
-+      printf ("test %d failed\n", cnt);
-+      result = 1;
-+    }
-+
-+  for (cnt = 0; cnt < ntests2; ++cnt)
-+    {
-+      char *cp = sha512_crypt (tests2[cnt].input, tests2[cnt].salt);
-+
-+      if (strcmp (cp, tests2[cnt].expected) != 0)
-+      {
-+        printf ("test %d: expected \"%s\", got \"%s\"\n",
-+                cnt, tests2[cnt].expected, cp);
-+        result = 1;
-+      }
-+    }
-+
-+  if (result == 0)
-+    printf ("all tests OK\n");
-+
-+  return result;
-+}
-+#endif
-diff --git a/stage2/shared.h b/stage2/shared.h
-index 77eef11..b56b44b 100644
---- a/stage2/shared.h
-+++ b/stage2/shared.h
-@@ -35,9 +35,10 @@
- #endif
- /* Maybe redirect memory requests through grub_scratch_mem. */
--#ifdef GRUB_UTIL
--extern char *grub_scratch_mem;
--# define RAW_ADDR(x) ((x) + (int) grub_scratch_mem)
-+#if defined(GRUB_UTIL) || defined(PLATFORM_EFI)
-+#define GRUB_SCRATCH_MEM_SIZE   0x400000
-+extern void *grub_scratch_mem;
-+# define RAW_ADDR(x) ((x) + (unsigned long) grub_scratch_mem)
- # define RAW_SEG(x) (RAW_ADDR ((x) << 4) >> 4)
- #else
- # define RAW_ADDR(x) (x)
-@@ -56,15 +57,15 @@ extern char *grub_scratch_mem;
- #define NEW_HEAPSIZE 1500
- /* 512-byte scratch area */
--#define SCRATCHADDR  RAW_ADDR (0x77e00)
--#define SCRATCHSEG   RAW_SEG (0x77e0)
-+#define SCRATCHADDR  RAW_ADDR (0x77000)
-+#define SCRATCHSEG   RAW_SEG (0x7700)
- /*
-- *  This is the location of the raw device buffer.  It is 31.5K
-+ *  This is the location of the raw device buffer.  It is 28K
-  *  in size.
-  */
--#define BUFFERLEN   0x7e00
-+#define BUFFERLEN   0x7000
- #define BUFFERADDR  RAW_ADDR (0x70000)
- #define BUFFERSEG   RAW_SEG (0x7000)
-@@ -79,6 +80,8 @@ extern char *grub_scratch_mem;
- #define BIOSDISK_FLAG_LBA_EXTENSION   0x1
- #define BIOSDISK_FLAG_CDROM           0x2
-+#define MAX_HD_NUM    128
-+
- /*
-  *  This is the filesystem (not raw device) buffer.
-  *  It is 32K in size, do not overrun!
-@@ -127,7 +130,7 @@ extern char *grub_scratch_mem;
- #define MENU_BUFLEN           (0x8000 + PASSWORD_BUF - MENU_BUF)
- /* The size of the drive map.  */
--#define DRIVE_MAP_SIZE                8
-+#define DRIVE_MAP_SIZE                128
- /* The size of the key map.  */
- #define KEY_MAP_SIZE          128
-@@ -160,16 +163,18 @@ extern char *grub_scratch_mem;
- #define LINUX_VID_MODE_ASK            0xFFFD
- #define LINUX_CL_OFFSET                       0x9000
--#define LINUX_CL_END_OFFSET           0x90FF
--#define LINUX_SETUP_MOVE_SIZE         0x9100
-+#define LINUX_CL_END_OFFSET           0x97FF
-+#define LINUX_SETUP_MOVE_SIZE         0x9800
- #define LINUX_CL_MAGIC                        0xA33F
- /*
-  *  General disk stuff
-  */
-+#ifndef PLATFORM_EFI
- #define SECTOR_SIZE           0x200
- #define SECTOR_BITS           9
-+#endif /* PLATFORM_EFI */
- #define BIOS_FLAG_FIXED_DISK  0x80
- #define BOOTSEC_LOCATION              RAW_ADDR (0x7C00)
-@@ -200,6 +205,8 @@ extern char *grub_scratch_mem;
- #define STAGE2_FORCE_LBA      0x11
- #define STAGE2_VER_STR_OFFS   0x12
-+#define STAGE2_ONCEONLY_ENTRY   0x10000
-+
- /* Stage 2 identifiers */
- #define STAGE2_ID_STAGE2              0
- #define STAGE2_ID_FFS_STAGE1_5                1
-@@ -360,7 +367,7 @@ extern char *grub_scratch_mem;
- #define memcpy grub_memmove   /* we don't need a separate memcpy */
- #define memset grub_memset
- #define isspace grub_isspace
--#define printf grub_printf
-+#define printf(format...) grub_printf(format)
- #define sprintf grub_sprintf
- #undef putchar
- #define putchar grub_putchar
-@@ -371,14 +378,24 @@ extern char *grub_scratch_mem;
- #define tolower grub_tolower
- #define strlen grub_strlen
- #define strcpy grub_strcpy
-+#define stpncpy grub_stpncpy
-+#define strspn grub_strspn
-+#define strcspn grub_strcspn
-+#define strtok_r grub_strtok_r
-+#define strchr grub_strchr
-+#define strrchr grub_strrchr
-+#define strnchr grub_strnchr
-+#define strncpy grub_strncpy
-+#define strncasecmp grub_strncasecmp
- #endif /* WITHOUT_LIBC_STUBS */
--
- #ifndef ASM_FILE
- /*
-  *  Below this should be ONLY defines and other constructs for C code.
-  */
-+#include <stdarg.h>
-+
- /* multiboot stuff */
- #include "mb_header.h"
-@@ -400,30 +417,33 @@ struct linux_kernel_header
-   unsigned short root_dev;            /* Default root device number */
-   unsigned short boot_flag;           /* 0xAA55 magic number */
-   unsigned short jump;                        /* Jump instruction */
--  unsigned long header;                       /* Magic signature "HdrS" */
-+  unsigned int header;                        /* Magic signature "HdrS" */
-   unsigned short version;             /* Boot protocol version supported */
--  unsigned long realmode_swtch;               /* Boot loader hook */
--  unsigned long start_sys;            /* Points to kernel version string */
-+  unsigned int realmode_swtch;                /* Boot loader hook */
-+  unsigned int start_sys;             /* Points to kernel version string */
-   unsigned char type_of_loader;               /* Boot loader identifier */
-   unsigned char loadflags;            /* Boot protocol option flags */
-   unsigned short setup_move_size;     /* Move to high memory size */
--  unsigned long code32_start;         /* Boot loader hook */
--  unsigned long ramdisk_image;                /* initrd load address */
--  unsigned long ramdisk_size;         /* initrd size */
--  unsigned long bootsect_kludge;      /* obsolete */
-+  unsigned int code32_start;          /* Boot loader hook */
-+  unsigned int ramdisk_image;         /* initrd load address */
-+  unsigned int ramdisk_size;          /* initrd size */
-+  unsigned int bootsect_kludge;               /* obsolete */
-   unsigned short heap_end_ptr;                /* Free memory after setup end */
-   unsigned short pad1;                        /* Unused */
-   char *cmd_line_ptr;                 /* Points to the kernel command line */
--  unsigned long initrd_addr_max;      /* The highest address of initrd */
-+  unsigned int initrd_addr_max;               /* The highest address of initrd */
-+  unsigned int kernel_alignment;      /* Physical addr alignment required for kernel */
-+  unsigned int relocatable_kernel;    /* Whether kernel is relocatable or not */
-+  unsigned int cmdline_size;          /* Maximum size of the kernel command line */
- } __attribute__ ((packed));
- /* Memory map address range descriptor used by GET_MMAP_ENTRY. */
- struct mmar_desc
- {
--  unsigned long desc_len;     /* Size of this descriptor. */
-+  unsigned int desc_len;      /* Size of this descriptor. */
-   unsigned long long addr;    /* Base address. */
-   unsigned long long length;  /* Length in bytes. */
--  unsigned long type;         /* Type of address range. */
-+  unsigned int type;          /* Type of address range. */
- } __attribute__ ((packed));
- /* VBE controller information.  */
-@@ -600,6 +620,7 @@ typedef enum
- {
-   PASSWORD_PLAIN,
-   PASSWORD_MD5,
-+  PASSWORD_ENCRYPTED,
-   PASSWORD_UNSUPPORTED
- }
- password_t;
-@@ -627,8 +648,16 @@ extern void (*disk_read_func) (int, int, int);
- #ifndef STAGE1_5
- /* The flag for debug mode.  */
- extern int debug;
-+extern int debug_graphics;
- #endif /* STAGE1_5 */
-+/* Verbose mode flag. */
-+extern int grub_verbose;
-+#define verbose_printf(format...) \
-+  do { if (grub_verbose) printf(format); } while (0)
-+#define grub_verbose_printf(format...) \
-+  do { if (grub_verbose) grub_printf(format); } while (0)
-+
- extern unsigned long current_drive;
- extern unsigned long current_partition;
-@@ -666,6 +695,8 @@ extern struct geometry buf_geom;
- extern int filepos;
- extern int filemax;
-+extern int silent_grub;
-+
- /*
-  *  Common BIOS/boot data.
-  */
-@@ -804,11 +835,17 @@ int getkey (void);
-    available. */
- int checkkey (void);
-+/* Return keyboard modifier status. */
-+int
-+keystatus (void);
-+
- /* Low-level disk I/O */
- int get_diskinfo (int drive, struct geometry *geometry);
- int biosdisk (int subfunc, int drive, struct geometry *geometry,
-             int sector, int nsec, int segment);
- void stop_floppy (void);
-+int get_sector_size (int drive);
-+int get_sector_bits (int drive);
- /* Command-line interface functions. */
- #ifndef STAGE1_5
-@@ -860,17 +897,25 @@ void init_builtins (void);
- void init_config (void);
- char *skip_to (int after_equal, char *cmdline);
- struct builtin *find_command (char *command);
--void print_cmdline_message (int forever);
- void enter_cmdline (char *heap, int forever);
- int run_script (char *script, char *heap);
-+
-+/* the flags for the cmdline message */
-+#define CMDLINE_FOREVER_MODE 0x0
-+#define CMDLINE_NORMAL_MODE 0x1
-+#define CMDLINE_EDIT_MODE 0x2
-+
-+void print_cmdline_message (int type);
- #endif
- /* C library replacement functions with identical semantics. */
--void grub_printf (const char *format,...);
-+int grub_vsprintf (char *str, const char *fmt, va_list args);
-+void grub_printf (char *format,...);
- int grub_sprintf (char *buffer, const char *format, ...);
- int grub_tolower (int c);
- int grub_isspace (int c);
- int grub_strncat (char *s1, const char *s2, int n);
-+void grub_memcpy(void *dest, const void *src, int len);
- void *grub_memmove (void *to, const void *from, int len);
- void *grub_memset (void *start, int c, int len);
- int grub_strncat (char *s1, const char *s2, int n);
-@@ -879,9 +924,19 @@ int grub_memcmp (const char *s1, const char *s2, int n);
- int grub_strcmp (const char *s1, const char *s2);
- int grub_strlen (const char *str);
- char *grub_strcpy (char *dest, const char *src);
-+char *grub_stpncpy (char *dest, const char *src, int n);
-+int grub_strspn(const char *s, const char *accept);
-+int grub_strcspn(const char *s, const char *reject);
-+char *grub_strtok_r(char *s, const char *delim, char **ptrptr);
-+char *grub_strchr (const char *s, int c);
-+char *grub_strrchr (const char *s, int c);
-+char *grub_strnchr (const char *s, int c);
-+int grub_strnlen (const char *s, int n);
-+char *grub_strncpy (char *new, const char *s, int n);
-+int grub_strncasecmp(const char *s0, const char *s1, int n);
- #ifndef GRUB_UTIL
--typedef unsigned long grub_jmp_buf[6];
-+typedef unsigned long grub_jmp_buf[8];
- #else
- /* In the grub shell, use the libc jmp_buf instead.  */
- # include <setjmp.h>
-@@ -904,10 +959,11 @@ extern grub_jmp_buf restart_cmdline_env;
- /* misc */
- void init_page (void);
- void print_error (void);
--char *convert_to_ascii (char *buf, int c, ...);
-+char *convert_to_ascii (char *buf, int c, unsigned int num);
- int get_cmdline (char *prompt, char *cmdline, int maxlen,
-                int echo_char, int history);
- int substring (const char *s1, const char *s2);
-+int subcasestring (const char *s1, const char *s2);
- int nul_terminate (char *str);
- int get_based_digit (int c, int base);
- int safe_parse_maxint (char **str_ptr, int *myint_ptr);
-@@ -934,7 +990,9 @@ int next_partition (unsigned long drive, unsigned long dest,
-                   unsigned long *partition, int *type,
-                   unsigned long *start, unsigned long *len,
-                   unsigned long *offset, int *entry,
--                  unsigned long *ext_offset, char *buf);
-+                   unsigned long *ext_offset,
-+                   unsigned long *gpt_offset, int *gpt_count,
-+                   int *gpt_size, char *buf);
- /* Sets device to the one represented by the SAVED_* parameters. */
- int make_saved_active (void);
-@@ -962,6 +1020,8 @@ int dir (char *dirname);
- int set_bootdev (int hdbias);
-+char *get_fsys_type (void);
-+
- /* Display statistics on the current active device. */
- void print_fsys_type (void);
-@@ -987,10 +1047,22 @@ int load_module (char *module, char *arg);
- int load_initrd (char *initrd);
- int check_password(char *entered, char* expected, password_t type);
-+
-+char *sha256_crypt (const char *key, const char *salt);
-+char *sha512_crypt (const char *key, const char *salt);
- #endif
- void init_bios_info (void);
-+#ifdef PLATFORM_EFI
-+void grub_set_config_file (char *path_name);
-+int grub_save_saved_default (int new_default);
-+extern int check_device (const char *device);
-+extern void assign_device_name (int drive, const char *device);
-+#endif
-+int grub_load_linux (char *kernel, char *arg);
-+int grub_load_initrd (char *initrd);
-+int grub_chainloader (char *filename);
- #endif /* ASM_FILE */
- #endif /* ! GRUB_SHARED_HEADER */
-diff --git a/stage2/smp-imps.h b/stage2/smp-imps.h
-index c0fdce3..bae9b77 100644
---- a/stage2/smp-imps.h
-+++ b/stage2/smp-imps.h
-@@ -196,7 +196,6 @@ struct imps_interrupt
- int imps_probe (void);
--
- /*
-  *  Defines that use variables
-  */
-diff --git a/stage2/stage1_5.c b/stage2/stage1_5.c
-index 5c45d4c..c2d9632 100644
---- a/stage2/stage1_5.c
-+++ b/stage2/stage1_5.c
-@@ -30,7 +30,8 @@ disk_read_savesect_func (int sector, int offset, int length)
- void
- cmain (void)
- {
--  grub_printf ("\n\nGRUB loading, please wait...\n");
-+  if (0)
-+    grub_printf ("\n\nGRUB loading, please wait...\n");
-   /*
-    *  Here load the true second-stage boot-loader.
-diff --git a/stage2/stage2.c b/stage2/stage2.c
-index 4dbf6f5..cca4332 100644
---- a/stage2/stage2.c
-+++ b/stage2/stage2.c
-@@ -22,6 +22,8 @@
- grub_jmp_buf restart_env;
-+int silent_grub = 0;
-+
- #if defined(PRESET_MENU_STRING) || defined(SUPPORT_DISKLESS)
- # if defined(PRESET_MENU_STRING)
-@@ -233,6 +235,10 @@ run_menu (char *menu_entries, char *config_entries, int num_entries,
- {
-   int c, time1, time2 = -1, first_entry = 0;
-   char *cur_entry = 0;
-+  struct term_entry *prev_term = NULL;
-+
-+  if (grub_verbose)
-+    cls();
-   /*
-    *  Main loop for menu UI.
-@@ -254,18 +260,33 @@ restart:
-      interface. */
-   if (grub_timeout < 0)
-     show_menu = 1;
--  
-+
-   /* If SHOW_MENU is false, don't display the menu until ESC is pressed.  */
-   if (! show_menu)
-     {
-+      /* Don't show the "Booting in blah seconds message" if the timeout is 0 */
-+      int print_message = grub_timeout != 0;
-+
-       /* Get current time.  */
-       while ((time1 = getrtsecs ()) == 0xFF)
-       ;
-+      if (print_message)
-+      grub_printf("\rPress any key to enter the menu\n\n\n");
-+
-       while (1)
-       {
--        /* Check if ESC is pressed.  */
--        if (checkkey () != -1 && ASCII_CHAR (getkey ()) == '\e')
-+        /* Check if any key is pressed */
-+        if (checkkey () != -1)
-+          {
-+            grub_timeout = -1;
-+            show_menu = 1;
-+            getkey ();
-+            break;
-+          }
-+
-+        /* See if a modifier key is held down.  */
-+        if (keystatus () != 0)
-           {
-             grub_timeout = -1;
-             show_menu = 1;
-@@ -287,8 +308,10 @@ restart:
-             grub_timeout--;
-             
-             /* Print a message.  */
--            grub_printf ("\rPress `ESC' to enter the menu... %d   ",
--                         grub_timeout);
-+            if (print_message)
-+              grub_printf ("\rBooting %s in %d seconds...",
-+                           get_entry(menu_entries, first_entry + entryno, 0),
-+                           grub_timeout);
-           }
-       }
-     }
-@@ -319,7 +342,8 @@ restart:
-         if (config_entries)
-           printf ("\
-       Press enter to boot the selected OS, \'e\' to edit the\n\
--      commands before booting, or \'c\' for a command-line.");
-+      commands before booting, \'a\' to modify the kernel arguments\n\
-+      before booting, or \'c\' for a command-line.");
-         else
-           printf ("\
-       Press \'b\' to boot, \'e\' to edit the selected command in the\n\
-@@ -514,7 +538,7 @@ restart:
-                 if (c == 'O')
-                   {
-                     grub_memmove (cur_entry + 2, cur_entry,
--                                  ((int) heap) - ((int) cur_entry));
-+                                  heap - cur_entry);
-                     cur_entry[0] = ' ';
-                     cur_entry[1] = 0;
-@@ -530,8 +554,8 @@ restart:
-                                           0);
-                     grub_memmove (cur_entry, ptr,
--                                  ((int) heap) - ((int) ptr));
--                    heap -= (((int) ptr) - ((int) cur_entry));
-+                                  heap - ptr);
-+                    heap -= ptr - cur_entry;
-                     num_entries--;
-@@ -655,7 +679,7 @@ restart:
-                 else
-                   {
-                     cls ();
--                    print_cmdline_message (0);
-+                    print_cmdline_message (CMDLINE_EDIT_MODE);
-                     new_heap = heap + NEW_HEAPSIZE + 1;
-@@ -681,7 +705,7 @@ restart:
-                         /* align rest of commands properly */
-                         grub_memmove (cur_entry + j, cur_entry + i,
--                                      (int) heap - ((int) cur_entry + i));
-+                                      (unsigned long) heap - ((unsigned long) cur_entry + i));
-                         /* copy command to correct area */
-                         grub_memmove (cur_entry, new_heap, j);
-@@ -697,6 +721,98 @@ restart:
-                 enter_cmdline (heap, 0);
-                 goto restart;
-               }
-+            if (config_entries && c == 'a')
-+              {
-+                int new_num_entries = 0, i = 0, j;
-+                int needs_padding, amount;
-+                char *new_heap;
-+                char * entries;
-+                char * entry_copy;
-+                char * append_line;
-+                char * start;
-+
-+                entry_copy = new_heap = heap;
-+                cur_entry = get_entry (config_entries, first_entry + entryno,
-+                                       1);
-+                
-+                do
-+                  {
-+                    while ((*(new_heap++) = cur_entry[i++]) != 0);
-+                    new_num_entries++;
-+                  }
-+                while (config_entries && cur_entry[i]);
-+
-+                /* this only needs to be done if config_entries is non-NULL,
-+                   but it doesn't hurt to do it always */
-+                *(new_heap++) = 0;
-+
-+                new_heap = heap + NEW_HEAPSIZE + 1;
-+
-+                entries = entry_copy;
-+                while (*entries) 
-+                  {
-+                    if ((strstr(entries, "kernel") == entries) &&
-+                        isspace(entries[6])) 
-+                        break;
-+
-+                    while (*entries) entries++;
-+                    entries++;
-+                  }
-+
-+                if (!*entries)
-+                    goto restart;
-+
-+                start = entries + 6;
-+
-+                /* skip the white space */
-+                while (*start && isspace(*start)) start++;
-+                /* skip the kernel name */
-+                while (*start && !isspace(*start)) start++;
-+
-+                /* skip the white space */
-+                needs_padding = (!*start || !isspace(*start));
-+                while (*start && isspace(*start)) start++;
-+
-+                append_line = new_heap;
-+                grub_strcpy(append_line, start);
-+
-+                cls();
-+                print_cmdline_message (CMDLINE_EDIT_MODE);
-+
-+                if (get_cmdline(PACKAGE " append> ", 
-+                                  append_line, NEW_HEAPSIZE + 1, 
-+                                  0, 1))
-+                    goto restart;
-+
-+                /* have new args; append_line points to the
-+                   new args and start points to the old
-+                   args */
-+
-+                i = grub_strlen(start);
-+                j = grub_strlen(append_line);
-+
-+                if (i > (j + needs_padding))
-+                    amount = i;
-+                else
-+                    amount = j + needs_padding;
-+
-+                /* align rest of commands properly */
-+                memmove (start + j + needs_padding, start + i,
-+                     ((unsigned long) append_line) - ((unsigned long) start) - (amount));
-+
-+                if (needs_padding)
-+                    *start = ' ';
-+
-+                /* copy command to correct area */
-+                memmove (start + needs_padding, append_line, j);
-+
-+                /* set up this entry to boot */
-+                config_entries = NULL;
-+                cur_entry = entry_copy;
-+                heap = new_heap;
-+
-+                break;
-+              }
- #ifdef GRUB_UTIL
-             if (c == 'q')
-               {
-@@ -712,16 +828,31 @@ restart:
-   
-  boot_entry:
-   
--  cls ();
--  setcursor (1);
-+  if (grub_verbose || show_menu)
-+    {
-+      cls ();
-+      setcursor (1);
-+    }
-+  /* if our terminal needed initialization, we should shut it down
-+   * before booting the kernel, but we want to save what it was so
-+   * we can come back if needed */
-+  prev_term = current_term;
-+  if (current_term->shutdown) 
-+    {
-+      (*current_term->shutdown)();
-+      current_term = term_table; /* assumption: console is first */
-+    }
-+
-+  if (silent_grub)
-+    setcursor(0);
-   
-   while (1)
-     {
-       if (config_entries)
--      printf ("  Booting \'%s\'\n\n",
-+      verbose_printf ("  Booting \'%s\'\n\n",
-               get_entry (menu_entries, first_entry + entryno, 0));
-       else
--      printf ("  Booting command-list\n\n");
-+      verbose_printf ("  Booting command-list\n\n");
-       if (! cur_entry)
-       cur_entry = get_entry (config_entries, first_entry + entryno, 1);
-@@ -748,6 +879,13 @@ restart:
-       break;
-     }
-+  /* if we get back here, we should go back to what our term was before */
-+  current_term = prev_term;
-+  if (current_term->startup)
-+      /* if our terminal fails to initialize, fall back to console since
-+       * it should always work */
-+      if ((*current_term->startup)() == 0)
-+          current_term = term_table; /* we know that console is first */
-   show_menu = 1;
-   goto restart;
- }
-@@ -867,38 +1005,8 @@ cmain (void)
-       if (use_config_file)
- #endif /* GRUB_UTIL */
-       {
--        char *default_file = (char *) DEFAULT_FILE_BUF;
-         int i;
--        
--        /* Get a saved default entry if possible.  */
--        saved_entryno = 0;
--        *default_file = 0;
--        grub_strncat (default_file, config_file, DEFAULT_FILE_BUFLEN);
--        for (i = grub_strlen(default_file); i >= 0; i--)
--          if (default_file[i] == '/')
--            {
--              i++;
--              break;
--            }
--        default_file[i] = 0;
--        grub_strncat (default_file + i, "default", DEFAULT_FILE_BUFLEN - i);
--        if (grub_open (default_file))
--          {
--            char buf[10]; /* This is good enough.  */
--            char *p = buf;
--            int len;
--            
--            len = grub_read (buf, sizeof (buf));
--            if (len > 0)
--              {
--                buf[sizeof (buf) - 1] = 0;
--                safe_parse_maxint (&p, &saved_entryno);
--              }
--            grub_close ();
--          }
--        errnum = ERR_NONE;
--        
-         do
-           {
-             /* STATE 0:  Before any title command.
-@@ -1050,11 +1158,16 @@ cmain (void)
-         while (is_preset);
-       }
-+      /* go ahead and make sure the terminal is setup */
-+      if (current_term->startup)
-+        (*current_term->startup)();
-+
-       if (! num_entries)
-       {
-         /* If no acceptable config file, goto command-line, starting
-            heap from where the config entries would have been stored
-            if there were any.  */
-+        grub_verbose = 1;
-         enter_cmdline (config_entries, 1);
-       }
-       else
-diff --git a/stage2/start.S b/stage2/start.S
-index 9a7d504..7a6652f 100644
---- a/stage2/start.S
-+++ b/stage2/start.S
-@@ -39,6 +39,9 @@
-       
-       /* Print message string */
- #define MSG(x)        movw $ABS(x), %si; call message
-+      
-+      /* Print verbose message string */
-+#define VMSG(x)
-       .file   "start.S"
-@@ -67,9 +70,9 @@ _start:
-       /* print a notification message on the screen */
-       pushw   %si
--      MSG(notification_string)
-+      VMSG(notification_string)
-       popw    %si
--      
-+
-       /* this sets up for the first run through "bootloop" */
-       movw    $ABS(firstlist - BOOTSEC_LISTSIZE), %di
-@@ -291,9 +294,9 @@ copy_buffer:
-       movsb           /* this runs the actual copy */
-       /* restore addressing regs and print a dot with correct DS 
--         (MSG modifies SI, which is saved, and unused AX and BX) */
-+         (VMSG modifies SI, which is saved, and unused AX and BX) */
-       popw    %ds
--      MSG(notification_step)
-+      VMSG(notification_step)
-       popa
-       /* check if finished with this dataset */
-@@ -310,7 +313,7 @@ copy_buffer:
- bootit:
-       /* print a newline */
--      MSG(notification_done)
-+      VMSG(notification_done)
-       popw    %dx     /* this makes sure %dl is our "boot" drive */
- #ifdef STAGE1_5
-       ljmp    $0, $0x2200
-diff --git a/stage2/term.h b/stage2/term.h
-index 8261c7c..803de58 100644
---- a/stage2/term.h
-+++ b/stage2/term.h
-@@ -54,18 +54,28 @@ typedef enum
- /* Set when the terminal needs to be initialized.  */
- #define TERM_NEED_INIT                (1 << 16)
-+/* Bitmasks for modifier keys returned by term->keystatus(). */
-+#define TERM_STATUS_ALT               (1 << 3)
-+#define TERM_STATUS_CTRL      (1 << 2)
-+#define TERM_STATUS_LEFT_SHIFT        (1 << 1)
-+#define TERM_STATUS_RIGHT_SHIFT       (1 << 0)
-+
- struct term_entry
- {
-   /* The name of a terminal.  */
-   const char *name;
-   /* The feature flags defined above.  */
-   unsigned long flags;
-+  /* Default for maximum number of lines if not specified */
-+  unsigned short max_lines;
-   /* Put a character.  */
-   void (*putchar) (int c);
-   /* Check if any input character is available.  */
-   int (*checkkey) (void);
-   /* Get a character.  */
-   int (*getkey) (void);
-+  /* Get keyboard modifier status.  */
-+  int (*keystatus) (void);
-   /* Get the cursor position. The return value is ((X << 8) | Y).  */
-   int (*getxy) (void);
-   /* Go to the position (X, Y).  */
-@@ -79,6 +89,11 @@ struct term_entry
-   void (*setcolor) (int normal_color, int highlight_color);
-   /* Turn on/off the cursor.  */
-   int (*setcursor) (int on);
-+
-+  /* function to start a terminal */
-+  int (*startup) (void);
-+  /* function to use to shutdown a terminal */
-+  void (*shutdown) (void);
- };
- /* This lists up available terminals.  */
-@@ -96,6 +111,7 @@ void console_putchar (int c);
- #ifndef STAGE1_5
- int console_checkkey (void);
- int console_getkey (void);
-+int console_keystatus (void);
- int console_getxy (void);
- void console_gotoxy (int x, int y);
- void console_cls (void);
-@@ -124,4 +140,23 @@ void hercules_setcolor (int normal_color, int highlight_color);
- int hercules_setcursor (int on);
- #endif
-+#ifdef SUPPORT_GRAPHICS
-+extern int foreground, background, border, graphics_inited;
-+
-+void graphics_set_splash(char *splashfile);
-+int set_videomode (int mode);
-+void graphics_putchar (int c);
-+int graphics_getxy(void);
-+void graphics_gotoxy(int x, int y);
-+void graphics_cls(void);
-+void graphics_setcolorstate (color_state state);
-+void graphics_setcolor (int normal_color, int highlight_color);
-+int graphics_setcursor (int on);
-+int graphics_init(void);
-+void graphics_end(void);
-+
-+int hex(int v);
-+void graphics_set_palette(int idx, int red, int green, int blue);
-+#endif /* SUPPORT_GRAPHICS */
-+
- #endif /* ! GRUB_TERM_HEADER */
-diff --git a/stage2/tparm.c b/stage2/tparm.c
-index ff78d53..408b284 100644
---- a/stage2/tparm.c
-+++ b/stage2/tparm.c
-@@ -320,7 +320,7 @@ parse_format(const char *s, char *format, int *len)
- #define isLOWER(c) ((c) >= 'a' && (c) <= 'z')
- static inline char *
--tparam_internal(const char *string, int *dataptr)
-+tparam_internal(const char *string, va_list args)
- {
- #define NUM_VARS 26
-     char *p_is_s[9];
-@@ -461,9 +461,9 @@ tparam_internal(const char *string, int *dataptr)
-        * a char* and an int may not be the same size on the stack.
-        */
-       if (p_is_s[i] != 0) {
--        p_is_s[i] = (char *)(*(dataptr++));
-+        p_is_s[i] = va_arg (args, char *);
-       } else {
--        param[i] = (int)(*(dataptr++));
-+        param[i] = va_arg (args, int);
-       }
-     }
-@@ -716,11 +716,11 @@ char *
- grub_tparm(const char *string,...)
- {
-     char *result;
--    int *dataptr = (int *) &string;
-+    va_list ap;
--    dataptr++;
--
--    result = tparam_internal(string, dataptr);
-+    va_start (ap, string);
-+    result = tparam_internal(string, ap);
-+    va_end(ap);
-     return result;
- }
-diff --git a/test b/test
-new file mode 100644
-index 0000000..b182379
---- /dev/null
-+++ b/test
-@@ -0,0 +1 @@
-+fo of fo
-diff --git a/util/.gitignore b/util/.gitignore
-new file mode 100644
-index 0000000..6687356
---- /dev/null
-+++ b/util/.gitignore
-@@ -0,0 +1,7 @@
-+Makefile.in
-+Makefile
-+.deps
-+grub-image
-+grub-install
-+grub-md5-crypt
-+grub-terminfo
-diff --git a/util/Makefile.am b/util/Makefile.am
-index 2e04711..fa545b1 100644
---- a/util/Makefile.am
-+++ b/util/Makefile.am
-@@ -1,6 +1,7 @@
-+if !PLATFORM_EFI
-+
- bin_PROGRAMS = mbchk
--sbin_SCRIPTS = grub-install grub-md5-crypt grub-terminfo \
--      grub-set-default
-+sbin_SCRIPTS = grub-install grub-md5-crypt grub-terminfo grub-crypt
- noinst_SCRIPTS = grub-image mkbimage
- EXTRA_DIST = mkbimage
-@@ -10,3 +11,9 @@ AM_CFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/docs
- mbchk_SOURCES = mbchk.c
- mbchk_LDADD = ../lib/libcommon.a
-+
-+else
-+
-+sbin_SCRIPTS = grub-md5-crypt grub-terminfo grub-crypt
-+
-+endif
-diff --git a/util/Makefile.in b/util/Makefile.in
-deleted file mode 100644
-index e700cf7..0000000
---- a/util/Makefile.in
-+++ /dev/null
-@@ -1,478 +0,0 @@
--# Makefile.in generated by automake 1.9.4 from Makefile.am.
--# @configure_input@
--
--# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
--# 2003, 2004  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@
--
--
--SOURCES = $(mbchk_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 = :
--build_triplet = @build@
--host_triplet = @host@
--bin_PROGRAMS = mbchk$(EXEEXT)
--subdir = util
--DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
--      $(srcdir)/grub-image.in $(srcdir)/grub-install.in \
--      $(srcdir)/grub-md5-crypt.in $(srcdir)/grub-set-default.in \
--      $(srcdir)/grub-terminfo.in
--ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
--am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \
--      $(top_srcdir)/configure.ac
--am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
--      $(ACLOCAL_M4)
--mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
--CONFIG_HEADER = $(top_builddir)/config.h
--CONFIG_CLEAN_FILES = grub-image grub-install grub-md5-crypt \
--      grub-terminfo grub-set-default
--am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)"
--binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
--PROGRAMS = $(bin_PROGRAMS)
--am_mbchk_OBJECTS = mbchk.$(OBJEXT)
--mbchk_OBJECTS = $(am_mbchk_OBJECTS)
--mbchk_DEPENDENCIES = ../lib/libcommon.a
--sbinSCRIPT_INSTALL = $(INSTALL_SCRIPT)
--SCRIPTS = $(noinst_SCRIPTS) $(sbin_SCRIPTS)
--DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
--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 = $(mbchk_SOURCES)
--DIST_SOURCES = $(mbchk_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@
--BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@
--BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@
--CC = @CC@
--CCAS = @CCAS@
--CCASFLAGS = @CCASFLAGS@
--CCDEPMODE = @CCDEPMODE@
--CFLAGS = @CFLAGS@
--CPP = @CPP@
--CPPFLAGS = @CPPFLAGS@
--CYGPATH_W = @CYGPATH_W@
--DEFS = @DEFS@
--DEPDIR = @DEPDIR@
--DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@
--DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@
--ECHO_C = @ECHO_C@
--ECHO_N = @ECHO_N@
--ECHO_T = @ECHO_T@
--EGREP = @EGREP@
--EXEEXT = @EXEEXT@
--FSYS_CFLAGS = @FSYS_CFLAGS@
--GRUB_CFLAGS = @GRUB_CFLAGS@
--GRUB_LIBS = @GRUB_LIBS@
--HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@
--HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@
--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@
--MAINT = @MAINT@
--MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
--MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
--MAKEINFO = @MAKEINFO@
--NETBOOT_DRIVERS = @NETBOOT_DRIVERS@
--NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@
--NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@
--NET_CFLAGS = @NET_CFLAGS@
--NET_EXTRAFLAGS = @NET_EXTRAFLAGS@
--OBJCOPY = @OBJCOPY@
--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@
--RANLIB = @RANLIB@
--SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@
--SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@
--SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@
--SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@
--SET_MAKE = @SET_MAKE@
--SHELL = @SHELL@
--STAGE1_CFLAGS = @STAGE1_CFLAGS@
--STAGE2_CFLAGS = @STAGE2_CFLAGS@
--STRIP = @STRIP@
--VERSION = @VERSION@
--ac_ct_CC = @ac_ct_CC@
--ac_ct_OBJCOPY = @ac_ct_OBJCOPY@
--ac_ct_RANLIB = @ac_ct_RANLIB@
--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 = @build@
--build_alias = @build_alias@
--build_cpu = @build_cpu@
--build_os = @build_os@
--build_vendor = @build_vendor@
--datadir = @datadir@
--exec_prefix = @exec_prefix@
--host = @host@
--host_alias = @host_alias@
--host_cpu = @host_cpu@
--host_os = @host_os@
--host_vendor = @host_vendor@
--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@
--sbin_SCRIPTS = grub-install grub-md5-crypt grub-terminfo \
--      grub-set-default
--
--noinst_SCRIPTS = grub-image mkbimage
--EXTRA_DIST = mkbimage
--
--# XXX: Need to search for a header file in docs, because of multiboot.h.
--AM_CFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/docs
--mbchk_SOURCES = mbchk.c
--mbchk_LDADD = ../lib/libcommon.a
--all: all-am
--
--.SUFFIXES:
--.SUFFIXES: .c .o .obj
--$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(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  util/Makefile'; \
--      cd $(top_srcdir) && \
--        $(AUTOMAKE) --gnu  util/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: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
--      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
--$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
--      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
--grub-image: $(top_builddir)/config.status $(srcdir)/grub-image.in
--      cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
--grub-install: $(top_builddir)/config.status $(srcdir)/grub-install.in
--      cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
--grub-md5-crypt: $(top_builddir)/config.status $(srcdir)/grub-md5-crypt.in
--      cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
--grub-terminfo: $(top_builddir)/config.status $(srcdir)/grub-terminfo.in
--      cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
--grub-set-default: $(top_builddir)/config.status $(srcdir)/grub-set-default.in
--      cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
--install-binPROGRAMS: $(bin_PROGRAMS)
--      @$(NORMAL_INSTALL)
--      test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
--      @list='$(bin_PROGRAMS)'; for p in $$list; do \
--        p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
--        if test -f $$p \
--        ; then \
--          f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
--         echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
--         $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
--        else :; fi; \
--      done
--
--uninstall-binPROGRAMS:
--      @$(NORMAL_UNINSTALL)
--      @list='$(bin_PROGRAMS)'; for p in $$list; do \
--        f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
--        echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
--        rm -f "$(DESTDIR)$(bindir)/$$f"; \
--      done
--
--clean-binPROGRAMS:
--      -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
--mbchk$(EXEEXT): $(mbchk_OBJECTS) $(mbchk_DEPENDENCIES) 
--      @rm -f mbchk$(EXEEXT)
--      $(LINK) $(mbchk_LDFLAGS) $(mbchk_OBJECTS) $(mbchk_LDADD) $(LIBS)
--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
--
--mostlyclean-compile:
--      -rm -f *.$(OBJEXT)
--
--distclean-compile:
--      -rm -f *.tab.c
--
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbchk.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)
--      @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) $(SCRIPTS)
--installdirs:
--      for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)"; 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-binPROGRAMS 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-exec-am: install-binPROGRAMS install-sbinSCRIPTS
--
--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-binPROGRAMS uninstall-info-am \
--      uninstall-sbinSCRIPTS
--
--.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
--      clean-generic ctags distclean distclean-compile \
--      distclean-generic distclean-tags distdir dvi dvi-am html \
--      html-am info info-am install install-am install-binPROGRAMS \
--      install-data install-data-am install-exec install-exec-am \
--      install-info install-info-am install-man install-sbinSCRIPTS \
--      install-strip installcheck installcheck-am installdirs \
--      maintainer-clean maintainer-clean-generic mostlyclean \
--      mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
--      tags uninstall uninstall-am uninstall-binPROGRAMS \
--      uninstall-info-am uninstall-sbinSCRIPTS
--
--# 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/util/grub-crypt.in b/util/grub-crypt.in
-new file mode 100644
-index 0000000..e8783c8
---- /dev/null
-+++ b/util/grub-crypt.in
-@@ -0,0 +1,80 @@
-+#! /usr/bin/python
-+
-+'''Generate encrypted passwords for GRUB.'''
-+
-+import crypt
-+import getopt
-+import getpass
-+import sys
-+
-+def usage():
-+    '''Output usage message to stderr and exit.'''
-+    print >> sys.stderr, 'Usage: grub-crypt [OPTION]...'
-+    print >> sys.stderr, 'Try `$progname --help\' for more information.'
-+    sys.exit(1)
-+
-+def gen_salt():
-+    '''Generate a random salt.'''
-+    ret = ''
-+    with open('/dev/urandom', 'rb') as urandom:
-+        while True:
-+            byte = urandom.read(1)
-+            if byte in ('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
-+                        './0123456789'):
-+                ret += byte
-+                if len(ret) == 16:
-+                    break
-+    return ret
-+
-+def main():
-+    '''Top level.'''
-+    crypt_type = '$6$' # SHA-256
-+    try:
-+        opts, args = getopt.getopt(sys.argv[1:], 'hv',
-+                                   ('help', 'version', 'md5', 'sha-256',
-+                                    'sha-512'))
-+    except getopt.GetoptError, err:
-+        print >> sys.stderr, str(err)
-+        usage()
-+    if args:
-+        print >> sys.stderr, 'Unexpected argument `%s\'' % (args[0],)
-+        usage()
-+    for (opt, _) in opts:
-+        if opt in ('-h', '--help'):
-+            print (
-+'''Usage: grub-crypt [OPTION]...
-+Encrypt a password.
-+
-+  -h, --help              Print this message and exit
-+  -v, --version           Print the version information and exit
-+  --md5                   Use MD5 to encrypt the password
-+  --sha-256               Use SHA-256 to encrypt the password
-+  --sha-512               Use SHA-512 to encrypt the password (default)
-+
-+Report bugs to <bug-grub@gnu.org>.
-+EOF''')
-+            sys.exit(0)
-+        elif opt in ('-v', '--version'):
-+            print 'grub-crypt (GNU GRUB @VERSION@)'
-+            sys.exit(0)
-+        elif opt == '--md5':
-+            crypt_type = '$1$'
-+        elif opt == '--sha-256':
-+            crypt_type = '$5$'
-+        elif opt == '--sha-512':
-+            crypt_type = '$6$'
-+        else:
-+            assert False, 'Unhandled option'
-+    password = getpass.getpass('Password: ')
-+    password2 = getpass.getpass('Retype password: ')
-+    if not password:
-+        print >> sys.stderr, 'Empty password is not permitted.'
-+        sys.exit(1)
-+    if password != password2:
-+        print >> sys.stderr, 'Sorry, passwords do not match.'
-+        sys.exit(1)
-+    salt = crypt_type + gen_salt()
-+    print crypt.crypt(password, salt)
-+
-+if __name__ == '__main__':
-+    main()
-diff --git a/util/grub-install.in b/util/grub-install.in
-index 2e598b0..12539b8 100644
---- a/util/grub-install.in
-+++ b/util/grub-install.in
-@@ -21,34 +21,36 @@
- prefix=@prefix@
- exec_prefix=@exec_prefix@
- sbindir=@sbindir@
--libdir=@libdir@
-+datadir=@datadir@
- PACKAGE=@PACKAGE@
- VERSION=@VERSION@
- host_cpu=@host_cpu@
- host_os=@host_os@
- host_vendor=@host_vendor@
--pkglibdir=${libdir}/${PACKAGE}/${host_cpu}-${host_vendor}
-+pkgdatadir=${datadir}/${PACKAGE}/${host_cpu}-${host_vendor}
- grub_shell=${sbindir}/grub
--grub_set_default=${sbindir}/grub-set-default
--log_file=/tmp/grub-install.log.$$
--img_file=/tmp/grub-install.img.$$
-+mdadm=${sbindir}/mdadm
-+log_file=${TMPDIR:-/tmp}/grub-install.log.$$
-+img_file=${TMPDIR:-/tmp}/grub-install.img.$$
- rootdir=
- grub_prefix=/boot/grub
-+install_drives=
- install_device=
- no_floppy=
- force_lba=
- recheck=no
- debug=no
-+justcopy=no
- # look for secure tempfile creation wrappers on this platform
- if test -x /bin/tempfile; then
-     mklog="/bin/tempfile --prefix=grub"
-     mkimg="/bin/tempfile --prefix=grub"
- elif test -x /bin/mktemp; then
--    mklog="/bin/mktemp /tmp/grub-install.log.XXXXXX"
--    mkimg="/bin/mktemp /tmp/grub-install.img.XXXXXX"
-+    mklog="/bin/mktemp ${TMPDIR:-/tmp}/grub-install.log.XXXXXX"
-+    mkimg="/bin/mktemp ${TMPDIR:-/tmp}/grub-install.img.XXXXXX"
- else
-     mklog=""
-     mkimg=""
-@@ -70,6 +72,8 @@ Install GRUB on your drive.
-   --force-lba             force GRUB to use LBA mode even for a buggy
-                           BIOS
-   --recheck               probe a device map even if it already exists
-+                          This flag is unreliable and its use is
-+                          strongly discouraged.
- INSTALL_DEVICE can be a GRUB device name or a system device filename.
-@@ -96,17 +100,28 @@ convert () {
-     # Break the device name into the disk part and the partition part.
-     case "$host_os" in
-     linux*)
--      tmp_disk=`echo "$1" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \
-+      tmp_disk=`echo "$1" | grep -v '/mapper/control$' |
-+              grep -v '/mapper/[[:alnum:]]\+-[[:alnum:]]\+$' | uniq |
-+              sed -e 's%\([shv]d[a-z]\)[0-9]*$%\1%' \
-                                 -e 's%\(d[0-9]*\)p[0-9]*$%\1%' \
-                                 -e 's%\(fd[0-9]*\)$%\1%' \
-                                 -e 's%/part[0-9]*$%/disc%' \
--                                -e 's%\(c[0-7]d[0-9]*\).*$%\1%'`
--      tmp_part=`echo "$1" | sed -e 's%.*/[sh]d[a-z]\([0-9]*\)$%\1%' \
-+                                -e 's%\(c[0-7]d[0-9]*\).*$%\1%' \
-+        -e 's%\(/mapper/[[:alpha:]]\+[[:digit:]]\+\)p[[:digit:]]\+$%\1%' \
-+        -e 's%\(/mapper/isw_[[:alpha:]_]\+[[:alpha:]]\+[[:digit:]]\+\)p[[:digit:]]\+$%\1%' \
-+        -e 's%\(/mapper/[[:alpha:]]\+_[[:alpha:]]\+\)[[:digit:]]\+$%\1%'`
-+      tmp_part=`echo "$1" | grep -v '/mapper/control$' |
-+              grep -v '/mapper/[[:alnum:]]\+-[[:alnum:]]\+$' | uniq |
-+              sed -e 's%.*/[shv]d[a-z]\([0-9]*\)$%\1%' \
-                                 -e 's%.*d[0-9]*p%%' \
-                                 -e 's%.*/fd[0-9]*$%%' \
-                                 -e 's%.*/floppy/[0-9]*$%%' \
-                                 -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \
--                                -e 's%.*c[0-7]d[0-9]*p%%'`
-+                                -e 's%.*c[0-7]d[0-9]*p%%' \
-+        -e 's%.*/mapper/[[:alpha:]]\+[[:digit:]]\+p\([[:digit:]]\+\)$%\1%' \
-+        -e 's%.*/mapper/isw_[[:alpha:]_]\+[[:alpha:]]\+[[:digit:]]\+p\([[:digit:]]\+\)$%\1%' \
-+        -e 's%.*/mapper/[[:alpha:]]\+_[[:alpha:]]\+\([[:digit:]]\+\)$%\1%' |
-+              grep -v '.*/mapper/.*'`
-       ;;
-     gnu*)
-       tmp_disk=`echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%'`
-@@ -196,7 +211,7 @@ resolve_symlink () {
-       while test -L $tmp_fname; do
-               tmp_new_fname=`ls -al $tmp_fname | sed -n 's%.*-> \(.*\)%\1%p'`
-               if test -z "$tmp_new_fname"; then
--                      echo "Unrecognized ls output" 2>&1
-+                      echo "Unrecognized ls output" 1>&2
-                       exit 1
-               fi
-@@ -211,6 +226,80 @@ resolve_symlink () {
-       echo "$tmp_fname"
- }
-+# Usage: is_raid1_device devicename
-+# Returns 0 if devicename is a raid1 md device, 1 if it is not.
-+is_raid1_device () {
-+    case "$host_os" in
-+    linux*)
-+      level=`$mdadm --query --detail $1 2>/dev/null | \
-+              awk '/Raid Level :/ {print $4}'` 
-+      if [ "$level" = "raid1" ]; then
-+          return 0
-+      fi
-+    ;;
-+    esac
-+    return 1
-+}
-+
-+# Usage: find_real_devs device
-+# Returns space separated list of devices for linux if device is 
-+# a raid1 device. In all other cases, the provided value is returned.
-+find_real_devs () {
-+    source_device=$1
-+    case "$host_os" in
-+    linux*)
-+      if is_raid1_device $source_device ; then
-+          list=""
-+          for device in `$mdadm --query --detail "${source_device}" | \
-+                  awk '/\/dev\/[^(md)]/ {print $7}'` ; do
-+              list="$list $device"
-+          done
-+          echo $list
-+          return 0
-+      fi
-+    ;;
-+    esac
-+    echo $source_device
-+    return 0
-+}
-+
-+# Usage: stat_device file
-+# Find major:minor of a device node.
-+stat_device() {
-+    majmin=`stat -c "%t:%T" "$1" 2>/dev/null`
-+    if test -z "$majmin"; then
-+      echo "Could not find device for $1" 1>&2
-+      exit 1
-+    fi
-+
-+    echo "$majmin"
-+}
-+
-+# Usage: find_mapper_device file
-+# Find a file in /dev/mapper with the same major:minor as the specified node.
-+find_mapper_device() {
-+    if [ -b "$1" ]; then
-+      dev="$1"
-+    else
-+      mntpnt=`echo "$1" | sed 's,/,\\\\/,g'`
-+      dev=`awk '($2 ~ /'$mntpnt'/) { print $1 }' /etc/mtab`
-+    fi
-+    if test -z "$dev"; then
-+      echo "Could not find device for $1" 1>&2
-+      exit 1
-+    fi
-+      
-+    majmin=`stat_device $dev`
-+    for x in /dev/mapper/* ; do
-+      devmajmin=`stat_device "$x"`
-+      if [ "$majmin" == "$devmajmin" ]; then
-+          echo "$x"
-+          return 0
-+      fi
-+    done
-+    return 1
-+}
-+
- # Usage: find_device file
- # Find block device on which the file resides.
- find_device () {
-@@ -219,15 +308,55 @@ find_device () {
-     tmp_fname=`df $1/ | sed -n 's%.*\(/dev/[^         ]*\).*%\1%p'`
-     if test -z "$tmp_fname"; then
--      echo "Could not find device for $1" 2>&1
-+      echo "Could not find device for $1" 1>&2
-       exit 1
-     fi
--      tmp_fname=`resolve_symlink $tmp_fname`
-+    ret_fname=`resolve_symlink $tmp_fname` || exit 1
-+    tmp_fname=`find_mapper_device $ret_fname`
-+    if test -n "$tmp_fname"; then
-+      ret_fname="$tmp_fname"
-+    fi
-+
-+    echo "$ret_fname"
-+    return 0
-+}
-+
-+copy_images() {
-+    # Copy the GRUB images to the GRUB directory.
-+    for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do
-+      rm -f $file || exit 1
-+    done
-+    for file in \
-+      ${pkgdatadir}/stage1 ${pkgdatadir}/stage2 ${pkgdatadir}/*stage1_5; do
-+      cp -f $file ${grubdir} 1>&2 || exit 1
-+    done
-+}
-+
-+
-+dump_boot_block () {
-+    sync
-+    $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
-+dump ${root_drive}${tmp} ${img_file}
-+quit
-+EOF
-+}
-+
-+
-+install_boot_block () {
-+    # Before all invocations of the grub shell, call sync to make sure
-+    # the raw device is in sync with any bufferring in filesystems.
-+    sync
--    echo "$tmp_fname"
-+    # Now perform the installation.
-+    $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >>$log_file
-+root $1
-+setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $2
-+quit
-+EOF
- }
-+
- # Check the arguments.
- for option in "$@"; do
-     case "$option" in
-@@ -247,6 +376,8 @@ for option in "$@"; do
-       force_lba="--force-lba" ;;
-     --recheck)
-       recheck=yes ;;
-+    --just-copy)
-+        justcopy=yes ;;
-     # This is an undocumented feature...
-     --debug)
-       debug=yes ;;
-@@ -265,12 +396,6 @@ for option in "$@"; do
-     esac
- done
--if test "x$install_device" = x; then
--    echo "install_device not specified." 1>&2
--    usage
--    exit 1
--fi
--
- # If the debugging feature is enabled, print commands.
- if test $debug = yes; then
-     set -x
-@@ -293,6 +418,26 @@ esac
- grubdir=${bootdir}/grub
- device_map=${grubdir}/device.map
-+if [ "$recheck" == "yes" ]; then
-+    if grep 'mapper' ${device_map} >/dev/null; then
-+      echo 'grub-install does not support reprobing of device.map when' 1>&2
-+      echo 'using a device-mapper based boot device.' 1>&2
-+      exit 1
-+    fi
-+fi
-+
-+# if they just want the images copied, copy the images and then exit
-+if test $justcopy = yes; then
-+    copy_images
-+    exit 0
-+fi
-+
-+if test "x$install_device" = x; then
-+    echo "install_device not specified." 1>&2
-+    usage
-+    exit 1
-+fi
-+
- # Check if GRUB is installed.
- # This is necessary, because the user can specify "grub --read-only".
- set $grub_shell dummy
-@@ -303,17 +448,17 @@ else
-     exit 1
- fi
--if test -f "$pkglibdir/stage1"; then
-+if test -f "$pkgdatadir/stage1"; then
-     :
- else
--    echo "${pkglibdir}/stage1: Not found." 1>&2
-+    echo "${pkgdatadir}/stage1: Not found." 1>&2
-     exit 1
- fi
--if test -f "$pkglibdir/stage2"; then
-+if test -f "$pkgdatadir/stage2"; then
-     :
- else
--    echo "${pkglibdir}/stage2: Not found." 1>&2
-+    echo "${pkgdatadir}/stage2: Not found." 1>&2
-     exit 1
- fi
-@@ -324,9 +469,11 @@ fi
- test -d "$bootdir" || mkdir "$bootdir" || exit 1
- test -d "$grubdir" || mkdir "$grubdir" || exit 1
-+copy_images
-+
- # If --recheck is specified, remove the device map, if present.
- if test $recheck = yes; then
--    rm -f $device_map
-+    mv $device_map ${device_map}.backup
- fi
- # Create the device map file if it is not present.
-@@ -336,6 +483,10 @@ else
-     # Create a safe temporary file.
-     test -n "$mklog" && log_file=`$mklog`
-+    # Before all invocations of the grub shell, call sync to make sure
-+    # the raw device is in sync with any bufferring in filesystems.
-+    sync
-+ 
-     $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
- quit
- EOF
-@@ -351,34 +502,60 @@ fi
- tmp=`sed -n '/^([fh]d[0-9]*)/s/\(^(.*)\).*/\1/p' $device_map \
-     | sort | uniq -d | sed -n 1p`
- if test -n "$tmp"; then
--    echo "The drive $tmp is defined multiple times in the device map $device_map" 1>&2
-+    echo "The drive $tmp is defined multiple times in the new device map." 1>&2
-+    if test $recheck = yes; then
-+        echo "Reverting to backed up copy." 1>&2
-+        mv ${device_map}.backup $device_map
-+    fi
-+    exit 1
-+fi
-+
-+# Make sure device.map has at least one hd device
-+grep -q "^(hd[0-9]\+)" $device_map
-+if [ "x$?" != "x0" ]; then
-+    echo "No suitable drive was found in the generated device map." 1>&2
-+    if test $recheck = yes; then
-+        echo "Reverting to backed up copy." 1>&2
-+        mv ${device_map}.backup $device_map
-+    fi
-     exit 1
- fi
- # Check for INSTALL_DEVICE.
- case "$install_device" in
- /dev/*)
--    install_device=`resolve_symlink "$install_device"`
--    install_drive=`convert "$install_device"`
--    # I don't know why, but some shells wouldn't die if exit is
--    # called in a function.
--    if test "x$install_drive" = x; then
-+    install_device=`resolve_symlink "$install_device"` || exit 1
-+    for install_drive in `find_real_devs $install_device` ; do
-+      install_drive=`convert $install_drive` || exit 1
-+      if is_raid1_device $install_device; then
-+              install_drive=`echo $install_drive | sed 's/,[0-9]*)/)/'`
-+      fi
-+      if [ "x$install_drive" = "x" ]; then
-+          exit 1
-+      fi
-+      install_drives="${install_drives} ${install_drive}"
-+    done
-+    unset install_drive
-+      
-+    if test "x$install_drives" = x ; then
-       exit 1
-     fi ;;
- \([hf]d[0-9]*\))
--    install_drive="$install_device" ;;
-+    install_drives="$install_device" ;;
- [hf]d[0-9]*)
-     # The GRUB format with no parenthesis.
--    install_drive="($install_device)" ;;
-+    install_drives="($install_device)" ;;
- *)
-     echo "Format of install_device not recognized." 1>&2
-     usage
-     exit 1 ;;
- esac
-+unset install_device
-+
- # Get the root drive.
--root_device=`find_device ${rootdir}`
--bootdir_device=`find_device ${bootdir}`
-+root_device=`find_device ${rootdir}` || exit 1
-+bootdir_device=`find_device ${bootdir}` || exit 1
- # Check if the boot directory is in the same device as the root directory.
- if test "x$root_device" != "x$bootdir_device"; then
-@@ -387,15 +564,8 @@ if test "x$root_device" != "x$bootdir_device"; then
-     grub_prefix="/grub"
- fi
--# Convert the root device to a GRUB drive.
--root_drive=`convert "$root_device"`
--if test "x$root_drive" = x; then
--    exit 1
--fi
--
--# Check if the root directory exists in the same device as the grub
--# directory.
--grubdir_device=`find_device ${grubdir}`
-+# Check if the root directory exists in the same device as the grub directory.
-+grubdir_device=`find_device ${grubdir}` || exit 1
- if test "x$grubdir_device" != "x$root_device"; then
-     # For now, cannot deal with this situation.
-@@ -406,61 +576,71 @@ EOF
-     exit 1
- fi
--# Copy the GRUB images to the GRUB directory.
--for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do
--    rm -f $file || exit 1
--done
--for file in \
--    ${pkglibdir}/stage1 ${pkglibdir}/stage2 ${pkglibdir}/*stage1_5; do
--    cp -f $file ${grubdir} || exit 1
--done
--
--# Make a default file.
--${grub_set_default} --root-directory=${rootdir} default
--
- # Make sure that GRUB reads the same images as the host OS.
- test -n "$mkimg" && img_file=`$mkimg`
- test -n "$mklog" && log_file=`$mklog`
-+# There's not a real root device, so just pick the first
-+if is_raid1_device $root_device ; then
-+    root_device=`find_real_devs $root_device | awk '{print $1}'`
-+fi
-+
-+# Convert the root deviceto a GRUB drive.
-+root_drive=`convert "$root_device"` || exit 1
-+if [ "x$root_drive" = x ]; then
-+    exit 1
-+fi
-+
- for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do
-     count=5
-     tmp=`echo $file | sed "s|^${grubdir}|${grub_prefix}|"`
-     while test $count -gt 0; do
--      $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
--dump ${root_drive}${tmp} ${img_file}
--quit
--EOF
--      if grep "Error [0-9]*: " $log_file >/dev/null; then
--          :
--      elif cmp $file $img_file >/dev/null; then
--          break
--      fi
--      sleep 1
--      count=`expr $count - 1`    
-+        dump_boot_block $root_drive $img_file
-+        if grep "Error [0-9]*: " $log_file >/dev/null; then
-+            :
-+        else
-+            # Use sha1sum instead of cmp to avoid a dependency on diffutils.
-+            sha1=`sha1sum $file | cut -d' ' -f 1`
-+            sha2=`sha1sum $img_file | cut -d' ' -f 1`
-+            if test -f $file -a -f $img_file -a "$sha1" = "$sha2"; then
-+                break
-+            fi
-+        fi
-+        sleep 1
-+        count=`expr $count - 1`    
-     done
-     if test $count -eq 0; then
--      echo "The file $file not read correctly." 1>&2
--      exit 1
-+        echo "The file $file not read correctly." 1>&2
-+        exit 1
-     fi
- done
- rm -f $img_file
- rm -f $log_file
-+if ! test -e ${grubdir}/grub.conf ; then
-+    test -e ${grubdir}/menu.lst && ln -s ./menu.lst ${grubdir}/grub.conf
-+fi
-+
- # Create a safe temporary file.
- test -n "$mklog" && log_file=`$mklog`
--# Now perform the installation.
--$grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
--root $root_drive
--setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $install_drive
--quit
--EOF
-+for install_drive in $install_drives; do 
-+    # Convert the root deviceto a GRUB drive.
-+    root_drive=`convert "$root_device"` || exit 1
-+    if [ "x$root_drive" = x ]; then
-+      exit 1
-+    fi
-+    install_boot_block $root_drive $install_drive
-+done
--if grep "Error [0-9]*: " $log_file >/dev/null || test $debug = yes; then
-+if grep "Error [0-9]*: " $log_file >/dev/null ; then
-     cat $log_file 1>&2
-     exit 1
- fi
-+if test $debug = yes; then
-+    cat $log_file 1>&2
-+fi
- rm -f $log_file
diff --git a/src/patches/grub-gentoo-14.patch b/src/patches/grub-gentoo-14.patch
new file mode 100644 (file)
index 0000000..d2bb959
--- /dev/null
@@ -0,0 +1,16087 @@
+diff -Nur grub-0.97/acinclude.m4 grub-0.97-patched/acinclude.m4
+--- grub-0.97/acinclude.m4     2004-04-27 22:48:06.000000000 +0200
++++ grub-0.97-patched/acinclude.m4     2012-11-11 17:07:12.710729053 +0100
+@@ -57,7 +57,7 @@
+ fi
+ grub_cv_prog_objcopy_absolute=yes
+ for link_addr in 2000 8000 7C00; do
+-  if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec]); then :
++  if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} ${LDFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec]); then :
+   else
+     AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr])
+   fi
+diff -Nur grub-0.97/ChangeLog grub-0.97-patched/ChangeLog
+--- grub-0.97/ChangeLog        2005-05-08 04:47:02.000000000 +0200
++++ grub-0.97-patched/ChangeLog        2012-11-11 17:07:12.708728989 +0100
+@@ -1,3 +1,127 @@
++2008-05-20  Robert Millan  <rmh@aybabtu.com>
++
++      * netboot/cs89x0.c: Fix license violation.
++      * netboot/cs89x0.h: Likewise.
++
++2008-04-10  Pavel Roskin  <proski@gnu.org>
++
++      * configure.ac: Always use "_cv_" in cache variables for
++      compatibility with Autoconf 2.62.
++
++2008-03-28  Robert Millan  <rmh@aybabtu.com>
++
++      Surpass 1 TiB disk addressing limit.  Note: there are no plans to handle
++      the 2 TiB disk limit in GRUB Legacy, since that would need considerable
++      rework.  If you have >2TiB disks, use GRUB 2 instead.
++
++      * grub/asmstub.c (biosdisk): Add unsigned qualifier to `sector'.
++      * stage2/bios.c (biosdisk): Likewise.
++      * stage2/disk_io.c (rawread, devread, rawwrite, devwrite): Likewise.
++      * stage2/shared.h (rawread, devread, rawwrite, devwrite): Likewise.
++      * lib/device.c (get_drive_geometry): Replace BLKGETSIZE with
++      BLKGETSIZE64.
++
++2007-10-29  Pavel Roskin  <proski@gnu.org>
++
++      * configure.ac: Test if '--build-id=none' is supported by the
++      linker and add it to LDFLAGS if possible.  Build ID causes
++      objcopy to generate huge binary files.
++      * aclocal.m4 (grub_PROG_OBJCOPY_ABSOLUTE): Use LDFLAGS when
++      linking, so that build ID doesn't break the test.
++      * stage1/Makefile.am: Preserve LDFLAGS, use stage1_exec_LDFLAGS.
++
++2007-02-22  Pavel Roskin  <proski@gnu.org>
++
++      * stage2/iso9660.h: Remove unnecessary packed attributes.
++
++2007-02-22  Robert Millan  <rmh@aybabtu.com>
++
++      * util/mkbimage: Update my email address, and remove my name from
++      some places where unnecessary credit is given.
++
++2006-09-10  Pavel Roskin  <proski@gnu.org>
++
++      * netboot/natsemi.c: Fix compile error with gcc 4.1.1.  Cast
++      cannot make a variable volatile - it should be declared as such.
++      * netboot/sis900.c: Likewise.
++
++2006-09-08  Pavel Roskin  <proski@gnu.org>
++
++      * netboot/etherboot.h: Remove incorrect extern declarations of
++      the variables later declared static.  Move BOOTP_DATA_ADDR ...
++      * netboot/main.c: ... here.  Eliminate end_of_rfc1533 - it's
++      write-only.
++
++2006-06-24  Yoshinori K. Okuji  <okuji@enbug.org>
++
++      * docs/grub.texi: Changed the license term to the GNU Free
++      Documentation License 1.2.
++
++      * docs/multiboot.texi: Reformatted to show the license term
++      and the version number explicitly.
++      
++      * docs/fdl.texi: New file.
++      
++      * docs/Makefile.am (grub_TEXINFOS): Added fdl.texi.
++
++2006-06-24  Robert Millan  <robertmh@gnu.org>
++
++      * lib/device.c (write_to_partition): /dev/ataraid/ and /dev/rd/
++      partitions have a "p" prefix.  Add it.
++
++2006-06-24  Robert Millan  <robertmh@gnu.org>
++
++      * lib/device.c (get_i2o_disk_name): New function.
++      (init_device_map) [__linux__]: Add support for I2O devices.
++
++2006-05-02  Pavel Roskin  <proski@gnu.org>
++
++      * stage2/stage2.c (run_menu): Fix "savedefault" to save only top
++      level menu positions.  Remember current position when calling a
++      submenu.  Don't recalculate it when booting from a submenu.
++
++      * grub/main.c (main): Make sure the boot drive number doesn't
++      exceed 255.
++
++2006-05-02  Vesa Jaaskelainen  <chaac@nic.fi>
++
++      * stage2/shared.h (vbe_mode): Back ported aligment fix from GRUB 2
++      to GRUB Legacy.  Problem reported by Gerardo Richarte.
++
++2006-04-23  Robert Millan  <robertmh@gnu.org>
++
++      * grub/asmstub.c (get_diskinfo): Optimize sysctl routine.
++
++2006-04-20  Robert Millan  <robertmh@gnu.org>
++
++      Fixes for kernel of FreeBSD:
++      * grub/asmstub.c (get_diskinfo): Toggle "kern.geom.debugflags" sysctl
++      before opening a device for writing.
++      * util/grub-install.in: Devices don't have this "r" prefix anymore.
++
++2006-04-16  Yoshinori K. Okuji  <okuji@enbug.org>
++
++      * docs/multiboot.texi: Correct the offset of address
++      fields. Reported by Jeroen Dekkers.
++
++2006-03-21  Yoshinori K. Okuji  <okuji@enbug.org>
++
++      * stage2/builtins.c (setup_func): Specify the size of DEVICE to
++      grub_strncat instead of a strange number 256. Reported by Vitaly
++      Fertman <vitaly@namesys.com>.
++
++2005-09-29  Yoshinori K. Okuji  <okuji@enbug.org>
++
++      * docs/multiboot.texi: Fix a bug in the byte order of
++      boot_device. I hope this won't affect any OS image.
++      Increased the version number to 0.6.94.
++
++2005-09-28  Yoshinori K. Okuji  <okuji@enbug.org>
++
++      * stage2/boot.c (load_image): Even if an OS image is an ELF
++      object, use the a.out kludge if MULTIBOOT_AOUT_KLUDGE is
++      specified.
++
+ 2005-05-08  Yoshinori K. Okuji  <okuji@enbug.org>
+       * configure.ac (AC_INIT): Upgraded to 0.97.
+diff -Nur grub-0.97/configure.ac grub-0.97-patched/configure.ac
+--- grub-0.97/configure.ac     2005-05-08 04:36:03.000000000 +0200
++++ grub-0.97-patched/configure.ac     2012-11-11 17:07:12.752730394 +0100
+@@ -21,8 +21,12 @@
+ AC_CANONICAL_HOST
+ case "$host_cpu" in
+-i[[3456]]86) host_cpu=i386 ;;
+-x86_64) host_cpu=x86_64 ;;
++i[[3456]]86)
++  STAGE_MARCH="-march=$host_cpu"
++  host_cpu=i386 ;;
++x86_64)
++  STAGE_MARCH="-march=i686"
++  host_cpu=x86_64 ;;
+ *) AC_MSG_ERROR([unsupported CPU type]) ;;
+ esac
+@@ -56,12 +60,7 @@
+ AC_CHECK_TOOL(CC, gcc)
+ AC_PROG_CC
+-# We need this for older versions of Autoconf.
+-_AM_DEPENDENCIES(CC)
+-
+-dnl Because recent automake complains about AS, set it here.
+-CCAS="$CC"
+-AC_SUBST(CCAS)
++AM_PROG_AS
+ AC_ARG_WITH(binutils,
+   [  --with-binutils=DIR     search the directory DIR to find binutils])
+@@ -86,13 +85,13 @@
+     fi
+     STAGE1_CFLAGS="-O2"
+     GRUB_CFLAGS="-O2"
+-    AC_CACHE_CHECK([whether optimization for size works], size_flag, [
++    AC_CACHE_CHECK([whether optimization for size works], grub_cv_cc_Os, [
+       saved_CFLAGS=$CFLAGS
+       CFLAGS="-Os -g"
+-      AC_TRY_COMPILE(, , size_flag=yes, size_flag=no)
++      AC_TRY_COMPILE(, , grub_cv_cc_Os=yes, grub_cv_cc_Os=no)
+       CFLAGS=$saved_CFLAGS
+     ])
+-    if test "x$size_flag" = xyes; then
++    if test "x$grub_cv_cc_Os" = xyes; then
+       STAGE2_CFLAGS="-Os"
+     else
+       STAGE2_CFLAGS="-O2 -fno-strength-reduce -fno-unroll-loops"
+@@ -100,21 +99,38 @@
+     # OpenBSD has a GCC extension for protecting applications from
+     # stack smashing attacks, but GRUB doesn't want this feature.
+     AC_CACHE_CHECK([whether gcc has -fno-stack-protector],
+-                 no_stack_protector_flag, [
++                 grub_cv_cc_no_stack_protector, [
+       saved_CFLAGS=$CFLAGS
+       CFLAGS="-fno-stack-protector"
+       AC_TRY_COMPILE(,
+                    ,
+-                   no_stack_protector_flag=yes,
+-                   no_stack_protector_flag=no)
++                   grub_cv_cc_no_stack_protector=yes,
++                   grub_cv_cc_no_stack_protector=no)
+       CFLAGS=$saved_CFLAGS
+     ])
+-    if test "x$no_stack_protector_flag" = xyes; then
++    if test "x$grub_cv_cc_no_stack_protector" = xyes; then
+       STAGE2_CFLAGS="$STAGE2_CFLAGS -fno-stack-protector"
+     fi
++    # Position Independent Executables, but GRUB doesn't want this feature.
++    AC_CACHE_CHECK([whether gcc has -fPIE on as default], grub_cv_cc_fpie, [
++      AC_TRY_COMPILE(,[
++              #if ! defined (__PIC__) || ! defined (__PIE__)
++              #error
++              #endif
++              ],
++            grub_cv_cc_fpie=yes,
++            grub_cv_cc_fpie=no)
++    ])
++    if test "x$grub_cv_cc_fpie" = xyes; then
++      STAGE1_CFLAGS="$STAGE1_CFLAGS -nopie"
++      STAGE2_CFLAGS="$STAGE2_CFLAGS -nopie"
++    fi
+   fi
+ fi
++STAGE1_CFLAGS="$STAGE1_CFLAGS -fno-strict-aliasing $STAGE_MARCH"
++STAGE2_CFLAGS="$STAGE2_CFLAGS -fno-strict-aliasing $STAGE_MARCH"
++GRUB_CFLAGS="$GRUB_CFLAGS -fno-strict-aliasing"
+ AC_SUBST(STAGE1_CFLAGS)
+ AC_SUBST(STAGE2_CFLAGS)
+ AC_SUBST(GRUB_CFLAGS)
+@@ -123,33 +139,44 @@
+ CPPFLAGS="$CPPFLAGS -Wall -Wmissing-prototypes -Wunused -Wshadow"
+ CPPFLAGS="$CPPFLAGS -Wpointer-arith"
+-AC_CACHE_CHECK([whether -Wundef works], undef_flag, [
++AC_CACHE_CHECK([whether -Wundef works], grub_cv_cc_Wundef, [
+   saved_CPPFLAGS="$CPPFLAGS"
+   CPPFLAGS="-Wundef"
+-  AC_TRY_COMPILE(, , undef_flag=yes, undef_flag=no)
++  AC_TRY_COMPILE(, , grub_cv_cc_Wundef=yes, grub_cv_cc_Wundef=no)
+   CPPFLAGS="$saved_CPPFLAGS"
+ ])
+ # The options `-falign-*' are supported by gcc 3.0 or later.
+ # Probably it is sufficient to only check for -falign-loops.
+-AC_CACHE_CHECK([whether -falign-loops works], [falign_loop_flag], [
++AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
+   saved_CPPFLAGS="$CPPFLAGS"
+   CPPFLAGS="-falign-loops=1"
+-  AC_TRY_COMPILE(, , [falign_loop_flag=yes], [falign_loop_flag=no])
++  AC_TRY_COMPILE(, , [grub_cv_cc_falign_loop=yes], [grub_cv_cc_falign_loop=no])
+   CPPFLAGS="$saved_CPPFLAGS"
+ ])
+ # Force no alignment to save space.
+-if test "x$falign_loop_flag" = xyes; then
++if test "x$grub_cv_cc_falign_loop" = xyes; then
+   CPPFLAGS="$CPPFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1"
+ else
+   CPPFLAGS="$CPPFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1"
+ fi
+-if test "x$undef_flag" = xyes; then
++if test "x$grub_cv_cc_Wundef" = xyes; then
+   CPPFLAGS="$CPPFLAGS -Wundef"
+ fi
++# Check if build ID can be disabled in the linker
++AC_MSG_CHECKING([whether linker accepts `--build-id=none'])
++save_LDFLAGS="$LDFLAGS"
++LDFLAGS="$LDFLAGS -Wl,--build-id=none"
++AC_TRY_LINK(, , build_id_flag=yes, build_id_flag=no)
++AC_MSG_RESULT([$build_id_flag])
++LDFLAGS="$save_LDFLAGS"
++if test "x$build_id_flag" = xyes; then
++  LDFLAGS="$LDFLAGS -Wl,--build-id=none"
++fi
++
+ if test "x$with_binutils" != x; then
+ dnl  AC_PATH_TOOL(OBJCOPY, objcopy, , "$with_binutils:$PATH")
+   AC_PATH_PROG(OBJCOPY, objcopy, , "$with_binutils:$PATH")
+@@ -595,6 +622,11 @@
+   [  --enable-diskless       enable diskless support])
+ AM_CONDITIONAL(DISKLESS_SUPPORT, test "x$enable_diskless" = xyes)
++dnl Graphical splashscreen support
++AC_ARG_ENABLE(graphics,
++  [  --disable-graphics      disable graphics terminal support])
++AM_CONDITIONAL(GRAPHICS_SUPPORT, test "x$enable_graphics" != xno)
++
+ dnl Hercules terminal
+ AC_ARG_ENABLE(hercules,
+   [  --disable-hercules      disable hercules terminal support])
+diff -Nur grub-0.97/docs/fdl.texi grub-0.97-patched/docs/fdl.texi
+--- grub-0.97/docs/fdl.texi    1970-01-01 01:00:00.000000000 +0100
++++ grub-0.97-patched/docs/fdl.texi    2012-11-11 17:07:12.712729117 +0100
+@@ -0,0 +1,452 @@
++
++@node GNU Free Documentation License
++@appendixsec GNU Free Documentation License
++
++@cindex FDL, GNU Free Documentation License
++@center Version 1.2, November 2002
++
++@display
++Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.
++51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
++
++Everyone is permitted to copy and distribute verbatim copies
++of this license document, but changing it is not allowed.
++@end display
++
++@enumerate 0
++@item
++PREAMBLE
++
++The purpose of this License is to make a manual, textbook, or other
++functional and useful document @dfn{free} in the sense of freedom: to
++assure everyone the effective freedom to copy and redistribute it,
++with or without modifying it, either commercially or noncommercially.
++Secondarily, this License preserves for the author and publisher a way
++to get credit for their work, while not being considered responsible
++for modifications made by others.
++
++This License is a kind of ``copyleft'', which means that derivative
++works of the document must themselves be free in the same sense.  It
++complements the GNU General Public License, which is a copyleft
++license designed for free software.
++
++We have designed this License in order to use it for manuals for free
++software, because free software needs free documentation: a free
++program should come with manuals providing the same freedoms that the
++software does.  But this License is not limited to software manuals;
++it can be used for any textual work, regardless of subject matter or
++whether it is published as a printed book.  We recommend this License
++principally for works whose purpose is instruction or reference.
++
++@item
++APPLICABILITY AND DEFINITIONS
++
++This License applies to any manual or other work, in any medium, that
++contains a notice placed by the copyright holder saying it can be
++distributed under the terms of this License.  Such a notice grants a
++world-wide, royalty-free license, unlimited in duration, to use that
++work under the conditions stated herein.  The ``Document'', below,
++refers to any such manual or work.  Any member of the public is a
++licensee, and is addressed as ``you''.  You accept the license if you
++copy, modify or distribute the work in a way requiring permission
++under copyright law.
++
++A ``Modified Version'' of the Document means any work containing the
++Document or a portion of it, either copied verbatim, or with
++modifications and/or translated into another language.
++
++A ``Secondary Section'' is a named appendix or a front-matter section
++of the Document that deals exclusively with the relationship of the
++publishers or authors of the Document to the Document's overall
++subject (or to related matters) and contains nothing that could fall
++directly within that overall subject.  (Thus, if the Document is in
++part a textbook of mathematics, a Secondary Section may not explain
++any mathematics.)  The relationship could be a matter of historical
++connection with the subject or with related matters, or of legal,
++commercial, philosophical, ethical or political position regarding
++them.
++
++The ``Invariant Sections'' are certain Secondary Sections whose titles
++are designated, as being those of Invariant Sections, in the notice
++that says that the Document is released under this License.  If a
++section does not fit the above definition of Secondary then it is not
++allowed to be designated as Invariant.  The Document may contain zero
++Invariant Sections.  If the Document does not identify any Invariant
++Sections then there are none.
++
++The ``Cover Texts'' are certain short passages of text that are listed,
++as Front-Cover Texts or Back-Cover Texts, in the notice that says that
++the Document is released under this License.  A Front-Cover Text may
++be at most 5 words, and a Back-Cover Text may be at most 25 words.
++
++A ``Transparent'' copy of the Document means a machine-readable copy,
++represented in a format whose specification is available to the
++general public, that is suitable for revising the document
++straightforwardly with generic text editors or (for images composed of
++pixels) generic paint programs or (for drawings) some widely available
++drawing editor, and that is suitable for input to text formatters or
++for automatic translation to a variety of formats suitable for input
++to text formatters.  A copy made in an otherwise Transparent file
++format whose markup, or absence of markup, has been arranged to thwart
++or discourage subsequent modification by readers is not Transparent.
++An image format is not Transparent if used for any substantial amount
++of text.  A copy that is not ``Transparent'' is called ``Opaque''.
++
++Examples of suitable formats for Transparent copies include plain
++@sc{ascii} without markup, Texinfo input format, La@TeX{} input
++format, @acronym{SGML} or @acronym{XML} using a publicly available
++@acronym{DTD}, and standard-conforming simple @acronym{HTML},
++PostScript or @acronym{PDF} designed for human modification.  Examples
++of transparent image formats include @acronym{PNG}, @acronym{XCF} and
++@acronym{JPG}.  Opaque formats include proprietary formats that can be
++read and edited only by proprietary word processors, @acronym{SGML} or
++@acronym{XML} for which the @acronym{DTD} and/or processing tools are
++not generally available, and the machine-generated @acronym{HTML},
++PostScript or @acronym{PDF} produced by some word processors for
++output purposes only.
++
++The ``Title Page'' means, for a printed book, the title page itself,
++plus such following pages as are needed to hold, legibly, the material
++this License requires to appear in the title page.  For works in
++formats which do not have any title page as such, ``Title Page'' means
++the text near the most prominent appearance of the work's title,
++preceding the beginning of the body of the text.
++
++A section ``Entitled XYZ'' means a named subunit of the Document whose
++title either is precisely XYZ or contains XYZ in parentheses following
++text that translates XYZ in another language.  (Here XYZ stands for a
++specific section name mentioned below, such as ``Acknowledgements'',
++``Dedications'', ``Endorsements'', or ``History''.)  To ``Preserve the Title''
++of such a section when you modify the Document means that it remains a
++section ``Entitled XYZ'' according to this definition.
++
++The Document may include Warranty Disclaimers next to the notice which
++states that this License applies to the Document.  These Warranty
++Disclaimers are considered to be included by reference in this
++License, but only as regards disclaiming warranties: any other
++implication that these Warranty Disclaimers may have is void and has
++no effect on the meaning of this License.
++
++@item
++VERBATIM COPYING
++
++You may copy and distribute the Document in any medium, either
++commercially or noncommercially, provided that this License, the
++copyright notices, and the license notice saying this License applies
++to the Document are reproduced in all copies, and that you add no other
++conditions whatsoever to those of this License.  You may not use
++technical measures to obstruct or control the reading or further
++copying of the copies you make or distribute.  However, you may accept
++compensation in exchange for copies.  If you distribute a large enough
++number of copies you must also follow the conditions in section 3.
++
++You may also lend copies, under the same conditions stated above, and
++you may publicly display copies.
++
++@item
++COPYING IN QUANTITY
++
++If you publish printed copies (or copies in media that commonly have
++printed covers) of the Document, numbering more than 100, and the
++Document's license notice requires Cover Texts, you must enclose the
++copies in covers that carry, clearly and legibly, all these Cover
++Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
++the back cover.  Both covers must also clearly and legibly identify
++you as the publisher of these copies.  The front cover must present
++the full title with all words of the title equally prominent and
++visible.  You may add other material on the covers in addition.
++Copying with changes limited to the covers, as long as they preserve
++the title of the Document and satisfy these conditions, can be treated
++as verbatim copying in other respects.
++
++If the required texts for either cover are too voluminous to fit
++legibly, you should put the first ones listed (as many as fit
++reasonably) on the actual cover, and continue the rest onto adjacent
++pages.
++
++If you publish or distribute Opaque copies of the Document numbering
++more than 100, you must either include a machine-readable Transparent
++copy along with each Opaque copy, or state in or with each Opaque copy
++a computer-network location from which the general network-using
++public has access to download using public-standard network protocols
++a complete Transparent copy of the Document, free of added material.
++If you use the latter option, you must take reasonably prudent steps,
++when you begin distribution of Opaque copies in quantity, to ensure
++that this Transparent copy will remain thus accessible at the stated
++location until at least one year after the last time you distribute an
++Opaque copy (directly or through your agents or retailers) of that
++edition to the public.
++
++It is requested, but not required, that you contact the authors of the
++Document well before redistributing any large number of copies, to give
++them a chance to provide you with an updated version of the Document.
++
++@item
++MODIFICATIONS
++
++You may copy and distribute a Modified Version of the Document under
++the conditions of sections 2 and 3 above, provided that you release
++the Modified Version under precisely this License, with the Modified
++Version filling the role of the Document, thus licensing distribution
++and modification of the Modified Version to whoever possesses a copy
++of it.  In addition, you must do these things in the Modified Version:
++
++@enumerate A
++@item
++Use in the Title Page (and on the covers, if any) a title distinct
++from that of the Document, and from those of previous versions
++(which should, if there were any, be listed in the History section
++of the Document).  You may use the same title as a previous version
++if the original publisher of that version gives permission.
++
++@item
++List on the Title Page, as authors, one or more persons or entities
++responsible for authorship of the modifications in the Modified
++Version, together with at least five of the principal authors of the
++Document (all of its principal authors, if it has fewer than five),
++unless they release you from this requirement.
++
++@item
++State on the Title page the name of the publisher of the
++Modified Version, as the publisher.
++
++@item
++Preserve all the copyright notices of the Document.
++
++@item
++Add an appropriate copyright notice for your modifications
++adjacent to the other copyright notices.
++
++@item
++Include, immediately after the copyright notices, a license notice
++giving the public permission to use the Modified Version under the
++terms of this License, in the form shown in the Addendum below.
++
++@item
++Preserve in that license notice the full lists of Invariant Sections
++and required Cover Texts given in the Document's license notice.
++
++@item
++Include an unaltered copy of this License.
++
++@item
++Preserve the section Entitled ``History'', Preserve its Title, and add
++to it an item stating at least the title, year, new authors, and
++publisher of the Modified Version as given on the Title Page.  If
++there is no section Entitled ``History'' in the Document, create one
++stating the title, year, authors, and publisher of the Document as
++given on its Title Page, then add an item describing the Modified
++Version as stated in the previous sentence.
++
++@item
++Preserve the network location, if any, given in the Document for
++public access to a Transparent copy of the Document, and likewise
++the network locations given in the Document for previous versions
++it was based on.  These may be placed in the ``History'' section.
++You may omit a network location for a work that was published at
++least four years before the Document itself, or if the original
++publisher of the version it refers to gives permission.
++
++@item
++For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
++the Title of the section, and preserve in the section all the
++substance and tone of each of the contributor acknowledgements and/or
++dedications given therein.
++
++@item
++Preserve all the Invariant Sections of the Document,
++unaltered in their text and in their titles.  Section numbers
++or the equivalent are not considered part of the section titles.
++
++@item
++Delete any section Entitled ``Endorsements''.  Such a section
++may not be included in the Modified Version.
++
++@item
++Do not retitle any existing section to be Entitled ``Endorsements'' or
++to conflict in title with any Invariant Section.
++
++@item
++Preserve any Warranty Disclaimers.
++@end enumerate
++
++If the Modified Version includes new front-matter sections or
++appendices that qualify as Secondary Sections and contain no material
++copied from the Document, you may at your option designate some or all
++of these sections as invariant.  To do this, add their titles to the
++list of Invariant Sections in the Modified Version's license notice.
++These titles must be distinct from any other section titles.
++
++You may add a section Entitled ``Endorsements'', provided it contains
++nothing but endorsements of your Modified Version by various
++parties---for example, statements of peer review or that the text has
++been approved by an organization as the authoritative definition of a
++standard.
++
++You may add a passage of up to five words as a Front-Cover Text, and a
++passage of up to 25 words as a Back-Cover Text, to the end of the list
++of Cover Texts in the Modified Version.  Only one passage of
++Front-Cover Text and one of Back-Cover Text may be added by (or
++through arrangements made by) any one entity.  If the Document already
++includes a cover text for the same cover, previously added by you or
++by arrangement made by the same entity you are acting on behalf of,
++you may not add another; but you may replace the old one, on explicit
++permission from the previous publisher that added the old one.
++
++The author(s) and publisher(s) of the Document do not by this License
++give permission to use their names for publicity for or to assert or
++imply endorsement of any Modified Version.
++
++@item
++COMBINING DOCUMENTS
++
++You may combine the Document with other documents released under this
++License, under the terms defined in section 4 above for modified
++versions, provided that you include in the combination all of the
++Invariant Sections of all of the original documents, unmodified, and
++list them all as Invariant Sections of your combined work in its
++license notice, and that you preserve all their Warranty Disclaimers.
++
++The combined work need only contain one copy of this License, and
++multiple identical Invariant Sections may be replaced with a single
++copy.  If there are multiple Invariant Sections with the same name but
++different contents, make the title of each such section unique by
++adding at the end of it, in parentheses, the name of the original
++author or publisher of that section if known, or else a unique number.
++Make the same adjustment to the section titles in the list of
++Invariant Sections in the license notice of the combined work.
++
++In the combination, you must combine any sections Entitled ``History''
++in the various original documents, forming one section Entitled
++``History''; likewise combine any sections Entitled ``Acknowledgements'',
++and any sections Entitled ``Dedications''.  You must delete all
++sections Entitled ``Endorsements.''
++
++@item
++COLLECTIONS OF DOCUMENTS
++
++You may make a collection consisting of the Document and other documents
++released under this License, and replace the individual copies of this
++License in the various documents with a single copy that is included in
++the collection, provided that you follow the rules of this License for
++verbatim copying of each of the documents in all other respects.
++
++You may extract a single document from such a collection, and distribute
++it individually under this License, provided you insert a copy of this
++License into the extracted document, and follow this License in all
++other respects regarding verbatim copying of that document.
++
++@item
++AGGREGATION WITH INDEPENDENT WORKS
++
++A compilation of the Document or its derivatives with other separate
++and independent documents or works, in or on a volume of a storage or
++distribution medium, is called an ``aggregate'' if the copyright
++resulting from the compilation is not used to limit the legal rights
++of the compilation's users beyond what the individual works permit.
++When the Document is included in an aggregate, this License does not
++apply to the other works in the aggregate which are not themselves
++derivative works of the Document.
++
++If the Cover Text requirement of section 3 is applicable to these
++copies of the Document, then if the Document is less than one half of
++the entire aggregate, the Document's Cover Texts may be placed on
++covers that bracket the Document within the aggregate, or the
++electronic equivalent of covers if the Document is in electronic form.
++Otherwise they must appear on printed covers that bracket the whole
++aggregate.
++
++@item
++TRANSLATION
++
++Translation is considered a kind of modification, so you may
++distribute translations of the Document under the terms of section 4.
++Replacing Invariant Sections with translations requires special
++permission from their copyright holders, but you may include
++translations of some or all Invariant Sections in addition to the
++original versions of these Invariant Sections.  You may include a
++translation of this License, and all the license notices in the
++Document, and any Warranty Disclaimers, provided that you also include
++the original English version of this License and the original versions
++of those notices and disclaimers.  In case of a disagreement between
++the translation and the original version of this License or a notice
++or disclaimer, the original version will prevail.
++
++If a section in the Document is Entitled ``Acknowledgements'',
++``Dedications'', or ``History'', the requirement (section 4) to Preserve
++its Title (section 1) will typically require changing the actual
++title.
++
++@item
++TERMINATION
++
++You may not copy, modify, sublicense, or distribute the Document except
++as expressly provided for under this License.  Any other attempt to
++copy, modify, sublicense or distribute the Document is void, and will
++automatically terminate your rights under this License.  However,
++parties who have received copies, or rights, from you under this
++License will not have their licenses terminated so long as such
++parties remain in full compliance.
++
++@item
++FUTURE REVISIONS OF THIS LICENSE
++
++The Free Software Foundation may publish new, revised versions
++of the GNU Free Documentation License from time to time.  Such new
++versions will be similar in spirit to the present version, but may
++differ in detail to address new problems or concerns.  See
++@uref{http://www.gnu.org/copyleft/}.
++
++Each version of the License is given a distinguishing version number.
++If the Document specifies that a particular numbered version of this
++License ``or any later version'' applies to it, you have the option of
++following the terms and conditions either of that specified version or
++of any later version that has been published (not as a draft) by the
++Free Software Foundation.  If the Document does not specify a version
++number of this License, you may choose any version ever published (not
++as a draft) by the Free Software Foundation.
++@end enumerate
++
++@page
++@appendixsubsec ADDENDUM: How to use this License for your documents
++
++To use this License in a document you have written, include a copy of
++the License in the document and put the following copyright and
++license notices just after the title page:
++
++@smallexample
++@group
++  Copyright (C)  @var{year}  @var{your name}.
++  Permission is granted to copy, distribute and/or modify this document
++  under the terms of the GNU Free Documentation License, Version 1.2
++  or any later version published by the Free Software Foundation;
++  with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
++  Texts.  A copy of the license is included in the section entitled ``GNU
++  Free Documentation License''.
++@end group
++@end smallexample
++
++If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
++replace the ``with...Texts.'' line with this:
++
++@smallexample
++@group
++    with the Invariant Sections being @var{list their titles}, with
++    the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
++    being @var{list}.
++@end group
++@end smallexample
++
++If you have Invariant Sections without Cover Texts, or some other
++combination of the three, merge those two alternatives to suit the
++situation.
++
++If your document contains nontrivial examples of program code, we
++recommend releasing these examples in parallel under your choice of
++free software license, such as the GNU General Public License,
++to permit their use in free software.
++
++@c Local Variables:
++@c ispell-local-pdict: "ispell-dict"
++@c End:
++
+diff -Nur grub-0.97/docs/grub.8 grub-0.97-patched/docs/grub.8
+--- grub-0.97/docs/grub.8      2005-05-08 04:48:56.000000000 +0200
++++ grub-0.97-patched/docs/grub.8      2012-11-11 17:07:12.715729211 +0100
+@@ -1,5 +1,5 @@
+ .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.23.
+-.TH GRUB "8" "May 2005" "grub (GNU GRUB 0.97)" FSF
++.TH GRUB "8" "June 2006" "grub (GNU GRUB 0.97)" FSF
+ .SH NAME
+ grub \- the grub shell
+ .SH SYNOPSIS
+diff -Nur grub-0.97/docs/grub.8.additions grub-0.97-patched/docs/grub.8.additions
+--- grub-0.97/docs/grub.8.additions    1970-01-01 01:00:00.000000000 +0100
++++ grub-0.97-patched/docs/grub.8.additions    2012-11-11 17:07:12.702728798 +0100
+@@ -0,0 +1,3 @@
++[SEE ALSO]
++.BR update-grub (8),
++.BR grub-install (8).
+diff -Nur grub-0.97/docs/grub-install.8 grub-0.97-patched/docs/grub-install.8
+--- grub-0.97/docs/grub-install.8      2005-05-08 04:48:56.000000000 +0200
++++ grub-0.97-patched/docs/grub-install.8      2012-11-11 17:07:12.713729149 +0100
+@@ -1,5 +1,5 @@
+ .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.23.
+-.TH GRUB-INSTALL "8" "May 2005" "grub-install (GNU GRUB 0.97)" FSF
++.TH GRUB-INSTALL "8" "June 2006" "grub-install (GNU GRUB 0.97)" FSF
+ .SH NAME
+ grub-install \- install GRUB on your drive
+ .SH SYNOPSIS
+diff -Nur grub-0.97/docs/grub-install.8.additions grub-0.97-patched/docs/grub-install.8.additions
+--- grub-0.97/docs/grub-install.8.additions    1970-01-01 01:00:00.000000000 +0100
++++ grub-0.97-patched/docs/grub-install.8.additions    2012-11-11 17:07:12.703728829 +0100
+@@ -0,0 +1,3 @@
++[SEE ALSO]
++.BR grub (8),
++.BR update-grub (8).
+diff -Nur grub-0.97/docs/grub-md5-crypt.8 grub-0.97-patched/docs/grub-md5-crypt.8
+--- grub-0.97/docs/grub-md5-crypt.8    2005-05-08 04:48:56.000000000 +0200
++++ grub-0.97-patched/docs/grub-md5-crypt.8    2012-11-11 17:07:12.713729149 +0100
+@@ -1,5 +1,5 @@
+ .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.23.
+-.TH GRUB-MD5-CRYPT "8" "May 2005" "grub-md5-crypt (GNU GRUB )" FSF
++.TH GRUB-MD5-CRYPT "8" "June 2006" "grub-md5-crypt (GNU GRUB )" FSF
+ .SH NAME
+ grub-md5-crypt \- Encrypt a password in MD5 format
+ .SH SYNOPSIS
+diff -Nur grub-0.97/docs/grub-terminfo.8 grub-0.97-patched/docs/grub-terminfo.8
+--- grub-0.97/docs/grub-terminfo.8     2005-05-08 04:48:56.000000000 +0200
++++ grub-0.97-patched/docs/grub-terminfo.8     2012-11-11 17:07:12.714729180 +0100
+@@ -1,5 +1,5 @@
+ .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.23.
+-.TH GRUB-TERMINFO "8" "May 2005" "grub-terminfo (GNU GRUB 0.97)" FSF
++.TH GRUB-TERMINFO "8" "June 2006" "grub-terminfo (GNU GRUB 0.97)" FSF
+ .SH NAME
+ grub-terminfo \- Generate a terminfo command from a terminfo name
+ .SH SYNOPSIS
+diff -Nur grub-0.97/docs/grub.texi grub-0.97-patched/docs/grub.texi
+--- grub-0.97/docs/grub.texi   2005-05-08 04:59:59.000000000 +0200
++++ grub-0.97-patched/docs/grub.texi   2012-11-11 17:07:12.717729276 +0100
+@@ -2,22 +2,41 @@
+ @c -*-texinfo-*-
+ @c %**start of header
+ @setfilename grub.info
+-@settitle GRUB Manual
+-@c %**end of header
+-
+ @include version.texi
+-
++@settitle GNU GRUB Manual @value{VERSION}
+ @c Unify all our little indices for now.
+ @syncodeindex fn cp
+ @syncodeindex vr cp
+ @syncodeindex ky cp
+ @syncodeindex pg cp
+ @syncodeindex tp cp
++@c %**end of header
+ @footnotestyle separate
+ @paragraphindent 3
+ @finalout
++@copying
++This manual is for GNU GRUB (version @value{VERSION},
++@value{UPDATED}).
++
++Copyright @copyright{} 1999,2000,2001,2002,2004,2006 Free Software Foundation, Inc.
++
++@quotation
++Permission is granted to copy, distribute and/or modify this document
++under the terms of the GNU Free Documentation License, Version 1.2 or
++any later version published by the Free Software Foundation; with no
++Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,''
++and with the Back-Cover Texts as in (a) below.  A copy of the
++license is included in the section entitled ``GNU Free Documentation
++License.''
++
++(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify
++this GNU Manual, like GNU software.  Copies published by the Free
++Software Foundation raise funds for GNU development.''
++@end quotation
++@end copying
++
+ @dircategory Kernel
+ @direntry
+ * GRUB: (grub).                 The GRand Unified Bootloader
+@@ -34,53 +53,16 @@
+ @setchapternewpage odd
+-@ifinfo
+-Copyright @copyright{} 1999,2000,2001,2002,2004 Free Software Foundation, Inc.
+-
+-Permission is granted to make and distribute verbatim copies of
+-this manual provided the copyright notice and this permission notice
+-are preserved on all copies.
+-
+-@ignore
+-Permission is granted to process this file through TeX and print the
+-results, provided the printed document carries a copying permission
+-notice identical to this one except for the removal of this paragraph
+-(this paragraph not being relevant to the printed manual).
+-
+-@end ignore
+-
+-Permission is granted to copy and distribute modified versions of this
+-manual under the conditions for verbatim copying, provided also that
+-the entire resulting derived work is distributed under the terms of a
+-permission notice identical to this one.
+-
+-Permission is granted to copy and distribute translations of this manual
+-into another language, under the above conditions for modified versions.
+-@end ifinfo
+-
+ @titlepage
+ @sp 10
+-@title the GRUB manual
++@title the GNU GRUB manual
+ @subtitle The GRand Unified Bootloader, version @value{VERSION}, @value{UPDATED}.
+ @author Gordon Matzigkeit
+ @author Yoshinori K. Okuji
+ @c The following two commands start the copyright page.
+ @page
+ @vskip 0pt plus 1filll
+-Copyright @copyright{} 1999,2000,2001,2002,2004 Free Software Foundation, Inc.
+-
+-Permission is granted to make and distribute verbatim copies of
+-this manual provided the copyright notice and this permission notice
+-are preserved on all copies.
+-Permission is granted to copy and distribute modified versions of this
+-manual under the conditions for verbatim copying, provided that the entire
+-resulting derived work is distributed under the terms of a permission
+-notice identical to this one.
+-
+-Permission is granted to copy and distribute translations of this manual
+-into another language, under the above conditions for modified versions,
+-except that this permission notice may be stated in a translation approved
+-by Free Software Foundation.
++@insertcopying
+ @end titlepage
+ @c Output the table of contents at the beginning.
+@@ -91,12 +73,14 @@
+ @ifnottex
+ @node Top
+-@top GRUB manual
++@top GNU GRUB manual
+ This is the documentation of GNU GRUB, the GRand Unified Bootloader,
+ a flexible and powerful boot loader program for @sc{pc}s.
+ This edition documents version @value{VERSION}.
++
++@insertcopying
+ @end ifnottex
+ @menu
+@@ -124,6 +108,7 @@
+ * Reporting bugs::              Where you should send a bug report
+ * Future::                      Some future plans on GRUB
+ * Internals::                   Hacking GRUB
++* Copying This Manual::         Copying This Manual
+ * Index::
+ @end menu
+@@ -3965,6 +3950,16 @@
+ @include internals.texi
++@node Copying This Manual
++@appendix Copying This Manual
++
++@menu
++* GNU Free Documentation License::  License for copying this manual.
++@end menu
++
++@include fdl.texi
++
++
+ @node Index
+ @unnumbered Index
+diff -Nur grub-0.97/docs/help2man grub-0.97-patched/docs/help2man
+--- grub-0.97/docs/help2man    2003-07-09 13:45:36.000000000 +0200
++++ grub-0.97-patched/docs/help2man    2012-11-11 17:07:12.701728766 +0100
+@@ -455,7 +455,9 @@
+     $include{$sect} .= <<EOT;
+ The full documentation for
+ .B $program
+-is maintained as a Texinfo manual.  If the
++is maintained as a Texinfo manual in the
++.B grub-doc
++package.  If the
+ .B info
+ and
+ .B $program
+diff -Nur grub-0.97/docs/Makefile.am grub-0.97-patched/docs/Makefile.am
+--- grub-0.97/docs/Makefile.am 2003-07-09 13:45:35.000000000 +0200
++++ grub-0.97-patched/docs/Makefile.am 2012-11-11 17:07:12.711729085 +0100
+@@ -1,5 +1,5 @@
+ info_TEXINFOS = grub.texi multiboot.texi
+-grub_TEXINFOS = internals.texi
++grub_TEXINFOS = internals.texi fdl.texi
+ EXAMPLES = boot.S kernel.c multiboot.h
+ multiboot_TEXINFOS = boot.S.texi kernel.c.texi multiboot.h.texi
+ man_MANS = grub.8 mbchk.1 grub-install.8 grub-md5-crypt.8 grub-terminfo.8
+@@ -37,14 +37,14 @@
+       $(SHELL) $(srcdir)/$(SRC2TEXI) $(srcdir) $< $@
+ if MAINTAINER_MODE
+-$(srcdir)/grub.8: ../grub/grub $(srcdir)/$(HELP2MAN)
++$(srcdir)/grub.8: ../grub/grub $(srcdir)/$(HELP2MAN) $(srcdir)/grub.8.additions
+       $(PERL) $(srcdir)/$(HELP2MAN) --name="the grub shell" \
+-              --section=8 --output=$@ $<
++              --section=8 --include=$@.additions --output=$@ $<
+-$(srcdir)/grub-install.8: ../util/grub-install $(srcdir)/$(HELP2MAN)
++$(srcdir)/grub-install.8: ../util/grub-install $(srcdir)/$(HELP2MAN)  $(srcdir)/grub-install.8.additions
+       chmod 755 $<
+       $(PERL) $(srcdir)/$(HELP2MAN) --name="install GRUB on your drive" \
+-              --section=8 --output=$@ $<
++              --section=8 --include=$@.additions --output=$@ $<
+ $(srcdir)/mbchk.1: ../util/mbchk $(srcdir)/$(HELP2MAN)
+       $(PERL) $(srcdir)/$(HELP2MAN) \
+diff -Nur grub-0.97/docs/mbchk.1 grub-0.97-patched/docs/mbchk.1
+--- grub-0.97/docs/mbchk.1     2005-05-08 04:48:56.000000000 +0200
++++ grub-0.97-patched/docs/mbchk.1     2012-11-11 17:07:12.717729276 +0100
+@@ -1,5 +1,5 @@
+ .\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.23.
+-.TH MBCHK "1" "May 2005" "mbchk (GNU GRUB 0.97)" FSF
++.TH MBCHK "1" "June 2006" "mbchk (GNU GRUB 0.97)" FSF
+ .SH NAME
+ mbchk \- check the format of a Multiboot kernel
+ .SH SYNOPSIS
+diff -Nur grub-0.97/docs/menu.lst grub-0.97-patched/docs/menu.lst
+--- grub-0.97/docs/menu.lst    2004-05-11 14:11:17.000000000 +0200
++++ grub-0.97-patched/docs/menu.lst    2012-11-11 17:07:07.225553829 +0100
+@@ -11,6 +11,9 @@
+ # Fallback to the second entry.
+ fallback 1
++# Splash image to show behind grub.
++splashimage=(hd0,0)/boot/grub/splash.xpm.gz
++
+ # For booting GNU/Hurd
+ title  GNU/Hurd
+ root   (hd0,0)
+@@ -23,6 +26,11 @@
+ kernel /vmlinuz root=/dev/hdb1
+ #initrd /initrd.img
++# For booting Gentoo with the static rescue shell
++title  Gentoo (rescue shell)
++root (hd1,0)
++kernel /vmlinuz root=/dev/hdb1 init=/bin/bb
++
+ # For booting GNU/kFreeBSD
+ title  GNU/kFreeBSD
+ root   (hd0,2,a)
+diff -Nur grub-0.97/docs/menu.lst.orig grub-0.97-patched/docs/menu.lst.orig
+--- grub-0.97/docs/menu.lst.orig       1970-01-01 01:00:00.000000000 +0100
++++ grub-0.97-patched/docs/menu.lst.orig       2004-05-11 14:11:17.000000000 +0200
+@@ -0,0 +1,82 @@
++#
++# Sample boot menu configuration file
++#
++
++# Boot automatically after 30 secs.
++timeout 30
++
++# By default, boot the first entry.
++default 0
++
++# Fallback to the second entry.
++fallback 1
++
++# For booting GNU/Hurd
++title  GNU/Hurd
++root   (hd0,0)
++kernel /boot/gnumach.gz root=hd0s1
++module /boot/serverboot.gz
++
++# For booting GNU/Linux
++title  GNU/Linux
++root (hd1,0)
++kernel /vmlinuz root=/dev/hdb1
++#initrd /initrd.img
++
++# For booting GNU/kFreeBSD
++title  GNU/kFreeBSD
++root   (hd0,2,a)
++kernel /boot/loader.gz
++
++# For booting GNU/kNetBSD
++title  GNU/kNetBSD
++root   (hd0,2,a)
++kernel --type=netbsd /boot/knetbsd.gz
++
++# For booting Mach (getting kernel from floppy)
++title  Utah Mach4 multiboot
++root   (hd0,2)
++pause  Insert the diskette now\a!!
++kernel (fd0)/boot/kernel root=hd0s3
++module (fd0)/boot/bootstrap
++
++# For booting FreeBSD
++title  FreeBSD
++root   (hd0,2,a)
++kernel /boot/loader
++
++# For booting NetBSD
++title  NetBSD
++root   (hd0,2,a)
++kernel --type=netbsd /netbsd
++
++# For booting OpenBSD
++title  OpenBSD
++root   (hd0,2,a)
++kernel --type=netbsd /bsd
++
++# For booting OS/2
++title OS/2
++root  (hd0,1)
++makeactive
++# chainload OS/2 bootloader from the first sector
++chainloader +1
++# This is similar to "chainload", but loads a specific file
++#chainloader /boot/chain.os2
++
++# For booting Windows NT or Windows95
++title Windows NT / Windows 95 boot menu
++rootnoverify (hd0,0)
++makeactive
++chainloader  +1
++# For loading DOS if Windows NT is installed
++# chainload /bootsect.dos
++
++# For installing GRUB into the hard disk
++title Install GRUB into the hard disk
++root    (hd0,0)
++setup   (hd0)
++
++# Change the colors.
++title Change the colors
++color light-green/brown blink-red/blue
+diff -Nur grub-0.97/docs/multiboot.texi grub-0.97-patched/docs/multiboot.texi
+--- grub-0.97/docs/multiboot.texi      2003-07-09 13:45:36.000000000 +0200
++++ grub-0.97-patched/docs/multiboot.texi      2012-11-11 17:07:12.718729309 +0100
+@@ -1,32 +1,28 @@
+ \input texinfo @c -*-texinfo-*-
+-@c -*-texinfo-*-
+ @c %**start of header
+ @setfilename multiboot.info
+-@settitle Multiboot Specification
+-@c %**end of header
+-
++@set VERSION 0.6.95
++@settitle Multiboot Specification version @value{VERSION}
+ @c Unify all our little indices for now.
+ @syncodeindex fn cp
+ @syncodeindex vr cp
+ @syncodeindex ky cp
+ @syncodeindex pg cp
+ @syncodeindex tp cp
++@c %**end of header
+ @footnotestyle separate
+ @paragraphindent 3
+ @finalout
++@copying
++Copyright @copyright{} 1995,96 Bryan Ford <baford@@cs.utah.edu>
+-@dircategory Kernel
+-@direntry
+-* Multiboot Specification: (multiboot).               Multiboot Specification.
+-@end direntry
++Copyright @copyright{} 1995,96 Erich Stefan Boleyn <erich@@uruk.org>
+-@ifinfo
+-Copyright @copyright{} 1995, 96 Bryan Ford <baford@@cs.utah.edu>
+-Copyright @copyright{} 1995, 96 Erich Stefan Boleyn <erich@@uruk.org>
+-Copyright @copyright{} 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
++Copyright @copyright{} 1999,2000,2001,2002,2005,2006 Free Software Foundation, Inc.
++@quotation
+ Permission is granted to make and distribute verbatim copies of
+ this manual provided the copyright notice and this permission notice
+ are preserved on all copies.
+@@ -36,7 +32,6 @@
+ results, provided the printed document carries a copying permission
+ notice identical to this one except for the removal of this paragraph
+ (this paragraph not being relevant to the printed manual).
+-
+ @end ignore
+ Permission is granted to copy and distribute modified versions of this
+@@ -45,31 +40,23 @@
+ permission notice identical to this one.
+ Permission is granted to copy and distribute translations of this manual
+-into another language, under the above conditions for modified versions.
+-@end ifinfo
++into another language, under the above conditions for modified
++versions.
++@end quotation
++@end copying
++
++@dircategory Kernel
++@direntry
++* Multiboot Specification: (multiboot).               Multiboot Specification.
++@end direntry
+ @titlepage
+ @sp 10
+-@title The Multiboot Specification
++@title The Multiboot Specification version @value{VERSION}
+ @author Yoshinori K. Okuji, Bryan Ford, Erich Stefan Boleyn, Kunihiro Ishiguro
+ @page
+-
+ @vskip 0pt plus 1filll
+-Copyright @copyright{} 1995, 96 Bryan Ford <baford@@cs.utah.edu>
+-Copyright @copyright{} 1995, 96 Erich Stefan Boleyn <erich@@uruk.org>
+-Copyright @copyright{} 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
+-
+-Permission is granted to make and distribute verbatim copies of
+-this manual provided the copyright notice and this permission notice
+-are preserved on all copies.
+-
+-Permission is granted to copy and distribute modified versions of this
+-manual under the conditions for verbatim copying, provided also that
+-the entire resulting derived work is distributed under the terms of a
+-permission notice identical to this one.
+-
+-Permission is granted to copy and distribute translations of this manual
+-into another language, under the above conditions for modified versions.
++@insertcopying
+ @end titlepage
+ @finalout
+@@ -80,7 +67,9 @@
+ @top Multiboot Specification
+ This file documents Multiboot Specification, the proposal for the boot
+-sequence standard. This edition documents version 0.6.93.
++sequence standard. This edition documents version @value{VERSION}.
++
++@insertcopying
+ @end ifnottex
+ @menu
+@@ -426,7 +415,7 @@
+ kernel.
+ If bit 16 in the @samp{flags} word is set, then the fields at offsets
+-8-24 in the Multiboot header are valid, and the boot loader should use
++12-28 in the Multiboot header are valid, and the boot loader should use
+ them instead of the fields in the actual executable header to calculate
+ where to load the OS image. This information does not need to be
+ provided if the kernel image is in @sc{elf} format, but it @emph{must}
+@@ -677,7 +666,7 @@
+ @example
+ @group
+ +-------+-------+-------+-------+
+-| drive | part1 | part2 | part3 |
++| part3 | part2 | part1 | drive |
+ +-------+-------+-------+-------+
+ @end group
+ @end example
+@@ -1197,6 +1186,17 @@
+ @item
+ The maintainer changes to the GNU GRUB maintainer team
+ @email{bug-grub@@gnu.org}, from Bryan Ford and Erich Stefan Boleyn.
++
++@item
++The byte order of the @samp{boot_device} in Multiboot information is
++reversed. This was a mistake.
++
++@item
++The offset of the address fields were wrong.
++
++@item
++The format is adapted to a newer Texinfo, and the version number is
++specified more explicitly in the title.
+ @end itemize
+ @item 0.6
+diff -Nur grub-0.97/grub/asmstub.c grub-0.97-patched/grub/asmstub.c
+--- grub-0.97/grub/asmstub.c   2005-02-16 21:45:14.000000000 +0100
++++ grub-0.97-patched/grub/asmstub.c   2012-11-11 17:07:12.719729342 +0100
+@@ -42,6 +42,7 @@
+ #include <sys/time.h>
+ #include <termios.h>
+ #include <signal.h>
++#include <sys/mman.h>
+ #ifdef __linux__
+ # include <sys/ioctl.h>               /* ioctl */
+@@ -55,6 +56,10 @@
+ # endif /* ! BLKFLSBUF */
+ #endif /* __linux__ */
++#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__)
++# include <sys/sysctl.h>
++#endif
++
+ /* We want to prevent any circularararity in our stubs, as well as
+    libc name clashes. */
+ #define WITHOUT_LIBC_STUBS 1
+@@ -79,7 +84,7 @@
+ struct apm_info apm_bios_info;
+ /* Emulation requirements. */
+-char *grub_scratch_mem = 0;
++void *grub_scratch_mem = 0;
+ struct geometry *disks = 0;
+@@ -103,14 +108,62 @@
+ static unsigned int serial_speed;
+ #endif /* SIMULATE_SLOWNESS_OF_SERIAL */
++/* This allocates page-aligned storage of the specified size, which must be
++ * a multiple of the page size as determined by calling sysconf(_SC_PAGESIZE)
++ */
++#ifdef __linux__
++static void *
++grub_mmap_alloc(size_t len)
++{
++  int mmap_flags = MAP_ANONYMOUS|MAP_PRIVATE;
++
++#ifdef MAP_32BIT
++  mmap_flags |= MAP_32BIT;
++#endif
++  /* Mark the simulated stack executable, as GCC uses stack trampolines
++   * to implement nested functions. */
++  return mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC, mmap_flags, -1, 0);
++}
++#else /* !defined(__linux__) */
++static void *
++grub_mmap_alloc(size_t len)
++{
++  int fd = 0, offset = 0, ret = 0;
++  void *pa = MAP_FAILED; 
++  char template[] = "/tmp/grub_mmap_alloc_XXXXXX";
++  int e;
++
++  fd = mkstemp(template);
++  if (fd < 0)
++    return pa;
++
++  unlink(template);
++
++  ret = ftruncate(fd, len);
++  if (ret < 0)
++    return pa;
++
++  /* Mark the simulated stack executable, as GCC uses stack trampolines
++   * to implement nested functions. */
++  pa = mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC,
++                  MAP_PRIVATE, fd, offset);
++
++  e = errno;
++  close(fd);
++  errno = e;
++  return pa;
++}
++#endif /* defined(__linux__) */
++
+ /* The main entry point into this mess. */
+ int
+ grub_stage2 (void)
+ {
+   /* These need to be static, because they survive our stack transitions. */
+   static int status = 0;
+-  static char *realstack;
+-  char *scratch, *simstack;
++  static void *realstack;
++  void *simstack_alloc_base, *simstack;
++  size_t simstack_size, page_size;
+   int i;
+   auto void doit (void);
+@@ -142,9 +195,35 @@
+     }
+   assert (grub_scratch_mem == 0);
+-  scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15);
+-  assert (scratch);
+-  grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4);
++
++  /* Allocate enough pages for 0x100000 + EXTENDED_SIZE + 15, and
++   * make sure the memory is aligned to a multiple of the system's
++   * page size */
++  page_size = sysconf (_SC_PAGESIZE);
++  simstack_size = ( 0x100000 + EXTENDED_MEMSIZE + 15);
++  if (simstack_size % page_size)
++    {
++      /* If we're not on a page_size boundary, round up to the next one */
++      simstack_size &= ~(page_size-1);
++      simstack_size += page_size;
++    }
++
++  /* Add one for a PROT_NONE boundary page at each end. */
++  simstack_size += 2 * page_size;
++
++  simstack_alloc_base = grub_mmap_alloc(simstack_size);
++  assert (simstack_alloc_base != MAP_FAILED);
++
++  /* mark pages above and below our simstack area as innaccessable.
++   * If the implementation we're using doesn't support that, then the
++   * new protection modes are undefined.  It's safe to just ignore
++   * them, though.  It'd be nice if we knew that we'd get a SEGV for
++   * touching the area, but that's all.  it'd be nice to have. */
++  mprotect (simstack_alloc_base, page_size, PROT_NONE);
++  mprotect ((void *)((unsigned long)simstack_alloc_base +
++                         simstack_size - page_size),  page_size, PROT_NONE);
++
++  grub_scratch_mem = (void *)((unsigned long)simstack_alloc_base + page_size);
+   /* FIXME: simulate the memory holes using mprot, if available. */
+@@ -217,7 +296,7 @@
+   device_map = 0;
+   free (disks);
+   disks = 0;
+-  free (scratch);
++  munmap(simstack_alloc_base, simstack_size);
+   grub_scratch_mem = 0;
+   if (serial_device)
+@@ -777,7 +856,39 @@
+       /* Open read/write, or read-only if that failed. */
+       if (! read_only)
+-      disks[drive].flags = open (devname, O_RDWR);
++      {
++/* By default, kernel of FreeBSD does not allow overwriting MBR */
++#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__)
++#define GEOM_SYSCTL   "kern.geom.debugflags"
++        int old_flags, flags;
++        size_t sizeof_int = sizeof (int);
++
++        if (sysctlbyname (GEOM_SYSCTL, &old_flags, &sizeof_int, NULL, 0) != 0)
++          grub_printf ("failed to get " GEOM_SYSCTL "sysctl: %s\n", strerror (errno));
++
++        if ((old_flags & 0x10) == 0)
++          {
++            /* "allow foot shooting", see geom(4) */
++            flags = old_flags | 0x10;
++
++            if (sysctlbyname (GEOM_SYSCTL, NULL, NULL, &flags, sizeof (int)) != 0)
++              {
++                flags = old_flags;
++                grub_printf ("failed to set " GEOM_SYSCTL "sysctl: %s\n", strerror (errno));
++              }
++          }
++        else
++          flags = old_flags;
++#endif
++        disks[drive].flags = open (devname, O_RDWR);
++#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__)
++        if (flags != old_flags)
++          {
++            if (sysctlbyname (GEOM_SYSCTL, NULL, NULL, &old_flags, sizeof (int)) != 0)
++              grub_printf ("failed to set " GEOM_SYSCTL "sysctl: %s\n", strerror (errno));
++          }
++#endif
++      }
+       if (disks[drive].flags == -1)
+       {
+@@ -926,7 +1037,7 @@
+ int
+ biosdisk (int subfunc, int drive, struct geometry *geometry,
+-        int sector, int nsec, int segment)
++        unsigned int sector, int nsec, int segment)
+ {
+   char *buf;
+   int fd = geometry->flags;
+diff -Nur grub-0.97/grub/asmstub.c.orig grub-0.97-patched/grub/asmstub.c.orig
+--- grub-0.97/grub/asmstub.c.orig      1970-01-01 01:00:00.000000000 +0100
++++ grub-0.97-patched/grub/asmstub.c.orig      2005-02-16 21:45:14.000000000 +0100
+@@ -0,0 +1,1275 @@
++/* asmstub.c - a version of shared_src/asm.S that works under Unix */
++/*
++ *  GRUB  --  GRand Unified Bootloader
++ *  Copyright (C) 1999,2000,2001,2002,2004  Free Software Foundation, Inc.
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License as published by
++ *  the Free Software Foundation; either version 2 of the License, or
++ *  (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the Free Software
++ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++/* Try to use glibc's transparant LFS support. */
++#define _LARGEFILE_SOURCE     1
++/* lseek becomes synonymous with lseek64.  */
++#define _FILE_OFFSET_BITS     64
++
++/* Simulator entry point. */
++int grub_stage2 (void);
++
++#include <stdlib.h>
++#include <string.h>
++#include <ctype.h>
++#include <assert.h>
++#include <stdio.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <fcntl.h>
++#include <time.h>
++#include <errno.h>
++#include <string.h>
++#include <unistd.h>
++#include <setjmp.h>
++#include <sys/time.h>
++#include <termios.h>
++#include <signal.h>
++
++#ifdef __linux__
++# include <sys/ioctl.h>               /* ioctl */
++# if !defined(__GLIBC__) || \
++      ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))
++/* Maybe libc doesn't have large file support.  */
++#  include <linux/unistd.h>   /* _llseek */
++# endif /* (GLIBC < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR < 1)) */
++# ifndef BLKFLSBUF
++#  define BLKFLSBUF   _IO (0x12,97)   /* flush buffer cache */
++# endif /* ! BLKFLSBUF */
++#endif /* __linux__ */
++
++/* We want to prevent any circularararity in our stubs, as well as
++   libc name clashes. */
++#define WITHOUT_LIBC_STUBS 1
++#include <shared.h>
++#include <device.h>
++#include <serial.h>
++#include <term.h>
++
++/* Simulated memory sizes. */
++#define EXTENDED_MEMSIZE (3 * 1024 * 1024)    /* 3MB */
++#define CONVENTIONAL_MEMSIZE (640 * 1024)     /* 640kB */
++
++unsigned long install_partition = 0x20000;
++unsigned long boot_drive = 0;
++int saved_entryno = 0;
++char version_string[] = VERSION;
++char config_file[128] = "/boot/grub/menu.lst"; /* FIXME: arbitrary */
++unsigned long linux_text_len = 0;
++char *linux_data_tmp_addr = 0;
++char *linux_data_real_addr = 0;
++unsigned short io_map[IO_MAP_SIZE];
++struct apm_info apm_bios_info;
++
++/* Emulation requirements. */
++char *grub_scratch_mem = 0;
++
++struct geometry *disks = 0;
++
++/* The map between BIOS drives and UNIX device file names.  */
++char **device_map = 0;
++
++/* The jump buffer for exiting correctly.  */
++static jmp_buf env_for_exit;
++
++/* The current color for console.  */
++int console_current_color = A_NORMAL;
++
++/* The file descriptor for a serial device.  */
++static int serial_fd = -1;
++
++/* The file name of a serial device.  */
++static char *serial_device = 0;
++
++#ifdef SIMULATE_SLOWNESS_OF_SERIAL
++/* The speed of a serial device.  */
++static unsigned int serial_speed;
++#endif /* SIMULATE_SLOWNESS_OF_SERIAL */
++
++/* The main entry point into this mess. */
++int
++grub_stage2 (void)
++{
++  /* These need to be static, because they survive our stack transitions. */
++  static int status = 0;
++  static char *realstack;
++  char *scratch, *simstack;
++  int i;
++
++  auto void doit (void);
++  
++  /* We need a nested function so that we get a clean stack frame,
++     regardless of how the code is optimized. */
++  void doit (void)
++    {
++      /* Make sure our stack lives in the simulated memory area. */
++      asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n"
++                  : "=&r" (realstack) : "r" (simstack));
++      
++      /* Do a setjmp here for the stop command.  */
++      if (! setjmp (env_for_exit))
++      {
++        /* Actually enter the generic stage2 code.  */
++        status = 0;
++        init_bios_info ();
++      }
++      else
++      {
++        /* If ERRNUM is non-zero, then set STATUS to non-zero.  */
++        if (errnum)
++          status = 1;
++      }
++      
++      /* Replace our stack before we use any local variables. */
++      asm volatile ("movl %0, %%esp\n" : : "r" (realstack));
++    }
++
++  assert (grub_scratch_mem == 0);
++  scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15);
++  assert (scratch);
++  grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4);
++
++  /* FIXME: simulate the memory holes using mprot, if available. */
++
++  assert (disks == 0);
++  disks = malloc (NUM_DISKS * sizeof (*disks));
++  assert (disks);
++  /* Initialize DISKS.  */
++  for (i = 0; i < NUM_DISKS; i++)
++    disks[i].flags = -1;
++
++  if (! init_device_map (&device_map, device_map_file, floppy_disks))
++    return 1;
++  
++  /* Check some invariants. */
++  assert ((SCRATCHSEG << 4) == SCRATCHADDR);
++  assert ((BUFFERSEG << 4) == BUFFERADDR);
++  assert (BUFFERADDR + BUFFERLEN == SCRATCHADDR);
++  assert (FSYS_BUF % 16 == 0);
++  assert (FSYS_BUF + FSYS_BUFLEN == BUFFERADDR);
++
++#ifdef HAVE_LIBCURSES
++  /* Get into char-at-a-time mode. */
++  if (use_curses)
++    {
++      initscr ();
++      cbreak ();
++      noecho ();
++      nonl ();
++      scrollok (stdscr, TRUE);
++      keypad (stdscr, TRUE);
++      wtimeout (stdscr, 100);
++      signal (SIGWINCH, SIG_IGN);
++    }
++#endif
++
++  /* Make sure that actual writing is done.  */
++  sync ();
++
++  /* Set our stack, and go for it. */
++  simstack = (char *) PROTSTACKINIT;
++  doit ();
++
++  /* I don't know if this is necessary really.  */
++  sync ();
++
++#ifdef HAVE_LIBCURSES
++  if (use_curses)
++    endwin ();
++#endif
++
++  /* Close off the file descriptors we used. */
++  for (i = 0; i < NUM_DISKS; i ++)
++    if (disks[i].flags != -1)
++      {
++#ifdef __linux__
++      /* In Linux, invalidate the buffer cache. In other OSes, reboot
++         is one of the solutions...  */
++      ioctl (disks[i].flags, BLKFLSBUF, 0);
++#else
++# warning "In your operating system, the buffer cache will not be flushed."
++#endif
++      close (disks[i].flags);
++      }
++
++  if (serial_fd >= 0)
++    close (serial_fd);
++  
++  /* Release memory. */
++  restore_device_map (device_map);
++  device_map = 0;
++  free (disks);
++  disks = 0;
++  free (scratch);
++  grub_scratch_mem = 0;
++
++  if (serial_device)
++    free (serial_device);
++  serial_device = 0;
++  
++  /* Ahh... at last we're ready to return to caller. */
++  return status;
++}
++
++/* Assign DRIVE to a device name DEVICE.  */
++void
++assign_device_name (int drive, const char *device)
++{
++  /* If DRIVE is already assigned, free it.  */
++  if (device_map[drive])
++    free (device_map[drive]);
++
++  /* If the old one is already opened, close it.  */
++  if (disks[drive].flags != -1)
++    {
++      close (disks[drive].flags);
++      disks[drive].flags = -1;
++    }
++
++  /* Assign DRIVE to DEVICE.  */
++  if (! device)
++    device_map[drive] = 0;
++  else
++    device_map[drive] = strdup (device);
++}
++
++void
++stop (void)
++{
++#ifdef HAVE_LIBCURSES
++  if (use_curses)
++    endwin ();
++#endif
++
++  /* Jump to doit.  */
++  longjmp (env_for_exit, 1);
++}
++
++void
++grub_reboot (void)
++{
++  stop ();
++}
++
++void
++grub_halt (int no_apm)
++{
++  stop ();
++}
++
++/* calls for direct boot-loader chaining */
++void
++chain_stage1 (unsigned long segment, unsigned long offset,
++            unsigned long part_table_addr)
++{
++  stop ();
++}
++
++
++void
++chain_stage2 (unsigned long segment, unsigned long offset, int second_sector)
++{
++  stop ();
++}
++
++
++/* do some funky stuff, then boot linux */
++void
++linux_boot (void)
++{
++  stop ();
++}
++
++
++/* For bzImage kernels. */
++void
++big_linux_boot (void)
++{
++  stop ();
++}
++
++
++/* booting a multiboot executable */
++void
++multi_boot (int start, int mb_info)
++{
++  stop ();
++}
++
++/* sets it to linear or wired A20 operation */
++void
++gateA20 (int linear)
++{
++  /* Nothing to do in the simulator. */
++}
++
++/* Set up the int15 handler.  */
++void
++set_int15_handler (void)
++{
++  /* Nothing to do in the simulator.  */
++}
++
++/* Restore the original int15 handler.  */
++void
++unset_int15_handler (void)
++{
++  /* Nothing to do in the simulator.  */
++}
++
++/* The key map.  */
++unsigned short bios_key_map[KEY_MAP_SIZE + 1];
++unsigned short ascii_key_map[KEY_MAP_SIZE + 1];
++
++/* Copy MAP to the drive map and set up the int13 handler.  */
++void
++set_int13_handler (unsigned short *map)
++{
++  /* Nothing to do in the simulator.  */
++}
++
++int
++get_code_end (void)
++{
++  /* Just return a little area for simulation. */
++  return BOOTSEC_LOCATION + (60 * 1024);
++}
++
++
++/* memory probe routines */
++int
++get_memsize (int type)
++{
++  if (! type)
++    return CONVENTIONAL_MEMSIZE >> 10;
++  else
++    return EXTENDED_MEMSIZE >> 10;
++}
++
++
++/* get_eisamemsize() :  return packed EISA memory map, lower 16 bits is
++ *            memory between 1M and 16M in 1K parts, upper 16 bits is
++ *            memory above 16M in 64K parts.  If error, return -1.
++ */
++int
++get_eisamemsize (void)
++{
++  return (EXTENDED_MEMSIZE >> 10);
++}
++
++
++#define MMAR_DESC_TYPE_AVAILABLE 1 /* available to OS */
++#define MMAR_DESC_TYPE_RESERVED 2 /* not available */
++#define MMAR_DESC_TYPE_ACPI_RECLAIM 3 /* usable by OS after reading ACPI */
++#define MMAR_DESC_TYPE_ACPI_NVS 4 /* required to save between NVS sessions */
++
++#define MMAR_DESC_LENGTH      20
++
++/* Fetch the next entry in the memory map and return the continuation
++   value.  DESC is a pointer to the descriptor buffer, and CONT is the
++   previous continuation value (0 to get the first entry in the
++   map).  */
++int
++get_mmap_entry (struct mmar_desc *desc, int cont)
++{
++  /* Record the memory map statically.  */
++  static struct mmar_desc desc_table[] =
++  {
++    /* The conventional memory.  */
++    {
++      MMAR_DESC_LENGTH,
++      0,
++      CONVENTIONAL_MEMSIZE,
++      MMAR_DESC_TYPE_AVAILABLE
++    },
++    /* BIOS RAM and ROM (such as video memory).  */
++    {
++      MMAR_DESC_LENGTH,
++      CONVENTIONAL_MEMSIZE,
++      0x100000 - CONVENTIONAL_MEMSIZE,
++      MMAR_DESC_TYPE_RESERVED
++    },
++    /* The extended memory.  */
++    {
++      MMAR_DESC_LENGTH,
++      0x100000,
++      EXTENDED_MEMSIZE,
++      MMAR_DESC_TYPE_AVAILABLE
++    }
++  };
++  
++  int num = sizeof (desc_table) / sizeof (*desc_table);
++
++  if (cont < 0 || cont >= num)
++    {
++      /* Should not happen.  */
++      desc->desc_len = 0;
++    }
++  else
++    {
++      /* Copy the entry.  */
++      *desc = desc_table[cont++];
++
++      /* If the next entry exists, return the index.  */
++      if (cont < num)
++      return cont;
++    }
++  
++  return 0;
++}
++
++/* Track the int13 handler.  */
++void
++track_int13 (int drive)
++{
++  /* Nothing to do in the simulator.  */
++}
++
++/* Get the ROM configuration table.  */
++unsigned long
++get_rom_config_table (void)
++{
++  return 0;
++}
++
++/* Get APM BIOS information.  */
++void
++get_apm_info (void)
++{
++  /* Nothing to do in the simulator.  */
++}
++
++/* Get VBE controller information.  */
++int
++get_vbe_controller_info (struct vbe_controller *controller)
++{
++  /* Always fails.  */
++  return 0;
++}
++
++/* Get VBE mode information.  */
++int
++get_vbe_mode_info (int mode_number, struct vbe_mode *mode)
++{
++  /* Always fails.  */
++  return 0;
++}
++
++/* Set VBE mode.  */
++int
++set_vbe_mode (int mode_number)
++{
++  /* Always fails.  */
++  return 0;
++}
++
++/* low-level timing info */
++int
++getrtsecs (void)
++{
++  /* FIXME: exact value is not important, so just return time_t for now. */
++  return time (0);
++}
++
++int
++currticks (void)
++{
++  struct timeval tv;
++  long csecs;
++  int ticks_per_csec, ticks_per_usec;
++
++  /* Note: 18.2 ticks/sec.  */
++
++  /* Get current time.  */
++  gettimeofday (&tv, 0);
++
++  /* Compute centiseconds.  */
++  csecs = tv.tv_sec / 10;
++
++  /* Ticks per centisecond.  */
++  ticks_per_csec = csecs * 182;
++
++  /* Ticks per microsecond.  */
++  ticks_per_usec = (((tv.tv_sec - csecs * 10) * 1000000 + tv.tv_usec)
++                  * 182 / 10000000);
++
++  /* Sum them.  */
++  return ticks_per_csec + ticks_per_usec;
++}
++
++/* displays an ASCII character.  IBM displays will translate some
++   characters to special graphical ones */
++void
++console_putchar (int c)
++{
++  /* Curses doesn't have VGA fonts.  */
++  switch (c)
++    {
++    case DISP_UL:
++      c = ACS_ULCORNER;
++      break;
++    case DISP_UR:
++      c = ACS_URCORNER;
++      break;
++    case DISP_LL:
++      c = ACS_LLCORNER;
++      break;
++    case DISP_LR:
++      c = ACS_LRCORNER;
++      break;
++    case DISP_HORIZ:
++      c = ACS_HLINE;
++      break;
++    case DISP_VERT:
++      c = ACS_VLINE;
++      break;
++    case DISP_LEFT:
++      c = ACS_LARROW;
++      break;
++    case DISP_RIGHT:
++      c = ACS_RARROW;
++      break;
++    case DISP_UP:
++      c = ACS_UARROW;
++      break;
++    case DISP_DOWN:
++      c = ACS_DARROW;
++      break;
++    default:
++      break;
++    }
++
++#ifdef HAVE_LIBCURSES
++  if (use_curses)
++    {
++      /* In ncurses, a newline is treated badly, so we emulate it in our
++       own way.  */
++      if (c == '\n')
++      {
++        int x, y;
++
++        getyx (stdscr, y, x);
++        if (y + 1 == LINES)
++          scroll (stdscr);
++        else
++          move (y + 1, x);
++      }
++      else if (isprint (c))
++      {
++        int x, y;
++
++        getyx (stdscr, y, x);
++        if (x + 1 == COLS)
++          {
++            console_putchar ('\r');
++            console_putchar ('\n');
++          }
++        addch (c | console_current_color);
++      }
++      else
++      {
++        addch (c);
++      }
++      
++#ifdef REFRESH_IMMEDIATELY
++      refresh ();
++#endif
++    }
++  else
++#endif
++    {
++      /* CR is not used in Unix.  */
++      if (c != '\r')
++      putchar (c);
++    }
++}
++
++/* The store for ungetch simulation. This is necessary, because
++   ncurses-1.9.9g is still used in the world and its ungetch is
++   completely broken.  */
++#ifdef HAVE_LIBCURSES
++static int save_char = ERR;
++#endif
++
++static int
++console_translate_key (int c)
++{
++  switch (c)
++    {
++    case KEY_LEFT:
++      return 2;
++    case KEY_RIGHT:
++      return 6;
++    case KEY_UP:
++      return 16;
++    case KEY_DOWN:
++      return 14;
++    case KEY_DC:
++      return 4;
++    case KEY_BACKSPACE:
++      return 8;
++    case KEY_HOME:
++      return 1;
++    case KEY_END:
++      return 5;
++    case KEY_PPAGE:
++      return 7;
++    case KEY_NPAGE:
++      return 3;
++    default:
++      break;
++    }
++
++  return c;
++}
++
++/* like 'getkey', but doesn't wait, returns -1 if nothing available */
++int
++console_checkkey (void)
++{
++#ifdef HAVE_LIBCURSES
++  if (use_curses)
++    {
++      int c;
++
++      /* Check for SAVE_CHAR. This should not be true, because this
++       means checkkey is called twice continuously.  */
++      if (save_char != ERR)
++      return save_char;
++
++      c = getch ();
++      /* If C is not ERR, then put it back in the input queue.  */
++      if (c != ERR)
++      save_char = c;
++      return console_translate_key (c);
++    }
++#endif
++
++  /* Just pretend they hit the space bar, then read the real key when
++     they call getkey. */
++  return ' ';
++}
++
++/* returns packed BIOS/ASCII code */
++int
++console_getkey (void)
++{
++  int c;
++
++#ifdef HAVE_LIBCURSES
++  if (use_curses)
++    {
++      /* If checkkey has already got a character, then return it.  */
++      if (save_char != ERR)
++      {
++        c = save_char;
++        save_char = ERR;
++        return console_translate_key (c);
++      }
++
++      wtimeout (stdscr, -1);
++      c = getch ();
++      wtimeout (stdscr, 100);
++    }
++  else
++#endif
++    c = getchar ();
++
++  /* Quit if we get EOF. */
++  if (c == -1)
++    stop ();
++  
++  return console_translate_key (c);
++}
++
++/* returns packed values, LSB+1 is x, LSB is y */
++int
++console_getxy (void)
++{
++  int y, x;
++#ifdef HAVE_LIBCURSES
++  if (use_curses)
++    getyx (stdscr, y, x);
++  else
++#endif
++  y = x = 0;
++  return (x << 8) | (y & 0xff);
++}
++
++void
++console_gotoxy (int x, int y)
++{
++#ifdef HAVE_LIBCURSES
++  if (use_curses)
++    move (y, x);
++#endif
++}
++
++/* low-level character I/O */
++void
++console_cls (void)
++{
++#ifdef HAVE_LIBCURSES
++  if (use_curses)
++    clear ();
++#endif
++}
++
++void
++console_setcolorstate (color_state state)
++{
++  console_current_color = 
++    (state == COLOR_STATE_HIGHLIGHT) ? A_REVERSE : A_NORMAL;
++}
++
++void
++console_setcolor (int normal_color, int highlight_color)
++{
++  /* Nothing to do.  */
++}
++
++int
++console_setcursor (int on)
++{
++  return 1;
++}
++
++/* Low-level disk I/O.  Our stubbed version just returns a file
++   descriptor, not the actual geometry. */
++int
++get_diskinfo (int drive, struct geometry *geometry)
++{
++  /* FIXME: this function is truly horrid.  We try opening the device,
++     then severely abuse the GEOMETRY->flags field to pass a file
++     descriptor to biosdisk.  Thank God nobody's looking at this comment,
++     or my reputation would be ruined. --Gord */
++
++  /* See if we have a cached device. */
++  if (disks[drive].flags == -1)
++    {
++      /* The unpartitioned device name: /dev/XdX */
++      char *devname = device_map[drive];
++      char buf[512];
++
++      if (! devname)
++      return -1;
++
++      if (verbose)
++      grub_printf ("Attempt to open drive 0x%x (%s)\n",
++                   drive, devname);
++
++      /* Open read/write, or read-only if that failed. */
++      if (! read_only)
++      disks[drive].flags = open (devname, O_RDWR);
++
++      if (disks[drive].flags == -1)
++      {
++        if (read_only || errno == EACCES || errno == EROFS || errno == EPERM)
++          {
++            disks[drive].flags = open (devname, O_RDONLY);
++            if (disks[drive].flags == -1)
++              {
++                assign_device_name (drive, 0);
++                return -1;
++              }
++          }
++        else
++          {
++            assign_device_name (drive, 0);
++            return -1;
++          }
++      }
++
++      /* Attempt to read the first sector.  */
++      if (read (disks[drive].flags, buf, 512) != 512)
++      {
++        close (disks[drive].flags);
++        disks[drive].flags = -1;
++        assign_device_name (drive, 0);
++        return -1;
++      }
++
++      if (disks[drive].flags != -1)
++      get_drive_geometry (&disks[drive], device_map, drive);
++    }
++
++  if (disks[drive].flags == -1)
++    return -1;
++
++#ifdef __linux__
++  /* In Linux, invalidate the buffer cache, so that left overs
++     from other program in the cache are flushed and seen by us */
++  ioctl (disks[drive].flags, BLKFLSBUF, 0);
++#endif
++
++  *geometry = disks[drive];
++  return 0;
++}
++
++/* Read LEN bytes from FD in BUF. Return less than or equal to zero if an
++   error occurs, otherwise return LEN.  */
++static int
++nread (int fd, char *buf, size_t len)
++{
++  int size = len;
++
++  while (len)
++    {
++      int ret = read (fd, buf, len);
++
++      if (ret <= 0)
++      {
++        if (errno == EINTR)
++          continue;
++        else
++          return ret;
++      }
++
++      len -= ret;
++      buf += ret;
++    }
++
++  return size;
++}
++
++/* Write LEN bytes from BUF to FD. Return less than or equal to zero if an
++   error occurs, otherwise return LEN.  */
++static int
++nwrite (int fd, char *buf, size_t len)
++{
++  int size = len;
++
++  while (len)
++    {
++      int ret = write (fd, buf, len);
++
++      if (ret <= 0)
++      {
++        if (errno == EINTR)
++          continue;
++        else
++          return ret;
++      }
++
++      len -= ret;
++      buf += ret;
++    }
++
++  return size;
++}
++
++/* Dump BUF in the format of hexadecimal numbers.  */
++static void
++hex_dump (void *buf, size_t size)
++{
++  /* FIXME: How to determine which length is readable?  */
++#define MAX_COLUMN    70
++
++  /* use unsigned char for numerical computations */
++  unsigned char *ptr = buf;
++  /* count the width of the line */
++  int column = 0;
++  /* how many bytes written */
++  int count = 0;
++
++  while (size > 0)
++    {
++      /* high 4 bits */
++      int hi = *ptr >> 4;
++      /* low 4 bits */
++      int low = *ptr & 0xf;
++
++      /* grub_printf does not handle prefix number, such as %2x, so
++       format the number by hand...  */
++      grub_printf ("%x%x", hi, low);
++      column += 2;
++      count++;
++      ptr++;
++      size--;
++
++      /* Insert space or newline with the interval 4 bytes.  */
++      if (size != 0 && (count % 4) == 0)
++      {
++        if (column < MAX_COLUMN)
++          {
++            grub_printf (" ");
++            column++;
++          }
++        else
++          {
++            grub_printf ("\n");
++            column = 0;
++          }
++      }
++    }
++
++  /* Add a newline at the end for readability.  */
++  grub_printf ("\n");
++}
++
++int
++biosdisk (int subfunc, int drive, struct geometry *geometry,
++        int sector, int nsec, int segment)
++{
++  char *buf;
++  int fd = geometry->flags;
++
++  /* Get the file pointer from the geometry, and make sure it matches. */
++  if (fd == -1 || fd != disks[drive].flags)
++    return BIOSDISK_ERROR_GEOMETRY;
++
++  /* Seek to the specified location. */
++#if defined(__linux__) && (!defined(__GLIBC__) || \
++      ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))))
++  /* Maybe libc doesn't have large file support.  */
++  {
++    loff_t offset, result;
++    static int _llseek (uint filedes, ulong hi, ulong lo,
++                      loff_t *res, uint wh);
++    _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo,
++             loff_t *, res, uint, wh);
++
++    offset = (loff_t) sector * (loff_t) SECTOR_SIZE;
++    if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET))
++      return -1;
++  }
++#else
++  {
++    off_t offset = (off_t) sector * (off_t) SECTOR_SIZE;
++
++    if (lseek (fd, offset, SEEK_SET) != offset)
++      return -1;
++  }
++#endif
++
++  buf = (char *) (segment << 4);
++
++  switch (subfunc)
++    {
++    case BIOSDISK_READ:
++#ifdef __linux__
++      if (sector == 0 && nsec > 1)
++      {
++        /* Work around a bug in linux's ez remapping.  Linux remaps all
++           sectors that are read together with the MBR in one read.  It
++           should only remap the MBR, so we split the read in two 
++           parts. -jochen  */
++        if (nread (fd, buf, SECTOR_SIZE) != SECTOR_SIZE)
++          return -1;
++        buf += SECTOR_SIZE;
++        nsec--;
++      }
++#endif
++      if (nread (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE)
++      return -1;
++      break;
++
++    case BIOSDISK_WRITE:
++      if (verbose)
++      {
++        grub_printf ("Write %d sectors starting from %d sector"
++                     " to drive 0x%x (%s)\n",
++                     nsec, sector, drive, device_map[drive]);
++        hex_dump (buf, nsec * SECTOR_SIZE);
++      }
++      if (! read_only)
++      if (nwrite (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE)
++        return -1;
++      break;
++
++    default:
++      grub_printf ("unknown subfunc %d\n", subfunc);
++      break;
++    }
++
++  return 0;
++}
++
++
++void
++stop_floppy (void)
++{
++  /* NOTUSED */
++}
++
++/* Fetch a key from a serial device.  */
++int
++serial_hw_fetch (void)
++{
++  fd_set fds;
++  struct timeval to;
++  char c;
++
++  /* Wait only for the serial device.  */
++  FD_ZERO (&fds);
++  FD_SET (serial_fd, &fds);
++
++  to.tv_sec = 0;
++  to.tv_usec = 0;
++  
++  if (select (serial_fd + 1, &fds, 0, 0, &to) > 0)
++    {
++      if (nread (serial_fd, &c, 1) != 1)
++      stop ();
++
++      return c;
++    }
++  
++  return -1;
++}
++
++/* Put a character to a serial device.  */
++void
++serial_hw_put (int c)
++{
++  char ch = (char) c;
++  
++  if (nwrite (serial_fd, &ch, 1) != 1)
++    stop ();
++}
++
++void
++serial_hw_delay (void)
++{
++#ifdef SIMULATE_SLOWNESS_OF_SERIAL
++  struct timeval otv, tv;
++
++  gettimeofday (&otv, 0);
++
++  while (1)
++    {
++      long delta;
++      
++      gettimeofday (&tv, 0);
++      delta = tv.tv_usec - otv.tv_usec;
++      if (delta < 0)
++      delta += 1000000;
++      
++      if (delta >= 1000000 / (serial_speed >> 3))
++      break;
++    }
++#endif /* SIMULATE_SLOWNESS_OF_SERIAL */
++}
++
++static speed_t
++get_termios_speed (int speed)
++{
++  switch (speed)
++    {
++    case 2400: return B2400;
++    case 4800: return B4800;
++    case 9600: return B9600;
++    case 19200: return B19200;
++    case 38400: return B38400;
++#ifdef B57600
++    case 57600: return B57600;
++#endif
++#ifdef B115200      
++    case 115200: return B115200;
++#endif
++    }
++
++  return B0;
++}
++
++/* Get the port number of the unit UNIT. In the grub shell, this doesn't
++   make sense.  */
++unsigned short
++serial_hw_get_port (int unit)
++{
++  return 0;
++}
++
++/* Initialize a serial device. In the grub shell, PORT is unused.  */
++int
++serial_hw_init (unsigned short port, unsigned int speed,
++              int word_len, int parity, int stop_bit_len)
++{
++  struct termios termios;
++  speed_t termios_speed;
++  int i;
++  
++  /* Check if the file name is specified.  */
++  if (! serial_device)
++    return 0;
++
++  /* If a serial device is already opened, close it first.  */
++  if (serial_fd >= 0)
++    close (serial_fd);
++  
++  /* Open the device file.  */
++  serial_fd = open (serial_device,
++                  O_RDWR | O_NOCTTY
++#if defined(O_SYNC)
++                  /* O_SYNC is used in Linux (and some others?).  */
++                  | O_SYNC
++#elif defined(O_FSYNC)
++                  /* O_FSYNC is used in FreeBSD.  */
++                  | O_FSYNC
++#endif
++                  );
++  if (serial_fd < 0)
++    return 0;
++
++  /* Get the termios parameters.  */
++  if (tcgetattr (serial_fd, &termios))
++    goto fail;
++
++  /* Raw mode.  */
++  cfmakeraw (&termios);
++
++  /* Set the speed.  */
++  termios_speed = get_termios_speed (speed);
++  if (termios_speed == B0)
++    goto fail;
++  
++  cfsetispeed (&termios, termios_speed);
++  cfsetospeed (&termios, termios_speed);
++
++  /* Set the word length.  */
++  termios.c_cflag &= ~CSIZE;
++  switch (word_len)
++    {
++    case UART_5BITS_WORD:
++      termios.c_cflag |= CS5;
++      break;
++    case UART_6BITS_WORD:
++      termios.c_cflag |= CS6;
++      break;
++    case UART_7BITS_WORD:
++      termios.c_cflag |= CS7;
++      break;
++    case UART_8BITS_WORD:
++      termios.c_cflag |= CS8;
++      break;
++    default:
++      goto fail;
++    }
++
++  /* Set the parity.  */
++  switch (parity)
++    {
++    case UART_NO_PARITY:
++      termios.c_cflag &= ~PARENB;
++      break;
++    case UART_ODD_PARITY:
++      termios.c_cflag |= PARENB;
++      termios.c_cflag |= PARODD;
++      break;
++    case UART_EVEN_PARITY:
++      termios.c_cflag |= PARENB;
++      termios.c_cflag &= ~PARODD;
++      break;
++    default:
++      goto fail;
++    }
++
++  /* Set the length of stop bit.  */
++  switch (stop_bit_len)
++    {
++    case UART_1_STOP_BIT:
++      termios.c_cflag &= ~CSTOPB;
++      break;
++    case UART_2_STOP_BITS:
++      termios.c_cflag |= CSTOPB;
++      break;
++    default:
++      goto fail;
++    }
++
++  /* Set the parameters.  */
++  if (tcsetattr (serial_fd, TCSANOW, &termios))
++    goto fail;
++
++#ifdef SIMULATE_SLOWNESS_OF_SERIAL
++  serial_speed = speed;
++#endif /* SIMUATE_SLOWNESS_OF_SERIAL */
++
++  /* Get rid of the flag TERM_NEED_INIT from the serial terminal.  */
++  for (i = 0; term_table[i].name; i++)
++    {
++      if (strcmp (term_table[i].name, "serial") == 0)
++      {
++        term_table[i].flags &= ~(TERM_NEED_INIT);
++        break;
++      }
++    }
++  
++  return 1;
++
++ fail:
++  close (serial_fd);
++  serial_fd = -1;
++  return 0;
++}
++
++/* Set the file name of a serial device (or a pty device). This is a
++   function specific to the grub shell.  */
++void
++serial_set_device (const char *device)
++{
++  if (serial_device)
++    free (serial_device);
++  
++  serial_device = strdup (device);
++}
++
++/* There is no difference between console and hercules in the grub shell.  */
++void
++hercules_putchar (int c)
++{
++  console_putchar (c);
++}
++
++int
++hercules_getxy (void)
++{
++  return console_getxy ();
++}
++
++void
++hercules_gotoxy (int x, int y)
++{
++  console_gotoxy (x, y);
++}
++
++void
++hercules_cls (void)
++{
++  console_cls ();
++}
++
++void
++hercules_setcolorstate (color_state state)
++{
++  console_setcolorstate (state);
++}
++
++void
++hercules_setcolor (int normal_color, int highlight_color)
++{
++  console_setcolor (normal_color, highlight_color);
++}
++
++int
++hercules_setcursor (int on)
++{
++  return 1;
++}
+diff -Nur grub-0.97/grub/main.c grub-0.97-patched/grub/main.c
+--- grub-0.97/grub/main.c      2003-07-09 13:45:36.000000000 +0200
++++ grub-0.97-patched/grub/main.c      2012-11-11 17:07:12.720729374 +0100
+@@ -32,6 +32,7 @@
+ #define WITHOUT_LIBC_STUBS 1
+ #include <shared.h>
+ #include <term.h>
++#include <device.h>
+ char *program_name = 0;
+ int use_config_file = 1;
+@@ -140,10 +141,7 @@
+   program_name = argv[0];
+   default_boot_drive = boot_drive;
+   default_install_partition = install_partition;
+-  if (config_file)
+-    default_config_file = config_file;
+-  else
+-    default_config_file = "NONE";
++  default_config_file = config_file;
+   
+   /* Parse command-line options. */
+   do
+@@ -192,6 +190,12 @@
+             perror ("strtoul");
+             exit (1);
+           }
++        if (boot_drive >= NUM_DISKS)
++          {
++            fprintf (stderr, "boot_drive should be from 0 to %d\n",
++                     NUM_DISKS - 1);
++            exit (1);
++          }
+         break;
+       case OPT_NO_CONFIG_FILE:
+diff -Nur grub-0.97/grub/main.c.orig grub-0.97-patched/grub/main.c.orig
+--- grub-0.97/grub/main.c.orig 1970-01-01 01:00:00.000000000 +0100
++++ grub-0.97-patched/grub/main.c.orig 2003-07-09 13:45:36.000000000 +0200
+@@ -0,0 +1,265 @@
++/* main.c - experimental GRUB stage2 that runs under Unix */
++/*
++ *  GRUB  --  GRand Unified Bootloader
++ *  Copyright (C) 1999,2000,2001,2002  Free Software Foundation, Inc.
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License as published by
++ *  the Free Software Foundation; either version 2 of the License, or
++ *  (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the Free Software
++ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++/* Simulator entry point. */
++int grub_stage2 (void);
++
++#include <stdio.h>
++#include <getopt.h>
++#include <unistd.h>
++#include <string.h>
++#include <stdlib.h>
++#include <limits.h>
++#include <setjmp.h>
++
++#define WITHOUT_LIBC_STUBS 1
++#include <shared.h>
++#include <term.h>
++
++char *program_name = 0;
++int use_config_file = 1;
++int use_preset_menu = 0;
++#ifdef HAVE_LIBCURSES
++int use_curses = 1;
++#else
++int use_curses = 0;
++#endif
++int verbose = 0;
++int read_only = 0;
++int floppy_disks = 1;
++char *device_map_file = 0;
++static int default_boot_drive;
++static int default_install_partition;
++static char *default_config_file;
++
++#define OPT_HELP              -2
++#define OPT_VERSION           -3
++#define OPT_HOLD              -4
++#define OPT_CONFIG_FILE               -5
++#define OPT_INSTALL_PARTITION -6
++#define OPT_BOOT_DRIVE                -7
++#define OPT_NO_CONFIG_FILE    -8
++#define OPT_NO_CURSES         -9
++#define OPT_BATCH             -10
++#define OPT_VERBOSE           -11
++#define OPT_READ_ONLY         -12
++#define OPT_PROBE_SECOND_FLOPPY       -13
++#define OPT_NO_FLOPPY         -14
++#define OPT_DEVICE_MAP                -15
++#define OPT_PRESET_MENU               -16
++#define OPT_NO_PAGER          -17
++#define OPTSTRING ""
++
++static struct option longopts[] =
++{
++  {"batch", no_argument, 0, OPT_BATCH},
++  {"boot-drive", required_argument, 0, OPT_BOOT_DRIVE},
++  {"config-file", required_argument, 0, OPT_CONFIG_FILE},
++  {"device-map", required_argument, 0, OPT_DEVICE_MAP},
++  {"help", no_argument, 0, OPT_HELP},
++  {"hold", optional_argument, 0, OPT_HOLD},
++  {"install-partition", required_argument, 0, OPT_INSTALL_PARTITION},
++  {"no-config-file", no_argument, 0, OPT_NO_CONFIG_FILE},
++  {"no-curses", no_argument, 0, OPT_NO_CURSES},
++  {"no-floppy", no_argument, 0, OPT_NO_FLOPPY},
++  {"no-pager", no_argument, 0, OPT_NO_PAGER},
++  {"preset-menu", no_argument, 0, OPT_PRESET_MENU},
++  {"probe-second-floppy", no_argument, 0, OPT_PROBE_SECOND_FLOPPY},
++  {"read-only", no_argument, 0, OPT_READ_ONLY},
++  {"verbose", no_argument, 0, OPT_VERBOSE},
++  {"version", no_argument, 0, OPT_VERSION},
++  {0},
++};
++
++
++static void
++usage (int status)
++{
++  if (status)
++    fprintf (stderr, "Try ``grub --help'' for more information.\n");
++  else
++    printf ("\
++Usage: grub [OPTION]...\n\
++\n\
++Enter the GRand Unified Bootloader command shell.\n\
++\n\
++    --batch                  turn on batch mode for non-interactive use\n\
++    --boot-drive=DRIVE       specify stage2 boot_drive [default=0x%x]\n\
++    --config-file=FILE       specify stage2 config_file [default=%s]\n\
++    --device-map=FILE        use the device map file FILE\n\
++    --help                   display this message and exit\n\
++    --hold                   wait until a debugger will attach\n\
++    --install-partition=PAR  specify stage2 install_partition [default=0x%x]\n\
++    --no-config-file         do not use the config file\n\
++    --no-curses              do not use curses\n\
++    --no-floppy              do not probe any floppy drive\n\
++    --no-pager               do not use internal pager\n\
++    --preset-menu            use the preset menu\n\
++    --probe-second-floppy    probe the second floppy drive\n\
++    --read-only              do not write anything to devices\n\
++    --verbose                print verbose messages\n\
++    --version                print version information and exit\n\
++\n\
++Report bugs to <bug-grub@gnu.org>.\n\
++",
++          default_boot_drive, default_config_file,
++          default_install_partition);
++
++  exit (status);
++}
++
++
++int
++main (int argc, char **argv)
++{
++  int c;
++  int hold = 0;
++
++  /* First of all, call sync so that all in-core data is scheduled to be
++     actually written to disks. This is very important because GRUB does
++     not use ordinary stdio interface but raw devices.  */
++  sync ();
++  
++  program_name = argv[0];
++  default_boot_drive = boot_drive;
++  default_install_partition = install_partition;
++  if (config_file)
++    default_config_file = config_file;
++  else
++    default_config_file = "NONE";
++  
++  /* Parse command-line options. */
++  do
++    {
++      c = getopt_long (argc, argv, OPTSTRING, longopts, 0);
++      switch (c)
++      {
++      case EOF:
++        /* Fall through the bottom of the loop. */
++        break;
++
++      case OPT_HELP:
++        usage (0);
++        break;
++
++      case OPT_VERSION:
++        printf ("grub (GNU GRUB " VERSION ")\n");
++        exit (0);
++        break;
++
++      case OPT_HOLD:
++        if (! optarg)
++          hold = -1;
++        else
++          hold = atoi (optarg);
++        break;
++
++      case OPT_CONFIG_FILE:
++        strncpy (config_file, optarg, 127); /* FIXME: arbitrary */
++        config_file[127] = '\0';
++        break;
++
++      case OPT_INSTALL_PARTITION:
++        install_partition = strtoul (optarg, 0, 0);
++        if (install_partition == ULONG_MAX)
++          {
++            perror ("strtoul");
++            exit (1);
++          }
++        break;
++
++      case OPT_BOOT_DRIVE:
++        boot_drive = strtoul (optarg, 0, 0);
++        if (boot_drive == ULONG_MAX)
++          {
++            perror ("strtoul");
++            exit (1);
++          }
++        break;
++
++      case OPT_NO_CONFIG_FILE:
++        use_config_file = 0;
++        break;
++
++      case OPT_NO_CURSES:
++        use_curses = 0;
++        break;
++
++      case OPT_NO_PAGER:
++        use_pager = 0;
++        break;
++
++      case OPT_BATCH:
++        /* This is the same as "--no-config-file --no-curses --no-pager".  */
++        use_config_file = 0;
++        use_curses = 0;
++        use_pager = 0;
++        break;
++
++      case OPT_READ_ONLY:
++        read_only = 1;
++        break;
++
++      case OPT_VERBOSE:
++        verbose = 1;
++        break;
++
++      case OPT_NO_FLOPPY:
++        floppy_disks = 0;
++        break;
++
++      case OPT_PROBE_SECOND_FLOPPY:
++        floppy_disks = 2;
++        break;
++
++      case OPT_DEVICE_MAP:
++        device_map_file = strdup (optarg);
++        break;
++
++      case OPT_PRESET_MENU:
++        use_preset_menu = 1;
++        break;
++        
++      default:
++        usage (1);
++      }
++    }
++  while (c != EOF);
++
++  /* Wait until the HOLD variable is cleared by an attached debugger. */
++  if (hold && verbose)
++    printf ("Run \"gdb %s %d\", and set HOLD to zero.\n",
++          program_name, (int) getpid ());
++  while (hold)
++    {
++      if (hold > 0)
++      hold--;
++      
++      sleep (1);
++    }
++
++  /* If we don't have curses (!HAVE_LIBCURSES or --no-curses or
++     --batch) put terminal to dumb for better handling of line i/o */
++  if (! use_curses)
++    current_term->flags = TERM_NO_EDIT | TERM_DUMB;
++
++  /* Transfer control to the stage2 simulator. */
++  exit (grub_stage2 ());
++}
+diff -Nur grub-0.97/lib/device.c grub-0.97-patched/lib/device.c
+--- grub-0.97/lib/device.c     2005-03-28 01:14:25.000000000 +0200
++++ grub-0.97-patched/lib/device.c     2012-11-11 17:07:12.748730268 +0100
+@@ -69,9 +69,9 @@
+ # ifndef CDROM_GET_CAPABILITY
+ #  define CDROM_GET_CAPABILITY        0x5331  /* get capabilities */
+ # endif /* ! CDROM_GET_CAPABILITY */
+-# ifndef BLKGETSIZE
+-#  define BLKGETSIZE  _IO(0x12,96)    /* return device size */
+-# endif /* ! BLKGETSIZE */
++# ifndef BLKGETSIZE64
++#  define BLKGETSIZE64        _IOR(0x12,114,size_t)   /* return device size */
++# endif /* ! BLKGETSIZE64 */
+ #endif /* __linux__ */
+ /* Use __FreeBSD_kernel__ instead of __FreeBSD__ for compatibility with
+@@ -131,6 +131,152 @@
+ #include <shared.h>
+ #include <device.h>
++#if defined(__linux__)
++/* The 2.6 kernel has removed all of the geometry handling for IDE drives
++ * that did fixups for LBA, etc.  This means that the geometry we get
++ * with the ioctl has a good chance of being wrong.  So, we get to 
++ * also know about partition tables and try to read what the geometry
++ * is there. *grumble*   Very closely based on code from cfdisk
++ */
++static void get_kernel_geometry(int fd, long long *cyl, int *heads, int *sectors) {
++    struct hd_geometry hdg;
++    
++    if (ioctl (fd, HDIO_GETGEO, &hdg))
++        return;
++
++    *cyl = hdg.cylinders;
++    *heads = hdg.heads;
++    *sectors = hdg.sectors;
++}
++
++struct partition {
++        unsigned char boot_ind;         /* 0x80 - active */
++        unsigned char head;             /* starting head */
++        unsigned char sector;           /* starting sector */
++        unsigned char cyl;              /* starting cylinder */
++        unsigned char sys_ind;          /* What partition type */
++        unsigned char end_head;         /* end head */
++        unsigned char end_sector;       /* end sector */
++        unsigned char end_cyl;          /* end cylinder */
++        unsigned char start4[4];        /* starting sector counting from 0 */
++        unsigned char size4[4];         /* nr of sectors in partition */
++};
++
++#define ALIGNMENT 2
++typedef union {
++    struct {
++      unsigned char align[ALIGNMENT];
++      unsigned char b[SECTOR_SIZE];
++    } c;
++    struct {
++      unsigned char align[ALIGNMENT];
++      unsigned char buffer[0x1BE];
++      struct partition part[4];
++      unsigned char magicflag[2];
++    } p;
++} partition_table;
++
++#define PART_TABLE_FLAG0 0x55
++#define PART_TABLE_FLAG1 0xAA
++
++static void
++get_partition_table_geometry(partition_table *bufp, long long *cyl, int *heads, 
++                             int *sectors) {
++    struct partition *p;
++    int i,h,s,hh,ss;
++    int first = 1;
++    int bad = 0;
++
++    if (bufp->p.magicflag[0] != PART_TABLE_FLAG0 ||
++      bufp->p.magicflag[1] != PART_TABLE_FLAG1) {
++          /* Matthew Wilcox: slightly friendlier version of
++             fatal(_("Bad signature on partition table"), 3);
++          */
++            fprintf(stderr, "Unknown partition table signature\n");
++          return;
++    }
++
++    hh = ss = 0;
++    for (i=0; i<4; i++) {
++      p = &(bufp->p.part[i]);
++      if (p->sys_ind != 0) {
++          h = p->end_head + 1;
++          s = (p->end_sector & 077);
++          if (first) {
++              hh = h;
++              ss = s;
++              first = 0;
++          } else if (hh != h || ss != s)
++              bad = 1;
++      }
++    }
++
++    if (!first && !bad) {
++      *heads = hh;
++      *sectors = ss;
++    }
++}
++
++static long long my_lseek (unsigned int fd, long long offset, 
++                           unsigned int origin)
++{
++#if defined(__linux__) && (!defined(__GLIBC__) || \
++        ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))))
++  /* Maybe libc doesn't have large file support.  */
++  loff_t offset, result;
++  static int _llseek (uint filedes, ulong hi, ulong lo,
++                      loff_t *res, uint wh);
++  _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo,
++             loff_t *, res, uint, wh);
++  
++  if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET) < 0)
++    return (long long) -1;
++  return result;
++#else
++  return lseek(fd, offset, SEEK_SET);
++#endif
++}
++
++static void get_linux_geometry (int fd, struct geometry *geom) {
++    long long kern_cyl = 0; int kern_head = 0, kern_sectors = 0;
++    long long pt_cyl = 0; int pt_head = 0, pt_sectors = 0;
++    partition_table bufp;
++    char *buff, *buf_unaligned;
++
++    buf_unaligned = malloc(sizeof(partition_table) + 4095);
++    buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) &
++                     (~(4096-1)));
++
++    get_kernel_geometry(fd, &kern_cyl, &kern_head, &kern_sectors);
++
++    if (my_lseek (fd, 0*SECTOR_SIZE, SEEK_SET) < 0) {
++        fprintf(stderr, "Unable to seek");
++    }
++
++    if (read(fd, buff, SECTOR_SIZE) == SECTOR_SIZE) {
++        memcpy(bufp.c.b, buff, SECTOR_SIZE);
++        get_partition_table_geometry(&bufp, &pt_cyl, &pt_head, &pt_sectors);
++    } else {
++        fprintf(stderr, "Unable to read partition table: %s\n", strerror(errno));
++    }
++
++    if (pt_head && pt_sectors) {
++        int cyl_size;
++
++        geom->heads = pt_head;
++        geom->sectors = pt_sectors;
++        cyl_size = pt_head * pt_sectors;
++        geom->cylinders = geom->total_sectors/cyl_size;
++    } else {
++        geom->heads = kern_head;
++        geom->sectors = kern_sectors;
++        geom->cylinders = kern_cyl;
++    }
++
++    return;
++}
++#endif
++
+ /* Get the geometry of a drive DRIVE.  */
+ void
+ get_drive_geometry (struct geometry *geom, char **map, int drive)
+@@ -151,20 +297,16 @@
+ #if defined(__linux__)
+   /* Linux */
+   {
+-    struct hd_geometry hdg;
+-    unsigned long nr;
++    unsigned long long nr;
+     
+-    if (ioctl (fd, HDIO_GETGEO, &hdg))
+-      goto fail;
+-
+-    if (ioctl (fd, BLKGETSIZE, &nr))
++    if (ioctl (fd, BLKGETSIZE64, &nr))
+       goto fail;
+     
+     /* Got the geometry, so save it. */
+-    geom->cylinders = hdg.cylinders;
+-    geom->heads = hdg.heads;
+-    geom->sectors = hdg.sectors;
+-    geom->total_sectors = nr;
++    get_linux_geometry(fd, geom);
++    if (!geom->heads && !geom->cylinders && !geom->sectors)
++      goto fail;
++    geom->total_sectors = nr / 512;
+     
+     goto success;
+   }
+@@ -403,10 +545,28 @@
+ }
+ static void
++get_cciss_disk_name (char *name, int controller, int drive)
++{
++  sprintf (name, "/dev/cciss/c%dd%d", controller, drive);
++}
++
++static void
++get_ida_disk_name (char *name, int controller, int drive)
++{
++  sprintf (name, "/dev/ida/c%dd%d", controller, drive);
++}
++
++static void
+ get_ataraid_disk_name (char *name, int unit)
+ {
+   sprintf (name, "/dev/ataraid/d%c", unit + '0');
+ }
++
++static void
++get_i2o_disk_name (char *name, char unit)
++{
++  sprintf (name, "/dev/i2o/hd%c", unit);
++}
+ #endif
+ /* Check if DEVICE can be read. If an error occurs, return zero,
+@@ -801,6 +961,97 @@
+         }
+       }
+   }
++    
++  /* This is for I2O - we have /dev/i2o/hd<logical drive><partition> */
++  {
++    int unit;
++
++    for (unit = 'a'; unit < 'f'; unit++)
++      {
++        char name[24];
++    
++        get_i2o_disk_name (name, unit);
++        if (check_device (name))
++          {
++              (*map)[num_hd + 0x80] = strdup (name);
++                  assert ((*map)[num_hd + 0x80]);
++                  
++          /* If the device map file is opened, write the map.  */
++               if (fp)
++                     fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
++                     
++          num_hd++;
++          }
++      }
++  }
++
++  /* This is for CCISS, its like the DAC960  - we have
++     /dev/cciss/<controller>d<logical drive>p<partition> 
++
++     It currently supports up to 3 controllers, 10 logical volumes
++     and 10 partitions
++
++     Code gratuitously copied from DAC960 above.
++     Horms <horms@verge.net.au> 23rd July 2004
++  */
++  {
++    int controller, drive;
++    
++    for (controller = 0; controller < 2; controller++)
++      {
++      for (drive = 0; drive < 9; drive++)
++        {
++          char name[24];
++          
++          get_cciss_disk_name (name, controller, drive);
++          if (check_device (name))
++            {
++              (*map)[num_hd + 0x80] = strdup (name);
++              assert ((*map)[num_hd + 0x80]);
++              
++              /* If the device map file is opened, write the map.  */
++              if (fp)
++                fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
++              
++              num_hd++;
++            }
++        }
++      }
++  }
++
++  /* This is for Compaq Smart Array, its like the DAC960  - we have
++     /dev/ida/<controller>d<logical drive>p<partition> 
++
++     It currently supports up to 3 controllers, 10 logical volumes
++     and 15 partitions
++
++     Code gratuitously copied from DAC960 above.
++     Piotr Roszatycki <dexter@debian.org>
++  */
++  {
++    int controller, drive;
++    
++    for (controller = 0; controller < 2; controller++)
++      {
++      for (drive = 0; drive < 9; drive++)
++        {
++          char name[24];
++          
++          get_ida_disk_name (name, controller, drive);
++          if (check_device (name))
++            {
++              (*map)[num_hd + 0x80] = strdup (name);
++              assert ((*map)[num_hd + 0x80]);
++              
++              /* If the device map file is opened, write the map.  */
++              if (fp)
++                fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
++              
++              num_hd++;
++            }
++        }
++      }
++  }
+ #endif /* __linux__ */
+   
+   /* OK, close the device map file if opened.  */
+@@ -844,6 +1095,7 @@
+ {
+   char dev[PATH_MAX]; /* XXX */
+   int fd;
++  off_t offset = (off_t) sector * (off_t) SECTOR_SIZE;
+   
+   if ((partition & 0x00FF00) != 0x00FF00)
+     {
+@@ -861,6 +1113,14 @@
+       if (strcmp (dev + strlen(dev) - 5, "/disc") == 0)
+       strcpy (dev + strlen(dev) - 5, "/part");
+     }
++  else
++    {
++      if ((strncmp (dev, "/dev/ataraid/", 13) == 0) ||
++         (strncmp (dev, "/dev/ida/", 9) == 0) ||
++         (strncmp (dev, "/dev/cciss/", 11) == 0) ||
++         (strncmp (dev, "/dev/rd/", 8) == 0))
++        strcpy (dev + strlen(dev), "p");
++    }
+   sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1);
+   
+   /* Open the partition.  */
+@@ -870,35 +1130,13 @@
+       errnum = ERR_NO_PART;
+       return 0;
+     }
+-  
+-#if defined(__linux__) && (!defined(__GLIBC__) || \
+-        ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))))
+-  /* Maybe libc doesn't have large file support.  */
+-  {
+-    loff_t offset, result;
+-    static int _llseek (uint filedes, ulong hi, ulong lo,
+-                        loff_t *res, uint wh);
+-    _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo,
+-               loff_t *, res, uint, wh);
+-    offset = (loff_t) sector * (loff_t) SECTOR_SIZE;
+-    if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET))
+-      {
+-      errnum = ERR_DEV_VALUES;
+-      return 0;
+-      }
+-  }
+-#else
+-  {
+-    off_t offset = (off_t) sector * (off_t) SECTOR_SIZE;
+-    if (lseek (fd, offset, SEEK_SET) != offset)
+-      {
+-      errnum = ERR_DEV_VALUES;
+-      return 0;
+-      }
+-  }
+-#endif
++  if (my_lseek(fd, offset, SEEK_SET) != offset)
++    {
++      errnum = ERR_DEV_VALUES;
++      return 0;
++    }
+   
+   if (write (fd, buf, size * SECTOR_SIZE) != (size * SECTOR_SIZE))
+     {
+diff -Nur grub-0.97/netboot/cs89x0.c grub-0.97-patched/netboot/cs89x0.c
+--- grub-0.97/netboot/cs89x0.c 2003-07-09 13:45:37.000000000 +0200
++++ grub-0.97-patched/netboot/cs89x0.c 2012-11-11 17:07:12.722729437 +0100
+@@ -1,3 +1,21 @@
++/**
++   Per an email message from Russ Nelson <nelson@crynwr.com> on
++   18 March 2008 this file is now licensed under GPL Version 2.
++
++   From: Russ Nelson <nelson@crynwr.com>
++   Date: Tue, 18 Mar 2008 12:42:00 -0400
++   Subject: Re: [Etherboot-developers] cs89x0 driver in etherboot
++   -- quote from email
++   As copyright holder, if I say it doesn't conflict with the GPL,
++   then it doesn't conflict with the GPL.
++
++   However, there's no point in causing people's brains to overheat,
++   so yes, I grant permission for the code to be relicensed under the
++   GPLv2.  Please make sure that this change in licensing makes its
++   way upstream.  -russ
++   -- quote from email
++**/
++
+ /* cs89x0.c: A Crystal Semiconductor CS89[02]0 driver for etherboot. */
+ /*
+   Permission is granted to distribute the enclosed cs89x0.[ch] driver
+diff -Nur grub-0.97/netboot/cs89x0.h grub-0.97-patched/netboot/cs89x0.h
+--- grub-0.97/netboot/cs89x0.h 2003-07-09 13:45:37.000000000 +0200
++++ grub-0.97-patched/netboot/cs89x0.h 2012-11-11 17:07:12.723729469 +0100
+@@ -1,3 +1,21 @@
++/**
++   Per an email message from Russ Nelson <nelson@crynwr.com> on
++   18 March 2008 this file is now licensed under GPL Version 2.
++
++   From: Russ Nelson <nelson@crynwr.com>
++   Date: Tue, 18 Mar 2008 12:42:00 -0400
++   Subject: Re: [Etherboot-developers] cs89x0 driver in etherboot
++   -- quote from email
++   As copyright holder, if I say it doesn't conflict with the GPL,
++   then it doesn't conflict with the GPL.
++
++   However, there's no point in causing people's brains to overheat,
++   so yes, I grant permission for the code to be relicensed under the
++   GPLv2.  Please make sure that this change in licensing makes its
++   way upstream.  -russ
++   -- quote from email
++**/
++
+ /*  Copyright, 1988-1992, Russell Nelson, Crynwr Software
+    This program is free software; you can redistribute it and/or modify
+diff -Nur grub-0.97/netboot/etherboot.h grub-0.97-patched/netboot/etherboot.h
+--- grub-0.97/netboot/etherboot.h      2003-07-09 13:45:37.000000000 +0200
++++ grub-0.97-patched/netboot/etherboot.h      2012-11-11 17:07:12.723729469 +0100
+@@ -531,9 +531,6 @@
+ extern int network_ready;
+ extern struct rom_info rom;
+ extern struct arptable_t arptable[MAX_ARP];
+-extern struct bootpd_t bootp_data;
+-#define       BOOTP_DATA_ADDR (&bootp_data)
+-extern unsigned char *end_of_rfc1533;
+ /* config.c */
+ extern struct nic nic;
+diff -Nur grub-0.97/netboot/main.c grub-0.97-patched/netboot/main.c
+--- grub-0.97/netboot/main.c   2004-05-21 00:19:33.000000000 +0200
++++ grub-0.97-patched/netboot/main.c   2012-11-11 17:07:12.724729500 +0100
+@@ -56,7 +56,8 @@
+ static unsigned long netmask;
+ static struct bootpd_t bootp_data;
+ static unsigned long xid;
+-static unsigned char *end_of_rfc1533 = NULL;
++
++#define       BOOTP_DATA_ADDR (&bootp_data)
+ #ifndef       NO_DHCP_SUPPORT
+ #endif /* NO_DHCP_SUPPORT */
+@@ -83,7 +84,9 @@
+   RFC2132_MAX_SIZE,2, /* request as much as we can */
+   ETH_MAX_MTU / 256, ETH_MAX_MTU % 256,
+   RFC2132_PARAM_LIST, 4, RFC1533_NETMASK, RFC1533_GATEWAY,
+-  RFC1533_HOSTNAME, RFC1533_EXTENSIONPATH
++  RFC1533_HOSTNAME, RFC1533_EXTENSIONPATH,
++  /* Vendor class identifier */
++  RFC2132_VENDOR_CLASS_ID, 10, 'G', 'R', 'U', 'B', 'C', 'l', 'i', 'e', 'n', 't',
+ };
+ static const unsigned char dhcprequest[] =
+@@ -103,6 +106,8 @@
+   /* Etherboot vendortags */
+   RFC1533_VENDOR_MAGIC,
+   RFC1533_VENDOR_CONFIGFILE,
++  /* Vendor class identifier */
++  RFC2132_VENDOR_CLASS_ID, 10, 'G', 'R', 'U', 'B', 'C', 'l', 'i', 'e', 'n', 't',
+ };
+ #endif /* ! NO_DHCP_SUPPORT */
+@@ -701,7 +706,7 @@
+      "adcw %%ax,%0\n\t"               /* add carry of previous iteration */
+      "loop 1b\n\t"
+      "adcw $0,%0"             /* add carry of last iteration */
+-     : "=b" (*sum), "=S"(start), "=c"(len)
++     : "=r" (*sum), "=S"(start), "=c"(len)
+      : "0"(*sum), "1"(start), "2"(len)
+      : "ax", "cc"
+      );
+@@ -967,7 +972,6 @@
+   
+   if (block == 0)
+     {
+-      end_of_rfc1533 = NULL;
+       vendorext_isvalid = 0;
+       
+       if (grub_memcmp (p, rfc1533_cookie, 4))
+@@ -1021,7 +1025,7 @@
+       }
+       else if (c == RFC1533_END)
+       {
+-        end_of_rfc1533 = endp = p;
++        endp = p;
+         continue;
+       }
+       else if (c == RFC1533_NETMASK)
+diff -Nur grub-0.97/netboot/natsemi.c grub-0.97-patched/netboot/natsemi.c
+--- grub-0.97/netboot/natsemi.c        2003-07-09 13:45:38.000000000 +0200
++++ grub-0.97-patched/netboot/natsemi.c        2012-11-11 17:07:12.724729500 +0100
+@@ -608,7 +608,7 @@
+                const char  *p)     /* Packet */
+ {
+     u32 status, to, nstype;
+-    u32 tx_status;
++    volatile u32 tx_status;
+     
+     /* Stop the transmitter */
+     outl(TxOff, ioaddr + ChipCmd);
+@@ -647,7 +647,7 @@
+     to = currticks() + TX_TIMEOUT;
+-    while ((((volatile u32) tx_status=txd.cmdsts) & OWN) && (currticks() < to))
++    while (((tx_status=txd.cmdsts) & OWN) && (currticks() < to))
+         /* wait */ ;
+     if (currticks() >= to) {
+diff -Nur grub-0.97/netboot/pci.c grub-0.97-patched/netboot/pci.c
+--- grub-0.97/netboot/pci.c    2003-07-09 13:45:38.000000000 +0200
++++ grub-0.97-patched/netboot/pci.c    2012-11-11 17:07:07.227553894 +0100
+@@ -105,13 +105,16 @@
+       save_flags(flags);
+       __asm__(
++              "pushl %%ebx\n\t" /* save %ebx */
+ #ifdef ABSOLUTE_WITHOUT_ASTERISK
+-              "lcall (%%edi)"
++              "lcall (%%edi)\n\t"
+ #else
+-              "lcall *(%%edi)"
++              "lcall *(%%edi)\n\t"
+ #endif
++              "movl %%ebx, %1\n\t" /* capture what was in %ebx */
++              "popl %%ebx\n\t" /* restore %ebx */
+               : "=a" (return_code),
+-                "=b" (address),
++                "=r" (address),
+                 "=c" (length),
+                 "=d" (entry)
+               : "0" (service),
+@@ -141,18 +144,21 @@
+         save_flags(flags);
+         __asm__(
++              "pushl %%ebx\n\t" /* save %ebx */
++              "movl %3, %%ebx\n\t" /* put the value into ebx */
+ #ifdef ABSOLUTE_WITHOUT_ASTERISK
+               "lcall (%%esi)\n\t"
+ #else
+               "lcall *(%%esi)\n\t"
+ #endif
+                 "jc 1f\n\t"
+-                "xor %%ah, %%ah\n"
++              "popl %%ebx\n\t" /* restore %ebx */
++              "xor %%ah, %%ah\n\t"
+                 "1:"
+                 : "=c" (*value),
+                   "=a" (ret)
+                 : "1" (PCIBIOS_READ_CONFIG_BYTE),
+-                  "b" (bx),
++                  "r" (bx),
+                   "D" ((long) where),
+                   "S" (&pci_indirect));
+         restore_flags(flags);
+@@ -168,18 +174,21 @@
+         save_flags(flags);
+         __asm__(
++              "pushl %%ebx\n\t" /* save %ebx */
++              "movl %3, %%ebx\n\t" /* put the value into ebx */
+ #ifdef ABSOLUTE_WITHOUT_ASTERISK
+               "lcall (%%esi)\n\t"
+ #else
+               "lcall *(%%esi)\n\t"
+ #endif
+                 "jc 1f\n\t"
+-                "xor %%ah, %%ah\n"
++              "popl %%ebx\n\t" /* restore %ebx */
++              "xor %%ah, %%ah\n\t"
+                 "1:"
+                 : "=c" (*value),
+                   "=a" (ret)
+                 : "1" (PCIBIOS_READ_CONFIG_WORD),
+-                  "b" (bx),
++              "r" (bx),
+                   "D" ((long) where),
+                   "S" (&pci_indirect));
+         restore_flags(flags);
+@@ -195,18 +204,21 @@
+         save_flags(flags);
+         __asm__(
++          "pushl %%ebx\n\t" /* save %ebx */
++          "movl %3, %%ebx\n\t" /* put the value into ebx */
+ #ifdef ABSOLUTE_WITHOUT_ASTERISK
+               "lcall (%%esi)\n\t"
+ #else
+               "lcall *(%%esi)\n\t"
+ #endif
+                 "jc 1f\n\t"
+-                "xor %%ah, %%ah\n"
++          "popl %%ebx\n\t" /* restore %ebx */
++          "xor %%ah, %%ah\n\t"
+                 "1:"
+                 : "=c" (*value),
+                   "=a" (ret)
+                 : "1" (PCIBIOS_READ_CONFIG_DWORD),
+-                  "b" (bx),
++          "r" (bx),
+                   "D" ((long) where),
+                   "S" (&pci_indirect));
+         restore_flags(flags);
+@@ -222,18 +234,21 @@
+       save_flags(flags); cli();
+       __asm__(
++          "pushl %%ebx\n\t" /* save %ebx */
++          "movl %3, %%ebx\n\t" /* put the value into ebx */
+ #ifdef ABSOLUTE_WITHOUT_ASTERISK
+               "lcall (%%esi)\n\t"
+ #else
+               "lcall *(%%esi)\n\t"
+ #endif
+               "jc 1f\n\t"
+-              "xor %%ah, %%ah\n"
++          "popl %%ebx\n\t" /* restore %ebx */
++          "xor %%ah, %%ah\n\t"
+               "1:"
+               : "=a" (ret)
+               : "0" (PCIBIOS_WRITE_CONFIG_BYTE),
+                 "c" (value),
+-                "b" (bx),
++          "r" (bx),
+                 "D" ((long) where),
+                 "S" (&pci_indirect));
+       restore_flags(flags);
+@@ -249,18 +264,21 @@
+       save_flags(flags); cli();
+       __asm__(
++          "pushl %%ebx\n\t" /* save %ebx */
++          "movl %3, %%ebx\n\t" /* put the value into ebx */
+ #ifdef ABSOLUTE_WITHOUT_ASTERISK
+               "lcall (%%esi)\n\t"
+ #else
+               "lcall *(%%esi)\n\t"
+ #endif
+               "jc 1f\n\t"
+-              "xor %%ah, %%ah\n"
++          "popl %%ebx\n\t" /* restore %ebx */
++          "xor %%ah, %%ah\n\t"
+               "1:"
+               : "=a" (ret)
+               : "0" (PCIBIOS_WRITE_CONFIG_WORD),
+                 "c" (value),
+-                "b" (bx),
++          "r" (bx),
+                 "D" ((long) where),
+                 "S" (&pci_indirect));
+       restore_flags(flags);
+@@ -276,18 +294,21 @@
+       save_flags(flags); cli();
+       __asm__(
++          "pushl %%ebx\n\t" /* save %ebx */
++          "movl %3, %%ebx\n\t" /* put the value into ebx */
+ #ifdef ABSOLUTE_WITHOUT_ASTERISK
+               "lcall (%%esi)\n\t"
+ #else
+               "lcall *(%%esi)\n\t"
+ #endif
+               "jc 1f\n\t"
+-              "xor %%ah, %%ah\n"
++          "popl %%ebx\n\t" /* restore %ebx */
++          "xor %%ah, %%ah\n\t"
+               "1:"
+               : "=a" (ret)
+               : "0" (PCIBIOS_WRITE_CONFIG_DWORD),
+                 "c" (value),
+-                "b" (bx),
++          "r" (bx),
+                 "D" ((long) where),
+                 "S" (&pci_indirect));
+       restore_flags(flags);
+@@ -308,20 +329,22 @@
+               save_flags(flags);
+               __asm__(
++              "pushl %%ebx\n\t" /* save %ebx */
+ #ifdef ABSOLUTE_WITHOUT_ASTERISK
+                       "lcall (%%edi)\n\t"
+ #else
+                       "lcall *(%%edi)\n\t"
+ #endif
+                       "jc 1f\n\t"
+-                      "xor %%ah, %%ah\n"
++              "xor %%ah, %%ah\n\t"
+                       "1:\tshl $8, %%eax\n\t"
+-                      "movw %%bx, %%ax"
++              "movw %%bx, %%ax\n\t"
++              "popl %%ebx\n\t" /* restore %ebx */
+                       : "=d" (signature),
+                         "=a" (pack)
+                       : "1" (PCIBIOS_PCI_BIOS_PRESENT),
+                         "D" (&pci_indirect)
+-                      : "bx", "cx");
++              : "cx");
+               restore_flags(flags);
+               present_status = (pack >> 16) & 0xff;
+diff -Nur grub-0.97/netboot/sis900.c grub-0.97-patched/netboot/sis900.c
+--- grub-0.97/netboot/sis900.c 2003-07-09 13:45:38.000000000 +0200
++++ grub-0.97-patched/netboot/sis900.c 2012-11-11 17:07:12.725729531 +0100
+@@ -901,7 +901,7 @@
+                 const char  *p)     /* Packet */
+ {
+     u32 status, to, nstype;
+-    u32 tx_status;
++    volatile u32 tx_status;
+     
+     /* Stop the transmitter */
+     outl(TxDIS, ioaddr + cr);
+@@ -940,7 +940,7 @@
+     to = currticks() + TX_TIMEOUT;
+-    while ((((volatile u32) tx_status=txd.cmdsts) & OWN) && (currticks() < to))
++    while (((tx_status=txd.cmdsts) & OWN) && (currticks() < to))
+         /* wait */ ;
+     if (currticks() >= to) {
+diff -Nur grub-0.97/stage1/Makefile.am grub-0.97-patched/stage1/Makefile.am
+--- grub-0.97/stage1/Makefile.am       2004-07-16 13:44:56.000000000 +0200
++++ grub-0.97-patched/stage1/Makefile.am       2012-11-11 17:07:12.747730236 +0100
+@@ -1,11 +1,11 @@
+-pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
+-nodist_pkglib_DATA = stage1
++stagedir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
++nodist_stage_DATA = stage1
+-CLEANFILES = $(nodist_pkglib_DATA)
++CLEANFILES = $(nodist_stage_DATA)
+ # We can't use builtins or standard includes.
+ AM_CCASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc
+-LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00
++stage1_exec_LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00
+ noinst_PROGRAMS = stage1.exec
+ stage1_exec_SOURCES = stage1.S stage1.h
+diff -Nur grub-0.97/stage2/asm.S grub-0.97-patched/stage2/asm.S
+--- grub-0.97/stage2/asm.S     2004-06-19 18:55:22.000000000 +0200
++++ grub-0.97-patched/stage2/asm.S     2012-11-11 17:07:03.850446017 +0100
+@@ -1651,7 +1651,29 @@
+       jnz     3f
+       ret
+-3:    /* use keyboard controller */
++3:    /*
++       * try to switch gateA20 using PORT92, the "Fast A20 and Init"
++       * register
++      */
++      mov $0x92, %dx
++      inb %dx, %al
++      /* skip the port92 code if it's unimplemented (read returns 0xff) */
++      cmpb $0xff, %al
++      jz 6f
++      
++      /* set or clear bit1, the ALT_A20_GATE bit */
++      movb 4(%esp), %ah
++      testb %ah, %ah
++      jz 4f
++      orb $2, %al
++      jmp 5f
++4:    and $0xfd, %al
++      
++      /* clear the INIT_NOW bit don't accidently reset the machine */
++5:    and $0xfe, %al
++      outb %al, %dx
++      
++6:    /* use keyboard controller */
+       pushl   %eax
+       call    gloop1
+@@ -1661,9 +1683,12 @@
+ gloopint1:
+       inb     $K_STATUS
++      cmpb    $0xff, %al
++      jz      gloopint1_done
+       andb    $K_IBUF_FUL, %al
+       jnz     gloopint1
++gloopint1_done:       
+       movb    $KB_OUTPUT_MASK, %al
+       cmpb    $0, 0x8(%esp)
+       jz      gdoit
+@@ -1684,6 +1709,8 @@
+ gloop1:
+       inb     $K_STATUS
++      cmpb    $0xff, %al
++      jz      gloop2ret
+       andb    $K_IBUF_FUL, %al
+       jnz     gloop1
+@@ -1991,6 +2018,11 @@
+ ENTRY(console_getkey)
+       push    %ebp
++wait_for_key:
++      call    EXT_C(console_checkkey)
++      incl    %eax
++      jz      wait_for_key
++      
+       call    EXT_C(prot_to_real)
+       .code16
+@@ -2216,6 +2248,156 @@
+       pop     %ebx
+       pop     %ebp
+       ret
++
++/* graphics mode functions */
++#ifdef SUPPORT_GRAPHICS
++VARIABLE(cursorX)
++.word 0
++VARIABLE(cursorY)
++.word 0
++VARIABLE(cursorCount)
++.word 0
++VARIABLE(cursorBuf)
++.byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
++
++      
++/*
++ * int set_videomode(mode)
++ * BIOS call "INT 10H Function 0h" to set video mode
++ *    Call with       %ah = 0x0
++ *                    %al = video mode
++ *      Returns old videomode.
++ */
++ENTRY(set_videomode)
++      push    %ebp
++      push    %ebx
++      push    %ecx
++
++      movb    0x10(%esp), %cl
++
++      call    EXT_C(prot_to_real)
++      .code16
++
++      xorw    %bx, %bx
++      movb    $0xf, %ah
++      int     $0x10                   /* Get Current Video mode */
++      movb    %al, %ch
++      xorb    %ah, %ah
++      movb    %cl, %al
++        int   $0x10                   /* Set Video mode */
++
++      DATA32  call    EXT_C(real_to_prot)
++      .code32
++
++      xorb    %ah, %ah
++      movb    %ch, %al
++
++      pop     %ecx
++      pop     %ebx
++      pop     %ebp
++      ret
++
++
++/*
++ * unsigned char * graphics_get_font()
++ * BIOS call "INT 10H Function 11h" to set font
++ *      Call with       %ah = 0x11
++ */
++ENTRY(graphics_get_font)
++      push    %ebp
++      push    %ebx
++      push    %ecx
++      push    %edx
++
++      call    EXT_C(prot_to_real)
++      .code16
++
++      movw    $0x1130, %ax
++      movb    $6, %bh         /* font 8x16 */
++      int     $0x10
++      movw    %bp, %dx
++      movw    %es, %cx
++
++      DATA32  call    EXT_C(real_to_prot)
++      .code32
++
++      xorl    %eax, %eax
++      movw    %cx, %ax
++      shll    $4, %eax
++      movw    %dx, %ax
++
++      pop     %edx
++      pop     %ecx
++      pop     %ebx
++      pop     %ebp
++      ret
++      
++
++      
++/*
++ * graphics_set_palette(index, red, green, blue)
++ * BIOS call "INT 10H Function 10h" to set individual dac register
++ *    Call with       %ah = 0x10
++ *                    %bx = register number
++ *                    %ch = new value for green (0-63)
++ *                    %cl = new value for blue (0-63)
++ *                    %dh = new value for red (0-63)
++ */
++
++ENTRY(graphics_set_palette)
++      push    %ebp
++      push    %eax
++      push    %ebx
++      push    %ecx
++      push    %edx
++
++      movw    $0x3c8, %bx             /* address write mode register */
++
++      /* wait vertical retrace */
++
++      movw    $0x3da, %dx
++l1b:  inb     %dx, %al        /* wait vertical active display */
++      test    $8, %al
++      jnz     l1b
++
++l2b:  inb     %dx, %al        /* wait vertical retrace */
++      test    $8, %al
++      jnz     l2b
++
++      mov     %bx, %dx
++      movb    0x18(%esp), %al         /* index */
++      outb    %al, %dx
++      inc     %dx
++
++      movb    0x1c(%esp), %al         /* red */
++      outb    %al, %dx
++
++      movb    0x20(%esp), %al         /* green */
++      outb    %al, %dx
++
++      movb    0x24(%esp), %al         /* blue */
++      outb    %al, %dx
++
++      movw    0x18(%esp), %bx
++
++      call    EXT_C(prot_to_real)
++      .code16
++
++      movb    %bl, %bh
++      movw    $0x1000, %ax
++      int     $0x10
++
++      DATA32  call    EXT_C(real_to_prot)
++      .code32 
++
++      pop     %edx
++      pop     %ecx
++      pop     %ebx
++      pop     %eax
++      pop     %ebp
++      ret
++
++#endif /* SUPPORT_GRAPHICS */
+               
+ /*
+  * getrtsecs()
+diff -Nur grub-0.97/stage2/bios.c grub-0.97-patched/stage2/bios.c
+--- grub-0.97/stage2/bios.c    2004-03-27 17:34:04.000000000 +0100
++++ grub-0.97-patched/stage2/bios.c    2012-11-11 17:07:12.751730363 +0100
+@@ -47,7 +47,7 @@
+    return the error number. Otherwise, return 0.  */
+ int
+ biosdisk (int read, int drive, struct geometry *geometry,
+-        int sector, int nsec, int segment)
++        unsigned int sector, int nsec, int segment)
+ {
+   int err;
+   
+@@ -60,7 +60,18 @@
+       unsigned short blocks;
+       unsigned long buffer;
+       unsigned long long block;
+-      } __attribute__ ((packed)) dap;
++
++      /* This structure is passed in the stack. A buggy BIOS could write
++       * garbage data to the tail of the struct and hang the machine. So
++       * we need this protection. - Tinybit
++       */
++      unsigned char dummy[16];
++      } __attribute__ ((packed)) *dap;
++
++      /* Even the above protection is not enough to avoid stupid actions by
++       * buggy BIOSes. So we do it in the 0040:0000 segment. - Tinybit
++       */
++      dap = (struct disk_address_packet *)0x580;
+       /* XXX: Don't check the geometry by default, because some buggy
+        BIOSes don't return the number of total sectors correctly,
+@@ -72,15 +83,15 @@
+       /* FIXME: sizeof (DAP) must be 0x10. Should assert that the compiler
+        can't add any padding.  */
+-      dap.length = sizeof (dap);
+-      dap.block = sector;
+-      dap.blocks = nsec;
+-      dap.reserved = 0;
++      dap->length = 0x10;
++      dap->block = sector;
++      dap->blocks = nsec;
++      dap->reserved = 0;
+       /* This is undocumented part. The address is formated in
+        SEGMENT:ADDRESS.  */
+-      dap.buffer = segment << 16;
++      dap->buffer = segment << 16;
+       
+-      err = biosdisk_int13_extensions ((read + 0x42) << 8, drive, &dap);
++      err = biosdisk_int13_extensions ((read + 0x42) << 8, drive, dap);
+ /* #undef NO_INT13_FALLBACK */
+ #ifndef NO_INT13_FALLBACK
+diff -Nur grub-0.97/stage2/boot.c grub-0.97-patched/stage2/boot.c
+--- grub-0.97/stage2/boot.c    2004-03-30 13:44:08.000000000 +0200
++++ grub-0.97-patched/stage2/boot.c    2012-11-11 17:07:12.727729596 +0100
+@@ -1,7 +1,7 @@
+ /* boot.c - load and bootstrap a kernel */
+ /*
+  *  GRUB  --  GRand Unified Bootloader
+- *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc.
++ *  Copyright (C) 1999,2000,2001,2002,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
+@@ -96,7 +96,7 @@
+   lh = (struct linux_kernel_header *) buffer;
+   
+   /* ELF loading supported if multiboot, FreeBSD and NetBSD.  */
+-  if ((type == KERNEL_TYPE_MULTIBOOT
++  if (((type == KERNEL_TYPE_MULTIBOOT && ! (flags & MULTIBOOT_AOUT_KLUDGE))
+        || pu.elf->e_ident[EI_OSABI] == ELFOSABI_FREEBSD
+        || grub_strcmp (pu.elf->e_ident + EI_BRAND, "FreeBSD") == 0
+        || suggested_type == KERNEL_TYPE_NETBSD)
+@@ -241,7 +241,7 @@
+           }
+         if (lh->version >= 0x0202)
+-          lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_OFFSET;
++          lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_0202_PRM_OFFSET;
+         else
+           {
+             lh->cl_magic = LINUX_CL_MAGIC;
+@@ -407,6 +407,15 @@
+           while (dest < linux_data_tmp_addr + LINUX_CL_END_OFFSET && *src)
+             *(dest++) = *(src++);
+       
++          {
++          char *src = skip_to (0, arg);
++          char *dest = linux_data_tmp_addr + LINUX_CL_0202_PRM_OFFSET;
++      
++          while (dest < linux_data_tmp_addr + LINUX_CL_0202_PRM_END_OFFSET && *src)
++            *(dest++) = *(src++);
++          *dest = 0;
++          }
++
+           /* Old Linux kernels have problems determining the amount of
+              the available memory.  To work around this problem, we add
+              the "mem" option to the kernel command line.  This has its
+@@ -824,8 +833,11 @@
+     moveto = (mbi.mem_upper + 0x400) << 10;
+   
+   moveto = (moveto - len) & 0xfffff000;
+-  max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203
+-            ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS);
++  max_addr = LINUX_INITRD_MAX_ADDRESS;
++  if (lh->header == LINUX_MAGIC_SIGNATURE &&
++      lh->version >= 0x0203 &&
++      lh->initrd_addr_max < max_addr)
++    max_addr = lh->initrd_addr_max;
+   if (moveto + len >= max_addr)
+     moveto = (max_addr - len) & 0xfffff000;
+   
+diff -Nur grub-0.97/stage2/boot.c.orig grub-0.97-patched/stage2/boot.c.orig
+--- grub-0.97/stage2/boot.c.orig       1970-01-01 01:00:00.000000000 +0100
++++ grub-0.97-patched/stage2/boot.c.orig       2004-03-30 13:44:08.000000000 +0200
+@@ -0,0 +1,1020 @@
++/* boot.c - load and bootstrap a kernel */
++/*
++ *  GRUB  --  GRand Unified Bootloader
++ *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc.
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License as published by
++ *  the Free Software Foundation; either version 2 of the License, or
++ *  (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the Free Software
++ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++
++#include "shared.h"
++
++#include "freebsd.h"
++#include "imgact_aout.h"
++#include "i386-elf.h"
++
++static int cur_addr;
++entry_func entry_addr;
++static struct mod_list mll[99];
++static int linux_mem_size;
++
++/*
++ *  The next two functions, 'load_image' and 'load_module', are the building
++ *  blocks of the multiboot loader component.  They handle essentially all
++ *  of the gory details of loading in a bootable image and the modules.
++ */
++
++kernel_t
++load_image (char *kernel, char *arg, kernel_t suggested_type,
++          unsigned long load_flags)
++{
++  int len, i, exec_type = 0, align_4k = 1;
++  entry_func real_entry_addr = 0;
++  kernel_t type = KERNEL_TYPE_NONE;
++  unsigned long flags = 0, text_len = 0, data_len = 0, bss_len = 0;
++  char *str = 0, *str2 = 0;
++  struct linux_kernel_header *lh;
++  union
++    {
++      struct multiboot_header *mb;
++      struct exec *aout;
++      Elf32_Ehdr *elf;
++    }
++  pu;
++  /* presuming that MULTIBOOT_SEARCH is large enough to encompass an
++     executable header */
++  unsigned char buffer[MULTIBOOT_SEARCH];
++
++  /* sets the header pointer to point to the beginning of the
++     buffer by default */
++  pu.aout = (struct exec *) buffer;
++
++  if (!grub_open (kernel))
++    return KERNEL_TYPE_NONE;
++
++  if (!(len = grub_read (buffer, MULTIBOOT_SEARCH)) || len < 32)
++    {
++      grub_close ();
++      
++      if (!errnum)
++      errnum = ERR_EXEC_FORMAT;
++
++      return KERNEL_TYPE_NONE;
++    }
++
++  for (i = 0; i < len; i++)
++    {
++      if (MULTIBOOT_FOUND ((int) (buffer + i), len - i))
++      {
++        flags = ((struct multiboot_header *) (buffer + i))->flags;
++        if (flags & MULTIBOOT_UNSUPPORTED)
++          {
++            grub_close ();
++            errnum = ERR_BOOT_FEATURES;
++            return KERNEL_TYPE_NONE;
++          }
++        type = KERNEL_TYPE_MULTIBOOT;
++        str2 = "Multiboot";
++        break;
++      }
++    }
++
++  /* Use BUFFER as a linux kernel header, if the image is Linux zImage
++     or bzImage.  */
++  lh = (struct linux_kernel_header *) buffer;
++  
++  /* ELF loading supported if multiboot, FreeBSD and NetBSD.  */
++  if ((type == KERNEL_TYPE_MULTIBOOT
++       || pu.elf->e_ident[EI_OSABI] == ELFOSABI_FREEBSD
++       || grub_strcmp (pu.elf->e_ident + EI_BRAND, "FreeBSD") == 0
++       || suggested_type == KERNEL_TYPE_NETBSD)
++      && len > sizeof (Elf32_Ehdr)
++      && BOOTABLE_I386_ELF ((*((Elf32_Ehdr *) buffer))))
++    {
++      if (type == KERNEL_TYPE_MULTIBOOT)
++      entry_addr = (entry_func) pu.elf->e_entry;
++      else
++      entry_addr = (entry_func) (pu.elf->e_entry & 0xFFFFFF);
++
++      if (entry_addr < (entry_func) 0x100000)
++      errnum = ERR_BELOW_1MB;
++
++      /* don't want to deal with ELF program header at some random
++         place in the file -- this generally won't happen */
++      if (pu.elf->e_phoff == 0 || pu.elf->e_phnum == 0
++        || ((pu.elf->e_phoff + (pu.elf->e_phentsize * pu.elf->e_phnum))
++            >= len))
++      errnum = ERR_EXEC_FORMAT;
++      str = "elf";
++
++      if (type == KERNEL_TYPE_NONE)
++      {
++        /* At the moment, there is no way to identify a NetBSD ELF
++           kernel, so rely on the suggested type by the user.  */
++        if (suggested_type == KERNEL_TYPE_NETBSD)
++          {
++            str2 = "NetBSD";
++            type = suggested_type;
++          }
++        else
++          {
++            str2 = "FreeBSD";
++            type = KERNEL_TYPE_FREEBSD;
++          }
++      }
++    }
++  else if (flags & MULTIBOOT_AOUT_KLUDGE)
++    {
++      pu.mb = (struct multiboot_header *) (buffer + i);
++      entry_addr = (entry_func) pu.mb->entry_addr;
++      cur_addr = pu.mb->load_addr;
++      /* first offset into file */
++      grub_seek (i - (pu.mb->header_addr - cur_addr));
++
++      /* If the load end address is zero, load the whole contents.  */
++      if (! pu.mb->load_end_addr)
++      pu.mb->load_end_addr = cur_addr + filemax;
++      
++      text_len = pu.mb->load_end_addr - cur_addr;
++      data_len = 0;
++
++      /* If the bss end address is zero, assume that there is no bss area.  */
++      if (! pu.mb->bss_end_addr)
++      pu.mb->bss_end_addr = pu.mb->load_end_addr;
++      
++      bss_len = pu.mb->bss_end_addr - pu.mb->load_end_addr;
++
++      if (pu.mb->header_addr < pu.mb->load_addr
++        || pu.mb->load_end_addr <= pu.mb->load_addr
++        || pu.mb->bss_end_addr < pu.mb->load_end_addr
++        || (pu.mb->header_addr - pu.mb->load_addr) > i)
++      errnum = ERR_EXEC_FORMAT;
++
++      if (cur_addr < 0x100000)
++      errnum = ERR_BELOW_1MB;
++
++      pu.aout = (struct exec *) buffer;
++      exec_type = 2;
++      str = "kludge";
++    }
++  else if (len > sizeof (struct exec) && !N_BADMAG ((*(pu.aout))))
++    {
++      entry_addr = (entry_func) pu.aout->a_entry;
++
++      if (type == KERNEL_TYPE_NONE)
++      {
++        /*
++         *  If it doesn't have a Multiboot header, then presume
++         *  it is either a FreeBSD or NetBSD executable.  If so,
++         *  then use a magic number of normal ordering, ZMAGIC to
++         *  determine if it is FreeBSD.
++         *
++         *  This is all because freebsd and netbsd seem to require
++         *  masking out some address bits...  differently for each
++         *  one...  plus of course we need to know which booting
++         *  method to use.
++         */
++        entry_addr = (entry_func) ((int) entry_addr & 0xFFFFFF);
++        
++        if (buffer[0] == 0xb && buffer[1] == 1)
++          {
++            type = KERNEL_TYPE_FREEBSD;
++            cur_addr = (int) entry_addr;
++            str2 = "FreeBSD";
++          }
++        else
++          {
++            type = KERNEL_TYPE_NETBSD;
++            cur_addr = (int) entry_addr & 0xF00000;
++            if (N_GETMAGIC ((*(pu.aout))) != NMAGIC)
++              align_4k = 0;
++            str2 = "NetBSD";
++          }
++      }
++
++      /* first offset into file */
++      grub_seek (N_TXTOFF (*(pu.aout)));
++      text_len = pu.aout->a_text;
++      data_len = pu.aout->a_data;
++      bss_len = pu.aout->a_bss;
++
++      if (cur_addr < 0x100000)
++      errnum = ERR_BELOW_1MB;
++
++      exec_type = 1;
++      str = "a.out";
++    }
++  else if (lh->boot_flag == BOOTSEC_SIGNATURE
++         && lh->setup_sects <= LINUX_MAX_SETUP_SECTS)
++    {
++      int big_linux = 0;
++      int setup_sects = lh->setup_sects;
++
++      if (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0200)
++      {
++        big_linux = (lh->loadflags & LINUX_FLAG_BIG_KERNEL);
++        lh->type_of_loader = LINUX_BOOT_LOADER_TYPE;
++
++        /* Put the real mode part at as a high location as possible.  */
++        linux_data_real_addr
++          = (char *) ((mbi.mem_lower << 10) - LINUX_SETUP_MOVE_SIZE);
++        /* But it must not exceed the traditional area.  */
++        if (linux_data_real_addr > (char *) LINUX_OLD_REAL_MODE_ADDR)
++          linux_data_real_addr = (char *) LINUX_OLD_REAL_MODE_ADDR;
++
++        if (lh->version >= 0x0201)
++          {
++            lh->heap_end_ptr = LINUX_HEAP_END_OFFSET;
++            lh->loadflags |= LINUX_FLAG_CAN_USE_HEAP;
++          }
++
++        if (lh->version >= 0x0202)
++          lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_OFFSET;
++        else
++          {
++            lh->cl_magic = LINUX_CL_MAGIC;
++            lh->cl_offset = LINUX_CL_OFFSET;
++            lh->setup_move_size = LINUX_SETUP_MOVE_SIZE;
++          }
++      }
++      else
++      {
++        /* Your kernel is quite old...  */
++        lh->cl_magic = LINUX_CL_MAGIC;
++        lh->cl_offset = LINUX_CL_OFFSET;
++        
++        setup_sects = LINUX_DEFAULT_SETUP_SECTS;
++
++        linux_data_real_addr = (char *) LINUX_OLD_REAL_MODE_ADDR;
++      }
++      
++      /* If SETUP_SECTS is not set, set it to the default (4).  */
++      if (! setup_sects)
++      setup_sects = LINUX_DEFAULT_SETUP_SECTS;
++
++      data_len = setup_sects << 9;
++      text_len = filemax - data_len - SECTOR_SIZE;
++
++      linux_data_tmp_addr = (char *) LINUX_BZIMAGE_ADDR + text_len;
++      
++      if (! big_linux
++        && text_len > linux_data_real_addr - (char *) LINUX_ZIMAGE_ADDR)
++      {
++        grub_printf (" linux 'zImage' kernel too big, try 'make bzImage'\n");
++        errnum = ERR_WONT_FIT;
++      }
++      else if (linux_data_real_addr + LINUX_SETUP_MOVE_SIZE
++             > RAW_ADDR ((char *) (mbi.mem_lower << 10)))
++      errnum = ERR_WONT_FIT;
++      else
++      {
++        grub_printf ("   [Linux-%s, setup=0x%x, size=0x%x]\n",
++                     (big_linux ? "bzImage" : "zImage"), data_len, text_len);
++
++        /* Video mode selection support. What a mess!  */
++        /* NOTE: Even the word "mess" is not still enough to
++           represent how wrong and bad the Linux video support is,
++           but I don't want to hear complaints from Linux fanatics
++           any more. -okuji  */
++        {
++          char *vga;
++      
++          /* Find the substring "vga=".  */
++          vga = grub_strstr (arg, "vga=");
++          if (vga)
++            {
++              char *value = vga + 4;
++              int vid_mode;
++          
++              /* Handle special strings.  */
++              if (substring ("normal", value) < 1)
++                vid_mode = LINUX_VID_MODE_NORMAL;
++              else if (substring ("ext", value) < 1)
++                vid_mode = LINUX_VID_MODE_EXTENDED;
++              else if (substring ("ask", value) < 1)
++                vid_mode = LINUX_VID_MODE_ASK;
++              else if (safe_parse_maxint (&value, &vid_mode))
++                ;
++              else
++                {
++                  /* ERRNUM is already set inside the function
++                     safe_parse_maxint.  */
++                  grub_close ();
++                  return KERNEL_TYPE_NONE;
++                }
++          
++              lh->vid_mode = vid_mode;
++            }
++        }
++
++        /* Check the mem= option to limit memory used for initrd.  */
++        {
++          char *mem;
++      
++          mem = grub_strstr (arg, "mem=");
++          if (mem)
++            {
++              char *value = mem + 4;
++          
++              safe_parse_maxint (&value, &linux_mem_size);
++              switch (errnum)
++                {
++                case ERR_NUMBER_OVERFLOW:
++                  /* If an overflow occurs, use the maximum address for
++                     initrd instead. This is good, because MAXINT is
++                     greater than LINUX_INITRD_MAX_ADDRESS.  */
++                  linux_mem_size = LINUX_INITRD_MAX_ADDRESS;
++                  errnum = ERR_NONE;
++                  break;
++              
++                case ERR_NONE:
++                  {
++                    int shift = 0;
++                
++                    switch (grub_tolower (*value))
++                      {
++                      case 'g':
++                        shift += 10;
++                      case 'm':
++                        shift += 10;
++                      case 'k':
++                        shift += 10;
++                      default:
++                        break;
++                      }
++                
++                    /* Check an overflow.  */
++                    if (linux_mem_size > (MAXINT >> shift))
++                      linux_mem_size = LINUX_INITRD_MAX_ADDRESS;
++                    else
++                      linux_mem_size <<= shift;
++                  }
++                  break;
++              
++                default:
++                  linux_mem_size = 0;
++                  errnum = ERR_NONE;
++                  break;
++                }
++            }
++          else
++            linux_mem_size = 0;
++        }
++      
++        /* It is possible that DATA_LEN + SECTOR_SIZE is greater than
++           MULTIBOOT_SEARCH, so the data may have been read partially.  */
++        if (data_len + SECTOR_SIZE <= MULTIBOOT_SEARCH)
++          grub_memmove (linux_data_tmp_addr, buffer,
++                        data_len + SECTOR_SIZE);
++        else
++          {
++            grub_memmove (linux_data_tmp_addr, buffer, MULTIBOOT_SEARCH);
++            grub_read (linux_data_tmp_addr + MULTIBOOT_SEARCH,
++                       data_len + SECTOR_SIZE - MULTIBOOT_SEARCH);
++          }
++        
++        if (lh->header != LINUX_MAGIC_SIGNATURE ||
++            lh->version < 0x0200)
++          /* Clear the heap space.  */
++          grub_memset (linux_data_tmp_addr + ((setup_sects + 1) << 9),
++                       0,
++                       (64 - setup_sects - 1) << 9);
++      
++        /* Copy command-line plus memory hack to staging area.
++           NOTE: Linux has a bug that it doesn't handle multiple spaces
++           between two options and a space after a "mem=" option isn't
++           removed correctly so the arguments to init could be like
++           {"init", "", "", NULL}. This affects some not-very-clever
++           shells. Thus, the code below does a trick to avoid the bug.
++           That is, copy "mem=XXX" to the end of the command-line, and
++           avoid to copy spaces unnecessarily. Hell.  */
++        {
++          char *src = skip_to (0, arg);
++          char *dest = linux_data_tmp_addr + LINUX_CL_OFFSET;
++      
++          while (dest < linux_data_tmp_addr + LINUX_CL_END_OFFSET && *src)
++            *(dest++) = *(src++);
++      
++          /* Old Linux kernels have problems determining the amount of
++             the available memory.  To work around this problem, we add
++             the "mem" option to the kernel command line.  This has its
++             own drawbacks because newer kernels can determine the
++             memory map more accurately.  Boot protocol 2.03, which
++             appeared in Linux 2.4.18, provides a pointer to the kernel
++             version string, so we could check it.  But since kernel
++             2.4.18 and newer are known to detect memory reliably, boot
++             protocol 2.03 already implies that the kernel is new
++             enough.  The "mem" option is added if neither of the
++             following conditions is met:
++             1) The "mem" option is already present.
++             2) The "kernel" command is used with "--no-mem-option".
++             3) GNU GRUB is configured not to pass the "mem" option.
++             4) The kernel supports boot protocol 2.03 or newer.  */
++          if (! grub_strstr (arg, "mem=")
++              && ! (load_flags & KERNEL_LOAD_NO_MEM_OPTION)
++              && lh->version < 0x0203         /* kernel version < 2.4.18 */
++              && dest + 15 < linux_data_tmp_addr + LINUX_CL_END_OFFSET)
++            {
++              *dest++ = ' ';
++              *dest++ = 'm';
++              *dest++ = 'e';
++              *dest++ = 'm';
++              *dest++ = '=';
++          
++              dest = convert_to_ascii (dest, 'u', (extended_memory + 0x400));
++              *dest++ = 'K';
++            }
++      
++          *dest = 0;
++        }
++      
++        /* offset into file */
++        grub_seek (data_len + SECTOR_SIZE);
++      
++        cur_addr = (int) linux_data_tmp_addr + LINUX_SETUP_MOVE_SIZE;
++        grub_read ((char *) LINUX_BZIMAGE_ADDR, text_len);
++      
++        if (errnum == ERR_NONE)
++          {
++            grub_close ();
++        
++            /* Sanity check.  */
++            if (suggested_type != KERNEL_TYPE_NONE
++                && ((big_linux && suggested_type != KERNEL_TYPE_BIG_LINUX)
++                    || (! big_linux && suggested_type != KERNEL_TYPE_LINUX)))
++              {
++                errnum = ERR_EXEC_FORMAT;
++                return KERNEL_TYPE_NONE;
++              }
++        
++            /* Ugly hack.  */
++            linux_text_len = text_len;
++        
++            return big_linux ? KERNEL_TYPE_BIG_LINUX : KERNEL_TYPE_LINUX;
++          }
++      }
++    }
++  else                                /* no recognizable format */
++    errnum = ERR_EXEC_FORMAT;
++
++  /* return if error */
++  if (errnum)
++    {
++      grub_close ();
++      return KERNEL_TYPE_NONE;
++    }
++
++  /* fill the multiboot info structure */
++  mbi.cmdline = (int) arg;
++  mbi.mods_count = 0;
++  mbi.mods_addr = 0;
++  mbi.boot_device = (current_drive << 24) | current_partition;
++  mbi.flags &= ~(MB_INFO_MODS | MB_INFO_AOUT_SYMS | MB_INFO_ELF_SHDR);
++  mbi.syms.a.tabsize = 0;
++  mbi.syms.a.strsize = 0;
++  mbi.syms.a.addr = 0;
++  mbi.syms.a.pad = 0;
++
++  printf ("   [%s-%s", str2, str);
++
++  str = "";
++
++  if (exec_type)              /* can be loaded like a.out */
++    {
++      if (flags & MULTIBOOT_AOUT_KLUDGE)
++      str = "-and-data";
++
++      printf (", loadaddr=0x%x, text%s=0x%x", cur_addr, str, text_len);
++
++      /* read text, then read data */
++      if (grub_read ((char *) RAW_ADDR (cur_addr), text_len) == text_len)
++      {
++        cur_addr += text_len;
++
++        if (!(flags & MULTIBOOT_AOUT_KLUDGE))
++          {
++            /* we have to align to a 4K boundary */
++            if (align_4k)
++              cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000;
++            else
++              printf (", C");
++
++            printf (", data=0x%x", data_len);
++
++            if ((grub_read ((char *) RAW_ADDR (cur_addr), data_len)
++                 != data_len)
++                && !errnum)
++              errnum = ERR_EXEC_FORMAT;
++            cur_addr += data_len;
++          }
++
++        if (!errnum)
++          {
++            memset ((char *) RAW_ADDR (cur_addr), 0, bss_len);
++            cur_addr += bss_len;
++
++            printf (", bss=0x%x", bss_len);
++          }
++      }
++      else if (!errnum)
++      errnum = ERR_EXEC_FORMAT;
++
++      if (!errnum && pu.aout->a_syms
++        && pu.aout->a_syms < (filemax - filepos))
++      {
++        int symtab_err, orig_addr = cur_addr;
++
++        /* we should align to a 4K boundary here for good measure */
++        if (align_4k)
++          cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000;
++
++        mbi.syms.a.addr = cur_addr;
++
++        *((int *) RAW_ADDR (cur_addr)) = pu.aout->a_syms;
++        cur_addr += sizeof (int);
++        
++        printf (", symtab=0x%x", pu.aout->a_syms);
++
++        if (grub_read ((char *) RAW_ADDR (cur_addr), pu.aout->a_syms)
++            == pu.aout->a_syms)
++          {
++            cur_addr += pu.aout->a_syms;
++            mbi.syms.a.tabsize = pu.aout->a_syms;
++
++            if (grub_read ((char *) &i, sizeof (int)) == sizeof (int))
++              {
++                *((int *) RAW_ADDR (cur_addr)) = i;
++                cur_addr += sizeof (int);
++
++                mbi.syms.a.strsize = i;
++
++                i -= sizeof (int);
++
++                printf (", strtab=0x%x", i);
++
++                symtab_err = (grub_read ((char *) RAW_ADDR (cur_addr), i)
++                              != i);
++                cur_addr += i;
++              }
++            else
++              symtab_err = 1;
++          }
++        else
++          symtab_err = 1;
++
++        if (symtab_err)
++          {
++            printf ("(bad)");
++            cur_addr = orig_addr;
++            mbi.syms.a.tabsize = 0;
++            mbi.syms.a.strsize = 0;
++            mbi.syms.a.addr = 0;
++          }
++        else
++          mbi.flags |= MB_INFO_AOUT_SYMS;
++      }
++    }
++  else
++    /* ELF executable */
++    {
++      unsigned loaded = 0, memaddr, memsiz, filesiz;
++      Elf32_Phdr *phdr;
++
++      /* reset this to zero for now */
++      cur_addr = 0;
++
++      /* scan for program segments */
++      for (i = 0; i < pu.elf->e_phnum; i++)
++      {
++        phdr = (Elf32_Phdr *)
++          (pu.elf->e_phoff + ((int) buffer)
++           + (pu.elf->e_phentsize * i));
++        if (phdr->p_type == PT_LOAD)
++          {
++            /* offset into file */
++            grub_seek (phdr->p_offset);
++            filesiz = phdr->p_filesz;
++            
++            if (type == KERNEL_TYPE_FREEBSD || type == KERNEL_TYPE_NETBSD)
++              memaddr = RAW_ADDR (phdr->p_paddr & 0xFFFFFF);
++            else
++              memaddr = RAW_ADDR (phdr->p_paddr);
++            
++            memsiz = phdr->p_memsz;
++            if (memaddr < RAW_ADDR (0x100000))
++              errnum = ERR_BELOW_1MB;
++
++            /* If the memory range contains the entry address, get the
++               physical address here.  */
++            if (type == KERNEL_TYPE_MULTIBOOT
++                && (unsigned) entry_addr >= phdr->p_vaddr
++                && (unsigned) entry_addr < phdr->p_vaddr + memsiz)
++              real_entry_addr = (entry_func) ((unsigned) entry_addr
++                                              + memaddr - phdr->p_vaddr);
++              
++            /* make sure we only load what we're supposed to! */
++            if (filesiz > memsiz)
++              filesiz = memsiz;
++            /* mark memory as used */
++            if (cur_addr < memaddr + memsiz)
++              cur_addr = memaddr + memsiz;
++            printf (", <0x%x:0x%x:0x%x>", memaddr, filesiz,
++                    memsiz - filesiz);
++            /* increment number of segments */
++            loaded++;
++
++            /* load the segment */
++            if (memcheck (memaddr, memsiz)
++                && grub_read ((char *) memaddr, filesiz) == filesiz)
++              {
++                if (memsiz > filesiz)
++                  memset ((char *) (memaddr + filesiz), 0, memsiz - filesiz);
++              }
++            else
++              break;
++          }
++      }
++
++      if (! errnum)
++      {
++        if (! loaded)
++          errnum = ERR_EXEC_FORMAT;
++        else
++          {
++            /* Load ELF symbols.  */
++            Elf32_Shdr *shdr = NULL;
++            int tab_size, sec_size;
++            int symtab_err = 0;
++
++            mbi.syms.e.num = pu.elf->e_shnum;
++            mbi.syms.e.size = pu.elf->e_shentsize;
++            mbi.syms.e.shndx = pu.elf->e_shstrndx;
++            
++            /* We should align to a 4K boundary here for good measure.  */
++            if (align_4k)
++              cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000;
++            
++            tab_size = pu.elf->e_shentsize * pu.elf->e_shnum;
++            
++            grub_seek (pu.elf->e_shoff);
++            if (grub_read ((char *) RAW_ADDR (cur_addr), tab_size)
++                == tab_size)
++              {
++                mbi.syms.e.addr = cur_addr;
++                shdr = (Elf32_Shdr *) mbi.syms.e.addr;
++                cur_addr += tab_size;
++                
++                printf (", shtab=0x%x", cur_addr);
++                
++                for (i = 0; i < mbi.syms.e.num; i++)
++                  {
++                    /* This section is a loaded section,
++                       so we don't care.  */
++                    if (shdr[i].sh_addr != 0)
++                      continue;
++                    
++                    /* This section is empty, so we don't care.  */
++                    if (shdr[i].sh_size == 0)
++                      continue;
++                    
++                    /* Align the section to a sh_addralign bits boundary.  */
++                    cur_addr = ((cur_addr + shdr[i].sh_addralign) & 
++                                - (int) shdr[i].sh_addralign);
++                    
++                    grub_seek (shdr[i].sh_offset);
++                    
++                    sec_size = shdr[i].sh_size;
++
++                    if (! (memcheck (cur_addr, sec_size)
++                           && (grub_read ((char *) RAW_ADDR (cur_addr),
++                                          sec_size)
++                               == sec_size)))
++                      {
++                        symtab_err = 1;
++                        break;
++                      }
++                    
++                    shdr[i].sh_addr = cur_addr;
++                    cur_addr += sec_size;
++                  }
++              }
++            else 
++              symtab_err = 1;
++            
++            if (mbi.syms.e.addr < RAW_ADDR(0x10000))
++              symtab_err = 1;
++            
++            if (symtab_err) 
++              {
++                printf ("(bad)");
++                mbi.syms.e.num = 0;
++                mbi.syms.e.size = 0;
++                mbi.syms.e.addr = 0;
++                mbi.syms.e.shndx = 0;
++                cur_addr = 0;
++              }
++            else
++              mbi.flags |= MB_INFO_ELF_SHDR;
++          }
++      }
++    }
++
++  if (! errnum)
++    {
++      grub_printf (", entry=0x%x]\n", (unsigned) entry_addr);
++      
++      /* If the entry address is physically different from that of the ELF
++       header, correct it here.  */
++      if (real_entry_addr)
++      entry_addr = real_entry_addr;
++    }
++  else
++    {
++      putchar ('\n');
++      type = KERNEL_TYPE_NONE;
++    }
++
++  grub_close ();
++
++  /* Sanity check.  */
++  if (suggested_type != KERNEL_TYPE_NONE && suggested_type != type)
++    {
++      errnum = ERR_EXEC_FORMAT;
++      return KERNEL_TYPE_NONE;
++    }
++  
++  return type;
++}
++
++int
++load_module (char *module, char *arg)
++{
++  int len;
++
++  /* if we are supposed to load on 4K boundaries */
++  cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000;
++
++  if (!grub_open (module))
++    return 0;
++
++  len = grub_read ((char *) cur_addr, -1);
++  if (! len)
++    {
++      grub_close ();
++      return 0;
++    }
++
++  printf ("   [Multiboot-module @ 0x%x, 0x%x bytes]\n", cur_addr, len);
++
++  /* these two simply need to be set if any modules are loaded at all */
++  mbi.flags |= MB_INFO_MODS;
++  mbi.mods_addr = (int) mll;
++
++  mll[mbi.mods_count].cmdline = (int) arg;
++  mll[mbi.mods_count].mod_start = cur_addr;
++  cur_addr += len;
++  mll[mbi.mods_count].mod_end = cur_addr;
++  mll[mbi.mods_count].pad = 0;
++
++  /* increment number of modules included */
++  mbi.mods_count++;
++
++  grub_close ();
++  return 1;
++}
++
++int
++load_initrd (char *initrd)
++{
++  int len;
++  unsigned long moveto;
++  unsigned long max_addr;
++  struct linux_kernel_header *lh
++    = (struct linux_kernel_header *) (cur_addr - LINUX_SETUP_MOVE_SIZE);
++  
++#ifndef NO_DECOMPRESSION
++  no_decompression = 1;
++#endif
++  
++  if (! grub_open (initrd))
++    goto fail;
++
++  len = grub_read ((char *) cur_addr, -1);
++  if (! len)
++    {
++      grub_close ();
++      goto fail;
++    }
++
++  if (linux_mem_size)
++    moveto = linux_mem_size;
++  else
++    moveto = (mbi.mem_upper + 0x400) << 10;
++  
++  moveto = (moveto - len) & 0xfffff000;
++  max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203
++            ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS);
++  if (moveto + len >= max_addr)
++    moveto = (max_addr - len) & 0xfffff000;
++  
++  /* XXX: Linux 2.3.xx has a bug in the memory range check, so avoid
++     the last page.
++     XXX: Linux 2.2.xx has a bug in the memory range check, which is
++     worse than that of Linux 2.3.xx, so avoid the last 64kb. *sigh*  */
++  moveto -= 0x10000;
++  memmove ((void *) RAW_ADDR (moveto), (void *) cur_addr, len);
++
++  printf ("   [Linux-initrd @ 0x%x, 0x%x bytes]\n", moveto, len);
++
++  /* FIXME: Should check if the kernel supports INITRD.  */
++  lh->ramdisk_image = RAW_ADDR (moveto);
++  lh->ramdisk_size = len;
++
++  grub_close ();
++
++ fail:
++  
++#ifndef NO_DECOMPRESSION
++  no_decompression = 0;
++#endif
++
++  return ! errnum;
++}
++
++
++#ifdef GRUB_UTIL
++/* Dummy function to fake the *BSD boot.  */
++static void
++bsd_boot_entry (int flags, int bootdev, int sym_start, int sym_end,
++              int mem_upper, int mem_lower)
++{
++  stop ();
++}
++#endif
++
++
++/*
++ *  All "*_boot" commands depend on the images being loaded into memory
++ *  correctly, the variables in this file being set up correctly, and
++ *  the root partition being set in the 'saved_drive' and 'saved_partition'
++ *  variables.
++ */
++
++
++void
++bsd_boot (kernel_t type, int bootdev, char *arg)
++{
++  char *str;
++  int clval = 0, i;
++  struct bootinfo bi;
++
++#ifdef GRUB_UTIL
++  entry_addr = (entry_func) bsd_boot_entry;
++#else
++  stop_floppy ();
++#endif
++
++  while (*(++arg) && *arg != ' ');
++  str = arg;
++  while (*str)
++    {
++      if (*str == '-')
++      {
++        while (*str && *str != ' ')
++          {
++            if (*str == 'C')
++              clval |= RB_CDROM;
++            if (*str == 'a')
++              clval |= RB_ASKNAME;
++            if (*str == 'b')
++              clval |= RB_HALT;
++            if (*str == 'c')
++              clval |= RB_CONFIG;
++            if (*str == 'd')
++              clval |= RB_KDB;
++            if (*str == 'D')
++              clval |= RB_MULTIPLE;
++            if (*str == 'g')
++              clval |= RB_GDB;
++            if (*str == 'h')
++              clval |= RB_SERIAL;
++            if (*str == 'm')
++              clval |= RB_MUTE;
++            if (*str == 'r')
++              clval |= RB_DFLTROOT;
++            if (*str == 's')
++              clval |= RB_SINGLE;
++            if (*str == 'v')
++              clval |= RB_VERBOSE;
++            str++;
++          }
++        continue;
++      }
++      str++;
++    }
++
++  if (type == KERNEL_TYPE_FREEBSD)
++    {
++      clval |= RB_BOOTINFO;
++
++      bi.bi_version = BOOTINFO_VERSION;
++
++      *arg = 0;
++      while ((--arg) > (char *) MB_CMDLINE_BUF && *arg != '/');
++      if (*arg == '/')
++      bi.bi_kernelname = arg + 1;
++      else
++      bi.bi_kernelname = 0;
++
++      bi.bi_nfs_diskless = 0;
++      bi.bi_n_bios_used = 0;  /* this field is apparently unused */
++
++      for (i = 0; i < N_BIOS_GEOM; i++)
++      {
++        struct geometry geom;
++
++        /* XXX Should check the return value.  */
++        get_diskinfo (i + 0x80, &geom);
++        /* FIXME: If HEADS or SECTORS is greater than 255, then this will
++           break the geometry information. That is a drawback of BSD
++           but not of GRUB.  */
++        bi.bi_bios_geom[i] = (((geom.cylinders - 1) << 16)
++                              + (((geom.heads - 1) & 0xff) << 8)
++                              + (geom.sectors & 0xff));
++      }
++
++      bi.bi_size = sizeof (struct bootinfo);
++      bi.bi_memsizes_valid = 1;
++      bi.bi_bios_dev = saved_drive;
++      bi.bi_basemem = mbi.mem_lower;
++      bi.bi_extmem = extended_memory;
++
++      if (mbi.flags & MB_INFO_AOUT_SYMS)
++      {
++        bi.bi_symtab = mbi.syms.a.addr;
++        bi.bi_esymtab = mbi.syms.a.addr + 4
++          + mbi.syms.a.tabsize + mbi.syms.a.strsize;
++      }
++#if 0
++      else if (mbi.flags & MB_INFO_ELF_SHDR)
++      {
++        /* FIXME: Should check if a symbol table exists and, if exists,
++           pass the table to BI.  */
++      }
++#endif
++      else
++      {
++        bi.bi_symtab = 0;
++        bi.bi_esymtab = 0;
++      }
++
++      /* call entry point */
++      (*entry_addr) (clval, bootdev, 0, 0, 0, ((int) (&bi)));
++    }
++  else
++    {
++      /*
++       *  We now pass the various bootstrap parameters to the loaded
++       *  image via the argument list.
++       *
++       *  This is the official list:
++       *
++       *  arg0 = 8 (magic)
++       *  arg1 = boot flags
++       *  arg2 = boot device
++       *  arg3 = start of symbol table (0 if not loaded)
++       *  arg4 = end of symbol table (0 if not loaded)
++       *  arg5 = transfer address from image
++       *  arg6 = transfer address for next image pointer
++       *  arg7 = conventional memory size (640)
++       *  arg8 = extended memory size (8196)
++       *
++       *  ...in actuality, we just pass the parameters used by the kernel.
++       */
++
++      /* call entry point */
++      unsigned long end_mark;
++
++      if (mbi.flags & MB_INFO_AOUT_SYMS)
++      end_mark = (mbi.syms.a.addr + 4
++                  + mbi.syms.a.tabsize + mbi.syms.a.strsize);
++      else
++      /* FIXME: it should be mbi.syms.e.size.  */
++      end_mark = 0;
++      
++      (*entry_addr) (clval, bootdev, 0, end_mark,
++                   extended_memory, mbi.mem_lower);
++    }
++}
+diff -Nur grub-0.97/stage2/builtins.c grub-0.97-patched/stage2/builtins.c
+--- grub-0.97/stage2/builtins.c        2005-02-15 22:58:23.000000000 +0100
++++ grub-0.97-patched/stage2/builtins.c        2012-11-11 17:07:12.729729661 +0100
+@@ -131,63 +131,98 @@
+ }
\f
++/* blocklist_read_helper nee disk_read_blocklist_func was a nested
++ * function, to which pointers were taken and exposed globally.  Even
++ * in the GNU-C nested functions extension, they have local linkage,
++ * and aren't guaranteed to be accessable *at all* outside of their 
++ * containing scope.
++ *
++ * Above and beyond all of that, the variables within blocklist_func_context
++ * are originally local variables, with local (not even static) linkage,
++ * from within blocklist_func.  These were each referenced by
++ * disk_read_blocklist_func, which is only called from other functions
++ * through a globally scoped pointer.
++ * 
++ * The documentation in GCC actually uses the words "all hell will break
++ * loose" to describe this scenario.
++ *
++ * Also, "start_sector" was also used uninitialized, but gcc doesn't warn
++ * about it (possibly because of the scoping madness?)
++ */
++   
++static struct {
++       int start_sector;
++       int num_sectors;
++       int num_entries;
++       int last_length;
++} blocklist_func_context = {
++       .start_sector = 0,
++       .num_sectors = 0,
++       .num_entries = 0,
++       .last_length = 0
++};
++
++/* Collect contiguous blocks into one entry as many as possible,
++   and print the blocklist notation on the screen.  */
++static void
++blocklist_read_helper (int sector, int offset, int length)
++{
++  int *start_sector = &blocklist_func_context.start_sector;
++  int *num_sectors = &blocklist_func_context.num_sectors;
++  int *num_entries = &blocklist_func_context.num_entries;
++  int *last_length = &blocklist_func_context.last_length;
++
++  if (*num_sectors > 0)
++  {
++    if (*start_sector + *num_sectors == sector
++      && offset == 0 && *last_length == SECTOR_SIZE)
++    {
++      *num_sectors++;
++      *last_length = length;
++      return;
++    }
++    else
++    {
++      if (*last_length == SECTOR_SIZE)
++        grub_printf ("%s%d+%d", *num_entries ? "," : "",
++          *start_sector - part_start, *num_sectors);
++      else if (*num_sectors > 1)
++        grub_printf ("%s%d+%d,%d[0-%d]", *num_entries ? "," : "",
++          *start_sector - part_start, *num_sectors-1,
++          *start_sector + *num_sectors-1 - part_start, 
++          *last_length);
++      else
++        grub_printf ("%s%d[0-%d]", *num_entries ? "," : "",
++          *start_sector - part_start, *last_length);
++      *num_entries++;
++      *num_sectors = 0;
++    }
++  }
++
++  if (offset > 0)
++  {
++    grub_printf("%s%d[%d-%d]", *num_entries ? "," : "",
++          sector-part_start, offset, offset+length);
++    *num_entries++;
++  }
++  else
++  {
++    *start_sector = sector;
++    *num_sectors = 1;
++    *last_length = length;
++  }
++}
++
+ /* blocklist */
+ static int
+ blocklist_func (char *arg, int flags)
+ {
+   char *dummy = (char *) RAW_ADDR (0x100000);
+-  int start_sector;
+-  int num_sectors = 0;
+-  int num_entries = 0;
+-  int last_length = 0;
+-  auto void disk_read_blocklist_func (int sector, int offset, int length);
++  int *start_sector = &blocklist_func_context.start_sector;
++  int *num_sectors = &blocklist_func_context.num_sectors;
++  int *num_entries = &blocklist_func_context.num_entries;
+   
+-  /* Collect contiguous blocks into one entry as many as possible,
+-     and print the blocklist notation on the screen.  */
+-  auto void disk_read_blocklist_func (int sector, int offset, int length)
+-    {
+-      if (num_sectors > 0)
+-      {
+-        if (start_sector + num_sectors == sector
+-            && offset == 0 && last_length == SECTOR_SIZE)
+-          {
+-            num_sectors++;
+-            last_length = length;
+-            return;
+-          }
+-        else
+-          {
+-            if (last_length == SECTOR_SIZE)
+-              grub_printf ("%s%d+%d", num_entries ? "," : "",
+-                           start_sector - part_start, num_sectors);
+-            else if (num_sectors > 1)
+-              grub_printf ("%s%d+%d,%d[0-%d]", num_entries ? "," : "",
+-                           start_sector - part_start, num_sectors-1,
+-                           start_sector + num_sectors-1 - part_start, 
+-                           last_length);
+-            else
+-              grub_printf ("%s%d[0-%d]", num_entries ? "," : "",
+-                           start_sector - part_start, last_length);
+-            num_entries++;
+-            num_sectors = 0;
+-          }
+-      }
+-
+-      if (offset > 0)
+-      {
+-        grub_printf("%s%d[%d-%d]", num_entries ? "," : "",
+-                    sector-part_start, offset, offset+length);
+-        num_entries++;
+-      }
+-      else
+-      {
+-        start_sector = sector;
+-        num_sectors = 1;
+-        last_length = length;
+-      }
+-    }
+-
+   /* Open the file.  */
+   if (! grub_open (arg))
+     return 1;
+@@ -206,15 +241,15 @@
+   grub_printf (")");
+   /* Read in the whole file to DUMMY.  */
+-  disk_read_hook = disk_read_blocklist_func;
++  disk_read_hook = blocklist_read_helper;
+   if (! grub_read (dummy, -1))
+     goto fail;
+   /* The last entry may not be printed yet.  Don't check if it is a
+    * full sector, since it doesn't matter if we read too much. */
+-  if (num_sectors > 0)
+-    grub_printf ("%s%d+%d", num_entries ? "," : "",
+-               start_sector - part_start, num_sectors);
++  if (*num_sectors > 0)
++      grub_printf ("%s%d+%d", *num_entries ? "," : "",
++                *start_sector - part_start, *num_sectors);
+   grub_printf ("\n");
+   
+@@ -852,6 +887,138 @@
+ };
+ #endif /* SUPPORT_NETBOOT */
++static int terminal_func (char *arg, int flags);
++
++#ifdef SUPPORT_GRAPHICS
++\f
++static int splashimage_func(char *arg, int flags) {
++    char splashimage[64];
++    int i;
++    
++    /* filename can only be 64 characters due to our buffer size */
++    if (strlen(arg) > 63)
++      return 1;
++    if (flags == BUILTIN_CMDLINE) {
++      if (!grub_open(arg))
++          return 1;
++      grub_close();
++    }
++
++    strcpy(splashimage, arg);
++
++    /* get rid of TERM_NEED_INIT from the graphics terminal. */
++    for (i = 0; term_table[i].name; i++) {
++      if (grub_strcmp (term_table[i].name, "graphics") == 0) {
++          term_table[i].flags &= ~TERM_NEED_INIT;
++          break;
++      }
++    }
++    
++    graphics_set_splash(splashimage);
++
++    if (flags == BUILTIN_CMDLINE && graphics_inited) {
++      graphics_end();
++      graphics_init();
++      graphics_cls();
++    }
++
++    /* FIXME: should we be explicitly switching the terminal as a 
++     * side effect here? */
++    terminal_func("graphics", flags);
++
++    return 0;
++}
++
++static struct builtin builtin_splashimage =
++{
++  "splashimage",
++  splashimage_func,
++  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
++  "splashimage FILE",
++  "Load FILE as the background image when in graphics mode."
++};
++
++\f
++/* foreground */
++static int
++foreground_func(char *arg, int flags)
++{
++    if (grub_strlen(arg) == 6) {
++      int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2;
++      int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2;
++      int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2;
++
++      foreground = (r << 16) | (g << 8) | b;
++      if (graphics_inited)
++          graphics_set_palette(15, r, g, b);
++
++      return (0);
++    }
++
++    return (1);
++}
++
++static struct builtin builtin_foreground =
++{
++  "foreground",
++  foreground_func,
++  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
++  "foreground RRGGBB",
++  "Sets the foreground color when in graphics mode."
++  "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal."
++};
++
++\f
++/* background */
++static int
++background_func(char *arg, int flags)
++{
++    if (grub_strlen(arg) == 6) {
++      int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2;
++      int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2;
++      int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2;
++
++      background = (r << 16) | (g << 8) | b;
++      if (graphics_inited)
++          graphics_set_palette(0, r, g, b);
++      return (0);
++    }
++
++    return (1);
++}
++
++static struct builtin builtin_background =
++{
++  "background",
++  background_func,
++  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
++  "background RRGGBB",
++  "Sets the background color when in graphics mode."
++  "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal."
++};
++
++#endif /* SUPPORT_GRAPHICS */
++
++\f
++/* clear */
++static int 
++clear_func() 
++{
++  if (current_term->cls)
++    current_term->cls();
++
++  return 0;
++}
++
++static struct builtin builtin_clear =
++{
++  "clear",
++  clear_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "clear",
++  "Clear the screen"
++};
++
\f
+ /* displayapm */
+ static int
+@@ -1233,14 +1400,15 @@
+   for (drive = 0x80; drive < 0x88; drive++)
+     {
+       unsigned long part = 0xFFFFFF;
+-      unsigned long start, len, offset, ext_offset;
+-      int type, entry;
++      unsigned long start, len, offset, ext_offset, gpt_offset;
++      int type, entry, gpt_count, gpt_size;
+       char buf[SECTOR_SIZE];
+       current_drive = drive;
+       while (next_partition (drive, 0xFFFFFF, &part, &type,
+                            &start, &len, &offset, &entry,
+-                           &ext_offset, buf))
++                            &ext_offset, &gpt_offset,
++                            &gpt_count, &gpt_size, buf))
+       {
+         if (type != PC_SLICE_TYPE_NONE
+             && ! IS_PC_SLICE_TYPE_BSD (type)
+@@ -1740,6 +1908,77 @@
\f
+ /* install */
++static struct {
++       int saved_sector;
++       int installaddr;
++       int installlist;
++       char *stage2_first_buffer;
++} install_func_context = {
++       .saved_sector = 0,
++       .installaddr = 0,
++       .installlist = 0,
++       .stage2_first_buffer = NULL,
++};
++
++/* Save the first sector of Stage2 in STAGE2_SECT.  */
++/* Formerly disk_read_savesect_func with local scope inside install_func */
++static void
++install_savesect_helper(int sector, int offset, int length)
++{
++  if (debug)
++    printf ("[%d]", sector);
++
++  /* ReiserFS has files which sometimes contain data not aligned
++     on sector boundaries.  Returning an error is better than
++     silently failing. */
++  if (offset != 0 || length != SECTOR_SIZE)
++    errnum = ERR_UNALIGNED;
++
++  install_func_context.saved_sector = sector;
++}
++
++/* Write SECTOR to INSTALLLIST, and update INSTALLADDR and  INSTALLSECT.  */
++/* Formerly disk_read_blocklist_func with local scope inside install_func */
++static void
++install_blocklist_helper (int sector, int offset, int length)
++{
++  int *installaddr = &install_func_context.installaddr;
++  int *installlist = &install_func_context.installlist;
++  char **stage2_first_buffer = &install_func_context.stage2_first_buffer;
++  /* Was the last sector full? */
++  static int last_length = SECTOR_SIZE;
++
++  if (debug)
++    printf("[%d]", sector);
++
++  if (offset != 0 || last_length != SECTOR_SIZE)
++    {
++      /* We found a non-sector-aligned data block. */
++      errnum = ERR_UNALIGNED;
++      return;
++    }
++
++  last_length = length;
++
++  if (*((unsigned long *) (*installlist - 4))
++      + *((unsigned short *) *installlist) != sector
++      || *installlist == (int) *stage2_first_buffer + SECTOR_SIZE + 4)
++    {
++      *installlist -= 8;
++
++      if (*((unsigned long *) (*installlist - 8)))
++        errnum = ERR_WONT_FIT;
++      else
++        {
++          *((unsigned short *) (*installlist + 2)) = (*installaddr >> 4);
++          *((unsigned long *) (*installlist - 4)) = sector;
++        }
++    }
++
++  *((unsigned short *) *installlist) += 1;
++  *installaddr += 512;
++}
++
+ static int
+ install_func (char *arg, int flags)
+ {
+@@ -1747,8 +1986,12 @@
+   char *stage1_buffer = (char *) RAW_ADDR (0x100000);
+   char *stage2_buffer = stage1_buffer + SECTOR_SIZE;
+   char *old_sect = stage2_buffer + SECTOR_SIZE;
+-  char *stage2_first_buffer = old_sect + SECTOR_SIZE;
+-  char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE;
++  /* stage2_first_buffer used to be defined as:
++   * char *stage2_first_buffer = old_sect + SECTOR_SIZE;  */
++  char **stage2_first_buffer = &install_func_context.stage2_first_buffer;
++  /* and stage2_second_buffer was:
++   * char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; */
++  char *stage2_second_buffer = old_sect + SECTOR_SIZE + SECTOR_SIZE;
+   /* XXX: Probably SECTOR_SIZE is reasonable.  */
+   char *config_filename = stage2_second_buffer + SECTOR_SIZE;
+   char *dummy = config_filename + SECTOR_SIZE;
+@@ -1757,10 +2000,11 @@
+   int src_drive, src_partition, src_part_start;
+   int i;
+   struct geometry dest_geom, src_geom;
+-  int saved_sector;
++  int *saved_sector = &install_func_context.saved_sector;
+   int stage2_first_sector, stage2_second_sector;
+   char *ptr;
+-  int installaddr, installlist;
++  int *installaddr = &install_func_context.installaddr;
++  int *installlist = &install_func_context.installlist;
+   /* Point to the location of the name of a configuration file in Stage 2.  */
+   char *config_file_location;
+   /* If FILE is a Stage 1.5?  */
+@@ -1769,67 +2013,13 @@
+   int is_open = 0;
+   /* If LBA is forced?  */
+   int is_force_lba = 0;
+-  /* Was the last sector full? */
+-  int last_length = SECTOR_SIZE;
+-  
++
++  *stage2_first_buffer = old_sect + SECTOR_SIZE;
+ #ifdef GRUB_UTIL
+   /* If the Stage 2 is in a partition mounted by an OS, this will store
+      the filename under the OS.  */
+   char *stage2_os_file = 0;
+ #endif /* GRUB_UTIL */
+-  
+-  auto void disk_read_savesect_func (int sector, int offset, int length);
+-  auto void disk_read_blocklist_func (int sector, int offset, int length);
+-  
+-  /* Save the first sector of Stage2 in STAGE2_SECT.  */
+-  auto void disk_read_savesect_func (int sector, int offset, int length)
+-    {
+-      if (debug)
+-      printf ("[%d]", sector);
+-
+-      /* ReiserFS has files which sometimes contain data not aligned
+-         on sector boundaries.  Returning an error is better than
+-         silently failing. */
+-      if (offset != 0 || length != SECTOR_SIZE)
+-      errnum = ERR_UNALIGNED;
+-
+-      saved_sector = sector;
+-    }
+-
+-  /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and
+-     INSTALLSECT.  */
+-  auto void disk_read_blocklist_func (int sector, int offset, int length)
+-    {
+-      if (debug)
+-      printf("[%d]", sector);
+-
+-      if (offset != 0 || last_length != SECTOR_SIZE)
+-      {
+-        /* We found a non-sector-aligned data block. */
+-        errnum = ERR_UNALIGNED;
+-        return;
+-      }
+-
+-      last_length = length;
+-
+-      if (*((unsigned long *) (installlist - 4))
+-        + *((unsigned short *) installlist) != sector
+-        || installlist == (int) stage2_first_buffer + SECTOR_SIZE + 4)
+-      {
+-        installlist -= 8;
+-
+-        if (*((unsigned long *) (installlist - 8)))
+-          errnum = ERR_WONT_FIT;
+-        else
+-          {
+-            *((unsigned short *) (installlist + 2)) = (installaddr >> 4);
+-            *((unsigned long *) (installlist - 4)) = sector;
+-          }
+-      }
+-
+-      *((unsigned short *) installlist) += 1;
+-      installaddr += 512;
+-    }
+   /* First, check the GNU-style long option.  */
+   while (1)
+@@ -1862,10 +2052,10 @@
+   addr = skip_to (0, file);
+   /* Get the installation address.  */
+-  if (! safe_parse_maxint (&addr, &installaddr))
++  if (! safe_parse_maxint (&addr, installaddr))
+     {
+       /* ADDR is not specified.  */
+-      installaddr = 0;
++      *installaddr = 0;
+       ptr = addr;
+       errnum = 0;
+     }
+@@ -1961,17 +2151,17 @@
+       = 0x9090;
+   
+   /* Read the first sector of Stage 2.  */
+-  disk_read_hook = disk_read_savesect_func;
+-  if (grub_read (stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE)
++  disk_read_hook = install_savesect_helper;
++  if (grub_read (*stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE)
+     goto fail;
+-  stage2_first_sector = saved_sector;
++  stage2_first_sector = *saved_sector;
+   
+   /* Read the second sector of Stage 2.  */
+   if (grub_read (stage2_second_buffer, SECTOR_SIZE) != SECTOR_SIZE)
+     goto fail;
+-  stage2_second_sector = saved_sector;
++  stage2_second_sector = *saved_sector;
+   
+   /* Check for the version of Stage 2.  */
+   if (*((short *) (stage2_second_buffer + STAGE2_VER_MAJ_OFFS))
+@@ -1987,27 +2177,27 @@
+   /* If INSTALLADDR is not specified explicitly in the command-line,
+      determine it by the Stage 2 id.  */
+-  if (! installaddr)
++  if (! *installaddr)
+     {
+       if (! is_stage1_5)
+       /* Stage 2.  */
+-      installaddr = 0x8000;
++      *installaddr = 0x8000;
+       else
+       /* Stage 1.5.  */
+-      installaddr = 0x2000;
++      *installaddr = 0x2000;
+     }
+   *((unsigned long *) (stage1_buffer + STAGE1_STAGE2_SECTOR))
+     = stage2_first_sector;
+   *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_ADDRESS))
+-    = installaddr;
++    = *installaddr;
+   *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_SEGMENT))
+-    = installaddr >> 4;
++    = *installaddr >> 4;
+-  i = (int) stage2_first_buffer + SECTOR_SIZE - 4;
++  i = (int) *stage2_first_buffer + SECTOR_SIZE - 4;
+   while (*((unsigned long *) i))
+     {
+-      if (i < (int) stage2_first_buffer
++      if (i < (int) *stage2_first_buffer
+         || (*((int *) (i - 4)) & 0x80000000)
+         || *((unsigned short *) i) >= 0xA00
+         || *((short *) (i + 2)) == 0)
+@@ -2021,13 +2211,13 @@
+       i -= 8;
+     }
+-  installlist = (int) stage2_first_buffer + SECTOR_SIZE + 4;
+-  installaddr += SECTOR_SIZE;
++  *installlist = (int) *stage2_first_buffer + SECTOR_SIZE + 4;
++  *installaddr += SECTOR_SIZE;
+   
+   /* Read the whole of Stage2 except for the first sector.  */
+   grub_seek (SECTOR_SIZE);
+-  disk_read_hook = disk_read_blocklist_func;
++  disk_read_hook = install_blocklist_helper;
+   if (! grub_read (dummy, -1))
+     goto fail;
+   
+@@ -2110,7 +2300,7 @@
+         /* Skip the first sector.  */
+         grub_seek (SECTOR_SIZE);
+         
+-        disk_read_hook = disk_read_savesect_func;
++        disk_read_hook = install_savesect_helper;
+         if (grub_read (stage2_buffer, SECTOR_SIZE) != SECTOR_SIZE)
+           goto fail;
+         
+@@ -2180,7 +2370,7 @@
+         else
+ #endif /* GRUB_UTIL */
+           {
+-            if (! devwrite (saved_sector - part_start, 1, stage2_buffer))
++            if (! devwrite (*saved_sector - part_start, 1, stage2_buffer))
+               goto fail;
+           }
+       }
+@@ -2202,7 +2392,7 @@
+         goto fail;
+       }
+-      if (fwrite (stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
++      if (fwrite (*stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
+       {
+         fclose (fp);
+         errnum = ERR_WRITE;
+@@ -2229,7 +2419,7 @@
+       goto fail;
+       if (! devwrite (stage2_first_sector - src_part_start, 1,
+-                    stage2_first_buffer))
++                    *stage2_first_buffer))
+       goto fail;
+       if (! devwrite (stage2_second_sector - src_part_start, 1,
+@@ -2815,8 +3005,8 @@
+ {
+   int new_type;
+   unsigned long part = 0xFFFFFF;
+-  unsigned long start, len, offset, ext_offset;
+-  int entry, type;
++  unsigned long start, len, offset, ext_offset, gpt_offset;
++  int entry, type, gpt_count, gpt_size;
+   char mbr[512];
+   /* Get the drive and the partition.  */
+@@ -2853,8 +3043,15 @@
+   /* Look for the partition.  */
+   while (next_partition (current_drive, 0xFFFFFF, &part, &type,
+                        &start, &len, &offset, &entry,
+-                       &ext_offset, mbr))
++                       &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr))
+     {
++        /* The partition may not be a GPT partition.  */
++        if (gpt_offset != 0)
++          {
++              errnum = ERR_BAD_ARGUMENT;
++              return 1;
++          }
++
+       if (part == current_partition)
+       {
+         /* Found.  */
+@@ -3830,15 +4027,15 @@
+       {
+         char tmp[16];
+         grub_sprintf (tmp, ",%d", (partition >> 16) & 0xFF);
+-        grub_strncat (device, tmp, 256);
++        grub_strncat (device, tmp, sizeof (device));
+       }
+       if ((partition & 0x00FF00) != 0x00FF00)
+       {
+         char tmp[16];
+         grub_sprintf (tmp, ",%c", 'a' + ((partition >> 8) & 0xFF));
+-        grub_strncat (device, tmp, 256);
++        grub_strncat (device, tmp, sizeof (device));
+       }
+-      grub_strncat (device, ")", 256);
++      grub_strncat (device, ")", sizeof (device));
+     }
+   
+   int embed_stage1_5 (char *stage1_5, int drive, int partition)
+@@ -4085,7 +4282,7 @@
+ };
\f
+-#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES)
++#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) || defined(SUPPORT_GRAPHICS)
+ /* terminal */
+ static int
+ terminal_func (char *arg, int flags)
+@@ -4244,17 +4441,21 @@
+  end:
+   current_term = term_table + default_term;
+   current_term->flags = term_flags;
+-  
++
+   if (lines)
+     max_lines = lines;
+   else
+-    /* 24 would be a good default value.  */
+-    max_lines = 24;
+-  
++    max_lines = current_term->max_lines;
++
+   /* If the interface is currently the command-line,
+      restart it to repaint the screen.  */
+-  if (current_term != prev_term && (flags & BUILTIN_CMDLINE))
++  if ((current_term != prev_term) && (flags & BUILTIN_CMDLINE)){
++    if (prev_term->shutdown)
++      prev_term->shutdown();
++    if (current_term->startup)
++      current_term->startup();
+     grub_longjmp (restart_cmdline_env, 0);
++  }
+   
+   return 0;
+ }
+@@ -4264,7 +4465,7 @@
+   "terminal",
+   terminal_func,
+   BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
+-  "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules]",
++  "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules] [graphics]",
+   "Select a terminal. When multiple terminals are specified, wait until"
+   " you push any key to continue. If both console and serial are specified,"
+   " the terminal to which you input a key first will be selected. If no"
+@@ -4276,7 +4477,7 @@
+   " seconds. The option --lines specifies the maximum number of lines."
+   " The option --silent is used to suppress messages."
+ };
+-#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */
++#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES || SUPPORT_GRAPHICS */
\f
+ #ifdef SUPPORT_SERIAL
+@@ -4795,6 +4996,9 @@
+ /* The table of builtin commands. Sorted in dictionary order.  */
+ struct builtin *builtin_table[] =
+ {
++#ifdef SUPPORT_GRAPHICS
++  &builtin_background,
++#endif
+   &builtin_blocklist,
+   &builtin_boot,
+ #ifdef SUPPORT_NETBOOT
+@@ -4802,6 +5006,7 @@
+ #endif /* SUPPORT_NETBOOT */
+   &builtin_cat,
+   &builtin_chainloader,
++  &builtin_clear,
+   &builtin_cmp,
+   &builtin_color,
+   &builtin_configfile,
+@@ -4821,6 +5026,9 @@
+   &builtin_embed,
+   &builtin_fallback,
+   &builtin_find,
++#ifdef SUPPORT_GRAPHICS
++  &builtin_foreground,
++#endif
+   &builtin_fstest,
+   &builtin_geometry,
+   &builtin_halt,
+@@ -4864,9 +5072,12 @@
+ #endif /* SUPPORT_SERIAL */
+   &builtin_setkey,
+   &builtin_setup,
+-#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES)
++#ifdef SUPPORT_GRAPHICS
++  &builtin_splashimage,
++#endif /* SUPPORT_GRAPHICS */
++#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) || defined(SUPPORT_GRAPHICS)
+   &builtin_terminal,
+-#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */
++#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES || SUPPORT_GRAPHICS */
+ #ifdef SUPPORT_SERIAL
+   &builtin_terminfo,
+ #endif /* SUPPORT_SERIAL */
+diff -Nur grub-0.97/stage2/builtins.c.orig grub-0.97-patched/stage2/builtins.c.orig
+--- grub-0.97/stage2/builtins.c.orig   1970-01-01 01:00:00.000000000 +0100
++++ grub-0.97-patched/stage2/builtins.c.orig   2005-02-15 22:58:23.000000000 +0100
+@@ -0,0 +1,4884 @@
++/* builtins.c - the GRUB builtin commands */
++/*
++ *  GRUB  --  GRand Unified Bootloader
++ *  Copyright (C) 1999,2000,2001,2002,2003,2004  Free Software Foundation, Inc.
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License as published by
++ *  the Free Software Foundation; either version 2 of the License, or
++ *  (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the Free Software
++ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++/* Include stdio.h before shared.h, because we can't define
++   WITHOUT_LIBC_STUBS here.  */
++#ifdef GRUB_UTIL
++# include <stdio.h>
++#endif
++
++#include <shared.h>
++#include <filesys.h>
++#include <term.h>
++
++#ifdef SUPPORT_NETBOOT
++# define GRUB 1
++# include <etherboot.h>
++#endif
++
++#ifdef SUPPORT_SERIAL
++# include <serial.h>
++# include <terminfo.h>
++#endif
++
++#ifdef GRUB_UTIL
++# include <device.h>
++#else /* ! GRUB_UTIL */
++# include <apic.h>
++# include <smp-imps.h>
++#endif /* ! GRUB_UTIL */
++
++#ifdef USE_MD5_PASSWORDS
++# include <md5.h>
++#endif
++
++/* The type of kernel loaded.  */
++kernel_t kernel_type;
++/* The boot device.  */
++static int bootdev;
++/* True when the debug mode is turned on, and false
++   when it is turned off.  */
++int debug = 0;
++/* The default entry.  */
++int default_entry = 0;
++/* The fallback entry.  */
++int fallback_entryno;
++int fallback_entries[MAX_FALLBACK_ENTRIES];
++/* The number of current entry.  */
++int current_entryno;
++/* The address for Multiboot command-line buffer.  */
++static char *mb_cmdline;
++/* The password.  */
++char *password;
++/* The password type.  */
++password_t password_type;
++/* The flag for indicating that the user is authoritative.  */
++int auth = 0;
++/* The timeout.  */
++int grub_timeout = -1;
++/* Whether to show the menu or not.  */
++int show_menu = 1;
++/* The BIOS drive map.  */
++static unsigned short bios_drive_map[DRIVE_MAP_SIZE + 1];
++
++/* Prototypes for allowing straightfoward calling of builtins functions
++   inside other functions.  */
++static int configfile_func (char *arg, int flags);
++
++/* Initialize the data for builtins.  */
++void
++init_builtins (void)
++{
++  kernel_type = KERNEL_TYPE_NONE;
++  /* BSD and chainloading evil hacks!  */
++  bootdev = set_bootdev (0);
++  mb_cmdline = (char *) MB_CMDLINE_BUF;
++}
++
++/* Initialize the data for the configuration file.  */
++void
++init_config (void)
++{
++  default_entry = 0;
++  password = 0;
++  fallback_entryno = -1;
++  fallback_entries[0] = -1;
++  grub_timeout = -1;
++}
++
++/* Check a password for correctness.  Returns 0 if password was
++   correct, and a value != 0 for error, similarly to strcmp. */
++int
++check_password (char *entered, char* expected, password_t type)
++{
++  switch (type)
++    {
++    case PASSWORD_PLAIN:
++      return strcmp (entered, expected);
++
++#ifdef USE_MD5_PASSWORDS
++    case PASSWORD_MD5:
++      return check_md5_password (entered, expected);
++#endif
++    default: 
++      /* unsupported password type: be secure */
++      return 1;
++    }
++}
++
++/* Print which sector is read when loading a file.  */
++static void
++disk_read_print_func (int sector, int offset, int length)
++{
++  grub_printf ("[%d,%d,%d]", sector, offset, length);
++}
++
++\f
++/* blocklist */
++static int
++blocklist_func (char *arg, int flags)
++{
++  char *dummy = (char *) RAW_ADDR (0x100000);
++  int start_sector;
++  int num_sectors = 0;
++  int num_entries = 0;
++  int last_length = 0;
++
++  auto void disk_read_blocklist_func (int sector, int offset, int length);
++  
++  /* Collect contiguous blocks into one entry as many as possible,
++     and print the blocklist notation on the screen.  */
++  auto void disk_read_blocklist_func (int sector, int offset, int length)
++    {
++      if (num_sectors > 0)
++      {
++        if (start_sector + num_sectors == sector
++            && offset == 0 && last_length == SECTOR_SIZE)
++          {
++            num_sectors++;
++            last_length = length;
++            return;
++          }
++        else
++          {
++            if (last_length == SECTOR_SIZE)
++              grub_printf ("%s%d+%d", num_entries ? "," : "",
++                           start_sector - part_start, num_sectors);
++            else if (num_sectors > 1)
++              grub_printf ("%s%d+%d,%d[0-%d]", num_entries ? "," : "",
++                           start_sector - part_start, num_sectors-1,
++                           start_sector + num_sectors-1 - part_start, 
++                           last_length);
++            else
++              grub_printf ("%s%d[0-%d]", num_entries ? "," : "",
++                           start_sector - part_start, last_length);
++            num_entries++;
++            num_sectors = 0;
++          }
++      }
++
++      if (offset > 0)
++      {
++        grub_printf("%s%d[%d-%d]", num_entries ? "," : "",
++                    sector-part_start, offset, offset+length);
++        num_entries++;
++      }
++      else
++      {
++        start_sector = sector;
++        num_sectors = 1;
++        last_length = length;
++      }
++    }
++
++  /* Open the file.  */
++  if (! grub_open (arg))
++    return 1;
++
++  /* Print the device name.  */
++  grub_printf ("(%cd%d",
++             (current_drive & 0x80) ? 'h' : 'f',
++             current_drive & ~0x80);
++  
++  if ((current_partition & 0xFF0000) != 0xFF0000)
++    grub_printf (",%d", (current_partition >> 16) & 0xFF);
++  
++  if ((current_partition & 0x00FF00) != 0x00FF00)
++    grub_printf (",%c", 'a' + ((current_partition >> 8) & 0xFF));
++  
++  grub_printf (")");
++
++  /* Read in the whole file to DUMMY.  */
++  disk_read_hook = disk_read_blocklist_func;
++  if (! grub_read (dummy, -1))
++    goto fail;
++
++  /* The last entry may not be printed yet.  Don't check if it is a
++   * full sector, since it doesn't matter if we read too much. */
++  if (num_sectors > 0)
++    grub_printf ("%s%d+%d", num_entries ? "," : "",
++               start_sector - part_start, num_sectors);
++
++  grub_printf ("\n");
++  
++ fail:
++  disk_read_hook = 0;
++  grub_close ();
++  return errnum;
++}
++
++static struct builtin builtin_blocklist =
++{
++  "blocklist",
++  blocklist_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "blocklist FILE",
++  "Print the blocklist notation of the file FILE."
++};
++
++/* boot */
++static int
++boot_func (char *arg, int flags)
++{
++  /* Clear the int15 handler if we can boot the kernel successfully.
++     This assumes that the boot code never fails only if KERNEL_TYPE is
++     not KERNEL_TYPE_NONE. Is this assumption is bad?  */
++  if (kernel_type != KERNEL_TYPE_NONE)
++    unset_int15_handler ();
++
++#ifdef SUPPORT_NETBOOT
++  /* Shut down the networking.  */
++  cleanup_net ();
++#endif
++  
++  switch (kernel_type)
++    {
++    case KERNEL_TYPE_FREEBSD:
++    case KERNEL_TYPE_NETBSD:
++      /* *BSD */
++      bsd_boot (kernel_type, bootdev, (char *) mbi.cmdline);
++      break;
++
++    case KERNEL_TYPE_LINUX:
++      /* Linux */
++      linux_boot ();
++      break;
++
++    case KERNEL_TYPE_BIG_LINUX:
++      /* Big Linux */
++      big_linux_boot ();
++      break;
++
++    case KERNEL_TYPE_CHAINLOADER:
++      /* Chainloader */
++      
++      /* Check if we should set the int13 handler.  */
++      if (bios_drive_map[0] != 0)
++      {
++        int i;
++        
++        /* Search for SAVED_DRIVE.  */
++        for (i = 0; i < DRIVE_MAP_SIZE; i++)
++          {
++            if (! bios_drive_map[i])
++              break;
++            else if ((bios_drive_map[i] & 0xFF) == saved_drive)
++              {
++                /* Exchage SAVED_DRIVE with the mapped drive.  */
++                saved_drive = (bios_drive_map[i] >> 8) & 0xFF;
++                break;
++              }
++          }
++        
++        /* Set the handler. This is somewhat dangerous.  */
++        set_int13_handler (bios_drive_map);
++      }
++      
++      gateA20 (0);
++      boot_drive = saved_drive;
++      chain_stage1 (0, BOOTSEC_LOCATION, boot_part_addr);
++      break;
++
++    case KERNEL_TYPE_MULTIBOOT:
++      /* Multiboot */
++      multi_boot ((int) entry_addr, (int) &mbi);
++      break;
++
++    default:
++      errnum = ERR_BOOT_COMMAND;
++      return 1;
++    }
++
++  return 0;
++}
++
++static struct builtin builtin_boot =
++{
++  "boot",
++  boot_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "boot",
++  "Boot the OS/chain-loader which has been loaded."
++};
++
++\f
++#ifdef SUPPORT_NETBOOT
++/* bootp */
++static int
++bootp_func (char *arg, int flags)
++{
++  int with_configfile = 0;
++
++  if (grub_memcmp (arg, "--with-configfile", sizeof ("--with-configfile") - 1)
++      == 0)
++    {
++      with_configfile = 1;
++      arg = skip_to (0, arg);
++    }
++  
++  if (! bootp ())
++    {
++      if (errnum == ERR_NONE)
++      errnum = ERR_DEV_VALUES;
++
++      return 1;
++    }
++
++  /* Notify the configuration.  */
++  print_network_configuration ();
++
++  /* XXX: this can cause an endless loop, but there is no easy way to
++     detect such a loop unfortunately.  */
++  if (with_configfile)
++    configfile_func (config_file, flags);
++  
++  return 0;
++}
++
++static struct builtin builtin_bootp =
++{
++  "bootp",
++  bootp_func,
++  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
++  "bootp [--with-configfile]",
++  "Initialize a network device via BOOTP. If the option `--with-configfile'"
++  " is given, try to load a configuration file specified by the 150 vendor"
++  " tag."
++};
++#endif /* SUPPORT_NETBOOT */
++
++\f
++/* cat */
++static int
++cat_func (char *arg, int flags)
++{
++  char c;
++
++  if (! grub_open (arg))
++    return 1;
++
++  while (grub_read (&c, 1))
++    {
++      /* Because running "cat" with a binary file can confuse the terminal,
++       print only some characters as they are.  */
++      if (grub_isspace (c) || (c >= ' ' && c <= '~'))
++      grub_putchar (c);
++      else
++      grub_putchar ('?');
++    }
++  
++  grub_close ();
++  return 0;
++}
++
++static struct builtin builtin_cat =
++{
++  "cat",
++  cat_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "cat FILE",
++  "Print the contents of the file FILE."
++};
++
++\f
++/* chainloader */
++static int
++chainloader_func (char *arg, int flags)
++{
++  int force = 0;
++  char *file = arg;
++
++  /* If the option `--force' is specified?  */
++  if (substring ("--force", arg) <= 0)
++    {
++      force = 1;
++      file = skip_to (0, arg);
++    }
++
++  /* Open the file.  */
++  if (! grub_open (file))
++    {
++      kernel_type = KERNEL_TYPE_NONE;
++      return 1;
++    }
++
++  /* Read the first block.  */
++  if (grub_read ((char *) BOOTSEC_LOCATION, SECTOR_SIZE) != SECTOR_SIZE)
++    {
++      grub_close ();
++      kernel_type = KERNEL_TYPE_NONE;
++
++      /* This below happens, if a file whose size is less than 512 bytes
++       is loaded.  */
++      if (errnum == ERR_NONE)
++      errnum = ERR_EXEC_FORMAT;
++      
++      return 1;
++    }
++
++  /* If not loading it forcibly, check for the signature.  */
++  if (! force
++      && (*((unsigned short *) (BOOTSEC_LOCATION + BOOTSEC_SIG_OFFSET))
++        != BOOTSEC_SIGNATURE))
++    {
++      grub_close ();
++      errnum = ERR_EXEC_FORMAT;
++      kernel_type = KERNEL_TYPE_NONE;
++      return 1;
++    }
++
++  grub_close ();
++  kernel_type = KERNEL_TYPE_CHAINLOADER;
++
++  /* XXX: Windows evil hack. For now, only the first five letters are
++     checked.  */
++  if (IS_PC_SLICE_TYPE_FAT (current_slice)
++      && ! grub_memcmp ((char *) BOOTSEC_LOCATION + BOOTSEC_BPB_SYSTEM_ID,
++                      "MSWIN", 5))
++    *((unsigned long *) (BOOTSEC_LOCATION + BOOTSEC_BPB_HIDDEN_SECTORS))
++      = part_start;
++
++  errnum = ERR_NONE;
++  
++  return 0;
++}
++
++static struct builtin builtin_chainloader =
++{
++  "chainloader",
++  chainloader_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "chainloader [--force] FILE",
++  "Load the chain-loader FILE. If --force is specified, then load it"
++  " forcibly, whether the boot loader signature is present or not."
++};
++
++\f
++/* This function could be used to debug new filesystem code. Put a file
++   in the new filesystem and the same file in a well-tested filesystem.
++   Then, run "cmp" with the files. If no output is obtained, probably
++   the code is good, otherwise investigate what's wrong...  */
++/* cmp FILE1 FILE2 */
++static int
++cmp_func (char *arg, int flags)
++{
++  /* The filenames.  */
++  char *file1, *file2;
++  /* The addresses.  */
++  char *addr1, *addr2;
++  int i;
++  /* The size of the file.  */
++  int size;
++
++  /* Get the filenames from ARG.  */
++  file1 = arg;
++  file2 = skip_to (0, arg);
++  if (! *file1 || ! *file2)
++    {
++      errnum = ERR_BAD_ARGUMENT;
++      return 1;
++    }
++
++  /* Terminate the filenames for convenience.  */
++  nul_terminate (file1);
++  nul_terminate (file2);
++
++  /* Read the whole data from FILE1.  */
++  addr1 = (char *) RAW_ADDR (0x100000);
++  if (! grub_open (file1))
++    return 1;
++  
++  /* Get the size.  */
++  size = filemax;
++  if (grub_read (addr1, -1) != size)
++    {
++      grub_close ();
++      return 1;
++    }
++  
++  grub_close ();
++
++  /* Read the whole data from FILE2.  */
++  addr2 = addr1 + size;
++  if (! grub_open (file2))
++    return 1;
++
++  /* Check if the size of FILE2 is equal to the one of FILE2.  */
++  if (size != filemax)
++    {
++      grub_printf ("Differ in size: 0x%x [%s], 0x%x [%s]\n",
++                 size, file1, filemax, file2);
++      grub_close ();
++      return 0;
++    }
++  
++  if (! grub_read (addr2, -1))
++    {
++      grub_close ();
++      return 1;
++    }
++  
++  grub_close ();
++
++  /* Now compare ADDR1 with ADDR2.  */
++  for (i = 0; i < size; i++)
++    {
++      if (addr1[i] != addr2[i])
++      grub_printf ("Differ at the offset %d: 0x%x [%s], 0x%x [%s]\n",
++                   i, (unsigned) addr1[i], file1,
++                   (unsigned) addr2[i], file2);
++    }
++  
++  return 0;
++}
++
++static struct builtin builtin_cmp =
++{
++  "cmp",
++  cmp_func,
++  BUILTIN_CMDLINE,
++  "cmp FILE1 FILE2",
++  "Compare the file FILE1 with the FILE2 and inform the different values"
++  " if any."
++};
++
++\f
++/* color */
++/* Set new colors used for the menu interface. Support two methods to
++   specify a color name: a direct integer representation and a symbolic
++   color name. An example of the latter is "blink-light-gray/blue".  */
++static int
++color_func (char *arg, int flags)
++{
++  char *normal;
++  char *highlight;
++  int new_normal_color;
++  int new_highlight_color;
++  static char *color_list[16] =
++  {
++    "black",
++    "blue",
++    "green",
++    "cyan",
++    "red",
++    "magenta",
++    "brown",
++    "light-gray",
++    "dark-gray",
++    "light-blue",
++    "light-green",
++    "light-cyan",
++    "light-red",
++    "light-magenta",
++    "yellow",
++    "white"
++  };
++
++  auto int color_number (char *str);
++  
++  /* Convert the color name STR into the magical number.  */
++  auto int color_number (char *str)
++    {
++      char *ptr;
++      int i;
++      int color = 0;
++      
++      /* Find the separator.  */
++      for (ptr = str; *ptr && *ptr != '/'; ptr++)
++      ;
++
++      /* If not found, return -1.  */
++      if (! *ptr)
++      return -1;
++
++      /* Terminate the string STR.  */
++      *ptr++ = 0;
++
++      /* If STR contains the prefix "blink-", then set the `blink' bit
++       in COLOR.  */
++      if (substring ("blink-", str) <= 0)
++      {
++        color = 0x80;
++        str += 6;
++      }
++      
++      /* Search for the color name.  */
++      for (i = 0; i < 16; i++)
++      if (grub_strcmp (color_list[i], str) == 0)
++        {
++          color |= i;
++          break;
++        }
++
++      if (i == 16)
++      return -1;
++
++      str = ptr;
++      nul_terminate (str);
++
++      /* Search for the color name.  */      
++      for (i = 0; i < 8; i++)
++      if (grub_strcmp (color_list[i], str) == 0)
++        {
++          color |= i << 4;
++          break;
++        }
++
++      if (i == 8)
++      return -1;
++
++      return color;
++    }
++      
++  normal = arg;
++  highlight = skip_to (0, arg);
++
++  new_normal_color = color_number (normal);
++  if (new_normal_color < 0 && ! safe_parse_maxint (&normal, &new_normal_color))
++    return 1;
++  
++  /* The second argument is optional, so set highlight_color
++     to inverted NORMAL_COLOR.  */
++  if (! *highlight)
++    new_highlight_color = ((new_normal_color >> 4)
++                         | ((new_normal_color & 0xf) << 4));
++  else
++    {
++      new_highlight_color = color_number (highlight);
++      if (new_highlight_color < 0
++        && ! safe_parse_maxint (&highlight, &new_highlight_color))
++      return 1;
++    }
++
++  if (current_term->setcolor)
++    current_term->setcolor (new_normal_color, new_highlight_color);
++  
++  return 0;
++}
++
++static struct builtin builtin_color =
++{
++  "color",
++  color_func,
++  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
++  "color NORMAL [HIGHLIGHT]",
++  "Change the menu colors. The color NORMAL is used for most"
++  " lines in the menu, and the color HIGHLIGHT is used to highlight the"
++  " line where the cursor points. If you omit HIGHLIGHT, then the"
++  " inverted color of NORMAL is used for the highlighted line."
++  " The format of a color is \"FG/BG\". FG and BG are symbolic color names."
++  " A symbolic color name must be one of these: black, blue, green,"
++  " cyan, red, magenta, brown, light-gray, dark-gray, light-blue,"
++  " light-green, light-cyan, light-red, light-magenta, yellow and white."
++  " But only the first eight names can be used for BG. You can prefix"
++  " \"blink-\" to FG if you want a blinking foreground color."
++};
++
++\f
++/* configfile */
++static int
++configfile_func (char *arg, int flags)
++{
++  char *new_config = config_file;
++
++  /* Check if the file ARG is present.  */
++  if (! grub_open (arg))
++    return 1;
++
++  grub_close ();
++  
++  /* Copy ARG to CONFIG_FILE.  */
++  while ((*new_config++ = *arg++) != 0)
++    ;
++
++#ifdef GRUB_UTIL
++  /* Force to load the configuration file.  */
++  use_config_file = 1;
++#endif
++
++  /* Make sure that the user will not be authoritative.  */
++  auth = 0;
++  
++  /* Restart cmain.  */
++  grub_longjmp (restart_env, 0);
++
++  /* Never reach here.  */
++  return 0;
++}
++
++static struct builtin builtin_configfile =
++{
++  "configfile",
++  configfile_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "configfile FILE",
++  "Load FILE as the configuration file."
++};
++
++\f
++/* debug */
++static int
++debug_func (char *arg, int flags)
++{
++  if (debug)
++    {
++      debug = 0;
++      grub_printf (" Debug mode is turned off\n");
++    }
++  else
++    {
++      debug = 1;
++      grub_printf (" Debug mode is turned on\n");
++    }
++
++  return 0;
++}
++
++static struct builtin builtin_debug =
++{
++  "debug",
++  debug_func,
++  BUILTIN_CMDLINE,
++  "debug",
++  "Turn on/off the debug mode."
++};
++
++\f
++/* default */
++static int
++default_func (char *arg, int flags)
++{
++#ifndef SUPPORT_DISKLESS
++  if (grub_strcmp (arg, "saved") == 0)
++    {
++      default_entry = saved_entryno;
++      return 0;
++    }
++#endif /* SUPPORT_DISKLESS */
++  
++  if (! safe_parse_maxint (&arg, &default_entry))
++    return 1;
++
++  return 0;
++}
++
++static struct builtin builtin_default =
++{
++  "default",
++  default_func,
++  BUILTIN_MENU,
++#if 0
++  "default [NUM | `saved']",
++  "Set the default entry to entry number NUM (if not specified, it is"
++  " 0, the first entry) or the entry number saved by savedefault."
++#endif
++};
++
++\f
++#ifdef GRUB_UTIL
++/* device */
++static int
++device_func (char *arg, int flags)
++{
++  char *drive = arg;
++  char *device;
++
++  /* Get the drive number from DRIVE.  */
++  if (! set_device (drive))
++    return 1;
++
++  /* Get the device argument.  */
++  device = skip_to (0, drive);
++  
++  /* Terminate DEVICE.  */
++  nul_terminate (device);
++
++  if (! *device || ! check_device (device))
++    {
++      errnum = ERR_FILE_NOT_FOUND;
++      return 1;
++    }
++
++  assign_device_name (current_drive, device);
++  
++  return 0;
++}
++
++static struct builtin builtin_device =
++{
++  "device",
++  device_func,
++  BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "device DRIVE DEVICE",
++  "Specify DEVICE as the actual drive for a BIOS drive DRIVE. This command"
++  " can be used only in the grub shell."
++};
++#endif /* GRUB_UTIL */
++
++\f
++#ifdef SUPPORT_NETBOOT
++/* dhcp */
++static int
++dhcp_func (char *arg, int flags)
++{
++  /* For now, this is an alias for bootp.  */
++  return bootp_func (arg, flags);
++}
++
++static struct builtin builtin_dhcp =
++{
++  "dhcp",
++  dhcp_func,
++  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
++  "dhcp",
++  "Initialize a network device via DHCP."
++};
++#endif /* SUPPORT_NETBOOT */
++
++\f
++/* displayapm */
++static int
++displayapm_func (char *arg, int flags)
++{
++  if (mbi.flags & MB_INFO_APM_TABLE)
++    {
++      grub_printf ("APM BIOS information:\n"
++                 " Version:          0x%x\n"
++                 " 32-bit CS:        0x%x\n"
++                 " Offset:           0x%x\n"
++                 " 16-bit CS:        0x%x\n"
++                 " 16-bit DS:        0x%x\n"
++                 " 32-bit CS length: 0x%x\n"
++                 " 16-bit CS length: 0x%x\n"
++                 " 16-bit DS length: 0x%x\n",
++                 (unsigned) apm_bios_info.version,
++                 (unsigned) apm_bios_info.cseg,
++                 apm_bios_info.offset,
++                 (unsigned) apm_bios_info.cseg_16,
++                 (unsigned) apm_bios_info.dseg_16,
++                 (unsigned) apm_bios_info.cseg_len,
++                 (unsigned) apm_bios_info.cseg_16_len,
++                 (unsigned) apm_bios_info.dseg_16_len);
++    }
++  else
++    {
++      grub_printf ("No APM BIOS found or probe failed\n");
++    }
++
++  return 0;
++}
++
++static struct builtin builtin_displayapm =
++{
++  "displayapm",
++  displayapm_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "displayapm",
++  "Display APM BIOS information."
++};
++
++\f
++/* displaymem */
++static int
++displaymem_func (char *arg, int flags)
++{
++  if (get_eisamemsize () != -1)
++    grub_printf (" EISA Memory BIOS Interface is present\n");
++  if (get_mmap_entry ((void *) SCRATCHADDR, 0) != 0
++      || *((int *) SCRATCHADDR) != 0)
++    grub_printf (" Address Map BIOS Interface is present\n");
++
++  grub_printf (" Lower memory: %uK, "
++             "Upper memory (to first chipset hole): %uK\n",
++             mbi.mem_lower, mbi.mem_upper);
++
++  if (mbi.flags & MB_INFO_MEM_MAP)
++    {
++      struct AddrRangeDesc *map = (struct AddrRangeDesc *) mbi.mmap_addr;
++      int end_addr = mbi.mmap_addr + mbi.mmap_length;
++
++      grub_printf (" [Address Range Descriptor entries "
++                 "immediately follow (values are 64-bit)]\n");
++      while (end_addr > (int) map)
++      {
++        char *str;
++
++        if (map->Type == MB_ARD_MEMORY)
++          str = "Usable RAM";
++        else
++          str = "Reserved";
++        grub_printf ("   %s:  Base Address:  0x%x X 4GB + 0x%x,\n"
++                     "      Length:   0x%x X 4GB + 0x%x bytes\n",
++                     str,
++                     (unsigned long) (map->BaseAddr >> 32),
++                     (unsigned long) (map->BaseAddr & 0xFFFFFFFF),
++                     (unsigned long) (map->Length >> 32),
++                     (unsigned long) (map->Length & 0xFFFFFFFF));
++
++        map = ((struct AddrRangeDesc *) (((int) map) + 4 + map->size));
++      }
++    }
++
++  return 0;
++}
++
++static struct builtin builtin_displaymem =
++{
++  "displaymem",
++  displaymem_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "displaymem",
++  "Display what GRUB thinks the system address space map of the"
++  " machine is, including all regions of physical RAM installed."
++};
++
++\f
++/* dump FROM TO */
++#ifdef GRUB_UTIL
++static int
++dump_func (char *arg, int flags)
++{
++  char *from, *to;
++  FILE *fp;
++  char c;
++  
++  from = arg;
++  to = skip_to (0, arg);
++  if (! *from || ! *to)
++    {
++      errnum = ERR_BAD_ARGUMENT;
++      return 1;
++    }
++
++  nul_terminate (from);
++  nul_terminate (to);
++  
++  if (! grub_open (from))
++    return 1;
++
++  fp = fopen (to, "w");
++  if (! fp)
++    {
++      errnum = ERR_WRITE;
++      return 1;
++    }
++
++  while (grub_read (&c, 1))
++    if (fputc (c, fp) == EOF)
++      {
++      errnum = ERR_WRITE;
++      fclose (fp);
++      return 1;
++      }
++
++  if (fclose (fp) == EOF)
++    {
++      errnum = ERR_WRITE;
++      return 1;
++    }
++
++  grub_close ();
++  return 0;
++}
++
++static struct builtin builtin_dump =
++  {
++    "dump",
++    dump_func,
++    BUILTIN_CMDLINE,
++    "dump FROM TO",
++    "Dump the contents of the file FROM to the file TO. FROM must be"
++    " a GRUB file and TO must be an OS file."
++  };
++#endif /* GRUB_UTIL */
++
++\f
++static char embed_info[32];
++/* embed */
++/* Embed a Stage 1.5 in the first cylinder after MBR or in the
++   bootloader block in a FFS.  */
++static int
++embed_func (char *arg, int flags)
++{
++  char *stage1_5;
++  char *device;
++  char *stage1_5_buffer = (char *) RAW_ADDR (0x100000);
++  int len, size;
++  int sector;
++  
++  stage1_5 = arg;
++  device = skip_to (0, stage1_5);
++
++  /* Open a Stage 1.5.  */
++  if (! grub_open (stage1_5))
++    return 1;
++
++  /* Read the whole of the Stage 1.5.  */
++  len = grub_read (stage1_5_buffer, -1);
++  grub_close ();
++  
++  if (errnum)
++    return 1;
++  
++  size = (len + SECTOR_SIZE - 1) / SECTOR_SIZE;
++  
++  /* Get the device where the Stage 1.5 will be embedded.  */
++  set_device (device);
++  if (errnum)
++    return 1;
++
++  if (current_partition == 0xFFFFFF)
++    {
++      /* Embed it after the MBR.  */
++      
++      char mbr[SECTOR_SIZE];
++      char ezbios_check[2*SECTOR_SIZE];
++      int i;
++      
++      /* Open the partition.  */
++      if (! open_partition ())
++      return 1;
++
++      /* No floppy has MBR.  */
++      if (! (current_drive & 0x80))
++      {
++        errnum = ERR_DEV_VALUES;
++        return 1;
++      }
++      
++      /* Read the MBR of CURRENT_DRIVE.  */
++      if (! rawread (current_drive, PC_MBR_SECTOR, 0, SECTOR_SIZE, mbr))
++      return 1;
++      
++      /* Sanity check.  */
++      if (! PC_MBR_CHECK_SIG (mbr))
++      {
++        errnum = ERR_BAD_PART_TABLE;
++        return 1;
++      }
++
++      /* Check if the disk can store the Stage 1.5.  */
++      for (i = 0; i < 4; i++)
++      if (PC_SLICE_TYPE (mbr, i) && PC_SLICE_START (mbr, i) - 1 < size)
++        {
++          errnum = ERR_NO_DISK_SPACE;
++          return 1;
++        }
++      
++      /* Check for EZ-BIOS signature. It should be in the third
++       * sector, but due to remapping it can appear in the second, so
++       * load and check both.  
++       */
++      if (! rawread (current_drive, 1, 0, 2 * SECTOR_SIZE, ezbios_check))
++      return 1;
++
++      if (! memcmp (ezbios_check + 3, "AERMH", 5)
++        || ! memcmp (ezbios_check + 512 + 3, "AERMH", 5))
++      {
++        /* The space after the MBR is used by EZ-BIOS which we must 
++         * not overwrite.
++         */
++        errnum = ERR_NO_DISK_SPACE;
++        return 1;
++      }
++
++      sector = 1;
++    }
++  else
++    {
++      /* Embed it in the bootloader block in the filesystem.  */
++      int start_sector;
++      
++      /* Open the partition.  */
++      if (! open_device ())
++      return 1;
++
++      /* Check if the current slice supports embedding.  */
++      if (fsys_table[fsys_type].embed_func == 0
++        || ! fsys_table[fsys_type].embed_func (&start_sector, size))
++      {
++        errnum = ERR_DEV_VALUES;
++        return 1;
++      }
++
++      sector = part_start + start_sector;
++    }
++
++  /* Clear the cache.  */
++  buf_track = -1;
++
++  /* Now perform the embedding.  */
++  if (! devwrite (sector - part_start, size, stage1_5_buffer))
++    return 1;
++  
++  grub_printf (" %d sectors are embedded.\n", size);
++  grub_sprintf (embed_info, "%d+%d", sector - part_start, size);
++  return 0;
++}
++
++static struct builtin builtin_embed =
++{
++  "embed",
++  embed_func,
++  BUILTIN_CMDLINE,
++  "embed STAGE1_5 DEVICE",
++  "Embed the Stage 1.5 STAGE1_5 in the sectors after MBR if DEVICE"
++  " is a drive, or in the \"bootloader\" area if DEVICE is a FFS partition."
++  " Print the number of sectors which STAGE1_5 occupies if successful."
++};
++
++\f
++/* fallback */
++static int
++fallback_func (char *arg, int flags)
++{
++  int i = 0;
++
++  while (*arg)
++    {
++      int entry;
++      int j;
++      
++      if (! safe_parse_maxint (&arg, &entry))
++      return 1;
++
++      /* Remove duplications to prevent infinite looping.  */
++      for (j = 0; j < i; j++)
++      if (entry == fallback_entries[j])
++        break;
++      if (j != i)
++      continue;
++      
++      fallback_entries[i++] = entry;
++      if (i == MAX_FALLBACK_ENTRIES)
++      break;
++      
++      arg = skip_to (0, arg);
++    }
++
++  if (i < MAX_FALLBACK_ENTRIES)
++    fallback_entries[i] = -1;
++
++  fallback_entryno = (i == 0) ? -1 : 0;
++  
++  return 0;
++}
++
++static struct builtin builtin_fallback =
++{
++  "fallback",
++  fallback_func,
++  BUILTIN_MENU,
++#if 0
++  "fallback NUM...",
++  "Go into unattended boot mode: if the default boot entry has any"
++  " errors, instead of waiting for the user to do anything, it"
++  " immediately starts over using the NUM entry (same numbering as the"
++  " `default' command). This obviously won't help if the machine"
++  " was rebooted by a kernel that GRUB loaded."
++#endif
++};
++
++\f
++/* find */
++/* Search for the filename ARG in all of partitions.  */
++static int
++find_func (char *arg, int flags)
++{
++  char *filename = arg;
++  unsigned long drive;
++  unsigned long tmp_drive = saved_drive;
++  unsigned long tmp_partition = saved_partition;
++  int got_file = 0;
++  
++  /* Floppies.  */
++  for (drive = 0; drive < 8; drive++)
++    {
++      current_drive = drive;
++      current_partition = 0xFFFFFF;
++      
++      if (open_device ())
++      {
++        saved_drive = current_drive;
++        saved_partition = current_partition;
++        if (grub_open (filename))
++          {
++            grub_close ();
++            grub_printf (" (fd%d)\n", drive);
++            got_file = 1;
++          }
++      }
++
++      errnum = ERR_NONE;
++    }
++
++  /* Hard disks.  */
++  for (drive = 0x80; drive < 0x88; drive++)
++    {
++      unsigned long part = 0xFFFFFF;
++      unsigned long start, len, offset, ext_offset;
++      int type, entry;
++      char buf[SECTOR_SIZE];
++
++      current_drive = drive;
++      while (next_partition (drive, 0xFFFFFF, &part, &type,
++                           &start, &len, &offset, &entry,
++                           &ext_offset, buf))
++      {
++        if (type != PC_SLICE_TYPE_NONE
++            && ! IS_PC_SLICE_TYPE_BSD (type)
++            && ! IS_PC_SLICE_TYPE_EXTENDED (type))
++          {
++            current_partition = part;
++            if (open_device ())
++              {
++                saved_drive = current_drive;
++                saved_partition = current_partition;
++                if (grub_open (filename))
++                  {
++                    int bsd_part = (part >> 8) & 0xFF;
++                    int pc_slice = part >> 16;
++                    
++                    grub_close ();
++                    
++                    if (bsd_part == 0xFF)
++                      grub_printf (" (hd%d,%d)\n",
++                                   drive - 0x80, pc_slice);
++                    else
++                      grub_printf (" (hd%d,%d,%c)\n",
++                                   drive - 0x80, pc_slice, bsd_part + 'a');
++
++                    got_file = 1;
++                  }
++              }
++          }
++
++        /* We want to ignore any error here.  */
++        errnum = ERR_NONE;
++      }
++
++      /* next_partition always sets ERRNUM in the last call, so clear
++       it.  */
++      errnum = ERR_NONE;
++    }
++
++  saved_drive = tmp_drive;
++  saved_partition = tmp_partition;
++
++  if (got_file)
++    {
++      errnum = ERR_NONE;
++      return 0;
++    }
++
++  errnum = ERR_FILE_NOT_FOUND;
++  return 1;
++}
++
++static struct builtin builtin_find =
++{
++  "find",
++  find_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "find FILENAME",
++  "Search for the filename FILENAME in all of partitions and print the list of"
++  " the devices which contain the file."
++};
++
++\f
++/* fstest */
++static int
++fstest_func (char *arg, int flags)
++{
++  if (disk_read_hook)
++    {
++      disk_read_hook = NULL;
++      printf (" Filesystem tracing is now off\n");
++    }
++  else
++    {
++      disk_read_hook = disk_read_print_func;
++      printf (" Filesystem tracing is now on\n");
++    }
++
++  return 0;
++}
++
++static struct builtin builtin_fstest =
++{
++  "fstest",
++  fstest_func,
++  BUILTIN_CMDLINE,
++  "fstest",
++  "Toggle filesystem test mode."
++};
++
++\f
++/* geometry */
++static int
++geometry_func (char *arg, int flags)
++{
++  struct geometry geom;
++  char *msg;
++  char *device = arg;
++#ifdef GRUB_UTIL
++  char *ptr;
++#endif
++
++  /* Get the device number.  */
++  set_device (device);
++  if (errnum)
++    return 1;
++
++  /* Check for the geometry.  */
++  if (get_diskinfo (current_drive, &geom))
++    {
++      errnum = ERR_NO_DISK;
++      return 1;
++    }
++
++  /* Attempt to read the first sector, because some BIOSes turns out not
++     to support LBA even though they set the bit 0 in the support
++     bitmap, only after reading something actually.  */
++  if (biosdisk (BIOSDISK_READ, current_drive, &geom, 0, 1, SCRATCHSEG))
++    {
++      errnum = ERR_READ;
++      return 1;
++    }
++
++#ifdef GRUB_UTIL
++  ptr = skip_to (0, device);
++  if (*ptr)
++    {
++      char *cylinder, *head, *sector, *total_sector;
++      int num_cylinder, num_head, num_sector, num_total_sector;
++
++      cylinder = ptr;
++      head = skip_to (0, cylinder);
++      sector = skip_to (0, head);
++      total_sector = skip_to (0, sector);
++      if (! safe_parse_maxint (&cylinder, &num_cylinder)
++        || ! safe_parse_maxint (&head, &num_head)
++        || ! safe_parse_maxint (&sector, &num_sector))
++      return 1;
++
++      disks[current_drive].cylinders = num_cylinder;
++      disks[current_drive].heads = num_head;
++      disks[current_drive].sectors = num_sector;
++
++      if (safe_parse_maxint (&total_sector, &num_total_sector))
++      disks[current_drive].total_sectors = num_total_sector;
++      else
++      disks[current_drive].total_sectors
++        = num_cylinder * num_head * num_sector;
++      errnum = 0;
++
++      geom = disks[current_drive];
++      buf_drive = -1;
++    }
++#endif /* GRUB_UTIL */
++
++#ifdef GRUB_UTIL
++  msg = device_map[current_drive];
++#else
++  if (geom.flags & BIOSDISK_FLAG_LBA_EXTENSION)
++    msg = "LBA";
++  else
++    msg = "CHS";
++#endif
++
++  grub_printf ("drive 0x%x: C/H/S = %d/%d/%d, "
++             "The number of sectors = %d, %s\n",
++             current_drive,
++             geom.cylinders, geom.heads, geom.sectors,
++             geom.total_sectors, msg);
++  real_open_partition (1);
++
++  return 0;
++}
++
++static struct builtin builtin_geometry =
++{
++  "geometry",
++  geometry_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "geometry DRIVE [CYLINDER HEAD SECTOR [TOTAL_SECTOR]]",
++  "Print the information for a drive DRIVE. In the grub shell, you can"
++  " set the geometry of the drive arbitrarily. The number of the cylinders,"
++  " the one of the heads, the one of the sectors and the one of the total"
++  " sectors are set to CYLINDER, HEAD, SECTOR and TOTAL_SECTOR,"
++  " respectively. If you omit TOTAL_SECTOR, then it will be calculated based"
++  " on the C/H/S values automatically."
++};
++
++\f
++/* halt */
++static int
++halt_func (char *arg, int flags)
++{
++  int no_apm;
++
++  no_apm = (grub_memcmp (arg, "--no-apm", 8) == 0);
++  grub_halt (no_apm);
++  
++  /* Never reach here.  */
++  return 1;
++}
++
++static struct builtin builtin_halt =
++{
++  "halt",
++  halt_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "halt [--no-apm]",
++  "Halt your system. If APM is avaiable on it, turn off the power using"
++  " the APM BIOS, unless you specify the option `--no-apm'."
++};
++
++\f
++/* help */
++#define MAX_SHORT_DOC_LEN     39
++#define MAX_LONG_DOC_LEN      66
++
++static int
++help_func (char *arg, int flags)
++{
++  int all = 0;
++  
++  if (grub_memcmp (arg, "--all", sizeof ("--all") - 1) == 0)
++    {
++      all = 1;
++      arg = skip_to (0, arg);
++    }
++  
++  if (! *arg)
++    {
++      /* Invoked with no argument. Print the list of the short docs.  */
++      struct builtin **builtin;
++      int left = 1;
++
++      for (builtin = builtin_table; *builtin != 0; builtin++)
++      {
++        int len;
++        int i;
++
++        /* If this cannot be used in the command-line interface,
++           skip this.  */
++        if (! ((*builtin)->flags & BUILTIN_CMDLINE))
++          continue;
++        
++        /* If this doesn't need to be listed automatically and "--all"
++           is not specified, skip this.  */
++        if (! all && ! ((*builtin)->flags & BUILTIN_HELP_LIST))
++          continue;
++
++        len = grub_strlen ((*builtin)->short_doc);
++        /* If the length of SHORT_DOC is too long, truncate it.  */
++        if (len > MAX_SHORT_DOC_LEN - 1)
++          len = MAX_SHORT_DOC_LEN - 1;
++
++        for (i = 0; i < len; i++)
++          grub_putchar ((*builtin)->short_doc[i]);
++
++        for (; i < MAX_SHORT_DOC_LEN; i++)
++          grub_putchar (' ');
++
++        if (! left)
++          grub_putchar ('\n');
++
++        left = ! left;
++      }
++
++      /* If the last entry was at the left column, no newline was printed
++       at the end.  */
++      if (! left)
++      grub_putchar ('\n');
++    }
++  else
++    {
++      /* Invoked with one or more patterns.  */
++      do
++      {
++        struct builtin **builtin;
++        char *next_arg;
++
++        /* Get the next argument.  */
++        next_arg = skip_to (0, arg);
++
++        /* Terminate ARG.  */
++        nul_terminate (arg);
++
++        for (builtin = builtin_table; *builtin; builtin++)
++          {
++            /* Skip this if this is only for the configuration file.  */
++            if (! ((*builtin)->flags & BUILTIN_CMDLINE))
++              continue;
++
++            if (substring (arg, (*builtin)->name) < 1)
++              {
++                char *doc = (*builtin)->long_doc;
++
++                /* At first, print the name and the short doc.  */
++                grub_printf ("%s: %s\n",
++                             (*builtin)->name, (*builtin)->short_doc);
++
++                /* Print the long doc.  */
++                while (*doc)
++                  {
++                    int len = grub_strlen (doc);
++                    int i;
++
++                    /* If LEN is too long, fold DOC.  */
++                    if (len > MAX_LONG_DOC_LEN)
++                      {
++                        /* Fold this line at the position of a space.  */
++                        for (len = MAX_LONG_DOC_LEN; len > 0; len--)
++                          if (doc[len - 1] == ' ')
++                            break;
++                      }
++
++                    grub_printf ("    ");
++                    for (i = 0; i < len; i++)
++                      grub_putchar (*doc++);
++                    grub_putchar ('\n');
++                  }
++              }
++          }
++
++        arg = next_arg;
++      }
++      while (*arg);
++    }
++
++  return 0;
++}
++
++static struct builtin builtin_help =
++{
++  "help",
++  help_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "help [--all] [PATTERN ...]",
++  "Display helpful information about builtin commands. Not all commands"
++  " aren't shown without the option `--all'."
++};
++
++\f
++/* hiddenmenu */
++static int
++hiddenmenu_func (char *arg, int flags)
++{
++  show_menu = 0;
++  return 0;
++}
++
++static struct builtin builtin_hiddenmenu =
++{
++  "hiddenmenu",
++  hiddenmenu_func,
++  BUILTIN_MENU,
++#if 0
++  "hiddenmenu",
++  "Hide the menu."
++#endif
++};
++
++\f
++/* hide */
++static int
++hide_func (char *arg, int flags)
++{
++  if (! set_device (arg))
++    return 1;
++
++  if (! set_partition_hidden_flag (1))
++    return 1;
++
++  return 0;
++}
++
++static struct builtin builtin_hide =
++{
++  "hide",
++  hide_func,
++  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
++  "hide PARTITION",
++  "Hide PARTITION by setting the \"hidden\" bit in"
++  " its partition type code."
++};
++
++\f
++#ifdef SUPPORT_NETBOOT
++/* ifconfig */
++static int
++ifconfig_func (char *arg, int flags)
++{
++  char *svr = 0, *ip = 0, *gw = 0, *sm = 0;
++  
++  if (! eth_probe ())
++    {
++      grub_printf ("No ethernet card found.\n");
++      errnum = ERR_DEV_VALUES;
++      return 1;
++    }
++  
++  while (*arg) 
++    {
++      if (! grub_memcmp ("--server=", arg, sizeof ("--server=") - 1))
++      svr = arg + sizeof("--server=") - 1;
++      else if (! grub_memcmp ("--address=", arg, sizeof ("--address=") - 1))
++      ip = arg + sizeof ("--address=") - 1;
++      else if (! grub_memcmp ("--gateway=", arg, sizeof ("--gateway=") - 1))
++      gw = arg + sizeof ("--gateway=") - 1;
++      else if (! grub_memcmp ("--mask=", arg, sizeof("--mask=") - 1))
++      sm = arg + sizeof ("--mask=") - 1;
++      else
++      {
++        errnum = ERR_BAD_ARGUMENT;
++        return 1;
++      }
++      
++      arg = skip_to (0, arg);
++    }
++  
++  if (! ifconfig (ip, sm, gw, svr))
++    {
++      errnum = ERR_BAD_ARGUMENT;
++      return 1;
++    }
++  
++  print_network_configuration ();
++  return 0;
++}
++
++static struct builtin builtin_ifconfig =
++{
++  "ifconfig",
++  ifconfig_func,
++  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
++  "ifconfig [--address=IP] [--gateway=IP] [--mask=MASK] [--server=IP]",
++  "Configure the IP address, the netmask, the gateway and the server"
++  " address or print current network configuration."
++};
++#endif /* SUPPORT_NETBOOT */
++
++\f
++/* impsprobe */
++static int
++impsprobe_func (char *arg, int flags)
++{
++#ifdef GRUB_UTIL
++  /* In the grub shell, we cannot probe IMPS.  */
++  errnum = ERR_UNRECOGNIZED;
++  return 1;
++#else /* ! GRUB_UTIL */
++  if (!imps_probe ())
++    printf (" No MPS information found or probe failed\n");
++
++  return 0;
++#endif /* ! GRUB_UTIL */
++}
++
++static struct builtin builtin_impsprobe =
++{
++  "impsprobe",
++  impsprobe_func,
++  BUILTIN_CMDLINE,
++  "impsprobe",
++  "Probe the Intel Multiprocessor Specification 1.1 or 1.4"
++  " configuration table and boot the various CPUs which are found into"
++  " a tight loop."
++};
++
++\f
++/* initrd */
++static int
++initrd_func (char *arg, int flags)
++{
++  switch (kernel_type)
++    {
++    case KERNEL_TYPE_LINUX:
++    case KERNEL_TYPE_BIG_LINUX:
++      if (! load_initrd (arg))
++      return 1;
++      break;
++
++    default:
++      errnum = ERR_NEED_LX_KERNEL;
++      return 1;
++    }
++
++  return 0;
++}
++
++static struct builtin builtin_initrd =
++{
++  "initrd",
++  initrd_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "initrd FILE [ARG ...]",
++  "Load an initial ramdisk FILE for a Linux format boot image and set the"
++  " appropriate parameters in the Linux setup area in memory."
++};
++
++\f
++/* install */
++static int
++install_func (char *arg, int flags)
++{
++  char *stage1_file, *dest_dev, *file, *addr;
++  char *stage1_buffer = (char *) RAW_ADDR (0x100000);
++  char *stage2_buffer = stage1_buffer + SECTOR_SIZE;
++  char *old_sect = stage2_buffer + SECTOR_SIZE;
++  char *stage2_first_buffer = old_sect + SECTOR_SIZE;
++  char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE;
++  /* XXX: Probably SECTOR_SIZE is reasonable.  */
++  char *config_filename = stage2_second_buffer + SECTOR_SIZE;
++  char *dummy = config_filename + SECTOR_SIZE;
++  int new_drive = GRUB_INVALID_DRIVE;
++  int dest_drive, dest_partition, dest_sector;
++  int src_drive, src_partition, src_part_start;
++  int i;
++  struct geometry dest_geom, src_geom;
++  int saved_sector;
++  int stage2_first_sector, stage2_second_sector;
++  char *ptr;
++  int installaddr, installlist;
++  /* Point to the location of the name of a configuration file in Stage 2.  */
++  char *config_file_location;
++  /* If FILE is a Stage 1.5?  */
++  int is_stage1_5 = 0;
++  /* Must call grub_close?  */
++  int is_open = 0;
++  /* If LBA is forced?  */
++  int is_force_lba = 0;
++  /* Was the last sector full? */
++  int last_length = SECTOR_SIZE;
++  
++#ifdef GRUB_UTIL
++  /* If the Stage 2 is in a partition mounted by an OS, this will store
++     the filename under the OS.  */
++  char *stage2_os_file = 0;
++#endif /* GRUB_UTIL */
++  
++  auto void disk_read_savesect_func (int sector, int offset, int length);
++  auto void disk_read_blocklist_func (int sector, int offset, int length);
++  
++  /* Save the first sector of Stage2 in STAGE2_SECT.  */
++  auto void disk_read_savesect_func (int sector, int offset, int length)
++    {
++      if (debug)
++      printf ("[%d]", sector);
++
++      /* ReiserFS has files which sometimes contain data not aligned
++         on sector boundaries.  Returning an error is better than
++         silently failing. */
++      if (offset != 0 || length != SECTOR_SIZE)
++      errnum = ERR_UNALIGNED;
++
++      saved_sector = sector;
++    }
++
++  /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and
++     INSTALLSECT.  */
++  auto void disk_read_blocklist_func (int sector, int offset, int length)
++    {
++      if (debug)
++      printf("[%d]", sector);
++
++      if (offset != 0 || last_length != SECTOR_SIZE)
++      {
++        /* We found a non-sector-aligned data block. */
++        errnum = ERR_UNALIGNED;
++        return;
++      }
++
++      last_length = length;
++
++      if (*((unsigned long *) (installlist - 4))
++        + *((unsigned short *) installlist) != sector
++        || installlist == (int) stage2_first_buffer + SECTOR_SIZE + 4)
++      {
++        installlist -= 8;
++
++        if (*((unsigned long *) (installlist - 8)))
++          errnum = ERR_WONT_FIT;
++        else
++          {
++            *((unsigned short *) (installlist + 2)) = (installaddr >> 4);
++            *((unsigned long *) (installlist - 4)) = sector;
++          }
++      }
++
++      *((unsigned short *) installlist) += 1;
++      installaddr += 512;
++    }
++
++  /* First, check the GNU-style long option.  */
++  while (1)
++    {
++      if (grub_memcmp ("--force-lba", arg, sizeof ("--force-lba") - 1) == 0)
++      {
++        is_force_lba = 1;
++        arg = skip_to (0, arg);
++      }
++#ifdef GRUB_UTIL
++      else if (grub_memcmp ("--stage2=", arg, sizeof ("--stage2=") - 1) == 0)
++      {
++        stage2_os_file = arg + sizeof ("--stage2=") - 1;
++        arg = skip_to (0, arg);
++        nul_terminate (stage2_os_file);
++      }
++#endif /* GRUB_UTIL */
++      else
++      break;
++    }
++  
++  stage1_file = arg;
++  dest_dev = skip_to (0, stage1_file);
++  if (*dest_dev == 'd')
++    {
++      new_drive = 0;
++      dest_dev = skip_to (0, dest_dev);
++    }
++  file = skip_to (0, dest_dev);
++  addr = skip_to (0, file);
++
++  /* Get the installation address.  */
++  if (! safe_parse_maxint (&addr, &installaddr))
++    {
++      /* ADDR is not specified.  */
++      installaddr = 0;
++      ptr = addr;
++      errnum = 0;
++    }
++  else
++    ptr = skip_to (0, addr);
++
++#ifndef NO_DECOMPRESSION
++  /* Do not decompress Stage 1 or Stage 2.  */
++  no_decompression = 1;
++#endif
++
++  /* Read Stage 1.  */
++  is_open = grub_open (stage1_file);
++  if (! is_open
++      || ! grub_read (stage1_buffer, SECTOR_SIZE) == SECTOR_SIZE)
++    goto fail;
++
++  /* Read the old sector from DEST_DEV.  */
++  if (! set_device (dest_dev)
++      || ! open_partition ()
++      || ! devread (0, 0, SECTOR_SIZE, old_sect))
++    goto fail;
++
++  /* Store the information for the destination device.  */
++  dest_drive = current_drive;
++  dest_partition = current_partition;
++  dest_geom = buf_geom;
++  dest_sector = part_start;
++
++  /* Copy the possible DOS BPB, 59 bytes at byte offset 3.  */
++  grub_memmove (stage1_buffer + BOOTSEC_BPB_OFFSET,
++              old_sect + BOOTSEC_BPB_OFFSET,
++              BOOTSEC_BPB_LENGTH);
++
++  /* If for a hard disk, copy the possible MBR/extended part table.  */
++  if (dest_drive & 0x80)
++    grub_memmove (stage1_buffer + STAGE1_WINDOWS_NT_MAGIC,
++                old_sect + STAGE1_WINDOWS_NT_MAGIC,
++                STAGE1_PARTEND - STAGE1_WINDOWS_NT_MAGIC);
++
++  /* Check for the version and the signature of Stage 1.  */
++  if (*((short *)(stage1_buffer + STAGE1_VER_MAJ_OFFS)) != COMPAT_VERSION
++      || (*((unsigned short *) (stage1_buffer + BOOTSEC_SIG_OFFSET))
++        != BOOTSEC_SIGNATURE))
++    {
++      errnum = ERR_BAD_VERSION;
++      goto fail;
++    }
++
++  /* This below is not true any longer. But should we leave this alone?  */
++  
++  /* If DEST_DRIVE is a floppy, Stage 2 must have the iteration probe
++     routine.  */
++  if (! (dest_drive & 0x80)
++      && (*((unsigned char *) (stage1_buffer + BOOTSEC_PART_OFFSET)) == 0x80
++        || stage1_buffer[BOOTSEC_PART_OFFSET] == 0))
++    {
++      errnum = ERR_BAD_VERSION;
++      goto fail;
++    }
++
++  grub_close ();
++  
++  /* Open Stage 2.  */
++  is_open = grub_open (file);
++  if (! is_open)
++    goto fail;
++
++  src_drive = current_drive;
++  src_partition = current_partition;
++  src_part_start = part_start;
++  src_geom = buf_geom;
++  
++  if (! new_drive)
++    new_drive = src_drive;
++  else if (src_drive != dest_drive)
++    grub_printf ("Warning: the option `d' was not used, but the Stage 1 will"
++               " be installed on a\ndifferent drive than the drive where"
++               " the Stage 2 resides.\n");
++
++  /* Set the boot drive.  */
++  *((unsigned char *) (stage1_buffer + STAGE1_BOOT_DRIVE)) = new_drive;
++
++  /* Set the "force LBA" flag.  */
++  *((unsigned char *) (stage1_buffer + STAGE1_FORCE_LBA)) = is_force_lba;
++
++  /* If DEST_DRIVE is a hard disk, enable the workaround, which is
++     for buggy BIOSes which don't pass boot drive correctly. Instead,
++     they pass 0x00 or 0x01 even when booted from 0x80.  */
++  if (dest_drive & BIOS_FLAG_FIXED_DISK)
++    /* Replace the jmp (2 bytes) with double nop's.  */
++    *((unsigned short *) (stage1_buffer + STAGE1_BOOT_DRIVE_CHECK))
++      = 0x9090;
++  
++  /* Read the first sector of Stage 2.  */
++  disk_read_hook = disk_read_savesect_func;
++  if (grub_read (stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE)
++    goto fail;
++
++  stage2_first_sector = saved_sector;
++  
++  /* Read the second sector of Stage 2.  */
++  if (grub_read (stage2_second_buffer, SECTOR_SIZE) != SECTOR_SIZE)
++    goto fail;
++
++  stage2_second_sector = saved_sector;
++  
++  /* Check for the version of Stage 2.  */
++  if (*((short *) (stage2_second_buffer + STAGE2_VER_MAJ_OFFS))
++      != COMPAT_VERSION)
++    {
++      errnum = ERR_BAD_VERSION;
++      goto fail;
++    }
++
++  /* Check for the Stage 2 id.  */
++  if (stage2_second_buffer[STAGE2_STAGE2_ID] != STAGE2_ID_STAGE2)
++    is_stage1_5 = 1;
++
++  /* If INSTALLADDR is not specified explicitly in the command-line,
++     determine it by the Stage 2 id.  */
++  if (! installaddr)
++    {
++      if (! is_stage1_5)
++      /* Stage 2.  */
++      installaddr = 0x8000;
++      else
++      /* Stage 1.5.  */
++      installaddr = 0x2000;
++    }
++
++  *((unsigned long *) (stage1_buffer + STAGE1_STAGE2_SECTOR))
++    = stage2_first_sector;
++  *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_ADDRESS))
++    = installaddr;
++  *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_SEGMENT))
++    = installaddr >> 4;
++
++  i = (int) stage2_first_buffer + SECTOR_SIZE - 4;
++  while (*((unsigned long *) i))
++    {
++      if (i < (int) stage2_first_buffer
++        || (*((int *) (i - 4)) & 0x80000000)
++        || *((unsigned short *) i) >= 0xA00
++        || *((short *) (i + 2)) == 0)
++      {
++        errnum = ERR_BAD_VERSION;
++        goto fail;
++      }
++
++      *((int *) i) = 0;
++      *((int *) (i - 4)) = 0;
++      i -= 8;
++    }
++
++  installlist = (int) stage2_first_buffer + SECTOR_SIZE + 4;
++  installaddr += SECTOR_SIZE;
++  
++  /* Read the whole of Stage2 except for the first sector.  */
++  grub_seek (SECTOR_SIZE);
++
++  disk_read_hook = disk_read_blocklist_func;
++  if (! grub_read (dummy, -1))
++    goto fail;
++  
++  disk_read_hook = 0;
++  
++  /* Find a string for the configuration filename.  */
++  config_file_location = stage2_second_buffer + STAGE2_VER_STR_OFFS;
++  while (*(config_file_location++))
++    ;
++
++  /* Set the "force LBA" flag for Stage2.  */
++  *((unsigned char *) (stage2_second_buffer + STAGE2_FORCE_LBA))
++    = is_force_lba;
++  
++  if (*ptr == 'p')
++    {
++      *((long *) (stage2_second_buffer + STAGE2_INSTALLPART))
++      = src_partition;
++      if (is_stage1_5)
++      {
++        /* Reset the device information in FILE if it is a Stage 1.5.  */
++        unsigned long device = 0xFFFFFFFF;
++
++        grub_memmove (config_file_location, (char *) &device,
++                      sizeof (device));
++      }
++
++      ptr = skip_to (0, ptr);
++    }
++
++  if (*ptr)
++    {
++      grub_strcpy (config_filename, ptr);
++      nul_terminate (config_filename);
++      
++      if (! is_stage1_5)
++      /* If it is a Stage 2, just copy PTR to CONFIG_FILE_LOCATION.  */
++      grub_strcpy (config_file_location, ptr);
++      else
++      {
++        char *real_config;
++        unsigned long device;
++
++        /* Translate the external device syntax to the internal device
++           syntax.  */
++        if (! (real_config = set_device (ptr)))
++          {
++            /* The Stage 2 PTR does not contain the device name, so
++               use the root device instead.  */
++            errnum = ERR_NONE;
++            current_drive = saved_drive;
++            current_partition = saved_partition;
++            real_config = ptr;
++          }
++        
++        if (current_drive == src_drive)
++          {
++            /* If the drive where the Stage 2 resides is the same as
++               the one where the Stage 1.5 resides, do not embed the
++               drive number.  */
++            current_drive = GRUB_INVALID_DRIVE;
++          }
++
++        device = (current_drive << 24) | current_partition;
++        grub_memmove (config_file_location, (char *) &device,
++                      sizeof (device));
++        grub_strcpy (config_file_location + sizeof (device),
++                     real_config);
++      }
++
++      /* If a Stage 1.5 is used, then we need to modify the Stage2.  */
++      if (is_stage1_5)
++      {
++        char *real_config_filename = skip_to (0, ptr);
++        
++        is_open = grub_open (config_filename);
++        if (! is_open)
++          goto fail;
++
++        /* Skip the first sector.  */
++        grub_seek (SECTOR_SIZE);
++        
++        disk_read_hook = disk_read_savesect_func;
++        if (grub_read (stage2_buffer, SECTOR_SIZE) != SECTOR_SIZE)
++          goto fail;
++        
++        disk_read_hook = 0;
++        grub_close ();
++        is_open = 0;
++        
++        /* Sanity check.  */
++        if (*(stage2_buffer + STAGE2_STAGE2_ID) != STAGE2_ID_STAGE2)
++          {
++            errnum = ERR_BAD_VERSION;
++            goto fail;
++          }
++
++        /* Set the "force LBA" flag for Stage2.  */
++        *(stage2_buffer + STAGE2_FORCE_LBA) = is_force_lba;
++
++        /* If REAL_CONFIG_FILENAME is specified, copy it to the Stage2.  */
++        if (*real_config_filename)
++          {
++            /* Specified */
++            char *location;
++            
++            /* Find a string for the configuration filename.  */
++            location = stage2_buffer + STAGE2_VER_STR_OFFS;
++            while (*(location++))
++              ;
++            
++            /* Copy the name.  */
++            grub_strcpy (location, real_config_filename);
++          }
++        
++        /* Write it to the disk.  */
++        buf_track = -1;
++
++#ifdef GRUB_UTIL
++        /* In the grub shell, access the Stage 2 via the OS filesystem
++           service, if possible.  */
++        if (stage2_os_file)
++          {
++            FILE *fp;
++
++            fp = fopen (stage2_os_file, "r+");
++            if (! fp)
++              {
++                errnum = ERR_FILE_NOT_FOUND;
++                goto fail;
++              }
++
++            if (fseek (fp, SECTOR_SIZE, SEEK_SET) != 0)
++              {
++                fclose (fp);
++                errnum = ERR_BAD_VERSION;
++                goto fail;
++              }
++
++            if (fwrite (stage2_buffer, 1, SECTOR_SIZE, fp)
++                != SECTOR_SIZE)
++              {
++                fclose (fp);
++                errnum = ERR_WRITE;
++                goto fail;
++              }
++
++            fclose (fp);
++          }
++        else
++#endif /* GRUB_UTIL */
++          {
++            if (! devwrite (saved_sector - part_start, 1, stage2_buffer))
++              goto fail;
++          }
++      }
++    }
++
++  /* Clear the cache.  */
++  buf_track = -1;
++
++  /* Write the modified sectors of Stage2 to the disk.  */
++#ifdef GRUB_UTIL
++  if (! is_stage1_5 && stage2_os_file)
++    {
++      FILE *fp;
++
++      fp = fopen (stage2_os_file, "r+");
++      if (! fp)
++      {
++        errnum = ERR_FILE_NOT_FOUND;
++        goto fail;
++      }
++
++      if (fwrite (stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
++      {
++        fclose (fp);
++        errnum = ERR_WRITE;
++        goto fail;
++      }
++
++      if (fwrite (stage2_second_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE)
++      {
++        fclose (fp);
++        errnum = ERR_WRITE;
++        goto fail;
++      }
++
++      fclose (fp);
++    }
++  else
++#endif /* GRUB_UTIL */
++    {
++      /* The first.  */
++      current_drive = src_drive;
++      current_partition = src_partition;
++
++      if (! open_partition ())
++      goto fail;
++
++      if (! devwrite (stage2_first_sector - src_part_start, 1,
++                    stage2_first_buffer))
++      goto fail;
++
++      if (! devwrite (stage2_second_sector - src_part_start, 1,
++                    stage2_second_buffer))
++      goto fail;
++    }
++  
++  /* Write the modified sector of Stage 1 to the disk.  */
++  current_drive = dest_drive;
++  current_partition = dest_partition;
++  if (! open_partition ())
++    goto fail;
++
++  devwrite (0, 1, stage1_buffer);
++
++ fail:
++  if (is_open)
++    grub_close ();
++  
++  disk_read_hook = 0;
++  
++#ifndef NO_DECOMPRESSION
++  no_decompression = 0;
++#endif
++
++  return errnum;
++}
++
++static struct builtin builtin_install =
++{
++  "install",
++  install_func,
++  BUILTIN_CMDLINE,
++  "install [--stage2=STAGE2_FILE] [--force-lba] STAGE1 [d] DEVICE STAGE2 [ADDR] [p] [CONFIG_FILE] [REAL_CONFIG_FILE]",
++  "Install STAGE1 on DEVICE, and install a blocklist for loading STAGE2"
++  " as a Stage 2. If the option `d' is present, the Stage 1 will always"
++  " look for the disk where STAGE2 was installed, rather than using"
++  " the booting drive. The Stage 2 will be loaded at address ADDR, which"
++  " will be determined automatically if you don't specify it. If"
++  " the option `p' or CONFIG_FILE is present, then the first block"
++  " of Stage 2 is patched with new values of the partition and name"
++  " of the configuration file used by the true Stage 2 (for a Stage 1.5,"
++  " this is the name of the true Stage 2) at boot time. If STAGE2 is a Stage"
++  " 1.5 and REAL_CONFIG_FILE is present, then the Stage 2 CONFIG_FILE is"
++  " patched with the configuration filename REAL_CONFIG_FILE."
++  " If the option `--force-lba' is specified, disable some sanity checks"
++  " for LBA mode. If the option `--stage2' is specified, rewrite the Stage"
++  " 2 via your OS's filesystem instead of the raw device."
++};
++
++\f
++/* ioprobe */
++static int
++ioprobe_func (char *arg, int flags)
++{
++#ifdef GRUB_UTIL
++  
++  errnum = ERR_UNRECOGNIZED;
++  return 1;
++  
++#else /* ! GRUB_UTIL */
++  
++  unsigned short *port;
++  
++  /* Get the drive number.  */
++  set_device (arg);
++  if (errnum)
++    return 1;
++
++  /* Clean out IO_MAP.  */
++  grub_memset ((char *) io_map, 0, IO_MAP_SIZE * sizeof (unsigned short));
++
++  /* Track the int13 handler.  */
++  track_int13 (current_drive);
++  
++  /* Print out the result.  */
++  for (port = io_map; *port != 0; port++)
++    grub_printf (" 0x%x", (unsigned int) *port);
++
++  return 0;
++  
++#endif /* ! GRUB_UTIL */
++}
++
++static struct builtin builtin_ioprobe =
++{
++  "ioprobe",
++  ioprobe_func,
++  BUILTIN_CMDLINE,
++  "ioprobe DRIVE",
++  "Probe I/O ports used for the drive DRIVE."
++};
++
++\f
++/* kernel */
++static int
++kernel_func (char *arg, int flags)
++{
++  int len;
++  kernel_t suggested_type = KERNEL_TYPE_NONE;
++  unsigned long load_flags = 0;
++
++#ifndef AUTO_LINUX_MEM_OPT
++  load_flags |= KERNEL_LOAD_NO_MEM_OPTION;
++#endif
++
++  /* Deal with GNU-style long options.  */
++  while (1)
++    {
++      /* If the option `--type=TYPE' is specified, convert the string to
++       a kernel type.  */
++      if (grub_memcmp (arg, "--type=", 7) == 0)
++      {
++        arg += 7;
++        
++        if (grub_memcmp (arg, "netbsd", 6) == 0)
++          suggested_type = KERNEL_TYPE_NETBSD;
++        else if (grub_memcmp (arg, "freebsd", 7) == 0)
++          suggested_type = KERNEL_TYPE_FREEBSD;
++        else if (grub_memcmp (arg, "openbsd", 7) == 0)
++          /* XXX: For now, OpenBSD is identical to NetBSD, from GRUB's
++             point of view.  */
++          suggested_type = KERNEL_TYPE_NETBSD;
++        else if (grub_memcmp (arg, "linux", 5) == 0)
++          suggested_type = KERNEL_TYPE_LINUX;
++        else if (grub_memcmp (arg, "biglinux", 8) == 0)
++          suggested_type = KERNEL_TYPE_BIG_LINUX;
++        else if (grub_memcmp (arg, "multiboot", 9) == 0)
++          suggested_type = KERNEL_TYPE_MULTIBOOT;
++        else
++          {
++            errnum = ERR_BAD_ARGUMENT;
++            return 1;
++          }
++      }
++      /* If the `--no-mem-option' is specified, don't pass a Linux's mem
++       option automatically. If the kernel is another type, this flag
++       has no effect.  */
++      else if (grub_memcmp (arg, "--no-mem-option", 15) == 0)
++      load_flags |= KERNEL_LOAD_NO_MEM_OPTION;
++      else
++      break;
++
++      /* Try the next.  */
++      arg = skip_to (0, arg);
++    }
++      
++  len = grub_strlen (arg);
++
++  /* Reset MB_CMDLINE.  */
++  mb_cmdline = (char *) MB_CMDLINE_BUF;
++  if (len + 1 > MB_CMDLINE_BUFLEN)
++    {
++      errnum = ERR_WONT_FIT;
++      return 1;
++    }
++
++  /* Copy the command-line to MB_CMDLINE.  */
++  grub_memmove (mb_cmdline, arg, len + 1);
++  kernel_type = load_image (arg, mb_cmdline, suggested_type, load_flags);
++  if (kernel_type == KERNEL_TYPE_NONE)
++    return 1;
++
++  mb_cmdline += len + 1;
++  return 0;
++}
++
++static struct builtin builtin_kernel =
++{
++  "kernel",
++  kernel_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "kernel [--no-mem-option] [--type=TYPE] FILE [ARG ...]",
++  "Attempt to load the primary boot image from FILE. The rest of the"
++  " line is passed verbatim as the \"kernel command line\".  Any modules"
++  " must be reloaded after using this command. The option --type is used"
++  " to suggest what type of kernel to be loaded. TYPE must be either of"
++  " \"netbsd\", \"freebsd\", \"openbsd\", \"linux\", \"biglinux\" and"
++  " \"multiboot\". The option --no-mem-option tells GRUB not to pass a"
++  " Linux's mem option automatically."
++};
++
++\f
++/* lock */
++static int
++lock_func (char *arg, int flags)
++{
++  if (! auth && password)
++    {
++      errnum = ERR_PRIVILEGED;
++      return 1;
++    }
++
++  return 0;
++}
++
++static struct builtin builtin_lock =
++{
++  "lock",
++  lock_func,
++  BUILTIN_CMDLINE,
++  "lock",
++  "Break a command execution unless the user is authenticated."
++};
++  
++\f
++/* makeactive */
++static int
++makeactive_func (char *arg, int flags)
++{
++  if (! make_saved_active ())
++    return 1;
++
++  return 0;
++}
++
++static struct builtin builtin_makeactive =
++{
++  "makeactive",
++  makeactive_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "makeactive",
++  "Set the active partition on the root disk to GRUB's root device."
++  " This command is limited to _primary_ PC partitions on a hard disk."
++};
++
++\f
++/* map */
++/* Map FROM_DRIVE to TO_DRIVE.  */
++static int
++map_func (char *arg, int flags)
++{
++  char *to_drive;
++  char *from_drive;
++  unsigned long to, from;
++  int i;
++  
++  to_drive = arg;
++  from_drive = skip_to (0, arg);
++
++  /* Get the drive number for TO_DRIVE.  */
++  set_device (to_drive);
++  if (errnum)
++    return 1;
++  to = current_drive;
++
++  /* Get the drive number for FROM_DRIVE.  */
++  set_device (from_drive);
++  if (errnum)
++    return 1;
++  from = current_drive;
++
++  /* Search for an empty slot in BIOS_DRIVE_MAP.  */
++  for (i = 0; i < DRIVE_MAP_SIZE; i++)
++    {
++      /* Perhaps the user wants to override the map.  */
++      if ((bios_drive_map[i] & 0xff) == from)
++      break;
++      
++      if (! bios_drive_map[i])
++      break;
++    }
++
++  if (i == DRIVE_MAP_SIZE)
++    {
++      errnum = ERR_WONT_FIT;
++      return 1;
++    }
++
++  if (to == from)
++    /* If TO is equal to FROM, delete the entry.  */
++    grub_memmove ((char *) &bios_drive_map[i], (char *) &bios_drive_map[i + 1],
++                sizeof (unsigned short) * (DRIVE_MAP_SIZE - i));
++  else
++    bios_drive_map[i] = from | (to << 8);
++  
++  return 0;
++}
++
++static struct builtin builtin_map =
++{
++  "map",
++  map_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "map TO_DRIVE FROM_DRIVE",
++  "Map the drive FROM_DRIVE to the drive TO_DRIVE. This is necessary"
++  " when you chain-load some operating systems, such as DOS, if such an"
++  " OS resides at a non-first drive."
++};
++
++\f
++#ifdef USE_MD5_PASSWORDS
++/* md5crypt */
++static int
++md5crypt_func (char *arg, int flags)
++{
++  char crypted[36];
++  char key[32];
++  unsigned int seed;
++  int i;
++  const char *const seedchars =
++    "./0123456789ABCDEFGHIJKLMNOPQRST"
++    "UVWXYZabcdefghijklmnopqrstuvwxyz";
++  
++  /* First create a salt.  */
++
++  /* The magical prefix.  */
++  grub_memset (crypted, 0, sizeof (crypted));
++  grub_memmove (crypted, "$1$", 3);
++
++  /* Create the length of a salt.  */
++  seed = currticks ();
++
++  /* Generate a salt.  */
++  for (i = 0; i < 8 && seed; i++)
++    {
++      /* FIXME: This should be more random.  */
++      crypted[3 + i] = seedchars[seed & 0x3f];
++      seed >>= 6;
++    }
++
++  /* A salt must be terminated with `$', if it is less than 8 chars.  */
++  crypted[3 + i] = '$';
++
++#ifdef DEBUG_MD5CRYPT
++  grub_printf ("salt = %s\n", crypted);
++#endif
++  
++  /* Get a password.  */
++  grub_memset (key, 0, sizeof (key));
++  get_cmdline ("Password: ", key, sizeof (key) - 1, '*', 0);
++
++  /* Crypt the key.  */
++  make_md5_password (key, crypted);
++
++  grub_printf ("Encrypted: %s\n", crypted);
++  return 0;
++}
++
++static struct builtin builtin_md5crypt =
++{
++  "md5crypt",
++  md5crypt_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "md5crypt",
++  "Generate a password in MD5 format."
++};
++#endif /* USE_MD5_PASSWORDS */
++
++\f
++/* module */
++static int
++module_func (char *arg, int flags)
++{
++  int len = grub_strlen (arg);
++
++  switch (kernel_type)
++    {
++    case KERNEL_TYPE_MULTIBOOT:
++      if (mb_cmdline + len + 1 > (char *) MB_CMDLINE_BUF + MB_CMDLINE_BUFLEN)
++      {
++        errnum = ERR_WONT_FIT;
++        return 1;
++      }
++      grub_memmove (mb_cmdline, arg, len + 1);
++      if (! load_module (arg, mb_cmdline))
++      return 1;
++      mb_cmdline += len + 1;
++      break;
++
++    case KERNEL_TYPE_LINUX:
++    case KERNEL_TYPE_BIG_LINUX:
++      if (! load_initrd (arg))
++      return 1;
++      break;
++
++    default:
++      errnum = ERR_NEED_MB_KERNEL;
++      return 1;
++    }
++
++  return 0;
++}
++
++static struct builtin builtin_module =
++{
++  "module",
++  module_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "module FILE [ARG ...]",
++  "Load a boot module FILE for a Multiboot format boot image (no"
++  " interpretation of the file contents is made, so users of this"
++  " command must know what the kernel in question expects). The"
++  " rest of the line is passed as the \"module command line\", like"
++  " the `kernel' command."
++};
++
++\f
++/* modulenounzip */
++static int
++modulenounzip_func (char *arg, int flags)
++{
++  int ret;
++
++#ifndef NO_DECOMPRESSION
++  no_decompression = 1;
++#endif
++
++  ret = module_func (arg, flags);
++
++#ifndef NO_DECOMPRESSION
++  no_decompression = 0;
++#endif
++
++  return ret;
++}
++
++static struct builtin builtin_modulenounzip =
++{
++  "modulenounzip",
++  modulenounzip_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "modulenounzip FILE [ARG ...]",
++  "The same as `module', except that automatic decompression is"
++  " disabled."
++};
++
++\f
++/* pager [on|off] */
++static int
++pager_func (char *arg, int flags)
++{
++  /* If ARG is empty, toggle the flag.  */
++  if (! *arg)
++    use_pager = ! use_pager;
++  else if (grub_memcmp (arg, "on", 2) == 0)
++    use_pager = 1;
++  else if (grub_memcmp (arg, "off", 3) == 0)
++    use_pager = 0;
++  else
++    {
++      errnum = ERR_BAD_ARGUMENT;
++      return 1;
++    }
++
++  grub_printf (" Internal pager is now %s\n", use_pager ? "on" : "off");
++  return 0;
++}
++
++static struct builtin builtin_pager =
++{
++  "pager",
++  pager_func,
++  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
++  "pager [FLAG]",
++  "Toggle pager mode with no argument. If FLAG is given and its value"
++  " is `on', turn on the mode. If FLAG is `off', turn off the mode."
++};
++
++\f
++/* partnew PART TYPE START LEN */
++static int
++partnew_func (char *arg, int flags)
++{
++  int new_type, new_start, new_len;
++  int start_cl, start_ch, start_dh;
++  int end_cl, end_ch, end_dh;
++  int entry;
++  char mbr[512];
++
++  /* Convert a LBA address to a CHS address in the INT 13 format.  */
++  auto void lba_to_chs (int lba, int *cl, int *ch, int *dh);
++  void lba_to_chs (int lba, int *cl, int *ch, int *dh)
++    {
++      int cylinder, head, sector;
++
++      sector = lba % buf_geom.sectors + 1;
++      head = (lba / buf_geom.sectors) % buf_geom.heads;
++      cylinder = lba / (buf_geom.sectors * buf_geom.heads);
++
++      if (cylinder >= buf_geom.cylinders)
++      cylinder = buf_geom.cylinders - 1;
++      
++      *cl = sector | ((cylinder & 0x300) >> 2);
++      *ch = cylinder & 0xFF;
++      *dh = head;
++    }
++      
++  /* Get the drive and the partition.  */
++  if (! set_device (arg))
++    return 1;
++
++  /* The drive must be a hard disk.  */
++  if (! (current_drive & 0x80))
++    {
++      errnum = ERR_BAD_ARGUMENT;
++      return 1;
++    }
++
++  /* The partition must a primary partition.  */
++  if ((current_partition >> 16) > 3
++      || (current_partition & 0xFFFF) != 0xFFFF)
++    {
++      errnum = ERR_BAD_ARGUMENT;
++      return 1;
++    }
++
++  entry = current_partition >> 16;
++  
++  /* Get the new partition type.  */
++  arg = skip_to (0, arg);
++  if (! safe_parse_maxint (&arg, &new_type))
++    return 1;
++
++  /* The partition type is unsigned char.  */
++  if (new_type > 0xFF)
++    {
++      errnum = ERR_BAD_ARGUMENT;
++      return 1;
++    }
++
++  /* Get the new partition start.  */
++  arg = skip_to (0, arg);
++  if (! safe_parse_maxint (&arg, &new_start))
++    return 1;
++  
++  /* Get the new partition length.  */
++  arg = skip_to (0, arg);
++  if (! safe_parse_maxint (&arg, &new_len))
++    return 1;
++
++  /* Read the MBR.  */
++  if (! rawread (current_drive, 0, 0, SECTOR_SIZE, mbr))
++    return 1;
++
++  /* Check if the new partition will fit in the disk.  */
++  if (new_start + new_len > buf_geom.total_sectors)
++    {
++      errnum = ERR_GEOM;
++      return 1;
++    }
++
++  /* Store the partition information in the MBR.  */
++  lba_to_chs (new_start, &start_cl, &start_ch, &start_dh);
++  lba_to_chs (new_start + new_len - 1, &end_cl, &end_ch, &end_dh);
++
++  PC_SLICE_FLAG (mbr, entry) = 0;
++  PC_SLICE_HEAD (mbr, entry) = start_dh;
++  PC_SLICE_SEC (mbr, entry) = start_cl;
++  PC_SLICE_CYL (mbr, entry) = start_ch;
++  PC_SLICE_TYPE (mbr, entry) = new_type;
++  PC_SLICE_EHEAD (mbr, entry) = end_dh;
++  PC_SLICE_ESEC (mbr, entry) = end_cl;
++  PC_SLICE_ECYL (mbr, entry) = end_ch;
++  PC_SLICE_START (mbr, entry) = new_start;
++  PC_SLICE_LENGTH (mbr, entry) = new_len;
++
++  /* Make sure that the MBR has a valid signature.  */
++  PC_MBR_SIG (mbr) = PC_MBR_SIGNATURE;
++  
++  /* Write back the MBR to the disk.  */
++  buf_track = -1;
++  if (! rawwrite (current_drive, 0, mbr))
++    return 1;
++
++  return 0;
++}
++
++static struct builtin builtin_partnew =
++{
++  "partnew",
++  partnew_func,
++  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
++  "partnew PART TYPE START LEN",
++  "Create a primary partition at the starting address START with the"
++  " length LEN, with the type TYPE. START and LEN are in sector units."
++};
++
++\f
++/* parttype PART TYPE */
++static int
++parttype_func (char *arg, int flags)
++{
++  int new_type;
++  unsigned long part = 0xFFFFFF;
++  unsigned long start, len, offset, ext_offset;
++  int entry, type;
++  char mbr[512];
++
++  /* Get the drive and the partition.  */
++  if (! set_device (arg))
++    return 1;
++
++  /* The drive must be a hard disk.  */
++  if (! (current_drive & 0x80))
++    {
++      errnum = ERR_BAD_ARGUMENT;
++      return 1;
++    }
++  
++  /* The partition must be a PC slice.  */
++  if ((current_partition >> 16) == 0xFF
++      || (current_partition & 0xFFFF) != 0xFFFF)
++    {
++      errnum = ERR_BAD_ARGUMENT;
++      return 1;
++    }
++
++  /* Get the new partition type.  */
++  arg = skip_to (0, arg);
++  if (! safe_parse_maxint (&arg, &new_type))
++    return 1;
++
++  /* The partition type is unsigned char.  */
++  if (new_type > 0xFF)
++    {
++      errnum = ERR_BAD_ARGUMENT;
++      return 1;
++    }
++
++  /* Look for the partition.  */
++  while (next_partition (current_drive, 0xFFFFFF, &part, &type,
++                       &start, &len, &offset, &entry,
++                       &ext_offset, mbr))
++    {
++      if (part == current_partition)
++      {
++        /* Found.  */
++
++        /* Set the type to NEW_TYPE.  */
++        PC_SLICE_TYPE (mbr, entry) = new_type;
++        
++        /* Write back the MBR to the disk.  */
++        buf_track = -1;
++        if (! rawwrite (current_drive, offset, mbr))
++          return 1;
++
++        /* Succeed.  */
++        return 0;
++      }
++    }
++
++  /* The partition was not found.  ERRNUM was set by next_partition.  */
++  return 1;
++}
++
++static struct builtin builtin_parttype =
++{
++  "parttype",
++  parttype_func,
++  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
++  "parttype PART TYPE",
++  "Change the type of the partition PART to TYPE."
++};
++
++\f
++/* password */
++static int
++password_func (char *arg, int flags)
++{
++  int len;
++  password_t type = PASSWORD_PLAIN;
++
++#ifdef USE_MD5_PASSWORDS
++  if (grub_memcmp (arg, "--md5", 5) == 0)
++    {
++      type = PASSWORD_MD5;
++      arg = skip_to (0, arg);
++    }
++#endif
++  if (grub_memcmp (arg, "--", 2) == 0)
++    {
++      type = PASSWORD_UNSUPPORTED;
++      arg = skip_to (0, arg);
++    }
++
++  if ((flags & (BUILTIN_CMDLINE | BUILTIN_SCRIPT)) != 0)
++    {
++      /* Do password check! */
++      char entered[32];
++      
++      /* Wipe out any previously entered password */
++      entered[0] = 0;
++      get_cmdline ("Password: ", entered, 31, '*', 0);
++
++      nul_terminate (arg);
++      if (check_password (entered, arg, type) != 0)
++      {
++        errnum = ERR_PRIVILEGED;
++        return 1;
++      }
++    }
++  else
++    {
++      len = grub_strlen (arg);
++      
++      /* PASSWORD NUL NUL ... */
++      if (len + 2 > PASSWORD_BUFLEN)
++      {
++        errnum = ERR_WONT_FIT;
++        return 1;
++      }
++      
++      /* Copy the password and clear the rest of the buffer.  */
++      password = (char *) PASSWORD_BUF;
++      grub_memmove (password, arg, len);
++      grub_memset (password + len, 0, PASSWORD_BUFLEN - len);
++      password_type = type;
++    }
++  return 0;
++}
++
++static struct builtin builtin_password =
++{
++  "password",
++  password_func,
++  BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_NO_ECHO,
++  "password [--md5] PASSWD [FILE]",
++  "If used in the first section of a menu file, disable all"
++  " interactive editing control (menu entry editor and"
++  " command line). If the password PASSWD is entered, it loads the"
++  " FILE as a new config file and restarts the GRUB Stage 2. If you"
++  " omit the argument FILE, then GRUB just unlocks privileged"
++  " instructions.  You can also use it in the script section, in"
++  " which case it will ask for the password, before continueing."
++  " The option --md5 tells GRUB that PASSWD is encrypted with"
++  " md5crypt."
++};
++
++\f
++/* pause */
++static int
++pause_func (char *arg, int flags)
++{
++  printf("%s\n", arg);
++
++  /* If ESC is returned, then abort this entry.  */
++  if (ASCII_CHAR (getkey ()) == 27)
++    return 1;
++
++  return 0;
++}
++
++static struct builtin builtin_pause =
++{
++  "pause",
++  pause_func,
++  BUILTIN_CMDLINE | BUILTIN_NO_ECHO,
++  "pause [MESSAGE ...]",
++  "Print MESSAGE, then wait until a key is pressed."
++};
++
++\f
++#ifdef GRUB_UTIL
++/* quit */
++static int
++quit_func (char *arg, int flags)
++{
++  stop ();
++  
++  /* Never reach here.  */
++  return 0;
++}
++
++static struct builtin builtin_quit =
++{
++  "quit",
++  quit_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "quit",
++  "Exit from the GRUB shell."
++};
++#endif /* GRUB_UTIL */
++
++\f
++#ifdef SUPPORT_NETBOOT
++/* rarp */
++static int
++rarp_func (char *arg, int flags)
++{
++  if (! rarp ())
++    {
++      if (errnum == ERR_NONE)
++      errnum = ERR_DEV_VALUES;
++
++      return 1;
++    }
++
++  /* Notify the configuration.  */
++  print_network_configuration ();
++  return 0;
++}
++
++static struct builtin builtin_rarp =
++{
++  "rarp",
++  rarp_func,
++  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
++  "rarp",
++  "Initialize a network device via RARP."
++};
++#endif /* SUPPORT_NETBOOT */
++
++\f
++static int
++read_func (char *arg, int flags)
++{
++  int addr;
++
++  if (! safe_parse_maxint (&arg, &addr))
++    return 1;
++
++  grub_printf ("Address 0x%x: Value 0x%x\n",
++             addr, *((unsigned *) RAW_ADDR (addr)));
++  return 0;
++}
++
++static struct builtin builtin_read =
++{
++  "read",
++  read_func,
++  BUILTIN_CMDLINE,
++  "read ADDR",
++  "Read a 32-bit value from memory at address ADDR and"
++  " display it in hex format."
++};
++
++\f
++/* reboot */
++static int
++reboot_func (char *arg, int flags)
++{
++  grub_reboot ();
++
++  /* Never reach here.  */
++  return 1;
++}
++
++static struct builtin builtin_reboot =
++{
++  "reboot",
++  reboot_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "reboot",
++  "Reboot your system."
++};
++
++\f
++/* Print the root device information.  */
++static void
++print_root_device (void)
++{
++  if (saved_drive == NETWORK_DRIVE)
++    {
++      /* Network drive.  */
++      grub_printf (" (nd):");
++    }
++  else if (saved_drive & 0x80)
++    {
++      /* Hard disk drive.  */
++      grub_printf (" (hd%d", saved_drive - 0x80);
++      
++      if ((saved_partition & 0xFF0000) != 0xFF0000)
++      grub_printf (",%d", saved_partition >> 16);
++
++      if ((saved_partition & 0x00FF00) != 0x00FF00)
++      grub_printf (",%c", ((saved_partition >> 8) & 0xFF) + 'a');
++
++      grub_printf ("):");
++    }
++  else
++    {
++      /* Floppy disk drive.  */
++      grub_printf (" (fd%d):", saved_drive);
++    }
++
++  /* Print the filesystem information.  */
++  current_partition = saved_partition;
++  current_drive = saved_drive;
++  print_fsys_type ();
++}
++
++static int
++real_root_func (char *arg, int attempt_mount)
++{
++  int hdbias = 0;
++  char *biasptr;
++  char *next;
++
++  /* If ARG is empty, just print the current root device.  */
++  if (! *arg)
++    {
++      print_root_device ();
++      return 0;
++    }
++  
++  /* Call set_device to get the drive and the partition in ARG.  */
++  next = set_device (arg);
++  if (! next)
++    return 1;
++
++  /* Ignore ERR_FSYS_MOUNT.  */
++  if (attempt_mount)
++    {
++      if (! open_device () && errnum != ERR_FSYS_MOUNT)
++      return 1;
++    }
++  else
++    {
++      /* This is necessary, because the location of a partition table
++       must be set appropriately.  */
++      if (open_partition ())
++      {
++        set_bootdev (0);
++        if (errnum)
++          return 1;
++      }
++    }
++  
++  /* Clear ERRNUM.  */
++  errnum = 0;
++  saved_partition = current_partition;
++  saved_drive = current_drive;
++
++  if (attempt_mount)
++    {
++      /* BSD and chainloading evil hacks !!  */
++      biasptr = skip_to (0, next);
++      safe_parse_maxint (&biasptr, &hdbias);
++      errnum = 0;
++      bootdev = set_bootdev (hdbias);
++      if (errnum)
++      return 1;
++      
++      /* Print the type of the filesystem.  */
++      print_fsys_type ();
++    }
++  
++  return 0;
++}
++
++static int
++root_func (char *arg, int flags)
++{
++  return real_root_func (arg, 1);
++}
++
++static struct builtin builtin_root =
++{
++  "root",
++  root_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "root [DEVICE [HDBIAS]]",
++  "Set the current \"root device\" to the device DEVICE, then"
++  " attempt to mount it to get the partition size (for passing the"
++  " partition descriptor in `ES:ESI', used by some chain-loaded"
++  " bootloaders), the BSD drive-type (for booting BSD kernels using"
++  " their native boot format), and correctly determine "
++  " the PC partition where a BSD sub-partition is located. The"
++  " optional HDBIAS parameter is a number to tell a BSD kernel"
++  " how many BIOS drive numbers are on controllers before the current"
++  " one. For example, if there is an IDE disk and a SCSI disk, and your"
++  " FreeBSD root partition is on the SCSI disk, then use a `1' for HDBIAS."
++};
++
++\f
++/* rootnoverify */
++static int
++rootnoverify_func (char *arg, int flags)
++{
++  return real_root_func (arg, 0);
++}
++
++static struct builtin builtin_rootnoverify =
++{
++  "rootnoverify",
++  rootnoverify_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "rootnoverify [DEVICE [HDBIAS]]",
++  "Similar to `root', but don't attempt to mount the partition. This"
++  " is useful for when an OS is outside of the area of the disk that"
++  " GRUB can read, but setting the correct root device is still"
++  " desired. Note that the items mentioned in `root' which"
++  " derived from attempting the mount will NOT work correctly."
++};
++
++\f
++/* savedefault */
++static int
++savedefault_func (char *arg, int flags)
++{
++#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL)
++  unsigned long tmp_drive = saved_drive;
++  unsigned long tmp_partition = saved_partition;
++  char *default_file = (char *) DEFAULT_FILE_BUF;
++  char buf[10];
++  char sect[SECTOR_SIZE];
++  int entryno;
++  int sector_count = 0;
++  int saved_sectors[2];
++  int saved_offsets[2];
++  int saved_lengths[2];
++
++  /* Save sector information about at most two sectors.  */
++  auto void disk_read_savesect_func (int sector, int offset, int length);
++  void disk_read_savesect_func (int sector, int offset, int length)
++    {
++      if (sector_count < 2)
++      {
++        saved_sectors[sector_count] = sector;
++        saved_offsets[sector_count] = offset;
++        saved_lengths[sector_count] = length;
++      }
++      sector_count++;
++    }
++  
++  /* This command is only useful when you boot an entry from the menu
++     interface.  */
++  if (! (flags & BUILTIN_SCRIPT))
++    {
++      errnum = ERR_UNRECOGNIZED;
++      return 1;
++    }
++
++  /* Determine a saved entry number.  */
++  if (*arg)
++    {
++      if (grub_memcmp (arg, "fallback", sizeof ("fallback") - 1) == 0)
++      {
++        int i;
++        int index = 0;
++        
++        for (i = 0; i < MAX_FALLBACK_ENTRIES; i++)
++          {
++            if (fallback_entries[i] < 0)
++              break;
++            if (fallback_entries[i] == current_entryno)
++              {
++                index = i + 1;
++                break;
++              }
++          }
++        
++        if (index >= MAX_FALLBACK_ENTRIES || fallback_entries[index] < 0)
++          {
++            /* This is the last.  */
++            errnum = ERR_BAD_ARGUMENT;
++            return 1;
++          }
++
++        entryno = fallback_entries[index];
++      }
++      else if (! safe_parse_maxint (&arg, &entryno))
++      return 1;
++    }
++  else
++    entryno = current_entryno;
++
++  /* Open the default file.  */
++  saved_drive = boot_drive;
++  saved_partition = install_partition;
++  if (grub_open (default_file))
++    {
++      int len;
++      
++      disk_read_hook = disk_read_savesect_func;
++      len = grub_read (buf, sizeof (buf));
++      disk_read_hook = 0;
++      grub_close ();
++      
++      if (len != sizeof (buf))
++      {
++        /* This is too small. Do not modify the file manually, please!  */
++        errnum = ERR_READ;
++        goto fail;
++      }
++
++      if (sector_count > 2)
++      {
++        /* Is this possible?! Too fragmented!  */
++        errnum = ERR_FSYS_CORRUPT;
++        goto fail;
++      }
++      
++      /* Set up a string to be written.  */
++      grub_memset (buf, '\n', sizeof (buf));
++      grub_sprintf (buf, "%d", entryno);
++      
++      if (saved_lengths[0] < sizeof (buf))
++      {
++        /* The file is anchored to another file and the first few bytes
++           are spanned in two sectors. Uggh...  */
++        if (! rawread (current_drive, saved_sectors[0], 0, SECTOR_SIZE,
++                       sect))
++          goto fail;
++        grub_memmove (sect + saved_offsets[0], buf, saved_lengths[0]);
++        if (! rawwrite (current_drive, saved_sectors[0], sect))
++          goto fail;
++
++        if (! rawread (current_drive, saved_sectors[1], 0, SECTOR_SIZE,
++                       sect))
++          goto fail;
++        grub_memmove (sect + saved_offsets[1],
++                      buf + saved_lengths[0],
++                      sizeof (buf) - saved_lengths[0]);
++        if (! rawwrite (current_drive, saved_sectors[1], sect))
++          goto fail;
++      }
++      else
++      {
++        /* This is a simple case. It fits into a single sector.  */
++        if (! rawread (current_drive, saved_sectors[0], 0, SECTOR_SIZE,
++                       sect))
++          goto fail;
++        grub_memmove (sect + saved_offsets[0], buf, sizeof (buf));
++        if (! rawwrite (current_drive, saved_sectors[0], sect))
++          goto fail;
++      }
++
++      /* Clear the cache.  */
++      buf_track = -1;
++    }
++
++ fail:
++  saved_drive = tmp_drive;
++  saved_partition = tmp_partition;
++  return errnum;
++#else /* ! SUPPORT_DISKLESS && ! GRUB_UTIL */
++  errnum = ERR_UNRECOGNIZED;
++  return 1;
++#endif /* ! SUPPORT_DISKLESS && ! GRUB_UTIL */
++}
++
++static struct builtin builtin_savedefault =
++{
++  "savedefault",
++  savedefault_func,
++  BUILTIN_CMDLINE,
++  "savedefault [NUM | `fallback']",
++  "Save the current entry as the default boot entry if no argument is"
++  " specified. If a number is specified, this number is saved. If"
++  " `fallback' is used, next fallback entry is saved."
++};
++
++\f
++#ifdef SUPPORT_SERIAL
++/* serial */
++static int
++serial_func (char *arg, int flags)
++{
++  unsigned short port = serial_hw_get_port (0);
++  unsigned int speed = 9600;
++  int word_len = UART_8BITS_WORD;
++  int parity = UART_NO_PARITY;
++  int stop_bit_len = UART_1_STOP_BIT;
++
++  /* Process GNU-style long options.
++     FIXME: We should implement a getopt-like function, to avoid
++     duplications.  */
++  while (1)
++    {
++      if (grub_memcmp (arg, "--unit=", sizeof ("--unit=") - 1) == 0)
++      {
++        char *p = arg + sizeof ("--unit=") - 1;
++        int unit;
++        
++        if (! safe_parse_maxint (&p, &unit))
++          return 1;
++        
++        if (unit < 0 || unit > 3)
++          {
++            errnum = ERR_DEV_VALUES;
++            return 1;
++          }
++
++        port = serial_hw_get_port (unit);
++      }
++      else if (grub_memcmp (arg, "--speed=", sizeof ("--speed=") - 1) == 0)
++      {
++        char *p = arg + sizeof ("--speed=") - 1;
++        int num;
++        
++        if (! safe_parse_maxint (&p, &num))
++          return 1;
++
++        speed = (unsigned int) num;
++      }
++      else if (grub_memcmp (arg, "--port=", sizeof ("--port=") - 1) == 0)
++      {
++        char *p = arg + sizeof ("--port=") - 1;
++        int num;
++        
++        if (! safe_parse_maxint (&p, &num))
++          return 1;
++
++        port = (unsigned short) num;
++      }
++      else if (grub_memcmp (arg, "--word=", sizeof ("--word=") - 1) == 0)
++      {
++        char *p = arg + sizeof ("--word=") - 1;
++        int len;
++        
++        if (! safe_parse_maxint (&p, &len))
++          return 1;
++
++        switch (len)
++          {
++          case 5: word_len = UART_5BITS_WORD; break;
++          case 6: word_len = UART_6BITS_WORD; break;
++          case 7: word_len = UART_7BITS_WORD; break;
++          case 8: word_len = UART_8BITS_WORD; break;
++          default:
++            errnum = ERR_BAD_ARGUMENT;
++            return 1;
++          }
++      }
++      else if (grub_memcmp (arg, "--stop=", sizeof ("--stop=") - 1) == 0)
++      {
++        char *p = arg + sizeof ("--stop=") - 1;
++        int len;
++        
++        if (! safe_parse_maxint (&p, &len))
++          return 1;
++
++        switch (len)
++          {
++          case 1: stop_bit_len = UART_1_STOP_BIT; break;
++          case 2: stop_bit_len = UART_2_STOP_BITS; break;
++          default:
++            errnum = ERR_BAD_ARGUMENT;
++            return 1;
++          }
++      }
++      else if (grub_memcmp (arg, "--parity=", sizeof ("--parity=") - 1) == 0)
++      {
++        char *p = arg + sizeof ("--parity=") - 1;
++
++        if (grub_memcmp (p, "no", sizeof ("no") - 1) == 0)
++          parity = UART_NO_PARITY;
++        else if (grub_memcmp (p, "odd", sizeof ("odd") - 1) == 0)
++          parity = UART_ODD_PARITY;
++        else if (grub_memcmp (p, "even", sizeof ("even") - 1) == 0)
++          parity = UART_EVEN_PARITY;
++        else
++          {
++            errnum = ERR_BAD_ARGUMENT;
++            return 1;
++          }
++      }
++# ifdef GRUB_UTIL
++      /* In the grub shell, don't use any port number but open a tty
++       device instead.  */
++      else if (grub_memcmp (arg, "--device=", sizeof ("--device=") - 1) == 0)
++      {
++        char *p = arg + sizeof ("--device=") - 1;
++        char dev[256];        /* XXX */
++        char *q = dev;
++        
++        while (*p && ! grub_isspace (*p))
++          *q++ = *p++;
++        
++        *q = 0;
++        serial_set_device (dev);
++      }
++# endif /* GRUB_UTIL */
++      else
++      break;
++
++      arg = skip_to (0, arg);
++    }
++
++  /* Initialize the serial unit.  */
++  if (! serial_hw_init (port, speed, word_len, parity, stop_bit_len))
++    {
++      errnum = ERR_BAD_ARGUMENT;
++      return 1;
++    }
++  
++  return 0;
++}
++
++static struct builtin builtin_serial =
++{
++  "serial",
++  serial_func,
++  BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "serial [--unit=UNIT] [--port=PORT] [--speed=SPEED] [--word=WORD] [--parity=PARITY] [--stop=STOP] [--device=DEV]",
++  "Initialize a serial device. UNIT is a digit that specifies which serial"
++  " device is used (e.g. 0 == COM1). If you need to specify the port number,"
++  " set it by --port. SPEED is the DTE-DTE speed. WORD is the word length,"
++  " PARITY is the type of parity, which is one of `no', `odd' and `even'."
++  " STOP is the length of stop bit(s). The option --device can be used only"
++  " in the grub shell, which specifies the file name of a tty device. The"
++  " default values are COM1, 9600, 8N1."
++};
++#endif /* SUPPORT_SERIAL */
++
++\f
++/* setkey */
++struct keysym
++{
++  char *unshifted_name;                       /* the name in unshifted state */
++  char *shifted_name;                 /* the name in shifted state */
++  unsigned char unshifted_ascii;      /* the ascii code in unshifted state */
++  unsigned char shifted_ascii;                /* the ascii code in shifted state */
++  unsigned char keycode;              /* keyboard scancode */
++};
++
++/* The table for key symbols. If the "shifted" member of an entry is
++   NULL, the entry does not have shifted state.  */
++static struct keysym keysym_table[] =
++{
++  {"escape",          0,              0x1b,   0,      0x01},
++  {"1",                       "exclam",       '1',    '!',    0x02},
++  {"2",                       "at",           '2',    '@',    0x03},
++  {"3",                       "numbersign",   '3',    '#',    0x04},
++  {"4",                       "dollar",       '4',    '$',    0x05},
++  {"5",                       "percent",      '5',    '%',    0x06},
++  {"6",                       "caret",        '6',    '^',    0x07},
++  {"7",                       "ampersand",    '7',    '&',    0x08},
++  {"8",                       "asterisk",     '8',    '*',    0x09},
++  {"9",                       "parenleft",    '9',    '(',    0x0a},
++  {"0",                       "parenright",   '0',    ')',    0x0b},
++  {"minus",           "underscore",   '-',    '_',    0x0c},
++  {"equal",           "plus",         '=',    '+',    0x0d},
++  {"backspace",               0,              '\b',   0,      0x0e},
++  {"tab",             0,              '\t',   0,      0x0f},
++  {"q",                       "Q",            'q',    'Q',    0x10},
++  {"w",                       "W",            'w',    'W',    0x11},
++  {"e",                       "E",            'e',    'E',    0x12},
++  {"r",                       "R",            'r',    'R',    0x13},
++  {"t",                       "T",            't',    'T',    0x14},
++  {"y",                       "Y",            'y',    'Y',    0x15},
++  {"u",                       "U",            'u',    'U',    0x16},
++  {"i",                       "I",            'i',    'I',    0x17},
++  {"o",                       "O",            'o',    'O',    0x18},
++  {"p",                       "P",            'p',    'P',    0x19},
++  {"bracketleft",     "braceleft",    '[',    '{',    0x1a},
++  {"bracketright",    "braceright",   ']',    '}',    0x1b},
++  {"enter",           0,              '\n',   0,      0x1c},
++  {"control",         0,              0,      0,      0x1d},
++  {"a",                       "A",            'a',    'A',    0x1e},
++  {"s",                       "S",            's',    'S',    0x1f},
++  {"d",                       "D",            'd',    'D',    0x20},
++  {"f",                       "F",            'f',    'F',    0x21},
++  {"g",                       "G",            'g',    'G',    0x22},
++  {"h",                       "H",            'h',    'H',    0x23},
++  {"j",                       "J",            'j',    'J',    0x24},
++  {"k",                       "K",            'k',    'K',    0x25},
++  {"l",                       "L",            'l',    'L',    0x26},
++  {"semicolon",               "colon",        ';',    ':',    0x27},
++  {"quote",           "doublequote",  '\'',   '"',    0x28},
++  {"backquote",               "tilde",        '`',    '~',    0x29},
++  {"shift",           0,              0,      0,      0x2a},
++  {"backslash",               "bar",          '\\',   '|',    0x2b},
++  {"z",                       "Z",            'z',    'Z',    0x2c},
++  {"x",                       "X",            'x',    'X',    0x2d},
++  {"c",                       "C",            'c',    'C',    0x2e},
++  {"v",                       "V",            'v',    'V',    0x2f},
++  {"b",                       "B",            'b',    'B',    0x30},
++  {"n",                       "N",            'n',    'N',    0x31},
++  {"m",                       "M",            'm',    'M',    0x32},
++  {"comma",           "less",         ',',    '<',    0x33},
++  {"period",          "greater",      '.',    '>',    0x34},
++  {"slash",           "question",     '/',    '?',    0x35},
++  {"alt",             0,              0,      0,      0x38},
++  {"space",           0,              ' ',    0,      0x39},
++  {"capslock",                0,              0,      0,      0x3a},
++  {"F1",              0,              0,      0,      0x3b},
++  {"F2",              0,              0,      0,      0x3c},
++  {"F3",              0,              0,      0,      0x3d},
++  {"F4",              0,              0,      0,      0x3e},
++  {"F5",              0,              0,      0,      0x3f},
++  {"F6",              0,              0,      0,      0x40},
++  {"F7",              0,              0,      0,      0x41},
++  {"F8",              0,              0,      0,      0x42},
++  {"F9",              0,              0,      0,      0x43},
++  {"F10",             0,              0,      0,      0x44},
++  /* Caution: do not add NumLock here! we cannot deal with it properly.  */
++  {"delete",          0,              0x7f,   0,      0x53}
++};
++
++static int
++setkey_func (char *arg, int flags)
++{
++  char *to_key, *from_key;
++  int to_code, from_code;
++  int map_in_interrupt = 0;
++  
++  auto int find_key_code (char *key);
++  auto int find_ascii_code (char *key);
++  
++  auto int find_key_code (char *key)
++    {
++      int i;
++
++      for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++)
++      {
++        if (keysym_table[i].unshifted_name &&
++            grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
++          return keysym_table[i].keycode;
++        else if (keysym_table[i].shifted_name &&
++                 grub_strcmp (key, keysym_table[i].shifted_name) == 0)
++          return keysym_table[i].keycode;
++      }
++      
++      return 0;
++    }
++  
++  auto int find_ascii_code (char *key)
++    {
++      int i;
++      
++      for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++)
++      {
++        if (keysym_table[i].unshifted_name &&
++            grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
++          return keysym_table[i].unshifted_ascii;
++        else if (keysym_table[i].shifted_name &&
++                 grub_strcmp (key, keysym_table[i].shifted_name) == 0)
++          return keysym_table[i].shifted_ascii;
++      }
++      
++      return 0;
++    }
++  
++  to_key = arg;
++  from_key = skip_to (0, to_key);
++
++  if (! *to_key)
++    {
++      /* If the user specifies no argument, reset the key mappings.  */
++      grub_memset (bios_key_map, 0, KEY_MAP_SIZE * sizeof (unsigned short));
++      grub_memset (ascii_key_map, 0, KEY_MAP_SIZE * sizeof (unsigned short));
++
++      return 0;
++    }
++  else if (! *from_key)
++    {
++      /* The user must specify two arguments or zero argument.  */
++      errnum = ERR_BAD_ARGUMENT;
++      return 1;
++    }
++  
++  nul_terminate (to_key);
++  nul_terminate (from_key);
++  
++  to_code = find_ascii_code (to_key);
++  from_code = find_ascii_code (from_key);
++  if (! to_code || ! from_code)
++    {
++      map_in_interrupt = 1;
++      to_code = find_key_code (to_key);
++      from_code = find_key_code (from_key);
++      if (! to_code || ! from_code)
++      {
++        errnum = ERR_BAD_ARGUMENT;
++        return 1;
++      }
++    }
++  
++  if (map_in_interrupt)
++    {
++      int i;
++      
++      /* Find an empty slot.  */
++      for (i = 0; i < KEY_MAP_SIZE; i++)
++      {
++        if ((bios_key_map[i] & 0xff) == from_code)
++          /* Perhaps the user wants to overwrite the map.  */
++          break;
++        
++        if (! bios_key_map[i])
++          break;
++      }
++      
++      if (i == KEY_MAP_SIZE)
++      {
++        errnum = ERR_WONT_FIT;
++        return 1;
++      }
++      
++      if (to_code == from_code)
++      /* If TO is equal to FROM, delete the entry.  */
++      grub_memmove ((char *) &bios_key_map[i],
++                    (char *) &bios_key_map[i + 1],
++                    sizeof (unsigned short) * (KEY_MAP_SIZE - i));
++      else
++      bios_key_map[i] = (to_code << 8) | from_code;
++      
++      /* Ugly but should work.  */
++      unset_int15_handler ();
++      set_int15_handler ();
++    }
++  else
++    {
++      int i;
++      
++      /* Find an empty slot.  */
++      for (i = 0; i < KEY_MAP_SIZE; i++)
++      {
++        if ((ascii_key_map[i] & 0xff) == from_code)
++          /* Perhaps the user wants to overwrite the map.  */
++          break;
++        
++        if (! ascii_key_map[i])
++          break;
++      }
++      
++      if (i == KEY_MAP_SIZE)
++      {
++        errnum = ERR_WONT_FIT;
++        return 1;
++      }
++      
++      if (to_code == from_code)
++      /* If TO is equal to FROM, delete the entry.  */
++      grub_memmove ((char *) &ascii_key_map[i],
++                    (char *) &ascii_key_map[i + 1],
++                    sizeof (unsigned short) * (KEY_MAP_SIZE - i));
++      else
++      ascii_key_map[i] = (to_code << 8) | from_code;
++    }
++      
++  return 0;
++}
++
++static struct builtin builtin_setkey =
++{
++  "setkey",
++  setkey_func,
++  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
++  "setkey [TO_KEY FROM_KEY]",
++  "Change the keyboard map. The key FROM_KEY is mapped to the key TO_KEY."
++  " A key must be an alphabet, a digit, or one of these: escape, exclam,"
++  " at, numbersign, dollar, percent, caret, ampersand, asterisk, parenleft,"
++  " parenright, minus, underscore, equal, plus, backspace, tab, bracketleft,"
++  " braceleft, bracketright, braceright, enter, control, semicolon, colon,"
++  " quote, doublequote, backquote, tilde, shift, backslash, bar, comma,"
++  " less, period, greater, slash, question, alt, space, capslock, FX (X"
++  " is a digit), and delete. If no argument is specified, reset key"
++  " mappings."
++};
++
++\f
++/* setup */
++static int
++setup_func (char *arg, int flags)
++{
++  /* Point to the string of the installed drive/partition.  */
++  char *install_ptr;
++  /* Point to the string of the drive/parition where the GRUB images
++     reside.  */
++  char *image_ptr;
++  unsigned long installed_drive, installed_partition;
++  unsigned long image_drive, image_partition;
++  unsigned long tmp_drive, tmp_partition;
++  char stage1[64];
++  char stage2[64];
++  char config_filename[64];
++  char real_config_filename[64];
++  char cmd_arg[256];
++  char device[16];
++  char *buffer = (char *) RAW_ADDR (0x100000);
++  int is_force_lba = 0;
++  char *stage2_arg = 0;
++  char *prefix = 0;
++
++  auto int check_file (char *file);
++  auto void sprint_device (int drive, int partition);
++  auto int embed_stage1_5 (char * stage1_5, int drive, int partition);
++  
++  /* Check if the file FILE exists like Autoconf.  */
++  int check_file (char *file)
++    {
++      int ret;
++      
++      grub_printf (" Checking if \"%s\" exists... ", file);
++      ret = grub_open (file);
++      if (ret)
++      {
++        grub_close ();
++        grub_printf ("yes\n");
++      }
++      else
++      grub_printf ("no\n");
++
++      return ret;
++    }
++  
++  /* Construct a device name in DEVICE.  */
++  void sprint_device (int drive, int partition)
++    {
++      grub_sprintf (device, "(%cd%d",
++                  (drive & 0x80) ? 'h' : 'f',
++                  drive & ~0x80);
++      if ((partition & 0xFF0000) != 0xFF0000)
++      {
++        char tmp[16];
++        grub_sprintf (tmp, ",%d", (partition >> 16) & 0xFF);
++        grub_strncat (device, tmp, 256);
++      }
++      if ((partition & 0x00FF00) != 0x00FF00)
++      {
++        char tmp[16];
++        grub_sprintf (tmp, ",%c", 'a' + ((partition >> 8) & 0xFF));
++        grub_strncat (device, tmp, 256);
++      }
++      grub_strncat (device, ")", 256);
++    }
++  
++  int embed_stage1_5 (char *stage1_5, int drive, int partition)
++    {
++      /* We install GRUB into the MBR, so try to embed the
++       Stage 1.5 in the sectors right after the MBR.  */
++      sprint_device (drive, partition);
++      grub_sprintf (cmd_arg, "%s %s", stage1_5, device);
++            
++      /* Notify what will be run.  */
++      grub_printf (" Running \"embed %s\"... ", cmd_arg);
++      
++      embed_func (cmd_arg, flags);
++      if (! errnum)
++      {
++        /* Construct the blocklist representation.  */
++        grub_sprintf (buffer, "%s%s", device, embed_info);
++        grub_printf ("succeeded\n");
++        return 1;
++      }
++      else
++      {
++        grub_printf ("failed (this is not fatal)\n");
++        return 0;
++      }
++    }
++        
++  struct stage1_5_map {
++    char *fsys;
++    char *name;
++  };
++  struct stage1_5_map stage1_5_map[] =
++  {
++    {"ext2fs",   "/e2fs_stage1_5"},
++    {"fat",      "/fat_stage1_5"},
++    {"ufs2",     "/ufs2_stage1_5"},
++    {"ffs",      "/ffs_stage1_5"},
++    {"iso9660",  "/iso9660_stage1_5"},
++    {"jfs",      "/jfs_stage1_5"},
++    {"minix",    "/minix_stage1_5"},
++    {"reiserfs", "/reiserfs_stage1_5"},
++    {"vstafs",   "/vstafs_stage1_5"},
++    {"xfs",      "/xfs_stage1_5"}
++  };
++
++  tmp_drive = saved_drive;
++  tmp_partition = saved_partition;
++
++  /* Check if the user specifies --force-lba.  */
++  while (1)
++    {
++      if (grub_memcmp ("--force-lba", arg, sizeof ("--force-lba") - 1) == 0)
++      {
++        is_force_lba = 1;
++        arg = skip_to (0, arg);
++      }
++      else if (grub_memcmp ("--prefix=", arg, sizeof ("--prefix=") - 1) == 0)
++      {
++        prefix = arg + sizeof ("--prefix=") - 1;
++        arg = skip_to (0, arg);
++        nul_terminate (prefix);
++      }
++#ifdef GRUB_UTIL
++      else if (grub_memcmp ("--stage2=", arg, sizeof ("--stage2=") - 1) == 0)
++      {
++        stage2_arg = arg;
++        arg = skip_to (0, arg);
++        nul_terminate (stage2_arg);
++      }
++#endif /* GRUB_UTIL */
++      else
++      break;
++    }
++  
++  install_ptr = arg;
++  image_ptr = skip_to (0, install_ptr);
++
++  /* Make sure that INSTALL_PTR is valid.  */
++  set_device (install_ptr);
++  if (errnum)
++    return 1;
++
++  installed_drive = current_drive;
++  installed_partition = current_partition;
++  
++  /* Mount the drive pointed by IMAGE_PTR.  */
++  if (*image_ptr)
++    {
++      /* If the drive/partition where the images reside is specified,
++       get the drive and the partition.  */
++      set_device (image_ptr);
++      if (errnum)
++      return 1;
++    }
++  else
++    {
++      /* If omitted, use SAVED_PARTITION and SAVED_DRIVE.  */
++      current_drive = saved_drive;
++      current_partition = saved_partition;
++    }
++
++  image_drive = saved_drive = current_drive;
++  image_partition = saved_partition = current_partition;
++
++  /* Open it.  */
++  if (! open_device ())
++    goto fail;
++
++  /* Check if stage1 exists. If the user doesn't specify the option
++     `--prefix', attempt /boot/grub and /grub.  */
++  /* NOTE: It is dangerous to run this command without `--prefix' in the
++     grub shell, since that affects `--stage2'.  */
++  if (! prefix)
++    {
++      prefix = "/boot/grub";
++      grub_sprintf (stage1, "%s%s", prefix, "/stage1");
++      if (! check_file (stage1))
++      {
++        errnum = ERR_NONE;
++        prefix = "/grub";
++        grub_sprintf (stage1, "%s%s", prefix, "/stage1");
++        if (! check_file (stage1))
++          goto fail;
++      }
++    }
++  else
++    {
++      grub_sprintf (stage1, "%s%s", prefix, "/stage1");
++      if (! check_file (stage1))
++      goto fail;
++    }
++
++  /* The prefix was determined.  */
++  grub_sprintf (stage2, "%s%s", prefix, "/stage2");
++  grub_sprintf (config_filename, "%s%s", prefix, "/menu.lst");
++  *real_config_filename = 0;
++
++  /* Check if stage2 exists.  */
++  if (! check_file (stage2))
++    goto fail;
++
++  {
++    char *fsys = fsys_table[fsys_type].name;
++    int i;
++    int size = sizeof (stage1_5_map) / sizeof (stage1_5_map[0]);
++    
++    /* Iterate finding the same filesystem name as FSYS.  */
++    for (i = 0; i < size; i++)
++      if (grub_strcmp (fsys, stage1_5_map[i].fsys) == 0)
++      {
++        /* OK, check if the Stage 1.5 exists.  */
++        char stage1_5[64];
++        
++        grub_sprintf (stage1_5, "%s%s", prefix, stage1_5_map[i].name);
++        if (check_file (stage1_5))
++          {
++            if (embed_stage1_5 (stage1_5, 
++                                  installed_drive, installed_partition)
++                || embed_stage1_5 (stage1_5, 
++                                   image_drive, image_partition))
++              {
++                grub_strcpy (real_config_filename, config_filename);
++                sprint_device (image_drive, image_partition);
++                grub_sprintf (config_filename, "%s%s", device, stage2);
++                grub_strcpy (stage2, buffer);
++              }
++          }
++        errnum = 0;
++        break;
++      }
++  }
++
++  /* Construct a string that is used by the command "install" as its
++     arguments.  */
++  sprint_device (installed_drive, installed_partition);
++  
++#if 1
++  /* Don't embed a drive number unnecessarily.  */
++  grub_sprintf (cmd_arg, "%s%s%s%s %s%s %s p %s %s",
++              is_force_lba? "--force-lba " : "",
++              stage2_arg? stage2_arg : "",
++              stage2_arg? " " : "",
++              stage1,
++              (installed_drive != image_drive) ? "d " : "",
++              device,
++              stage2,
++              config_filename,
++              real_config_filename);
++#else /* NOT USED */
++  /* This code was used, because we belived some BIOSes had a problem
++     that they didn't pass a booting drive correctly. It turned out,
++     however, stage1 could trash a booting drive when checking LBA support,
++     because some BIOSes modified the register %dx in INT 13H, AH=48H.
++     So it becamed unclear whether GRUB should use a pre-defined booting
++     drive or not. If the problem still exists, it would be necessary to
++     switch back to this code.  */
++  grub_sprintf (cmd_arg, "%s%s%s%s d %s %s p %s %s",
++              is_force_lba? "--force-lba " : "",
++              stage2_arg? stage2_arg : "",
++              stage2_arg? " " : "",
++              stage1,
++              device,
++              stage2,
++              config_filename,
++              real_config_filename);
++#endif /* NOT USED */
++  
++  /* Notify what will be run.  */
++  grub_printf (" Running \"install %s\"... ", cmd_arg);
++
++  /* Make sure that SAVED_DRIVE and SAVED_PARTITION are identical
++     with IMAGE_DRIVE and IMAGE_PARTITION, respectively.  */
++  saved_drive = image_drive;
++  saved_partition = image_partition;
++  
++  /* Run the command.  */
++  if (! install_func (cmd_arg, flags))
++    grub_printf ("succeeded\nDone.\n");
++  else
++    grub_printf ("failed\n");
++
++ fail:
++  saved_drive = tmp_drive;
++  saved_partition = tmp_partition;
++  return errnum;
++}
++
++static struct builtin builtin_setup =
++{
++  "setup",
++  setup_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "setup [--prefix=DIR] [--stage2=STAGE2_FILE] [--force-lba] INSTALL_DEVICE [IMAGE_DEVICE]",
++  "Set up the installation of GRUB automatically. This command uses"
++  " the more flexible command \"install\" in the backend and installs"
++  " GRUB into the device INSTALL_DEVICE. If IMAGE_DEVICE is specified,"
++  " then find the GRUB images in the device IMAGE_DEVICE, otherwise"
++  " use the current \"root device\", which can be set by the command"
++  " \"root\". If you know that your BIOS should support LBA but GRUB"
++  " doesn't work in LBA mode, specify the option `--force-lba'."
++  " If you install GRUB under the grub shell and you cannot unmount the"
++  " partition where GRUB images reside, specify the option `--stage2'"
++  " to tell GRUB the file name under your OS."
++};
++
++\f
++#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES)
++/* terminal */
++static int
++terminal_func (char *arg, int flags)
++{
++  /* The index of the default terminal in TERM_TABLE.  */
++  int default_term = -1;
++  struct term_entry *prev_term = current_term;
++  int to = -1;
++  int lines = 0;
++  int no_message = 0;
++  unsigned long term_flags = 0;
++  /* XXX: Assume less than 32 terminals.  */
++  unsigned long term_bitmap = 0;
++
++  /* Get GNU-style long options.  */
++  while (1)
++    {
++      if (grub_memcmp (arg, "--dumb", sizeof ("--dumb") - 1) == 0)
++      term_flags |= TERM_DUMB;
++      else if (grub_memcmp (arg, "--no-echo", sizeof ("--no-echo") - 1) == 0)
++      /* ``--no-echo'' implies ``--no-edit''.  */
++      term_flags |= (TERM_NO_ECHO | TERM_NO_EDIT);
++      else if (grub_memcmp (arg, "--no-edit", sizeof ("--no-edit") - 1) == 0)
++      term_flags |= TERM_NO_EDIT;
++      else if (grub_memcmp (arg, "--timeout=", sizeof ("--timeout=") - 1) == 0)
++      {
++        char *val = arg + sizeof ("--timeout=") - 1;
++        
++        if (! safe_parse_maxint (&val, &to))
++          return 1;
++      }
++      else if (grub_memcmp (arg, "--lines=", sizeof ("--lines=") - 1) == 0)
++      {
++        char *val = arg + sizeof ("--lines=") - 1;
++
++        if (! safe_parse_maxint (&val, &lines))
++          return 1;
++
++        /* Probably less than four is meaningless....  */
++        if (lines < 4)
++          {
++            errnum = ERR_BAD_ARGUMENT;
++            return 1;
++          }
++      }
++      else if (grub_memcmp (arg, "--silent", sizeof ("--silent") - 1) == 0)
++      no_message = 1;
++      else
++      break;
++
++      arg = skip_to (0, arg);
++    }
++  
++  /* If no argument is specified, show current setting.  */
++  if (! *arg)
++    {
++      grub_printf ("%s%s%s%s\n",
++                 current_term->name,
++                 current_term->flags & TERM_DUMB ? " (dumb)" : "",
++                 current_term->flags & TERM_NO_EDIT ? " (no edit)" : "",
++                 current_term->flags & TERM_NO_ECHO ? " (no echo)" : "");
++      return 0;
++    }
++
++  while (*arg)
++    {
++      int i;
++      char *next = skip_to (0, arg);
++      
++      nul_terminate (arg);
++
++      for (i = 0; term_table[i].name; i++)
++      {
++        if (grub_strcmp (arg, term_table[i].name) == 0)
++          {
++            if (term_table[i].flags & TERM_NEED_INIT)
++              {
++                errnum = ERR_DEV_NEED_INIT;
++                return 1;
++              }
++            
++            if (default_term < 0)
++              default_term = i;
++
++            term_bitmap |= (1 << i);
++            break;
++          }
++      }
++
++      if (! term_table[i].name)
++      {
++        errnum = ERR_BAD_ARGUMENT;
++        return 1;
++      }
++
++      arg = next;
++    }
++
++  /* If multiple terminals are specified, wait until the user pushes any
++     key on one of the terminals.  */
++  if (term_bitmap & ~(1 << default_term))
++    {
++      int time1, time2 = -1;
++
++      /* XXX: Disable the pager.  */
++      count_lines = -1;
++      
++      /* Get current time.  */
++      while ((time1 = getrtsecs ()) == 0xFF)
++      ;
++
++      /* Wait for a key input.  */
++      while (to)
++      {
++        int i;
++
++        for (i = 0; term_table[i].name; i++)
++          {
++            if (term_bitmap & (1 << i))
++              {
++                if (term_table[i].checkkey () >= 0)
++                  {
++                    (void) term_table[i].getkey ();
++                    default_term = i;
++                    
++                    goto end;
++                  }
++              }
++          }
++        
++        /* Prompt the user, once per sec.  */
++        if ((time1 = getrtsecs ()) != time2 && time1 != 0xFF)
++          {
++            if (! no_message)
++              {
++                /* Need to set CURRENT_TERM to each of selected
++                   terminals.  */
++                for (i = 0; term_table[i].name; i++)
++                  if (term_bitmap & (1 << i))
++                    {
++                      current_term = term_table + i;
++                      grub_printf ("\rPress any key to continue.\n");
++                    }
++                
++                /* Restore CURRENT_TERM.  */
++                current_term = prev_term;
++              }
++            
++            time2 = time1;
++            if (to > 0)
++              to--;
++          }
++      }
++    }
++
++ end:
++  current_term = term_table + default_term;
++  current_term->flags = term_flags;
++  
++  if (lines)
++    max_lines = lines;
++  else
++    /* 24 would be a good default value.  */
++    max_lines = 24;
++  
++  /* If the interface is currently the command-line,
++     restart it to repaint the screen.  */
++  if (current_term != prev_term && (flags & BUILTIN_CMDLINE))
++    grub_longjmp (restart_cmdline_env, 0);
++  
++  return 0;
++}
++
++static struct builtin builtin_terminal =
++{
++  "terminal",
++  terminal_func,
++  BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules]",
++  "Select a terminal. When multiple terminals are specified, wait until"
++  " you push any key to continue. If both console and serial are specified,"
++  " the terminal to which you input a key first will be selected. If no"
++  " argument is specified, print current setting. The option --dumb"
++  " specifies that your terminal is dumb, otherwise, vt100-compatibility"
++  " is assumed. If you specify --no-echo, input characters won't be echoed."
++  " If you specify --no-edit, the BASH-like editing feature will be disabled."
++  " If --timeout is present, this command will wait at most for SECS"
++  " seconds. The option --lines specifies the maximum number of lines."
++  " The option --silent is used to suppress messages."
++};
++#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */
++
++\f
++#ifdef SUPPORT_SERIAL
++static int
++terminfo_func (char *arg, int flags)
++{
++  struct terminfo term;
++
++  if (*arg)
++    {
++      struct
++      {
++      const char *name;
++      char *var;
++      }
++      options[] =
++      {
++        {"--name=", term.name},
++        {"--cursor-address=", term.cursor_address},
++        {"--clear-screen=", term.clear_screen},
++        {"--enter-standout-mode=", term.enter_standout_mode},
++        {"--exit-standout-mode=", term.exit_standout_mode}
++      };
++
++      grub_memset (&term, 0, sizeof (term));
++      
++      while (*arg)
++      {
++        int i;
++        char *next = skip_to (0, arg);
++            
++        nul_terminate (arg);
++        
++        for (i = 0; i < sizeof (options) / sizeof (options[0]); i++)
++          {
++            const char *name = options[i].name;
++            int len = grub_strlen (name);
++            
++            if (! grub_memcmp (arg, name, len))
++              {
++                grub_strcpy (options[i].var, ti_unescape_string (arg + len));
++                break;
++              }
++          }
++
++        if (i == sizeof (options) / sizeof (options[0]))
++          {
++            errnum = ERR_BAD_ARGUMENT;
++            return errnum;
++          }
++
++        arg = next;
++      }
++
++      if (term.name[0] == 0 || term.cursor_address[0] == 0)
++      {
++        errnum = ERR_BAD_ARGUMENT;
++        return errnum;
++      }
++
++      ti_set_term (&term);
++    }
++  else
++    {
++      /* No option specifies printing out current settings.  */
++      ti_get_term (&term);
++
++      grub_printf ("name=%s\n",
++                 ti_escape_string (term.name));
++      grub_printf ("cursor_address=%s\n",
++                 ti_escape_string (term.cursor_address));
++      grub_printf ("clear_screen=%s\n",
++                 ti_escape_string (term.clear_screen));
++      grub_printf ("enter_standout_mode=%s\n",
++                 ti_escape_string (term.enter_standout_mode));
++      grub_printf ("exit_standout_mode=%s\n",
++                 ti_escape_string (term.exit_standout_mode));
++    }
++
++  return 0;
++}
++
++static struct builtin builtin_terminfo =
++{
++  "terminfo",
++  terminfo_func,
++  BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "terminfo [--name=NAME --cursor-address=SEQ [--clear-screen=SEQ]"
++  " [--enter-standout-mode=SEQ] [--exit-standout-mode=SEQ]]",
++  
++  "Define the capabilities of your terminal. Use this command to"
++  " define escape sequences, if it is not vt100-compatible."
++  " You may use \\e for ESC and ^X for a control character."
++  " If no option is specified, the current settings are printed."
++};
++#endif /* SUPPORT_SERIAL */
++        
++\f
++/* testload */
++static int
++testload_func (char *arg, int flags)
++{
++  int i;
++
++  kernel_type = KERNEL_TYPE_NONE;
++
++  if (! grub_open (arg))
++    return 1;
++
++  disk_read_hook = disk_read_print_func;
++
++  /* Perform filesystem test on the specified file.  */
++  /* Read whole file first. */
++  grub_printf ("Whole file: ");
++
++  grub_read ((char *) RAW_ADDR (0x100000), -1);
++
++  /* Now compare two sections of the file read differently.  */
++
++  for (i = 0; i < 0x10ac0; i++)
++    {
++      *((unsigned char *) RAW_ADDR (0x200000 + i)) = 0;
++      *((unsigned char *) RAW_ADDR (0x300000 + i)) = 1;
++    }
++
++  /* First partial read.  */
++  grub_printf ("\nPartial read 1: ");
++
++  grub_seek (0);
++  grub_read ((char *) RAW_ADDR (0x200000), 0x7);
++  grub_read ((char *) RAW_ADDR (0x200007), 0x100);
++  grub_read ((char *) RAW_ADDR (0x200107), 0x10);
++  grub_read ((char *) RAW_ADDR (0x200117), 0x999);
++  grub_read ((char *) RAW_ADDR (0x200ab0), 0x10);
++  grub_read ((char *) RAW_ADDR (0x200ac0), 0x10000);
++
++  /* Second partial read.  */
++  grub_printf ("\nPartial read 2: ");
++
++  grub_seek (0);
++  grub_read ((char *) RAW_ADDR (0x300000), 0x10000);
++  grub_read ((char *) RAW_ADDR (0x310000), 0x10);
++  grub_read ((char *) RAW_ADDR (0x310010), 0x7);
++  grub_read ((char *) RAW_ADDR (0x310017), 0x10);
++  grub_read ((char *) RAW_ADDR (0x310027), 0x999);
++  grub_read ((char *) RAW_ADDR (0x3109c0), 0x100);
++
++  grub_printf ("\nHeader1 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n",
++             *((int *) RAW_ADDR (0x200000)),
++             *((int *) RAW_ADDR (0x200004)),
++             *((int *) RAW_ADDR (0x200008)),
++             *((int *) RAW_ADDR (0x20000c)));
++
++  grub_printf ("Header2 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n",
++             *((int *) RAW_ADDR (0x300000)),
++             *((int *) RAW_ADDR (0x300004)),
++             *((int *) RAW_ADDR (0x300008)),
++             *((int *) RAW_ADDR (0x30000c)));
++
++  for (i = 0; i < 0x10ac0; i++)
++    if (*((unsigned char *) RAW_ADDR (0x200000 + i))
++      != *((unsigned char *) RAW_ADDR (0x300000 + i)))
++      break;
++
++  grub_printf ("Max is 0x10ac0: i=0x%x, filepos=0x%x\n", i, filepos);
++  disk_read_hook = 0;
++  grub_close ();
++  return 0;
++}
++
++static struct builtin builtin_testload =
++{
++  "testload",
++  testload_func,
++  BUILTIN_CMDLINE,
++  "testload FILE",
++  "Read the entire contents of FILE in several different ways and"
++  " compares them, to test the filesystem code. The output is somewhat"
++  " cryptic, but if no errors are reported and the final `i=X,"
++  " filepos=Y' reading has X and Y equal, then it is definitely"
++  " consistent, and very likely works correctly subject to a"
++  " consistent offset error. If this test succeeds, then a good next"
++  " step is to try loading a kernel."
++};
++
++\f
++/* testvbe MODE */
++static int
++testvbe_func (char *arg, int flags)
++{
++  int mode_number;
++  struct vbe_controller controller;
++  struct vbe_mode mode;
++  
++  if (! *arg)
++    {
++      errnum = ERR_BAD_ARGUMENT;
++      return 1;
++    }
++
++  if (! safe_parse_maxint (&arg, &mode_number))
++    return 1;
++
++  /* Preset `VBE2'.  */
++  grub_memmove (controller.signature, "VBE2", 4);
++
++  /* Detect VBE BIOS.  */
++  if (get_vbe_controller_info (&controller) != 0x004F)
++    {
++      grub_printf (" VBE BIOS is not present.\n");
++      return 0;
++    }
++  
++  if (controller.version < 0x0200)
++    {
++      grub_printf (" VBE version %d.%d is not supported.\n",
++                 (int) (controller.version >> 8),
++                 (int) (controller.version & 0xFF));
++      return 0;
++    }
++
++  if (get_vbe_mode_info (mode_number, &mode) != 0x004F
++      || (mode.mode_attributes & 0x0091) != 0x0091)
++    {
++      grub_printf (" Mode 0x%x is not supported.\n", mode_number);
++      return 0;
++    }
++
++  /* Now trip to the graphics mode.  */
++  if (set_vbe_mode (mode_number | (1 << 14)) != 0x004F)
++    {
++      grub_printf (" Switching to Mode 0x%x failed.\n", mode_number);
++      return 0;
++    }
++
++  /* Draw something on the screen...  */
++  {
++    unsigned char *base_buf = (unsigned char *) mode.phys_base;
++    int scanline = controller.version >= 0x0300
++      ? mode.linear_bytes_per_scanline : mode.bytes_per_scanline;
++    /* FIXME: this assumes that any depth is a modulo of 8.  */
++    int bpp = mode.bits_per_pixel / 8;
++    int width = mode.x_resolution;
++    int height = mode.y_resolution;
++    int x, y;
++    unsigned color = 0;
++
++    /* Iterate drawing on the screen, until the user hits any key.  */
++    while (checkkey () == -1)
++      {
++      for (y = 0; y < height; y++)
++        {
++          unsigned char *line_buf = base_buf + scanline * y;
++          
++          for (x = 0; x < width; x++)
++            {
++              unsigned char *buf = line_buf + bpp * x;
++              int i;
++
++              for (i = 0; i < bpp; i++, buf++)
++                *buf = (color >> (i * 8)) & 0xff;
++            }
++
++          color++;
++        }
++      }
++
++    /* Discard the input.  */
++    getkey ();
++  }
++  
++  /* Back to the default text mode.  */
++  if (set_vbe_mode (0x03) != 0x004F)
++    {
++      /* Why?!  */
++      grub_reboot ();
++    }
++
++  return 0;
++}
++
++static struct builtin builtin_testvbe =
++{
++  "testvbe",
++  testvbe_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "testvbe MODE",
++  "Test the VBE mode MODE. Hit any key to return."
++};
++
++\f
++#ifdef SUPPORT_NETBOOT
++/* tftpserver */
++static int
++tftpserver_func (char *arg, int flags)
++{
++  if (! *arg || ! ifconfig (0, 0, 0, arg))
++    {
++      errnum = ERR_BAD_ARGUMENT;
++      return 1;
++    }
++
++  print_network_configuration ();
++  return 0;
++}
++
++static struct builtin builtin_tftpserver =
++{
++  "tftpserver",
++  tftpserver_func,
++  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
++  "tftpserver IPADDR",
++  "Override the TFTP server address."
++};
++#endif /* SUPPORT_NETBOOT */
++
++\f
++/* timeout */
++static int
++timeout_func (char *arg, int flags)
++{
++  if (! safe_parse_maxint (&arg, &grub_timeout))
++    return 1;
++
++  return 0;
++}
++
++static struct builtin builtin_timeout =
++{
++  "timeout",
++  timeout_func,
++  BUILTIN_MENU,
++#if 0
++  "timeout SEC",
++  "Set a timeout, in SEC seconds, before automatically booting the"
++  " default entry (normally the first entry defined)."
++#endif
++};
++
++\f
++/* title */
++static int
++title_func (char *arg, int flags)
++{
++  /* This function is not actually used at least currently.  */
++  return 0;
++}
++
++static struct builtin builtin_title =
++{
++  "title",
++  title_func,
++  BUILTIN_TITLE,
++#if 0
++  "title [NAME ...]",
++  "Start a new boot entry, and set its name to the contents of the"
++  " rest of the line, starting with the first non-space character."
++#endif
++};
++
++\f
++/* unhide */
++static int
++unhide_func (char *arg, int flags)
++{
++  if (! set_device (arg))
++    return 1;
++
++  if (! set_partition_hidden_flag (0))
++    return 1;
++
++  return 0;
++}
++
++static struct builtin builtin_unhide =
++{
++  "unhide",
++  unhide_func,
++  BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
++  "unhide PARTITION",
++  "Unhide PARTITION by clearing the \"hidden\" bit in its"
++  " partition type code."
++};
++
++\f
++/* uppermem */
++static int
++uppermem_func (char *arg, int flags)
++{
++  if (! safe_parse_maxint (&arg, (int *) &mbi.mem_upper))
++    return 1;
++
++  mbi.flags &= ~MB_INFO_MEM_MAP;
++  return 0;
++}
++
++static struct builtin builtin_uppermem =
++{
++  "uppermem",
++  uppermem_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "uppermem KBYTES",
++  "Force GRUB to assume that only KBYTES kilobytes of upper memory are"
++  " installed.  Any system address range maps are discarded."
++};
++
++\f
++/* vbeprobe */
++static int
++vbeprobe_func (char *arg, int flags)
++{
++  struct vbe_controller controller;
++  unsigned short *mode_list;
++  int mode_number = -1;
++  
++  auto unsigned long vbe_far_ptr_to_linear (unsigned long);
++  
++  unsigned long vbe_far_ptr_to_linear (unsigned long ptr)
++    {
++      unsigned short seg = (ptr >> 16);
++      unsigned short off = (ptr & 0xFFFF);
++
++      return (seg << 4) + off;
++    }
++  
++  if (*arg)
++    {
++      if (! safe_parse_maxint (&arg, &mode_number))
++      return 1;
++    }
++  
++  /* Set the signature to `VBE2', to obtain VBE 3.0 information.  */
++  grub_memmove (controller.signature, "VBE2", 4);
++  
++  if (get_vbe_controller_info (&controller) != 0x004F)
++    {
++      grub_printf (" VBE BIOS is not present.\n");
++      return 0;
++    }
++
++  /* Check the version.  */
++  if (controller.version < 0x0200)
++    {
++      grub_printf (" VBE version %d.%d is not supported.\n",
++                 (int) (controller.version >> 8),
++                 (int) (controller.version & 0xFF));
++      return 0;
++    }
++
++  /* Print some information.  */
++  grub_printf (" VBE version %d.%d\n",
++             (int) (controller.version >> 8),
++             (int) (controller.version & 0xFF));
++
++  /* Iterate probing modes.  */
++  for (mode_list
++       = (unsigned short *) vbe_far_ptr_to_linear (controller.video_mode);
++       *mode_list != 0xFFFF;
++       mode_list++)
++    {
++      struct vbe_mode mode;
++      
++      if (get_vbe_mode_info (*mode_list, &mode) != 0x004F)
++      continue;
++
++      /* Skip this, if this is not supported or linear frame buffer
++       mode is not support.  */
++      if ((mode.mode_attributes & 0x0081) != 0x0081)
++      continue;
++
++      if (mode_number == -1 || mode_number == *mode_list)
++      {
++        char *model;
++        switch (mode.memory_model)
++          {
++          case 0x00: model = "Text"; break;
++          case 0x01: model = "CGA graphics"; break;
++          case 0x02: model = "Hercules graphics"; break;
++          case 0x03: model = "Planar"; break;
++          case 0x04: model = "Packed pixel"; break;
++          case 0x05: model = "Non-chain 4, 256 color"; break;
++          case 0x06: model = "Direct Color"; break;
++          case 0x07: model = "YUV"; break;
++          default: model = "Unknown"; break;
++          }
++        
++        grub_printf ("  0x%x: %s, %ux%ux%u\n",
++                     (unsigned) *mode_list,
++                     model,
++                     (unsigned) mode.x_resolution,
++                     (unsigned) mode.y_resolution,
++                     (unsigned) mode.bits_per_pixel);
++        
++        if (mode_number != -1)
++          break;
++      }
++    }
++
++  if (mode_number != -1 && mode_number != *mode_list)
++    grub_printf ("  Mode 0x%x is not found or supported.\n", mode_number);
++  
++  return 0;
++}
++
++static struct builtin builtin_vbeprobe =
++{
++  "vbeprobe",
++  vbeprobe_func,
++  BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
++  "vbeprobe [MODE]",
++  "Probe VBE information. If the mode number MODE is specified, show only"
++  " the information about only the mode."
++};
++  
++\f
++/* The table of builtin commands. Sorted in dictionary order.  */
++struct builtin *builtin_table[] =
++{
++  &builtin_blocklist,
++  &builtin_boot,
++#ifdef SUPPORT_NETBOOT
++  &builtin_bootp,
++#endif /* SUPPORT_NETBOOT */
++  &builtin_cat,
++  &builtin_chainloader,
++  &builtin_cmp,
++  &builtin_color,
++  &builtin_configfile,
++  &builtin_debug,
++  &builtin_default,
++#ifdef GRUB_UTIL
++  &builtin_device,
++#endif /* GRUB_UTIL */
++#ifdef SUPPORT_NETBOOT
++  &builtin_dhcp,
++#endif /* SUPPORT_NETBOOT */
++  &builtin_displayapm,
++  &builtin_displaymem,
++#ifdef GRUB_UTIL
++  &builtin_dump,
++#endif /* GRUB_UTIL */
++  &builtin_embed,
++  &builtin_fallback,
++  &builtin_find,
++  &builtin_fstest,
++  &builtin_geometry,
++  &builtin_halt,
++  &builtin_help,
++  &builtin_hiddenmenu,
++  &builtin_hide,
++#ifdef SUPPORT_NETBOOT
++  &builtin_ifconfig,
++#endif /* SUPPORT_NETBOOT */
++  &builtin_impsprobe,
++  &builtin_initrd,
++  &builtin_install,
++  &builtin_ioprobe,
++  &builtin_kernel,
++  &builtin_lock,
++  &builtin_makeactive,
++  &builtin_map,
++#ifdef USE_MD5_PASSWORDS
++  &builtin_md5crypt,
++#endif /* USE_MD5_PASSWORDS */
++  &builtin_module,
++  &builtin_modulenounzip,
++  &builtin_pager,
++  &builtin_partnew,
++  &builtin_parttype,
++  &builtin_password,
++  &builtin_pause,
++#ifdef GRUB_UTIL
++  &builtin_quit,
++#endif /* GRUB_UTIL */
++#ifdef SUPPORT_NETBOOT
++  &builtin_rarp,
++#endif /* SUPPORT_NETBOOT */
++  &builtin_read,
++  &builtin_reboot,
++  &builtin_root,
++  &builtin_rootnoverify,
++  &builtin_savedefault,
++#ifdef SUPPORT_SERIAL
++  &builtin_serial,
++#endif /* SUPPORT_SERIAL */
++  &builtin_setkey,
++  &builtin_setup,
++#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES)
++  &builtin_terminal,
++#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */
++#ifdef SUPPORT_SERIAL
++  &builtin_terminfo,
++#endif /* SUPPORT_SERIAL */
++  &builtin_testload,
++  &builtin_testvbe,
++#ifdef SUPPORT_NETBOOT
++  &builtin_tftpserver,
++#endif /* SUPPORT_NETBOOT */
++  &builtin_timeout,
++  &builtin_title,
++  &builtin_unhide,
++  &builtin_uppermem,
++  &builtin_vbeprobe,
++  0
++};
+diff -Nur grub-0.97/stage2/char_io.c grub-0.97-patched/stage2/char_io.c
+--- grub-0.97/stage2/char_io.c 2005-02-01 21:51:23.000000000 +0100
++++ grub-0.97-patched/stage2/char_io.c 2012-11-11 17:06:52.556085241 +0100
+@@ -35,6 +35,7 @@
+     {
+       "console",
+       0,
++      24,
+       console_putchar,
+       console_checkkey,
+       console_getkey,
+@@ -43,13 +44,16 @@
+       console_cls,
+       console_setcolorstate,
+       console_setcolor,
+-      console_setcursor
++      console_setcursor,
++      0, 
++      0
+     },
+ #ifdef SUPPORT_SERIAL
+     {
+       "serial",
+       /* A serial device must be initialized.  */
+       TERM_NEED_INIT,
++      24,
+       serial_putchar,
+       serial_checkkey,
+       serial_getkey,
+@@ -58,6 +62,8 @@
+       serial_cls,
+       serial_setcolorstate,
+       0,
++      0,
++      0, 
+       0
+     },
+ #endif /* SUPPORT_SERIAL */
+@@ -65,6 +71,7 @@
+     {
+       "hercules",
+       0,
++      24,
+       hercules_putchar,
+       console_checkkey,
+       console_getkey,
+@@ -73,9 +80,28 @@
+       hercules_cls,
+       hercules_setcolorstate,
+       hercules_setcolor,
+-      hercules_setcursor
++      hercules_setcursor,
++      0,
++      0
+     },      
+ #endif /* SUPPORT_HERCULES */
++#ifdef SUPPORT_GRAPHICS
++    { "graphics",
++      TERM_NEED_INIT, /* flags */
++      30, /* number of lines */
++      graphics_putchar, /* putchar */
++      console_checkkey, /* checkkey */
++      console_getkey, /* getkey */
++      graphics_getxy, /* getxy */
++      graphics_gotoxy, /* gotoxy */
++      graphics_cls, /* cls */
++      graphics_setcolorstate, /* setcolorstate */
++      graphics_setcolor, /* setcolor */
++      graphics_setcursor, /* nocursor */
++      graphics_init, /* initialize */
++      graphics_end /* shutdown */
++    },
++#endif /* SUPPORT_GRAPHICS */
+     /* This must be the last entry.  */
+     { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
+   };
+@@ -1046,13 +1072,15 @@
+                the following grub_printf call will print newlines.  */
+             count_lines = -1;
++            grub_printf("\n");
+             if (current_term->setcolorstate)
+               current_term->setcolorstate (COLOR_STATE_HIGHLIGHT);
+             
+-            grub_printf ("\n[Hit return to continue]");
++            grub_printf ("[Hit return to continue]");
+             if (current_term->setcolorstate)
+               current_term->setcolorstate (COLOR_STATE_NORMAL);
++              
+             
+             do
+               {
+@@ -1090,7 +1118,7 @@
+ cls (void)
+ {
+   /* If the terminal is dumb, there is no way to clean the terminal.  */
+-  if (current_term->flags & TERM_DUMB)
++  if (current_term->flags & TERM_DUMB) 
+     grub_putchar ('\n');
+   else
+     current_term->cls ();
+@@ -1174,37 +1202,62 @@
+ }
+ #endif /* ! STAGE1_5 */
++#ifdef GRUB_UTIL
++# ifdef __PIC__
++#  if defined(HAVE_START_SYMBOL) && defined(HAVE_END_SYMBOL)
++      extern char start[];
++      extern char end[];
++#  elif defined(HAVE_USCORE_START_SYMBOL) && defined (HAVE_USCORE_END_SYMBOL)
++      extern char _start[];
++      extern char _end[];
++#  endif
++# endif
++#endif
+ int
+-memcheck (int addr, int len)
++memcheck (unsigned long addr, unsigned long len)
+ {
+ #ifdef GRUB_UTIL
+-  auto int start_addr (void);
+-  auto int end_addr (void);
++# ifdef __PIC__
++#  if defined(HAVE_START_SYMBOL) && defined(HAVE_END_SYMBOL)
++  if (start <= addr && end > addr + len)
++    return ! errnum;
++#  elif defined(HAVE_USCORE_START_SYMBOL) && defined (HAVE_USCORE_END_SYMBOL)
++  if (_start <= addr && _end > addr + len)
++    return ! errnum;
++#  endif
++# else /* __PIC__ */
++  auto unsigned long start_addr (void);
++  auto unsigned long end_addr (void);
+   
+-  auto int start_addr (void)
++  auto unsigned long start_addr (void)
+     {
+-      int ret;
+-# if defined(HAVE_START_SYMBOL)
++      unsigned long ret;
++#  if defined(HAVE_START_SYMBOL)
+       asm volatile ("movl     $start, %0" : "=a" (ret));
+-# elif defined(HAVE_USCORE_START_SYMBOL)
++#  elif defined(HAVE_USCORE_START_SYMBOL)
+       asm volatile ("movl     $_start, %0" : "=a" (ret));
+-# endif
++#  else
++      erk! /* function would return undefined data in this case - barf */
++#  endif
+       return ret;
+     }
+-  auto int end_addr (void)
++  auto unsigned long end_addr (void)
+     {
+-      int ret;
+-# if defined(HAVE_END_SYMBOL)
++      unsigned long ret;
++#  if defined(HAVE_END_SYMBOL)
+       asm volatile ("movl     $end, %0" : "=a" (ret));
+-# elif defined(HAVE_USCORE_END_SYMBOL)
++#  elif defined(HAVE_USCORE_END_SYMBOL)
+       asm volatile ("movl     $_end, %0" : "=a" (ret));
+-# endif
++#  else
++      erk! /* function would return undefined data in this case - barf */
++#  endif
+       return ret;
+     }
+   if (start_addr () <= addr && end_addr () > addr + len)
+     return ! errnum;
++# endif /* __PIC__ */
+ #endif /* GRUB_UTIL */
+   if ((addr < RAW_ADDR (0x1000))
+@@ -1217,10 +1270,20 @@
+   return ! errnum;
+ }
++void
++grub_memcpy(void *dest, const void *src, int len)
++{
++  int i;
++  register char *d = (char*)dest, *s = (char*)src;
++
++  for (i = 0; i < len; i++)
++    d[i] = s[i];
++}
++
+ void *
+ grub_memmove (void *to, const void *from, int len)
+ {
+-   if (memcheck ((int) to, len))
++   if (memcheck ((unsigned long) to, len))
+      {
+        /* This assembly code is stolen from
+         linux-2.2.2/include/asm-i386/string.h. This is not very fast
+@@ -1258,7 +1321,7 @@
+ {
+   char *p = start;
+-  if (memcheck ((int) start, len))
++  if (memcheck ((unsigned long) start, len))
+     {
+       while (len -- > 0)
+       *p ++ = c;
+diff -Nur grub-0.97/stage2/char_io.c.orig grub-0.97-patched/stage2/char_io.c.orig
+--- grub-0.97/stage2/char_io.c.orig    1970-01-01 01:00:00.000000000 +0100
++++ grub-0.97-patched/stage2/char_io.c.orig    2005-02-01 21:51:23.000000000 +0100
+@@ -0,0 +1,1283 @@
++/* char_io.c - basic console input and output */
++/*
++ *  GRUB  --  GRand Unified Bootloader
++ *  Copyright (C) 1999,2000,2001,2002,2004  Free Software Foundation, Inc.
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License as published by
++ *  the Free Software Foundation; either version 2 of the License, or
++ *  (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the Free Software
++ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#include <shared.h>
++#include <term.h>
++
++#ifdef SUPPORT_HERCULES
++# include <hercules.h>
++#endif
++
++#ifdef SUPPORT_SERIAL
++# include <serial.h>
++#endif
++
++#ifndef STAGE1_5
++struct term_entry term_table[] =
++  {
++    {
++      "console",
++      0,
++      console_putchar,
++      console_checkkey,
++      console_getkey,
++      console_getxy,
++      console_gotoxy,
++      console_cls,
++      console_setcolorstate,
++      console_setcolor,
++      console_setcursor
++    },
++#ifdef SUPPORT_SERIAL
++    {
++      "serial",
++      /* A serial device must be initialized.  */
++      TERM_NEED_INIT,
++      serial_putchar,
++      serial_checkkey,
++      serial_getkey,
++      serial_getxy,
++      serial_gotoxy,
++      serial_cls,
++      serial_setcolorstate,
++      0,
++      0
++    },
++#endif /* SUPPORT_SERIAL */
++#ifdef SUPPORT_HERCULES
++    {
++      "hercules",
++      0,
++      hercules_putchar,
++      console_checkkey,
++      console_getkey,
++      hercules_getxy,
++      hercules_gotoxy,
++      hercules_cls,
++      hercules_setcolorstate,
++      hercules_setcolor,
++      hercules_setcursor
++    },      
++#endif /* SUPPORT_HERCULES */
++    /* This must be the last entry.  */
++    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
++  };
++
++/* This must be console.  */
++struct term_entry *current_term = term_table;
++
++int max_lines = 24;
++int count_lines = -1;
++int use_pager = 1;
++#endif
++
++void
++print_error (void)
++{
++  if (errnum > ERR_NONE && errnum < MAX_ERR_NUM)
++#ifndef STAGE1_5
++    /* printf("\7\n %s\n", err_list[errnum]); */
++    printf ("\nError %u: %s\n", errnum, err_list[errnum]);
++#else /* STAGE1_5 */
++    printf ("Error %u\n", errnum);
++#endif /* STAGE1_5 */
++}
++
++char *
++convert_to_ascii (char *buf, int c,...)
++{
++  unsigned long num = *((&c) + 1), mult = 10;
++  char *ptr = buf;
++
++#ifndef STAGE1_5
++  if (c == 'x' || c == 'X')
++    mult = 16;
++
++  if ((num & 0x80000000uL) && c == 'd')
++    {
++      num = (~num) + 1;
++      *(ptr++) = '-';
++      buf++;
++    }
++#endif
++
++  do
++    {
++      int dig = num % mult;
++      *(ptr++) = ((dig > 9) ? dig + 'a' - 10 : '0' + dig);
++    }
++  while (num /= mult);
++
++  /* reorder to correct direction!! */
++  {
++    char *ptr1 = ptr - 1;
++    char *ptr2 = buf;
++    while (ptr1 > ptr2)
++      {
++      int tmp = *ptr1;
++      *ptr1 = *ptr2;
++      *ptr2 = tmp;
++      ptr1--;
++      ptr2++;
++      }
++  }
++
++  return ptr;
++}
++
++void
++grub_putstr (const char *str)
++{
++  while (*str)
++    grub_putchar (*str++);
++}
++
++void
++grub_printf (const char *format,...)
++{
++  int *dataptr = (int *) &format;
++  char c, str[16];
++  
++  dataptr++;
++
++  while ((c = *(format++)) != 0)
++    {
++      if (c != '%')
++      grub_putchar (c);
++      else
++      switch (c = *(format++))
++        {
++#ifndef STAGE1_5
++        case 'd':
++        case 'x':
++        case 'X':
++#endif
++        case 'u':
++          *convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0;
++          grub_putstr (str);
++          break;
++
++#ifndef STAGE1_5
++        case 'c':
++          grub_putchar ((*(dataptr++)) & 0xff);
++          break;
++
++        case 's':
++          grub_putstr ((char *) *(dataptr++));
++          break;
++#endif
++        }
++    }
++}
++
++#ifndef STAGE1_5
++int
++grub_sprintf (char *buffer, const char *format, ...)
++{
++  /* XXX hohmuth
++     ugly hack -- should unify with printf() */
++  int *dataptr = (int *) &format;
++  char c, *ptr, str[16];
++  char *bp = buffer;
++
++  dataptr++;
++
++  while ((c = *format++) != 0)
++    {
++      if (c != '%')
++      *bp++ = c; /* putchar(c); */
++      else
++      switch (c = *(format++))
++        {
++        case 'd': case 'u': case 'x':
++          *convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0;
++
++          ptr = str;
++
++          while (*ptr)
++            *bp++ = *(ptr++); /* putchar(*(ptr++)); */
++          break;
++
++        case 'c': *bp++ = (*(dataptr++))&0xff;
++          /* putchar((*(dataptr++))&0xff); */
++          break;
++
++        case 's':
++          ptr = (char *) (*(dataptr++));
++
++          while ((c = *ptr++) != 0)
++            *bp++ = c; /* putchar(c); */
++          break;
++        }
++    }
++
++  *bp = 0;
++  return bp - buffer;
++}
++
++
++void
++init_page (void)
++{
++  cls ();
++
++  grub_printf ("\n    GNU GRUB  version %s  (%dK lower / %dK upper memory)\n\n",
++        version_string, mbi.mem_lower, mbi.mem_upper);
++}
++
++/* The number of the history entries.  */
++static int num_history = 0;
++
++/* Get the NOth history. If NO is less than zero or greater than or
++   equal to NUM_HISTORY, return NULL. Otherwise return a valid string.  */
++static char *
++get_history (int no)
++{
++  if (no < 0 || no >= num_history)
++    return 0;
++
++  return (char *) HISTORY_BUF + MAX_CMDLINE * no;
++}
++
++/* Add CMDLINE to the history buffer.  */
++static void
++add_history (const char *cmdline, int no)
++{
++  grub_memmove ((char *) HISTORY_BUF + MAX_CMDLINE * (no + 1),
++              (char *) HISTORY_BUF + MAX_CMDLINE * no,
++              MAX_CMDLINE * (num_history - no));
++  grub_strcpy ((char *) HISTORY_BUF + MAX_CMDLINE * no, cmdline);
++  if (num_history < HISTORY_SIZE)
++    num_history++;
++}
++
++static int
++real_get_cmdline (char *prompt, char *cmdline, int maxlen,
++                int echo_char, int readline)
++{
++  /* This is a rather complicated function. So explain the concept.
++     
++     A command-line consists of ``section''s. A section is a part of the
++     line which may be displayed on the screen, but a section is never
++     displayed with another section simultaneously.
++
++     Each section is basically 77 or less characters, but the exception
++     is the first section, which is 78 or less characters, because the
++     starting point is special. See below.
++
++     The first section contains a prompt and a command-line (or the
++     first part of a command-line when it is too long to be fit in the
++     screen). So, in the first section, the number of command-line
++     characters displayed is 78 minus the length of the prompt (or
++     less). If the command-line has more characters, `>' is put at the
++     position 78 (zero-origin), to inform the user of the hidden
++     characters.
++
++     Other sections always have `<' at the first position, since there
++     is absolutely a section before each section. If there is a section
++     after another section, this section consists of 77 characters and
++     `>' at the last position. The last section has 77 or less
++     characters and doesn't have `>'.
++
++     Each section other than the last shares some characters with the
++     previous section. This region is called ``margin''. If the cursor
++     is put at the magin which is shared by the first section and the
++     second, the first section is displayed. Otherwise, a displayed
++     section is switched to another section, only if the cursor is put
++     outside that section.  */
++
++  /* XXX: These should be defined in shared.h, but I leave these here,
++     until this code is freezed.  */
++#define CMDLINE_WIDTH 78
++#define CMDLINE_MARGIN        10
++  
++  int xpos, lpos, c, section;
++  /* The length of PROMPT.  */
++  int plen;
++  /* The length of the command-line.  */
++  int llen;
++  /* The index for the history.  */
++  int history = -1;
++  /* The working buffer for the command-line.  */
++  char *buf = (char *) CMDLINE_BUF;
++  /* The kill buffer.  */
++  char *kill_buf = (char *) KILL_BUF;
++  
++  /* Nested function definitions for code simplicity.  */
++
++  /* The forward declarations of nested functions are prefixed
++     with `auto'.  */
++  auto void cl_refresh (int full, int len);
++  auto void cl_backward (int count);
++  auto void cl_forward (int count);
++  auto void cl_insert (const char *str);
++  auto void cl_delete (int count);
++  auto void cl_init (void);
++  
++  /* Move the cursor backward.  */
++  void cl_backward (int count)
++    {
++      lpos -= count;
++      
++      /* If the cursor is in the first section, display the first section
++       instead of the second.  */
++      if (section == 1 && plen + lpos < CMDLINE_WIDTH)
++      cl_refresh (1, 0);
++      else if (xpos - count < 1)
++      cl_refresh (1, 0);
++      else
++      {
++        xpos -= count;
++
++        if (current_term->flags & TERM_DUMB)
++          {
++            int i;
++            
++            for (i = 0; i < count; i++)
++              grub_putchar ('\b');
++          }
++        else
++          gotoxy (xpos, getxy () & 0xFF);
++      }
++    }
++
++  /* Move the cursor forward.  */
++  void cl_forward (int count)
++    {
++      lpos += count;
++
++      /* If the cursor goes outside, scroll the screen to the right.  */
++      if (xpos + count >= CMDLINE_WIDTH)
++      cl_refresh (1, 0);
++      else
++      {
++        xpos += count;
++
++        if (current_term->flags & TERM_DUMB)
++          {
++            int i;
++            
++            for (i = lpos - count; i < lpos; i++)
++              {
++                if (! echo_char)
++                  grub_putchar (buf[i]);
++                else
++                  grub_putchar (echo_char);
++              }
++          }
++        else
++          gotoxy (xpos, getxy () & 0xFF);
++      }
++    }
++
++  /* Refresh the screen. If FULL is true, redraw the full line, otherwise,
++     only LEN characters from LPOS.  */
++  void cl_refresh (int full, int len)
++    {
++      int i;
++      int start;
++      int pos = xpos;
++      
++      if (full)
++      {
++        /* Recompute the section number.  */
++        if (lpos + plen < CMDLINE_WIDTH)
++          section = 0;
++        else
++          section = ((lpos + plen - CMDLINE_WIDTH)
++                     / (CMDLINE_WIDTH - 1 - CMDLINE_MARGIN) + 1);
++
++        /* From the start to the end.  */
++        len = CMDLINE_WIDTH;
++        pos = 0;
++        grub_putchar ('\r');
++
++        /* If SECTION is the first section, print the prompt, otherwise,
++           print `<'.  */
++        if (section == 0)
++          {
++            grub_printf ("%s", prompt);
++            len -= plen;
++            pos += plen;
++          }
++        else
++          {
++            grub_putchar ('<');
++            len--;
++            pos++;
++          }
++      }
++
++      /* Compute the index to start writing BUF and the resulting position
++       on the screen.  */
++      if (section == 0)
++      {
++        int offset = 0;
++        
++        if (! full)
++          offset = xpos - plen;
++        
++        start = 0;
++        xpos = lpos + plen;
++        start += offset;
++      }
++      else
++      {
++        int offset = 0;
++        
++        if (! full)
++          offset = xpos - 1;
++        
++        start = ((section - 1) * (CMDLINE_WIDTH - 1 - CMDLINE_MARGIN)
++                 + CMDLINE_WIDTH - plen - CMDLINE_MARGIN);
++        xpos = lpos + 1 - start;
++        start += offset;
++      }
++
++      /* Print BUF. If ECHO_CHAR is not zero, put it instead.  */
++      for (i = start; i < start + len && i < llen; i++)
++      {
++        if (! echo_char)
++          grub_putchar (buf[i]);
++        else
++          grub_putchar (echo_char);
++
++        pos++;
++      }
++      
++      /* Fill up the rest of the line with spaces.  */
++      for (; i < start + len; i++)
++      {
++        grub_putchar (' ');
++        pos++;
++      }
++      
++      /* If the cursor is at the last position, put `>' or a space,
++       depending on if there are more characters in BUF.  */
++      if (pos == CMDLINE_WIDTH)
++      {
++        if (start + len < llen)
++          grub_putchar ('>');
++        else
++          grub_putchar (' ');
++        
++        pos++;
++      }
++      
++      /* Back to XPOS.  */
++      if (current_term->flags & TERM_DUMB)
++      {
++        for (i = 0; i < pos - xpos; i++)
++          grub_putchar ('\b');
++      }
++      else
++      gotoxy (xpos, getxy () & 0xFF);
++    }
++
++  /* Initialize the command-line.  */
++  void cl_init (void)
++    {
++      /* Distinguish us from other lines and error messages!  */
++      grub_putchar ('\n');
++
++      /* Print full line and set position here.  */
++      cl_refresh (1, 0);
++    }
++
++  /* Insert STR to BUF.  */
++  void cl_insert (const char *str)
++    {
++      int l = grub_strlen (str);
++
++      if (llen + l < maxlen)
++      {
++        if (lpos == llen)
++          grub_memmove (buf + lpos, str, l + 1);
++        else
++          {
++            grub_memmove (buf + lpos + l, buf + lpos, llen - lpos + 1);
++            grub_memmove (buf + lpos, str, l);
++          }
++        
++        llen += l;
++        lpos += l;
++        if (xpos + l >= CMDLINE_WIDTH)
++          cl_refresh (1, 0);
++        else if (xpos + l + llen - lpos > CMDLINE_WIDTH)
++          cl_refresh (0, CMDLINE_WIDTH - xpos);
++        else
++          cl_refresh (0, l + llen - lpos);
++      }
++    }
++
++  /* Delete COUNT characters in BUF.  */
++  void cl_delete (int count)
++    {
++      grub_memmove (buf + lpos, buf + lpos + count, llen - count + 1);
++      llen -= count;
++      
++      if (xpos + llen + count - lpos > CMDLINE_WIDTH)
++      cl_refresh (0, CMDLINE_WIDTH - xpos);
++      else
++      cl_refresh (0, llen + count - lpos);
++    }
++
++  plen = grub_strlen (prompt);
++  llen = grub_strlen (cmdline);
++
++  if (maxlen > MAX_CMDLINE)
++    {
++      maxlen = MAX_CMDLINE;
++      if (llen >= MAX_CMDLINE)
++      {
++        llen = MAX_CMDLINE - 1;
++        cmdline[MAX_CMDLINE] = 0;
++      }
++    }
++  lpos = llen;
++  grub_strcpy (buf, cmdline);
++
++  cl_init ();
++
++  while ((c = ASCII_CHAR (getkey ())) != '\n' && c != '\r')
++    {
++      /* If READLINE is non-zero, handle readline-like key bindings.  */
++      if (readline)
++      {
++        switch (c)
++          {
++          case 9:             /* TAB lists completions */
++            {
++              int i;
++              /* POS points to the first space after a command.  */
++              int pos = 0;
++              int ret;
++              char *completion_buffer = (char *) COMPLETION_BUF;
++              int equal_pos = -1;
++              int is_filename;
++
++              /* Find the first word.  */
++              while (buf[pos] == ' ')
++                pos++;
++              while (buf[pos] && buf[pos] != '=' && buf[pos] != ' ')
++                pos++;
++
++              is_filename = (lpos > pos);
++
++              /* Find the position of the equal character after a
++                 command, and replace it with a space.  */
++              for (i = pos; buf[i] && buf[i] != ' '; i++)
++                if (buf[i] == '=')
++                  {
++                    equal_pos = i;
++                    buf[i] = ' ';
++                    break;
++                  }
++
++              /* Find the position of the first character in this
++                 word.  */
++              for (i = lpos; i > 0 && buf[i - 1] != ' '; i--)
++                ;
++
++              /* Invalidate the cache, because the user may exchange
++                 removable disks.  */
++              buf_drive = -1;
++
++              /* Copy this word to COMPLETION_BUFFER and do the
++                 completion.  */
++              grub_memmove (completion_buffer, buf + i, lpos - i);
++              completion_buffer[lpos - i] = 0;
++              ret = print_completions (is_filename, 1);
++              errnum = ERR_NONE;
++
++              if (ret >= 0)
++                {
++                  /* Found, so insert COMPLETION_BUFFER.  */
++                  cl_insert (completion_buffer + lpos - i);
++
++                  if (ret > 0)
++                    {
++                      /* There are more than one candidates, so print
++                         the list.  */
++                      grub_putchar ('\n');
++                      print_completions (is_filename, 0);
++                      errnum = ERR_NONE;
++                    }
++                }
++
++              /* Restore the command-line.  */
++              if (equal_pos >= 0)
++                buf[equal_pos] = '=';
++
++              if (ret)
++                cl_init ();
++            }
++            break;
++          case 1:             /* C-a go to beginning of line */
++            cl_backward (lpos);
++            break;
++          case 5:             /* C-e go to end of line */
++            cl_forward (llen - lpos);
++            break;
++          case 6:             /* C-f forward one character */
++            if (lpos < llen)
++              cl_forward (1);
++            break;
++          case 2:             /* C-b backward one character */
++            if (lpos > 0)
++              cl_backward (1);
++            break;
++          case 21:            /* C-u kill to beginning of line */
++            if (lpos == 0)
++              break;
++            /* Copy the string being deleted to KILL_BUF.  */
++            grub_memmove (kill_buf, buf, lpos);
++            kill_buf[lpos] = 0;
++            {
++              /* XXX: Not very clever.  */
++              
++              int count = lpos;
++              
++              cl_backward (lpos);
++              cl_delete (count);
++            }
++            break;
++          case 11:            /* C-k kill to end of line */
++            if (lpos == llen)
++              break;
++            /* Copy the string being deleted to KILL_BUF.  */
++            grub_memmove (kill_buf, buf + lpos, llen - lpos + 1);
++            cl_delete (llen - lpos);
++            break;
++          case 25:            /* C-y yank the kill buffer */
++            cl_insert (kill_buf);
++            break;
++          case 16:            /* C-p fetch the previous command */
++            {
++              char *p;
++
++              if (history < 0)
++                /* Save the working buffer.  */
++                grub_strcpy (cmdline, buf);
++              else if (grub_strcmp (get_history (history), buf) != 0)
++                /* If BUF is modified, add it into the history list.  */
++                add_history (buf, history);
++
++              history++;
++              p = get_history (history);
++              if (! p)
++                {
++                  history--;
++                  break;
++                }
++
++              grub_strcpy (buf, p);
++              llen = grub_strlen (buf);
++              lpos = llen;
++              cl_refresh (1, 0);
++            }
++            break;
++          case 14:            /* C-n fetch the next command */
++            {
++              char *p;
++
++              if (history < 0)
++                {
++                  break;
++                }
++              else if (grub_strcmp (get_history (history), buf) != 0)
++                /* If BUF is modified, add it into the history list.  */
++                add_history (buf, history);
++
++              history--;
++              p = get_history (history);
++              if (! p)
++                p = cmdline;
++
++              grub_strcpy (buf, p);
++              llen = grub_strlen (buf);
++              lpos = llen;
++              cl_refresh (1, 0);
++            }
++            break;
++          }
++      }
++
++      /* ESC, C-d and C-h are always handled. Actually C-d is not
++       functional if READLINE is zero, as the cursor cannot go
++       backward, but that's ok.  */
++      switch (c)
++      {
++      case 27:        /* ESC immediately return 1 */
++        return 1;
++      case 4:         /* C-d delete character under cursor */
++        if (lpos == llen)
++          break;
++        cl_delete (1);
++        break;
++      case 8:         /* C-h backspace */
++# ifdef GRUB_UTIL
++      case 127:       /* also backspace */
++# endif
++        if (lpos > 0)
++          {
++            cl_backward (1);
++            cl_delete (1);
++          }
++        break;
++      default:                /* insert printable character into line */
++        if (c >= ' ' && c <= '~')
++          {
++            char str[2];
++
++            str[0] = c;
++            str[1] = 0;
++            cl_insert (str);
++          }
++      }
++    }
++
++  grub_putchar ('\n');
++
++  /* If ECHO_CHAR is NUL, remove the leading spaces.  */
++  lpos = 0;
++  if (! echo_char)
++    while (buf[lpos] == ' ')
++      lpos++;
++
++  /* Copy the working buffer to CMDLINE.  */
++  grub_memmove (cmdline, buf + lpos, llen - lpos + 1);
++
++  /* If the readline-like feature is turned on and CMDLINE is not
++     empty, add it into the history list.  */
++  if (readline && lpos < llen)
++    add_history (cmdline, 0);
++
++  return 0;
++}
++
++/* Don't use this with a MAXLEN greater than 1600 or so!  The problem
++   is that GET_CMDLINE depends on the everything fitting on the screen
++   at once.  So, the whole screen is about 2000 characters, minus the
++   PROMPT, and space for error and status lines, etc.  MAXLEN must be
++   at least 1, and PROMPT and CMDLINE must be valid strings (not NULL
++   or zero-length).
++
++   If ECHO_CHAR is nonzero, echo it instead of the typed character. */
++int
++get_cmdline (char *prompt, char *cmdline, int maxlen,
++           int echo_char, int readline)
++{
++  int old_cursor;
++  int ret;
++
++  old_cursor = setcursor (1);
++  
++  /* Because it is hard to deal with different conditions simultaneously,
++     less functional cases are handled here. Assume that TERM_NO_ECHO
++     implies TERM_NO_EDIT.  */
++  if (current_term->flags & (TERM_NO_ECHO | TERM_NO_EDIT))
++    {
++      char *p = cmdline;
++      int c;
++      
++      /* Make sure that MAXLEN is not too large.  */
++      if (maxlen > MAX_CMDLINE)
++      maxlen = MAX_CMDLINE;
++
++      /* Print only the prompt. The contents of CMDLINE is simply discarded,
++       even if it is not empty.  */
++      grub_printf ("%s", prompt);
++
++      /* Gather characters until a newline is gotten.  */
++      while ((c = ASCII_CHAR (getkey ())) != '\n' && c != '\r')
++      {
++        /* Return immediately if ESC is pressed.  */
++        if (c == 27)
++          {
++            setcursor (old_cursor);
++            return 1;
++          }
++
++        /* Printable characters are added into CMDLINE.  */
++        if (c >= ' ' && c <= '~')
++          {
++            if (! (current_term->flags & TERM_NO_ECHO))
++              grub_putchar (c);
++
++            /* Preceding space characters must be ignored.  */
++            if (c != ' ' || p != cmdline)
++              *p++ = c;
++          }
++      }
++
++      *p = 0;
++
++      if (! (current_term->flags & TERM_NO_ECHO))
++      grub_putchar ('\n');
++
++      setcursor (old_cursor);
++      return 0;
++    }
++
++  /* Complicated features are left to real_get_cmdline.  */
++  ret = real_get_cmdline (prompt, cmdline, maxlen, echo_char, readline);
++  setcursor (old_cursor);
++  return ret;
++}
++
++int
++safe_parse_maxint (char **str_ptr, int *myint_ptr)
++{
++  char *ptr = *str_ptr;
++  int myint = 0;
++  int mult = 10, found = 0;
++
++  /*
++   *  Is this a hex number?
++   */
++  if (*ptr == '0' && tolower (*(ptr + 1)) == 'x')
++    {
++      ptr += 2;
++      mult = 16;
++    }
++
++  while (1)
++    {
++      /* A bit tricky. This below makes use of the equivalence:
++       (A >= B && A <= C) <=> ((A - B) <= (C - B))
++       when C > B and A is unsigned.  */
++      unsigned int digit;
++
++      digit = tolower (*ptr) - '0';
++      if (digit > 9)
++      {
++        digit -= 'a' - '0';
++        if (mult == 10 || digit > 5)
++          break;
++        digit += 10;
++      }
++
++      found = 1;
++      if (myint > ((MAXINT - digit) / mult))
++      {
++        errnum = ERR_NUMBER_OVERFLOW;
++        return 0;
++      }
++      myint = (myint * mult) + digit;
++      ptr++;
++    }
++
++  if (!found)
++    {
++      errnum = ERR_NUMBER_PARSING;
++      return 0;
++    }
++
++  *str_ptr = ptr;
++  *myint_ptr = myint;
++
++  return 1;
++}
++#endif /* STAGE1_5 */
++
++#if !defined(STAGE1_5) || defined(FSYS_FAT)
++int
++grub_tolower (int c)
++{
++  if (c >= 'A' && c <= 'Z')
++    return (c + ('a' - 'A'));
++
++  return c;
++}
++#endif /* ! STAGE1_5 || FSYS_FAT */
++
++int
++grub_isspace (int c)
++{
++  switch (c)
++    {
++    case ' ':
++    case '\t':
++    case '\r':
++    case '\n':
++      return 1;
++    default:
++      break;
++    }
++
++  return 0;
++}
++
++#if !defined(STAGE1_5) || defined(FSYS_ISO9660)
++int
++grub_memcmp (const char *s1, const char *s2, int n)
++{
++  while (n)
++    {
++      if (*s1 < *s2)
++      return -1;
++      else if (*s1 > *s2)
++      return 1;
++      s1++;
++      s2++;
++      n--;
++    }
++
++  return 0;
++}
++#endif /* ! STAGE1_5 || FSYS_ISO9660 */
++
++#ifndef STAGE1_5
++int
++grub_strncat (char *s1, const char *s2, int n)
++{
++  int i = -1;
++
++  while (++i < n && s1[i] != 0);
++
++  while (i < n && (s1[i++] = *(s2++)) != 0);
++
++  s1[n - 1] = 0;
++
++  if (i >= n)
++    return 0;
++
++  s1[i] = 0;
++
++  return 1;
++}
++#endif /* ! STAGE1_5 */
++
++/* XXX: This below is an evil hack. Certainly, we should change the
++   strategy to determine what should be defined and what shouldn't be
++   defined for each image. For example, it would be better to create
++   a static library supporting minimal standard C functions and link
++   each image with the library. Complicated things should be left to
++   computer, definitely. -okuji  */
++#if !defined(STAGE1_5) || defined(FSYS_VSTAFS)
++int
++grub_strcmp (const char *s1, const char *s2)
++{
++  while (*s1 || *s2)
++    {
++      if (*s1 < *s2)
++      return -1;
++      else if (*s1 > *s2)
++      return 1;
++      s1 ++;
++      s2 ++;
++    }
++
++  return 0;
++}
++#endif /* ! STAGE1_5 || FSYS_VSTAFS */
++
++#ifndef STAGE1_5
++/* Wait for a keypress and return its code.  */
++int
++getkey (void)
++{
++  return current_term->getkey ();
++}
++
++/* Check if a key code is available.  */
++int
++checkkey (void)
++{
++  return current_term->checkkey ();
++}
++#endif /* ! STAGE1_5 */
++
++/* Display an ASCII character.  */
++void
++grub_putchar (int c)
++{
++  if (c == '\n')
++    grub_putchar ('\r');
++#ifndef STAGE1_5
++  else if (c == '\t' && current_term->getxy)
++    {
++      int n;
++      
++      n = 8 - ((current_term->getxy () >> 8) & 3);
++      while (n--)
++      grub_putchar (' ');
++      
++      return;
++    }
++#endif /* ! STAGE1_5 */
++  
++#ifdef STAGE1_5
++  
++  /* In Stage 1.5, only the normal console is supported.  */
++  console_putchar (c);
++  
++#else /* ! STAGE1_5 */
++
++  if (c == '\n')
++    {
++      /* Internal `more'-like feature.  */
++      if (count_lines >= 0)
++      {
++        count_lines++;
++        if (count_lines >= max_lines - 2)
++          {
++            int tmp;
++            
++            /* It's important to disable the feature temporarily, because
++               the following grub_printf call will print newlines.  */
++            count_lines = -1;
++
++            if (current_term->setcolorstate)
++              current_term->setcolorstate (COLOR_STATE_HIGHLIGHT);
++            
++            grub_printf ("\n[Hit return to continue]");
++
++            if (current_term->setcolorstate)
++              current_term->setcolorstate (COLOR_STATE_NORMAL);
++            
++            do
++              {
++                tmp = ASCII_CHAR (getkey ());
++              }
++            while (tmp != '\n' && tmp != '\r');
++            grub_printf ("\r                        \r");
++            
++            /* Restart to count lines.  */
++            count_lines = 0;
++            return;
++          }
++      }
++    }
++
++  current_term->putchar (c);
++  
++#endif /* ! STAGE1_5 */
++}
++
++#ifndef STAGE1_5
++void
++gotoxy (int x, int y)
++{
++  current_term->gotoxy (x, y);
++}
++
++int
++getxy (void)
++{
++  return current_term->getxy ();
++}
++
++void
++cls (void)
++{
++  /* If the terminal is dumb, there is no way to clean the terminal.  */
++  if (current_term->flags & TERM_DUMB)
++    grub_putchar ('\n');
++  else
++    current_term->cls ();
++}
++
++int
++setcursor (int on)
++{
++  if (current_term->setcursor)
++    return current_term->setcursor (on);
++
++  return 1;
++}
++#endif /* ! STAGE1_5 */
++
++int
++substring (const char *s1, const char *s2)
++{
++  while (*s1 == *s2)
++    {
++      /* The strings match exactly. */
++      if (! *(s1++))
++      return 0;
++      s2 ++;
++    }
++
++  /* S1 is a substring of S2. */
++  if (*s1 == 0)
++    return -1;
++
++  /* S1 isn't a substring. */
++  return 1;
++}
++
++#ifndef STAGE1_5
++/* Terminate the string STR with NUL.  */
++int
++nul_terminate (char *str)
++{
++  int ch;
++  
++  while (*str && ! grub_isspace (*str))
++    str++;
++
++  ch = *str;
++  *str = 0;
++  return ch;
++}
++
++char *
++grub_strstr (const char *s1, const char *s2)
++{
++  while (*s1)
++    {
++      const char *ptr, *tmp;
++
++      ptr = s1;
++      tmp = s2;
++
++      while (*tmp && *ptr == *tmp)
++      ptr++, tmp++;
++      
++      if (tmp > s2 && ! *tmp)
++      return (char *) s1;
++
++      s1++;
++    }
++
++  return 0;
++}
++
++int
++grub_strlen (const char *str)
++{
++  int len = 0;
++
++  while (*str++)
++    len++;
++
++  return len;
++}
++#endif /* ! STAGE1_5 */
++
++int
++memcheck (int addr, int len)
++{
++#ifdef GRUB_UTIL
++  auto int start_addr (void);
++  auto int end_addr (void);
++  
++  auto int start_addr (void)
++    {
++      int ret;
++# if defined(HAVE_START_SYMBOL)
++      asm volatile ("movl     $start, %0" : "=a" (ret));
++# elif defined(HAVE_USCORE_START_SYMBOL)
++      asm volatile ("movl     $_start, %0" : "=a" (ret));
++# endif
++      return ret;
++    }
++
++  auto int end_addr (void)
++    {
++      int ret;
++# if defined(HAVE_END_SYMBOL)
++      asm volatile ("movl     $end, %0" : "=a" (ret));
++# elif defined(HAVE_USCORE_END_SYMBOL)
++      asm volatile ("movl     $_end, %0" : "=a" (ret));
++# endif
++      return ret;
++    }
++
++  if (start_addr () <= addr && end_addr () > addr + len)
++    return ! errnum;
++#endif /* GRUB_UTIL */
++
++  if ((addr < RAW_ADDR (0x1000))
++      || (addr < RAW_ADDR (0x100000)
++        && RAW_ADDR (mbi.mem_lower * 1024) < (addr + len))
++      || (addr >= RAW_ADDR (0x100000)
++        && RAW_ADDR (mbi.mem_upper * 1024) < ((addr - 0x100000) + len)))
++    errnum = ERR_WONT_FIT;
++
++  return ! errnum;
++}
++
++void *
++grub_memmove (void *to, const void *from, int len)
++{
++   if (memcheck ((int) to, len))
++     {
++       /* This assembly code is stolen from
++        linux-2.2.2/include/asm-i386/string.h. This is not very fast
++        but compact.  */
++       int d0, d1, d2;
++
++       if (to < from)
++       {
++         asm volatile ("cld\n\t"
++                       "rep\n\t"
++                       "movsb"
++                       : "=&c" (d0), "=&S" (d1), "=&D" (d2)
++                       : "0" (len),"1" (from),"2" (to)
++                       : "memory");
++       }
++       else
++       {
++         asm volatile ("std\n\t"
++                       "rep\n\t"
++                       "movsb\n\t"
++                       "cld"
++                       : "=&c" (d0), "=&S" (d1), "=&D" (d2)
++                       : "0" (len),
++                       "1" (len - 1 + (const char *) from),
++                       "2" (len - 1 + (char *) to)
++                       : "memory");
++       }
++     }
++
++   return errnum ? NULL : to;
++}
++
++void *
++grub_memset (void *start, int c, int len)
++{
++  char *p = start;
++
++  if (memcheck ((int) start, len))
++    {
++      while (len -- > 0)
++      *p ++ = c;
++    }
++
++  return errnum ? NULL : start;
++}
++
++#ifndef STAGE1_5
++char *
++grub_strcpy (char *dest, const char *src)
++{
++  grub_memmove (dest, src, grub_strlen (src) + 1);
++  return dest;
++}
++#endif /* ! STAGE1_5 */
++
++#ifndef GRUB_UTIL
++# undef memcpy
++/* GCC emits references to memcpy() for struct copies etc.  */
++void *memcpy (void *dest, const void *src, int n)  __attribute__ ((alias ("grub_memmove")));
++#endif
+diff -Nur grub-0.97/stage2/common.c grub-0.97-patched/stage2/common.c
+--- grub-0.97/stage2/common.c  2004-03-27 17:25:44.000000000 +0100
++++ grub-0.97-patched/stage2/common.c  2012-11-11 17:06:52.558085305 +0100
+@@ -142,7 +142,8 @@
+ init_bios_info (void)
+ {
+ #ifndef STAGE1_5
+-  unsigned long cont, memtmp, addr;
++  unsigned long memtmp, addr;
++  volatile unsigned long cont;
+   int drive;
+ #endif
+diff -Nur grub-0.97/stage2/disk_io.c grub-0.97-patched/stage2/disk_io.c
+--- grub-0.97/stage2/disk_io.c 2004-05-23 18:35:24.000000000 +0200
++++ grub-0.97-patched/stage2/disk_io.c 2012-11-11 17:07:12.740730013 +0100
+@@ -21,6 +21,7 @@
+ #include <shared.h>
+ #include <filesys.h>
++#include <gpt.h>
+ #ifdef SUPPORT_NETBOOT
+ # define GRUB 1
+@@ -137,7 +138,7 @@
+ }
+ int
+-rawread (int drive, int sector, int byte_offset, int byte_len, char *buf)
++rawread (int drive, unsigned int sector, int byte_offset, int byte_len, char *buf)
+ {
+   int slen, sectors_per_vtrack;
+   int sector_size_bits = log2 (buf_geom.sector_size);
+@@ -261,7 +262,7 @@
+        */
+       if (disk_read_func)
+       {
+-        int sector_num = sector;
++        unsigned int sector_num = sector;
+         int length = buf_geom.sector_size - byte_offset;
+         if (length > size)
+           length = size;
+@@ -291,7 +292,7 @@
+ int
+-devread (int sector, int byte_offset, int byte_len, char *buf)
++devread (unsigned int sector, int byte_offset, int byte_len, char *buf)
+ {
+   /*
+    *  Check partition boundaries
+@@ -330,7 +331,7 @@
+ #ifndef STAGE1_5
+ int
+-rawwrite (int drive, int sector, char *buf)
++rawwrite (int drive, unsigned int sector, char *buf)
+ {
+   if (sector == 0)
+     {
+@@ -363,7 +364,7 @@
+ }
+ int
+-devwrite (int sector, int sector_count, char *buf)
++devwrite (unsigned int sector, int sector_count, char *buf)
+ {
+ #if defined(GRUB_UTIL) && defined(__linux__)
+   if (current_partition != 0xFFFFFF
+@@ -502,8 +503,8 @@
+ set_partition_hidden_flag (int hidden)
+ {
+   unsigned long part = 0xFFFFFF;
+-  unsigned long start, len, offset, ext_offset;
+-  int entry, type;
++  unsigned long start, len, offset, ext_offset, gpt_offset;
++  int entry, type, gpt_count, gpt_size;
+   char mbr[512];
+   
+   /* The drive must be a hard disk.  */
+@@ -524,8 +525,15 @@
+   /* Look for the partition.  */
+   while (next_partition (current_drive, 0xFFFFFF, &part, &type,           
+                        &start, &len, &offset, &entry,
+-                       &ext_offset, mbr))
++                       &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr))
+     {                                                                       
++        /* The partition may not be a GPT partition.  */
++        if (gpt_offset != 0)
++          {
++              errnum = ERR_BAD_ARGUMENT;
++              return 1;
++          }
++
+       if (part == current_partition)
+       {
+         /* Found.  */
+@@ -577,11 +585,14 @@
+               unsigned long *partition, int *type,
+               unsigned long *start, unsigned long *len,
+               unsigned long *offset, int *entry,
+-              unsigned long *ext_offset, char *buf)
++               unsigned long *ext_offset,
++               unsigned long *gpt_offset, int *gpt_count,
++               int *gpt_size, char *buf)
+ {
+   /* Forward declarations.  */
+   auto int next_bsd_partition (void);
+   auto int next_pc_slice (void);
++  auto int next_gpt_slice(void);
+   /* Get next BSD partition in current PC slice.  */
+   int next_bsd_partition (void)
+@@ -666,6 +677,40 @@
+         return 0;
+       }
++      /* If this is a GPT partition table, read it as such.  */
++      if (*entry == -1 && *offset == 0 && PC_SLICE_TYPE (buf, 0) == PC_SLICE_TYPE_GPT)
++       {
++         struct grub_gpt_header *hdr = (struct grub_gpt_header *) buf;
++
++         /* Read in the GPT Partition table header.  */
++         if (! rawread (drive, 1, 0, SECTOR_SIZE, buf))
++           return 0;
++
++         if (hdr->magic == GPT_HEADER_MAGIC && hdr->version == 0x10000)
++           {
++             /* Let gpt_offset point to the first entry in the GPT
++                partition table.  This can also be used by callers of
++                next_partition to determine if a entry comes from a
++                GPT partition table or not.  */
++             *gpt_offset = hdr->partitions;
++             *gpt_count = hdr->maxpart;
++             *gpt_size =  hdr->partentry_size;
++             
++             return next_gpt_slice();
++           }
++         else
++           {
++             /* This is not a valid header for a GPT partition table.
++                Re-read the MBR or the boot sector of the extended
++                partition.  */
++             if (! rawread (drive, *offset, 0, SECTOR_SIZE, buf))
++               return 0;
++           }
++       }
++
++      /* Not a GPT partition.  */
++      *gpt_offset = 0;
++
+       /* Increase the entry number.  */
+       (*entry)++;
+@@ -710,6 +755,43 @@
+       return 1;
+     }
++  /* Get the next GPT slice.  */
++  int next_gpt_slice (void)
++    {
++      struct grub_gpt_partentry *gptentry = (struct grub_gpt_partentry *) buf;
++      /* Make GPT partitions show up as PC slices.  */
++      int pc_slice_no = (*partition & 0xFF0000) >> 16;
++
++      /* If this is the first time...  */
++      if (pc_slice_no == 0xFF)
++       {
++         pc_slice_no = -1;
++         *entry = -1;
++       }
++
++      do {
++       (*entry)++;
++
++       if (*entry >= *gpt_count)
++         {
++           errnum = ERR_NO_PART;
++           return 0;
++         }
++       /* Read in the GPT Partition table entry.  */
++       if (! rawread (drive, (*gpt_offset) + GPT_ENTRY_SECTOR (*gpt_size, *entry), GPT_ENTRY_INDEX (*gpt_size, *entry), *gpt_size, buf))
++         return 0;
++      } while (! (gptentry->type1 && gptentry->type2));
++
++      pc_slice_no++;
++      *start = gptentry->start;
++      *len = gptentry->end - gptentry->start + 1;
++      *type = PC_SLICE_TYPE_EXT2FS;
++      *entry = pc_slice_no;
++      *partition = (*entry << 16) | 0xFFFF;
++
++      return 1;
++    }
++
+   /* Start the body of this function.  */
+   
+ #ifndef STAGE1_5
+@@ -717,6 +799,9 @@
+     return 0;
+ #endif
++  if (*partition != 0xFFFFFF && *gpt_offset != 0)
++    return next_gpt_slice ();
++
+   /* If previous partition is a BSD partition or a PC slice which
+      contains BSD partitions...  */
+   if ((*partition != 0xFFFFFF && IS_PC_SLICE_TYPE_BSD (*type & 0xff))
+@@ -746,6 +831,8 @@
+ #ifndef STAGE1_5
+ static unsigned long cur_part_offset;
+ static unsigned long cur_part_addr;
++static unsigned long cur_part_start;
++static int cur_part_entry;
+ #endif
+ /* Open a partition.  */
+@@ -755,6 +842,9 @@
+   unsigned long dest_partition = current_partition;
+   unsigned long part_offset;
+   unsigned long ext_offset;
++  unsigned long gpt_offset;
++  int gpt_count;
++  int gpt_size;
+   int entry;
+   char buf[SECTOR_SIZE];
+   int bsd_part, pc_slice;
+@@ -766,7 +856,8 @@
+       int ret = next_partition (current_drive, dest_partition,
+                               &current_partition, &current_slice,
+                               &part_start, &part_length,
+-                              &part_offset, &entry, &ext_offset, buf);
++                               &part_offset, &entry, &ext_offset,
++                               &gpt_offset, &gpt_count, &gpt_size, buf);
+       bsd_part = (current_partition >> 8) & 0xFF;
+       pc_slice = current_partition >> 16;
+       return ret;
+@@ -800,7 +891,12 @@
+   /* If this is the whole disk, return here.  */
+   if (! flags && current_partition == 0xFFFFFF)
+-    return 1;
++    {
++#ifndef STAGE1_5
++      cur_part_offset = 0;
++#endif /* ! STAGE1_5 */
++      return 1;
++    }
+   if (flags)
+     dest_partition = 0xFFFFFF;
+@@ -815,6 +911,8 @@
+       
+       cur_part_offset = part_offset;
+       cur_part_addr = BOOT_PART_TABLE + (entry << 4);
++      cur_part_start = part_start;
++      cur_part_entry = entry;
+ #endif /* ! STAGE1_5 */
+       /* If this is a valid partition...  */
+@@ -1142,6 +1240,7 @@
+         src = (char *) SCRATCHADDR + BOOTSEC_PART_OFFSET;
+         while (dst < (char *) BOOT_PART_TABLE + BOOTSEC_PART_LENGTH)
+           *dst++ = *src++;
++        PC_SLICE_START (BOOT_PART_TABLE - PC_SLICE_OFFSET, cur_part_entry) = cur_part_start;
+         
+         /* Set the active flag of the booted partition.  */
+         for (i = 0; i < 4; i++)
+diff -Nur grub-0.97/stage2/fsys_ext2fs.c grub-0.97-patched/stage2/fsys_ext2fs.c
+--- grub-0.97/stage2/fsys_ext2fs.c     2004-08-08 20:19:18.000000000 +0200
++++ grub-0.97-patched/stage2/fsys_ext2fs.c     2012-11-11 17:07:12.750730331 +0100
+@@ -41,6 +41,7 @@
+ typedef unsigned short __u16;
+ typedef __signed__ int __s32;
+ typedef unsigned int __u32;
++typedef unsigned long long __u64;
+ /*
+  * Constants relative to the data blocks, from ext2_fs.h
+@@ -61,9 +62,9 @@
+     __u32 s_free_inodes_count;        /* Free inodes count */
+     __u32 s_first_data_block; /* First Data Block */
+     __u32 s_log_block_size;   /* Block size */
+-    __s32 s_log_frag_size;    /* Fragment size */
++    __s32 s_obso_log_frag_size;       /* Obsoleted Fragment size */
+     __u32 s_blocks_per_group; /* # Blocks per group */
+-    __u32 s_frags_per_group;  /* # Fragments per group */
++    __u32 s_obso_frags_per_group;     /* Obsoleted Fragments per group */
+     __u32 s_inodes_per_group; /* # Inodes per group */
+     __u32 s_mtime;            /* Mount time */
+     __u32 s_wtime;            /* Write time */
+@@ -72,17 +73,62 @@
+     __u16 s_magic;            /* Magic signature */
+     __u16 s_state;            /* File system state */
+     __u16 s_errors;           /* Behaviour when detecting errors */
+-    __u16 s_pad;
++    __u16 s_minor_rev_level;  /* minor revision level */
+     __u32 s_lastcheck;                /* time of last check */
+     __u32 s_checkinterval;    /* max. time between checks */
+     __u32 s_creator_os;               /* OS */
+     __u32 s_rev_level;                /* Revision level */
+     __u16 s_def_resuid;               /* Default uid for reserved blocks */
+     __u16 s_def_resgid;               /* Default gid for reserved blocks */
+-    __u32 s_reserved[235];    /* Padding to the end of the block */
++    /*
++     * These fields are for EXT2_DYNAMIC_REV superblocks only.
++     *
++     * Note: the difference between the compatible feature set and
++     * the incompatible feature set is that if there is a bit set
++     * in the incompatible feature set that the kernel doesn't
++     * know about, it should refuse to mount the filesystem.
++     *
++     * e2fsck's requirements are more strict; if it doesn't know
++     * about a feature in either the compatible or incompatible
++     * feature set, it must abort and not try to meddle with
++     * things it doesn't understand...
++     */
++    __u32 s_first_ino;                /* First non-reserved inode */
++    __u16 s_inode_size;               /* size of inode structure */
++    __u16 s_block_group_nr;   /* block group # of this superblock */
++    __u32 s_feature_compat;   /* compatible feature set */
++    __u32 s_feature_incompat; /* incompatible feature set */
++    __u32 s_feature_ro_compat;        /* readonly-compatible feature set */
++    __u8  s_uuid[16];         /* 128-bit uuid for volume */
++    char  s_volume_name[16];  /* volume name */
++    char  s_last_mounted[64]; /* directory where last mounted */
++    __u32 s_algorithm_usage_bitmap; /* For compression */
++    /*
++     * Performance hints.  Directory preallocation should only
++     * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on.
++     */
++    __u8  s_prealloc_blocks;  /* Nr of blocks to try to preallocate*/
++    __u8  s_prealloc_dir_blocks;      /* Nr to preallocate for dirs */
++    __u16 s_reserved_gdt_blocks;/* Per group table for online growth */
++    /*
++     * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set.
++     */
++    __u8 s_journal_uuid[16];  /* uuid of journal superblock */
++    __u32 s_journal_inum;     /* inode number of journal file */
++    __u32 s_journal_dev;      /* device number of journal file */
++    __u32 s_last_orphan;      /* start of list of inodes to delete */
++    __u32 s_hash_seed[4];     /* HTREE hash seed */
++    __u8  s_def_hash_version; /* Default hash version to use */
++    __u8  s_jnl_backup_type;  /* Default type of journal backup */
++    __u16 s_desc_size;                /* size of group descriptor */
++    __u32 s_default_mount_opts;
++    __u32 s_first_meta_bg;    /* First metablock group */
++    __u32 s_mkfs_time;                /* When the filesystem was created */
++    __u32 s_jnl_blocks[17];   /* Backup of the journal inode */
++    __u32 s_reserved[172];    /* Padding to the end of the block */
+   };
+-struct ext2_group_desc
++struct ext4_group_desc
+   {
+     __u32 bg_block_bitmap;    /* Blocks bitmap block */
+     __u32 bg_inode_bitmap;    /* Inodes bitmap block */
+@@ -90,8 +136,18 @@
+     __u16 bg_free_blocks_count;       /* Free blocks count */
+     __u16 bg_free_inodes_count;       /* Free inodes count */
+     __u16 bg_used_dirs_count; /* Directories count */
+-    __u16 bg_pad;
+-    __u32 bg_reserved[3];
++    __u16 bg_flags;           /* EXT4_BG_flags (INODE_UNINIT, etc) */
++    __u32 bg_reserved[2];             /* Likely block/inode bitmap checksum */
++    __u16 bg_itable_unused;   /* Unused inodes count */
++    __u16 bg_checksum;                /* crc16(sb_uuid+group+desc) */
++    __u32 bg_block_bitmap_hi; /* Blocks bitmap block MSB */
++    __u32 bg_inode_bitmap_hi; /* Inodes bitmap block MSB */
++    __u32 bg_inode_table_hi;  /* Inodes table block MSB */
++    __u16 bg_free_blocks_count_hi;/* Free blocks count MSB */
++    __u16 bg_free_inodes_count_hi;/* Free inodes count MSB */
++    __u16 bg_used_dirs_count_hi;      /* Directories count MSB */
++    __u16 bg_itable_unused_hi;        /* Unused inodes count MSB */
++    __u32 bg_reserved2[3];
+   };
+ struct ext2_inode
+@@ -129,22 +185,22 @@
+     __u32 i_block[EXT2_N_BLOCKS];     /* 40: Pointers to blocks */
+     __u32 i_version;          /* File version (for NFS) */
+     __u32 i_file_acl;         /* File ACL */
+-    __u32 i_dir_acl;          /* Directory ACL */
+-    __u32 i_faddr;            /* Fragment address */
++    __u32 i_size_high;
++    __u32 i_obso_faddr;               /* Obsoleted fragment address */
+     union
+       {
+       struct
+         {
+-          __u8 l_i_frag;      /* Fragment number */
+-          __u8 l_i_fsize;     /* Fragment size */
+-          __u16 i_pad1;
+-          __u32 l_i_reserved2[2];
++              __u16   l_i_blocks_high; /* were l_i_reserved1 */
++              __u16   l_i_file_acl_high;
++              __u16   l_i_uid_high;   /* these 2 fields */
++              __u16   l_i_gid_high;   /* were reserved2[0] */
++              __u32   l_i_reserved2;
+         }
+       linux2;
+       struct
+         {
+-          __u8 h_i_frag;      /* Fragment number */
+-          __u8 h_i_fsize;     /* Fragment size */
++              __u16   h_i_reserved1;  /* Obsoleted fragment number/size which are removed in ext4 */
+           __u16 h_i_mode_high;
+           __u16 h_i_uid_high;
+           __u16 h_i_gid_high;
+@@ -153,16 +209,36 @@
+       hurd2;
+       struct
+         {
+-          __u8 m_i_frag;      /* Fragment number */
+-          __u8 m_i_fsize;     /* Fragment size */
+-          __u16 m_pad1;
++              __u16   h_i_reserved1;  /* Obsoleted fragment number/size which are removed in ext4 */
++              __u16   m_i_file_acl_high;
+           __u32 m_i_reserved2[2];
+         }
+       masix2;
+       }
+     osd2;                     /* OS dependent 2 */
++      __u16   i_extra_isize;
++      __u16   i_pad1;
++      __u32  i_ctime_extra;  /* extra Change time      (nsec << 2 | epoch) */
++      __u32  i_mtime_extra;  /* extra Modification time(nsec << 2 | epoch) */
++      __u32  i_atime_extra;  /* extra Access time      (nsec << 2 | epoch) */
++      __u32  i_crtime;       /* File Creation time */
++      __u32  i_crtime_extra; /* extra FileCreationtime (nsec << 2 | epoch) */
++      __u32  i_version_hi;    /* high 32 bits for 64-bit version */
+   };
++#define EXT4_FEATURE_INCOMPAT_EXTENTS         0x0040 /* extents support */
++#define EXT4_FEATURE_INCOMPAT_64BIT                   0x0080 /* grub not supported*/
++#define EXT4_FEATURE_INCOMPAT_MMP           0x0100
++#define EXT4_FEATURE_INCOMPAT_FLEX_BG         0x0200
++
++#define EXT4_HAS_INCOMPAT_FEATURE(sb,mask)                    \
++      ( sb->s_feature_incompat & mask )
++
++#define EXT4_EXTENTS_FL               0x00080000 /* Inode uses extents */
++#define EXT4_HUGE_FILE_FL     0x00040000 /* Set to each huge file */
++
++#define EXT4_MIN_DESC_SIZE                    32
++
+ /* linux/limits.h */
+ #define NAME_MAX         255  /* # chars in a file name */
+@@ -180,6 +256,57 @@
+     char name[EXT2_NAME_LEN]; /* File name */
+   };
++/* linux/ext4_fs_extents.h */ 
++/* This is the extent on-disk structure.
++ * It's used at the bottom of the tree.
++ */
++struct ext4_extent 
++  {
++      __u32  ee_block;   /* first logical block extent covers */
++      __u16  ee_len;     /* number of blocks covered by extent */
++      __u16  ee_start_hi;    /* high 16 bits of physical block */
++      __u32  ee_start_lo;    /* low 32 bits of physical block */
++  };
++
++/*
++ * This is index on-disk structure.
++ * It's used at all the levels except the bottom.
++ */
++struct ext4_extent_idx 
++  {
++    __u32  ei_block;   /* index covers logical blocks from 'block' */
++    __u32  ei_leaf_lo; /* pointer to the physical block of the next *
++                           * level. leaf or next index could be there */
++    __u16  ei_leaf_hi; /* high 16 bits of physical block */
++    __u16  ei_unused;
++  };
++
++/*
++ * Each block (leaves and indexes), even inode-stored has header.
++ */
++struct ext4_extent_header 
++  {
++    __u16  eh_magic;   /* probably will support different formats */
++    __u16  eh_entries; /* number of valid entries */
++    __u16  eh_max;     /* capacity of store in entries */
++    __u16  eh_depth;   /* has tree real underlying blocks? */
++    __u32  eh_generation;  /* generation of the tree */
++  };
++
++#define EXT4_EXT_MAGIC      (0xf30a)
++#define EXT_FIRST_EXTENT(__hdr__) \
++    ((struct ext4_extent *) (((char *) (__hdr__)) +     \
++                 sizeof(struct ext4_extent_header)))
++#define EXT_FIRST_INDEX(__hdr__) \
++    ((struct ext4_extent_idx *) (((char *) (__hdr__)) + \
++                 sizeof(struct ext4_extent_header)))
++#define EXT_LAST_EXTENT(__hdr__) \
++    (EXT_FIRST_EXTENT((__hdr__)) + (__u16)((__hdr__)->eh_entries) - 1)
++#define EXT_LAST_INDEX(__hdr__) \
++    (EXT_FIRST_INDEX((__hdr__)) + (__u16)((__hdr__)->eh_entries) - 1)
++
++
++
+ /* linux/ext2fs.h */
+ /*
+  * EXT2_DIR_PAD defines the directory entries boundaries
+@@ -218,13 +345,30 @@
+ #define EXT2_ADDR_PER_BLOCK(s)          (EXT2_BLOCK_SIZE(s) / sizeof (__u32))
+ #define EXT2_ADDR_PER_BLOCK_BITS(s)           (log2(EXT2_ADDR_PER_BLOCK(s)))
++#define EXT2_GOOD_OLD_REV     0       /* The good old (original) format */
++#define EXT2_DYNAMIC_REV      1       /* V2 format w/ dynamic inode sizes */
++#define EXT2_GOOD_OLD_INODE_SIZE 128
++#define EXT2_INODE_SIZE(s)    (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \
++                              EXT2_GOOD_OLD_INODE_SIZE : \
++                              (s)->s_inode_size)
++#define EXT2_INODES_PER_BLOCK(s)      (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s))
++
+ /* linux/ext2_fs.h */
+ #define EXT2_BLOCK_SIZE_BITS(s)        ((s)->s_log_block_size + 10)
+ /* kind of from ext2/super.c */
+ #define EXT2_BLOCK_SIZE(s)    (1 << EXT2_BLOCK_SIZE_BITS(s))
+ /* linux/ext2fs.h */
++/* sizeof(struct ext2_group_desc) is changed in ext4 
++ * in kernel code, ext2/3 uses sizeof(struct ext2_group_desc) to calculate 
++ * number of desc per block, while ext4 uses superblock->s_desc_size in stead
++ * superblock->s_desc_size is not available in ext2/3
++ * */
++#define EXT2_DESC_SIZE(s) \
++      (EXT4_HAS_INCOMPAT_FEATURE(s,EXT4_FEATURE_INCOMPAT_64BIT)? \
++      s->s_desc_size : EXT4_MIN_DESC_SIZE)
+ #define EXT2_DESC_PER_BLOCK(s) \
+-     (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc))
++      (EXT2_BLOCK_SIZE(s) / EXT2_DESC_SIZE(s))
++
+ /* linux/stat.h */
+ #define S_IFMT  00170000
+ #define S_IFLNK  0120000
+@@ -386,6 +530,122 @@
+     [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)];
+ }
++/* extent binary search index
++ * find closest index in the current level extent tree
++ * kind of from ext4_ext_binsearch_idx in ext4/extents.c
++ */
++static struct ext4_extent_idx*
++ext4_ext_binsearch_idx(struct ext4_extent_header* eh, int logical_block)
++{
++  struct ext4_extent_idx *r, *l, *m;
++  l = EXT_FIRST_INDEX(eh) + 1;
++  r = EXT_LAST_INDEX(eh);
++  while (l <= r) 
++    {
++        m = l + (r - l) / 2;
++        if (logical_block < m->ei_block)
++                r = m - 1;
++        else
++                l = m + 1;
++      }
++  return (struct ext4_extent_idx*)(l - 1);
++}
++
++/* extent binary search 
++ * find closest extent in the leaf level 
++ * kind of from ext4_ext_binsearch in ext4/extents.c
++ */
++static struct ext4_extent*
++ext4_ext_binsearch(struct ext4_extent_header* eh, int logical_block)
++{
++  struct ext4_extent *r, *l, *m;
++  l = EXT_FIRST_EXTENT(eh) + 1;
++  r = EXT_LAST_EXTENT(eh);
++  while (l <= r) 
++    {
++        m = l + (r - l) / 2;
++        if (logical_block < m->ee_block)
++                r = m - 1;
++        else
++                l = m + 1;
++      }
++  return (struct ext4_extent*)(l - 1);
++}
++
++/* Maps extents enabled logical block into physical block via an inode. 
++ * EXT4_HUGE_FILE_FL should be checked before calling this.
++ */
++static int
++ext4fs_block_map (int logical_block)
++{
++  struct ext4_extent_header *eh;
++  struct ext4_extent *ex, *extent;
++  struct ext4_extent_idx *ei, *index;
++  int depth;
++  int i;
++
++#ifdef E2DEBUG
++  unsigned char *i;
++  for (i = (unsigned char *) INODE;
++       i < ((unsigned char *) INODE + sizeof (struct ext2_inode));
++       i++)
++    {
++      printf ("%c", "0123456789abcdef"[*i >> 4]);
++      printf ("%c", "0123456789abcdef"[*i % 16]);
++      if (!((i + 1 - (unsigned char *) INODE) % 16))
++      {
++        printf ("\n");
++      }
++      else
++      {
++        printf (" ");
++      }
++    }
++  printf ("logical block %d\n", logical_block);
++#endif /* E2DEBUG */
++  eh = (struct ext4_extent_header*)INODE->i_block;
++  if (eh->eh_magic != EXT4_EXT_MAGIC)
++  {
++          errnum = ERR_FSYS_CORRUPT;
++          return -1;
++  }
++  while((depth = eh->eh_depth) != 0)
++      { /* extent index */
++        if (eh->eh_magic != EXT4_EXT_MAGIC)
++        {
++                errnum = ERR_FSYS_CORRUPT;
++                return -1;
++        }
++        ei = ext4_ext_binsearch_idx(eh, logical_block);
++        if (ei->ei_leaf_hi)
++      {/* 64bit physical block number not supported */
++        errnum = ERR_FILELENGTH;
++        return -1;
++      }
++        if (!ext2_rdfsb(ei->ei_leaf_lo, DATABLOCK1))
++      {
++        errnum = ERR_FSYS_CORRUPT;
++        return -1;
++      }
++        eh = (struct ext4_extent_header*)DATABLOCK1;
++      }
++
++  /* depth==0, we come to the leaf */
++  ex = ext4_ext_binsearch(eh, logical_block);
++  if (ex->ee_start_hi) 
++      {/* 64bit physical block number not supported */
++        errnum = ERR_FILELENGTH;
++        return -1;
++      }
++  if ((ex->ee_block + ex->ee_len) < logical_block)
++      {
++        errnum = ERR_FSYS_CORRUPT;
++        return -1;
++      }
++  return ex->ee_start_lo + logical_block - ex->ee_block;
++
++}
++
+ /* preconditions: all preconds of ext2fs_block_map */
+ int
+ ext2fs_read (char *buf, int len)
+@@ -420,6 +680,11 @@
+       /* find the (logical) block component of our location */
+       logical_block = filepos >> EXT2_BLOCK_SIZE_BITS (SUPERBLOCK);
+       offset = filepos & (EXT2_BLOCK_SIZE (SUPERBLOCK) - 1);
++      /* map extents enabled logical block number to physical fs on-dick block number */
++      if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK,EXT4_FEATURE_INCOMPAT_EXTENTS) 
++                    && INODE->i_flags & EXT4_EXTENTS_FL)
++          map = ext4fs_block_map (logical_block);
++      else
+       map = ext2fs_block_map (logical_block);
+ #ifdef E2DEBUG
+       printf ("map=%d\n", map);
+@@ -504,7 +769,7 @@
+   int desc;                   /* index within that group */
+   int ino_blk;                        /* fs pointer of the inode's information */
+   int str_chk = 0;            /* used to hold the results of a string compare */
+-  struct ext2_group_desc *gdp;
++  struct ext4_group_desc *ext4_gdp;
+   struct ext2_inode *raw_inode;       /* inode info corresponding to current_ino */
+   char linkbuf[PATH_MAX];     /* buffer for following symbolic links */
+@@ -550,10 +815,17 @@
+       {
+         return 0;
+       }
+-      gdp = GROUP_DESC;
+-      ino_blk = gdp[desc].bg_inode_table +
++        ext4_gdp = (struct ext4_group_desc *)( (__u8*)GROUP_DESC + 
++                                      desc * EXT2_DESC_SIZE(SUPERBLOCK));
++        if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK, EXT4_FEATURE_INCOMPAT_64BIT)
++              && (! ext4_gdp->bg_inode_table_hi))
++      {/* 64bit itable not supported */
++        errnum = ERR_FILELENGTH;
++        return -1;
++      }
++      ino_blk = ext4_gdp->bg_inode_table + 
+       (((current_ino - 1) % (SUPERBLOCK->s_inodes_per_group))
+-       >> log2 (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)));
++       >> log2 (EXT2_INODES_PER_BLOCK (SUPERBLOCK)));
+ #ifdef E2DEBUG
+       printf ("inode table fsblock=%d\n", ino_blk);
+ #endif /* E2DEBUG */
+@@ -565,13 +837,12 @@
+       /* reset indirect blocks! */
+       mapblock2 = mapblock1 = -1;
+-      raw_inode = INODE +
+-      ((current_ino - 1)
+-       & (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode) - 1));
++      raw_inode = (struct ext2_inode *)((char *)INODE +
++      ((current_ino - 1) & (EXT2_INODES_PER_BLOCK (SUPERBLOCK) - 1)) *
++      EXT2_INODE_SIZE (SUPERBLOCK));
+ #ifdef E2DEBUG
+       printf ("ipb=%d, sizeof(inode)=%d\n",
+-            (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)),
+-            sizeof (struct ext2_inode));
++            EXT2_INODES_PER_BLOCK (SUPERBLOCK), EXT2_INODE_SIZE (SUPERBLOCK));
+       printf ("inode=%x, raw_inode=%x\n", INODE, raw_inode);
+       printf ("offset into inode table block=%d\n", (int) raw_inode - (int) INODE);
+       for (i = (unsigned char *) INODE; i <= (unsigned char *) raw_inode;
+@@ -629,7 +900,10 @@
+           }
+         linkbuf[filemax + len] = '\0';
+-        /* Read the symlink data. */
++        /* Read the symlink data. 
++         * Slow symlink is extents enabled
++         * But since grub_read invokes ext2fs_read, nothing to change here
++         * */
+         if (! ext2_is_fast_symlink ())
+           {
+             /* Read the necessary blocks, and reset the file pointer. */
+@@ -640,7 +914,9 @@
+           }
+         else
+           {
+-            /* Copy the data directly from the inode. */
++            /* Copy the data directly from the inode. 
++                 * Fast symlink is not extents enabled
++                 * */
+             len = filemax;
+             memmove (linkbuf, (char *) INODE->i_block, len);
+           }
+@@ -674,6 +950,13 @@
+             errnum = ERR_BAD_FILETYPE;
+             return 0;
+           }
++        /* if file is too large, just stop and report an error*/
++        if ( (INODE->i_flags & EXT4_HUGE_FILE_FL) && !(INODE->i_size_high))
++          {
++                /* file too large, stop reading */
++                errnum = ERR_FILELENGTH;
++                return 0;
++          }
+         filemax = (INODE->i_size);
+         return 1;
+@@ -728,17 +1011,28 @@
+           }
+         /* else, find the (logical) block component of our location */
++        /* ext4 logical block number the same as ext2/3 */
+         blk = loc >> EXT2_BLOCK_SIZE_BITS (SUPERBLOCK);
+         /* we know which logical block of the directory entry we are looking
+            for, now we have to translate that to the physical (fs) block on
+            the disk */
++        /* map extents enabled logical block number to physical fs on-dick block number */
++        if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK,EXT4_FEATURE_INCOMPAT_EXTENTS) 
++                        && INODE->i_flags & EXT4_EXTENTS_FL)
++              map = ext4fs_block_map (blk);
++        else
+         map = ext2fs_block_map (blk);
+ #ifdef E2DEBUG
+         printf ("fs block=%d\n", map);
+ #endif /* E2DEBUG */
+         mapblock2 = -1;
+-        if ((map < 0) || !ext2_rdfsb (map, DATABLOCK2))
++        if (map < 0) 
++        {
++            *rest = ch;
++            return 0;
++        }
++          if (!ext2_rdfsb (map, DATABLOCK2))
+           {
+             errnum = ERR_FSYS_CORRUPT;
+             *rest = ch;
+diff -Nur grub-0.97/stage2/gpt.h grub-0.97-patched/stage2/gpt.h
+--- grub-0.97/stage2/gpt.h     1970-01-01 01:00:00.000000000 +0100
++++ grub-0.97-patched/stage2/gpt.h     2012-11-11 17:07:12.697728638 +0100
+@@ -0,0 +1,68 @@
++/*
++ *  GRUB  --  GRand Unified Bootloader
++ *  Copyright (C) 2002,2005,2006   Free Software Foundation, Inc.
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License as published by
++ *  the Free Software Foundation; either version 2 of the License, or
++ *  (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the Free Software
++ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#ifndef _GPT_H
++#define _GPT_H
++
++typedef signed char grub_int8_t;
++typedef signed short grub_int16_t;
++typedef signed int grub_int32_t;
++typedef signed long long int grub_int64_t;
++typedef unsigned char grub_uint8_t;
++typedef unsigned short grub_uint16_t;
++typedef unsigned int grub_uint32_t;
++typedef unsigned long long int grub_uint64_t;
++
++struct grub_gpt_header
++{
++  grub_uint64_t magic;
++  grub_uint32_t version;
++  grub_uint32_t headersize;
++  grub_uint32_t crc32;
++  grub_uint32_t unused1;
++  grub_uint64_t primary;
++  grub_uint64_t backup;
++  grub_uint64_t start;
++  grub_uint64_t end;
++  grub_uint8_t guid[16];
++  grub_uint64_t partitions;
++  grub_uint32_t maxpart;
++  grub_uint32_t partentry_size;
++  grub_uint32_t partentry_crc32;
++} __attribute__ ((packed));
++
++struct grub_gpt_partentry
++{
++  grub_uint64_t type1;
++  grub_uint64_t type2;
++  grub_uint8_t guid[16];
++  grub_uint64_t start;
++  grub_uint64_t end;
++  grub_uint8_t attrib;
++  char name[72];
++} __attribute__ ((packed));
++
++#define GPT_HEADER_MAGIC       0x5452415020494645UL
++
++#define        GPT_ENTRY_SECTOR(size,entry)                                    \
++       ((((entry) * (size) + 1) & ~(SECTOR_SIZE - 1)) >> SECTOR_BITS)
++#define        GPT_ENTRY_INDEX(size,entry)                                     \
++       ((((entry) * (size) + 1) & (SECTOR_SIZE - 1)) - 1)
++
++#endif /* _GPT_H */
+diff -Nur grub-0.97/stage2/graphics.c grub-0.97-patched/stage2/graphics.c
+--- grub-0.97/stage2/graphics.c        1970-01-01 01:00:00.000000000 +0100
++++ grub-0.97-patched/stage2/graphics.c        2012-11-11 17:06:33.320470847 +0100
+@@ -0,0 +1,563 @@
++/* graphics.c - graphics mode support for GRUB */
++/* Implemented as a terminal type by Jeremy Katz <katzj@redhat.com> based
++ * on a patch by Paulo César Pereira de Andrade <pcpa@conectiva.com.br>
++ */
++/*
++ *  GRUB  --  GRand Unified Bootloader
++ *  Copyright (C) 2001,2002  Red Hat, Inc.
++ *  Portions copyright (C) 2000  Conectiva, Inc.
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License as published by
++ *  the Free Software Foundation; either version 2 of the License, or
++ *  (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the Free Software
++ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++
++
++#ifdef SUPPORT_GRAPHICS
++
++#include <term.h>
++#include <shared.h>
++#include <graphics.h>
++
++int saved_videomode;
++unsigned char *font8x16;
++
++int graphics_inited = 0;
++static char splashimage[64];
++
++#define VSHADOW VSHADOW1
++unsigned char VSHADOW1[38400];
++unsigned char VSHADOW2[38400];
++unsigned char VSHADOW4[38400];
++unsigned char VSHADOW8[38400];
++
++/* constants to define the viewable area */
++const int x0 = 0;
++const int x1 = 80;
++const int y0 = 0;
++const int y1 = 30;
++
++/* text buffer has to be kept around so that we can write things as we
++ * scroll and the like */
++unsigned short text[80 * 30];
++
++/* why do these have to be kept here? */
++int foreground = (63 << 16) | (63 << 8) | (63), background = 0, border = 0;
++
++/* current position */
++static int fontx = 0;
++static int fonty = 0;
++
++/* global state so that we don't try to recursively scroll or cursor */
++static int no_scroll = 0;
++
++/* color state */
++static int graphics_standard_color = A_NORMAL;
++static int graphics_normal_color = A_NORMAL;
++static int graphics_highlight_color = A_REVERSE;
++static int graphics_current_color = A_NORMAL;
++static color_state graphics_color_state = COLOR_STATE_STANDARD;
++
++
++/* graphics local functions */
++static void graphics_setxy(int col, int row);
++static void graphics_scroll();
++
++/* FIXME: where do these really belong? */
++static inline void outb(unsigned short port, unsigned char val)
++{
++    __asm __volatile ("outb %0,%1"::"a" (val), "d" (port));
++}
++
++static void MapMask(int value) {
++    outb(0x3c4, 2);
++    outb(0x3c5, value);
++}
++
++/* bit mask register */
++static void BitMask(int value) {
++    outb(0x3ce, 8);
++    outb(0x3cf, value);
++}
++
++
++
++/* Set the splash image */
++void graphics_set_splash(char *splashfile) {
++    grub_strcpy(splashimage, splashfile);
++}
++
++/* Get the current splash image */
++char *graphics_get_splash(void) {
++    return splashimage;
++}
++
++/* Initialize a vga16 graphics display with the palette based off of
++ * the image in splashimage.  If the image doesn't exist, leave graphics
++ * mode.  */
++int graphics_init()
++{
++    if(!grub_file_exists(splashimage)) {
++        return 0;
++    }
++
++    if (!graphics_inited) {
++        saved_videomode = set_videomode(0x12);
++    }
++
++    if (!read_image(splashimage)) {
++        set_videomode(saved_videomode);
++        grub_printf("failed to read image\n");
++        return 0;
++    }
++
++    font8x16 = (unsigned char*)graphics_get_font();
++
++    graphics_inited = 1;
++
++    /* make sure that the highlight color is set correctly */
++    graphics_highlight_color = ((graphics_normal_color >> 4) | 
++                              ((graphics_normal_color & 0xf) << 4));
++
++    return 1;
++}
++
++/* Leave graphics mode */
++void graphics_end(void)
++{
++    if (graphics_inited) {
++        set_videomode(saved_videomode);
++        graphics_inited = 0;
++    }
++}
++
++/* Print ch on the screen.  Handle any needed scrolling or the like */
++void graphics_putchar(int ch) {
++    ch &= 0xff;
++
++    graphics_cursor(0);
++
++    if (ch == '\n') {
++        if (fonty + 1 < y1)
++            graphics_setxy(fontx, fonty + 1);
++        else
++            graphics_scroll();
++        graphics_cursor(1);
++        return;
++    } else if (ch == '\r') {
++        graphics_setxy(x0, fonty);
++        graphics_cursor(1);
++        return;
++    }
++
++    graphics_cursor(0);
++
++    text[fonty * 80 + fontx] = ch;
++    text[fonty * 80 + fontx] &= 0x00ff;
++    if (graphics_current_color & 0xf0)
++        text[fonty * 80 + fontx] |= 0x100;
++
++    graphics_cursor(0);
++
++    if ((fontx + 1) >= x1) {
++        graphics_setxy(x0, fonty);
++        if (fonty + 1 < y1)
++            graphics_setxy(x0, fonty + 1);
++        else
++            graphics_scroll();
++    } else {
++        graphics_setxy(fontx + 1, fonty);
++    }
++
++    graphics_cursor(1);
++}
++
++/* get the current location of the cursor */
++int graphics_getxy(void) {
++    return (fontx << 8) | fonty;
++}
++
++void graphics_gotoxy(int x, int y) {
++    graphics_cursor(0);
++
++    graphics_setxy(x, y);
++
++    graphics_cursor(1);
++}
++
++void graphics_cls(void) {
++    int i;
++    unsigned char *mem, *s1, *s2, *s4, *s8;
++
++    graphics_cursor(0);
++    graphics_gotoxy(x0, y0);
++
++    mem = (unsigned char*)VIDEOMEM;
++    s1 = (unsigned char*)VSHADOW1;
++    s2 = (unsigned char*)VSHADOW2;
++    s4 = (unsigned char*)VSHADOW4;
++    s8 = (unsigned char*)VSHADOW8;
++
++    for (i = 0; i < 80 * 30; i++)
++        text[i] = ' ';
++    graphics_cursor(1);
++
++    BitMask(0xff);
++
++    /* plano 1 */
++    MapMask(1);
++    grub_memcpy(mem, s1, 38400);
++
++    /* plano 2 */
++    MapMask(2);
++    grub_memcpy(mem, s2, 38400);
++
++    /* plano 3 */
++    MapMask(4);
++    grub_memcpy(mem, s4, 38400);
++
++    /* plano 4 */
++    MapMask(8);
++    grub_memcpy(mem, s8, 38400);
++
++    MapMask(15);
++ 
++}
++
++void graphics_setcolorstate (color_state state) {
++    switch (state) {
++    case COLOR_STATE_STANDARD:
++        graphics_current_color = graphics_standard_color;
++        break;
++    case COLOR_STATE_NORMAL:
++        graphics_current_color = graphics_normal_color;
++        break;
++    case COLOR_STATE_HIGHLIGHT:
++        graphics_current_color = graphics_highlight_color;
++        break;
++    default:
++        graphics_current_color = graphics_standard_color;
++        break;
++    }
++
++    graphics_color_state = state;
++}
++
++void graphics_setcolor (int normal_color, int highlight_color) {
++    graphics_normal_color = normal_color;
++    graphics_highlight_color = highlight_color;
++
++    graphics_setcolorstate (graphics_color_state);
++}
++
++void graphics_setcursor (int on) {
++    /* FIXME: we don't have a cursor in graphics */
++    return;
++}
++
++/* Read in the splashscreen image and set the palette up appropriately.
++ * Format of splashscreen is an xpm (can be gzipped) with 16 colors and
++ * 640x480. */
++int read_image(char *s)
++{
++    char buf[32], pal[16];
++    unsigned char c, base, mask, *s1, *s2, *s4, *s8;
++    unsigned i, len, idx, colors, x, y, width, height;
++
++    if (!grub_open(s))
++        return 0;
++
++    /* read header */
++    if (!grub_read((char*)&buf, 10) || grub_memcmp(buf, "/* XPM */\n", 10)) {
++        grub_close();
++        return 0;
++    }
++    
++    /* parse info */
++    while (grub_read(&c, 1)) {
++        if (c == '"')
++            break;
++    }
++
++    while (grub_read(&c, 1) && (c == ' ' || c == '\t'))
++        ;
++
++    i = 0;
++    width = c - '0';
++    while (grub_read(&c, 1)) {
++        if (c >= '0' && c <= '9')
++            width = width * 10 + c - '0';
++        else
++            break;
++    }
++    while (grub_read(&c, 1) && (c == ' ' || c == '\t'))
++        ;
++
++    height = c - '0';
++    while (grub_read(&c, 1)) {
++        if (c >= '0' && c <= '9')
++            height = height * 10 + c - '0';
++        else
++            break;
++    }
++    while (grub_read(&c, 1) && (c == ' ' || c == '\t'))
++        ;
++
++    colors = c - '0';
++    while (grub_read(&c, 1)) {
++        if (c >= '0' && c <= '9')
++            colors = colors * 10 + c - '0';
++        else
++            break;
++    }
++
++    base = 0;
++    while (grub_read(&c, 1) && c != '"')
++        ;
++
++    /* palette */
++    for (i = 0, idx = 1; i < colors; i++) {
++        len = 0;
++
++        while (grub_read(&c, 1) && c != '"')
++            ;
++        grub_read(&c, 1);       /* char */
++        base = c;
++        grub_read(buf, 4);      /* \t c # */
++
++        while (grub_read(&c, 1) && c != '"') {
++            if (len < sizeof(buf))
++                buf[len++] = c;
++        }
++
++        if (len == 6 && idx < 15) {
++            int r = ((hex(buf[0]) << 4) | hex(buf[1])) >> 2;
++            int g = ((hex(buf[2]) << 4) | hex(buf[3])) >> 2;
++            int b = ((hex(buf[4]) << 4) | hex(buf[5])) >> 2;
++
++            pal[idx] = base;
++            graphics_set_palette(idx, r, g, b);
++            ++idx;
++        }
++    }
++
++    x = y = len = 0;
++
++    s1 = (unsigned char*)VSHADOW1;
++    s2 = (unsigned char*)VSHADOW2;
++    s4 = (unsigned char*)VSHADOW4;
++    s8 = (unsigned char*)VSHADOW8;
++
++    for (i = 0; i < 38400; i++)
++        s1[i] = s2[i] = s4[i] = s8[i] = 0;
++
++    /* parse xpm data */
++    while (y < height) {
++        while (1) {
++            if (!grub_read(&c, 1)) {
++                grub_close();
++                return 0;
++            }
++            if (c == '"')
++                break;
++        }
++
++        while (grub_read(&c, 1) && c != '"') {
++            for (i = 1; i < 15; i++)
++                if (pal[i] == c) {
++                    c = i;
++                    break;
++                }
++
++            mask = 0x80 >> (x & 7);
++            if (c & 1)
++                s1[len + (x >> 3)] |= mask;
++            if (c & 2)
++                s2[len + (x >> 3)] |= mask;
++            if (c & 4)
++                s4[len + (x >> 3)] |= mask;
++            if (c & 8)
++                s8[len + (x >> 3)] |= mask;
++
++            if (++x >= 640) {
++                x = 0;
++
++                if (y < 480)
++                    len += 80;
++                ++y;
++            }
++        }
++    }
++
++    grub_close();
++
++    graphics_set_palette(0, (background >> 16), (background >> 8) & 63, 
++                background & 63);
++    graphics_set_palette(15, (foreground >> 16), (foreground >> 8) & 63, 
++                foreground & 63);
++    graphics_set_palette(0x11, (border >> 16), (border >> 8) & 63, 
++                         border & 63);
++
++    return 1;
++}
++
++
++/* Convert a character which is a hex digit to the appropriate integer */
++int hex(int v)
++{
++    if (v >= 'A' && v <= 'F')
++        return (v - 'A' + 10);
++    if (v >= 'a' && v <= 'f')
++        return (v - 'a' + 10);
++    return (v - '0');
++}
++
++
++/* move the graphics cursor location to col, row */
++static void graphics_setxy(int col, int row) {
++    if (col >= x0 && col < x1) {
++        fontx = col;
++        cursorX = col << 3;
++    }
++    if (row >= y0 && row < y1) {
++        fonty = row;
++        cursorY = row << 4;
++    }
++}
++
++/* scroll the screen */
++static void graphics_scroll() {
++    int i, j;
++
++    /* we don't want to scroll recursively... that would be bad */
++    if (no_scroll)
++        return;
++    no_scroll = 1;
++
++    /* move everything up a line */
++    for (j = y0 + 1; j < y1; j++) {
++        graphics_gotoxy(x0, j - 1);
++        for (i = x0; i < x1; i++) {
++            graphics_putchar(text[j * 80 + i]);
++        }
++    }
++
++    /* last line should be blank */
++    graphics_gotoxy(x0, y1 - 1);
++    for (i = x0; i < x1; i++)
++        graphics_putchar(' ');
++    graphics_setxy(x0, y1 - 1);
++
++    no_scroll = 0;
++}
++
++
++void graphics_cursor(int set) {
++    unsigned char *pat, *mem, *ptr, chr[16 << 2];
++    int i, ch, invert, offset;
++
++    if (set && no_scroll)
++        return;
++
++    offset = cursorY * 80 + fontx;
++    ch = text[fonty * 80 + fontx] & 0xff;
++    invert = (text[fonty * 80 + fontx] & 0xff00) != 0;
++    pat = font8x16 + (ch << 4);
++
++    mem = (unsigned char*)VIDEOMEM + offset;
++
++    if (!set) {
++        for (i = 0; i < 16; i++) {
++            unsigned char mask = pat[i];
++
++            if (!invert) {
++                chr[i     ] = ((unsigned char*)VSHADOW1)[offset];
++                chr[16 + i] = ((unsigned char*)VSHADOW2)[offset];
++                chr[32 + i] = ((unsigned char*)VSHADOW4)[offset];
++                chr[48 + i] = ((unsigned char*)VSHADOW8)[offset];
++
++                /* FIXME: if (shade) */
++                if (1) {
++                    if (ch == DISP_VERT || ch == DISP_LL ||
++                        ch == DISP_UR || ch == DISP_LR) {
++                        unsigned char pmask = ~(pat[i] >> 1);
++
++                        chr[i     ] &= pmask;
++                        chr[16 + i] &= pmask;
++                        chr[32 + i] &= pmask;
++                        chr[48 + i] &= pmask;
++                    }
++                    if (i > 0 && ch != DISP_VERT) {
++                        unsigned char pmask = ~(pat[i - 1] >> 1);
++
++                        chr[i     ] &= pmask;
++                        chr[16 + i] &= pmask;
++                        chr[32 + i] &= pmask;
++                        chr[48 + i] &= pmask;
++                        if (ch == DISP_HORIZ || ch == DISP_UR || ch == DISP_LR) {
++                            pmask = ~pat[i - 1];
++
++                            chr[i     ] &= pmask;
++                            chr[16 + i] &= pmask;
++                            chr[32 + i] &= pmask;
++                            chr[48 + i] &= pmask;
++                        }
++                    }
++                }
++                chr[i     ] |= mask;
++                chr[16 + i] |= mask;
++                chr[32 + i] |= mask;
++                chr[48 + i] |= mask;
++
++                offset += 80;
++            }
++            else {
++                chr[i     ] = mask;
++                chr[16 + i] = mask;
++                chr[32 + i] = mask;
++                chr[48 + i] = mask;
++            }
++        }
++    }
++    else {
++        MapMask(15);
++        ptr = mem;
++        for (i = 0; i < 16; i++, ptr += 80) {
++            cursorBuf[i] = pat[i];
++            *ptr = ~pat[i];
++        }
++        return;
++    }
++
++    offset = 0;
++    for (i = 1; i < 16; i <<= 1, offset += 16) {
++        int j;
++
++        MapMask(i);
++        ptr = mem;
++        for (j = 0; j < 16; j++, ptr += 80)
++            *ptr = chr[j + offset];
++    }
++
++    MapMask(15);
++}
++
++int grub_file_exists(char *s) {
++    if (!grub_open(s))
++        return 0;
++    grub_close();
++    return 1;
++}
++
++#endif /* SUPPORT_GRAPHICS */
+diff -Nur grub-0.97/stage2/graphics.h grub-0.97-patched/stage2/graphics.h
+--- grub-0.97/stage2/graphics.h        1970-01-01 01:00:00.000000000 +0100
++++ grub-0.97-patched/stage2/graphics.h        2012-11-11 17:06:33.321470879 +0100
+@@ -0,0 +1,45 @@
++/* graphics.h - graphics console interface */
++/*
++ *  GRUB  --  GRand Unified Bootloader
++ *  Copyright (C) 2002  Free Software Foundation, Inc.
++ *
++ *  This program is free software; you can redistribute it and/or modify
++ *  it under the terms of the GNU General Public License as published by
++ *  the Free Software Foundation; either version 2 of the License, or
++ *  (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You should have received a copy of the GNU General Public License
++ *  along with this program; if not, write to the Free Software
++ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ */
++
++#ifndef GRAPHICS_H
++#define GRAPHICS_H
++
++/* magic constant */
++#define VIDEOMEM 0xA0000
++
++/* function prototypes */
++char *graphics_get_splash(void);
++
++int read_image(char *s);
++void graphics_cursor(int set);
++
++/* function prototypes for asm functions */
++void * graphics_get_font();
++void graphics_set_palette(int idx, int red, int green, int blue);
++void set_int1c_handler();
++void unset_int1c_handler();
++
++/* Only to check for safe opening before we start */
++int grub_file_exists(char *s);
++
++extern short cursorX, cursorY;
++extern char cursorBuf[16];
++
++#endif /* GRAPHICS_H */
+diff -Nur grub-0.97/stage2/iso9660.h grub-0.97-patched/stage2/iso9660.h
+--- grub-0.97/stage2/iso9660.h 2004-03-27 17:02:38.000000000 +0100
++++ grub-0.97-patched/stage2/iso9660.h 2012-11-11 17:07:12.740730013 +0100
+@@ -73,11 +73,11 @@
+ typedef       struct __iso_16bit {
+   u_int16_t l, b;
+-} iso_16bit_t __attribute__ ((packed));
++} iso_16bit_t;
+ typedef       struct __iso_32bit {
+   u_int32_t l, b;
+-} iso_32bit_t __attribute__ ((packed));
++} iso_32bit_t;
+ typedef u_int8_t              iso_date_t[7];
+diff -Nur grub-0.97/stage2/Makefile.am grub-0.97-patched/stage2/Makefile.am
+--- grub-0.97/stage2/Makefile.am       2005-02-02 21:37:35.000000000 +0100
++++ grub-0.97-patched/stage2/Makefile.am       2012-11-11 17:07:12.747730236 +0100
+@@ -7,7 +7,7 @@
+         fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \
+       imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \
+       nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \
+-      terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h
++      terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h graphics.h
+ EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS)
+ # For <stage1.h>.
+@@ -19,20 +19,20 @@
+       disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \
+       fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \
+       fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \
+-      terminfo.c tparm.c
+-libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \
++      terminfo.c tparm.c graphics.c
++libgrub_a_CFLAGS = $(GRUB_CFLAGS) -fno-stack-protector -I$(top_srcdir)/lib \
+       -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \
+       -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \
+       -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \
+       -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1
+ # Stage 2 and Stage 1.5's.
+-pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
++stagedir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
+ EXTRA_PROGRAMS = nbloader.exec pxeloader.exec diskless.exec
+ if DISKLESS_SUPPORT
+-pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
++stage_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
+       ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \
+       reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 \
+       nbgrub pxegrub
+@@ -43,7 +43,7 @@
+       reiserfs_stage1_5.exec ufs2_stage1_5.exec vstafs_stage1_5.exec \
+       xfs_stage1_5.exec nbloader.exec pxeloader.exec diskless.exec
+ else
+-pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
++stage_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
+       ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \
+       reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5
+ noinst_DATA = pre_stage2 start start_eltorito
+@@ -79,8 +79,14 @@
+ HERCULES_FLAGS =
+ endif
+-STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
+-      $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS)
++if GRAPHICS_SUPPORT
++GRAPHICS_FLAGS = -DSUPPORT_GRAPHICS=1
++else
++GRAPHICS_FLAGS =
++endif
++
++STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-reorder-functions -fno-builtin -nostdinc \
++      $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) $(GRAPHICS_FLAGS)
+ STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000
+ STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1
+@@ -90,7 +96,8 @@
+       cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \
+       fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \
+       fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \
+-      hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c
++      hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c \
++      graphics.c
+ pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
+ pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
+ pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK)
+@@ -105,7 +112,7 @@
+ BUILT_SOURCES = stage2_size.h
+ endif
+-CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES)
++CLEANFILES = $(stage_DATA) $(noinst_DATA) $(BUILT_SOURCES)
+ stage2_size.h: pre_stage2
+       -rm -f stage2_size.h
+diff -Nur grub-0.97/stage2/Makefile.am.orig grub-0.97-patched/stage2/Makefile.am.orig
+--- grub-0.97/stage2/Makefile.am.orig  1970-01-01 01:00:00.000000000 +0100
++++ grub-0.97-patched/stage2/Makefile.am.orig  2005-02-02 21:37:35.000000000 +0100
+@@ -0,0 +1,272 @@
++# For test target.
++TESTS = size_test
++noinst_SCRIPTS = $(TESTS)
++
++# For dist target.
++noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \
++        fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \
++      imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \
++      nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \
++      terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h
++EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS)
++
++# For <stage1.h>.
++INCLUDES = -I$(top_srcdir)/stage1
++
++# The library for /sbin/grub.
++noinst_LIBRARIES = libgrub.a
++libgrub_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \
++      disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \
++      fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \
++      fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \
++      terminfo.c tparm.c
++libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \
++      -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \
++      -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \
++      -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \
++      -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1
++
++# Stage 2 and Stage 1.5's.
++pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor)
++
++EXTRA_PROGRAMS = nbloader.exec pxeloader.exec diskless.exec
++
++if DISKLESS_SUPPORT
++pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
++      ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \
++      reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 \
++      nbgrub pxegrub
++noinst_DATA = pre_stage2 start start_eltorito nbloader pxeloader diskless
++noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \
++      e2fs_stage1_5.exec fat_stage1_5.exec ffs_stage1_5.exec \
++      iso9660_stage1_5.exec jfs_stage1_5.exec minix_stage1_5.exec \
++      reiserfs_stage1_5.exec ufs2_stage1_5.exec vstafs_stage1_5.exec \
++      xfs_stage1_5.exec nbloader.exec pxeloader.exec diskless.exec
++else
++pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \
++      ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \
++      reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5
++noinst_DATA = pre_stage2 start start_eltorito
++noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \
++      e2fs_stage1_5.exec fat_stage1_5.exec ffs_stage1_5.exec \
++      iso9660_stage1_5.exec jfs_stage1_5.exec minix_stage1_5.exec \
++      reiserfs_stage1_5.exec ufs2_stage1_5.exec vstafs_stage1_5.exec \
++      xfs_stage1_5.exec
++endif
++MOSTLYCLEANFILES = $(noinst_PROGRAMS)
++
++PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200
++START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000
++NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0
++PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00
++START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00
++
++if NETBOOT_SUPPORT
++NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1
++else
++NETBOOT_FLAGS =
++endif
++
++if SERIAL_SUPPORT
++SERIAL_FLAGS = -DSUPPORT_SERIAL=1
++else
++SERIAL_FLAGS =
++endif
++
++if HERCULES_SUPPORT
++HERCULES_FLAGS = -DSUPPORT_HERCULES=1
++else
++HERCULES_FLAGS =
++endif
++
++STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
++      $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS)
++
++STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000
++STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1
++
++# For stage2 target.
++pre_stage2_exec_SOURCES = asm.S bios.c boot.c builtins.c char_io.c \
++      cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \
++      fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \
++      fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \
++      hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c
++pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
++pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
++pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK)
++
++if NETBOOT_SUPPORT
++pre_stage2_exec_LDADD = ../netboot/libdrivers.a
++endif
++
++if DISKLESS_SUPPORT
++BUILT_SOURCES = stage2_size.h diskless_size.h
++else
++BUILT_SOURCES = stage2_size.h
++endif
++
++CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES)
++
++stage2_size.h: pre_stage2
++      -rm -f stage2_size.h
++      set dummy `ls -l pre_stage2`; \
++      echo "#define STAGE2_SIZE $$6" > stage2_size.h
++
++start_exec_SOURCES = start.S
++start_exec_CCASFLAGS = $(STAGE2_COMPILE)
++start_exec_LDFLAGS = $(START_LINK)
++
++# XXX: automake doesn't provide a way to specify dependencies for object
++# files explicitly, so we must write this by a general Makefile scheme.
++# If automake change the naming scheme for per-executable objects, this
++# will be broken.
++start_exec-start.$(OBJEXT): stage2_size.h
++
++stage2: pre_stage2 start
++      -rm -f stage2
++      cat start pre_stage2 > stage2
++
++start_eltorito_exec_SOURCES = start_eltorito.S
++start_eltorito_exec_CCASFLAGS = $(STAGE2_COMPILE)
++start_eltorito_exec_LDFLAGS = $(START_ELTORITO_LINK)
++
++start_eltorito_exec-start.$(OBJEXT): stage2_size.h
++
++stage2_eltorito: pre_stage2 start_eltorito
++      -rm -f stage2_eltorito
++      cat start_eltorito pre_stage2 > stage2_eltorito
++
++# For e2fs_stage1_5 target.
++e2fs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
++      stage1_5.c fsys_ext2fs.c bios.c
++e2fs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \
++      -DNO_BLOCK_FILES=1
++e2fs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \
++      -DNO_BLOCK_FILES=1
++e2fs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
++
++# For fat_stage1_5 target.
++fat_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
++      stage1_5.c fsys_fat.c bios.c
++fat_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \
++      -DNO_BLOCK_FILES=1
++fat_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \
++      -DNO_BLOCK_FILES=1
++fat_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
++
++# For ffs_stage1_5 target.
++ffs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
++      stage1_5.c fsys_ffs.c bios.c
++ffs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \
++      -DNO_BLOCK_FILES=1
++ffs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \
++      -DNO_BLOCK_FILES=1
++ffs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
++
++# For ufs2_stage1_5 target.
++ufs2_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
++      stage1_5.c fsys_ufs2.c bios.c
++ufs2_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \
++      -DNO_BLOCK_FILES=1
++ufs2_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \
++      -DNO_BLOCK_FILES=1
++ufs2_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
++
++# For minix_stage1_5 target.
++minix_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \
++      stage1_5.c fsys_minix.c bios.c
++minix_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \
++      -DNO_BLOCK_FILES=1
++minix_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \
++      -DNO_BLOCK_FILES=1
++minix_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
++
++# For reiserfs_stage1_5 target.
++reiserfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
++      disk_io.c stage1_5.c fsys_reiserfs.c bios.c
++reiserfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \
++      -DNO_BLOCK_FILES=1
++reiserfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \
++      -DNO_BLOCK_FILES=1
++reiserfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
++
++# For vstafs_stage1_5 target.
++vstafs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
++      disk_io.c stage1_5.c fsys_vstafs.c bios.c
++vstafs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \
++      -DNO_BLOCK_FILES=1
++vstafs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \
++      -DNO_BLOCK_FILES=1
++vstafs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
++
++# For jfs_stage1_5 target.
++jfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
++      disk_io.c stage1_5.c fsys_jfs.c bios.c
++jfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
++      -DNO_BLOCK_FILES=1
++jfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
++      -DNO_BLOCK_FILES=1
++jfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
++
++# For xfs_stage1_5 target.
++xfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
++      disk_io.c stage1_5.c fsys_xfs.c bios.c
++xfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
++      -DNO_BLOCK_FILES=1
++xfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
++      -DNO_BLOCK_FILES=1
++xfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
++
++# For iso9660_stage1_5 target.
++iso9660_stage1_5_exec_SOURCES = start_eltorito.S asm.S common.c char_io.c \
++      disk_io.c stage1_5.c fsys_iso9660.c bios.c
++iso9660_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \
++      -DNO_BLOCK_FILES=1
++iso9660_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \
++      -DNO_BLOCK_FILES=1
++iso9660_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
++
++# For diskless target.
++diskless_exec_SOURCES = $(pre_stage2_exec_SOURCES)
++diskless_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \
++      -DSUPPORT_DISKLESS=1
++diskless_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \
++      -DSUPPORT_DISKLESS=1
++diskless_exec_LDFLAGS = $(PRE_STAGE2_LINK)
++diskless_exec_LDADD = ../netboot/libdrivers.a
++
++diskless_size.h: diskless
++      -rm -f $@
++      set dummy `ls -l $^`; \
++      echo "#define DISKLESS_SIZE $$6" > $@
++
++# For nbloader target.
++nbloader_exec_SOURCES = nbloader.S
++nbloader_exec_CCASFLAGS = $(STAGE2_COMPILE)
++nbloader_exec_LDFLAGS = $(NBLOADER_LINK)
++
++# XXX: See the comment for start_exec-start.o.
++nbloader_exec-nbloader.$(OBJEXT): diskless_size.h
++
++# For nbgrub target.
++nbgrub: nbloader diskless
++      -rm -f $@
++      cat $^ > $@
++
++# For pxeloader target.
++pxeloader_exec_SOURCES = pxeloader.S
++pxeloader_exec_CCASFLAGS = $(STAGE2_COMPILE)
++pxeloader_exec_LDFLAGS = $(PXELOADER_LINK)
++
++# XXX: See the comment for start_exec-start.o.
++pxeloader_exec-pxeloader.$(OBJEXT): diskless_size.h
++
++# For pxegrub target.
++pxegrub: pxeloader diskless
++      -rm -f $@
++      cat $^ > $@
++
++# General rule for making a raw binary.
++SUFFIXES = .exec
++.exec:
++      $(OBJCOPY) -O binary $< $@
+diff -Nur grub-0.97/stage2/pc_slice.h grub-0.97-patched/stage2/pc_slice.h
+--- grub-0.97/stage2/pc_slice.h        2003-07-09 13:45:53.000000000 +0200
++++ grub-0.97-patched/stage2/pc_slice.h        2012-11-11 17:07:12.698728671 +0100
+@@ -115,6 +115,7 @@
+ #define PC_SLICE_TYPE_LINUX_EXTENDED  0x85
+ #define PC_SLICE_TYPE_VSTAFS          0x9e
+ #define PC_SLICE_TYPE_DELL_UTIL               0xde
++#define PC_SLICE_TYPE_GPT              0xee
+ #define PC_SLICE_TYPE_LINUX_RAID      0xfd
+diff -Nur grub-0.97/stage2/shared.h grub-0.97-patched/stage2/shared.h
+--- grub-0.97/stage2/shared.h  2004-06-19 18:40:09.000000000 +0200
++++ grub-0.97-patched/stage2/shared.h  2012-11-11 17:07:12.741730044 +0100
+@@ -36,8 +36,8 @@
+ /* Maybe redirect memory requests through grub_scratch_mem. */
+ #ifdef GRUB_UTIL
+-extern char *grub_scratch_mem;
+-# define RAW_ADDR(x) ((x) + (int) grub_scratch_mem)
++extern void *grub_scratch_mem;
++# define RAW_ADDR(x) ((x) + (unsigned long) grub_scratch_mem)
+ # define RAW_SEG(x) (RAW_ADDR ((x) << 4) >> 4)
+ #else
+ # define RAW_ADDR(x) (x)
+@@ -161,7 +161,9 @@
+ #define LINUX_CL_OFFSET                       0x9000
+ #define LINUX_CL_END_OFFSET           0x90FF
+-#define LINUX_SETUP_MOVE_SIZE         0x9100
++#define LINUX_CL_0202_PRM_OFFSET      0x9500
++#define LINUX_CL_0202_PRM_END_OFFSET  0x9FFF
++#define LINUX_SETUP_MOVE_SIZE         0xA000
+ #define LINUX_CL_MAGIC                        0xA33F
+ /*
+@@ -499,7 +501,11 @@
+   unsigned char linear_reserved_field_position;
+   unsigned long max_pixel_clock;
+-  unsigned char reserved3[189];
++  /* Reserved field to make structure to be 256 bytes long, VESA BIOS 
++     Extension 3.0 Specification says to reserve 189 bytes here but 
++     that doesn't make structure to be 256 bytes.  So additional one is 
++     added here.  */
++  unsigned char reserved3[189 + 1];
+ } __attribute__ ((packed));
+@@ -807,7 +813,7 @@
+ /* Low-level disk I/O */
+ int get_diskinfo (int drive, struct geometry *geometry);
+ int biosdisk (int subfunc, int drive, struct geometry *geometry,
+-            int sector, int nsec, int segment);
++            unsigned int sector, int nsec, int segment);
+ void stop_floppy (void);
+ /* Command-line interface functions. */
+@@ -871,6 +877,7 @@
+ int grub_tolower (int c);
+ int grub_isspace (int c);
+ int grub_strncat (char *s1, const char *s2, int n);
++void grub_memcpy(void *dest, const void *src, int len);
+ void *grub_memmove (void *to, const void *from, int len);
+ void *grub_memset (void *start, int c, int len);
+ int grub_strncat (char *s1, const char *s2, int n);
+@@ -911,7 +918,7 @@
+ int nul_terminate (char *str);
+ int get_based_digit (int c, int base);
+ int safe_parse_maxint (char **str_ptr, int *myint_ptr);
+-int memcheck (int start, int len);
++int memcheck (unsigned long start, unsigned long len);
+ void grub_putstr (const char *str);
+ #ifndef NO_DECOMPRESSION
+@@ -920,10 +927,10 @@
+ int gunzip_read (char *buf, int len);
+ #endif /* NO_DECOMPRESSION */
+-int rawread (int drive, int sector, int byte_offset, int byte_len, char *buf);
+-int devread (int sector, int byte_offset, int byte_len, char *buf);
+-int rawwrite (int drive, int sector, char *buf);
+-int devwrite (int sector, int sector_len, char *buf);
++int rawread (int drive, unsigned int sector, int byte_offset, int byte_len, char *buf);
++int devread (unsigned int sector, int byte_offset, int byte_len, char *buf);
++int rawwrite (int drive, unsigned int sector, char *buf);
++int devwrite (unsigned int sector, int sector_len, char *buf);
+ /* Parse a device string and initialize the global parameters. */
+ char *set_device (char *device);
+@@ -934,7 +941,9 @@
+                   unsigned long *partition, int *type,
+                   unsigned long *start, unsigned long *len,
+                   unsigned long *offset, int *entry,
+-                  unsigned long *ext_offset, char *buf);
++                   unsigned long *ext_offset,
++                   unsigned long *gpt_offset, int *gpt_count,
++                   int *gpt_size, char *buf);
+ /* Sets device to the one represented by the SAVED_* parameters. */
+ int make_saved_active (void);
+diff -Nur grub-0.97/stage2/size_test grub-0.97-patched/stage2/size_test
+--- grub-0.97/stage2/size_test 2004-05-14 21:30:52.000000000 +0200
++++ grub-0.97-patched/stage2/size_test 2012-11-11 17:06:52.554085177 +0100
+@@ -36,9 +36,9 @@
+ }
+ # The bootloader area of a FFS partition is 14 sectors.
+-check ffs_stage1_5 7168
+-
+-check ufs2_stage1_5 7168
++#check ffs_stage1_5 7168
++#
++#check ufs2_stage1_5 7168
+ # Stage 1.5 can be installed in the sectors immediately after MBR in the
+ # first cylinder, so the size is (63 - 1) sectors.
+diff -Nur grub-0.97/stage2/stage2.c grub-0.97-patched/stage2/stage2.c
+--- grub-0.97/stage2/stage2.c  2005-03-19 18:51:57.000000000 +0100
++++ grub-0.97-patched/stage2/stage2.c  2012-11-11 17:07:12.742730076 +0100
+@@ -233,6 +233,7 @@
+ {
+   int c, time1, time2 = -1, first_entry = 0;
+   char *cur_entry = 0;
++  struct term_entry *prev_term = NULL;
+   /*
+    *  Main loop for menu UI.
+@@ -651,7 +652,10 @@
+                 *(new_heap++) = 0;
+                 if (config_entries)
+-                  run_menu (heap, NULL, new_num_entries, new_heap, 0);
++                  {
++                    current_entryno = first_entry + entryno;
++                    run_menu (heap, NULL, new_num_entries, new_heap, 0);
++                  }
+                 else
+                   {
+                     cls ();
+@@ -714,6 +718,15 @@
+   
+   cls ();
+   setcursor (1);
++  /* if our terminal needed initialization, we should shut it down
++   * before booting the kernel, but we want to save what it was so
++   * we can come back if needed */
++  prev_term = current_term;
++  if (current_term->shutdown) 
++    {
++      (*current_term->shutdown)();
++      current_term = term_table; /* assumption: console is first */
++    }
+   
+   while (1)
+     {
+@@ -727,7 +740,8 @@
+       cur_entry = get_entry (config_entries, first_entry + entryno, 1);
+       /* Set CURRENT_ENTRYNO for the command "savedefault".  */
+-      current_entryno = first_entry + entryno;
++      if (config_entries)
++      current_entryno = first_entry + entryno;
+       
+       if (run_script (cur_entry, heap))
+       {
+@@ -748,6 +762,13 @@
+       break;
+     }
++  /* if we get back here, we should go back to what our term was before */
++  current_term = prev_term;
++  if (current_term->startup)
++      /* if our terminal fails to initialize, fall back to console since
++       * it should always work */
++      if ((*current_term->startup)() == 0)
++          current_term = term_table; /* we know that console is first */
+   show_menu = 1;
+   goto restart;
+ }
+@@ -1050,6 +1071,10 @@
+         while (is_preset);
+       }
++      /* go ahead and make sure the terminal is setup */
++      if (current_term->startup)
++        (*current_term->startup)();
++
+       if (! num_entries)
+       {
+         /* If no acceptable config file, goto command-line, starting
+diff -Nur grub-0.97/stage2/stage2.c.orig grub-0.97-patched/stage2/stage2.c.orig
+--- grub-0.97/stage2/stage2.c.orig     1970-01-01 01:00:00.000000000 +0100
++++ grub-0.97-patched/stage2/stage2.c.orig     2005-03-19 18:51:57.000000000 +0100
+@@ -0,0 +1,1067 @@
++/*
++ *  GRUB  --  GRand Unified Bootloader
++ *  Copyright (C) 2000,2001,2002,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 of the License, or
++ *  (at your option) any later version.
++ *
++ *  This program is distributed in the hope that it will be useful,
++ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
++ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ *  GNU General Public License for more details.
++ *
++ *  You 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.
++ */
++
++#include <shared.h>
++#include <term.h>
++
++grub_jmp_buf restart_env;
++
++#if defined(PRESET_MENU_STRING) || defined(SUPPORT_DISKLESS)
++
++# if defined(PRESET_MENU_STRING)
++static const char *preset_menu = PRESET_MENU_STRING;
++# elif defined(SUPPORT_DISKLESS)
++/* Execute the command "bootp" automatically.  */
++static const char *preset_menu = "bootp\n";
++# endif /* SUPPORT_DISKLESS */
++
++static int preset_menu_offset;
++
++static int
++open_preset_menu (void)
++{
++#ifdef GRUB_UTIL
++  /* Unless the user explicitly requests to use the preset menu,
++     always opening the preset menu fails in the grub shell.  */
++  if (! use_preset_menu)
++    return 0;
++#endif /* GRUB_UTIL */
++  
++  preset_menu_offset = 0;
++  return preset_menu != 0;
++}
++
++static int
++read_from_preset_menu (char *buf, int maxlen)
++{
++  int len = grub_strlen (preset_menu + preset_menu_offset);
++
++  if (len > maxlen)
++    len = maxlen;
++
++  grub_memmove (buf, preset_menu + preset_menu_offset, len);
++  preset_menu_offset += len;
++
++  return len;
++}
++
++static void
++close_preset_menu (void)
++{
++  /* Disable the preset menu.  */
++  preset_menu = 0;
++}
++
++#else /* ! PRESET_MENU_STRING && ! SUPPORT_DISKLESS */
++
++#define open_preset_menu()    0
++#define read_from_preset_menu(buf, maxlen)    0
++#define close_preset_menu()
++
++#endif /* ! PRESET_MENU_STRING && ! SUPPORT_DISKLESS */
++
++static char *
++get_entry (char *list, int num, int nested)
++{
++  int i;
++
++  for (i = 0; i < num; i++)
++    {
++      do
++      {
++        while (*(list++));
++      }
++      while (nested && *(list++));
++    }
++
++  return list;
++}
++
++/* Print an entry in a line of the menu box.  */
++static void
++print_entry (int y, int highlight, char *entry)
++{
++  int x;
++
++  if (current_term->setcolorstate)
++    current_term->setcolorstate (COLOR_STATE_NORMAL);
++  
++  if (highlight && current_term->setcolorstate)
++    current_term->setcolorstate (COLOR_STATE_HIGHLIGHT);
++
++  gotoxy (2, y);
++  grub_putchar (' ');
++  for (x = 3; x < 75; x++)
++    {
++      if (*entry && x <= 72)
++      {
++        if (x == 72)
++          grub_putchar (DISP_RIGHT);
++        else
++          grub_putchar (*entry++);
++      }
++      else
++      grub_putchar (' ');
++    }
++  gotoxy (74, y);
++
++  if (current_term->setcolorstate)
++    current_term->setcolorstate (COLOR_STATE_STANDARD);
++}
++
++/* Print entries in the menu box.  */
++static void
++print_entries (int y, int size, int first, int entryno, char *menu_entries)
++{
++  int i;
++  
++  gotoxy (77, y + 1);
++
++  if (first)
++    grub_putchar (DISP_UP);
++  else
++    grub_putchar (' ');
++
++  menu_entries = get_entry (menu_entries, first, 0);
++
++  for (i = 0; i < size; i++)
++    {
++      print_entry (y + i + 1, entryno == i, menu_entries);
++
++      while (*menu_entries)
++      menu_entries++;
++
++      if (*(menu_entries - 1))
++      menu_entries++;
++    }
++
++  gotoxy (77, y + size);
++
++  if (*menu_entries)
++    grub_putchar (DISP_DOWN);
++  else
++    grub_putchar (' ');
++
++  gotoxy (74, y + entryno + 1);
++}
++
++static void
++print_entries_raw (int size, int first, char *menu_entries)
++{
++  int i;
++
++#define LINE_LENGTH 67
++
++  for (i = 0; i < LINE_LENGTH; i++)
++    grub_putchar ('-');
++  grub_putchar ('\n');
++
++  for (i = first; i < size; i++)
++    {
++      /* grub's printf can't %02d so ... */
++      if (i < 10)
++      grub_putchar (' ');
++      grub_printf ("%d: %s\n", i, get_entry (menu_entries, i, 0));
++    }
++
++  for (i = 0; i < LINE_LENGTH; i++)
++    grub_putchar ('-');
++  grub_putchar ('\n');
++
++#undef LINE_LENGTH
++}
++
++
++static void
++print_border (int y, int size)
++{
++  int i;
++
++  if (current_term->setcolorstate)
++    current_term->setcolorstate (COLOR_STATE_NORMAL);
++  
++  gotoxy (1, y);
++
++  grub_putchar (DISP_UL);
++  for (i = 0; i < 73; i++)
++    grub_putchar (DISP_HORIZ);
++  grub_putchar (DISP_UR);
++
++  i = 1;
++  while (1)
++    {
++      gotoxy (1, y + i);
++
++      if (i > size)
++      break;
++      
++      grub_putchar (DISP_VERT);
++      gotoxy (75, y + i);
++      grub_putchar (DISP_VERT);
++
++      i++;
++    }
++
++  grub_putchar (DISP_LL);
++  for (i = 0; i < 73; i++)
++    grub_putchar (DISP_HORIZ);
++  grub_putchar (DISP_LR);
++
++  if (current_term->setcolorstate)
++    current_term->setcolorstate (COLOR_STATE_STANDARD);
++}
++
++static void
++run_menu (char *menu_entries, char *config_entries, int num_entries,
++        char *heap, int entryno)
++{
++  int c, time1, time2 = -1, first_entry = 0;
++  char *cur_entry = 0;
++
++  /*
++   *  Main loop for menu UI.
++   */
++
++restart:
++  /* Dumb terminal always use all entries for display 
++     invariant for TERM_DUMB: first_entry == 0  */
++  if (! (current_term->flags & TERM_DUMB))
++    {
++      while (entryno > 11)
++      {
++        first_entry++;
++        entryno--;
++      }
++    }
++
++  /* If the timeout was expired or wasn't set, force to show the menu
++     interface. */
++  if (grub_timeout < 0)
++    show_menu = 1;
++  
++  /* If SHOW_MENU is false, don't display the menu until ESC is pressed.  */
++  if (! show_menu)
++    {
++      /* Get current time.  */
++      while ((time1 = getrtsecs ()) == 0xFF)
++      ;
++
++      while (1)
++      {
++        /* Check if ESC is pressed.  */
++        if (checkkey () != -1 && ASCII_CHAR (getkey ()) == '\e')
++          {
++            grub_timeout = -1;
++            show_menu = 1;
++            break;
++          }
++
++        /* If GRUB_TIMEOUT is expired, boot the default entry.  */
++        if (grub_timeout >=0
++            && (time1 = getrtsecs ()) != time2
++            && time1 != 0xFF)
++          {
++            if (grub_timeout <= 0)
++              {
++                grub_timeout = -1;
++                goto boot_entry;
++              }
++            
++            time2 = time1;
++            grub_timeout--;
++            
++            /* Print a message.  */
++            grub_printf ("\rPress `ESC' to enter the menu... %d   ",
++                         grub_timeout);
++          }
++      }
++    }
++
++  /* Only display the menu if the user wants to see it. */
++  if (show_menu)
++    {
++      init_page ();
++      setcursor (0);
++
++      if (current_term->flags & TERM_DUMB)
++      print_entries_raw (num_entries, first_entry, menu_entries);
++      else
++      print_border (3, 12);
++
++      grub_printf ("\n\
++      Use the %c and %c keys to select which entry is highlighted.\n",
++                 DISP_UP, DISP_DOWN);
++      
++      if (! auth && password)
++      {
++        printf ("\
++      Press enter to boot the selected OS or \'p\' to enter a\n\
++      password to unlock the next set of features.");
++      }
++      else
++      {
++        if (config_entries)
++          printf ("\
++      Press enter to boot the selected OS, \'e\' to edit the\n\
++      commands before booting, or \'c\' for a command-line.");
++        else
++          printf ("\
++      Press \'b\' to boot, \'e\' to edit the selected command in the\n\
++      boot sequence, \'c\' for a command-line, \'o\' to open a new line\n\
++      after (\'O\' for before) the selected line, \'d\' to remove the\n\
++      selected line, or escape to go back to the main menu.");
++      }
++
++      if (current_term->flags & TERM_DUMB)
++      grub_printf ("\n\nThe selected entry is %d ", entryno);
++      else
++      print_entries (3, 12, first_entry, entryno, menu_entries);
++    }
++
++  /* XX using RT clock now, need to initialize value */
++  while ((time1 = getrtsecs()) == 0xFF);
++
++  while (1)
++    {
++      /* Initialize to NULL just in case...  */
++      cur_entry = NULL;
++
++      if (grub_timeout >= 0 && (time1 = getrtsecs()) != time2 && time1 != 0xFF)
++      {
++        if (grub_timeout <= 0)
++          {
++            grub_timeout = -1;
++            break;
++          }
++
++        /* else not booting yet! */
++        time2 = time1;
++
++        if (current_term->flags & TERM_DUMB)
++            grub_printf ("\r    Entry %d will be booted automatically in %d seconds.   ", 
++                         entryno, grub_timeout);
++        else
++          {
++            gotoxy (3, 22);
++            grub_printf ("The highlighted entry will be booted automatically in %d seconds.    ",
++                         grub_timeout);
++            gotoxy (74, 4 + entryno);
++        }
++        
++        grub_timeout--;
++      }
++
++      /* Check for a keypress, however if TIMEOUT has been expired
++       (GRUB_TIMEOUT == -1) relax in GETKEY even if no key has been
++       pressed.  
++       This avoids polling (relevant in the grub-shell and later on
++       in grub if interrupt driven I/O is done).  */
++      if (checkkey () >= 0 || grub_timeout < 0)
++      {
++        /* Key was pressed, show which entry is selected before GETKEY,
++           since we're comming in here also on GRUB_TIMEOUT == -1 and
++           hang in GETKEY */
++        if (current_term->flags & TERM_DUMB)
++          grub_printf ("\r    Highlighted entry is %d: ", entryno);
++
++        c = ASCII_CHAR (getkey ());
++
++        if (grub_timeout >= 0)
++          {
++            if (current_term->flags & TERM_DUMB)
++              grub_putchar ('\r');
++            else
++              gotoxy (3, 22);
++            printf ("                                                                    ");
++            grub_timeout = -1;
++            fallback_entryno = -1;
++            if (! (current_term->flags & TERM_DUMB))
++              gotoxy (74, 4 + entryno);
++          }
++
++        /* We told them above (at least in SUPPORT_SERIAL) to use
++           '^' or 'v' so accept these keys.  */
++        if (c == 16 || c == '^')
++          {
++            if (current_term->flags & TERM_DUMB)
++              {
++                if (entryno > 0)
++                  entryno--;
++              }
++            else
++              {
++                if (entryno > 0)
++                  {
++                    print_entry (4 + entryno, 0,
++                                 get_entry (menu_entries,
++                                            first_entry + entryno,
++                                            0));
++                    entryno--;
++                    print_entry (4 + entryno, 1,
++                                 get_entry (menu_entries,
++                                            first_entry + entryno,
++                                            0));
++                  }
++                else if (first_entry > 0)
++                  {
++                    first_entry--;
++                    print_entries (3, 12, first_entry, entryno,
++                                   menu_entries);
++                  }
++              }
++          }
++        else if ((c == 14 || c == 'v')
++                 && first_entry + entryno + 1 < num_entries)
++          {
++            if (current_term->flags & TERM_DUMB)
++              entryno++;
++            else
++              {
++                if (entryno < 11)
++                  {
++                    print_entry (4 + entryno, 0,
++                                 get_entry (menu_entries,
++                                            first_entry + entryno,
++                                            0));
++                    entryno++;
++                    print_entry (4 + entryno, 1,
++                                 get_entry (menu_entries,
++                                            first_entry + entryno,
++                                            0));
++                }
++              else if (num_entries > 12 + first_entry)
++                {
++                  first_entry++;
++                  print_entries (3, 12, first_entry, entryno, menu_entries);
++                }
++              }
++          }
++        else if (c == 7)
++          {
++            /* Page Up */
++            first_entry -= 12;
++            if (first_entry < 0)
++              {
++                entryno += first_entry;
++                first_entry = 0;
++                if (entryno < 0)
++                  entryno = 0;
++              }
++            print_entries (3, 12, first_entry, entryno, menu_entries);
++          }
++        else if (c == 3)
++          {
++            /* Page Down */
++            first_entry += 12;
++            if (first_entry + entryno + 1 >= num_entries)
++              {
++                first_entry = num_entries - 12;
++                if (first_entry < 0)
++                  first_entry = 0;
++                entryno = num_entries - first_entry - 1;
++              }
++            print_entries (3, 12, first_entry, entryno, menu_entries);
++          }
++
++        if (config_entries)
++          {
++            if ((c == '\n') || (c == '\r') || (c == 6))
++              break;
++          }
++        else
++          {
++            if ((c == 'd') || (c == 'o') || (c == 'O'))
++              {
++                if (! (current_term->flags & TERM_DUMB))
++                  print_entry (4 + entryno, 0,
++                               get_entry (menu_entries,
++                                          first_entry + entryno,
++                                          0));
++
++                /* insert after is almost exactly like insert before */
++                if (c == 'o')
++                  {
++                    /* But `o' differs from `O', since it may causes
++                       the menu screen to scroll up.  */
++                    if (entryno < 11 || (current_term->flags & TERM_DUMB))
++                      entryno++;
++                    else
++                      first_entry++;
++                    
++                    c = 'O';
++                  }
++
++                cur_entry = get_entry (menu_entries,
++                                       first_entry + entryno,
++                                       0);
++
++                if (c == 'O')
++                  {
++                    grub_memmove (cur_entry + 2, cur_entry,
++                                  ((int) heap) - ((int) cur_entry));
++
++                    cur_entry[0] = ' ';
++                    cur_entry[1] = 0;
++
++                    heap += 2;
++
++                    num_entries++;
++                  }
++                else if (num_entries > 0)
++                  {
++                    char *ptr = get_entry(menu_entries,
++                                          first_entry + entryno + 1,
++                                          0);
++
++                    grub_memmove (cur_entry, ptr,
++                                  ((int) heap) - ((int) ptr));
++                    heap -= (((int) ptr) - ((int) cur_entry));
++
++                    num_entries--;
++
++                    if (entryno >= num_entries)
++                      entryno--;
++                    if (first_entry && num_entries < 12 + first_entry)
++                      first_entry--;
++                  }
++
++                if (current_term->flags & TERM_DUMB)
++                  {
++                    grub_printf ("\n\n");
++                    print_entries_raw (num_entries, first_entry,
++                                       menu_entries);
++                    grub_printf ("\n");
++                  }
++                else
++                  print_entries (3, 12, first_entry, entryno, menu_entries);
++              }
++
++            cur_entry = menu_entries;
++            if (c == 27)
++              return;
++            if (c == 'b')
++              break;
++          }
++
++        if (! auth && password)
++          {
++            if (c == 'p')
++              {
++                /* Do password check here! */
++                char entered[32];
++                char *pptr = password;
++
++                if (current_term->flags & TERM_DUMB)
++                  grub_printf ("\r                                    ");
++                else
++                  gotoxy (1, 21);
++
++                /* Wipe out the previously entered password */
++                grub_memset (entered, 0, sizeof (entered));
++                get_cmdline (" Password: ", entered, 31, '*', 0);
++
++                while (! isspace (*pptr) && *pptr)
++                  pptr++;
++
++                /* Make sure that PASSWORD is NUL-terminated.  */
++                *pptr++ = 0;
++
++                if (! check_password (entered, password, password_type))
++                  {
++                    char *new_file = config_file;
++                    while (isspace (*pptr))
++                      pptr++;
++
++                    /* If *PPTR is NUL, then allow the user to use
++                       privileged instructions, otherwise, load
++                       another configuration file.  */
++                    if (*pptr != 0)
++                      {
++                        while ((*(new_file++) = *(pptr++)) != 0)
++                          ;
++
++                        /* Make sure that the user will not have
++                           authority in the next configuration.  */
++                        auth = 0;
++                        return;
++                      }
++                    else
++                      {
++                        /* Now the user is superhuman.  */
++                        auth = 1;
++                        goto restart;
++                      }
++                  }
++                else
++                  {
++                    grub_printf ("Failed!\n      Press any key to continue...");
++                    getkey ();
++                    goto restart;
++                  }
++              }
++          }
++        else
++          {
++            if (c == 'e')
++              {
++                int new_num_entries = 0, i = 0;
++                char *new_heap;
++
++                if (config_entries)
++                  {
++                    new_heap = heap;
++                    cur_entry = get_entry (config_entries,
++                                           first_entry + entryno,
++                                           1);
++                  }
++                else
++                  {
++                    /* safe area! */
++                    new_heap = heap + NEW_HEAPSIZE + 1;
++                    cur_entry = get_entry (menu_entries,
++                                           first_entry + entryno,
++                                           0);
++                  }
++
++                do
++                  {
++                    while ((*(new_heap++) = cur_entry[i++]) != 0);
++                    new_num_entries++;
++                  }
++                while (config_entries && cur_entry[i]);
++
++                /* this only needs to be done if config_entries is non-NULL,
++                   but it doesn't hurt to do it always */
++                *(new_heap++) = 0;
++
++                if (config_entries)
++                  run_menu (heap, NULL, new_num_entries, new_heap, 0);
++                else
++                  {
++                    cls ();
++                    print_cmdline_message (0);
++
++                    new_heap = heap + NEW_HEAPSIZE + 1;
++
++                    saved_drive = boot_drive;
++                    saved_partition = install_partition;
++                    current_drive = GRUB_INVALID_DRIVE;
++
++                    if (! get_cmdline (PACKAGE " edit> ", new_heap,
++                                       NEW_HEAPSIZE + 1, 0, 1))
++                      {
++                        int j = 0;
++
++                        /* get length of new command */
++                        while (new_heap[j++])
++                          ;
++
++                        if (j < 2)
++                          {
++                            j = 2;
++                            new_heap[0] = ' ';
++                            new_heap[1] = 0;
++                          }
++
++                        /* align rest of commands properly */
++                        grub_memmove (cur_entry + j, cur_entry + i,
++                                      (int) heap - ((int) cur_entry + i));
++
++                        /* copy command to correct area */
++                        grub_memmove (cur_entry, new_heap, j);
++
++                        heap += (j - i);
++                      }
++                  }
++
++                goto restart;
++              }
++            if (c == 'c')
++              {
++                enter_cmdline (heap, 0);
++                goto restart;
++              }
++#ifdef GRUB_UTIL
++            if (c == 'q')
++              {
++                /* The same as ``quit''.  */
++                stop ();
++              }
++#endif
++          }
++      }
++    }
++  
++  /* Attempt to boot an entry.  */
++  
++ boot_entry:
++  
++  cls ();
++  setcursor (1);
++  
++  while (1)
++    {
++      if (config_entries)
++      printf ("  Booting \'%s\'\n\n",
++              get_entry (menu_entries, first_entry + entryno, 0));
++      else
++      printf ("  Booting command-list\n\n");
++
++      if (! cur_entry)
++      cur_entry = get_entry (config_entries, first_entry + entryno, 1);
++
++      /* Set CURRENT_ENTRYNO for the command "savedefault".  */
++      current_entryno = first_entry + entryno;
++      
++      if (run_script (cur_entry, heap))
++      {
++        if (fallback_entryno >= 0)
++          {
++            cur_entry = NULL;
++            first_entry = 0;
++            entryno = fallback_entries[fallback_entryno];
++            fallback_entryno++;
++            if (fallback_entryno >= MAX_FALLBACK_ENTRIES
++                || fallback_entries[fallback_entryno] < 0)
++              fallback_entryno = -1;
++          }
++        else
++          break;
++      }
++      else
++      break;
++    }
++
++  show_menu = 1;
++  goto restart;
++}
++
++
++static int
++get_line_from_config (char *cmdline, int maxlen, int read_from_file)
++{
++  int pos = 0, literal = 0, comment = 0;
++  char c;  /* since we're loading it a byte at a time! */
++  
++  while (1)
++    {
++      if (read_from_file)
++      {
++        if (! grub_read (&c, 1))
++          break;
++      }
++      else
++      {
++        if (! read_from_preset_menu (&c, 1))
++          break;
++      }
++
++      /* Skip all carriage returns.  */
++      if (c == '\r')
++      continue;
++
++      /* Replace tabs with spaces.  */
++      if (c == '\t')
++      c = ' ';
++
++      /* The previous is a backslash, then...  */
++      if (literal)
++      {
++        /* If it is a newline, replace it with a space and continue.  */
++        if (c == '\n')
++          {
++            c = ' ';
++            
++            /* Go back to overwrite a backslash.  */
++            if (pos > 0)
++              pos--;
++          }
++          
++        literal = 0;
++      }
++        
++      /* translate characters first! */
++      if (c == '\\' && ! literal)
++      literal = 1;
++
++      if (comment)
++      {
++        if (c == '\n')
++          comment = 0;
++      }
++      else if (! pos)
++      {
++        if (c == '#')
++          comment = 1;
++        else if ((c != ' ') && (c != '\n'))
++          cmdline[pos++] = c;
++      }
++      else
++      {
++        if (c == '\n')
++          break;
++
++        if (pos < maxlen)
++          cmdline[pos++] = c;
++      }
++    }
++
++  cmdline[pos] = 0;
++
++  return pos;
++}
++
++
++/* This is the starting function in C.  */
++void
++cmain (void)
++{
++  int config_len, menu_len, num_entries;
++  char *config_entries, *menu_entries;
++  char *kill_buf = (char *) KILL_BUF;
++
++  auto void reset (void);
++  void reset (void)
++    {
++      count_lines = -1;
++      config_len = 0;
++      menu_len = 0;
++      num_entries = 0;
++      config_entries = (char *) mbi.drives_addr + mbi.drives_length;
++      menu_entries = (char *) MENU_BUF;
++      init_config ();
++    }
++  
++  /* Initialize the environment for restarting Stage 2.  */
++  grub_setjmp (restart_env);
++  
++  /* Initialize the kill buffer.  */
++  *kill_buf = 0;
++
++  /* Never return.  */
++  for (;;)
++    {
++      int is_opened, is_preset;
++
++      reset ();
++      
++      /* Here load the configuration file.  */
++      
++#ifdef GRUB_UTIL
++      if (use_config_file)
++#endif /* GRUB_UTIL */
++      {
++        char *default_file = (char *) DEFAULT_FILE_BUF;
++        int i;
++        
++        /* Get a saved default entry if possible.  */
++        saved_entryno = 0;
++        *default_file = 0;
++        grub_strncat (default_file, config_file, DEFAULT_FILE_BUFLEN);
++        for (i = grub_strlen(default_file); i >= 0; i--)
++          if (default_file[i] == '/')
++            {
++              i++;
++              break;
++            }
++        default_file[i] = 0;
++        grub_strncat (default_file + i, "default", DEFAULT_FILE_BUFLEN - i);
++        if (grub_open (default_file))
++          {
++            char buf[10]; /* This is good enough.  */
++            char *p = buf;
++            int len;
++            
++            len = grub_read (buf, sizeof (buf));
++            if (len > 0)
++              {
++                buf[sizeof (buf) - 1] = 0;
++                safe_parse_maxint (&p, &saved_entryno);
++              }
++
++            grub_close ();
++          }
++        errnum = ERR_NONE;
++        
++        do
++          {
++            /* STATE 0:  Before any title command.
++               STATE 1:  In a title command.
++               STATE >1: In a entry after a title command.  */
++            int state = 0, prev_config_len = 0, prev_menu_len = 0;
++            char *cmdline;
++
++            /* Try the preset menu first. This will succeed at most once,
++               because close_preset_menu disables the preset menu.  */
++            is_opened = is_preset = open_preset_menu ();
++            if (! is_opened)
++              {
++                is_opened = grub_open (config_file);
++                errnum = ERR_NONE;
++              }
++
++            if (! is_opened)
++              break;
++
++            /* This is necessary, because the menu must be overrided.  */
++            reset ();
++            
++            cmdline = (char *) CMDLINE_BUF;
++            while (get_line_from_config (cmdline, NEW_HEAPSIZE,
++                                         ! is_preset))
++              {
++                struct builtin *builtin;
++                
++                /* Get the pointer to the builtin structure.  */
++                builtin = find_command (cmdline);
++                errnum = 0;
++                if (! builtin)
++                  /* Unknown command. Just skip now.  */
++                  continue;
++                
++                if (builtin->flags & BUILTIN_TITLE)
++                  {
++                    char *ptr;
++                    
++                    /* the command "title" is specially treated.  */
++                    if (state > 1)
++                      {
++                        /* The next title is found.  */
++                        num_entries++;
++                        config_entries[config_len++] = 0;
++                        prev_menu_len = menu_len;
++                        prev_config_len = config_len;
++                      }
++                    else
++                      {
++                        /* The first title is found.  */
++                        menu_len = prev_menu_len;
++                        config_len = prev_config_len;
++                      }
++                    
++                    /* Reset the state.  */
++                    state = 1;
++                    
++                    /* Copy title into menu area.  */
++                    ptr = skip_to (1, cmdline);
++                    while ((menu_entries[menu_len++] = *(ptr++)) != 0)
++                      ;
++                  }
++                else if (! state)
++                  {
++                    /* Run a command found is possible.  */
++                    if (builtin->flags & BUILTIN_MENU)
++                      {
++                        char *arg = skip_to (1, cmdline);
++                        (builtin->func) (arg, BUILTIN_MENU);
++                        errnum = 0;
++                      }
++                    else
++                      /* Ignored.  */
++                      continue;
++                  }
++                else
++                  {
++                    char *ptr = cmdline;
++                    
++                    state++;
++                    /* Copy config file data to config area.  */
++                    while ((config_entries[config_len++] = *ptr++) != 0)
++                      ;
++                  }
++              }
++            
++            if (state > 1)
++              {
++                /* Finish the last entry.  */
++                num_entries++;
++                config_entries[config_len++] = 0;
++              }
++            else
++              {
++                menu_len = prev_menu_len;
++                config_len = prev_config_len;
++              }
++            
++            menu_entries[menu_len++] = 0;
++            config_entries[config_len++] = 0;
++            grub_memmove (config_entries + config_len, menu_entries,
++                          menu_len);
++            menu_entries = config_entries + config_len;
++
++            /* Make sure that all fallback entries are valid.  */
++            if (fallback_entryno >= 0)
++              {
++                for (i = 0; i < MAX_FALLBACK_ENTRIES; i++)
++                  {
++                    if (fallback_entries[i] < 0)
++                      break;
++                    if (fallback_entries[i] >= num_entries)
++                      {
++                        grub_memmove (fallback_entries + i,
++                                      fallback_entries + i + 1,
++                                      ((MAX_FALLBACK_ENTRIES - i - 1)
++                                       * sizeof (int)));
++                        i--;
++                      }
++                  }
++
++                if (fallback_entries[0] < 0)
++                  fallback_entryno = -1;
++              }
++            /* Check if the default entry is present. Otherwise reset
++               it to fallback if fallback is valid, or to DEFAULT_ENTRY 
++               if not.  */
++            if (default_entry >= num_entries)
++              {
++                if (fallback_entryno >= 0)
++                  {
++                    default_entry = fallback_entries[0];
++                    fallback_entryno++;
++                    if (fallback_entryno >= MAX_FALLBACK_ENTRIES
++                        || fallback_entries[fallback_entryno] < 0)
++                      fallback_entryno = -1;
++                  }
++                else
++                  default_entry = 0;
++              }
++            
++            if (is_preset)
++              close_preset_menu ();
++            else
++              grub_close ();
++          }
++        while (is_preset);
++      }
++
++      if (! num_entries)
++      {
++        /* If no acceptable config file, goto command-line, starting
++           heap from where the config entries would have been stored
++           if there were any.  */
++        enter_cmdline (config_entries, 1);
++      }
++      else
++      {
++        /* Run menu interface.  */
++        run_menu (menu_entries, config_entries, num_entries,
++                  menu_entries + menu_len, default_entry);
++      }
++    }
++}
+diff -Nur grub-0.97/stage2/term.h grub-0.97-patched/stage2/term.h
+--- grub-0.97/stage2/term.h    2003-07-09 13:45:53.000000000 +0200
++++ grub-0.97-patched/stage2/term.h    2012-11-11 17:06:33.311470556 +0100
+@@ -60,6 +60,8 @@
+   const char *name;
+   /* The feature flags defined above.  */
+   unsigned long flags;
++  /* Default for maximum number of lines if not specified */
++  unsigned short max_lines;
+   /* Put a character.  */
+   void (*putchar) (int c);
+   /* Check if any input character is available.  */
+@@ -79,6 +81,11 @@
+   void (*setcolor) (int normal_color, int highlight_color);
+   /* Turn on/off the cursor.  */
+   int (*setcursor) (int on);
++
++  /* function to start a terminal */
++  int (*startup) (void);
++  /* function to use to shutdown a terminal */
++  void (*shutdown) (void);
+ };
+ /* This lists up available terminals.  */
+@@ -124,4 +131,23 @@
+ int hercules_setcursor (int on);
+ #endif
++#ifdef SUPPORT_GRAPHICS
++extern int foreground, background, border, graphics_inited;
++
++void graphics_set_splash(char *splashfile);
++int set_videomode (int mode);
++void graphics_putchar (int c);
++int graphics_getxy(void);
++void graphics_gotoxy(int x, int y);
++void graphics_cls(void);
++void graphics_setcolorstate (color_state state);
++void graphics_setcolor (int normal_color, int highlight_color);
++void graphics_setcursor (int on);
++int graphics_init(void);
++void graphics_end(void);
++
++int hex(int v);
++void graphics_set_palette(int idx, int red, int green, int blue);
++#endif /* SUPPORT_GRAPHICS */
++
+ #endif /* ! GRUB_TERM_HEADER */
+diff -Nur grub-0.97/THANKS grub-0.97-patched/THANKS
+--- grub-0.97/THANKS   2005-05-08 04:17:43.000000000 +0200
++++ grub-0.97-patched/THANKS   2012-11-11 17:07:12.709729021 +0100
+@@ -121,3 +121,4 @@
+ Yedidyah Bar-David <didi@post.tau.ac.il>
+ Yury V. Umanets <umka@namesys.com>
+ Yuri Zaporogets <yuriz@ukr.net>
++Vitaly Fertman <vitaly@namesys.com>
+diff -Nur grub-0.97/util/grub-install.in grub-0.97-patched/util/grub-install.in
+--- grub-0.97/util/grub-install.in     2004-07-24 20:57:31.000000000 +0200
++++ grub-0.97-patched/util/grub-install.in     2012-11-11 17:07:12.748730268 +0100
+@@ -96,24 +96,27 @@
+     # Break the device name into the disk part and the partition part.
+     case "$host_os" in
+     linux*)
+-      tmp_disk=`echo "$1" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \
++      tmp_disk=`echo "$1" | sed -e 's%\([shv]d[a-z]\)[0-9]*$%\1%' \
+                                 -e 's%\(d[0-9]*\)p[0-9]*$%\1%' \
+                                 -e 's%\(fd[0-9]*\)$%\1%' \
+                                 -e 's%/part[0-9]*$%/disc%' \
+-                                -e 's%\(c[0-7]d[0-9]*\).*$%\1%'`
+-      tmp_part=`echo "$1" | sed -e 's%.*/[sh]d[a-z]\([0-9]*\)$%\1%' \
++                                -e 's%\(c[0-7]d[0-9]*\).*$%\1%' \
++                                -e 's%\(e[0-9]\.[0-9]*\).*$%\1%'`
++      tmp_part=`echo "$1" | sed -e 's%.*/[shv]d[a-z]\([0-9]*\)$%\1%' \
+                                 -e 's%.*d[0-9]*p%%' \
+                                 -e 's%.*/fd[0-9]*$%%' \
+                                 -e 's%.*/floppy/[0-9]*$%%' \
+                                 -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \
+-                                -e 's%.*c[0-7]d[0-9]*p%%'`
++                                -e 's%.*c[0-7]d[0-9]*p*%%' \
++                                -e 's%.*e[0-9]\.[0-9]*p%%' \
++                                -e 's%.*e[0-9]\.[0-9]*\$%%'`
+       ;;
+     gnu*)
+       tmp_disk=`echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%'`
+       tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;;
+     freebsd* | kfreebsd*-gnu)
+-      tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%r\1%' \
+-                          | sed 's%r\{0,1\}\(da[0-9]*\).*$%r\1%'`
++      tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%\1%' \
++                          | sed 's%r\{0,1\}\(da[0-9]*\).*$%\1%'`
+       tmp_part=`echo "$1" \
+           | sed "s%.*/r\{0,1\}[saw]d[0-9]\(s[0-9]*[a-h]\)%\1%" \
+                   | sed "s%.*/r\{0,1\}da[0-9]\(s[0-9]*[a-h]\)%\1%"`
+@@ -131,7 +134,7 @@
+     # Get the drive name.
+     tmp_drive=`grep -v '^#' $device_map | grep "$tmp_disk *$" \
+-      | sed 's%.*\(([hf]d[0-9][a-g0-9,]*)\).*%\1%'`
++      | sed 's%.*\(([hf]d[0-9][a-z0-9,]*)\).*%\1%'`
+     # If not found, print an error message and exit.
+     if test "x$tmp_drive" = x; then
+@@ -148,13 +151,13 @@
+       gnu*)
+           if echo $tmp_part | grep "^s" >/dev/null; then
+               tmp_pc_slice=`echo $tmp_part \
+-                  | sed "s%s\([0-9]*\)[a-g]*$%\1%"`
++                  | sed "s%s\([0-9]*\)[a-z]*$%\1%"`
+               tmp_drive=`echo "$tmp_drive" \
+                   | sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"`
+           fi
+-          if echo $tmp_part | grep "[a-g]$" >/dev/null; then
++          if echo $tmp_part | grep "[a-z]$" >/dev/null; then
+               tmp_bsd_partition=`echo "$tmp_part" \
+-                  | sed "s%[^a-g]*\([a-g]\)$%\1%"`
++                  | sed "s%[^a-z]*\([a-z]\)$%\1%"`
+               tmp_drive=`echo "$tmp_drive" \
+                   | sed "s%)%,$tmp_bsd_partition)%"`
+           fi
+@@ -336,6 +339,10 @@
+     # Create a safe temporary file.
+     test -n "$mklog" && log_file=`$mklog`
++    # Before all invocations of the grub shell, call sync to make sure
++    # the raw device is in sync with any bufferring in filesystems.
++    sync
++ 
+     $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
+ quit
+ EOF
+@@ -450,6 +457,10 @@
+ # Create a safe temporary file.
+ test -n "$mklog" && log_file=`$mklog`
++# Before all invocations of the grub shell, call sync to make sure
++# the raw device is in sync with any bufferring in filesystems.
++sync
++
+ # Now perform the installation.
+ $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
+ root $root_drive
+diff -Nur grub-0.97/util/grub-install.in.orig grub-0.97-patched/util/grub-install.in.orig
+--- grub-0.97/util/grub-install.in.orig        1970-01-01 01:00:00.000000000 +0100
++++ grub-0.97-patched/util/grub-install.in.orig        2004-07-24 20:57:31.000000000 +0200
+@@ -0,0 +1,477 @@
++#! /bin/sh
++
++# Install GRUB on your drive.
++#   Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc.
++#
++# This file is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++# General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++
++# Initialize some variables.
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++sbindir=@sbindir@
++libdir=@libdir@
++PACKAGE=@PACKAGE@
++VERSION=@VERSION@
++host_cpu=@host_cpu@
++host_os=@host_os@
++host_vendor=@host_vendor@
++pkglibdir=${libdir}/${PACKAGE}/${host_cpu}-${host_vendor}
++
++grub_shell=${sbindir}/grub
++grub_set_default=${sbindir}/grub-set-default
++log_file=/tmp/grub-install.log.$$
++img_file=/tmp/grub-install.img.$$
++rootdir=
++grub_prefix=/boot/grub
++
++install_device=
++no_floppy=
++force_lba=
++recheck=no
++debug=no
++
++# look for secure tempfile creation wrappers on this platform
++if test -x /bin/tempfile; then
++    mklog="/bin/tempfile --prefix=grub"
++    mkimg="/bin/tempfile --prefix=grub"
++elif test -x /bin/mktemp; then
++    mklog="/bin/mktemp /tmp/grub-install.log.XXXXXX"
++    mkimg="/bin/mktemp /tmp/grub-install.img.XXXXXX"
++else
++    mklog=""
++    mkimg=""
++fi
++
++# Usage: usage
++# Print the usage.
++usage () {
++    cat <<EOF
++Usage: grub-install [OPTION] install_device
++Install GRUB on your drive.
++
++  -h, --help              print this message and exit
++  -v, --version           print the version information and exit
++  --root-directory=DIR    install GRUB images under the directory DIR
++                          instead of the root directory
++  --grub-shell=FILE       use FILE as the grub shell
++  --no-floppy             do not probe any floppy drive
++  --force-lba             force GRUB to use LBA mode even for a buggy
++                          BIOS
++  --recheck               probe a device map even if it already exists
++
++INSTALL_DEVICE can be a GRUB device name or a system device filename.
++
++grub-install copies GRUB images into the DIR/boot directory specfied by
++--root-directory, and uses the grub shell to install grub into the boot
++sector.
++
++Report bugs to <bug-grub@gnu.org>.
++EOF
++}
++
++# Usage: convert os_device
++# Convert an OS device to the corresponding GRUB drive.
++# This part is OS-specific.
++convert () {
++    # First, check if the device file exists.
++    if test -e "$1"; then
++      :
++    else
++      echo "$1: Not found or not a block device." 1>&2
++      exit 1
++    fi
++
++    # Break the device name into the disk part and the partition part.
++    case "$host_os" in
++    linux*)
++      tmp_disk=`echo "$1" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \
++                                -e 's%\(d[0-9]*\)p[0-9]*$%\1%' \
++                                -e 's%\(fd[0-9]*\)$%\1%' \
++                                -e 's%/part[0-9]*$%/disc%' \
++                                -e 's%\(c[0-7]d[0-9]*\).*$%\1%'`
++      tmp_part=`echo "$1" | sed -e 's%.*/[sh]d[a-z]\([0-9]*\)$%\1%' \
++                                -e 's%.*d[0-9]*p%%' \
++                                -e 's%.*/fd[0-9]*$%%' \
++                                -e 's%.*/floppy/[0-9]*$%%' \
++                                -e 's%.*/\(disc\|part\([0-9]*\)\)$%\2%' \
++                                -e 's%.*c[0-7]d[0-9]*p%%'`
++      ;;
++    gnu*)
++      tmp_disk=`echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%'`
++      tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;;
++    freebsd* | kfreebsd*-gnu)
++      tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%r\1%' \
++                          | sed 's%r\{0,1\}\(da[0-9]*\).*$%r\1%'`
++      tmp_part=`echo "$1" \
++          | sed "s%.*/r\{0,1\}[saw]d[0-9]\(s[0-9]*[a-h]\)%\1%" \
++                  | sed "s%.*/r\{0,1\}da[0-9]\(s[0-9]*[a-h]\)%\1%"`
++      ;;
++    netbsd* | knetbsd*-gnu)
++      tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([sw]d[0-9]*\).*$%r\1d%' \
++          | sed 's%r\{0,1\}\(fd[0-9]*\).*$%r\1a%'`
++      tmp_part=`echo "$1" \
++          | sed "s%.*/r\{0,1\}[sw]d[0-9]\([abe-p]\)%\1%"`
++      ;;
++    *)
++      echo "grub-install does not support your OS yet." 1>&2
++      exit 1 ;;
++    esac
++
++    # Get the drive name.
++    tmp_drive=`grep -v '^#' $device_map | grep "$tmp_disk *$" \
++      | sed 's%.*\(([hf]d[0-9][a-g0-9,]*)\).*%\1%'`
++
++    # If not found, print an error message and exit.
++    if test "x$tmp_drive" = x; then
++      echo "$1 does not have any corresponding BIOS drive." 1>&2
++      exit 1
++    fi
++
++    if test "x$tmp_part" != x; then
++      # If a partition is specified, we need to translate it into the
++      # GRUB's syntax.
++      case "$host_os" in
++      linux*)
++          echo "$tmp_drive" | sed "s%)$%,`expr $tmp_part - 1`)%" ;;
++      gnu*)
++          if echo $tmp_part | grep "^s" >/dev/null; then
++              tmp_pc_slice=`echo $tmp_part \
++                  | sed "s%s\([0-9]*\)[a-g]*$%\1%"`
++              tmp_drive=`echo "$tmp_drive" \
++                  | sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"`
++          fi
++          if echo $tmp_part | grep "[a-g]$" >/dev/null; then
++              tmp_bsd_partition=`echo "$tmp_part" \
++                  | sed "s%[^a-g]*\([a-g]\)$%\1%"`
++              tmp_drive=`echo "$tmp_drive" \
++                  | sed "s%)%,$tmp_bsd_partition)%"`
++          fi
++          echo "$tmp_drive" ;;
++      freebsd* | kfreebsd*-gnu)
++          if echo $tmp_part | grep "^s" >/dev/null; then
++              tmp_pc_slice=`echo $tmp_part \
++                  | sed "s%s\([0-9]*\)[a-h]*$%\1%"`
++              tmp_drive=`echo "$tmp_drive" \
++                  | sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"`
++          fi
++          if echo $tmp_part | grep "[a-h]$" >/dev/null; then
++              tmp_bsd_partition=`echo "$tmp_part" \
++                  | sed "s%s\{0,1\}[0-9]*\([a-h]\)$%\1%"`
++              tmp_drive=`echo "$tmp_drive" \
++                  | sed "s%)%,$tmp_bsd_partition)%"`
++          fi
++          echo "$tmp_drive" ;;
++      netbsd* | knetbsd*-gnu)
++          if echo $tmp_part | grep "^[abe-p]$" >/dev/null; then
++              tmp_bsd_partition=`echo "$tmp_part" \
++                  | sed "s%\([a-p]\)$%\1%"`
++              tmp_drive=`echo "$tmp_drive" \
++                  | sed "s%)%,$tmp_bsd_partition)%"`
++          fi
++          echo "$tmp_drive" ;;
++      esac
++    else
++      # If no partition is specified, just print the drive name.
++      echo "$tmp_drive"
++    fi
++}
++
++# Usage: resolve_symlink file
++# Find the real file/device that file points at
++resolve_symlink () {
++      tmp_fname=$1
++      # Resolve symlinks
++      while test -L $tmp_fname; do
++              tmp_new_fname=`ls -al $tmp_fname | sed -n 's%.*-> \(.*\)%\1%p'`
++              if test -z "$tmp_new_fname"; then
++                      echo "Unrecognized ls output" 2>&1
++                      exit 1
++              fi
++
++              # Convert relative symlinks
++              case $tmp_new_fname in
++                      /*) tmp_fname="$tmp_new_fname"
++                      ;;
++                      *) tmp_fname="`echo $tmp_fname | sed 's%/[^/]*$%%'`/$tmp_new_fname"
++                      ;;
++              esac
++      done
++      echo "$tmp_fname"
++}
++
++# Usage: find_device file
++# Find block device on which the file resides.
++find_device () {
++    # For now, this uses the program `df' to get the device name, but is
++    # this really portable?
++    tmp_fname=`df $1/ | sed -n 's%.*\(/dev/[^         ]*\).*%\1%p'`
++
++    if test -z "$tmp_fname"; then
++      echo "Could not find device for $1" 2>&1
++      exit 1
++    fi
++
++      tmp_fname=`resolve_symlink $tmp_fname`
++
++    echo "$tmp_fname"
++}
++
++# Check the arguments.
++for option in "$@"; do
++    case "$option" in
++    -h | --help)
++      usage
++      exit 0 ;;
++    -v | --version)
++      echo "grub-install (GNU GRUB ${VERSION})"
++      exit 0 ;;
++    --root-directory=*)
++      rootdir=`echo "$option" | sed 's/--root-directory=//'` ;;
++    --grub-shell=*)
++      grub_shell=`echo "$option" | sed 's/--grub-shell=//'` ;;
++    --no-floppy)
++      no_floppy="--no-floppy" ;;
++    --force-lba)
++      force_lba="--force-lba" ;;
++    --recheck)
++      recheck=yes ;;
++    # This is an undocumented feature...
++    --debug)
++      debug=yes ;;
++    -*)
++      echo "Unrecognized option \`$option'" 1>&2
++      usage
++      exit 1
++      ;;
++    *)
++      if test "x$install_device" != x; then
++          echo "More than one install_devices?" 1>&2
++          usage
++          exit 1
++      fi
++      install_device="${option}" ;;
++    esac
++done
++
++if test "x$install_device" = x; then
++    echo "install_device not specified." 1>&2
++    usage
++    exit 1
++fi
++
++# If the debugging feature is enabled, print commands.
++if test $debug = yes; then
++    set -x
++fi
++
++# Initialize these directories here, since ROOTDIR was initialized.
++case "$host_os" in
++netbsd* | openbsd*)
++    # Because /boot is used for the boot block in NetBSD and OpenBSD, use /grub
++    # instead of /boot/grub.
++    grub_prefix=/grub
++    bootdir=${rootdir}
++    ;;
++*)
++    # Use /boot/grub by default.
++    bootdir=${rootdir}/boot
++    ;;
++esac
++
++grubdir=${bootdir}/grub
++device_map=${grubdir}/device.map
++
++# Check if GRUB is installed.
++# This is necessary, because the user can specify "grub --read-only".
++set $grub_shell dummy
++if test -f "$1"; then
++    :
++else
++    echo "$1: Not found." 1>&2
++    exit 1
++fi
++
++if test -f "$pkglibdir/stage1"; then
++    :
++else
++    echo "${pkglibdir}/stage1: Not found." 1>&2
++    exit 1
++fi
++
++if test -f "$pkglibdir/stage2"; then
++    :
++else
++    echo "${pkglibdir}/stage2: Not found." 1>&2
++    exit 1
++fi
++
++# Don't check for *stage1_5, because it is not fatal even if any
++# Stage 1.5 does not exist.
++
++# Create the GRUB directory if it is not present.
++test -d "$bootdir" || mkdir "$bootdir" || exit 1
++test -d "$grubdir" || mkdir "$grubdir" || exit 1
++
++# If --recheck is specified, remove the device map, if present.
++if test $recheck = yes; then
++    rm -f $device_map
++fi
++
++# Create the device map file if it is not present.
++if test -f "$device_map"; then
++    :
++else
++    # Create a safe temporary file.
++    test -n "$mklog" && log_file=`$mklog`
++
++    $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
++quit
++EOF
++    if grep "Error [0-9]*: " $log_file >/dev/null; then
++      cat $log_file 1>&2
++      exit 1
++    fi
++
++    rm -f $log_file
++fi
++
++# Make sure that there is no duplicated entry.
++tmp=`sed -n '/^([fh]d[0-9]*)/s/\(^(.*)\).*/\1/p' $device_map \
++    | sort | uniq -d | sed -n 1p`
++if test -n "$tmp"; then
++    echo "The drive $tmp is defined multiple times in the device map $device_map" 1>&2
++    exit 1
++fi
++
++# Check for INSTALL_DEVICE.
++case "$install_device" in
++/dev/*)
++    install_device=`resolve_symlink "$install_device"`
++    install_drive=`convert "$install_device"`
++    # I don't know why, but some shells wouldn't die if exit is
++    # called in a function.
++    if test "x$install_drive" = x; then
++      exit 1
++    fi ;;
++\([hf]d[0-9]*\))
++    install_drive="$install_device" ;;
++[hf]d[0-9]*)
++    # The GRUB format with no parenthesis.
++    install_drive="($install_device)" ;;
++*)
++    echo "Format of install_device not recognized." 1>&2
++    usage
++    exit 1 ;;
++esac
++
++# Get the root drive.
++root_device=`find_device ${rootdir}`
++bootdir_device=`find_device ${bootdir}`
++
++# Check if the boot directory is in the same device as the root directory.
++if test "x$root_device" != "x$bootdir_device"; then
++    # Perhaps the user has a separate boot partition.
++    root_device=$bootdir_device
++    grub_prefix="/grub"
++fi
++
++# Convert the root device to a GRUB drive.
++root_drive=`convert "$root_device"`
++if test "x$root_drive" = x; then
++    exit 1
++fi
++
++# Check if the root directory exists in the same device as the grub
++# directory.
++grubdir_device=`find_device ${grubdir}`
++
++if test "x$grubdir_device" != "x$root_device"; then
++    # For now, cannot deal with this situation.
++    cat <<EOF 1>&2
++You must set the root directory by the option --root-directory, because
++$grubdir does not exist in the root device $root_device.
++EOF
++    exit 1
++fi
++
++# Copy the GRUB images to the GRUB directory.
++for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do
++    rm -f $file || exit 1
++done
++for file in \
++    ${pkglibdir}/stage1 ${pkglibdir}/stage2 ${pkglibdir}/*stage1_5; do
++    cp -f $file ${grubdir} || exit 1
++done
++
++# Make a default file.
++${grub_set_default} --root-directory=${rootdir} default
++
++# Make sure that GRUB reads the same images as the host OS.
++test -n "$mkimg" && img_file=`$mkimg`
++test -n "$mklog" && log_file=`$mklog`
++
++for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do
++    count=5
++    tmp=`echo $file | sed "s|^${grubdir}|${grub_prefix}|"`
++    while test $count -gt 0; do
++      $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
++dump ${root_drive}${tmp} ${img_file}
++quit
++EOF
++      if grep "Error [0-9]*: " $log_file >/dev/null; then
++          :
++      elif cmp $file $img_file >/dev/null; then
++          break
++      fi
++      sleep 1
++      count=`expr $count - 1`    
++    done
++    if test $count -eq 0; then
++      echo "The file $file not read correctly." 1>&2
++      exit 1
++    fi
++done
++
++rm -f $img_file
++rm -f $log_file
++
++# Create a safe temporary file.
++test -n "$mklog" && log_file=`$mklog`
++
++# Now perform the installation.
++$grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
++root $root_drive
++setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $install_drive
++quit
++EOF
++
++if grep "Error [0-9]*: " $log_file >/dev/null || test $debug = yes; then
++    cat $log_file 1>&2
++    exit 1
++fi
++
++rm -f $log_file
++
++# Prompt the user to check if the device map is correct.
++echo "Installation finished. No error reported."
++echo "This is the contents of the device map $device_map."
++echo "Check if this is correct or not. If any of the lines is incorrect,"
++echo "fix it and re-run the script \`grub-install'."
++echo
++
++cat $device_map
++
++# Bye.
++exit 0
+diff -Nur grub-0.97/util/mkbimage grub-0.97-patched/util/mkbimage
+--- grub-0.97/util/mkbimage    2004-07-24 20:57:31.000000000 +0200
++++ grub-0.97-patched/util/mkbimage    2012-11-11 17:07:12.744730138 +0100
+@@ -1,7 +1,7 @@
+ #!/bin/sh
+ # MaKe a Bootable IMAGE --- 1.44, 2.88 and El Torito no-emulation mode
+ # C) 2001,2002,2003 Thierry Laronde <tlaronde@polynum.org>
+-# C) 2001,2002,2003 Robert Millan <robertmh@gnu.org>
++# C) 2001,2002,2003 Robert Millan <rmh@aybabtu.com>
+ # This program is free software; you can redistribute it and/or modify
+@@ -94,15 +94,13 @@
+           display Version information and exit
+ Copyright (c) 2001,2002,2003 Thierry Laronde <tlaronde@polynum.org>. 
+-Copyright (c) 2001,2002 Robert Millan <zeratul2@wanadoo.es>.
+ GPLed."
+ version="mkbimage $version_number
+-Written by Thierry Laronde and Robert Millan.
++Written by Thierry Laronde.
+ Copyright (c) 2001,2002,2003 Thierry Laronde <tlaronde@polynum.org>.
+-Copyright (c) 2001,2002,2003 Robert Millan <zeratul2@wanadoo.es>.
+ This is free software under the GPL version 2 or later; see the source for 
+ copying conditions.  There is NO warranty, not even for MERCHANTABILITY or