]> code.delx.au - refind/commitdiff
Fixed right- vs. left-alignment issues for text-mode menus
authorsrs5694 <srs5694@users.sourceforge.net>
Fri, 9 Nov 2012 19:49:24 +0000 (14:49 -0500)
committersrs5694 <srs5694@users.sourceforge.net>
Fri, 9 Nov 2012 19:49:24 +0000 (14:49 -0500)
BUILDING.txt
NEWS.txt
docs/refind/installing.html
refind/main.c
refind/menu.c

index f41a6665942910673e6526dada3f59d745cebfac..410914280ee371b9d5c4aac23f6afb93e1a7ee52 100644 (file)
@@ -159,7 +159,8 @@ installed the toolkit:
    - ACTIVE_PLATFORM = MdePkg/MdePkg.dsc
    - TARGET = RELEASE (DEBUG might work, but I've not tested it).
    - TARGET_ARCH = X64 (on x86-64; leave this as IA32 on x86). If you plan
-     to build both architectures, you can set this to "IA32 X64".
+     to build both architectures on an x86-64 system, you can set this to
+     "IA32 X64".
    - TOOL_CHAIN_TAG = GCC46 (or other value depending on your GCC version;
      type "gcc -v" to learn your GCC version number). Note that GCC 4.7
      doesn't have its own entry, so use GCC46 for GCC 4.7.
@@ -212,11 +213,15 @@ With your development system set up, you can compile rEFInd as follows:
    want to build IA32 binaries on an x86-64 (X64) system, type "ARCH=ia32
    make". This works only if you're using the TianoCore build kit, and only
    if you set TARGET_ARCH to either "IA32" or "IA32 X64" in target.txt when
-   you set up the TianoCore.
+   you set up the TianoCore. If you plan to build both architectures, be
+   sure to copy the .efi file for the first build out of the refind
+   subdirectory before building the second architecture.
 
 5) The default build process does NOT build the filesystem drivers. If you
    want to build them, you must type "make fs" in the main rEFInd source
-   directory. The result is filesystem drivers in the filesystems
+   directory. (Typing "ARCH=ia32 make fs" builds IA32 filesystem drivers on
+   an x86-64 system, provided TianoCore is properly configured, as
+   described earlier.) The result is filesystem drivers in the filesystems
    subdirectory, and also copies placed in the drivers subdirectory. You
    must install the TianoCore EDK2 to build the drivers.
 
@@ -263,8 +268,8 @@ Installing rEFInd
 With rEFInd compiled, you can install it. The easiest way to do this is
 with the install.sh script, which works on both Linux and Mac OS X.
 Alternatively, you can type "make install" to install using this script.
-Note that this installation copies files to the ESP and uses "efibootmgr"
-(on Linux) or "bless" (on OS X) to add rEFInd to the firmware's boot loader
+Note that this script copies files to the ESP and uses "efibootmgr" (on
+Linux) or "bless" (on OS X) to add rEFInd to the firmware's boot loader
 list. The docs/refind/installing.html file provides more details on this
 script and its use.
 
@@ -310,14 +315,16 @@ change into the "filesystems" directory and type "make {fsname}", where
 To install drivers, you can type "make install" in the "filesystems"
 directory. This copies all the drivers to the
 "/boot/efi/EFI/refind/drivers" directory. Alternatively, you can copy the
-files you want manually.
+files you want manually. As of version 0.4.8, the install.sh script
+includes an optional "--drivers" option that will install the drivers along
+with the main rEFInd program.
 
 *CAUTION:* Install drivers for your system's architecture *ONLY*.
 Installing drivers for the wrong architecture causes some systems to hang
 at boot time.
 
 The drivers all rely on filesystem wrapper code created by rEFIt's author,
-Christoph Phisterer. Most of the drivers seem to have passed through
+Christoph Pfisterer. Most of the drivers seem to have passed through
 Oracle's VirtualBox project (https://www.virtualbox.org) and the Clover
 boot loader project (https://sourceforge.net/projects/cloverefiboot/),
 which I used as the source for this build.
index b9b1b5606b6435566d253afc99f5c79e845e010b..00449beefa241633306a62841a4997680a94cb55 100644 (file)
--- a/NEWS.txt
+++ b/NEWS.txt
@@ -1,6 +1,10 @@
 0.4.8 (??/??/2012):
 -------------------
 
+- Fixed bug that caused text-mode ("textonly" refind.conf option enabled)
+  menu entries to be right-aligned rather than left-aligned when rEFInd was
+  compiled with the TianoCore EDK2.
+
 - Added "--usedefault {devicename}" and "--drivers" options to the
   install.sh script and changed the "esp" option to "--esp". 
 
index 57dcf0b0210e867940970eb09591a3c53261ef3b..42fbe8a83acd4e785985e2a36f5dbba2b61a5d58 100644 (file)
@@ -99,7 +99,11 @@ href="mailto:rodsmith@rodsbooks.com">rodsmith@rodsbooks.com</a></p>
 
 <p class="sidebar"><b>Warning:</b> If you're using a Macintosh, you should run <tt>install.sh</tt> from Mac OS X rather than from Linux. If run from Linux, rEFInd is unlikely to be fully installed. Worse, it's conceivable that running <tt>install.sh</tt> from Linux will damage your firmware, requiring that it be re-flashed. The reason is that Apple uses non-standard methods to enable a boot loader, and the Linux functions in <tt>install.sh</tt> assume standard EFI installation methods.</p>
 
-<p>If you're using Linux or Mac OS X, the easiest way to install rEFInd is to use the <tt>install.sh</tt> script. Under Linux, this script installs rEFInd to your disk's ESP. Under Mac OS X, the script installs rEFInd to your current OS X boot partition by default; but you can install to your ESP instead by passing the script the <tt>esp</tt> option.</p>
+<p>If you're using Linux or Mac OS X, the easiest way to install rEFInd is to use the <tt>install.sh</tt> script. This script automatically copies rEFInd's files to your ESP or other target location and makes changes to your firmware's NVRAM settings so that rEFInd will start the next time you boot. If you've booted to OS X or in EFI mode to Linux on a UEFI-based PC, <tt>install.sh</tt> will probably do the right thing, so you can get by with the quick instructions. If your setup is unusual, though, or if you want to create a USB flash drive with rEFInd on it, you should read the <a href="#extra_installsh">extra instructions</a> for this utility.</p>
+
+<h3>Quick <tt>install.sh</tt> Instructions</h3>
+
+<p>Under Linux, the <tt>install.sh</tt> script installs rEFInd to your disk's ESP. Under Mac OS X, the script installs rEFInd to your current OS X boot partition by default; but you can install to your ESP instead by passing the script the <tt>--esp</tt> option.</p>
 
 <p>Before running this script under Linux, you should ensure that your ESP is mounted at <tt>/boot</tt> or <tt>/boot/efi</tt>, as described in more detail in the <a href="#linux">Installing rEFInd Manually Using Linux</a> section. (If you installed Linux in EFI mode, chances are your ESP is properly mounted.) This precaution isn't necessary under OS X.</p>
 
@@ -135,15 +139,16 @@ WARNING: If you have an Advanced Format disk, *DO NOT* attempt to check the
 bless status with 'bless --info', since this is known to cause disk corruption
 on some systems!!
 
-NOTE: If you want to boot an OS via BIOS emulation (such as Windows or some
-Linux installations), you *MUST* edit the ///EFI/refind/refind.conf
-file's 'scanfor' line to include the 'hdbios' option, and perhaps
-'biosexternal' and 'cd', as well.
-
 
 Installation has completed successfully.</pre>
 
-<p>In either case, the details of the output differ depending on your existing configuration and how you ran the program. Some details that can affect how the script runs include the following:</p>
+<p>In either case, the details of the output differ depending on your existing configuration and how you ran the program. Unless you see an obvious warning or error, you shouldn't be concerned about minor deviations from these examples. If you run into such a situation, or if you want to install in an unusual way, read on....</p>
+
+<a name="extra_installsh">
+<h3>Extra <tt>install.sh</tt> Instructions</h3>
+</a>
+
+<p>Some details that can affect how the script runs include the following:</p>
 
 <ul>
 
@@ -159,13 +164,13 @@ Installation has completed successfully.</pre>
     the Terminal window. You'll need to press the Return or Enter key to
     run the script.</li>
 
-<li>Under OS X, passing the "--esp" option causes the script to install
-    rEFInd to the ESP. The script finds the first ESP that's identified by
-    the <tt>diskutil</tt> program and, if it's not already mounted, mounts
-    it to install rEFInd. Thus, it's conceivable that <tt>install.sh</tt>
-    will install rEFInd to the wrong partition if you have multiple disks
-    or if a disk has multiple ESPs. If you believe this has happened, you
-    may need to re-install manually.</li>
+<li>Under OS X, passing the <tt>--esp</tt> option causes the script to
+    install rEFInd to the ESP. The script finds the first ESP that's
+    identified by the <tt>diskutil</tt> program and, if it's not already
+    mounted, mounts it to install rEFInd. Thus, it's conceivable that
+    <tt>install.sh</tt> will install rEFInd to the wrong partition if you
+    have multiple disks or if a disk has multiple ESPs. If you believe this
+    has happened, you may need to re-install manually.</li>
 
 <li>If you're using OS X 10.7's Whole Disk Encryption (WDE) feature, you
     <i>must</i> install rEFInd to the ESP, so the <tt>--esp</tt> option to
@@ -175,12 +180,12 @@ Installation has completed successfully.</pre>
     forum thread</a> for a discussion of the topic.</li>
 
 <li>If you're replacing rEFIt with rEFInd on a Mac, there's a chance that
-    <tt>install.sh</tt> will warn you about the presence of a file called
-    <tt>/Library/StartupItems/rEFItBlesser</tt> and ask if you want to
-    delete the file. This file is designed to keep rEFIt set as the boot
+    <tt>install.sh</tt> will warn you about the presence of a program
+    called <tt>/Library/StartupItems/rEFItBlesser</tt> and ask if you want
+    to delete it. This program is designed to keep rEFIt set as the boot
     manager by automatically re-blessing it if the default boot manager
     changes. This is obviously undesirable if you install rEFInd as your
-    primary boot manager, so it's generally best to remove this file. If
+    primary boot manager, so it's generally best to remove this program. If
     you prefer to keep your options open, you can answer <tt
     class="userinput">N</tt> when <tt>install.sh</tt> asks if you want to
     delete rEFItBlesser, and instead manually copy it elsewhere. If you
@@ -192,11 +197,11 @@ Installation has completed successfully.</pre>
     --info</tt> to check your installation status; this combination has
     been reported to cause disk corruption on some Macs!</li>
 
-<li>If you intend to boot BIOS-based OSes, such as most Windows
-    installations and some Linux installations, you <i>must</i> edit the
-    <tt>refind.conf</tt> file, as noted near the end of the installation
-    script's output. (Note that rEFInd can only boot such OSes on Macs at
-    the moment.)</li>
+<li>If you intend to boot BIOS-based OSes on a UEFI-based PC, you
+    <i>must</i> edit the <tt>refind.conf</tt> file's <tt>scanfor</tt> line
+    to enable the relevant searches. This is <i>not</i> necessary on Macs,
+    though; because of the popularity of dual boots with Windows on Macs,
+    the BIOS/legacy scans are enabled by default on Macs.</li>
 
 <li>Under both Linux and OS X, you can add the <tt>--drivers</tt> option to
     have <tt>install.sh</tt> install all the filesystem drivers along with
@@ -207,15 +212,16 @@ Installation has completed successfully.</pre>
     class="variable">devicepath</tt></tt> option to install rEFInd to the
     specified device as <tt>EFI/BOOT/bootx64.efi</tt> and
     <tt>EFI/BOOT/bootia32.efi</tt>. The specified device must be a valid
-    FAT partition. The idea is that you can easily create a bootable USB
-    flash drive with this option: Create a proper FAT-formatted ESP on a
-    disk (say, <tt>/dev/sdd1</tt>) and then type <tt class="userinput">sh
-    ./install --usedefault /dev/sdd1</tt> to turn the disk into an
-    emergency disk. This option can also be used to install rEFInd to an
-    ESP using the <a href="#naming">alternative naming options</a>
-    described later. This latter usage will result in a bootable rEFInd
-    only if no other OS has already created an NVRAM variable pointing to
-    itself.</li>
+    FAT partition. This option also tells the script to <i>not</i> make
+    changes to the computer's NVRAM. The idea is that you can easily create
+    a bootable USB flash drive with this option: Create a proper
+    FAT-formatted ESP on a disk (say, <tt>/dev/sdd1</tt>) and then type <tt
+    class="userinput">sh ./install --usedefault /dev/sdd1</tt> to turn the
+    disk into an emergency disk. This option can also be used to install
+    rEFInd to an ESP using the <a href="#naming">alternative naming
+    options</a> described later. This latter usage will result in a
+    bootable rEFInd only if no other OS has already created an NVRAM
+    variable pointing to itself.</li>
 
 </ul>
 
index 5e3bdc583993c26ade3d65333a38919504a3e676..11a41813e49ead26222b0a59466f719fd9c8253e 100644 (file)
@@ -115,7 +115,7 @@ static VOID AboutrEFInd(VOID)
 
     if (AboutMenu.EntryCount == 0) {
         AboutMenu.TitleImage = BuiltinIcon(BUILTIN_ICON_FUNC_ABOUT);
-        AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.4.7");
+        AddMenuInfoLine(&AboutMenu, L"rEFInd Version 0.4.7.1");
         AddMenuInfoLine(&AboutMenu, L"");
         AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2006-2010 Christoph Pfisterer");
         AddMenuInfoLine(&AboutMenu, L"Copyright (c) 2012 Roderick W. Smith");
index ba1f78dfcf1cd22cdd7f3fd0672d0e663fa4e9cb..423e8edebf881b51105d4f85bdf40e750fac1761 100644 (file)
@@ -526,10 +526,24 @@ static VOID TextMenuStyle(IN REFIT_MENU_SCREEN *Screen, IN SCROLL_STATE *State,
             // prepare strings for display
             DisplayStrings = AllocatePool(sizeof(CHAR16 *) * Screen->EntryCount);
             for (i = 0; i <= State->MaxIndex; i++) {
-                DisplayStrings[i] = AllocateZeroPool(256 * sizeof(CHAR16));
-                SPrint(DisplayStrings[i], 255, L" %-.*s ", MenuWidth, Screen->Entries[i]->Title);
-            // TODO: use more elaborate techniques for shortening too long strings (ellipses in the middle)
-            // TODO: account for double-width characters
+                // Note: Theoretically, SPrint() is a cleaner way to do this; but the
+                // description of the StrSize parameter to SPrint implies it's measured
+                // in characters, but in practice both TianoCore and GNU-EFI seem to
+                // use bytes instead, resulting in truncated displays. I could just
+                // double the size of the StrSize parameter, but that seems unsafe in
+                // case a future library change starts treating this as characters, so
+                // I'm doing it the hard way in this instance.
+                // TODO: Review the above and possibly change other uses of SPrint()
+                DisplayStrings[i] = AllocateZeroPool(2 * sizeof(CHAR16));
+                DisplayStrings[i][0] = L' ';
+                MergeStrings(&DisplayStrings[i], Screen->Entries[i]->Title, 0);
+                if (StrLen(DisplayStrings[i]) > MenuWidth)
+                   DisplayStrings[i][MenuWidth - 1] = 0;
+//                DisplayStrings[i] = AllocateZeroPool(256 * sizeof(CHAR16));
+//                SPrint(DisplayStrings[i], ((MenuWidth < 255) ? MenuWidth : 255) * sizeof(CHAR16),
+//                       L" %s ", Screen->Entries[i]->Title);
+                // TODO: use more elaborate techniques for shortening too long strings (ellipses in the middle)
+                // TODO: account for double-width characters
             } // for
 
             // initial painting