[5a4020f] | 1 | Submitted By: Jim Gifford (jim at linuxfromscratch dot org)
|
---|
| 2 | Date: 2006-07-04
|
---|
| 3 | Initial Package Version: 0.97
|
---|
| 4 | Origin: Debian
|
---|
| 5 | Upstream Status: Unknown
|
---|
| 6 | Description: Contains various fixes and enhancements
|
---|
| 7 | Graphics mode support
|
---|
| 8 | Fixes for Raid Support
|
---|
| 9 | XFS Filesystem Boot Freeze Fixes
|
---|
| 10 | Removed 2GB Memory Limitation
|
---|
| 11 | Freebsd support
|
---|
| 12 | Fixes for initrd support
|
---|
| 13 | Grub installation Fixes
|
---|
| 14 | Linux 2.6 geometry Fixes
|
---|
| 15 | Intel Mac Support
|
---|
| 16 | Autoconf and aclocal updates
|
---|
| 17 |
|
---|
| 18 | diff -Naur grub-0.97.orig/aclocal.m4 grub-0.97/aclocal.m4
|
---|
| 19 | --- grub-0.97.orig/aclocal.m4 2005-05-07 19:41:18.000000000 -0700
|
---|
| 20 | +++ grub-0.97/aclocal.m4 2006-07-04 00:08:22.000000000 -0700
|
---|
| 21 | @@ -1,7 +1,7 @@
|
---|
| 22 | -# generated automatically by aclocal 1.9.4 -*- Autoconf -*-
|
---|
| 23 | +# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
|
---|
| 24 |
|
---|
| 25 | -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
|
---|
| 26 | -# Free Software Foundation, Inc.
|
---|
| 27 | +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
---|
| 28 | +# 2005 Free Software Foundation, Inc.
|
---|
| 29 | # This file is free software; the Free Software Foundation
|
---|
| 30 | # gives unlimited permission to copy and/or distribute it,
|
---|
| 31 | # with or without modifications, as long as this notice is preserved.
|
---|
| 32 | @@ -11,23 +11,11 @@
|
---|
| 33 | # even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
---|
| 34 | # PARTICULAR PURPOSE.
|
---|
| 35 |
|
---|
| 36 | -# -*- Autoconf -*-
|
---|
| 37 | -# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
|
---|
| 38 | -# Generated from amversion.in; do not edit by hand.
|
---|
| 39 | -
|
---|
| 40 | -# This program is free software; you can redistribute it and/or modify
|
---|
| 41 | -# it under the terms of the GNU General Public License as published by
|
---|
| 42 | -# the Free Software Foundation; either version 2, or (at your option)
|
---|
| 43 | -# any later version.
|
---|
| 44 | -
|
---|
| 45 | -# This program is distributed in the hope that it will be useful,
|
---|
| 46 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 47 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 48 | -# GNU General Public License for more details.
|
---|
| 49 | -
|
---|
| 50 | -# You should have received a copy of the GNU General Public License
|
---|
| 51 | -# along with this program; if not, write to the Free Software
|
---|
| 52 | -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
| 53 | +# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
|
---|
| 54 | +#
|
---|
| 55 | +# This file is free software; the Free Software Foundation
|
---|
| 56 | +# gives unlimited permission to copy and/or distribute it,
|
---|
| 57 | +# with or without modifications, as long as this notice is preserved.
|
---|
| 58 |
|
---|
| 59 | # AM_AUTOMAKE_VERSION(VERSION)
|
---|
| 60 | # ----------------------------
|
---|
| 61 | @@ -40,26 +28,15 @@
|
---|
| 62 | # Call AM_AUTOMAKE_VERSION so it can be traced.
|
---|
| 63 | # This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
|
---|
| 64 | AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
---|
| 65 | - [AM_AUTOMAKE_VERSION([1.9.4])])
|
---|
| 66 | -
|
---|
| 67 | -# AM_AUX_DIR_EXPAND
|
---|
| 68 | -
|
---|
| 69 | -# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
|
---|
| 70 | + [AM_AUTOMAKE_VERSION([1.9.6])])
|
---|
| 71 |
|
---|
| 72 | -# This program is free software; you can redistribute it and/or modify
|
---|
| 73 | -# it under the terms of the GNU General Public License as published by
|
---|
| 74 | -# the Free Software Foundation; either version 2, or (at your option)
|
---|
| 75 | -# any later version.
|
---|
| 76 | +# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
---|
| 77 |
|
---|
| 78 | -# This program is distributed in the hope that it will be useful,
|
---|
| 79 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 80 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 81 | -# GNU General Public License for more details.
|
---|
| 82 | -
|
---|
| 83 | -# You should have received a copy of the GNU General Public License
|
---|
| 84 | -# along with this program; if not, write to the Free Software
|
---|
| 85 | -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
| 86 | -# 02111-1307, USA.
|
---|
| 87 | +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
---|
| 88 | +#
|
---|
| 89 | +# This file is free software; the Free Software Foundation
|
---|
| 90 | +# gives unlimited permission to copy and/or distribute it,
|
---|
| 91 | +# with or without modifications, as long as this notice is preserved.
|
---|
| 92 |
|
---|
| 93 | # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
|
---|
| 94 | # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
|
---|
| 95 | @@ -106,26 +83,16 @@
|
---|
| 96 | am_aux_dir=`cd $ac_aux_dir && pwd`
|
---|
| 97 | ])
|
---|
| 98 |
|
---|
| 99 | -# AM_CONDITIONAL -*- Autoconf -*-
|
---|
| 100 | +# AM_CONDITIONAL -*- Autoconf -*-
|
---|
| 101 |
|
---|
| 102 | -# Copyright (C) 1997, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
|
---|
| 103 | -
|
---|
| 104 | -# This program is free software; you can redistribute it and/or modify
|
---|
| 105 | -# it under the terms of the GNU General Public License as published by
|
---|
| 106 | -# the Free Software Foundation; either version 2, or (at your option)
|
---|
| 107 | -# any later version.
|
---|
| 108 | -
|
---|
| 109 | -# This program is distributed in the hope that it will be useful,
|
---|
| 110 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 111 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 112 | -# GNU General Public License for more details.
|
---|
| 113 | -
|
---|
| 114 | -# You should have received a copy of the GNU General Public License
|
---|
| 115 | -# along with this program; if not, write to the Free Software
|
---|
| 116 | -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
| 117 | -# 02111-1307, USA.
|
---|
| 118 | +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
|
---|
| 119 | +# Free Software Foundation, Inc.
|
---|
| 120 | +#
|
---|
| 121 | +# This file is free software; the Free Software Foundation
|
---|
| 122 | +# gives unlimited permission to copy and/or distribute it,
|
---|
| 123 | +# with or without modifications, as long as this notice is preserved.
|
---|
| 124 |
|
---|
| 125 | -# serial 6
|
---|
| 126 | +# serial 7
|
---|
| 127 |
|
---|
| 128 | # AM_CONDITIONAL(NAME, SHELL-CONDITION)
|
---|
| 129 | # -------------------------------------
|
---|
| 130 | @@ -149,26 +116,15 @@
|
---|
| 131 | Usually this means the macro was only invoked conditionally.]])
|
---|
| 132 | fi])])
|
---|
| 133 |
|
---|
| 134 | -# serial 7 -*- Autoconf -*-
|
---|
| 135 |
|
---|
| 136 | -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
|
---|
| 137 | +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
---|
| 138 | # Free Software Foundation, Inc.
|
---|
| 139 | +#
|
---|
| 140 | +# This file is free software; the Free Software Foundation
|
---|
| 141 | +# gives unlimited permission to copy and/or distribute it,
|
---|
| 142 | +# with or without modifications, as long as this notice is preserved.
|
---|
| 143 |
|
---|
| 144 | -# This program is free software; you can redistribute it and/or modify
|
---|
| 145 | -# it under the terms of the GNU General Public License as published by
|
---|
| 146 | -# the Free Software Foundation; either version 2, or (at your option)
|
---|
| 147 | -# any later version.
|
---|
| 148 | -
|
---|
| 149 | -# This program is distributed in the hope that it will be useful,
|
---|
| 150 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 151 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 152 | -# GNU General Public License for more details.
|
---|
| 153 | -
|
---|
| 154 | -# You should have received a copy of the GNU General Public License
|
---|
| 155 | -# along with this program; if not, write to the Free Software
|
---|
| 156 | -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
| 157 | -# 02111-1307, USA.
|
---|
| 158 | -
|
---|
| 159 | +# serial 8
|
---|
| 160 |
|
---|
| 161 | # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
|
---|
| 162 | # written in clear, in which case automake, when reading aclocal.m4,
|
---|
| 163 | @@ -177,7 +133,6 @@
|
---|
| 164 | # CC etc. in the Makefile, will ask for an AC_PROG_CC use...
|
---|
| 165 |
|
---|
| 166 |
|
---|
| 167 | -
|
---|
| 168 | # _AM_DEPENDENCIES(NAME)
|
---|
| 169 | # ----------------------
|
---|
| 170 | # See how the compiler implements dependency checking.
|
---|
| 171 | @@ -317,27 +272,16 @@
|
---|
| 172 | AC_SUBST([AMDEPBACKSLASH])
|
---|
| 173 | ])
|
---|
| 174 |
|
---|
| 175 | -# Generate code to set up dependency tracking. -*- Autoconf -*-
|
---|
| 176 | -
|
---|
| 177 | -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
|
---|
| 178 | -# Free Software Foundation, Inc.
|
---|
| 179 | -
|
---|
| 180 | -# This program is free software; you can redistribute it and/or modify
|
---|
| 181 | -# it under the terms of the GNU General Public License as published by
|
---|
| 182 | -# the Free Software Foundation; either version 2, or (at your option)
|
---|
| 183 | -# any later version.
|
---|
| 184 | +# Generate code to set up dependency tracking. -*- Autoconf -*-
|
---|
| 185 |
|
---|
| 186 | -# This program is distributed in the hope that it will be useful,
|
---|
| 187 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 188 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 189 | -# GNU General Public License for more details.
|
---|
| 190 | -
|
---|
| 191 | -# You should have received a copy of the GNU General Public License
|
---|
| 192 | -# along with this program; if not, write to the Free Software
|
---|
| 193 | -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
| 194 | -# 02111-1307, USA.
|
---|
| 195 | +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
---|
| 196 | +# Free Software Foundation, Inc.
|
---|
| 197 | +#
|
---|
| 198 | +# This file is free software; the Free Software Foundation
|
---|
| 199 | +# gives unlimited permission to copy and/or distribute it,
|
---|
| 200 | +# with or without modifications, as long as this notice is preserved.
|
---|
| 201 |
|
---|
| 202 | -#serial 2
|
---|
| 203 | +#serial 3
|
---|
| 204 |
|
---|
| 205 | # _AM_OUTPUT_DEPENDENCY_COMMANDS
|
---|
| 206 | # ------------------------------
|
---|
| 207 | @@ -396,30 +340,19 @@
|
---|
| 208 | [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
|
---|
| 209 | ])
|
---|
| 210 |
|
---|
| 211 | -# Do all the work for Automake. -*- Autoconf -*-
|
---|
| 212 | +# Do all the work for Automake. -*- Autoconf -*-
|
---|
| 213 |
|
---|
| 214 | -# This macro actually does too much some checks are only needed if
|
---|
| 215 | -# your package does certain things. But this isn't really a big deal.
|
---|
| 216 | -
|
---|
| 217 | -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
|
---|
| 218 | +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
---|
| 219 | # Free Software Foundation, Inc.
|
---|
| 220 | +#
|
---|
| 221 | +# This file is free software; the Free Software Foundation
|
---|
| 222 | +# gives unlimited permission to copy and/or distribute it,
|
---|
| 223 | +# with or without modifications, as long as this notice is preserved.
|
---|
| 224 |
|
---|
| 225 | -# This program is free software; you can redistribute it and/or modify
|
---|
| 226 | -# it under the terms of the GNU General Public License as published by
|
---|
| 227 | -# the Free Software Foundation; either version 2, or (at your option)
|
---|
| 228 | -# any later version.
|
---|
| 229 | -
|
---|
| 230 | -# This program is distributed in the hope that it will be useful,
|
---|
| 231 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 232 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 233 | -# GNU General Public License for more details.
|
---|
| 234 | -
|
---|
| 235 | -# You should have received a copy of the GNU General Public License
|
---|
| 236 | -# along with this program; if not, write to the Free Software
|
---|
| 237 | -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
| 238 | -# 02111-1307, USA.
|
---|
| 239 | +# serial 12
|
---|
| 240 |
|
---|
| 241 | -# serial 11
|
---|
| 242 | +# This macro actually does too much. Some checks are only needed if
|
---|
| 243 | +# your package does certain things. But this isn't really a big deal.
|
---|
| 244 |
|
---|
| 245 | # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
|
---|
| 246 | # AM_INIT_AUTOMAKE([OPTIONS])
|
---|
| 247 | @@ -521,51 +454,27 @@
|
---|
| 248 | done
|
---|
| 249 | echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
|
---|
| 250 |
|
---|
| 251 | +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
---|
| 252 | +#
|
---|
| 253 | +# This file is free software; the Free Software Foundation
|
---|
| 254 | +# gives unlimited permission to copy and/or distribute it,
|
---|
| 255 | +# with or without modifications, as long as this notice is preserved.
|
---|
| 256 | +
|
---|
| 257 | # AM_PROG_INSTALL_SH
|
---|
| 258 | # ------------------
|
---|
| 259 | # Define $install_sh.
|
---|
| 260 | -
|
---|
| 261 | -# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
|
---|
| 262 | -
|
---|
| 263 | -# This program is free software; you can redistribute it and/or modify
|
---|
| 264 | -# it under the terms of the GNU General Public License as published by
|
---|
| 265 | -# the Free Software Foundation; either version 2, or (at your option)
|
---|
| 266 | -# any later version.
|
---|
| 267 | -
|
---|
| 268 | -# This program is distributed in the hope that it will be useful,
|
---|
| 269 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 270 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 271 | -# GNU General Public License for more details.
|
---|
| 272 | -
|
---|
| 273 | -# You should have received a copy of the GNU General Public License
|
---|
| 274 | -# along with this program; if not, write to the Free Software
|
---|
| 275 | -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
| 276 | -# 02111-1307, USA.
|
---|
| 277 | -
|
---|
| 278 | AC_DEFUN([AM_PROG_INSTALL_SH],
|
---|
| 279 | [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
---|
| 280 | install_sh=${install_sh-"$am_aux_dir/install-sh"}
|
---|
| 281 | AC_SUBST(install_sh)])
|
---|
| 282 |
|
---|
| 283 | -# -*- Autoconf -*-
|
---|
| 284 | -# Copyright (C) 2003 Free Software Foundation, Inc.
|
---|
| 285 | -
|
---|
| 286 | -# This program is free software; you can redistribute it and/or modify
|
---|
| 287 | -# it under the terms of the GNU General Public License as published by
|
---|
| 288 | -# the Free Software Foundation; either version 2, or (at your option)
|
---|
| 289 | -# any later version.
|
---|
| 290 | -
|
---|
| 291 | -# This program is distributed in the hope that it will be useful,
|
---|
| 292 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 293 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 294 | -# GNU General Public License for more details.
|
---|
| 295 | -
|
---|
| 296 | -# You should have received a copy of the GNU General Public License
|
---|
| 297 | -# along with this program; if not, write to the Free Software
|
---|
| 298 | -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
| 299 | -# 02111-1307, USA.
|
---|
| 300 | +# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
|
---|
| 301 | +#
|
---|
| 302 | +# This file is free software; the Free Software Foundation
|
---|
| 303 | +# gives unlimited permission to copy and/or distribute it,
|
---|
| 304 | +# with or without modifications, as long as this notice is preserved.
|
---|
| 305 |
|
---|
| 306 | -# serial 1
|
---|
| 307 | +# serial 2
|
---|
| 308 |
|
---|
| 309 | # Check whether the underlying file-system supports filenames
|
---|
| 310 | # with a leading dot. For instance MS-DOS doesn't.
|
---|
| 311 | @@ -580,28 +489,17 @@
|
---|
| 312 | rmdir .tst 2>/dev/null
|
---|
| 313 | AC_SUBST([am__leading_dot])])
|
---|
| 314 |
|
---|
| 315 | -# Add --enable-maintainer-mode option to configure.
|
---|
| 316 | +# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
|
---|
| 317 | # From Jim Meyering
|
---|
| 318 |
|
---|
| 319 | -# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
|
---|
| 320 | +# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
|
---|
| 321 | # Free Software Foundation, Inc.
|
---|
| 322 | +#
|
---|
| 323 | +# This file is free software; the Free Software Foundation
|
---|
| 324 | +# gives unlimited permission to copy and/or distribute it,
|
---|
| 325 | +# with or without modifications, as long as this notice is preserved.
|
---|
| 326 |
|
---|
| 327 | -# This program is free software; you can redistribute it and/or modify
|
---|
| 328 | -# it under the terms of the GNU General Public License as published by
|
---|
| 329 | -# the Free Software Foundation; either version 2, or (at your option)
|
---|
| 330 | -# any later version.
|
---|
| 331 | -
|
---|
| 332 | -# This program is distributed in the hope that it will be useful,
|
---|
| 333 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 334 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 335 | -# GNU General Public License for more details.
|
---|
| 336 | -
|
---|
| 337 | -# You should have received a copy of the GNU General Public License
|
---|
| 338 | -# along with this program; if not, write to the Free Software
|
---|
| 339 | -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
| 340 | -# 02111-1307, USA.
|
---|
| 341 | -
|
---|
| 342 | -# serial 3
|
---|
| 343 | +# serial 4
|
---|
| 344 |
|
---|
| 345 | AC_DEFUN([AM_MAINTAINER_MODE],
|
---|
| 346 | [AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
|
---|
| 347 | @@ -620,26 +518,15 @@
|
---|
| 348 |
|
---|
| 349 | AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
|
---|
| 350 |
|
---|
| 351 | -# Check to see how 'make' treats includes. -*- Autoconf -*-
|
---|
| 352 | -
|
---|
| 353 | -# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
|
---|
| 354 | +# Check to see how 'make' treats includes. -*- Autoconf -*-
|
---|
| 355 |
|
---|
| 356 | -# This program is free software; you can redistribute it and/or modify
|
---|
| 357 | -# it under the terms of the GNU General Public License as published by
|
---|
| 358 | -# the Free Software Foundation; either version 2, or (at your option)
|
---|
| 359 | -# any later version.
|
---|
| 360 | -
|
---|
| 361 | -# This program is distributed in the hope that it will be useful,
|
---|
| 362 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 363 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 364 | -# GNU General Public License for more details.
|
---|
| 365 | -
|
---|
| 366 | -# You should have received a copy of the GNU General Public License
|
---|
| 367 | -# along with this program; if not, write to the Free Software
|
---|
| 368 | -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
| 369 | -# 02111-1307, USA.
|
---|
| 370 | +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
|
---|
| 371 | +#
|
---|
| 372 | +# This file is free software; the Free Software Foundation
|
---|
| 373 | +# gives unlimited permission to copy and/or distribute it,
|
---|
| 374 | +# with or without modifications, as long as this notice is preserved.
|
---|
| 375 |
|
---|
| 376 | -# serial 2
|
---|
| 377 | +# serial 3
|
---|
| 378 |
|
---|
| 379 | # AM_MAKE_INCLUDE()
|
---|
| 380 | # -----------------
|
---|
| 381 | @@ -683,27 +570,16 @@
|
---|
| 382 | rm -f confinc confmf
|
---|
| 383 | ])
|
---|
| 384 |
|
---|
| 385 | -# -*- Autoconf -*-
|
---|
| 386 | -
|
---|
| 387 | -
|
---|
| 388 | -# Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
|
---|
| 389 | -
|
---|
| 390 | -# This program is free software; you can redistribute it and/or modify
|
---|
| 391 | -# it under the terms of the GNU General Public License as published by
|
---|
| 392 | -# the Free Software Foundation; either version 2, or (at your option)
|
---|
| 393 | -# any later version.
|
---|
| 394 | +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
|
---|
| 395 |
|
---|
| 396 | -# This program is distributed in the hope that it will be useful,
|
---|
| 397 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 398 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 399 | -# GNU General Public License for more details.
|
---|
| 400 | -
|
---|
| 401 | -# You should have received a copy of the GNU General Public License
|
---|
| 402 | -# along with this program; if not, write to the Free Software
|
---|
| 403 | -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
| 404 | -# 02111-1307, USA.
|
---|
| 405 | +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
|
---|
| 406 | +# Free Software Foundation, Inc.
|
---|
| 407 | +#
|
---|
| 408 | +# This file is free software; the Free Software Foundation
|
---|
| 409 | +# gives unlimited permission to copy and/or distribute it,
|
---|
| 410 | +# with or without modifications, as long as this notice is preserved.
|
---|
| 411 |
|
---|
| 412 | -# serial 3
|
---|
| 413 | +# serial 4
|
---|
| 414 |
|
---|
| 415 | # AM_MISSING_PROG(NAME, PROGRAM)
|
---|
| 416 | # ------------------------------
|
---|
| 417 | @@ -729,27 +605,16 @@
|
---|
| 418 | fi
|
---|
| 419 | ])
|
---|
| 420 |
|
---|
| 421 | +# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
|
---|
| 422 | +#
|
---|
| 423 | +# This file is free software; the Free Software Foundation
|
---|
| 424 | +# gives unlimited permission to copy and/or distribute it,
|
---|
| 425 | +# with or without modifications, as long as this notice is preserved.
|
---|
| 426 | +
|
---|
| 427 | # AM_PROG_MKDIR_P
|
---|
| 428 | # ---------------
|
---|
| 429 | # Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
|
---|
| 430 | -
|
---|
| 431 | -# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
---|
| 432 | -
|
---|
| 433 | -# This program is free software; you can redistribute it and/or modify
|
---|
| 434 | -# it under the terms of the GNU General Public License as published by
|
---|
| 435 | -# the Free Software Foundation; either version 2, or (at your option)
|
---|
| 436 | -# any later version.
|
---|
| 437 | -
|
---|
| 438 | -# This program is distributed in the hope that it will be useful,
|
---|
| 439 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 440 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 441 | -# GNU General Public License for more details.
|
---|
| 442 | -
|
---|
| 443 | -# You should have received a copy of the GNU General Public License
|
---|
| 444 | -# along with this program; if not, write to the Free Software
|
---|
| 445 | -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
| 446 | -# 02111-1307, USA.
|
---|
| 447 | -
|
---|
| 448 | +#
|
---|
| 449 | # Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
|
---|
| 450 | # created by `make install' are always world readable, even if the
|
---|
| 451 | # installer happens to have an overly restrictive umask (e.g. 077).
|
---|
| 452 | @@ -803,26 +668,15 @@
|
---|
| 453 | fi
|
---|
| 454 | AC_SUBST([mkdir_p])])
|
---|
| 455 |
|
---|
| 456 | -# Helper functions for option handling. -*- Autoconf -*-
|
---|
| 457 | +# Helper functions for option handling. -*- Autoconf -*-
|
---|
| 458 |
|
---|
| 459 | -# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
|
---|
| 460 | -
|
---|
| 461 | -# This program is free software; you can redistribute it and/or modify
|
---|
| 462 | -# it under the terms of the GNU General Public License as published by
|
---|
| 463 | -# the Free Software Foundation; either version 2, or (at your option)
|
---|
| 464 | -# any later version.
|
---|
| 465 | -
|
---|
| 466 | -# This program is distributed in the hope that it will be useful,
|
---|
| 467 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 468 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 469 | -# GNU General Public License for more details.
|
---|
| 470 | -
|
---|
| 471 | -# You should have received a copy of the GNU General Public License
|
---|
| 472 | -# along with this program; if not, write to the Free Software
|
---|
| 473 | -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
| 474 | -# 02111-1307, USA.
|
---|
| 475 | +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
|
---|
| 476 | +#
|
---|
| 477 | +# This file is free software; the Free Software Foundation
|
---|
| 478 | +# gives unlimited permission to copy and/or distribute it,
|
---|
| 479 | +# with or without modifications, as long as this notice is preserved.
|
---|
| 480 |
|
---|
| 481 | -# serial 2
|
---|
| 482 | +# serial 3
|
---|
| 483 |
|
---|
| 484 | # _AM_MANGLE_OPTION(NAME)
|
---|
| 485 | # -----------------------
|
---|
| 486 | @@ -847,28 +701,16 @@
|
---|
| 487 | AC_DEFUN([_AM_IF_OPTION],
|
---|
| 488 | [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
|
---|
| 489 |
|
---|
| 490 | -#
|
---|
| 491 | -# Check to make sure that the build environment is sane.
|
---|
| 492 | -#
|
---|
| 493 | -
|
---|
| 494 | -# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
|
---|
| 495 | -
|
---|
| 496 | -# This program is free software; you can redistribute it and/or modify
|
---|
| 497 | -# it under the terms of the GNU General Public License as published by
|
---|
| 498 | -# the Free Software Foundation; either version 2, or (at your option)
|
---|
| 499 | -# any later version.
|
---|
| 500 | +# Check to make sure that the build environment is sane. -*- Autoconf -*-
|
---|
| 501 |
|
---|
| 502 | -# This program is distributed in the hope that it will be useful,
|
---|
| 503 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 504 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 505 | -# GNU General Public License for more details.
|
---|
| 506 | -
|
---|
| 507 | -# You should have received a copy of the GNU General Public License
|
---|
| 508 | -# along with this program; if not, write to the Free Software
|
---|
| 509 | -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
| 510 | -# 02111-1307, USA.
|
---|
| 511 | +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
|
---|
| 512 | +# Free Software Foundation, Inc.
|
---|
| 513 | +#
|
---|
| 514 | +# This file is free software; the Free Software Foundation
|
---|
| 515 | +# gives unlimited permission to copy and/or distribute it,
|
---|
| 516 | +# with or without modifications, as long as this notice is preserved.
|
---|
| 517 |
|
---|
| 518 | -# serial 3
|
---|
| 519 | +# serial 4
|
---|
| 520 |
|
---|
| 521 | # AM_SANITY_CHECK
|
---|
| 522 | # ---------------
|
---|
| 523 | @@ -911,25 +753,14 @@
|
---|
| 524 | fi
|
---|
| 525 | AC_MSG_RESULT(yes)])
|
---|
| 526 |
|
---|
| 527 | -# AM_PROG_INSTALL_STRIP
|
---|
| 528 | -
|
---|
| 529 | -# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
|
---|
| 530 | -
|
---|
| 531 | -# This program is free software; you can redistribute it and/or modify
|
---|
| 532 | -# it under the terms of the GNU General Public License as published by
|
---|
| 533 | -# the Free Software Foundation; either version 2, or (at your option)
|
---|
| 534 | -# any later version.
|
---|
| 535 | -
|
---|
| 536 | -# This program is distributed in the hope that it will be useful,
|
---|
| 537 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 538 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 539 | -# GNU General Public License for more details.
|
---|
| 540 | -
|
---|
| 541 | -# You should have received a copy of the GNU General Public License
|
---|
| 542 | -# along with this program; if not, write to the Free Software
|
---|
| 543 | -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
| 544 | -# 02111-1307, USA.
|
---|
| 545 | +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
---|
| 546 | +#
|
---|
| 547 | +# This file is free software; the Free Software Foundation
|
---|
| 548 | +# gives unlimited permission to copy and/or distribute it,
|
---|
| 549 | +# with or without modifications, as long as this notice is preserved.
|
---|
| 550 |
|
---|
| 551 | +# AM_PROG_INSTALL_STRIP
|
---|
| 552 | +# ---------------------
|
---|
| 553 | # One issue with vendor `install' (even GNU) is that you can't
|
---|
| 554 | # specify the program used to strip binaries. This is especially
|
---|
| 555 | # annoying in cross-compiling environments, where the build's strip
|
---|
| 556 | @@ -952,25 +783,13 @@
|
---|
| 557 |
|
---|
| 558 | # Check how to create a tarball. -*- Autoconf -*-
|
---|
| 559 |
|
---|
| 560 | -# Copyright (C) 2004 Free Software Foundation, Inc.
|
---|
| 561 | -
|
---|
| 562 | -# This program is free software; you can redistribute it and/or modify
|
---|
| 563 | -# it under the terms of the GNU General Public License as published by
|
---|
| 564 | -# the Free Software Foundation; either version 2, or (at your option)
|
---|
| 565 | -# any later version.
|
---|
| 566 | -
|
---|
| 567 | -# This program is distributed in the hope that it will be useful,
|
---|
| 568 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 569 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 570 | -# GNU General Public License for more details.
|
---|
| 571 | -
|
---|
| 572 | -# You should have received a copy of the GNU General Public License
|
---|
| 573 | -# along with this program; if not, write to the Free Software
|
---|
| 574 | -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
---|
| 575 | -# 02111-1307, USA.
|
---|
| 576 | -
|
---|
| 577 | -# serial 1
|
---|
| 578 | +# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
|
---|
| 579 | +#
|
---|
| 580 | +# This file is free software; the Free Software Foundation
|
---|
| 581 | +# gives unlimited permission to copy and/or distribute it,
|
---|
| 582 | +# with or without modifications, as long as this notice is preserved.
|
---|
| 583 |
|
---|
| 584 | +# serial 2
|
---|
| 585 |
|
---|
| 586 | # _AM_PROG_TAR(FORMAT)
|
---|
| 587 | # --------------------
|
---|
| 588 | diff -Naur grub-0.97.orig/ChangeLog grub-0.97/ChangeLog
|
---|
| 589 | --- grub-0.97.orig/ChangeLog 2005-05-07 19:47:02.000000000 -0700
|
---|
| 590 | +++ grub-0.97/ChangeLog 2006-07-04 00:01:50.000000000 -0700
|
---|
| 591 | @@ -1,3 +1,51 @@
|
---|
| 592 | +2006-05-02 Pavel Roskin <proski@gnu.org>
|
---|
| 593 | +
|
---|
| 594 | + * stage2/stage2.c (run_menu): Fix "savedefault" to save only top
|
---|
| 595 | + level menu positions. Remember current position when calling a
|
---|
| 596 | + submenu. Don't recalculate it when booting from a submenu.
|
---|
| 597 | +
|
---|
| 598 | + * grub/main.c (main): Make sure the boot drive number doesn't
|
---|
| 599 | + exceed 255.
|
---|
| 600 | +
|
---|
| 601 | +2006-05-02 Vesa Jaaskelainen <chaac@nic.fi>
|
---|
| 602 | +
|
---|
| 603 | + * stage2/shared.h (vbe_mode): Back ported aligment fix from GRUB 2
|
---|
| 604 | + to GRUB Legacy. Problem reported by Gerardo Richarte.
|
---|
| 605 | +
|
---|
| 606 | +2006-04-23 Robert Millan <robertmh@gnu.org>
|
---|
| 607 | +
|
---|
| 608 | + * grub/asmstub.c (get_diskinfo): Optimize sysctl routine.
|
---|
| 609 | +
|
---|
| 610 | +2006-04-20 Robert Millan <robertmh@gnu.org>
|
---|
| 611 | +
|
---|
| 612 | + Fixes for kernel of FreeBSD:
|
---|
| 613 | + * grub/asmstub.c (get_diskinfo): Toggle "kern.geom.debugflags" sysctl
|
---|
| 614 | + before opening a device for writing.
|
---|
| 615 | + * util/grub-install.in: Devices don't have this "r" prefix anymore.
|
---|
| 616 | +
|
---|
| 617 | +2006-04-16 Yoshinori K. Okuji <okuji@enbug.org>
|
---|
| 618 | +
|
---|
| 619 | + * docs/multiboot.texi: Correct the offset of address
|
---|
| 620 | + fields. Reported by Jeroen Dekkers.
|
---|
| 621 | +
|
---|
| 622 | +2006-03-21 Yoshinori K. Okuji <okuji@enbug.org>
|
---|
| 623 | +
|
---|
| 624 | + * stage2/builtins.c (setup_func): Specify the size of DEVICE to
|
---|
| 625 | + grub_strncat instead of a strange number 256. Reported by Vitaly
|
---|
| 626 | + Fertman <vitaly@namesys.com>.
|
---|
| 627 | +
|
---|
| 628 | +2005-09-29 Yoshinori K. Okuji <okuji@enbug.org>
|
---|
| 629 | +
|
---|
| 630 | + * docs/multiboot.texi: Fix a bug in the byte order of
|
---|
| 631 | + boot_device. I hope this won't affect any OS image.
|
---|
| 632 | + Increased the version number to 0.6.94.
|
---|
| 633 | +
|
---|
| 634 | +2005-09-28 Yoshinori K. Okuji <okuji@enbug.org>
|
---|
| 635 | +
|
---|
| 636 | + * stage2/boot.c (load_image): Even if an OS image is an ELF
|
---|
| 637 | + object, use the a.out kludge if MULTIBOOT_AOUT_KLUDGE is
|
---|
| 638 | + specified.
|
---|
| 639 | +
|
---|
| 640 | 2005-05-08 Yoshinori K. Okuji <okuji@enbug.org>
|
---|
| 641 |
|
---|
| 642 | * configure.ac (AC_INIT): Upgraded to 0.97.
|
---|
| 643 | diff -Naur grub-0.97.orig/configure grub-0.97/configure
|
---|
| 644 | --- grub-0.97.orig/configure 2005-05-07 19:48:12.000000000 -0700
|
---|
| 645 | +++ grub-0.97/configure 2006-07-04 00:08:05.000000000 -0700
|
---|
| 646 | @@ -311,7 +311,7 @@
|
---|
| 647 | # include <unistd.h>
|
---|
| 648 | #endif"
|
---|
| 649 |
|
---|
| 650 | -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'
|
---|
| 651 | +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 GRAPHICS_SUPPORT_TRUE GRAPHICS_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'
|
---|
| 652 | ac_subst_files=''
|
---|
| 653 |
|
---|
| 654 | # Initialize some variables set by options.
|
---|
| 655 | @@ -914,6 +914,7 @@
|
---|
| 656 | set the default memory location for WD/SMC
|
---|
| 657 | --enable-cs-scan=LIST probe for CS89x0 base address using LIST
|
---|
| 658 | --enable-diskless enable diskless support
|
---|
| 659 | + --disable-graphics disable graphics terminal support
|
---|
| 660 | --disable-hercules disable hercules terminal support
|
---|
| 661 | --disable-serial disable serial terminal support
|
---|
| 662 | --enable-serial-speed-simulation
|
---|
| 663 | @@ -5966,6 +5967,22 @@
|
---|
| 664 | fi
|
---|
| 665 |
|
---|
| 666 |
|
---|
| 667 | +# Check whether --enable-graphics or --disable-graphics was given.
|
---|
| 668 | +if test "${enable_graphics+set}" = set; then
|
---|
| 669 | + enableval="$enable_graphics"
|
---|
| 670 | +
|
---|
| 671 | +fi;
|
---|
| 672 | +
|
---|
| 673 | +
|
---|
| 674 | +if test "x$enable_graphics" != xno; then
|
---|
| 675 | + GRAPHICS_SUPPORT_TRUE=
|
---|
| 676 | + GRAPHICS_SUPPORT_FALSE='#'
|
---|
| 677 | +else
|
---|
| 678 | + GRAPHICS_SUPPORT_TRUE='#'
|
---|
| 679 | + GRAPHICS_SUPPORT_FALSE=
|
---|
| 680 | +fi
|
---|
| 681 | +
|
---|
| 682 | +
|
---|
| 683 | # Check whether --enable-hercules or --disable-hercules was given.
|
---|
| 684 | if test "${enable_hercules+set}" = set; then
|
---|
| 685 | enableval="$enable_hercules"
|
---|
| 686 | @@ -6270,6 +6287,13 @@
|
---|
| 687 | Usually this means the macro was only invoked conditionally." >&2;}
|
---|
| 688 | { (exit 1); exit 1; }; }
|
---|
| 689 | fi
|
---|
| 690 | +if test -z "${GRAPHICS_SUPPORT_TRUE}" && test -z "${GRAPHICS_SUPPORT_FALSE}"; then
|
---|
| 691 | + { { echo "$as_me:$LINENO: error: conditional \"GRAPHICS_SUPPORT\" was never defined.
|
---|
| 692 | +Usually this means the macro was only invoked conditionally." >&5
|
---|
| 693 | +echo "$as_me: error: conditional \"GRAPHICS_SUPPORT\" was never defined.
|
---|
| 694 | +Usually this means the macro was only invoked conditionally." >&2;}
|
---|
| 695 | + { (exit 1); exit 1; }; }
|
---|
| 696 | +fi
|
---|
| 697 | if test -z "${HERCULES_SUPPORT_TRUE}" && test -z "${HERCULES_SUPPORT_FALSE}"; then
|
---|
| 698 | { { echo "$as_me:$LINENO: error: conditional \"HERCULES_SUPPORT\" was never defined.
|
---|
| 699 | Usually this means the macro was only invoked conditionally." >&5
|
---|
| 700 | @@ -6907,6 +6931,8 @@
|
---|
| 701 | s,@NETBOOT_SUPPORT_FALSE@,$NETBOOT_SUPPORT_FALSE,;t t
|
---|
| 702 | s,@DISKLESS_SUPPORT_TRUE@,$DISKLESS_SUPPORT_TRUE,;t t
|
---|
| 703 | s,@DISKLESS_SUPPORT_FALSE@,$DISKLESS_SUPPORT_FALSE,;t t
|
---|
| 704 | +s,@GRAPHICS_SUPPORT_TRUE@,$GRAPHICS_SUPPORT_TRUE,;t t
|
---|
| 705 | +s,@GRAPHICS_SUPPORT_FALSE@,$GRAPHICS_SUPPORT_FALSE,;t t
|
---|
| 706 | s,@HERCULES_SUPPORT_TRUE@,$HERCULES_SUPPORT_TRUE,;t t
|
---|
| 707 | s,@HERCULES_SUPPORT_FALSE@,$HERCULES_SUPPORT_FALSE,;t t
|
---|
| 708 | s,@SERIAL_SUPPORT_TRUE@,$SERIAL_SUPPORT_TRUE,;t t
|
---|
| 709 | diff -Naur grub-0.97.orig/configure.ac grub-0.97/configure.ac
|
---|
| 710 | --- grub-0.97.orig/configure.ac 2005-05-07 19:36:03.000000000 -0700
|
---|
| 711 | +++ grub-0.97/configure.ac 2006-07-03 23:58:41.000000000 -0700
|
---|
| 712 | @@ -595,6 +595,11 @@
|
---|
| 713 | [ --enable-diskless enable diskless support])
|
---|
| 714 | AM_CONDITIONAL(DISKLESS_SUPPORT, test "x$enable_diskless" = xyes)
|
---|
| 715 |
|
---|
| 716 | +dnl Graphical splashscreen support
|
---|
| 717 | +AC_ARG_ENABLE(graphics,
|
---|
| 718 | + [ --disable-graphics disable graphics terminal support])
|
---|
| 719 | +AM_CONDITIONAL(GRAPHICS_SUPPORT, test "x$enable_graphics" != xno)
|
---|
| 720 | +
|
---|
| 721 | dnl Hercules terminal
|
---|
| 722 | AC_ARG_ENABLE(hercules,
|
---|
| 723 | [ --disable-hercules disable hercules terminal support])
|
---|
| 724 | diff -Naur grub-0.97.orig/docs/grub.8 grub-0.97/docs/grub.8
|
---|
| 725 | --- grub-0.97.orig/docs/grub.8 2005-05-07 19:48:56.000000000 -0700
|
---|
| 726 | +++ grub-0.97/docs/grub.8 2006-07-04 00:01:50.000000000 -0700
|
---|
| 727 | @@ -1,5 +1,5 @@
|
---|
| 728 | .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23.
|
---|
| 729 | -.TH GRUB "8" "May 2005" "grub (GNU GRUB 0.97)" FSF
|
---|
| 730 | +.TH GRUB "8" "September 2005" "grub (GNU GRUB 0.97)" FSF
|
---|
| 731 | .SH NAME
|
---|
| 732 | grub \- the grub shell
|
---|
| 733 | .SH SYNOPSIS
|
---|
| 734 | diff -Naur grub-0.97.orig/docs/grub.texi grub-0.97/docs/grub.texi
|
---|
| 735 | --- grub-0.97.orig/docs/grub.texi 2005-05-07 19:59:59.000000000 -0700
|
---|
| 736 | +++ grub-0.97/docs/grub.texi 2006-07-04 00:00:54.000000000 -0700
|
---|
| 737 | @@ -2199,6 +2199,7 @@
|
---|
| 738 | * rarp:: Initialize a network device via RARP
|
---|
| 739 | * serial:: Set up a serial device
|
---|
| 740 | * setkey:: Configure the key map
|
---|
| 741 | +* splashimage:: Use a splash image
|
---|
| 742 | * terminal:: Choose a terminal
|
---|
| 743 | * terminfo:: Define escape sequences for a terminal
|
---|
| 744 | * tftpserver:: Specify a TFTP server
|
---|
| 745 | @@ -2578,6 +2579,16 @@
|
---|
| 746 | @end deffn
|
---|
| 747 |
|
---|
| 748 |
|
---|
| 749 | +@node splashimage
|
---|
| 750 | +@subsection splashimage
|
---|
| 751 | +
|
---|
| 752 | +@deffn Command splashimage file
|
---|
| 753 | +Select an image to use as the background image. This should be
|
---|
| 754 | +specified using normal GRUB device naming syntax. The format of the
|
---|
| 755 | +file is a gzipped xpm which is 640x480 with a 14 color palette.
|
---|
| 756 | +@end deffn
|
---|
| 757 | +
|
---|
| 758 | +
|
---|
| 759 | @node terminal
|
---|
| 760 | @subsection terminal
|
---|
| 761 |
|
---|
| 762 | @@ -2685,6 +2696,7 @@
|
---|
| 763 | * module:: Load a module
|
---|
| 764 | * modulenounzip:: Load a module without decompression
|
---|
| 765 | * pause:: Wait for a key press
|
---|
| 766 | +* print:: Print a message
|
---|
| 767 | * quit:: Exit from the grub shell
|
---|
| 768 | * reboot:: Reboot your computer
|
---|
| 769 | * read:: Read data from memory
|
---|
| 770 | @@ -3091,6 +3103,16 @@
|
---|
| 771 | @end deffn
|
---|
| 772 |
|
---|
| 773 |
|
---|
| 774 | +@node print
|
---|
| 775 | +@subsection print
|
---|
| 776 | +
|
---|
| 777 | +@deffn Command print message @dots{}
|
---|
| 778 | +Print the @var{message}. Note that placing @key{^G} (ASCII code 7) in the
|
---|
| 779 | +message will cause the speaker to emit the standard beep sound, which is
|
---|
| 780 | +useful for visually impaired people.
|
---|
| 781 | +@end deffn
|
---|
| 782 | +
|
---|
| 783 | +
|
---|
| 784 | @node quit
|
---|
| 785 | @subsection quit
|
---|
| 786 |
|
---|
| 787 | diff -Naur grub-0.97.orig/docs/multiboot.texi grub-0.97/docs/multiboot.texi
|
---|
| 788 | --- grub-0.97.orig/docs/multiboot.texi 2003-07-09 04:45:36.000000000 -0700
|
---|
| 789 | +++ grub-0.97/docs/multiboot.texi 2006-07-04 00:01:50.000000000 -0700
|
---|
| 790 | @@ -25,7 +25,7 @@
|
---|
| 791 | @ifinfo
|
---|
| 792 | Copyright @copyright{} 1995, 96 Bryan Ford <baford@@cs.utah.edu>
|
---|
| 793 | Copyright @copyright{} 1995, 96 Erich Stefan Boleyn <erich@@uruk.org>
|
---|
| 794 | -Copyright @copyright{} 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
---|
| 795 | +Copyright @copyright{} 1999, 2000, 2001, 2002, 2005, 2006 Free Software Foundation, Inc.
|
---|
| 796 |
|
---|
| 797 | Permission is granted to make and distribute verbatim copies of
|
---|
| 798 | this manual provided the copyright notice and this permission notice
|
---|
| 799 | @@ -57,7 +57,7 @@
|
---|
| 800 | @vskip 0pt plus 1filll
|
---|
| 801 | Copyright @copyright{} 1995, 96 Bryan Ford <baford@@cs.utah.edu>
|
---|
| 802 | Copyright @copyright{} 1995, 96 Erich Stefan Boleyn <erich@@uruk.org>
|
---|
| 803 | -Copyright @copyright{} 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
---|
| 804 | +Copyright @copyright{} 1999, 2000, 2001, 2002, 2005, 2006 Free Software Foundation, Inc.
|
---|
| 805 |
|
---|
| 806 | Permission is granted to make and distribute verbatim copies of
|
---|
| 807 | this manual provided the copyright notice and this permission notice
|
---|
| 808 | @@ -80,7 +80,7 @@
|
---|
| 809 | @top Multiboot Specification
|
---|
| 810 |
|
---|
| 811 | This file documents Multiboot Specification, the proposal for the boot
|
---|
| 812 | -sequence standard. This edition documents version 0.6.93.
|
---|
| 813 | +sequence standard. This edition documents version 0.6.94.
|
---|
| 814 | @end ifnottex
|
---|
| 815 |
|
---|
| 816 | @menu
|
---|
| 817 | @@ -426,7 +426,7 @@
|
---|
| 818 | kernel.
|
---|
| 819 |
|
---|
| 820 | If bit 16 in the @samp{flags} word is set, then the fields at offsets
|
---|
| 821 | -8-24 in the Multiboot header are valid, and the boot loader should use
|
---|
| 822 | +12-28 in the Multiboot header are valid, and the boot loader should use
|
---|
| 823 | them instead of the fields in the actual executable header to calculate
|
---|
| 824 | where to load the OS image. This information does not need to be
|
---|
| 825 | provided if the kernel image is in @sc{elf} format, but it @emph{must}
|
---|
| 826 | @@ -677,7 +677,7 @@
|
---|
| 827 | @example
|
---|
| 828 | @group
|
---|
| 829 | +-------+-------+-------+-------+
|
---|
| 830 | -| drive | part1 | part2 | part3 |
|
---|
| 831 | +| part3 | part2 | part1 | drive |
|
---|
| 832 | +-------+-------+-------+-------+
|
---|
| 833 | @end group
|
---|
| 834 | @end example
|
---|
| 835 | @@ -1199,6 +1199,13 @@
|
---|
| 836 | @email{bug-grub@@gnu.org}, from Bryan Ford and Erich Stefan Boleyn.
|
---|
| 837 | @end itemize
|
---|
| 838 |
|
---|
| 839 | +@item
|
---|
| 840 | +The byte order of the @samp{boot_device} in Multiboot information is
|
---|
| 841 | +reversed. This was a mistake.
|
---|
| 842 | +
|
---|
| 843 | +@item
|
---|
| 844 | +The offset of the address fields were wrong.
|
---|
| 845 | +
|
---|
| 846 | @item 0.6
|
---|
| 847 | @itemize @bullet
|
---|
| 848 | @item
|
---|
| 849 | diff -Naur grub-0.97.orig/grub/asmstub.c grub-0.97/grub/asmstub.c
|
---|
| 850 | --- grub-0.97.orig/grub/asmstub.c 2005-02-16 12:45:14.000000000 -0800
|
---|
| 851 | +++ grub-0.97/grub/asmstub.c 2006-07-04 00:01:50.000000000 -0700
|
---|
| 852 | @@ -42,6 +42,12 @@
|
---|
| 853 | #include <sys/time.h>
|
---|
| 854 | #include <termios.h>
|
---|
| 855 | #include <signal.h>
|
---|
| 856 | +#include <sys/mman.h>
|
---|
| 857 | +
|
---|
| 858 | +#include <limits.h>
|
---|
| 859 | +#ifndef PAGESIZE
|
---|
| 860 | +#define PAGESIZE 4096
|
---|
| 861 | +#endif
|
---|
| 862 |
|
---|
| 863 | #ifdef __linux__
|
---|
| 864 | # include <sys/ioctl.h> /* ioctl */
|
---|
| 865 | @@ -55,6 +61,10 @@
|
---|
| 866 | # endif /* ! BLKFLSBUF */
|
---|
| 867 | #endif /* __linux__ */
|
---|
| 868 |
|
---|
| 869 | +#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__)
|
---|
| 870 | +# include <sys/sysctl.h>
|
---|
| 871 | +#endif
|
---|
| 872 | +
|
---|
| 873 | /* We want to prevent any circularararity in our stubs, as well as
|
---|
| 874 | libc name clashes. */
|
---|
| 875 | #define WITHOUT_LIBC_STUBS 1
|
---|
| 876 | @@ -144,6 +154,22 @@
|
---|
| 877 | assert (grub_scratch_mem == 0);
|
---|
| 878 | scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15);
|
---|
| 879 | assert (scratch);
|
---|
| 880 | +
|
---|
| 881 | + {
|
---|
| 882 | + char *p;
|
---|
| 883 | + int ret;
|
---|
| 884 | +
|
---|
| 885 | + /* Align to a multiple of PAGESIZE, assumed to be a power of two. */
|
---|
| 886 | + p = (char *) (((long) scratch) & ~(PAGESIZE - 1));
|
---|
| 887 | +
|
---|
| 888 | + /* The simulated stack needs to be executable, since GCC uses stack
|
---|
| 889 | + * trampolines to implement nested functions.
|
---|
| 890 | + */
|
---|
| 891 | + ret = mprotect (p, 0x100000 + EXTENDED_MEMSIZE + 15,
|
---|
| 892 | + PROT_READ | PROT_WRITE | PROT_EXEC);
|
---|
| 893 | + assert (ret == 0);
|
---|
| 894 | + }
|
---|
| 895 | +
|
---|
| 896 | grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4);
|
---|
| 897 |
|
---|
| 898 | /* FIXME: simulate the memory holes using mprot, if available. */
|
---|
| 899 | @@ -777,7 +803,39 @@
|
---|
| 900 |
|
---|
| 901 | /* Open read/write, or read-only if that failed. */
|
---|
| 902 | if (! read_only)
|
---|
| 903 | - disks[drive].flags = open (devname, O_RDWR);
|
---|
| 904 | + {
|
---|
| 905 | +/* By default, kernel of FreeBSD does not allow overwriting MBR */
|
---|
| 906 | +#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__)
|
---|
| 907 | +#define GEOM_SYSCTL "kern.geom.debugflags"
|
---|
| 908 | + int old_flags, flags;
|
---|
| 909 | + size_t sizeof_int = sizeof (int);
|
---|
| 910 | +
|
---|
| 911 | + if (sysctlbyname (GEOM_SYSCTL, &old_flags, &sizeof_int, NULL, 0) != 0)
|
---|
| 912 | + grub_printf ("failed to get " GEOM_SYSCTL "sysctl: %s\n", strerror (errno));
|
---|
| 913 | +
|
---|
| 914 | + if ((old_flags & 0x10) == 0)
|
---|
| 915 | + {
|
---|
| 916 | + /* "allow foot shooting", see geom(4) */
|
---|
| 917 | + flags = old_flags | 0x10;
|
---|
| 918 | +
|
---|
| 919 | + if (sysctlbyname (GEOM_SYSCTL, NULL, NULL, &flags, sizeof (int)) != 0)
|
---|
| 920 | + {
|
---|
| 921 | + flags = old_flags;
|
---|
| 922 | + grub_printf ("failed to set " GEOM_SYSCTL "sysctl: %s\n", strerror (errno));
|
---|
| 923 | + }
|
---|
| 924 | + }
|
---|
| 925 | + else
|
---|
| 926 | + flags = old_flags;
|
---|
| 927 | +#endif
|
---|
| 928 | + disks[drive].flags = open (devname, O_RDWR);
|
---|
| 929 | +#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__)
|
---|
| 930 | + if (flags != old_flags)
|
---|
| 931 | + {
|
---|
| 932 | + if (sysctlbyname (GEOM_SYSCTL, NULL, NULL, &old_flags, sizeof (int)) != 0)
|
---|
| 933 | + grub_printf ("failed to set " GEOM_SYSCTL "sysctl: %s\n", strerror (errno));
|
---|
| 934 | + }
|
---|
| 935 | +#endif
|
---|
| 936 | + }
|
---|
| 937 |
|
---|
| 938 | if (disks[drive].flags == -1)
|
---|
| 939 | {
|
---|
| 940 | diff -Naur grub-0.97.orig/grub/main.c grub-0.97/grub/main.c
|
---|
| 941 | --- grub-0.97.orig/grub/main.c 2003-07-09 04:45:36.000000000 -0700
|
---|
| 942 | +++ grub-0.97/grub/main.c 2006-07-04 00:01:50.000000000 -0700
|
---|
| 943 | @@ -32,6 +32,7 @@
|
---|
| 944 | #define WITHOUT_LIBC_STUBS 1
|
---|
| 945 | #include <shared.h>
|
---|
| 946 | #include <term.h>
|
---|
| 947 | +#include <device.h>
|
---|
| 948 |
|
---|
| 949 | char *program_name = 0;
|
---|
| 950 | int use_config_file = 1;
|
---|
| 951 | @@ -192,6 +193,12 @@
|
---|
| 952 | perror ("strtoul");
|
---|
| 953 | exit (1);
|
---|
| 954 | }
|
---|
| 955 | + if (boot_drive >= NUM_DISKS)
|
---|
| 956 | + {
|
---|
| 957 | + fprintf (stderr, "boot_drive should be from 0 to %d\n",
|
---|
| 958 | + NUM_DISKS - 1);
|
---|
| 959 | + exit (1);
|
---|
| 960 | + }
|
---|
| 961 | break;
|
---|
| 962 |
|
---|
| 963 | case OPT_NO_CONFIG_FILE:
|
---|
| 964 | diff -Naur grub-0.97.orig/lib/device.c grub-0.97/lib/device.c
|
---|
| 965 | --- grub-0.97.orig/lib/device.c 2005-03-27 15:14:25.000000000 -0800
|
---|
| 966 | +++ grub-0.97/lib/device.c 2006-07-04 00:00:44.000000000 -0700
|
---|
| 967 | @@ -131,6 +131,152 @@
|
---|
| 968 | #include <shared.h>
|
---|
| 969 | #include <device.h>
|
---|
| 970 |
|
---|
| 971 | +#if defined(__linux__)
|
---|
| 972 | +/* The 2.6 kernel has removed all of the geometry handling for IDE drives
|
---|
| 973 | + * that did fixups for LBA, etc. This means that the geometry we get
|
---|
| 974 | + * with the ioctl has a good chance of being wrong. So, we get to
|
---|
| 975 | + * also know about partition tables and try to read what the geometry
|
---|
| 976 | + * is there. *grumble* Very closely based on code from cfdisk
|
---|
| 977 | + */
|
---|
| 978 | +static void get_kernel_geometry(int fd, long long *cyl, int *heads, int *sectors) {
|
---|
| 979 | + struct hd_geometry hdg;
|
---|
| 980 | +
|
---|
| 981 | + if (ioctl (fd, HDIO_GETGEO, &hdg))
|
---|
| 982 | + return;
|
---|
| 983 | +
|
---|
| 984 | + *cyl = hdg.cylinders;
|
---|
| 985 | + *heads = hdg.heads;
|
---|
| 986 | + *sectors = hdg.sectors;
|
---|
| 987 | +}
|
---|
| 988 | +
|
---|
| 989 | +struct partition {
|
---|
| 990 | + unsigned char boot_ind; /* 0x80 - active */
|
---|
| 991 | + unsigned char head; /* starting head */
|
---|
| 992 | + unsigned char sector; /* starting sector */
|
---|
| 993 | + unsigned char cyl; /* starting cylinder */
|
---|
| 994 | + unsigned char sys_ind; /* What partition type */
|
---|
| 995 | + unsigned char end_head; /* end head */
|
---|
| 996 | + unsigned char end_sector; /* end sector */
|
---|
| 997 | + unsigned char end_cyl; /* end cylinder */
|
---|
| 998 | + unsigned char start4[4]; /* starting sector counting from 0 */
|
---|
| 999 | + unsigned char size4[4]; /* nr of sectors in partition */
|
---|
| 1000 | +};
|
---|
| 1001 | +
|
---|
| 1002 | +#define ALIGNMENT 2
|
---|
| 1003 | +typedef union {
|
---|
| 1004 | + struct {
|
---|
| 1005 | + unsigned char align[ALIGNMENT];
|
---|
| 1006 | + unsigned char b[SECTOR_SIZE];
|
---|
| 1007 | + } c;
|
---|
| 1008 | + struct {
|
---|
| 1009 | + unsigned char align[ALIGNMENT];
|
---|
| 1010 | + unsigned char buffer[0x1BE];
|
---|
| 1011 | + struct partition part[4];
|
---|
| 1012 | + unsigned char magicflag[2];
|
---|
| 1013 | + } p;
|
---|
| 1014 | +} partition_table;
|
---|
| 1015 | +
|
---|
| 1016 | +#define PART_TABLE_FLAG0 0x55
|
---|
| 1017 | +#define PART_TABLE_FLAG1 0xAA
|
---|
| 1018 | +
|
---|
| 1019 | +static void
|
---|
| 1020 | +get_partition_table_geometry(partition_table *bufp, long long *cyl, int *heads,
|
---|
| 1021 | + int *sectors) {
|
---|
| 1022 | + struct partition *p;
|
---|
| 1023 | + int i,h,s,hh,ss;
|
---|
| 1024 | + int first = 1;
|
---|
| 1025 | + int bad = 0;
|
---|
| 1026 | +
|
---|
| 1027 | + if (bufp->p.magicflag[0] != PART_TABLE_FLAG0 ||
|
---|
| 1028 | + bufp->p.magicflag[1] != PART_TABLE_FLAG1) {
|
---|
| 1029 | + /* Matthew Wilcox: slightly friendlier version of
|
---|
| 1030 | + fatal(_("Bad signature on partition table"), 3);
|
---|
| 1031 | + */
|
---|
| 1032 | + fprintf(stderr, "Unknown partition table signature\n");
|
---|
| 1033 | + return;
|
---|
| 1034 | + }
|
---|
| 1035 | +
|
---|
| 1036 | + hh = ss = 0;
|
---|
| 1037 | + for (i=0; i<4; i++) {
|
---|
| 1038 | + p = &(bufp->p.part[i]);
|
---|
| 1039 | + if (p->sys_ind != 0) {
|
---|
| 1040 | + h = p->end_head + 1;
|
---|
| 1041 | + s = (p->end_sector & 077);
|
---|
| 1042 | + if (first) {
|
---|
| 1043 | + hh = h;
|
---|
| 1044 | + ss = s;
|
---|
| 1045 | + first = 0;
|
---|
| 1046 | + } else if (hh != h || ss != s)
|
---|
| 1047 | + bad = 1;
|
---|
| 1048 | + }
|
---|
| 1049 | + }
|
---|
| 1050 | +
|
---|
| 1051 | + if (!first && !bad) {
|
---|
| 1052 | + *heads = hh;
|
---|
| 1053 | + *sectors = ss;
|
---|
| 1054 | + }
|
---|
| 1055 | +}
|
---|
| 1056 | +
|
---|
| 1057 | +static long long my_lseek (unsigned int fd, long long offset,
|
---|
| 1058 | + unsigned int origin)
|
---|
| 1059 | +{
|
---|
| 1060 | +#if defined(__linux__) && (!defined(__GLIBC__) || \
|
---|
| 1061 | + ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))))
|
---|
| 1062 | + /* Maybe libc doesn't have large file support. */
|
---|
| 1063 | + loff_t offset, result;
|
---|
| 1064 | + static int _llseek (uint filedes, ulong hi, ulong lo,
|
---|
| 1065 | + loff_t *res, uint wh);
|
---|
| 1066 | + _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo,
|
---|
| 1067 | + loff_t *, res, uint, wh);
|
---|
| 1068 | +
|
---|
| 1069 | + if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET) < 0)
|
---|
| 1070 | + return (long long) -1;
|
---|
| 1071 | + return result;
|
---|
| 1072 | +#else
|
---|
| 1073 | + return lseek(fd, offset, SEEK_SET);
|
---|
| 1074 | +#endif
|
---|
| 1075 | +}
|
---|
| 1076 | +
|
---|
| 1077 | +static void get_linux_geometry (int fd, struct geometry *geom) {
|
---|
| 1078 | + long long kern_cyl = 0; int kern_head = 0, kern_sectors = 0;
|
---|
| 1079 | + long long pt_cyl = 0; int pt_head = 0, pt_sectors = 0;
|
---|
| 1080 | + partition_table bufp;
|
---|
| 1081 | + char *buff, *buf_unaligned;
|
---|
| 1082 | +
|
---|
| 1083 | + buf_unaligned = malloc(sizeof(partition_table) + 4095);
|
---|
| 1084 | + buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) &
|
---|
| 1085 | + (~(4096-1)));
|
---|
| 1086 | +
|
---|
| 1087 | + get_kernel_geometry(fd, &kern_cyl, &kern_head, &kern_sectors);
|
---|
| 1088 | +
|
---|
| 1089 | + if (my_lseek (fd, 0*SECTOR_SIZE, SEEK_SET) < 0) {
|
---|
| 1090 | + fprintf(stderr, "Unable to seek");
|
---|
| 1091 | + }
|
---|
| 1092 | +
|
---|
| 1093 | + if (read(fd, buff, SECTOR_SIZE) == SECTOR_SIZE) {
|
---|
| 1094 | + memcpy(bufp.c.b, buff, SECTOR_SIZE);
|
---|
| 1095 | + get_partition_table_geometry(&bufp, &pt_cyl, &pt_head, &pt_sectors);
|
---|
| 1096 | + } else {
|
---|
| 1097 | + fprintf(stderr, "Unable to read partition table: %s\n", strerror(errno));
|
---|
| 1098 | + }
|
---|
| 1099 | +
|
---|
| 1100 | + if (pt_head && pt_sectors) {
|
---|
| 1101 | + int cyl_size;
|
---|
| 1102 | +
|
---|
| 1103 | + geom->heads = pt_head;
|
---|
| 1104 | + geom->sectors = pt_sectors;
|
---|
| 1105 | + cyl_size = pt_head * pt_sectors;
|
---|
| 1106 | + geom->cylinders = geom->total_sectors/cyl_size;
|
---|
| 1107 | + } else {
|
---|
| 1108 | + geom->heads = kern_head;
|
---|
| 1109 | + geom->sectors = kern_sectors;
|
---|
| 1110 | + geom->cylinders = kern_cyl;
|
---|
| 1111 | + }
|
---|
| 1112 | +
|
---|
| 1113 | + return;
|
---|
| 1114 | +}
|
---|
| 1115 | +#endif
|
---|
| 1116 | +
|
---|
| 1117 | /* Get the geometry of a drive DRIVE. */
|
---|
| 1118 | void
|
---|
| 1119 | get_drive_geometry (struct geometry *geom, char **map, int drive)
|
---|
| 1120 | @@ -151,21 +297,16 @@
|
---|
| 1121 | #if defined(__linux__)
|
---|
| 1122 | /* Linux */
|
---|
| 1123 | {
|
---|
| 1124 | - struct hd_geometry hdg;
|
---|
| 1125 | unsigned long nr;
|
---|
| 1126 | -
|
---|
| 1127 | - if (ioctl (fd, HDIO_GETGEO, &hdg))
|
---|
| 1128 | - goto fail;
|
---|
| 1129 |
|
---|
| 1130 | if (ioctl (fd, BLKGETSIZE, &nr))
|
---|
| 1131 | goto fail;
|
---|
| 1132 |
|
---|
| 1133 | /* Got the geometry, so save it. */
|
---|
| 1134 | - geom->cylinders = hdg.cylinders;
|
---|
| 1135 | - geom->heads = hdg.heads;
|
---|
| 1136 | - geom->sectors = hdg.sectors;
|
---|
| 1137 | geom->total_sectors = nr;
|
---|
| 1138 | -
|
---|
| 1139 | + get_linux_geometry(fd, geom);
|
---|
| 1140 | + if (!geom->heads && !geom->cylinders && !geom->sectors)
|
---|
| 1141 | + goto fail;
|
---|
| 1142 | goto success;
|
---|
| 1143 | }
|
---|
| 1144 |
|
---|
| 1145 | @@ -403,6 +544,18 @@
|
---|
| 1146 | }
|
---|
| 1147 |
|
---|
| 1148 | static void
|
---|
| 1149 | +get_cciss_disk_name (char *name, int controller, int drive)
|
---|
| 1150 | +{
|
---|
| 1151 | + sprintf (name, "/dev/cciss/c%dd%d", controller, drive);
|
---|
| 1152 | +}
|
---|
| 1153 | +
|
---|
| 1154 | +static void
|
---|
| 1155 | +get_ida_disk_name (char *name, int controller, int drive)
|
---|
| 1156 | +{
|
---|
| 1157 | + sprintf (name, "/dev/ida/c%dd%d", controller, drive);
|
---|
| 1158 | +}
|
---|
| 1159 | +
|
---|
| 1160 | +static void
|
---|
| 1161 | get_ataraid_disk_name (char *name, int unit)
|
---|
| 1162 | {
|
---|
| 1163 | sprintf (name, "/dev/ataraid/d%c", unit + '0');
|
---|
| 1164 | @@ -801,6 +954,74 @@
|
---|
| 1165 | }
|
---|
| 1166 | }
|
---|
| 1167 | }
|
---|
| 1168 | +
|
---|
| 1169 | + /* This is for CCISS, its like the DAC960 - we have
|
---|
| 1170 | + /dev/cciss/<controller>d<logical drive>p<partition>
|
---|
| 1171 | +
|
---|
| 1172 | + It currently supports up to 3 controllers, 10 logical volumes
|
---|
| 1173 | + and 10 partitions
|
---|
| 1174 | +
|
---|
| 1175 | + Code gratuitously copied from DAC960 above.
|
---|
| 1176 | + Horms <horms@verge.net.au> 23rd July 2004
|
---|
| 1177 | + */
|
---|
| 1178 | + {
|
---|
| 1179 | + int controller, drive;
|
---|
| 1180 | +
|
---|
| 1181 | + for (controller = 0; controller < 2; controller++)
|
---|
| 1182 | + {
|
---|
| 1183 | + for (drive = 0; drive < 9; drive++)
|
---|
| 1184 | + {
|
---|
| 1185 | + char name[24];
|
---|
| 1186 | +
|
---|
| 1187 | + get_cciss_disk_name (name, controller, drive);
|
---|
| 1188 | + if (check_device (name))
|
---|
| 1189 | + {
|
---|
| 1190 | + (*map)[num_hd + 0x80] = strdup (name);
|
---|
| 1191 | + assert ((*map)[num_hd + 0x80]);
|
---|
| 1192 | +
|
---|
| 1193 | + /* If the device map file is opened, write the map. */
|
---|
| 1194 | + if (fp)
|
---|
| 1195 | + fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
|
---|
| 1196 | +
|
---|
| 1197 | + num_hd++;
|
---|
| 1198 | + }
|
---|
| 1199 | + }
|
---|
| 1200 | + }
|
---|
| 1201 | + }
|
---|
| 1202 | +
|
---|
| 1203 | + /* This is for Compaq Smart Array, its like the DAC960 - we have
|
---|
| 1204 | + /dev/ida/<controller>d<logical drive>p<partition>
|
---|
| 1205 | +
|
---|
| 1206 | + It currently supports up to 3 controllers, 10 logical volumes
|
---|
| 1207 | + and 15 partitions
|
---|
| 1208 | +
|
---|
| 1209 | + Code gratuitously copied from DAC960 above.
|
---|
| 1210 | + Piotr Roszatycki <dexter@debian.org>
|
---|
| 1211 | + */
|
---|
| 1212 | + {
|
---|
| 1213 | + int controller, drive;
|
---|
| 1214 | +
|
---|
| 1215 | + for (controller = 0; controller < 2; controller++)
|
---|
| 1216 | + {
|
---|
| 1217 | + for (drive = 0; drive < 9; drive++)
|
---|
| 1218 | + {
|
---|
| 1219 | + char name[24];
|
---|
| 1220 | +
|
---|
| 1221 | + get_ida_disk_name (name, controller, drive);
|
---|
| 1222 | + if (check_device (name))
|
---|
| 1223 | + {
|
---|
| 1224 | + (*map)[num_hd + 0x80] = strdup (name);
|
---|
| 1225 | + assert ((*map)[num_hd + 0x80]);
|
---|
| 1226 | +
|
---|
| 1227 | + /* If the device map file is opened, write the map. */
|
---|
| 1228 | + if (fp)
|
---|
| 1229 | + fprintf (fp, "(hd%d)\t%s\n", num_hd, name);
|
---|
| 1230 | +
|
---|
| 1231 | + num_hd++;
|
---|
| 1232 | + }
|
---|
| 1233 | + }
|
---|
| 1234 | + }
|
---|
| 1235 | + }
|
---|
| 1236 | #endif /* __linux__ */
|
---|
| 1237 |
|
---|
| 1238 | /* OK, close the device map file if opened. */
|
---|
| 1239 | @@ -844,6 +1065,7 @@
|
---|
| 1240 | {
|
---|
| 1241 | char dev[PATH_MAX]; /* XXX */
|
---|
| 1242 | int fd;
|
---|
| 1243 | + off_t offset = (off_t) sector * (off_t) SECTOR_SIZE;
|
---|
| 1244 |
|
---|
| 1245 | if ((partition & 0x00FF00) != 0x00FF00)
|
---|
| 1246 | {
|
---|
| 1247 | @@ -861,8 +1083,14 @@
|
---|
| 1248 | if (strcmp (dev + strlen(dev) - 5, "/disc") == 0)
|
---|
| 1249 | strcpy (dev + strlen(dev) - 5, "/part");
|
---|
| 1250 | }
|
---|
| 1251 | - sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1);
|
---|
| 1252 | -
|
---|
| 1253 | + sprintf (dev + strlen(dev), "%s%d",
|
---|
| 1254 | + /* Compaq smart and others */
|
---|
| 1255 | + (strncmp(dev, "/dev/ida/", 9) == 0 ||
|
---|
| 1256 | + strncmp(dev, "/dev/ataraid/", 13) == 0 ||
|
---|
| 1257 | + strncmp(dev, "/dev/cciss/", 11) == 0 ||
|
---|
| 1258 | + strncmp(dev, "/dev/rd/", 8) == 0) ? "p" : "",
|
---|
| 1259 | + ((partition >> 16) & 0xFF) + 1);
|
---|
| 1260 | +
|
---|
| 1261 | /* Open the partition. */
|
---|
| 1262 | fd = open (dev, O_RDWR);
|
---|
| 1263 | if (fd < 0)
|
---|
| 1264 | @@ -870,35 +1098,13 @@
|
---|
| 1265 | errnum = ERR_NO_PART;
|
---|
| 1266 | return 0;
|
---|
| 1267 | }
|
---|
| 1268 | -
|
---|
| 1269 | -#if defined(__linux__) && (!defined(__GLIBC__) || \
|
---|
| 1270 | - ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))))
|
---|
| 1271 | - /* Maybe libc doesn't have large file support. */
|
---|
| 1272 | - {
|
---|
| 1273 | - loff_t offset, result;
|
---|
| 1274 | - static int _llseek (uint filedes, ulong hi, ulong lo,
|
---|
| 1275 | - loff_t *res, uint wh);
|
---|
| 1276 | - _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo,
|
---|
| 1277 | - loff_t *, res, uint, wh);
|
---|
| 1278 |
|
---|
| 1279 | - offset = (loff_t) sector * (loff_t) SECTOR_SIZE;
|
---|
| 1280 | - if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET))
|
---|
| 1281 | - {
|
---|
| 1282 | - errnum = ERR_DEV_VALUES;
|
---|
| 1283 | - return 0;
|
---|
| 1284 | - }
|
---|
| 1285 | - }
|
---|
| 1286 | -#else
|
---|
| 1287 | - {
|
---|
| 1288 | - off_t offset = (off_t) sector * (off_t) SECTOR_SIZE;
|
---|
| 1289 |
|
---|
| 1290 | - if (lseek (fd, offset, SEEK_SET) != offset)
|
---|
| 1291 | - {
|
---|
| 1292 | - errnum = ERR_DEV_VALUES;
|
---|
| 1293 | - return 0;
|
---|
| 1294 | - }
|
---|
| 1295 | - }
|
---|
| 1296 | -#endif
|
---|
| 1297 | + if (my_lseek(fd, offset, SEEK_SET) != offset)
|
---|
| 1298 | + {
|
---|
| 1299 | + errnum = ERR_DEV_VALUES;
|
---|
| 1300 | + return 0;
|
---|
| 1301 | + }
|
---|
| 1302 |
|
---|
| 1303 | if (write (fd, buf, size * SECTOR_SIZE) != (size * SECTOR_SIZE))
|
---|
| 1304 | {
|
---|
| 1305 | diff -Naur grub-0.97.orig/stage2/asm.S grub-0.97/stage2/asm.S
|
---|
| 1306 | --- grub-0.97.orig/stage2/asm.S 2004-06-19 09:55:22.000000000 -0700
|
---|
| 1307 | +++ grub-0.97/stage2/asm.S 2006-07-04 00:01:19.000000000 -0700
|
---|
| 1308 | @@ -1651,7 +1651,29 @@
|
---|
| 1309 | jnz 3f
|
---|
| 1310 | ret
|
---|
| 1311 |
|
---|
| 1312 | -3: /* use keyboard controller */
|
---|
| 1313 | +3: /*
|
---|
| 1314 | + * try to switch gateA20 using PORT92, the "Fast A20 and Init"
|
---|
| 1315 | + * register
|
---|
| 1316 | + */
|
---|
| 1317 | + mov $0x92, %dx
|
---|
| 1318 | + inb %dx, %al
|
---|
| 1319 | + /* skip the port92 code if it's unimplemented (read returns 0xff) */
|
---|
| 1320 | + cmpb $0xff, %al
|
---|
| 1321 | + jz 6f
|
---|
| 1322 | +
|
---|
| 1323 | + /* set or clear bit1, the ALT_A20_GATE bit */
|
---|
| 1324 | + movb 4(%esp), %ah
|
---|
| 1325 | + testb %ah, %ah
|
---|
| 1326 | + jz 4f
|
---|
| 1327 | + orb $2, %al
|
---|
| 1328 | + jmp 5f
|
---|
| 1329 | +4: and $0xfd, %al
|
---|
| 1330 | +
|
---|
| 1331 | + /* clear the INIT_NOW bit don't accidently reset the machine */
|
---|
| 1332 | +5: and $0xfe, %al
|
---|
| 1333 | + outb %al, %dx
|
---|
| 1334 | +
|
---|
| 1335 | +6: /* use keyboard controller */
|
---|
| 1336 | pushl %eax
|
---|
| 1337 |
|
---|
| 1338 | call gloop1
|
---|
| 1339 | @@ -1661,9 +1683,12 @@
|
---|
| 1340 |
|
---|
| 1341 | gloopint1:
|
---|
| 1342 | inb $K_STATUS
|
---|
| 1343 | + cmpb $0xff, %al
|
---|
| 1344 | + jz gloopint1_done
|
---|
| 1345 | andb $K_IBUF_FUL, %al
|
---|
| 1346 | jnz gloopint1
|
---|
| 1347 |
|
---|
| 1348 | +gloopint1_done:
|
---|
| 1349 | movb $KB_OUTPUT_MASK, %al
|
---|
| 1350 | cmpb $0, 0x8(%esp)
|
---|
| 1351 | jz gdoit
|
---|
| 1352 | @@ -1684,6 +1709,8 @@
|
---|
| 1353 |
|
---|
| 1354 | gloop1:
|
---|
| 1355 | inb $K_STATUS
|
---|
| 1356 | + cmpb $0xff, %al
|
---|
| 1357 | + jz gloop2ret
|
---|
| 1358 | andb $K_IBUF_FUL, %al
|
---|
| 1359 | jnz gloop1
|
---|
| 1360 |
|
---|
| 1361 | @@ -1991,6 +2018,11 @@
|
---|
| 1362 | ENTRY(console_getkey)
|
---|
| 1363 | push %ebp
|
---|
| 1364 |
|
---|
| 1365 | +wait_for_key:
|
---|
| 1366 | + call EXT_C(console_checkkey)
|
---|
| 1367 | + incl %eax
|
---|
| 1368 | + jz wait_for_key
|
---|
| 1369 | +
|
---|
| 1370 | call EXT_C(prot_to_real)
|
---|
| 1371 | .code16
|
---|
| 1372 |
|
---|
| 1373 | @@ -2216,7 +2248,304 @@
|
---|
| 1374 | pop %ebx
|
---|
| 1375 | pop %ebp
|
---|
| 1376 | ret
|
---|
| 1377 | -
|
---|
| 1378 | +
|
---|
| 1379 | +
|
---|
| 1380 | +/* graphics mode functions */
|
---|
| 1381 | +#ifdef SUPPORT_GRAPHICS
|
---|
| 1382 | +VARIABLE(cursorX)
|
---|
| 1383 | +.word 0
|
---|
| 1384 | +VARIABLE(cursorY)
|
---|
| 1385 | +.word 0
|
---|
| 1386 | +VARIABLE(cursorCount)
|
---|
| 1387 | +.word 0
|
---|
| 1388 | +VARIABLE(cursorBuf)
|
---|
| 1389 | +.byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
---|
| 1390 | +
|
---|
| 1391 | +
|
---|
| 1392 | +/*
|
---|
| 1393 | + * set_int1c_handler(void)
|
---|
| 1394 | + */
|
---|
| 1395 | +ENTRY(set_int1c_handler)
|
---|
| 1396 | + pushl %edi
|
---|
| 1397 | +
|
---|
| 1398 | + /* save the original int1c handler */
|
---|
| 1399 | + movl $0x70, %edi
|
---|
| 1400 | + movw (%edi), %ax
|
---|
| 1401 | + movw %ax, ABS(int1c_offset)
|
---|
| 1402 | + movw 2(%edi), %ax
|
---|
| 1403 | + movw %ax, ABS(int1c_segment)
|
---|
| 1404 | +
|
---|
| 1405 | + /* save the new int1c handler */
|
---|
| 1406 | + movw $ABS(int1c_handler), %ax
|
---|
| 1407 | + movw %ax, (%edi)
|
---|
| 1408 | + xorw %ax, %ax
|
---|
| 1409 | + movw %ax, 2(%edi)
|
---|
| 1410 | +
|
---|
| 1411 | + popl %edi
|
---|
| 1412 | + ret
|
---|
| 1413 | +
|
---|
| 1414 | +
|
---|
| 1415 | +/*
|
---|
| 1416 | + * unset_int1c_handler(void)
|
---|
| 1417 | + */
|
---|
| 1418 | +ENTRY(unset_int1c_handler)
|
---|
| 1419 | + pushl %edi
|
---|
| 1420 | +
|
---|
| 1421 | + /* check if int1c_handler is set */
|
---|
| 1422 | + movl $0x70, %edi
|
---|
| 1423 | + movw $ABS(int1c_handler), %ax
|
---|
| 1424 | + cmpw %ax, (%edi)
|
---|
| 1425 | + jne int1c_1
|
---|
| 1426 | + xorw %ax, %ax
|
---|
| 1427 | + cmpw %ax, 2(%edi)
|
---|
| 1428 | + jne int1c_1
|
---|
| 1429 | +
|
---|
| 1430 | + /* restore the original */
|
---|
| 1431 | + movw ABS(int1c_offset), %ax
|
---|
| 1432 | + movw %ax, (%edi)
|
---|
| 1433 | + movw ABS(int1c_segment), %ax
|
---|
| 1434 | + movw %ax, 2(%edi)
|
---|
| 1435 | +
|
---|
| 1436 | +int1c_1:
|
---|
| 1437 | + popl %edi
|
---|
| 1438 | + ret
|
---|
| 1439 | +
|
---|
| 1440 | +
|
---|
| 1441 | +/*
|
---|
| 1442 | + * blinks graphics cursor
|
---|
| 1443 | + */
|
---|
| 1444 | + .code16
|
---|
| 1445 | +write_data:
|
---|
| 1446 | + movw $0, %ax
|
---|
| 1447 | + movw %ax, %ds
|
---|
| 1448 | +
|
---|
| 1449 | + mov $0xA000, %ax /* video in es:di */
|
---|
| 1450 | + mov %ax, %es
|
---|
| 1451 | + mov $80, %ax
|
---|
| 1452 | + movw $ABS(cursorY), %si
|
---|
| 1453 | + mov %ds:(%si), %bx
|
---|
| 1454 | + mul %bx
|
---|
| 1455 | + movw $ABS(cursorX), %si
|
---|
| 1456 | + mov %ds:(%si), %bx
|
---|
| 1457 | + shr $3, %bx /* %bx /= 8 */
|
---|
| 1458 | + add %bx, %ax
|
---|
| 1459 | + mov %ax, %di
|
---|
| 1460 | +
|
---|
| 1461 | + movw $ABS(cursorBuf), %si /* fontBuf in ds:si */
|
---|
| 1462 | +
|
---|
| 1463 | + /* prepare for data moving */
|
---|
| 1464 | + mov $16, %dx /* altura da fonte */
|
---|
| 1465 | + mov $80, %bx /* bytes por linha */
|
---|
| 1466 | +
|
---|
| 1467 | +write_loop:
|
---|
| 1468 | + movb %ds:(%si), %al
|
---|
| 1469 | + xorb $0xff, %al
|
---|
| 1470 | + movb %al, %ds:(%si) /* invert cursorBuf */
|
---|
| 1471 | + movb %al, %es:(%di) /* write to video */
|
---|
| 1472 | + add %bx, %di
|
---|
| 1473 | + inc %si
|
---|
| 1474 | + dec %dx
|
---|
| 1475 | + jg write_loop
|
---|
| 1476 | + ret
|
---|
| 1477 | +
|
---|
| 1478 | +int1c_handler:
|
---|
| 1479 | + pusha
|
---|
| 1480 | + mov $0, %ax
|
---|
| 1481 | + mov %ax, %ds
|
---|
| 1482 | + mov $ABS(cursorCount), %si
|
---|
| 1483 | + mov %ds:(%si), %ax
|
---|
| 1484 | + inc %ax
|
---|
| 1485 | + mov %ax, %ds:(%si)
|
---|
| 1486 | + cmp $9, %ax
|
---|
| 1487 | + jne int1c_done
|
---|
| 1488 | +
|
---|
| 1489 | + mov $0, %ax
|
---|
| 1490 | + mov %ax, %ds:(%si)
|
---|
| 1491 | + call write_data
|
---|
| 1492 | +
|
---|
| 1493 | +int1c_done:
|
---|
| 1494 | + popa
|
---|
| 1495 | + iret
|
---|
| 1496 | + /* call previous int1c handler */
|
---|
| 1497 | + /* ljmp */
|
---|
| 1498 | + .byte 0xea
|
---|
| 1499 | +int1c_offset: .word 0
|
---|
| 1500 | +int1c_segment: .word 0
|
---|
| 1501 | + .code32
|
---|
| 1502 | +
|
---|
| 1503 | +
|
---|
| 1504 | +/*
|
---|
| 1505 | + * unsigned char set_videomode(unsigned char mode)
|
---|
| 1506 | + * BIOS call "INT 10H Function 0h" to set video mode
|
---|
| 1507 | + * Call with %ah = 0x0
|
---|
| 1508 | + * %al = video mode
|
---|
| 1509 | + * Returns old videomode.
|
---|
| 1510 | + */
|
---|
| 1511 | +ENTRY(set_videomode)
|
---|
| 1512 | + pushl %ebp
|
---|
| 1513 | + movl %esp,%ebp
|
---|
| 1514 | + pushl %ebx
|
---|
| 1515 | + pushl %ecx
|
---|
| 1516 | +
|
---|
| 1517 | + movb 8(%ebp), %cl
|
---|
| 1518 | +
|
---|
| 1519 | + call EXT_C(prot_to_real)
|
---|
| 1520 | + .code16
|
---|
| 1521 | +
|
---|
| 1522 | + xorb %al, %al
|
---|
| 1523 | + movb $0xf, %ah
|
---|
| 1524 | + int $0x10 /* Get Current Video mode */
|
---|
| 1525 | + movb %al, %ch
|
---|
| 1526 | + xorb %ah, %ah
|
---|
| 1527 | + movb %cl, %al
|
---|
| 1528 | + int $0x10 /* Set Video mode */
|
---|
| 1529 | +
|
---|
| 1530 | + DATA32 call EXT_C(real_to_prot)
|
---|
| 1531 | + .code32
|
---|
| 1532 | +
|
---|
| 1533 | + xorl %eax, %eax
|
---|
| 1534 | + movb %ch, %al
|
---|
| 1535 | +
|
---|
| 1536 | + popl %ecx
|
---|
| 1537 | + popl %ebx
|
---|
| 1538 | + popl %ebp
|
---|
| 1539 | + ret
|
---|
| 1540 | +
|
---|
| 1541 | +
|
---|
| 1542 | +/*
|
---|
| 1543 | + * int get_videomode()
|
---|
| 1544 | + * BIOS call "INT 10H Function 0Fh" to get current video mode
|
---|
| 1545 | + * Call with %al = 0x0
|
---|
| 1546 | + * %ah = 0xF
|
---|
| 1547 | + * Returns current videomode.
|
---|
| 1548 | + */
|
---|
| 1549 | +ENTRY(get_videomode)
|
---|
| 1550 | + pushl %ebp
|
---|
| 1551 | + movl %esp,%ebp
|
---|
| 1552 | + pushl %ebx
|
---|
| 1553 | + pushl %ecx
|
---|
| 1554 | +
|
---|
| 1555 | + call EXT_C(prot_to_real)
|
---|
| 1556 | + .code16
|
---|
| 1557 | +
|
---|
| 1558 | + xorb %al, %al
|
---|
| 1559 | + movb $0xF, %ah
|
---|
| 1560 | + int $0x10 /* Get Current Video mode */
|
---|
| 1561 | + movb %al, %cl /* For now we only want display mode */
|
---|
| 1562 | +
|
---|
| 1563 | + DATA32 call EXT_C(real_to_prot)
|
---|
| 1564 | + .code32
|
---|
| 1565 | +
|
---|
| 1566 | + xorl %eax, %eax
|
---|
| 1567 | + movb %cl, %al
|
---|
| 1568 | +
|
---|
| 1569 | + popl %ecx
|
---|
| 1570 | + popl %ebx
|
---|
| 1571 | + popl %ebp
|
---|
| 1572 | + ret
|
---|
| 1573 | +
|
---|
| 1574 | +
|
---|
| 1575 | +/*
|
---|
| 1576 | + * unsigned char * graphics_get_font()
|
---|
| 1577 | + * BIOS call "INT 10H Function 11h" to set font
|
---|
| 1578 | + * Call with %ah = 0x11
|
---|
| 1579 | + */
|
---|
| 1580 | +ENTRY(graphics_get_font)
|
---|
| 1581 | + push %ebp
|
---|
| 1582 | + push %ebx
|
---|
| 1583 | + push %ecx
|
---|
| 1584 | + push %edx
|
---|
| 1585 | +
|
---|
| 1586 | + call EXT_C(prot_to_real)
|
---|
| 1587 | + .code16
|
---|
| 1588 | +
|
---|
| 1589 | + movw $0x1130, %ax
|
---|
| 1590 | + movb $6, %bh /* font 8x16 */
|
---|
| 1591 | + int $0x10
|
---|
| 1592 | + movw %bp, %dx
|
---|
| 1593 | + movw %es, %cx
|
---|
| 1594 | +
|
---|
| 1595 | + DATA32 call EXT_C(real_to_prot)
|
---|
| 1596 | + .code32
|
---|
| 1597 | +
|
---|
| 1598 | + xorl %eax, %eax
|
---|
| 1599 | + movw %cx, %ax
|
---|
| 1600 | + shll $4, %eax
|
---|
| 1601 | + movw %dx, %ax
|
---|
| 1602 | +
|
---|
| 1603 | + pop %edx
|
---|
| 1604 | + pop %ecx
|
---|
| 1605 | + pop %ebx
|
---|
| 1606 | + pop %ebp
|
---|
| 1607 | + ret
|
---|
| 1608 | +
|
---|
| 1609 | +
|
---|
| 1610 | +/*
|
---|
| 1611 | + * graphics_set_palette(index, red, green, blue)
|
---|
| 1612 | + * BIOS call "INT 10H Function 10h" to set individual dac register
|
---|
| 1613 | + * Call with %ah = 0x10
|
---|
| 1614 | + * %bx = register number
|
---|
| 1615 | + * %ch = new value for green (0-63)
|
---|
| 1616 | + * %cl = new value for blue (0-63)
|
---|
| 1617 | + * %dh = new value for red (0-63)
|
---|
| 1618 | + */
|
---|
| 1619 | +
|
---|
| 1620 | +ENTRY(graphics_set_palette)
|
---|
| 1621 | + push %ebp
|
---|
| 1622 | + push %eax
|
---|
| 1623 | + push %ebx
|
---|
| 1624 | + push %ecx
|
---|
| 1625 | + push %edx
|
---|
| 1626 | +
|
---|
| 1627 | + movw $0x3c8, %bx /* address write mode register */
|
---|
| 1628 | +
|
---|
| 1629 | + /* wait vertical retrace */
|
---|
| 1630 | + movw $0x3da, %dx
|
---|
| 1631 | +l1b:
|
---|
| 1632 | + inb %dx, %al /* wait vertical active display */
|
---|
| 1633 | + test $8, %al
|
---|
| 1634 | + jnz l1b
|
---|
| 1635 | +
|
---|
| 1636 | +l2b:
|
---|
| 1637 | + inb %dx, %al /* wait vertical retrace */
|
---|
| 1638 | + test $8, %al
|
---|
| 1639 | + jnz l2b
|
---|
| 1640 | +
|
---|
| 1641 | + mov %bx, %dx
|
---|
| 1642 | + movb 0x18(%esp), %al /* index */
|
---|
| 1643 | + outb %al, %dx
|
---|
| 1644 | + inc %dx
|
---|
| 1645 | +
|
---|
| 1646 | + movb 0x1c(%esp), %al /* red */
|
---|
| 1647 | + outb %al, %dx
|
---|
| 1648 | +
|
---|
| 1649 | + movb 0x20(%esp), %al /* green */
|
---|
| 1650 | + outb %al, %dx
|
---|
| 1651 | +
|
---|
| 1652 | + movb 0x24(%esp), %al /* blue */
|
---|
| 1653 | + outb %al, %dx
|
---|
| 1654 | +
|
---|
| 1655 | + movw 0x18(%esp), %bx
|
---|
| 1656 | +
|
---|
| 1657 | + call EXT_C(prot_to_real)
|
---|
| 1658 | + .code16
|
---|
| 1659 | +
|
---|
| 1660 | + movb %bl, %bh
|
---|
| 1661 | + movw $0x1000, %ax
|
---|
| 1662 | + int $0x10
|
---|
| 1663 | +
|
---|
| 1664 | + DATA32 call EXT_C(real_to_prot)
|
---|
| 1665 | + .code32
|
---|
| 1666 | +
|
---|
| 1667 | + pop %edx
|
---|
| 1668 | + pop %ecx
|
---|
| 1669 | + pop %ebx
|
---|
| 1670 | + pop %eax
|
---|
| 1671 | + pop %ebp
|
---|
| 1672 | + ret
|
---|
| 1673 | +#endif /* SUPPORT_GRAPHICS */
|
---|
| 1674 | +
|
---|
| 1675 | +
|
---|
| 1676 | /*
|
---|
| 1677 | * getrtsecs()
|
---|
| 1678 | * if a seconds value can be read, read it and return it (BCD),
|
---|
| 1679 | diff -Naur grub-0.97.orig/stage2/boot.c grub-0.97/stage2/boot.c
|
---|
| 1680 | --- grub-0.97.orig/stage2/boot.c 2004-03-30 03:44:08.000000000 -0800
|
---|
| 1681 | +++ grub-0.97/stage2/boot.c 2006-07-04 00:01:50.000000000 -0700
|
---|
| 1682 | @@ -1,7 +1,7 @@
|
---|
| 1683 | /* boot.c - load and bootstrap a kernel */
|
---|
| 1684 | /*
|
---|
| 1685 | * GRUB -- GRand Unified Bootloader
|
---|
| 1686 | - * Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc.
|
---|
| 1687 | + * Copyright (C) 1999,2000,2001,2002,2003,2004,2005 Free Software Foundation, Inc.
|
---|
| 1688 | *
|
---|
| 1689 | * This program is free software; you can redistribute it and/or modify
|
---|
| 1690 | * it under the terms of the GNU General Public License as published by
|
---|
| 1691 | @@ -29,6 +29,8 @@
|
---|
| 1692 | entry_func entry_addr;
|
---|
| 1693 | static struct mod_list mll[99];
|
---|
| 1694 | static int linux_mem_size;
|
---|
| 1695 | +static int elf_kernel_addr;
|
---|
| 1696 | +static int elf_kernel_size;
|
---|
| 1697 |
|
---|
| 1698 | /*
|
---|
| 1699 | * The next two functions, 'load_image' and 'load_module', are the building
|
---|
| 1700 | @@ -96,7 +98,7 @@
|
---|
| 1701 | lh = (struct linux_kernel_header *) buffer;
|
---|
| 1702 |
|
---|
| 1703 | /* ELF loading supported if multiboot, FreeBSD and NetBSD. */
|
---|
| 1704 | - if ((type == KERNEL_TYPE_MULTIBOOT
|
---|
| 1705 | + if (((type == KERNEL_TYPE_MULTIBOOT && ! (flags & MULTIBOOT_AOUT_KLUDGE))
|
---|
| 1706 | || pu.elf->e_ident[EI_OSABI] == ELFOSABI_FREEBSD
|
---|
| 1707 | || grub_strcmp (pu.elf->e_ident + EI_BRAND, "FreeBSD") == 0
|
---|
| 1708 | || suggested_type == KERNEL_TYPE_NETBSD)
|
---|
| 1709 | @@ -594,6 +596,7 @@
|
---|
| 1710 |
|
---|
| 1711 | /* reset this to zero for now */
|
---|
| 1712 | cur_addr = 0;
|
---|
| 1713 | + elf_kernel_addr = ~0;
|
---|
| 1714 |
|
---|
| 1715 | /* scan for program segments */
|
---|
| 1716 | for (i = 0; i < pu.elf->e_phnum; i++)
|
---|
| 1717 | @@ -630,6 +633,8 @@
|
---|
| 1718 | /* mark memory as used */
|
---|
| 1719 | if (cur_addr < memaddr + memsiz)
|
---|
| 1720 | cur_addr = memaddr + memsiz;
|
---|
| 1721 | + if (elf_kernel_addr > cur_addr)
|
---|
| 1722 | + elf_kernel_addr = cur_addr;
|
---|
| 1723 | printf (", <0x%x:0x%x:0x%x>", memaddr, filesiz,
|
---|
| 1724 | memsiz - filesiz);
|
---|
| 1725 | /* increment number of segments */
|
---|
| 1726 | @@ -647,6 +652,8 @@
|
---|
| 1727 | }
|
---|
| 1728 | }
|
---|
| 1729 |
|
---|
| 1730 | + elf_kernel_size = cur_addr - elf_kernel_addr;
|
---|
| 1731 | +
|
---|
| 1732 | if (! errnum)
|
---|
| 1733 | {
|
---|
| 1734 | if (! loaded)
|
---|
| 1735 | @@ -824,8 +831,11 @@
|
---|
| 1736 | moveto = (mbi.mem_upper + 0x400) << 10;
|
---|
| 1737 |
|
---|
| 1738 | moveto = (moveto - len) & 0xfffff000;
|
---|
| 1739 | - max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203
|
---|
| 1740 | - ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS);
|
---|
| 1741 | + max_addr = LINUX_INITRD_MAX_ADDRESS;
|
---|
| 1742 | + if (lh->header == LINUX_MAGIC_SIGNATURE &&
|
---|
| 1743 | + lh->version >= 0x0203 &&
|
---|
| 1744 | + lh->initrd_addr_max < max_addr)
|
---|
| 1745 | + max_addr = lh->initrd_addr_max;
|
---|
| 1746 | if (moveto + len >= max_addr)
|
---|
| 1747 | moveto = (max_addr - len) & 0xfffff000;
|
---|
| 1748 |
|
---|
| 1749 | @@ -864,6 +874,129 @@
|
---|
| 1750 | }
|
---|
| 1751 | #endif
|
---|
| 1752 |
|
---|
| 1753 | +#define mem_align4k(p) ((p) + 0xFFF) & 0xFFFFF000
|
---|
| 1754 | +
|
---|
| 1755 | +static void
|
---|
| 1756 | +kfreebsd_setenv (char *env, const char *var, const char *value)
|
---|
| 1757 | +{
|
---|
| 1758 | + while (1)
|
---|
| 1759 | + {
|
---|
| 1760 | + if (env[0] == '\0' && env[1] == '\0')
|
---|
| 1761 | + {
|
---|
| 1762 | + env++;
|
---|
| 1763 | + break;
|
---|
| 1764 | + }
|
---|
| 1765 | + else
|
---|
| 1766 | + env++;
|
---|
| 1767 | + }
|
---|
| 1768 | +
|
---|
| 1769 | + grub_sprintf (env, "%s=%s", var, value);
|
---|
| 1770 | + env[grub_strlen (env) + 1] = '\0';
|
---|
| 1771 | +}
|
---|
| 1772 | +
|
---|
| 1773 | +static char *
|
---|
| 1774 | +kfreebsd_read_hints (char *buf)
|
---|
| 1775 | +{
|
---|
| 1776 | + char *buf_end = buf;
|
---|
| 1777 | +
|
---|
| 1778 | + if (grub_open ("/boot/device.hints"))
|
---|
| 1779 | + {
|
---|
| 1780 | + char *line_start;
|
---|
| 1781 | + int line_len = 0;
|
---|
| 1782 | + char *envp;
|
---|
| 1783 | + int env_len;
|
---|
| 1784 | +
|
---|
| 1785 | + env_len = grub_read (buf, -1);
|
---|
| 1786 | + if (env_len)
|
---|
| 1787 | + {
|
---|
| 1788 | + buf_end += env_len;
|
---|
| 1789 | + *(buf_end++) = '\0';
|
---|
| 1790 | + }
|
---|
| 1791 | + else
|
---|
| 1792 | + return buf_end;
|
---|
| 1793 | +
|
---|
| 1794 | + grub_close ();
|
---|
| 1795 | +
|
---|
| 1796 | + envp = line_start = buf;
|
---|
| 1797 | + while (*envp)
|
---|
| 1798 | + {
|
---|
| 1799 | + char *envp_current = envp;
|
---|
| 1800 | +
|
---|
| 1801 | + switch (*envp)
|
---|
| 1802 | + {
|
---|
| 1803 | + case ' ':
|
---|
| 1804 | + while (*envp == ' ')
|
---|
| 1805 | + {
|
---|
| 1806 | + envp++;
|
---|
| 1807 | + env_len--;
|
---|
| 1808 | + }
|
---|
| 1809 | + grub_memmove (envp_current, envp, env_len + 1);
|
---|
| 1810 | + envp = envp_current;
|
---|
| 1811 | + break;
|
---|
| 1812 | + case '#':
|
---|
| 1813 | + while (*envp != '\n')
|
---|
| 1814 | + {
|
---|
| 1815 | + envp++;
|
---|
| 1816 | + env_len--;
|
---|
| 1817 | + }
|
---|
| 1818 | + if (!line_len)
|
---|
| 1819 | + envp++;
|
---|
| 1820 | + grub_memmove (envp_current, envp, env_len + 1);
|
---|
| 1821 | + envp = envp_current;
|
---|
| 1822 | + break;
|
---|
| 1823 | + case '\n':
|
---|
| 1824 | + if (!line_len)
|
---|
| 1825 | + {
|
---|
| 1826 | + env_len--;
|
---|
| 1827 | + grub_memmove (line_start, envp, env_len + 1);
|
---|
| 1828 | + }
|
---|
| 1829 | + *(envp++) = '\0';
|
---|
| 1830 | + line_len = 0;
|
---|
| 1831 | + line_start = envp;
|
---|
| 1832 | + default:
|
---|
| 1833 | + envp++;
|
---|
| 1834 | + line_len++;
|
---|
| 1835 | + break;
|
---|
| 1836 | + }
|
---|
| 1837 | + }
|
---|
| 1838 | +
|
---|
| 1839 | + buf_end = buf + env_len;
|
---|
| 1840 | + *(buf_end++) = '\0';
|
---|
| 1841 | + }
|
---|
| 1842 | +
|
---|
| 1843 | + return buf_end;
|
---|
| 1844 | +}
|
---|
| 1845 | +
|
---|
| 1846 | +static u32_t *
|
---|
| 1847 | +kfreebsd_set_module_string (u32_t type, u32_t *dst, char *src)
|
---|
| 1848 | +{
|
---|
| 1849 | + int size;
|
---|
| 1850 | +
|
---|
| 1851 | + *(dst++) = type;
|
---|
| 1852 | + *(dst++) = size = grub_strlen (src) + 1;
|
---|
| 1853 | + grub_strcpy ((void *) dst, src);
|
---|
| 1854 | +
|
---|
| 1855 | + return dst + (size + sizeof(u32_t) - 1) / sizeof(u32_t);
|
---|
| 1856 | +}
|
---|
| 1857 | +
|
---|
| 1858 | +static u32_t *
|
---|
| 1859 | +kfreebsd_set_module_var (u32_t type, u32_t *dst, u32_t src)
|
---|
| 1860 | +{
|
---|
| 1861 | + *(dst++) = type;
|
---|
| 1862 | + *(dst++) = sizeof(u32_t);
|
---|
| 1863 | + *(dst++) = src;
|
---|
| 1864 | +
|
---|
| 1865 | + return dst;
|
---|
| 1866 | +}
|
---|
| 1867 | +
|
---|
| 1868 | +static u32_t *
|
---|
| 1869 | +kfreebsd_set_modules (u32_t *modulep)
|
---|
| 1870 | +{
|
---|
| 1871 | + /* XXX: Need to copy the whole module structure. */
|
---|
| 1872 | + /* XXX: How to pass the module name ? */
|
---|
| 1873 | +
|
---|
| 1874 | + return modulep;
|
---|
| 1875 | +}
|
---|
| 1876 |
|
---|
| 1877 | /*
|
---|
| 1878 | * All "*_boot" commands depend on the images being loaded into memory
|
---|
| 1879 | @@ -877,7 +1010,10 @@
|
---|
| 1880 | bsd_boot (kernel_t type, int bootdev, char *arg)
|
---|
| 1881 | {
|
---|
| 1882 | char *str;
|
---|
| 1883 | - int clval = 0, i;
|
---|
| 1884 | + char *kernelname;
|
---|
| 1885 | + char *bsd_root;
|
---|
| 1886 | + int clval = 0;
|
---|
| 1887 | + int i;
|
---|
| 1888 | struct bootinfo bi;
|
---|
| 1889 |
|
---|
| 1890 | #ifdef GRUB_UTIL
|
---|
| 1891 | @@ -886,8 +1022,21 @@
|
---|
| 1892 | stop_floppy ();
|
---|
| 1893 | #endif
|
---|
| 1894 |
|
---|
| 1895 | + while (*arg != '/')
|
---|
| 1896 | + arg++;
|
---|
| 1897 | + kernelname = arg;
|
---|
| 1898 | +
|
---|
| 1899 | while (*(++arg) && *arg != ' ');
|
---|
| 1900 | + *(arg++) = 0;
|
---|
| 1901 | str = arg;
|
---|
| 1902 | +
|
---|
| 1903 | + bsd_root = grub_strstr (str, "root=");
|
---|
| 1904 | + if (bsd_root)
|
---|
| 1905 | + {
|
---|
| 1906 | + bsd_root += 5;
|
---|
| 1907 | + /* XXX: should copy the str or terminate it. */
|
---|
| 1908 | + }
|
---|
| 1909 | +
|
---|
| 1910 | while (*str)
|
---|
| 1911 | {
|
---|
| 1912 | if (*str == '-')
|
---|
| 1913 | @@ -910,6 +1059,8 @@
|
---|
| 1914 | clval |= RB_GDB;
|
---|
| 1915 | if (*str == 'h')
|
---|
| 1916 | clval |= RB_SERIAL;
|
---|
| 1917 | + if (*str == 'p')
|
---|
| 1918 | + clval |= RB_PAUSE;
|
---|
| 1919 | if (*str == 'm')
|
---|
| 1920 | clval |= RB_MUTE;
|
---|
| 1921 | if (*str == 'r')
|
---|
| 1922 | @@ -927,14 +1078,17 @@
|
---|
| 1923 |
|
---|
| 1924 | if (type == KERNEL_TYPE_FREEBSD)
|
---|
| 1925 | {
|
---|
| 1926 | + char *envp;
|
---|
| 1927 | + u32_t *modp;
|
---|
| 1928 | +
|
---|
| 1929 | clval |= RB_BOOTINFO;
|
---|
| 1930 |
|
---|
| 1931 | bi.bi_version = BOOTINFO_VERSION;
|
---|
| 1932 |
|
---|
| 1933 | - *arg = 0;
|
---|
| 1934 | - while ((--arg) > (char *) MB_CMDLINE_BUF && *arg != '/');
|
---|
| 1935 | - if (*arg == '/')
|
---|
| 1936 | - bi.bi_kernelname = arg + 1;
|
---|
| 1937 | + bi.bi_pad[0] = bi.bi_pad[1] = 0;
|
---|
| 1938 | +
|
---|
| 1939 | + if (*kernelname == '/')
|
---|
| 1940 | + bi.bi_kernelname = kernelname;
|
---|
| 1941 | else
|
---|
| 1942 | bi.bi_kernelname = 0;
|
---|
| 1943 |
|
---|
| 1944 | @@ -961,6 +1115,30 @@
|
---|
| 1945 | bi.bi_basemem = mbi.mem_lower;
|
---|
| 1946 | bi.bi_extmem = extended_memory;
|
---|
| 1947 |
|
---|
| 1948 | + /* Setup the environment. */
|
---|
| 1949 | + bi.bi_envp = cur_addr = mem_align4k (cur_addr);
|
---|
| 1950 | + grub_memset ((void *) cur_addr, 0, 2);
|
---|
| 1951 | + cur_addr = (int) kfreebsd_read_hints ((void *) cur_addr);
|
---|
| 1952 | +
|
---|
| 1953 | + envp = (char *) bi.bi_envp;
|
---|
| 1954 | + kfreebsd_setenv (envp, "kernelname", kernelname);
|
---|
| 1955 | + kfreebsd_setenv (envp, "vfs.root.mountfrom", bsd_root);
|
---|
| 1956 | +
|
---|
| 1957 | + /* Setup the modules list. */
|
---|
| 1958 | + bi.bi_modulep = cur_addr = mem_align4k (cur_addr);
|
---|
| 1959 | + modp = (u32_t *) bi.bi_modulep;
|
---|
| 1960 | + /* The first module is the kernel. */
|
---|
| 1961 | + modp = kfreebsd_set_module_string (MODINFO_NAME, modp, kernelname);
|
---|
| 1962 | + modp = kfreebsd_set_module_string (MODINFO_TYPE, modp, "elf kernel");
|
---|
| 1963 | + modp = kfreebsd_set_module_string (MODINFO_ARGS, modp, arg);
|
---|
| 1964 | + modp = kfreebsd_set_module_var (MODINFO_ADDR, modp, elf_kernel_addr);
|
---|
| 1965 | + modp = kfreebsd_set_module_var (MODINFO_SIZE, modp, elf_kernel_size);
|
---|
| 1966 | + /* Now the real modules. */
|
---|
| 1967 | + modp = kfreebsd_set_modules(modp);
|
---|
| 1968 | +
|
---|
| 1969 | + /* Set the kernel end. */
|
---|
| 1970 | + bi.bi_kernend = cur_addr = mem_align4k (((int) modp) + 1);
|
---|
| 1971 | +
|
---|
| 1972 | if (mbi.flags & MB_INFO_AOUT_SYMS)
|
---|
| 1973 | {
|
---|
| 1974 | bi.bi_symtab = mbi.syms.a.addr;
|
---|
| 1975 | @@ -970,8 +1148,9 @@
|
---|
| 1976 | #if 0
|
---|
| 1977 | else if (mbi.flags & MB_INFO_ELF_SHDR)
|
---|
| 1978 | {
|
---|
| 1979 | - /* FIXME: Should check if a symbol table exists and, if exists,
|
---|
| 1980 | - pass the table to BI. */
|
---|
| 1981 | + bi.bi_symtab = mbi.syms.e.addr;
|
---|
| 1982 | + bi.bi_esymtab = mbi.syms.e.addr
|
---|
| 1983 | + + mbi.syms.e.size * mbi.syms.e.num * mbi.syms.e.shndx;
|
---|
| 1984 | }
|
---|
| 1985 | #endif
|
---|
| 1986 | else
|
---|
| 1987 | diff -Naur grub-0.97.orig/stage2/builtins.c grub-0.97/stage2/builtins.c
|
---|
| 1988 | --- grub-0.97.orig/stage2/builtins.c 2005-02-15 13:58:23.000000000 -0800
|
---|
| 1989 | +++ grub-0.97/stage2/builtins.c 2006-07-04 00:01:50.000000000 -0700
|
---|
| 1990 | @@ -28,6 +28,10 @@
|
---|
| 1991 | #include <filesys.h>
|
---|
| 1992 | #include <term.h>
|
---|
| 1993 |
|
---|
| 1994 | +#ifdef SUPPORT_GRAPHICS
|
---|
| 1995 | +# include <graphics.h>
|
---|
| 1996 | +#endif
|
---|
| 1997 | +
|
---|
| 1998 | #ifdef SUPPORT_NETBOOT
|
---|
| 1999 | # define GRUB 1
|
---|
| 2000 | # include <etherboot.h>
|
---|
| 2001 | @@ -82,6 +86,10 @@
|
---|
| 2002 | inside other functions. */
|
---|
| 2003 | static int configfile_func (char *arg, int flags);
|
---|
| 2004 |
|
---|
| 2005 | +static int savedefault_helper (char *arg, int flags);
|
---|
| 2006 | +
|
---|
| 2007 | +static int savedefault_shell (char *arg, int flags);
|
---|
| 2008 | +
|
---|
| 2009 | /* Initialize the data for builtins. */
|
---|
| 2010 | void
|
---|
| 2011 | init_builtins (void)
|
---|
| 2012 | @@ -237,12 +245,22 @@
|
---|
| 2013 | static int
|
---|
| 2014 | boot_func (char *arg, int flags)
|
---|
| 2015 | {
|
---|
| 2016 | + struct term_entry *prev_term = current_term;
|
---|
| 2017 | /* Clear the int15 handler if we can boot the kernel successfully.
|
---|
| 2018 | This assumes that the boot code never fails only if KERNEL_TYPE is
|
---|
| 2019 | not KERNEL_TYPE_NONE. Is this assumption is bad? */
|
---|
| 2020 | if (kernel_type != KERNEL_TYPE_NONE)
|
---|
| 2021 | unset_int15_handler ();
|
---|
| 2022 |
|
---|
| 2023 | + /* if our terminal needed initialization, we should shut it down
|
---|
| 2024 | + * before booting the kernel, but we want to save what it was so
|
---|
| 2025 | + * we can come back if needed */
|
---|
| 2026 | + if (current_term->shutdown)
|
---|
| 2027 | + {
|
---|
| 2028 | + current_term->shutdown();
|
---|
| 2029 | + current_term = term_table; /* assumption: console is first */
|
---|
| 2030 | + }
|
---|
| 2031 | +
|
---|
| 2032 | #ifdef SUPPORT_NETBOOT
|
---|
| 2033 | /* Shut down the networking. */
|
---|
| 2034 | cleanup_net ();
|
---|
| 2035 | @@ -306,6 +324,13 @@
|
---|
| 2036 | return 1;
|
---|
| 2037 | }
|
---|
| 2038 |
|
---|
| 2039 | + /* if we get back here, we should go back to what our term was before */
|
---|
| 2040 | + current_term = prev_term;
|
---|
| 2041 | + if (current_term->startup)
|
---|
| 2042 | + /* if our terminal fails to initialize, fall back to console since
|
---|
| 2043 | + * it should always work */
|
---|
| 2044 | + if (current_term->startup() == 0)
|
---|
| 2045 | + current_term = term_table; /* we know that console is first */
|
---|
| 2046 | return 0;
|
---|
| 2047 | }
|
---|
| 2048 |
|
---|
| 2049 | @@ -852,6 +877,251 @@
|
---|
| 2050 | };
|
---|
| 2051 | #endif /* SUPPORT_NETBOOT */
|
---|
| 2052 |
|
---|
| 2053 | +#ifdef SUPPORT_GRAPHICS
|
---|
| 2054 | + |
---|
| 2055 |
|
---|
| 2056 | +static int splashimage_func(char *arg, int flags) {
|
---|
| 2057 | + int i;
|
---|
| 2058 | +
|
---|
| 2059 | + /* filename can only be 256 characters due to our buffer size */
|
---|
| 2060 | + if (grub_strlen(arg) > 256) {
|
---|
| 2061 | + grub_printf("Splash image filename too large\n");
|
---|
| 2062 | + grub_printf("Press any key to continue...");
|
---|
| 2063 | + getkey();
|
---|
| 2064 | + return 1;
|
---|
| 2065 | + }
|
---|
| 2066 | +
|
---|
| 2067 | + /* get rid of TERM_NEED_INIT from the graphics terminal. */
|
---|
| 2068 | + for (i = 0; term_table[i].name; i++) {
|
---|
| 2069 | + if (grub_strcmp (term_table[i].name, "graphics") == 0) {
|
---|
| 2070 | + term_table[i].flags &= ~TERM_NEED_INIT;
|
---|
| 2071 | + break;
|
---|
| 2072 | + }
|
---|
| 2073 | + }
|
---|
| 2074 | +
|
---|
| 2075 | + graphics_set_splash(arg);
|
---|
| 2076 | +
|
---|
| 2077 | + if (flags == BUILTIN_CMDLINE && graphics_inited) {
|
---|
| 2078 | + graphics_end();
|
---|
| 2079 | + if (graphics_init() == 0) {
|
---|
| 2080 | + /* Fallback to default term */
|
---|
| 2081 | + current_term = term_table;
|
---|
| 2082 | + max_lines = current_term->max_lines;
|
---|
| 2083 | + if (current_term->cls)
|
---|
| 2084 | + current_term->cls();
|
---|
| 2085 | + grub_printf("Failed to set splash image and/or graphics mode\n");
|
---|
| 2086 | + return 1;
|
---|
| 2087 | + }
|
---|
| 2088 | + graphics_cls();
|
---|
| 2089 | + }
|
---|
| 2090 | +
|
---|
| 2091 | + if (flags == BUILTIN_MENU)
|
---|
| 2092 | + current_term = term_table + i;
|
---|
| 2093 | +
|
---|
| 2094 | + return 0;
|
---|
| 2095 | +}
|
---|
| 2096 | +
|
---|
| 2097 | +static struct builtin builtin_splashimage =
|
---|
| 2098 | +{
|
---|
| 2099 | + "splashimage",
|
---|
| 2100 | + splashimage_func,
|
---|
| 2101 | + BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
|
---|
| 2102 | + "splashimage FILE",
|
---|
| 2103 | + "Load FILE as the background image when in graphics mode."
|
---|
| 2104 | +};
|
---|
| 2105 | +
|
---|
| 2106 | + |
---|
| 2107 |
|
---|
| 2108 | +/* shade */
|
---|
| 2109 | +static int
|
---|
| 2110 | +shade_func(char *arg, int flags)
|
---|
| 2111 | +{
|
---|
| 2112 | + int new_shade;
|
---|
| 2113 | +
|
---|
| 2114 | + if (!arg || safe_parse_maxint(&arg, &new_shade) == 0)
|
---|
| 2115 | + return (1);
|
---|
| 2116 | +
|
---|
| 2117 | + if (shade != new_shade) {
|
---|
| 2118 | + shade = new_shade;
|
---|
| 2119 | + if (flags == BUILTIN_CMDLINE && graphics_inited) {
|
---|
| 2120 | + graphics_end();
|
---|
| 2121 | + graphics_init();
|
---|
| 2122 | + graphics_cls();
|
---|
| 2123 | + }
|
---|
| 2124 | + }
|
---|
| 2125 | +
|
---|
| 2126 | + return 0;
|
---|
| 2127 | +}
|
---|
| 2128 | +
|
---|
| 2129 | +static struct builtin builtin_shade =
|
---|
| 2130 | +{
|
---|
| 2131 | + "shade",
|
---|
| 2132 | + shade_func,
|
---|
| 2133 | + BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
|
---|
| 2134 | + "shade INTEGER",
|
---|
| 2135 | + "If set to 0, disables the use of shaded text, else enables it."
|
---|
| 2136 | +};
|
---|
| 2137 | +
|
---|
| 2138 | + |
---|
| 2139 |
|
---|
| 2140 | +/* foreground */
|
---|
| 2141 | +static int
|
---|
| 2142 | +foreground_func(char *arg, int flags)
|
---|
| 2143 | +{
|
---|
| 2144 | + if (grub_strlen(arg) == 6) {
|
---|
| 2145 | + int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2;
|
---|
| 2146 | + int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2;
|
---|
| 2147 | + int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2;
|
---|
| 2148 | +
|
---|
| 2149 | + foreground = (r << 16) | (g << 8) | b;
|
---|
| 2150 | + if (graphics_inited)
|
---|
| 2151 | + graphics_set_palette(15, r, g, b);
|
---|
| 2152 | +
|
---|
| 2153 | + return 0;
|
---|
| 2154 | + }
|
---|
| 2155 | +
|
---|
| 2156 | + return 1;
|
---|
| 2157 | +}
|
---|
| 2158 | +
|
---|
| 2159 | +static struct builtin builtin_foreground =
|
---|
| 2160 | +{
|
---|
| 2161 | + "foreground",
|
---|
| 2162 | + foreground_func,
|
---|
| 2163 | + BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
|
---|
| 2164 | + "foreground RRGGBB",
|
---|
| 2165 | + "Sets the foreground color when in graphics mode."
|
---|
| 2166 | + "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal."
|
---|
| 2167 | +};
|
---|
| 2168 | +
|
---|
| 2169 | + |
---|
| 2170 |
|
---|
| 2171 | +/* background */
|
---|
| 2172 | +static int
|
---|
| 2173 | +background_func(char *arg, int flags)
|
---|
| 2174 | +{
|
---|
| 2175 | + if (grub_strlen(arg) == 6) {
|
---|
| 2176 | + int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2;
|
---|
| 2177 | + int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2;
|
---|
| 2178 | + int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2;
|
---|
| 2179 | +
|
---|
| 2180 | + background = (r << 16) | (g << 8) | b;
|
---|
| 2181 | + if (graphics_inited)
|
---|
| 2182 | + graphics_set_palette(0, r, g, b);
|
---|
| 2183 | + return 0;
|
---|
| 2184 | + }
|
---|
| 2185 | +
|
---|
| 2186 | + return 1;
|
---|
| 2187 | +}
|
---|
| 2188 | +
|
---|
| 2189 | +static struct builtin builtin_background =
|
---|
| 2190 | +{
|
---|
| 2191 | + "background",
|
---|
| 2192 | + background_func,
|
---|
| 2193 | + BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
|
---|
| 2194 | + "background RRGGBB",
|
---|
| 2195 | + "Sets the background color when in graphics mode."
|
---|
| 2196 | + "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal."
|
---|
| 2197 | +};
|
---|
| 2198 | +
|
---|
| 2199 | + |
---|
| 2200 |
|
---|
| 2201 | +/* border */
|
---|
| 2202 | +static int
|
---|
| 2203 | +border_func(char *arg, int flags)
|
---|
| 2204 | +{
|
---|
| 2205 | + if (grub_strlen(arg) == 6) {
|
---|
| 2206 | + int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2;
|
---|
| 2207 | + int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2;
|
---|
| 2208 | + int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2;
|
---|
| 2209 | +
|
---|
| 2210 | + window_border = (r << 16) | (g << 8) | b;
|
---|
| 2211 | + if (graphics_inited)
|
---|
| 2212 | + graphics_set_palette(0x11, r, g, b);
|
---|
| 2213 | +
|
---|
| 2214 | + return 0;
|
---|
| 2215 | + }
|
---|
| 2216 | +
|
---|
| 2217 | + return 1;
|
---|
| 2218 | +}
|
---|
| 2219 | +
|
---|
| 2220 | +static struct builtin builtin_border =
|
---|
| 2221 | +{
|
---|
| 2222 | + "border",
|
---|
| 2223 | + border_func,
|
---|
| 2224 | + BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
|
---|
| 2225 | + "border RRGGBB",
|
---|
| 2226 | + "Sets the border video color when in graphics mode."
|
---|
| 2227 | + "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal."
|
---|
| 2228 | +};
|
---|
| 2229 | +
|
---|
| 2230 | + |
---|
| 2231 |
|
---|
| 2232 | +/* viewport */
|
---|
| 2233 | +static int
|
---|
| 2234 | +viewport_func (char *arg, int flags)
|
---|
| 2235 | +{
|
---|
| 2236 | + int i;
|
---|
| 2237 | + int x0 = 0, y0 = 0, x1 = 80, y1 = 30;
|
---|
| 2238 | + int *pos[4] = { &x0, &y0, &x1, &y1 };
|
---|
| 2239 | +
|
---|
| 2240 | + if (!arg)
|
---|
| 2241 | + return (1);
|
---|
| 2242 | + for (i = 0; i < 4; i++) {
|
---|
| 2243 | + if (!*arg)
|
---|
| 2244 | + return (1);
|
---|
| 2245 | + while (*arg && (*arg == ' ' || *arg == '\t'))
|
---|
| 2246 | + ++arg;
|
---|
| 2247 | + if (!safe_parse_maxint(&arg, pos[i]))
|
---|
| 2248 | + return (1);
|
---|
| 2249 | + while (*arg && (*arg != ' ' && *arg != '\t'))
|
---|
| 2250 | + ++arg;
|
---|
| 2251 | + }
|
---|
| 2252 | +
|
---|
| 2253 | + /* minimum size is 65 colums and 16 rows */
|
---|
| 2254 | + if (x0 > x1 - 66 || y0 > y1 - 16 || x0 < 0 || y0 < 0 || x1 > 80 || y1 > 30)
|
---|
| 2255 | + return 1;
|
---|
| 2256 | +
|
---|
| 2257 | + view_x0 = x0;
|
---|
| 2258 | + view_y0 = y0;
|
---|
| 2259 | + view_x1 = x1;
|
---|
| 2260 | + view_y1 = y1;
|
---|
| 2261 | +
|
---|
| 2262 | + if (flags == BUILTIN_CMDLINE && graphics_inited) {
|
---|
| 2263 | + graphics_end();
|
---|
| 2264 | + graphics_init();
|
---|
| 2265 | + graphics_cls();
|
---|
| 2266 | + }
|
---|
| 2267 | +
|
---|
| 2268 | + return 0;
|
---|
| 2269 | +}
|
---|
| 2270 | +
|
---|
| 2271 | +static struct builtin builtin_viewport =
|
---|
| 2272 | +{
|
---|
| 2273 | + "viewport",
|
---|
| 2274 | + viewport_func,
|
---|
| 2275 | + BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST,
|
---|
| 2276 | + "viewport x0 y0 x1 y1",
|
---|
| 2277 | + "Changes grub internals to output text in the window defined by"
|
---|
| 2278 | + " four parameters. The x and y parameters are 0 based. This option"
|
---|
| 2279 | + " only works with the graphics interface."
|
---|
| 2280 | +};
|
---|
| 2281 | +
|
---|
| 2282 | +#endif /* SUPPORT_GRAPHICS */
|
---|
| 2283 | +
|
---|
| 2284 | + |
---|
| 2285 |
|
---|
| 2286 | +/* clear */
|
---|
| 2287 | +static int
|
---|
| 2288 | +clear_func()
|
---|
| 2289 | +{
|
---|
| 2290 | + if (current_term->cls)
|
---|
| 2291 | + current_term->cls();
|
---|
| 2292 | +
|
---|
| 2293 | + return 0;
|
---|
| 2294 | +}
|
---|
| 2295 | +
|
---|
| 2296 | +static struct builtin builtin_clear =
|
---|
| 2297 | +{
|
---|
| 2298 | + "clear",
|
---|
| 2299 | + clear_func,
|
---|
| 2300 | + BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
|
---|
| 2301 | + "clear",
|
---|
| 2302 | + "Clear the screen"
|
---|
| 2303 | +};
|
---|
| 2304 | +
|
---|
| 2305 | |
---|
| 2306 |
|
---|
| 2307 | /* displayapm */
|
---|
| 2308 | static int
|
---|
| 2309 | @@ -1454,14 +1724,20 @@
|
---|
| 2310 |
|
---|
| 2311 | |
---|
| 2312 |
|
---|
| 2313 | /* help */
|
---|
| 2314 | -#define MAX_SHORT_DOC_LEN 39
|
---|
| 2315 | -#define MAX_LONG_DOC_LEN 66
|
---|
| 2316 | -
|
---|
| 2317 | static int
|
---|
| 2318 | help_func (char *arg, int flags)
|
---|
| 2319 | {
|
---|
| 2320 | - int all = 0;
|
---|
| 2321 | -
|
---|
| 2322 | + int all = 0, max_short_doc_len, max_long_doc_len;
|
---|
| 2323 | + max_short_doc_len = 39;
|
---|
| 2324 | + max_long_doc_len = 66;
|
---|
| 2325 | +#ifdef SUPPORT_GRAPHICS
|
---|
| 2326 | + if (grub_memcmp (current_term->name, "graphics", sizeof ("graphics") - 1) == 0)
|
---|
| 2327 | + {
|
---|
| 2328 | + max_short_doc_len = (view_x1 - view_x0 + 1) / 2 - 1;
|
---|
| 2329 | + max_long_doc_len = (view_x1 - view_x0) - 14;
|
---|
| 2330 | + }
|
---|
| 2331 | +#endif
|
---|
| 2332 | +
|
---|
| 2333 | if (grub_memcmp (arg, "--all", sizeof ("--all") - 1) == 0)
|
---|
| 2334 | {
|
---|
| 2335 | all = 1;
|
---|
| 2336 | @@ -1491,13 +1767,13 @@
|
---|
| 2337 |
|
---|
| 2338 | len = grub_strlen ((*builtin)->short_doc);
|
---|
| 2339 | /* If the length of SHORT_DOC is too long, truncate it. */
|
---|
| 2340 | - if (len > MAX_SHORT_DOC_LEN - 1)
|
---|
| 2341 | - len = MAX_SHORT_DOC_LEN - 1;
|
---|
| 2342 | + if (len > max_short_doc_len - 1)
|
---|
| 2343 | + len = max_short_doc_len - 1;
|
---|
| 2344 |
|
---|
| 2345 | for (i = 0; i < len; i++)
|
---|
| 2346 | grub_putchar ((*builtin)->short_doc[i]);
|
---|
| 2347 |
|
---|
| 2348 | - for (; i < MAX_SHORT_DOC_LEN; i++)
|
---|
| 2349 | + for (; i < max_short_doc_len; i++)
|
---|
| 2350 | grub_putchar (' ');
|
---|
| 2351 |
|
---|
| 2352 | if (! left)
|
---|
| 2353 | @@ -1546,10 +1822,10 @@
|
---|
| 2354 | int i;
|
---|
| 2355 |
|
---|
| 2356 | /* If LEN is too long, fold DOC. */
|
---|
| 2357 | - if (len > MAX_LONG_DOC_LEN)
|
---|
| 2358 | + if (len > max_long_doc_len)
|
---|
| 2359 | {
|
---|
| 2360 | /* Fold this line at the position of a space. */
|
---|
| 2361 | - for (len = MAX_LONG_DOC_LEN; len > 0; len--)
|
---|
| 2362 | + for (len = max_long_doc_len; len > 0; len--)
|
---|
| 2363 | if (doc[len - 1] == ' ')
|
---|
| 2364 | break;
|
---|
| 2365 | }
|
---|
| 2366 | @@ -2323,6 +2599,25 @@
|
---|
| 2367 | "Probe I/O ports used for the drive DRIVE."
|
---|
| 2368 | };
|
---|
| 2369 |
|
---|
| 2370 | +/* print */
|
---|
| 2371 | +static int
|
---|
| 2372 | +print_func (char *arg, int flags)
|
---|
| 2373 | +{
|
---|
| 2374 | + printf("%s\n", arg);
|
---|
| 2375 | +
|
---|
| 2376 | + return 0;
|
---|
| 2377 | +}
|
---|
| 2378 | +
|
---|
| 2379 | +static struct builtin builtin_print =
|
---|
| 2380 | +{
|
---|
| 2381 | + "print",
|
---|
| 2382 | + print_func,
|
---|
| 2383 | + BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_NO_ECHO,
|
---|
| 2384 | + "print [MESSAGE ...]",
|
---|
| 2385 | + "Print MESSAGE."
|
---|
| 2386 | +};
|
---|
| 2387 | +
|
---|
| 2388 | +
|
---|
| 2389 | |
---|
| 2390 |
|
---|
| 2391 | /* kernel */
|
---|
| 2392 | static int
|
---|
| 2393 | @@ -3221,7 +3516,102 @@
|
---|
| 2394 | static int
|
---|
| 2395 | savedefault_func (char *arg, int flags)
|
---|
| 2396 | {
|
---|
| 2397 | -#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL)
|
---|
| 2398 | +#if !defined(SUPPORT_DISKLESS)
|
---|
| 2399 | + #if !defined(GRUB_UTIL)
|
---|
| 2400 | + savedefault_helper(arg, flags);
|
---|
| 2401 | + #else
|
---|
| 2402 | + savedefault_shell(arg, flags);
|
---|
| 2403 | + #endif
|
---|
| 2404 | +#else /* !SUPPORT_DISKLESS */
|
---|
| 2405 | + errnum = ERR_UNRECOGNIZED;
|
---|
| 2406 | + return 1;
|
---|
| 2407 | +#endif /* !SUPPORT_DISKLESS */
|
---|
| 2408 | +}
|
---|
| 2409 | +
|
---|
| 2410 | +#if !defined(SUPPORT_DISKLESS) && defined(GRUB_UTIL)
|
---|
| 2411 | +/* savedefault_shell */
|
---|
| 2412 | +static int
|
---|
| 2413 | +savedefault_shell(char *arg, int flags)
|
---|
| 2414 | + {
|
---|
| 2415 | + int once_only = 0;
|
---|
| 2416 | + int new_default;
|
---|
| 2417 | + int curr_default = -1;
|
---|
| 2418 | + int curr_prev_default = -1;
|
---|
| 2419 | + int new_prev_default = -1;
|
---|
| 2420 | + FILE *fp;
|
---|
| 2421 | + size_t bytes = 10;
|
---|
| 2422 | + char line[bytes];
|
---|
| 2423 | + char *default_file = (char *) DEFAULT_FILE_BUF;
|
---|
| 2424 | + char buf[bytes];
|
---|
| 2425 | + int i;
|
---|
| 2426 | +
|
---|
| 2427 | + while (1)
|
---|
| 2428 | + {
|
---|
| 2429 | + if (grub_memcmp ("--default=", arg, sizeof ("--default=") - 1) == 0)
|
---|
| 2430 | + {
|
---|
| 2431 | + char *p = arg + sizeof ("--default=") - 1;
|
---|
| 2432 | + if (! safe_parse_maxint (&p, &new_default))
|
---|
| 2433 | + return 1;
|
---|
| 2434 | + arg = skip_to (0, arg);
|
---|
| 2435 | + }
|
---|
| 2436 | + else if (grub_memcmp ("--once", arg, sizeof ("--once") - 1) == 0)
|
---|
| 2437 | + {
|
---|
| 2438 | + once_only = 1;
|
---|
| 2439 | + arg = skip_to (0, arg);
|
---|
| 2440 | + }
|
---|
| 2441 | + else
|
---|
| 2442 | + break;
|
---|
| 2443 | + }
|
---|
| 2444 | +
|
---|
| 2445 | + *default_file = 0;
|
---|
| 2446 | + grub_strncat (default_file, config_file, DEFAULT_FILE_BUFLEN);
|
---|
| 2447 | + for (i = grub_strlen(default_file); i >= 0; i--)
|
---|
| 2448 | + if (default_file[i] == '/')
|
---|
| 2449 | + {
|
---|
| 2450 | + i++;
|
---|
| 2451 | + break;
|
---|
| 2452 | + }
|
---|
| 2453 | + default_file[i] = 0;
|
---|
| 2454 | + grub_strncat (default_file + i, "default", DEFAULT_FILE_BUFLEN - i);
|
---|
| 2455 | +
|
---|
| 2456 | + if(!(fp = fopen(default_file,"w")))
|
---|
| 2457 | + {
|
---|
| 2458 | + errnum = ERR_READ;
|
---|
| 2459 | + goto fail;
|
---|
| 2460 | + }
|
---|
| 2461 | +
|
---|
| 2462 | + read(&line, -1);
|
---|
| 2463 | +
|
---|
| 2464 | + sscanf(line, "%d:%d", &curr_prev_default, &curr_default);
|
---|
| 2465 | +
|
---|
| 2466 | + if(curr_default != -1)
|
---|
| 2467 | + new_prev_default = curr_default;
|
---|
| 2468 | + else
|
---|
| 2469 | + {
|
---|
| 2470 | + if(curr_prev_default != -1)
|
---|
| 2471 | + new_prev_default = curr_prev_default;
|
---|
| 2472 | + else
|
---|
| 2473 | + new_prev_default = 0;
|
---|
| 2474 | + }
|
---|
| 2475 | +
|
---|
| 2476 | + if(once_only)
|
---|
| 2477 | + sprintf(buf, "%d:%d\n", new_prev_default, new_default);
|
---|
| 2478 | + else
|
---|
| 2479 | + sprintf(buf, "%d\n", new_default);
|
---|
| 2480 | +
|
---|
| 2481 | + fprintf(fp, buf);
|
---|
| 2482 | +
|
---|
| 2483 | +fail:
|
---|
| 2484 | + fclose(fp);
|
---|
| 2485 | + return errnum;
|
---|
| 2486 | +}
|
---|
| 2487 | +#endif
|
---|
| 2488 | +
|
---|
| 2489 | +/* savedefault_helper */
|
---|
| 2490 | +static int
|
---|
| 2491 | +savedefault_helper (char *arg, int flags)
|
---|
| 2492 | +{
|
---|
| 2493 | +#if !defined(SUPPORT_DISKLESS)
|
---|
| 2494 | unsigned long tmp_drive = saved_drive;
|
---|
| 2495 | unsigned long tmp_partition = saved_partition;
|
---|
| 2496 | char *default_file = (char *) DEFAULT_FILE_BUF;
|
---|
| 2497 | @@ -3300,19 +3690,23 @@
|
---|
| 2498 | disk_read_hook = 0;
|
---|
| 2499 | grub_close ();
|
---|
| 2500 |
|
---|
| 2501 | - if (len != sizeof (buf))
|
---|
| 2502 | - {
|
---|
| 2503 | - /* This is too small. Do not modify the file manually, please! */
|
---|
| 2504 | - errnum = ERR_READ;
|
---|
| 2505 | - goto fail;
|
---|
| 2506 | - }
|
---|
| 2507 | -
|
---|
| 2508 | if (sector_count > 2)
|
---|
| 2509 | {
|
---|
| 2510 | /* Is this possible?! Too fragmented! */
|
---|
| 2511 | errnum = ERR_FSYS_CORRUPT;
|
---|
| 2512 | goto fail;
|
---|
| 2513 | }
|
---|
| 2514 | +
|
---|
| 2515 | + char *tmp;
|
---|
| 2516 | + if((tmp = grub_strstr(buf, ":")) != NULL)
|
---|
| 2517 | + {
|
---|
| 2518 | + int f_len = grub_strlen(buf) - grub_strlen(tmp);
|
---|
| 2519 | + char *def;
|
---|
| 2520 | + int a;
|
---|
| 2521 | + for(a = 0; a < f_len; a++)
|
---|
| 2522 | + grub_memcpy(&def[a], &buf[a], sizeof(char));
|
---|
| 2523 | + safe_parse_maxint (&def, &entryno);
|
---|
| 2524 | + }
|
---|
| 2525 |
|
---|
| 2526 | /* Set up a string to be written. */
|
---|
| 2527 | grub_memset (buf, '\n', sizeof (buf));
|
---|
| 2528 | @@ -3830,15 +4224,15 @@
|
---|
| 2529 | {
|
---|
| 2530 | char tmp[16];
|
---|
| 2531 | grub_sprintf (tmp, ",%d", (partition >> 16) & 0xFF);
|
---|
| 2532 | - grub_strncat (device, tmp, 256);
|
---|
| 2533 | + grub_strncat (device, tmp, sizeof (device));
|
---|
| 2534 | }
|
---|
| 2535 | if ((partition & 0x00FF00) != 0x00FF00)
|
---|
| 2536 | {
|
---|
| 2537 | char tmp[16];
|
---|
| 2538 | grub_sprintf (tmp, ",%c", 'a' + ((partition >> 8) & 0xFF));
|
---|
| 2539 | - grub_strncat (device, tmp, 256);
|
---|
| 2540 | + grub_strncat (device, tmp, sizeof (device));
|
---|
| 2541 | }
|
---|
| 2542 | - grub_strncat (device, ")", 256);
|
---|
| 2543 | + grub_strncat (device, ")", sizeof (device));
|
---|
| 2544 | }
|
---|
| 2545 |
|
---|
| 2546 | int embed_stage1_5 (char *stage1_5, int drive, int partition)
|
---|
| 2547 | @@ -4085,7 +4479,7 @@
|
---|
| 2548 | };
|
---|
| 2549 |
|
---|
| 2550 | |
---|
| 2551 |
|
---|
| 2552 | -#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES)
|
---|
| 2553 | +#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) || defined(SUPPORT_GRAPHICS)
|
---|
| 2554 | /* terminal */
|
---|
| 2555 | static int
|
---|
| 2556 | terminal_func (char *arg, int flags)
|
---|
| 2557 | @@ -4244,17 +4638,29 @@
|
---|
| 2558 | end:
|
---|
| 2559 | current_term = term_table + default_term;
|
---|
| 2560 | current_term->flags = term_flags;
|
---|
| 2561 | -
|
---|
| 2562 | +
|
---|
| 2563 | if (lines)
|
---|
| 2564 | max_lines = lines;
|
---|
| 2565 | else
|
---|
| 2566 | - /* 24 would be a good default value. */
|
---|
| 2567 | - max_lines = 24;
|
---|
| 2568 | -
|
---|
| 2569 | + max_lines = current_term->max_lines;
|
---|
| 2570 | +
|
---|
| 2571 | /* If the interface is currently the command-line,
|
---|
| 2572 | restart it to repaint the screen. */
|
---|
| 2573 | - if (current_term != prev_term && (flags & BUILTIN_CMDLINE))
|
---|
| 2574 | + if ((current_term != prev_term) && (flags & BUILTIN_CMDLINE)){
|
---|
| 2575 | + if (prev_term->shutdown)
|
---|
| 2576 | + prev_term->shutdown();
|
---|
| 2577 | + if (current_term->startup) {
|
---|
| 2578 | + /* If startup fails, return to previous term */
|
---|
| 2579 | + if (current_term->startup() == 0) {
|
---|
| 2580 | + current_term = prev_term;
|
---|
| 2581 | + max_lines = current_term->max_lines;
|
---|
| 2582 | + if (current_term->cls) {
|
---|
| 2583 | + current_term->cls();
|
---|
| 2584 | + }
|
---|
| 2585 | + }
|
---|
| 2586 | + }
|
---|
| 2587 | grub_longjmp (restart_cmdline_env, 0);
|
---|
| 2588 | + }
|
---|
| 2589 |
|
---|
| 2590 | return 0;
|
---|
| 2591 | }
|
---|
| 2592 | @@ -4264,7 +4670,7 @@
|
---|
| 2593 | "terminal",
|
---|
| 2594 | terminal_func,
|
---|
| 2595 | BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST,
|
---|
| 2596 | - "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules]",
|
---|
| 2597 | + "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules] [graphics]",
|
---|
| 2598 | "Select a terminal. When multiple terminals are specified, wait until"
|
---|
| 2599 | " you push any key to continue. If both console and serial are specified,"
|
---|
| 2600 | " the terminal to which you input a key first will be selected. If no"
|
---|
| 2601 | @@ -4276,7 +4682,7 @@
|
---|
| 2602 | " seconds. The option --lines specifies the maximum number of lines."
|
---|
| 2603 | " The option --silent is used to suppress messages."
|
---|
| 2604 | };
|
---|
| 2605 | -#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */
|
---|
| 2606 | +#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES || SUPPORT_GRAPHICS */
|
---|
| 2607 |
|
---|
| 2608 | |
---|
| 2609 |
|
---|
| 2610 | #ifdef SUPPORT_SERIAL
|
---|
| 2611 | @@ -4795,13 +5201,20 @@
|
---|
| 2612 | /* The table of builtin commands. Sorted in dictionary order. */
|
---|
| 2613 | struct builtin *builtin_table[] =
|
---|
| 2614 | {
|
---|
| 2615 | +#ifdef SUPPORT_GRAPHICS
|
---|
| 2616 | + &builtin_background,
|
---|
| 2617 | +#endif
|
---|
| 2618 | &builtin_blocklist,
|
---|
| 2619 | &builtin_boot,
|
---|
| 2620 | #ifdef SUPPORT_NETBOOT
|
---|
| 2621 | &builtin_bootp,
|
---|
| 2622 | #endif /* SUPPORT_NETBOOT */
|
---|
| 2623 | +#ifdef SUPPORT_GRAPHICS
|
---|
| 2624 | + &builtin_border,
|
---|
| 2625 | +#endif
|
---|
| 2626 | &builtin_cat,
|
---|
| 2627 | &builtin_chainloader,
|
---|
| 2628 | + &builtin_clear,
|
---|
| 2629 | &builtin_cmp,
|
---|
| 2630 | &builtin_color,
|
---|
| 2631 | &builtin_configfile,
|
---|
| 2632 | @@ -4821,6 +5234,9 @@
|
---|
| 2633 | &builtin_embed,
|
---|
| 2634 | &builtin_fallback,
|
---|
| 2635 | &builtin_find,
|
---|
| 2636 | +#ifdef SUPPORT_GRAPHICS
|
---|
| 2637 | + &builtin_foreground,
|
---|
| 2638 | +#endif
|
---|
| 2639 | &builtin_fstest,
|
---|
| 2640 | &builtin_geometry,
|
---|
| 2641 | &builtin_halt,
|
---|
| 2642 | @@ -4848,6 +5264,7 @@
|
---|
| 2643 | &builtin_parttype,
|
---|
| 2644 | &builtin_password,
|
---|
| 2645 | &builtin_pause,
|
---|
| 2646 | + &builtin_print,
|
---|
| 2647 | #ifdef GRUB_UTIL
|
---|
| 2648 | &builtin_quit,
|
---|
| 2649 | #endif /* GRUB_UTIL */
|
---|
| 2650 | @@ -4864,9 +5281,13 @@
|
---|
| 2651 | #endif /* SUPPORT_SERIAL */
|
---|
| 2652 | &builtin_setkey,
|
---|
| 2653 | &builtin_setup,
|
---|
| 2654 | -#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES)
|
---|
| 2655 | +#ifdef SUPPORT_GRAPHICS
|
---|
| 2656 | + &builtin_shade,
|
---|
| 2657 | + &builtin_splashimage,
|
---|
| 2658 | +#endif /* SUPPORT_GRAPHICS */
|
---|
| 2659 | +#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) || defined(SUPPORT_GRAPHICS)
|
---|
| 2660 | &builtin_terminal,
|
---|
| 2661 | -#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */
|
---|
| 2662 | +#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES || SUPPORT_GRAPHICS */
|
---|
| 2663 | #ifdef SUPPORT_SERIAL
|
---|
| 2664 | &builtin_terminfo,
|
---|
| 2665 | #endif /* SUPPORT_SERIAL */
|
---|
| 2666 | @@ -4880,5 +5301,8 @@
|
---|
| 2667 | &builtin_unhide,
|
---|
| 2668 | &builtin_uppermem,
|
---|
| 2669 | &builtin_vbeprobe,
|
---|
| 2670 | +#ifdef SUPPORT_GRAPHICS
|
---|
| 2671 | + &builtin_viewport,
|
---|
| 2672 | +#endif
|
---|
| 2673 | 0
|
---|
| 2674 | };
|
---|
| 2675 | diff -Naur grub-0.97.orig/stage2/char_io.c grub-0.97/stage2/char_io.c
|
---|
| 2676 | --- grub-0.97.orig/stage2/char_io.c 2005-02-01 12:51:23.000000000 -0800
|
---|
| 2677 | +++ grub-0.97/stage2/char_io.c 2006-07-03 23:59:27.000000000 -0700
|
---|
| 2678 | @@ -29,12 +29,17 @@
|
---|
| 2679 | # include <serial.h>
|
---|
| 2680 | #endif
|
---|
| 2681 |
|
---|
| 2682 | +#ifdef SUPPORT_GRAPHICS
|
---|
| 2683 | +# include <graphics.h>
|
---|
| 2684 | +#endif
|
---|
| 2685 | +
|
---|
| 2686 | #ifndef STAGE1_5
|
---|
| 2687 | struct term_entry term_table[] =
|
---|
| 2688 | {
|
---|
| 2689 | {
|
---|
| 2690 | "console",
|
---|
| 2691 | 0,
|
---|
| 2692 | + 24,
|
---|
| 2693 | console_putchar,
|
---|
| 2694 | console_checkkey,
|
---|
| 2695 | console_getkey,
|
---|
| 2696 | @@ -43,13 +48,16 @@
|
---|
| 2697 | console_cls,
|
---|
| 2698 | console_setcolorstate,
|
---|
| 2699 | console_setcolor,
|
---|
| 2700 | - console_setcursor
|
---|
| 2701 | + console_setcursor,
|
---|
| 2702 | + 0,
|
---|
| 2703 | + 0
|
---|
| 2704 | },
|
---|
| 2705 | #ifdef SUPPORT_SERIAL
|
---|
| 2706 | {
|
---|
| 2707 | "serial",
|
---|
| 2708 | /* A serial device must be initialized. */
|
---|
| 2709 | TERM_NEED_INIT,
|
---|
| 2710 | + 24,
|
---|
| 2711 | serial_putchar,
|
---|
| 2712 | serial_checkkey,
|
---|
| 2713 | serial_getkey,
|
---|
| 2714 | @@ -58,6 +66,8 @@
|
---|
| 2715 | serial_cls,
|
---|
| 2716 | serial_setcolorstate,
|
---|
| 2717 | 0,
|
---|
| 2718 | + 0,
|
---|
| 2719 | + 0,
|
---|
| 2720 | 0
|
---|
| 2721 | },
|
---|
| 2722 | #endif /* SUPPORT_SERIAL */
|
---|
| 2723 | @@ -65,6 +75,7 @@
|
---|
| 2724 | {
|
---|
| 2725 | "hercules",
|
---|
| 2726 | 0,
|
---|
| 2727 | + 24,
|
---|
| 2728 | hercules_putchar,
|
---|
| 2729 | console_checkkey,
|
---|
| 2730 | console_getkey,
|
---|
| 2731 | @@ -73,11 +84,30 @@
|
---|
| 2732 | hercules_cls,
|
---|
| 2733 | hercules_setcolorstate,
|
---|
| 2734 | hercules_setcolor,
|
---|
| 2735 | - hercules_setcursor
|
---|
| 2736 | + hercules_setcursor,
|
---|
| 2737 | + 0,
|
---|
| 2738 | + 0
|
---|
| 2739 | },
|
---|
| 2740 | #endif /* SUPPORT_HERCULES */
|
---|
| 2741 | +#ifdef SUPPORT_GRAPHICS
|
---|
| 2742 | + { "graphics",
|
---|
| 2743 | + TERM_NEED_INIT, /* flags */
|
---|
| 2744 | + 30, /* number of lines */
|
---|
| 2745 | + graphics_putchar, /* putchar */
|
---|
| 2746 | + console_checkkey, /* checkkey */
|
---|
| 2747 | + console_getkey, /* getkey */
|
---|
| 2748 | + graphics_getxy, /* getxy */
|
---|
| 2749 | + graphics_gotoxy, /* gotoxy */
|
---|
| 2750 | + graphics_cls, /* cls */
|
---|
| 2751 | + graphics_setcolorstate, /* setcolorstate */
|
---|
| 2752 | + graphics_setcolor, /* setcolor */
|
---|
| 2753 | + graphics_setcursor, /* nocursor */
|
---|
| 2754 | + graphics_init, /* initialize */
|
---|
| 2755 | + graphics_end /* shutdown */
|
---|
| 2756 | + },
|
---|
| 2757 | +#endif /* SUPPORT_GRAPHICS */
|
---|
| 2758 | /* This must be the last entry. */
|
---|
| 2759 | - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
---|
| 2760 | + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
|
---|
| 2761 | };
|
---|
| 2762 |
|
---|
| 2763 | /* This must be console. */
|
---|
| 2764 | @@ -305,9 +335,10 @@
|
---|
| 2765 |
|
---|
| 2766 | /* XXX: These should be defined in shared.h, but I leave these here,
|
---|
| 2767 | until this code is freezed. */
|
---|
| 2768 | -#define CMDLINE_WIDTH 78
|
---|
| 2769 | #define CMDLINE_MARGIN 10
|
---|
| 2770 | -
|
---|
| 2771 | +
|
---|
| 2772 | + /* command-line limits */
|
---|
| 2773 | + int cmdline_width = 78, col_start = 0;
|
---|
| 2774 | int xpos, lpos, c, section;
|
---|
| 2775 | /* The length of PROMPT. */
|
---|
| 2776 | int plen;
|
---|
| 2777 | @@ -338,7 +369,7 @@
|
---|
| 2778 |
|
---|
| 2779 | /* If the cursor is in the first section, display the first section
|
---|
| 2780 | instead of the second. */
|
---|
| 2781 | - if (section == 1 && plen + lpos < CMDLINE_WIDTH)
|
---|
| 2782 | + if (section == 1 && plen + lpos < cmdline_width)
|
---|
| 2783 | cl_refresh (1, 0);
|
---|
| 2784 | else if (xpos - count < 1)
|
---|
| 2785 | cl_refresh (1, 0);
|
---|
| 2786 | @@ -354,7 +385,7 @@
|
---|
| 2787 | grub_putchar ('\b');
|
---|
| 2788 | }
|
---|
| 2789 | else
|
---|
| 2790 | - gotoxy (xpos, getxy () & 0xFF);
|
---|
| 2791 | + gotoxy (xpos + col_start, getxy () & 0xFF);
|
---|
| 2792 | }
|
---|
| 2793 | }
|
---|
| 2794 |
|
---|
| 2795 | @@ -364,7 +395,7 @@
|
---|
| 2796 | lpos += count;
|
---|
| 2797 |
|
---|
| 2798 | /* If the cursor goes outside, scroll the screen to the right. */
|
---|
| 2799 | - if (xpos + count >= CMDLINE_WIDTH)
|
---|
| 2800 | + if (xpos + count >= cmdline_width)
|
---|
| 2801 | cl_refresh (1, 0);
|
---|
| 2802 | else
|
---|
| 2803 | {
|
---|
| 2804 | @@ -383,7 +414,7 @@
|
---|
| 2805 | }
|
---|
| 2806 | }
|
---|
| 2807 | else
|
---|
| 2808 | - gotoxy (xpos, getxy () & 0xFF);
|
---|
| 2809 | + gotoxy (xpos + col_start, getxy () & 0xFF);
|
---|
| 2810 | }
|
---|
| 2811 | }
|
---|
| 2812 |
|
---|
| 2813 | @@ -398,14 +429,14 @@
|
---|
| 2814 | if (full)
|
---|
| 2815 | {
|
---|
| 2816 | /* Recompute the section number. */
|
---|
| 2817 | - if (lpos + plen < CMDLINE_WIDTH)
|
---|
| 2818 | + if (lpos + plen < cmdline_width)
|
---|
| 2819 | section = 0;
|
---|
| 2820 | else
|
---|
| 2821 | - section = ((lpos + plen - CMDLINE_WIDTH)
|
---|
| 2822 | - / (CMDLINE_WIDTH - 1 - CMDLINE_MARGIN) + 1);
|
---|
| 2823 | + section = ((lpos + plen - cmdline_width)
|
---|
| 2824 | + / (cmdline_width - 1 - CMDLINE_MARGIN) + 1);
|
---|
| 2825 |
|
---|
| 2826 | /* From the start to the end. */
|
---|
| 2827 | - len = CMDLINE_WIDTH;
|
---|
| 2828 | + len = cmdline_width;
|
---|
| 2829 | pos = 0;
|
---|
| 2830 | grub_putchar ('\r');
|
---|
| 2831 |
|
---|
| 2832 | @@ -445,8 +476,8 @@
|
---|
| 2833 | if (! full)
|
---|
| 2834 | offset = xpos - 1;
|
---|
| 2835 |
|
---|
| 2836 | - start = ((section - 1) * (CMDLINE_WIDTH - 1 - CMDLINE_MARGIN)
|
---|
| 2837 | - + CMDLINE_WIDTH - plen - CMDLINE_MARGIN);
|
---|
| 2838 | + start = ((section - 1) * (cmdline_width - 1 - CMDLINE_MARGIN)
|
---|
| 2839 | + + cmdline_width - plen - CMDLINE_MARGIN);
|
---|
| 2840 | xpos = lpos + 1 - start;
|
---|
| 2841 | start += offset;
|
---|
| 2842 | }
|
---|
| 2843 | @@ -471,7 +502,7 @@
|
---|
| 2844 |
|
---|
| 2845 | /* If the cursor is at the last position, put `>' or a space,
|
---|
| 2846 | depending on if there are more characters in BUF. */
|
---|
| 2847 | - if (pos == CMDLINE_WIDTH)
|
---|
| 2848 | + if (pos == cmdline_width)
|
---|
| 2849 | {
|
---|
| 2850 | if (start + len < llen)
|
---|
| 2851 | grub_putchar ('>');
|
---|
| 2852 | @@ -488,7 +519,7 @@
|
---|
| 2853 | grub_putchar ('\b');
|
---|
| 2854 | }
|
---|
| 2855 | else
|
---|
| 2856 | - gotoxy (xpos, getxy () & 0xFF);
|
---|
| 2857 | + gotoxy (xpos + col_start, getxy () & 0xFF);
|
---|
| 2858 | }
|
---|
| 2859 |
|
---|
| 2860 | /* Initialize the command-line. */
|
---|
| 2861 | @@ -518,10 +549,10 @@
|
---|
| 2862 |
|
---|
| 2863 | llen += l;
|
---|
| 2864 | lpos += l;
|
---|
| 2865 | - if (xpos + l >= CMDLINE_WIDTH)
|
---|
| 2866 | + if (xpos + l >= cmdline_width)
|
---|
| 2867 | cl_refresh (1, 0);
|
---|
| 2868 | - else if (xpos + l + llen - lpos > CMDLINE_WIDTH)
|
---|
| 2869 | - cl_refresh (0, CMDLINE_WIDTH - xpos);
|
---|
| 2870 | + else if (xpos + l + llen - lpos > cmdline_width)
|
---|
| 2871 | + cl_refresh (0, cmdline_width - xpos);
|
---|
| 2872 | else
|
---|
| 2873 | cl_refresh (0, l + llen - lpos);
|
---|
| 2874 | }
|
---|
| 2875 | @@ -533,12 +564,22 @@
|
---|
| 2876 | grub_memmove (buf + lpos, buf + lpos + count, llen - count + 1);
|
---|
| 2877 | llen -= count;
|
---|
| 2878 |
|
---|
| 2879 | - if (xpos + llen + count - lpos > CMDLINE_WIDTH)
|
---|
| 2880 | - cl_refresh (0, CMDLINE_WIDTH - xpos);
|
---|
| 2881 | + if (xpos + llen + count - lpos > cmdline_width)
|
---|
| 2882 | + cl_refresh (0, cmdline_width - xpos);
|
---|
| 2883 | else
|
---|
| 2884 | cl_refresh (0, llen + count - lpos);
|
---|
| 2885 | }
|
---|
| 2886 |
|
---|
| 2887 | + max_lines = current_term->max_lines;
|
---|
| 2888 | +#ifdef SUPPORT_GRAPHICS
|
---|
| 2889 | + if (grub_memcmp (current_term->name, "graphics", sizeof ("graphics") - 1) == 0)
|
---|
| 2890 | + {
|
---|
| 2891 | + cmdline_width = (view_x1 - view_x0) - 2;
|
---|
| 2892 | + col_start = view_x0;
|
---|
| 2893 | + max_lines = view_y1 - view_y0;
|
---|
| 2894 | + }
|
---|
| 2895 | +#endif
|
---|
| 2896 | +
|
---|
| 2897 | plen = grub_strlen (prompt);
|
---|
| 2898 | llen = grub_strlen (cmdline);
|
---|
| 2899 |
|
---|
| 2900 | @@ -1006,6 +1047,48 @@
|
---|
| 2901 | }
|
---|
| 2902 | #endif /* ! STAGE1_5 */
|
---|
| 2903 |
|
---|
| 2904 | +#ifndef STAGE1_5
|
---|
| 2905 | +/* Internal pager. */
|
---|
| 2906 | +int
|
---|
| 2907 | +do_more (void)
|
---|
| 2908 | +{
|
---|
| 2909 | + if (count_lines >= 0)
|
---|
| 2910 | + {
|
---|
| 2911 | + count_lines++;
|
---|
| 2912 | + if (count_lines >= max_lines - 2)
|
---|
| 2913 | + {
|
---|
| 2914 | + int tmp;
|
---|
| 2915 | +
|
---|
| 2916 | + /* It's important to disable the feature temporarily, because
|
---|
| 2917 | + the following grub_printf call will print newlines. */
|
---|
| 2918 | + count_lines = -1;
|
---|
| 2919 | +
|
---|
| 2920 | + grub_printf("\n");
|
---|
| 2921 | + if (current_term->setcolorstate)
|
---|
| 2922 | + current_term->setcolorstate (COLOR_STATE_HIGHLIGHT);
|
---|
| 2923 | +
|
---|
| 2924 | + grub_printf ("[Hit return to continue]");
|
---|
| 2925 | +
|
---|
| 2926 | + if (current_term->setcolorstate)
|
---|
| 2927 | + current_term->setcolorstate (COLOR_STATE_NORMAL);
|
---|
| 2928 | +
|
---|
| 2929 | +
|
---|
| 2930 | + do
|
---|
| 2931 | + {
|
---|
| 2932 | + tmp = ASCII_CHAR (getkey ());
|
---|
| 2933 | + }
|
---|
| 2934 | + while (tmp != '\n' && tmp != '\r');
|
---|
| 2935 | + grub_printf ("\r \r");
|
---|
| 2936 | +
|
---|
| 2937 | + /* Restart to count lines. */
|
---|
| 2938 | + count_lines = 0;
|
---|
| 2939 | + return 1;
|
---|
| 2940 | + }
|
---|
| 2941 | + }
|
---|
| 2942 | + return 0;
|
---|
| 2943 | +}
|
---|
| 2944 | +#endif
|
---|
| 2945 | +
|
---|
| 2946 | /* Display an ASCII character. */
|
---|
| 2947 | void
|
---|
| 2948 | grub_putchar (int c)
|
---|
| 2949 | @@ -1034,38 +1117,11 @@
|
---|
| 2950 |
|
---|
| 2951 | if (c == '\n')
|
---|
| 2952 | {
|
---|
| 2953 | + int flag;
|
---|
| 2954 | /* Internal `more'-like feature. */
|
---|
| 2955 | - if (count_lines >= 0)
|
---|
| 2956 | - {
|
---|
| 2957 | - count_lines++;
|
---|
| 2958 | - if (count_lines >= max_lines - 2)
|
---|
| 2959 | - {
|
---|
| 2960 | - int tmp;
|
---|
| 2961 | -
|
---|
| 2962 | - /* It's important to disable the feature temporarily, because
|
---|
| 2963 | - the following grub_printf call will print newlines. */
|
---|
| 2964 | - count_lines = -1;
|
---|
| 2965 | -
|
---|
| 2966 | - if (current_term->setcolorstate)
|
---|
| 2967 | - current_term->setcolorstate (COLOR_STATE_HIGHLIGHT);
|
---|
| 2968 | -
|
---|
| 2969 | - grub_printf ("\n[Hit return to continue]");
|
---|
| 2970 | -
|
---|
| 2971 | - if (current_term->setcolorstate)
|
---|
| 2972 | - current_term->setcolorstate (COLOR_STATE_NORMAL);
|
---|
| 2973 | -
|
---|
| 2974 | - do
|
---|
| 2975 | - {
|
---|
| 2976 | - tmp = ASCII_CHAR (getkey ());
|
---|
| 2977 | - }
|
---|
| 2978 | - while (tmp != '\n' && tmp != '\r');
|
---|
| 2979 | - grub_printf ("\r \r");
|
---|
| 2980 | -
|
---|
| 2981 | - /* Restart to count lines. */
|
---|
| 2982 | - count_lines = 0;
|
---|
| 2983 | - return;
|
---|
| 2984 | - }
|
---|
| 2985 | - }
|
---|
| 2986 | + flag = do_more ();
|
---|
| 2987 | + if (flag)
|
---|
| 2988 | + return;
|
---|
| 2989 | }
|
---|
| 2990 |
|
---|
| 2991 | current_term->putchar (c);
|
---|
| 2992 | @@ -1090,7 +1146,7 @@
|
---|
| 2993 | cls (void)
|
---|
| 2994 | {
|
---|
| 2995 | /* If the terminal is dumb, there is no way to clean the terminal. */
|
---|
| 2996 | - if (current_term->flags & TERM_DUMB)
|
---|
| 2997 | + if (current_term->flags & TERM_DUMB)
|
---|
| 2998 | grub_putchar ('\n');
|
---|
| 2999 | else
|
---|
| 3000 | current_term->cls ();
|
---|
| 3001 | @@ -1175,13 +1231,13 @@
|
---|
| 3002 | #endif /* ! STAGE1_5 */
|
---|
| 3003 |
|
---|
| 3004 | int
|
---|
| 3005 | -memcheck (int addr, int len)
|
---|
| 3006 | +memcheck (unsigned long int addr, unsigned long int len)
|
---|
| 3007 | {
|
---|
| 3008 | #ifdef GRUB_UTIL
|
---|
| 3009 | - auto int start_addr (void);
|
---|
| 3010 | - auto int end_addr (void);
|
---|
| 3011 | + auto unsigned long int start_addr (void);
|
---|
| 3012 | + auto int unsigned long end_addr (void);
|
---|
| 3013 |
|
---|
| 3014 | - auto int start_addr (void)
|
---|
| 3015 | + auto unsigned long int start_addr (void)
|
---|
| 3016 | {
|
---|
| 3017 | int ret;
|
---|
| 3018 | # if defined(HAVE_START_SYMBOL)
|
---|
| 3019 | @@ -1192,7 +1248,7 @@
|
---|
| 3020 | return ret;
|
---|
| 3021 | }
|
---|
| 3022 |
|
---|
| 3023 | - auto int end_addr (void)
|
---|
| 3024 | + auto unsigned long int end_addr (void)
|
---|
| 3025 | {
|
---|
| 3026 | int ret;
|
---|
| 3027 | # if defined(HAVE_END_SYMBOL)
|
---|
| 3028 | @@ -1217,6 +1273,16 @@
|
---|
| 3029 | return ! errnum;
|
---|
| 3030 | }
|
---|
| 3031 |
|
---|
| 3032 | +void
|
---|
| 3033 | +grub_memcpy(void *dest, const void *src, int len)
|
---|
| 3034 | +{
|
---|
| 3035 | + int i;
|
---|
| 3036 | + register char *d = (char*)dest, *s = (char*)src;
|
---|
| 3037 | +
|
---|
| 3038 | + for (i = 0; i < len; i++)
|
---|
| 3039 | + d[i] = s[i];
|
---|
| 3040 | +}
|
---|
| 3041 | +
|
---|
| 3042 | void *
|
---|
| 3043 | grub_memmove (void *to, const void *from, int len)
|
---|
| 3044 | {
|
---|
| 3045 | diff -Naur grub-0.97.orig/stage2/cmdline.c grub-0.97/stage2/cmdline.c
|
---|
| 3046 | --- grub-0.97.orig/stage2/cmdline.c 2004-08-16 16:23:01.000000000 -0700
|
---|
| 3047 | +++ grub-0.97/stage2/cmdline.c 2006-07-03 23:58:41.000000000 -0700
|
---|
| 3048 | @@ -50,10 +50,11 @@
|
---|
| 3049 | void
|
---|
| 3050 | print_cmdline_message (int forever)
|
---|
| 3051 | {
|
---|
| 3052 | - printf (" [ Minimal BASH-like line editing is supported. For the first word, TAB\n"
|
---|
| 3053 | - " lists possible command completions. Anywhere else TAB lists the possible\n"
|
---|
| 3054 | - " completions of a device/filename.%s ]\n",
|
---|
| 3055 | - (forever ? "" : " ESC at any time exits."));
|
---|
| 3056 | + grub_printf(" [ Minimal BASH-like line editing is supported. For\n"
|
---|
| 3057 | + " the first word, TAB lists possible command\n"
|
---|
| 3058 | + " completions. Anywhere else TAB lists the possible\n"
|
---|
| 3059 | + " completions of a device/filename.%s ]\n",
|
---|
| 3060 | + (forever ? "" : " ESC at any time\n exits."));
|
---|
| 3061 | }
|
---|
| 3062 |
|
---|
| 3063 | /* Find the builtin whose command name is COMMAND and return the
|
---|
| 3064 | diff -Naur grub-0.97.orig/stage2/freebsd.h grub-0.97/stage2/freebsd.h
|
---|
| 3065 | --- grub-0.97.orig/stage2/freebsd.h 2003-07-09 04:45:52.000000000 -0700
|
---|
| 3066 | +++ grub-0.97/stage2/freebsd.h 2006-07-03 23:59:36.000000000 -0700
|
---|
| 3067 | @@ -1,7 +1,7 @@
|
---|
| 3068 |
|
---|
| 3069 | /*
|
---|
| 3070 | * GRUB -- GRand Unified Bootloader
|
---|
| 3071 | - * Copyright (C) 2001 Free Software Foundation, Inc.
|
---|
| 3072 | + * Copyright (C) 2001, 2004 Free Software Foundation, Inc.
|
---|
| 3073 | *
|
---|
| 3074 | * This program is free software; you can redistribute it and/or modify
|
---|
| 3075 | * it under the terms of the GNU General Public License as published by
|
---|
| 3076 | @@ -35,6 +35,10 @@
|
---|
| 3077 | #define RB_CDROM 0x2000 /* use cdrom as root */
|
---|
| 3078 | #define RB_GDB 0x8000 /* use GDB remote debugger instead of DDB */
|
---|
| 3079 | #define RB_MUTE 0x10000 /* Come up with the console muted */
|
---|
| 3080 | +#define RB_SELFTEST 0x20000 /* don't complete the boot; do selftest */
|
---|
| 3081 | +#define RB_RESERVED1 0x40000 /* reserved for internal use of boot blocks */
|
---|
| 3082 | +#define RB_RESERVED2 0x80000 /* reserved for internal use of boot blocks */
|
---|
| 3083 | +#define RB_PAUSE 0x100000 /* pause after each output line during probe */
|
---|
| 3084 | #define RB_MULTIPLE 0x20000000 /* Use multiple consoles */
|
---|
| 3085 |
|
---|
| 3086 | #define RB_BOOTINFO 0x80000000 /* have `struct bootinfo *' arg */
|
---|
| 3087 | @@ -70,6 +74,9 @@
|
---|
| 3088 |
|
---|
| 3089 | #define N_BIOS_GEOM 8
|
---|
| 3090 |
|
---|
| 3091 | +typedef unsigned char u8_t;
|
---|
| 3092 | +typedef unsigned int u32_t;
|
---|
| 3093 | +
|
---|
| 3094 | /*
|
---|
| 3095 | * A zero bootinfo field often means that there is no info available.
|
---|
| 3096 | * Flags are used to indicate the validity of fields where zero is a
|
---|
| 3097 | @@ -77,19 +84,33 @@
|
---|
| 3098 | */
|
---|
| 3099 | struct bootinfo
|
---|
| 3100 | {
|
---|
| 3101 | - unsigned int bi_version;
|
---|
| 3102 | - unsigned char *bi_kernelname;
|
---|
| 3103 | - struct nfs_diskless *bi_nfs_diskless;
|
---|
| 3104 | + u32_t bi_version;
|
---|
| 3105 | + u8_t *bi_kernelname;
|
---|
| 3106 | + u32_t bi_nfs_diskless;
|
---|
| 3107 | /* End of fields that are always present. */
|
---|
| 3108 | #define bi_endcommon bi_n_bios_used
|
---|
| 3109 | - unsigned int bi_n_bios_used;
|
---|
| 3110 | - unsigned long bi_bios_geom[N_BIOS_GEOM];
|
---|
| 3111 | - unsigned int bi_size;
|
---|
| 3112 | - unsigned char bi_memsizes_valid;
|
---|
| 3113 | - unsigned char bi_bios_dev;
|
---|
| 3114 | - unsigned char bi_pad[2];
|
---|
| 3115 | - unsigned long bi_basemem;
|
---|
| 3116 | - unsigned long bi_extmem;
|
---|
| 3117 | - unsigned long bi_symtab;
|
---|
| 3118 | - unsigned long bi_esymtab;
|
---|
| 3119 | + u32_t bi_n_bios_used;
|
---|
| 3120 | + u32_t bi_bios_geom[N_BIOS_GEOM];
|
---|
| 3121 | + u32_t bi_size;
|
---|
| 3122 | + u8_t bi_memsizes_valid;
|
---|
| 3123 | + u8_t bi_bios_dev;
|
---|
| 3124 | + u8_t bi_pad[2];
|
---|
| 3125 | + u32_t bi_basemem;
|
---|
| 3126 | + u32_t bi_extmem;
|
---|
| 3127 | + u32_t bi_symtab;
|
---|
| 3128 | + u32_t bi_esymtab;
|
---|
| 3129 | + /* Items below only from advanced bootloader */
|
---|
| 3130 | + u32_t bi_kernend;
|
---|
| 3131 | + u32_t bi_envp;
|
---|
| 3132 | + u32_t bi_modulep;
|
---|
| 3133 | };
|
---|
| 3134 | +
|
---|
| 3135 | +#define MODINFO_END 0x0000 /* End of list */
|
---|
| 3136 | +#define MODINFO_NAME 0x0001 /* Name of module (string) */
|
---|
| 3137 | +#define MODINFO_TYPE 0x0002 /* Type of module (string) */
|
---|
| 3138 | +#define MODINFO_ADDR 0x0003 /* Loaded address */
|
---|
| 3139 | +#define MODINFO_SIZE 0x0004 /* Size of module */
|
---|
| 3140 | +#define MODINFO_EMPTY 0x0005 /* Has been deleted */
|
---|
| 3141 | +#define MODINFO_ARGS 0x0006 /* Parameters string */
|
---|
| 3142 | +#define MODINFO_METADATA 0x8000 /* Module-specfic */
|
---|
| 3143 | +
|
---|
| 3144 | diff -Naur grub-0.97.orig/stage2/graphics.c grub-0.97/stage2/graphics.c
|
---|
| 3145 | --- grub-0.97.orig/stage2/graphics.c 1969-12-31 16:00:00.000000000 -0800
|
---|
| 3146 | +++ grub-0.97/stage2/graphics.c 2006-07-03 23:58:41.000000000 -0700
|
---|
| 3147 | @@ -0,0 +1,585 @@
|
---|
| 3148 | +/*
|
---|
| 3149 | + * graphics.c - graphics mode support for GRUB
|
---|
| 3150 | + * Implemented as a terminal type by Jeremy Katz <katzj@redhat.com> based
|
---|
| 3151 | + * on a patch by Paulo César Pereira de Andrade <pcpa@conectiva.com.br>
|
---|
| 3152 | + * Options and enhancements made by Herton Ronaldo Krzesinski
|
---|
| 3153 | + * <herton@mandriva.com>
|
---|
| 3154 | + *
|
---|
| 3155 | + * GRUB -- GRand Unified Bootloader
|
---|
| 3156 | + * Copyright (C) 2001,2002 Red Hat, Inc.
|
---|
| 3157 | + * Portions copyright (C) 2000 Conectiva, Inc.
|
---|
| 3158 | + *
|
---|
| 3159 | + * This program is free software; you can redistribute it and/or modify
|
---|
| 3160 | + * it under the terms of the GNU General Public License as published by
|
---|
| 3161 | + * the Free Software Foundation; either version 2 of the License, or
|
---|
| 3162 | + * (at your option) any later version.
|
---|
| 3163 | + *
|
---|
| 3164 | + * This program is distributed in the hope that it will be useful,
|
---|
| 3165 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 3166 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 3167 | + * GNU General Public License for more details.
|
---|
| 3168 | + *
|
---|
| 3169 | + * You should have received a copy of the GNU General Public License
|
---|
| 3170 | + * along with this program; if not, write to the Free Software
|
---|
| 3171 | + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
---|
| 3172 | + */
|
---|
| 3173 | +
|
---|
| 3174 | +#ifdef SUPPORT_GRAPHICS
|
---|
| 3175 | +
|
---|
| 3176 | +#include <term.h>
|
---|
| 3177 | +#include <shared.h>
|
---|
| 3178 | +#include <graphics.h>
|
---|
| 3179 | +
|
---|
| 3180 | +int saved_videomode;
|
---|
| 3181 | +unsigned char *font8x16;
|
---|
| 3182 | +
|
---|
| 3183 | +int graphics_inited = 0;
|
---|
| 3184 | +static char splashimage[256];
|
---|
| 3185 | +
|
---|
| 3186 | +int shade = 1, no_cursor = 0;
|
---|
| 3187 | +
|
---|
| 3188 | +#define VSHADOW VSHADOW1
|
---|
| 3189 | +unsigned char VSHADOW1[38400];
|
---|
| 3190 | +unsigned char VSHADOW2[38400];
|
---|
| 3191 | +unsigned char VSHADOW4[38400];
|
---|
| 3192 | +unsigned char VSHADOW8[38400];
|
---|
| 3193 | +
|
---|
| 3194 | +/* define the default viewable area */
|
---|
| 3195 | +int view_x0 = 0;
|
---|
| 3196 | +int view_y0 = 0;
|
---|
| 3197 | +int view_x1 = 80;
|
---|
| 3198 | +int view_y1 = 30;
|
---|
| 3199 | +
|
---|
| 3200 | +/* text buffer has to be kept around so that we can write things as we
|
---|
| 3201 | + * scroll and the like */
|
---|
| 3202 | +unsigned short text[80 * 30];
|
---|
| 3203 | +
|
---|
| 3204 | +/* graphics options */
|
---|
| 3205 | +int foreground = (63 << 16) | (63 << 8) | (63), background = 0, window_border = 0;
|
---|
| 3206 | +
|
---|
| 3207 | +/* current position */
|
---|
| 3208 | +static int fontx = 0;
|
---|
| 3209 | +static int fonty = 0;
|
---|
| 3210 | +
|
---|
| 3211 | +/* global state so that we don't try to recursively scroll or cursor */
|
---|
| 3212 | +static int no_scroll = 0;
|
---|
| 3213 | +
|
---|
| 3214 | +/* color state */
|
---|
| 3215 | +static int graphics_standard_color = A_NORMAL;
|
---|
| 3216 | +static int graphics_normal_color = A_NORMAL;
|
---|
| 3217 | +static int graphics_highlight_color = A_REVERSE;
|
---|
| 3218 | +static int graphics_current_color = A_NORMAL;
|
---|
| 3219 | +static color_state graphics_color_state = COLOR_STATE_STANDARD;
|
---|
| 3220 | +
|
---|
| 3221 | +static inline void outb(unsigned short port, unsigned char val)
|
---|
| 3222 | +{
|
---|
| 3223 | + __asm __volatile ("outb %0,%1"::"a" (val), "d" (port));
|
---|
| 3224 | +}
|
---|
| 3225 | +
|
---|
| 3226 | +static void MapMask(int value) {
|
---|
| 3227 | + outb(0x3c4, 2);
|
---|
| 3228 | + outb(0x3c5, value);
|
---|
| 3229 | +}
|
---|
| 3230 | +
|
---|
| 3231 | +/* bit mask register */
|
---|
| 3232 | +static void BitMask(int value) {
|
---|
| 3233 | + outb(0x3ce, 8);
|
---|
| 3234 | + outb(0x3cf, value);
|
---|
| 3235 | +}
|
---|
| 3236 | +
|
---|
| 3237 | +/* move the graphics cursor location to col, row */
|
---|
| 3238 | +static void graphics_setxy(int col, int row) {
|
---|
| 3239 | + if (col >= view_x0 && col < view_x1) {
|
---|
| 3240 | + fontx = col;
|
---|
| 3241 | + cursorX = col << 3;
|
---|
| 3242 | + }
|
---|
| 3243 | + if (row >= view_y0 && row < view_y1) {
|
---|
| 3244 | + fonty = row;
|
---|
| 3245 | + cursorY = row << 4;
|
---|
| 3246 | + }
|
---|
| 3247 | +}
|
---|
| 3248 | +
|
---|
| 3249 | +/* scroll the screen */
|
---|
| 3250 | +static void graphics_scroll() {
|
---|
| 3251 | + int i, j, k;
|
---|
| 3252 | +
|
---|
| 3253 | + /* we don't want to scroll recursively... that would be bad */
|
---|
| 3254 | + if (no_scroll)
|
---|
| 3255 | + return;
|
---|
| 3256 | + no_scroll = 1;
|
---|
| 3257 | +
|
---|
| 3258 | + /* disable pager temporarily */
|
---|
| 3259 | + k = count_lines;
|
---|
| 3260 | + count_lines = -1;
|
---|
| 3261 | +
|
---|
| 3262 | + /* move everything up a line */
|
---|
| 3263 | + for (j = view_y0 + 1; j < view_y1; j++) {
|
---|
| 3264 | + graphics_gotoxy(view_x0, j - 1);
|
---|
| 3265 | + for (i = view_x0; i < view_x1; i++) {
|
---|
| 3266 | + graphics_putchar(text[j * 80 + i]);
|
---|
| 3267 | + }
|
---|
| 3268 | + }
|
---|
| 3269 | +
|
---|
| 3270 | + /* last line should be blank */
|
---|
| 3271 | + graphics_gotoxy(view_x0, view_y1 - 1);
|
---|
| 3272 | + for (i = view_x0; i < view_x1; i++)
|
---|
| 3273 | + graphics_putchar(' ');
|
---|
| 3274 | + graphics_setxy(view_x0, view_y1 - 1);
|
---|
| 3275 | +
|
---|
| 3276 | + count_lines = k;
|
---|
| 3277 | +
|
---|
| 3278 | + no_scroll = 0;
|
---|
| 3279 | +}
|
---|
| 3280 | +
|
---|
| 3281 | +/* Set the splash image */
|
---|
| 3282 | +void graphics_set_splash(char *splashfile) {
|
---|
| 3283 | + grub_strcpy(splashimage, splashfile);
|
---|
| 3284 | +}
|
---|
| 3285 | +
|
---|
| 3286 | +/* Get the current splash image */
|
---|
| 3287 | +char *graphics_get_splash(void) {
|
---|
| 3288 | + return splashimage;
|
---|
| 3289 | +}
|
---|
| 3290 | +
|
---|
| 3291 | +/*
|
---|
| 3292 | + * Initialize a vga16 graphics display with the palette based off of
|
---|
| 3293 | + * the image in splashimage. If the image doesn't exist, leave graphics
|
---|
| 3294 | + * mode. The mode initiated is 12h. From "Ralf Brown's Interrupt List":
|
---|
| 3295 | + * text/ text pixel pixel colors disply scrn system
|
---|
| 3296 | + * grph resol box resolution pages addr
|
---|
| 3297 | + * 12h G 80x30 8x16 640x480 16/256K . A000 VGA,ATI VIP
|
---|
| 3298 | + * G 80x30 8x16 640x480 16/64 . A000 ATI EGA Wonder
|
---|
| 3299 | + * G . . 640x480 16 . . UltraVision+256K EGA
|
---|
| 3300 | + */
|
---|
| 3301 | +int graphics_init()
|
---|
| 3302 | +{
|
---|
| 3303 | + if (!graphics_inited) {
|
---|
| 3304 | + saved_videomode = set_videomode(0x12);
|
---|
| 3305 | + if (get_videomode() != 0x12) {
|
---|
| 3306 | + set_videomode(saved_videomode);
|
---|
| 3307 | + return 0;
|
---|
| 3308 | + }
|
---|
| 3309 | + graphics_inited = 1;
|
---|
| 3310 | + }
|
---|
| 3311 | + else
|
---|
| 3312 | + return 1;
|
---|
| 3313 | +
|
---|
| 3314 | + font8x16 = (unsigned char*)graphics_get_font();
|
---|
| 3315 | +
|
---|
| 3316 | + /* make sure that the highlight color is set correctly */
|
---|
| 3317 | + graphics_highlight_color = ((graphics_normal_color >> 4) |
|
---|
| 3318 | + ((graphics_normal_color & 0xf) << 4));
|
---|
| 3319 | +
|
---|
| 3320 | + graphics_cls();
|
---|
| 3321 | +
|
---|
| 3322 | + if (!read_image(splashimage)) {
|
---|
| 3323 | + grub_printf("Failed to read splash image (%s)\n", splashimage);
|
---|
| 3324 | + grub_printf("Press any key to continue...");
|
---|
| 3325 | + getkey();
|
---|
| 3326 | + set_videomode(saved_videomode);
|
---|
| 3327 | + graphics_inited = 0;
|
---|
| 3328 | + return 0;
|
---|
| 3329 | + }
|
---|
| 3330 | +
|
---|
| 3331 | + set_int1c_handler();
|
---|
| 3332 | +
|
---|
| 3333 | + return 1;
|
---|
| 3334 | +}
|
---|
| 3335 | +
|
---|
| 3336 | +/* Leave graphics mode */
|
---|
| 3337 | +void graphics_end(void)
|
---|
| 3338 | +{
|
---|
| 3339 | + if (graphics_inited) {
|
---|
| 3340 | + unset_int1c_handler();
|
---|
| 3341 | + set_videomode(saved_videomode);
|
---|
| 3342 | + graphics_inited = 0;
|
---|
| 3343 | + no_cursor = 0;
|
---|
| 3344 | + }
|
---|
| 3345 | +}
|
---|
| 3346 | +
|
---|
| 3347 | +/* Print ch on the screen. Handle any needed scrolling or the like */
|
---|
| 3348 | +void graphics_putchar(int ch) {
|
---|
| 3349 | + ch &= 0xff;
|
---|
| 3350 | +
|
---|
| 3351 | + graphics_cursor(0);
|
---|
| 3352 | +
|
---|
| 3353 | + if (ch == '\n') {
|
---|
| 3354 | + if (fonty + 1 < view_y1)
|
---|
| 3355 | + graphics_setxy(fontx, fonty + 1);
|
---|
| 3356 | + else
|
---|
| 3357 | + graphics_scroll();
|
---|
| 3358 | + graphics_cursor(1);
|
---|
| 3359 | + return;
|
---|
| 3360 | + } else if (ch == '\r') {
|
---|
| 3361 | + graphics_setxy(view_x0, fonty);
|
---|
| 3362 | + graphics_cursor(1);
|
---|
| 3363 | + return;
|
---|
| 3364 | + }
|
---|
| 3365 | +
|
---|
| 3366 | + graphics_cursor(0);
|
---|
| 3367 | +
|
---|
| 3368 | + text[fonty * 80 + fontx] = ch;
|
---|
| 3369 | + text[fonty * 80 + fontx] &= 0x00ff;
|
---|
| 3370 | + if (graphics_current_color & 0xf0)
|
---|
| 3371 | + text[fonty * 80 + fontx] |= 0x100;
|
---|
| 3372 | +
|
---|
| 3373 | + graphics_cursor(0);
|
---|
| 3374 | +
|
---|
| 3375 | + if ((fontx + 1) >= view_x1) {
|
---|
| 3376 | + graphics_setxy(view_x0, fonty);
|
---|
| 3377 | + if (fonty + 1 < view_y1)
|
---|
| 3378 | + graphics_setxy(view_x0, fonty + 1);
|
---|
| 3379 | + else
|
---|
| 3380 | + graphics_scroll();
|
---|
| 3381 | + graphics_cursor(1);
|
---|
| 3382 | + do_more ();
|
---|
| 3383 | + graphics_cursor(0);
|
---|
| 3384 | + } else {
|
---|
| 3385 | + graphics_setxy(fontx + 1, fonty);
|
---|
| 3386 | + }
|
---|
| 3387 | +
|
---|
| 3388 | + graphics_cursor(1);
|
---|
| 3389 | +}
|
---|
| 3390 | +
|
---|
| 3391 | +/* get the current location of the cursor */
|
---|
| 3392 | +int graphics_getxy(void) {
|
---|
| 3393 | + return (fontx << 8) | fonty;
|
---|
| 3394 | +}
|
---|
| 3395 | +
|
---|
| 3396 | +void graphics_gotoxy(int x, int y) {
|
---|
| 3397 | + graphics_cursor(0);
|
---|
| 3398 | +
|
---|
| 3399 | + graphics_setxy(x, y);
|
---|
| 3400 | +
|
---|
| 3401 | + graphics_cursor(1);
|
---|
| 3402 | +}
|
---|
| 3403 | +
|
---|
| 3404 | +void graphics_cls(void) {
|
---|
| 3405 | + int i;
|
---|
| 3406 | + unsigned char *mem, *s1, *s2, *s4, *s8;
|
---|
| 3407 | +
|
---|
| 3408 | + graphics_cursor(0);
|
---|
| 3409 | + graphics_gotoxy(view_x0, view_y0);
|
---|
| 3410 | +
|
---|
| 3411 | + mem = (unsigned char*)VIDEOMEM;
|
---|
| 3412 | + s1 = (unsigned char*)VSHADOW1;
|
---|
| 3413 | + s2 = (unsigned char*)VSHADOW2;
|
---|
| 3414 | + s4 = (unsigned char*)VSHADOW4;
|
---|
| 3415 | + s8 = (unsigned char*)VSHADOW8;
|
---|
| 3416 | +
|
---|
| 3417 | + for (i = 0; i < 80 * 30; i++)
|
---|
| 3418 | + text[i] = ' ';
|
---|
| 3419 | + graphics_cursor(1);
|
---|
| 3420 | +
|
---|
| 3421 | + BitMask(0xff);
|
---|
| 3422 | +
|
---|
| 3423 | + /* plane 1 */
|
---|
| 3424 | + MapMask(1);
|
---|
| 3425 | + grub_memcpy(mem, s1, 38400);
|
---|
| 3426 | +
|
---|
| 3427 | + /* plane 2 */
|
---|
| 3428 | + MapMask(2);
|
---|
| 3429 | + grub_memcpy(mem, s2, 38400);
|
---|
| 3430 | +
|
---|
| 3431 | + /* plane 3 */
|
---|
| 3432 | + MapMask(4);
|
---|
| 3433 | + grub_memcpy(mem, s4, 38400);
|
---|
| 3434 | +
|
---|
| 3435 | + /* plane 4 */
|
---|
| 3436 | + MapMask(8);
|
---|
| 3437 | + grub_memcpy(mem, s8, 38400);
|
---|
| 3438 | +
|
---|
| 3439 | + MapMask(15);
|
---|
| 3440 | +
|
---|
| 3441 | + if (no_cursor) {
|
---|
| 3442 | + no_cursor = 0;
|
---|
| 3443 | + set_int1c_handler();
|
---|
| 3444 | + }
|
---|
| 3445 | +}
|
---|
| 3446 | +
|
---|
| 3447 | +void graphics_setcolorstate (color_state state) {
|
---|
| 3448 | + switch (state) {
|
---|
| 3449 | + case COLOR_STATE_STANDARD:
|
---|
| 3450 | + graphics_current_color = graphics_standard_color;
|
---|
| 3451 | + break;
|
---|
| 3452 | + case COLOR_STATE_NORMAL:
|
---|
| 3453 | + graphics_current_color = graphics_normal_color;
|
---|
| 3454 | + break;
|
---|
| 3455 | + case COLOR_STATE_HIGHLIGHT:
|
---|
| 3456 | + graphics_current_color = graphics_highlight_color;
|
---|
| 3457 | + break;
|
---|
| 3458 | + default:
|
---|
| 3459 | + graphics_current_color = graphics_standard_color;
|
---|
| 3460 | + break;
|
---|
| 3461 | + }
|
---|
| 3462 | +
|
---|
| 3463 | + graphics_color_state = state;
|
---|
| 3464 | +}
|
---|
| 3465 | +
|
---|
| 3466 | +void graphics_setcolor (int normal_color, int highlight_color) {
|
---|
| 3467 | + graphics_normal_color = normal_color;
|
---|
| 3468 | + graphics_highlight_color = highlight_color;
|
---|
| 3469 | +
|
---|
| 3470 | + graphics_setcolorstate (graphics_color_state);
|
---|
| 3471 | +}
|
---|
| 3472 | +
|
---|
| 3473 | +int graphics_setcursor (int on) {
|
---|
| 3474 | + if (!no_cursor && !on) {
|
---|
| 3475 | + no_cursor = 1;
|
---|
| 3476 | + unset_int1c_handler();
|
---|
| 3477 | + graphics_cursor(0);
|
---|
| 3478 | + }
|
---|
| 3479 | + else if(no_cursor && on) {
|
---|
| 3480 | + no_cursor = 0;
|
---|
| 3481 | + set_int1c_handler();
|
---|
| 3482 | + graphics_cursor(1);
|
---|
| 3483 | + }
|
---|
| 3484 | + return 0;
|
---|
| 3485 | +}
|
---|
| 3486 | +
|
---|
| 3487 | +/* Read in the splashscreen image and set the palette up appropriately.
|
---|
| 3488 | + * Format of splashscreen is an xpm (can be gzipped) with 16 colors and
|
---|
| 3489 | + * 640x480. */
|
---|
| 3490 | +int read_image(char *s)
|
---|
| 3491 | +{
|
---|
| 3492 | + char buf[32], pal[16], c;
|
---|
| 3493 | + unsigned char base, mask, *s1, *s2, *s4, *s8;
|
---|
| 3494 | + unsigned i, len, idx, colors, x, y, width, height;
|
---|
| 3495 | +
|
---|
| 3496 | + if (!grub_open(s))
|
---|
| 3497 | + return 0;
|
---|
| 3498 | +
|
---|
| 3499 | + /* read header */
|
---|
| 3500 | + if (!grub_read((char*)&buf, 10) || grub_memcmp(buf, "/* XPM */\n", 10)) {
|
---|
| 3501 | + grub_close();
|
---|
| 3502 | + return 0;
|
---|
| 3503 | + }
|
---|
| 3504 | +
|
---|
| 3505 | + /* parse info */
|
---|
| 3506 | + while (grub_read(&c, 1)) {
|
---|
| 3507 | + if (c == '"')
|
---|
| 3508 | + break;
|
---|
| 3509 | + }
|
---|
| 3510 | +
|
---|
| 3511 | + while (grub_read(&c, 1) && (c == ' ' || c == '\t'))
|
---|
| 3512 | + ;
|
---|
| 3513 | +
|
---|
| 3514 | + i = 0;
|
---|
| 3515 | + width = c - '0';
|
---|
| 3516 | + while (grub_read(&c, 1)) {
|
---|
| 3517 | + if (c >= '0' && c <= '9')
|
---|
| 3518 | + width = width * 10 + c - '0';
|
---|
| 3519 | + else
|
---|
| 3520 | + break;
|
---|
| 3521 | + }
|
---|
| 3522 | + while (grub_read(&c, 1) && (c == ' ' || c == '\t'))
|
---|
| 3523 | + ;
|
---|
| 3524 | +
|
---|
| 3525 | + height = c - '0';
|
---|
| 3526 | + while (grub_read(&c, 1)) {
|
---|
| 3527 | + if (c >= '0' && c <= '9')
|
---|
| 3528 | + height = height * 10 + c - '0';
|
---|
| 3529 | + else
|
---|
| 3530 | + break;
|
---|
| 3531 | + }
|
---|
| 3532 | + while (grub_read(&c, 1) && (c == ' ' || c == '\t'))
|
---|
| 3533 | + ;
|
---|
| 3534 | +
|
---|
| 3535 | + colors = c - '0';
|
---|
| 3536 | + while (grub_read(&c, 1)) {
|
---|
| 3537 | + if (c >= '0' && c <= '9')
|
---|
| 3538 | + colors = colors * 10 + c - '0';
|
---|
| 3539 | + else
|
---|
| 3540 | + break;
|
---|
| 3541 | + }
|
---|
| 3542 | +
|
---|
| 3543 | + base = 0;
|
---|
| 3544 | + while (grub_read(&c, 1) && c != '"')
|
---|
| 3545 | + ;
|
---|
| 3546 | +
|
---|
| 3547 | + /* palette */
|
---|
| 3548 | + for (i = 0, idx = 1; i < colors; i++) {
|
---|
| 3549 | + len = 0;
|
---|
| 3550 | +
|
---|
| 3551 | + while (grub_read(&c, 1) && c != '"')
|
---|
| 3552 | + ;
|
---|
| 3553 | + grub_read(&c, 1); /* char */
|
---|
| 3554 | + base = c;
|
---|
| 3555 | + grub_read(buf, 4); /* \t c # */
|
---|
| 3556 | +
|
---|
| 3557 | + while (grub_read(&c, 1) && c != '"') {
|
---|
| 3558 | + if (len < sizeof(buf))
|
---|
| 3559 | + buf[len++] = c;
|
---|
| 3560 | + }
|
---|
| 3561 | +
|
---|
| 3562 | + if (len == 6 && idx < 15) {
|
---|
| 3563 | + int r = ((hex(buf[0]) << 4) | hex(buf[1])) >> 2;
|
---|
| 3564 | + int g = ((hex(buf[2]) << 4) | hex(buf[3])) >> 2;
|
---|
| 3565 | + int b = ((hex(buf[4]) << 4) | hex(buf[5])) >> 2;
|
---|
| 3566 | +
|
---|
| 3567 | + pal[idx] = base;
|
---|
| 3568 | + graphics_set_palette(idx, r, g, b);
|
---|
| 3569 | + ++idx;
|
---|
| 3570 | + }
|
---|
| 3571 | + }
|
---|
| 3572 | +
|
---|
| 3573 | + x = y = len = 0;
|
---|
| 3574 | +
|
---|
| 3575 | + s1 = (unsigned char*)VSHADOW1;
|
---|
| 3576 | + s2 = (unsigned char*)VSHADOW2;
|
---|
| 3577 | + s4 = (unsigned char*)VSHADOW4;
|
---|
| 3578 | + s8 = (unsigned char*)VSHADOW8;
|
---|
| 3579 | +
|
---|
| 3580 | + for (i = 0; i < 38400; i++)
|
---|
| 3581 | + s1[i] = s2[i] = s4[i] = s8[i] = 0;
|
---|
| 3582 | +
|
---|
| 3583 | + /* parse xpm data */
|
---|
| 3584 | + while (y < height) {
|
---|
| 3585 | + while (1) {
|
---|
| 3586 | + if (!grub_read(&c, 1)) {
|
---|
| 3587 | + grub_close();
|
---|
| 3588 | + return 0;
|
---|
| 3589 | + }
|
---|
| 3590 | + if (c == '"')
|
---|
| 3591 | + break;
|
---|
| 3592 | + }
|
---|
| 3593 | +
|
---|
| 3594 | + while (grub_read(&c, 1) && c != '"') {
|
---|
| 3595 | + for (i = 1; i < 15; i++)
|
---|
| 3596 | + if (pal[i] == c) {
|
---|
| 3597 | + c = i;
|
---|
| 3598 | + break;
|
---|
| 3599 | + }
|
---|
| 3600 | +
|
---|
| 3601 | + mask = 0x80 >> (x & 7);
|
---|
| 3602 | + if (c & 1)
|
---|
| 3603 | + s1[len + (x >> 3)] |= mask;
|
---|
| 3604 | + if (c & 2)
|
---|
| 3605 | + s2[len + (x >> 3)] |= mask;
|
---|
| 3606 | + if (c & 4)
|
---|
| 3607 | + s4[len + (x >> 3)] |= mask;
|
---|
| 3608 | + if (c & 8)
|
---|
| 3609 | + s8[len + (x >> 3)] |= mask;
|
---|
| 3610 | +
|
---|
| 3611 | + if (++x >= 640) {
|
---|
| 3612 | + x = 0;
|
---|
| 3613 | +
|
---|
| 3614 | + if (y < 480)
|
---|
| 3615 | + len += 80;
|
---|
| 3616 | + ++y;
|
---|
| 3617 | + }
|
---|
| 3618 | + }
|
---|
| 3619 | + }
|
---|
| 3620 | +
|
---|
| 3621 | + grub_close();
|
---|
| 3622 | +
|
---|
| 3623 | + graphics_set_palette(0, (background >> 16), (background >> 8) & 63,
|
---|
| 3624 | + background & 63);
|
---|
| 3625 | + graphics_set_palette(15, (foreground >> 16), (foreground >> 8) & 63,
|
---|
| 3626 | + foreground & 63);
|
---|
| 3627 | + graphics_set_palette(0x11, (window_border >> 16), (window_border >> 8) & 63,
|
---|
| 3628 | + window_border & 63);
|
---|
| 3629 | +
|
---|
| 3630 | + return 1;
|
---|
| 3631 | +}
|
---|
| 3632 | +
|
---|
| 3633 | +/* Convert a character which is a hex digit to the appropriate integer */
|
---|
| 3634 | +int hex(int v)
|
---|
| 3635 | +{
|
---|
| 3636 | + if (v >= 'A' && v <= 'F')
|
---|
| 3637 | + return (v - 'A' + 10);
|
---|
| 3638 | + if (v >= 'a' && v <= 'f')
|
---|
| 3639 | + return (v - 'a' + 10);
|
---|
| 3640 | + return (v - '0');
|
---|
| 3641 | +}
|
---|
| 3642 | +
|
---|
| 3643 | +void graphics_cursor(int set) {
|
---|
| 3644 | + unsigned char *pat, *mem, *ptr, chr[16 << 2];
|
---|
| 3645 | + int i, ch, invert, offset;
|
---|
| 3646 | +
|
---|
| 3647 | + if (set && (no_cursor || no_scroll))
|
---|
| 3648 | + return;
|
---|
| 3649 | +
|
---|
| 3650 | + offset = cursorY * 80 + fontx;
|
---|
| 3651 | + ch = text[fonty * 80 + fontx] & 0xff;
|
---|
| 3652 | + invert = (text[fonty * 80 + fontx] & 0xff00) != 0;
|
---|
| 3653 | + pat = font8x16 + (ch << 4);
|
---|
| 3654 | +
|
---|
| 3655 | + mem = (unsigned char*)VIDEOMEM + offset;
|
---|
| 3656 | +
|
---|
| 3657 | + if (!set) {
|
---|
| 3658 | + for (i = 0; i < 16; i++) {
|
---|
| 3659 | + unsigned char mask = pat[i];
|
---|
| 3660 | +
|
---|
| 3661 | + if (!invert) {
|
---|
| 3662 | + chr[i ] = ((unsigned char*)VSHADOW1)[offset];
|
---|
| 3663 | + chr[16 + i] = ((unsigned char*)VSHADOW2)[offset];
|
---|
| 3664 | + chr[32 + i] = ((unsigned char*)VSHADOW4)[offset];
|
---|
| 3665 | + chr[48 + i] = ((unsigned char*)VSHADOW8)[offset];
|
---|
| 3666 | +
|
---|
| 3667 | + if (shade) {
|
---|
| 3668 | + if (ch == DISP_VERT || ch == DISP_LL ||
|
---|
| 3669 | + ch == DISP_UR || ch == DISP_LR) {
|
---|
| 3670 | + unsigned char pmask = ~(pat[i] >> 1);
|
---|
| 3671 | +
|
---|
| 3672 | + chr[i ] &= pmask;
|
---|
| 3673 | + chr[16 + i] &= pmask;
|
---|
| 3674 | + chr[32 + i] &= pmask;
|
---|
| 3675 | + chr[48 + i] &= pmask;
|
---|
| 3676 | + }
|
---|
| 3677 | + if (i > 0 && ch != DISP_VERT) {
|
---|
| 3678 | + unsigned char pmask = ~(pat[i - 1] >> 1);
|
---|
| 3679 | +
|
---|
| 3680 | + chr[i ] &= pmask;
|
---|
| 3681 | + chr[16 + i] &= pmask;
|
---|
| 3682 | + chr[32 + i] &= pmask;
|
---|
| 3683 | + chr[48 + i] &= pmask;
|
---|
| 3684 | + if (ch == DISP_HORIZ || ch == DISP_UR || ch == DISP_LR) {
|
---|
| 3685 | + pmask = ~pat[i - 1];
|
---|
| 3686 | +
|
---|
| 3687 | + chr[i ] &= pmask;
|
---|
| 3688 | + chr[16 + i] &= pmask;
|
---|
| 3689 | + chr[32 + i] &= pmask;
|
---|
| 3690 | + chr[48 + i] &= pmask;
|
---|
| 3691 | + }
|
---|
| 3692 | + }
|
---|
| 3693 | + }
|
---|
| 3694 | + chr[i ] |= mask;
|
---|
| 3695 | + chr[16 + i] |= mask;
|
---|
| 3696 | + chr[32 + i] |= mask;
|
---|
| 3697 | + chr[48 + i] |= mask;
|
---|
| 3698 | +
|
---|
| 3699 | + offset += 80;
|
---|
| 3700 | + }
|
---|
| 3701 | + else {
|
---|
| 3702 | + chr[i ] = mask;
|
---|
| 3703 | + chr[16 + i] = mask;
|
---|
| 3704 | + chr[32 + i] = mask;
|
---|
| 3705 | + chr[48 + i] = mask;
|
---|
| 3706 | + }
|
---|
| 3707 | + }
|
---|
| 3708 | + }
|
---|
| 3709 | + else {
|
---|
| 3710 | + MapMask(15);
|
---|
| 3711 | + ptr = mem;
|
---|
| 3712 | + for (i = 0; i < 16; i++, ptr += 80) {
|
---|
| 3713 | + cursorBuf[i] = pat[i];
|
---|
| 3714 | + *ptr = ~pat[i];
|
---|
| 3715 | + }
|
---|
| 3716 | + return;
|
---|
| 3717 | + }
|
---|
| 3718 | +
|
---|
| 3719 | + offset = 0;
|
---|
| 3720 | + for (i = 1; i < 16; i <<= 1, offset += 16) {
|
---|
| 3721 | + int j;
|
---|
| 3722 | +
|
---|
| 3723 | + MapMask(i);
|
---|
| 3724 | + ptr = mem;
|
---|
| 3725 | + for (j = 0; j < 16; j++, ptr += 80)
|
---|
| 3726 | + *ptr = chr[j + offset];
|
---|
| 3727 | + }
|
---|
| 3728 | +
|
---|
| 3729 | + MapMask(15);
|
---|
| 3730 | +}
|
---|
| 3731 | +
|
---|
| 3732 | +#endif /* SUPPORT_GRAPHICS */
|
---|
| 3733 | diff -Naur grub-0.97.orig/stage2/graphics.h grub-0.97/stage2/graphics.h
|
---|
| 3734 | --- grub-0.97.orig/stage2/graphics.h 1969-12-31 16:00:00.000000000 -0800
|
---|
| 3735 | +++ grub-0.97/stage2/graphics.h 2006-07-03 23:58:41.000000000 -0700
|
---|
| 3736 | @@ -0,0 +1,44 @@
|
---|
| 3737 | +/* graphics.h - graphics console interface */
|
---|
| 3738 | +/*
|
---|
| 3739 | + * GRUB -- GRand Unified Bootloader
|
---|
| 3740 | + * Copyright (C) 2002 Free Software Foundation, Inc.
|
---|
| 3741 | + *
|
---|
| 3742 | + * This program is free software; you can redistribute it and/or modify
|
---|
| 3743 | + * it under the terms of the GNU General Public License as published by
|
---|
| 3744 | + * the Free Software Foundation; either version 2 of the License, or
|
---|
| 3745 | + * (at your option) any later version.
|
---|
| 3746 | + *
|
---|
| 3747 | + * This program is distributed in the hope that it will be useful,
|
---|
| 3748 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 3749 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
| 3750 | + * GNU General Public License for more details.
|
---|
| 3751 | + *
|
---|
| 3752 | + * You should have received a copy of the GNU General Public License
|
---|
| 3753 | + * along with this program; if not, write to the Free Software
|
---|
| 3754 | + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
---|
| 3755 | + */
|
---|
| 3756 | +
|
---|
| 3757 | +#ifndef GRAPHICS_H
|
---|
| 3758 | +#define GRAPHICS_H
|
---|
| 3759 | +
|
---|
| 3760 | +/* magic constant */
|
---|
| 3761 | +#define VIDEOMEM 0xA0000
|
---|
| 3762 | +
|
---|
| 3763 | +/* function prototypes */
|
---|
| 3764 | +char *graphics_get_splash(void);
|
---|
| 3765 | +
|
---|
| 3766 | +int read_image(char *s);
|
---|
| 3767 | +void graphics_cursor(int set);
|
---|
| 3768 | +
|
---|
| 3769 | +/* function prototypes for asm functions */
|
---|
| 3770 | +void * graphics_get_font();
|
---|
| 3771 | +void graphics_set_palette(int idx, int red, int green, int blue);
|
---|
| 3772 | +void set_int1c_handler();
|
---|
| 3773 | +void unset_int1c_handler();
|
---|
| 3774 | +
|
---|
| 3775 | +extern short cursorX, cursorY;
|
---|
| 3776 | +extern char cursorBuf[16];
|
---|
| 3777 | +extern int shade;
|
---|
| 3778 | +extern int view_x0, view_y0, view_x1, view_y1;
|
---|
| 3779 | +
|
---|
| 3780 | +#endif /* GRAPHICS_H */
|
---|
| 3781 | diff -Naur grub-0.97.orig/stage2/Makefile.am grub-0.97/stage2/Makefile.am
|
---|
| 3782 | --- grub-0.97.orig/stage2/Makefile.am 2005-02-02 12:37:35.000000000 -0800
|
---|
| 3783 | +++ grub-0.97/stage2/Makefile.am 2006-07-03 23:58:41.000000000 -0700
|
---|
| 3784 | @@ -7,7 +7,7 @@
|
---|
| 3785 | fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \
|
---|
| 3786 | imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \
|
---|
| 3787 | nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \
|
---|
| 3788 | - terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h
|
---|
| 3789 | + terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h graphics.h
|
---|
| 3790 | EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS)
|
---|
| 3791 |
|
---|
| 3792 | # For <stage1.h>.
|
---|
| 3793 | @@ -19,7 +19,7 @@
|
---|
| 3794 | disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \
|
---|
| 3795 | fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \
|
---|
| 3796 | fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \
|
---|
| 3797 | - terminfo.c tparm.c
|
---|
| 3798 | + terminfo.c tparm.c graphics.c
|
---|
| 3799 | libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \
|
---|
| 3800 | -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \
|
---|
| 3801 | -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \
|
---|
| 3802 | @@ -79,8 +79,14 @@
|
---|
| 3803 | HERCULES_FLAGS =
|
---|
| 3804 | endif
|
---|
| 3805 |
|
---|
| 3806 | +if GRAPHICS_SUPPORT
|
---|
| 3807 | +GRAPHICS_FLAGS = -DSUPPORT_GRAPHICS=1
|
---|
| 3808 | +else
|
---|
| 3809 | +GRAPHICS_FLAGS =
|
---|
| 3810 | +endif
|
---|
| 3811 | +
|
---|
| 3812 | STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \
|
---|
| 3813 | - $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS)
|
---|
| 3814 | + $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) $(GRAPHICS_FLAGS)
|
---|
| 3815 |
|
---|
| 3816 | STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000
|
---|
| 3817 | STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1
|
---|
| 3818 | @@ -90,7 +96,8 @@
|
---|
| 3819 | cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \
|
---|
| 3820 | fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \
|
---|
| 3821 | fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \
|
---|
| 3822 | - hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c
|
---|
| 3823 | + hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c \
|
---|
| 3824 | + graphics.c
|
---|
| 3825 | pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
|
---|
| 3826 | pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
|
---|
| 3827 | pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK)
|
---|
| 3828 | diff -Naur grub-0.97.orig/stage2/shared.h grub-0.97/stage2/shared.h
|
---|
| 3829 | --- grub-0.97.orig/stage2/shared.h 2004-06-19 09:40:09.000000000 -0700
|
---|
| 3830 | +++ grub-0.97/stage2/shared.h 2006-07-04 00:01:50.000000000 -0700
|
---|
| 3831 | @@ -499,7 +499,11 @@
|
---|
| 3832 | unsigned char linear_reserved_field_position;
|
---|
| 3833 | unsigned long max_pixel_clock;
|
---|
| 3834 |
|
---|
| 3835 | - unsigned char reserved3[189];
|
---|
| 3836 | + /* Reserved field to make structure to be 256 bytes long, VESA BIOS
|
---|
| 3837 | + Extension 3.0 Specification says to reserve 189 bytes here but
|
---|
| 3838 | + that doesn't make structure to be 256 bytes. So additional one is
|
---|
| 3839 | + added here. */
|
---|
| 3840 | + unsigned char reserved3[189 + 1];
|
---|
| 3841 | } __attribute__ ((packed));
|
---|
| 3842 |
|
---|
| 3843 |
|
---|
| 3844 | @@ -792,6 +796,11 @@
|
---|
| 3845 | /* Set the cursor position. */
|
---|
| 3846 | void gotoxy (int x, int y);
|
---|
| 3847 |
|
---|
| 3848 | +/* Internal pager
|
---|
| 3849 | + Returns 1 = if pager was used
|
---|
| 3850 | + 0 = if pager wasn't used */
|
---|
| 3851 | +int do_more (void);
|
---|
| 3852 | +
|
---|
| 3853 | /* Displays an ASCII character. IBM displays will translate some
|
---|
| 3854 | characters to special graphical ones (see the DISP_* constants). */
|
---|
| 3855 | void grub_putchar (int c);
|
---|
| 3856 | @@ -871,6 +880,7 @@
|
---|
| 3857 | int grub_tolower (int c);
|
---|
| 3858 | int grub_isspace (int c);
|
---|
| 3859 | int grub_strncat (char *s1, const char *s2, int n);
|
---|
| 3860 | +void grub_memcpy(void *dest, const void *src, int len);
|
---|
| 3861 | void *grub_memmove (void *to, const void *from, int len);
|
---|
| 3862 | void *grub_memset (void *start, int c, int len);
|
---|
| 3863 | int grub_strncat (char *s1, const char *s2, int n);
|
---|
| 3864 | @@ -911,7 +921,7 @@
|
---|
| 3865 | int nul_terminate (char *str);
|
---|
| 3866 | int get_based_digit (int c, int base);
|
---|
| 3867 | int safe_parse_maxint (char **str_ptr, int *myint_ptr);
|
---|
| 3868 | -int memcheck (int start, int len);
|
---|
| 3869 | +int memcheck (unsigned long int start, unsigned long int len);
|
---|
| 3870 | void grub_putstr (const char *str);
|
---|
| 3871 |
|
---|
| 3872 | #ifndef NO_DECOMPRESSION
|
---|
| 3873 | diff -Naur grub-0.97.orig/stage2/stage2.c grub-0.97/stage2/stage2.c
|
---|
| 3874 | --- grub-0.97.orig/stage2/stage2.c 2005-03-19 09:51:57.000000000 -0800
|
---|
| 3875 | +++ grub-0.97/stage2/stage2.c 2006-07-04 00:01:50.000000000 -0700
|
---|
| 3876 | @@ -20,6 +20,12 @@
|
---|
| 3877 | #include <shared.h>
|
---|
| 3878 | #include <term.h>
|
---|
| 3879 |
|
---|
| 3880 | +#ifdef SUPPORT_GRAPHICS
|
---|
| 3881 | +# include <graphics.h>
|
---|
| 3882 | +#endif
|
---|
| 3883 | +
|
---|
| 3884 | +int col_start, col_end, row_start, box_size;
|
---|
| 3885 | +
|
---|
| 3886 | grub_jmp_buf restart_env;
|
---|
| 3887 |
|
---|
| 3888 | #if defined(PRESET_MENU_STRING) || defined(SUPPORT_DISKLESS)
|
---|
| 3889 | @@ -105,13 +111,13 @@
|
---|
| 3890 | if (highlight && current_term->setcolorstate)
|
---|
| 3891 | current_term->setcolorstate (COLOR_STATE_HIGHLIGHT);
|
---|
| 3892 |
|
---|
| 3893 | - gotoxy (2, y);
|
---|
| 3894 | + gotoxy (2 + col_start, y);
|
---|
| 3895 | grub_putchar (' ');
|
---|
| 3896 | - for (x = 3; x < 75; x++)
|
---|
| 3897 | + for (x = 3 + col_start; x < (col_end - 5); x++)
|
---|
| 3898 | {
|
---|
| 3899 | - if (*entry && x <= 72)
|
---|
| 3900 | + if (*entry && x <= (col_end - 8))
|
---|
| 3901 | {
|
---|
| 3902 | - if (x == 72)
|
---|
| 3903 | + if (x == (col_end - 8))
|
---|
| 3904 | grub_putchar (DISP_RIGHT);
|
---|
| 3905 | else
|
---|
| 3906 | grub_putchar (*entry++);
|
---|
| 3907 | @@ -119,7 +125,7 @@
|
---|
| 3908 | else
|
---|
| 3909 | grub_putchar (' ');
|
---|
| 3910 | }
|
---|
| 3911 | - gotoxy (74, y);
|
---|
| 3912 | + gotoxy ((col_end - 6), y);
|
---|
| 3913 |
|
---|
| 3914 | if (current_term->setcolorstate)
|
---|
| 3915 | current_term->setcolorstate (COLOR_STATE_STANDARD);
|
---|
| 3916 | @@ -131,7 +137,7 @@
|
---|
| 3917 | {
|
---|
| 3918 | int i;
|
---|
| 3919 |
|
---|
| 3920 | - gotoxy (77, y + 1);
|
---|
| 3921 | + gotoxy ((col_end - 3), y + 1);
|
---|
| 3922 |
|
---|
| 3923 | if (first)
|
---|
| 3924 | grub_putchar (DISP_UP);
|
---|
| 3925 | @@ -151,14 +157,14 @@
|
---|
| 3926 | menu_entries++;
|
---|
| 3927 | }
|
---|
| 3928 |
|
---|
| 3929 | - gotoxy (77, y + size);
|
---|
| 3930 | + gotoxy ((col_end - 3), y + size);
|
---|
| 3931 |
|
---|
| 3932 | if (*menu_entries)
|
---|
| 3933 | grub_putchar (DISP_DOWN);
|
---|
| 3934 | else
|
---|
| 3935 | grub_putchar (' ');
|
---|
| 3936 |
|
---|
| 3937 | - gotoxy (74, y + entryno + 1);
|
---|
| 3938 | + gotoxy ((col_end - 6), y + entryno + 1);
|
---|
| 3939 | }
|
---|
| 3940 |
|
---|
| 3941 | static void
|
---|
| 3942 | @@ -196,30 +202,30 @@
|
---|
| 3943 | if (current_term->setcolorstate)
|
---|
| 3944 | current_term->setcolorstate (COLOR_STATE_NORMAL);
|
---|
| 3945 |
|
---|
| 3946 | - gotoxy (1, y);
|
---|
| 3947 | + gotoxy (1 + col_start, y);
|
---|
| 3948 |
|
---|
| 3949 | grub_putchar (DISP_UL);
|
---|
| 3950 | - for (i = 0; i < 73; i++)
|
---|
| 3951 | + for (i = col_start; i < (col_end - 7); i++)
|
---|
| 3952 | grub_putchar (DISP_HORIZ);
|
---|
| 3953 | grub_putchar (DISP_UR);
|
---|
| 3954 |
|
---|
| 3955 | i = 1;
|
---|
| 3956 | while (1)
|
---|
| 3957 | {
|
---|
| 3958 | - gotoxy (1, y + i);
|
---|
| 3959 | + gotoxy (1 + col_start, y + i);
|
---|
| 3960 |
|
---|
| 3961 | if (i > size)
|
---|
| 3962 | break;
|
---|
| 3963 |
|
---|
| 3964 | grub_putchar (DISP_VERT);
|
---|
| 3965 | - gotoxy (75, y + i);
|
---|
| 3966 | + gotoxy ((col_end - 5), y + i);
|
---|
| 3967 | grub_putchar (DISP_VERT);
|
---|
| 3968 |
|
---|
| 3969 | i++;
|
---|
| 3970 | }
|
---|
| 3971 |
|
---|
| 3972 | grub_putchar (DISP_LL);
|
---|
| 3973 | - for (i = 0; i < 73; i++)
|
---|
| 3974 | + for (i = col_start; i < (col_end - 7); i++)
|
---|
| 3975 | grub_putchar (DISP_HORIZ);
|
---|
| 3976 | grub_putchar (DISP_LR);
|
---|
| 3977 |
|
---|
| 3978 | @@ -233,6 +239,7 @@
|
---|
| 3979 | {
|
---|
| 3980 | int c, time1, time2 = -1, first_entry = 0;
|
---|
| 3981 | char *cur_entry = 0;
|
---|
| 3982 | + struct term_entry *prev_term = NULL;
|
---|
| 3983 |
|
---|
| 3984 | /*
|
---|
| 3985 | * Main loop for menu UI.
|
---|
| 3986 | @@ -250,6 +257,22 @@
|
---|
| 3987 | }
|
---|
| 3988 | }
|
---|
| 3989 |
|
---|
| 3990 | + col_start = 0;
|
---|
| 3991 | + col_end = 80;
|
---|
| 3992 | + row_start = 0;
|
---|
| 3993 | + box_size = 12;
|
---|
| 3994 | + /* if we're using viewport we need to make sure to setup
|
---|
| 3995 | + coordinates correctly. */
|
---|
| 3996 | +#ifdef SUPPORT_GRAPHICS
|
---|
| 3997 | + if (grub_memcmp (current_term->name, "graphics", sizeof ("graphics") - 1) == 0)
|
---|
| 3998 | + {
|
---|
| 3999 | + col_start = view_x0;
|
---|
| 4000 | + col_end = view_x1;
|
---|
| 4001 | + row_start = view_y0;
|
---|
| 4002 | + box_size = (view_y1 - view_y0) - 13;
|
---|
| 4003 | + }
|
---|
| 4004 | +#endif
|
---|
| 4005 | +
|
---|
| 4006 | /* If the timeout was expired or wasn't set, force to show the menu
|
---|
| 4007 | interface. */
|
---|
| 4008 | if (grub_timeout < 0)
|
---|
| 4009 | @@ -302,36 +325,36 @@
|
---|
| 4010 | if (current_term->flags & TERM_DUMB)
|
---|
| 4011 | print_entries_raw (num_entries, first_entry, menu_entries);
|
---|
| 4012 | else
|
---|
| 4013 | - print_border (3, 12);
|
---|
| 4014 | + print_border (3 + row_start, box_size);
|
---|
| 4015 |
|
---|
| 4016 | grub_printf ("\n\
|
---|
| 4017 | - Use the %c and %c keys to select which entry is highlighted.\n",
|
---|
| 4018 | + Use the %c and %c keys to select which entry is highlighted.\n",
|
---|
| 4019 | DISP_UP, DISP_DOWN);
|
---|
| 4020 |
|
---|
| 4021 | if (! auth && password)
|
---|
| 4022 | {
|
---|
| 4023 | printf ("\
|
---|
| 4024 | - Press enter to boot the selected OS or \'p\' to enter a\n\
|
---|
| 4025 | - password to unlock the next set of features.");
|
---|
| 4026 | + Press enter to boot the selected OS or \'p\' to enter a\n\
|
---|
| 4027 | + password to unlock the next set of features.");
|
---|
| 4028 | }
|
---|
| 4029 | else
|
---|
| 4030 | {
|
---|
| 4031 | if (config_entries)
|
---|
| 4032 | printf ("\
|
---|
| 4033 | - Press enter to boot the selected OS, \'e\' to edit the\n\
|
---|
| 4034 | - commands before booting, or \'c\' for a command-line.");
|
---|
| 4035 | + Press enter to boot the selected OS, \'e\' to edit the\n\
|
---|
| 4036 | + commands before booting, or \'c\' for a command-line.");
|
---|
| 4037 | else
|
---|
| 4038 | printf ("\
|
---|
| 4039 | - Press \'b\' to boot, \'e\' to edit the selected command in the\n\
|
---|
| 4040 | - boot sequence, \'c\' for a command-line, \'o\' to open a new line\n\
|
---|
| 4041 | - after (\'O\' for before) the selected line, \'d\' to remove the\n\
|
---|
| 4042 | - selected line, or escape to go back to the main menu.");
|
---|
| 4043 | + Press \'b\' to boot, \'e\' to edit the selected command in the\n\
|
---|
| 4044 | + boot sequence, \'c\' for a command-line, \'o\' to open a new line\n\
|
---|
| 4045 | + after (\'O\' for before) the selected line, \'d\' to remove the\n\
|
---|
| 4046 | + selected line, or escape to go back to the main menu.");
|
---|
| 4047 | }
|
---|
| 4048 |
|
---|
| 4049 | if (current_term->flags & TERM_DUMB)
|
---|
| 4050 | grub_printf ("\n\nThe selected entry is %d ", entryno);
|
---|
| 4051 | else
|
---|
| 4052 | - print_entries (3, 12, first_entry, entryno, menu_entries);
|
---|
| 4053 | + print_entries (3 + row_start, box_size, first_entry, entryno, menu_entries);
|
---|
| 4054 | }
|
---|
| 4055 |
|
---|
| 4056 | /* XX using RT clock now, need to initialize value */
|
---|
| 4057 | @@ -358,10 +381,10 @@
|
---|
| 4058 | entryno, grub_timeout);
|
---|
| 4059 | else
|
---|
| 4060 | {
|
---|
| 4061 | - gotoxy (3, 22);
|
---|
| 4062 | - grub_printf ("The highlighted entry will be booted automatically in %d seconds. ",
|
---|
| 4063 | + gotoxy (3 + col_start, 10 + box_size + row_start);
|
---|
| 4064 | + grub_printf (" The highlighted entry will be booted automatically in %d seconds. ",
|
---|
| 4065 | grub_timeout);
|
---|
| 4066 | - gotoxy (74, 4 + entryno);
|
---|
| 4067 | + gotoxy ((col_end - 6), 4 + entryno + row_start);
|
---|
| 4068 | }
|
---|
| 4069 |
|
---|
| 4070 | grub_timeout--;
|
---|
| 4071 | @@ -387,12 +410,12 @@
|
---|
| 4072 | if (current_term->flags & TERM_DUMB)
|
---|
| 4073 | grub_putchar ('\r');
|
---|
| 4074 | else
|
---|
| 4075 | - gotoxy (3, 22);
|
---|
| 4076 | + gotoxy (3 + col_start, 10 + box_size + row_start);
|
---|
| 4077 | printf (" ");
|
---|
| 4078 | grub_timeout = -1;
|
---|
| 4079 | fallback_entryno = -1;
|
---|
| 4080 | if (! (current_term->flags & TERM_DUMB))
|
---|
| 4081 | - gotoxy (74, 4 + entryno);
|
---|
| 4082 | + gotoxy ((col_end - 6), 4 + entryno + row_start);
|
---|
| 4083 | }
|
---|
| 4084 |
|
---|
| 4085 | /* We told them above (at least in SUPPORT_SERIAL) to use
|
---|
| 4086 | @@ -408,12 +431,12 @@
|
---|
| 4087 | {
|
---|
| 4088 | if (entryno > 0)
|
---|
| 4089 | {
|
---|
| 4090 | - print_entry (4 + entryno, 0,
|
---|
| 4091 | + print_entry (4 + entryno + row_start, 0,
|
---|
| 4092 | get_entry (menu_entries,
|
---|
| 4093 | first_entry + entryno,
|
---|
| 4094 | 0));
|
---|
| 4095 | entryno--;
|
---|
| 4096 | - print_entry (4 + entryno, 1,
|
---|
| 4097 | + print_entry (4 + entryno + row_start, 1,
|
---|
| 4098 | get_entry (menu_entries,
|
---|
| 4099 | first_entry + entryno,
|
---|
| 4100 | 0));
|
---|
| 4101 | @@ -421,7 +444,7 @@
|
---|
| 4102 | else if (first_entry > 0)
|
---|
| 4103 | {
|
---|
| 4104 | first_entry--;
|
---|
| 4105 | - print_entries (3, 12, first_entry, entryno,
|
---|
| 4106 | + print_entries (3 + row_start, box_size, first_entry, entryno,
|
---|
| 4107 | menu_entries);
|
---|
| 4108 | }
|
---|
| 4109 | }
|
---|
| 4110 | @@ -433,29 +456,29 @@
|
---|
| 4111 | entryno++;
|
---|
| 4112 | else
|
---|
| 4113 | {
|
---|
| 4114 | - if (entryno < 11)
|
---|
| 4115 | + if (entryno < (box_size - 1))
|
---|
| 4116 | {
|
---|
| 4117 | - print_entry (4 + entryno, 0,
|
---|
| 4118 | + print_entry (4 + entryno + row_start, 0,
|
---|
| 4119 | get_entry (menu_entries,
|
---|
| 4120 | first_entry + entryno,
|
---|
| 4121 | 0));
|
---|
| 4122 | entryno++;
|
---|
| 4123 | - print_entry (4 + entryno, 1,
|
---|
| 4124 | + print_entry (4 + entryno + row_start, 1,
|
---|
| 4125 | get_entry (menu_entries,
|
---|
| 4126 | first_entry + entryno,
|
---|
| 4127 | 0));
|
---|
| 4128 | }
|
---|
| 4129 | - else if (num_entries > 12 + first_entry)
|
---|
| 4130 | + else if (num_entries > box_size + first_entry)
|
---|
| 4131 | {
|
---|
| 4132 | first_entry++;
|
---|
| 4133 | - print_entries (3, 12, first_entry, entryno, menu_entries);
|
---|
| 4134 | + print_entries (3 + row_start, box_size, first_entry, entryno, menu_entries);
|
---|
| 4135 | }
|
---|
| 4136 | }
|
---|
| 4137 | }
|
---|
| 4138 | else if (c == 7)
|
---|
| 4139 | {
|
---|
| 4140 | /* Page Up */
|
---|
| 4141 | - first_entry -= 12;
|
---|
| 4142 | + first_entry -= box_size;
|
---|
| 4143 | if (first_entry < 0)
|
---|
| 4144 | {
|
---|
| 4145 | entryno += first_entry;
|
---|
| 4146 | @@ -463,20 +486,20 @@
|
---|
| 4147 | if (entryno < 0)
|
---|
| 4148 | entryno = 0;
|
---|
| 4149 | }
|
---|
| 4150 | - print_entries (3, 12, first_entry, entryno, menu_entries);
|
---|
| 4151 | + print_entries (3 + row_start, box_size, first_entry, entryno, menu_entries);
|
---|
| 4152 | }
|
---|
| 4153 | else if (c == 3)
|
---|
| 4154 | {
|
---|
| 4155 | /* Page Down */
|
---|
| 4156 | - first_entry += 12;
|
---|
| 4157 | + first_entry += box_size;
|
---|
| 4158 | if (first_entry + entryno + 1 >= num_entries)
|
---|
| 4159 | {
|
---|
| 4160 | - first_entry = num_entries - 12;
|
---|
| 4161 | + first_entry = num_entries - box_size;
|
---|
| 4162 | if (first_entry < 0)
|
---|
| 4163 | first_entry = 0;
|
---|
| 4164 | entryno = num_entries - first_entry - 1;
|
---|
| 4165 | }
|
---|
| 4166 | - print_entries (3, 12, first_entry, entryno, menu_entries);
|
---|
| 4167 | + print_entries (3 + row_start, box_size, first_entry, entryno, menu_entries);
|
---|
| 4168 | }
|
---|
| 4169 |
|
---|
| 4170 | if (config_entries)
|
---|
| 4171 | @@ -489,7 +512,7 @@
|
---|
| 4172 | if ((c == 'd') || (c == 'o') || (c == 'O'))
|
---|
| 4173 | {
|
---|
| 4174 | if (! (current_term->flags & TERM_DUMB))
|
---|
| 4175 | - print_entry (4 + entryno, 0,
|
---|
| 4176 | + print_entry (4 + entryno + row_start, 0,
|
---|
| 4177 | get_entry (menu_entries,
|
---|
| 4178 | first_entry + entryno,
|
---|
| 4179 | 0));
|
---|
| 4180 | @@ -537,7 +560,7 @@
|
---|
| 4181 |
|
---|
| 4182 | if (entryno >= num_entries)
|
---|
| 4183 | entryno--;
|
---|
| 4184 | - if (first_entry && num_entries < 12 + first_entry)
|
---|
| 4185 | + if (first_entry && num_entries < box_size + first_entry)
|
---|
| 4186 | first_entry--;
|
---|
| 4187 | }
|
---|
| 4188 |
|
---|
| 4189 | @@ -549,7 +572,7 @@
|
---|
| 4190 | grub_printf ("\n");
|
---|
| 4191 | }
|
---|
| 4192 | else
|
---|
| 4193 | - print_entries (3, 12, first_entry, entryno, menu_entries);
|
---|
| 4194 | + print_entries (3 + row_start, box_size, first_entry, entryno, menu_entries);
|
---|
| 4195 | }
|
---|
| 4196 |
|
---|
| 4197 | cur_entry = menu_entries;
|
---|
| 4198 | @@ -570,7 +593,7 @@
|
---|
| 4199 | if (current_term->flags & TERM_DUMB)
|
---|
| 4200 | grub_printf ("\r ");
|
---|
| 4201 | else
|
---|
| 4202 | - gotoxy (1, 21);
|
---|
| 4203 | + gotoxy (1 + col_start, 9 + box_size + row_start);
|
---|
| 4204 |
|
---|
| 4205 | /* Wipe out the previously entered password */
|
---|
| 4206 | grub_memset (entered, 0, sizeof (entered));
|
---|
| 4207 | @@ -651,7 +674,10 @@
|
---|
| 4208 | *(new_heap++) = 0;
|
---|
| 4209 |
|
---|
| 4210 | if (config_entries)
|
---|
| 4211 | - run_menu (heap, NULL, new_num_entries, new_heap, 0);
|
---|
| 4212 | + {
|
---|
| 4213 | + current_entryno = first_entry + entryno;
|
---|
| 4214 | + run_menu (heap, NULL, new_num_entries, new_heap, 0);
|
---|
| 4215 | + }
|
---|
| 4216 | else
|
---|
| 4217 | {
|
---|
| 4218 | cls ();
|
---|
| 4219 | @@ -714,6 +740,15 @@
|
---|
| 4220 |
|
---|
| 4221 | cls ();
|
---|
| 4222 | setcursor (1);
|
---|
| 4223 | + /* if our terminal needed initialization, we should shut it down
|
---|
| 4224 | + * before booting the kernel, but we want to save what it was so
|
---|
| 4225 | + * we can come back if needed */
|
---|
| 4226 | + prev_term = current_term;
|
---|
| 4227 | + if (current_term->shutdown)
|
---|
| 4228 | + {
|
---|
| 4229 | + current_term->shutdown();
|
---|
| 4230 | + current_term = term_table; /* assumption: console is first */
|
---|
| 4231 | + }
|
---|
| 4232 |
|
---|
| 4233 | while (1)
|
---|
| 4234 | {
|
---|
| 4235 | @@ -727,7 +762,8 @@
|
---|
| 4236 | cur_entry = get_entry (config_entries, first_entry + entryno, 1);
|
---|
| 4237 |
|
---|
| 4238 | /* Set CURRENT_ENTRYNO for the command "savedefault". */
|
---|
| 4239 | - current_entryno = first_entry + entryno;
|
---|
| 4240 | + if (config_entries)
|
---|
| 4241 | + current_entryno = first_entry + entryno;
|
---|
| 4242 |
|
---|
| 4243 | if (run_script (cur_entry, heap))
|
---|
| 4244 | {
|
---|
| 4245 | @@ -748,6 +784,13 @@
|
---|
| 4246 | break;
|
---|
| 4247 | }
|
---|
| 4248 |
|
---|
| 4249 | + /* if we get back here, we should go back to what our term was before */
|
---|
| 4250 | + current_term = prev_term;
|
---|
| 4251 | + if (current_term->startup)
|
---|
| 4252 | + /* if our terminal fails to initialize, fall back to console since
|
---|
| 4253 | + * it should always work */
|
---|
| 4254 | + if (current_term->startup() == 0)
|
---|
| 4255 | + current_term = term_table; /* we know that console is first */
|
---|
| 4256 | show_menu = 1;
|
---|
| 4257 | goto restart;
|
---|
| 4258 | }
|
---|
| 4259 | @@ -891,8 +934,18 @@
|
---|
| 4260 | len = grub_read (buf, sizeof (buf));
|
---|
| 4261 | if (len > 0)
|
---|
| 4262 | {
|
---|
| 4263 | + char *tmp;
|
---|
| 4264 | + char *def;
|
---|
| 4265 | buf[sizeof (buf) - 1] = 0;
|
---|
| 4266 | - safe_parse_maxint (&p, &saved_entryno);
|
---|
| 4267 | +
|
---|
| 4268 | + if((tmp = grub_strstr(p, ":")) != NULL)
|
---|
| 4269 | + {
|
---|
| 4270 | + *tmp++;
|
---|
| 4271 | + grub_memcpy(&def, &tmp, sizeof(p));
|
---|
| 4272 | + }else
|
---|
| 4273 | + grub_memcpy(&def, &p, sizeof(p));
|
---|
| 4274 | +
|
---|
| 4275 | + safe_parse_maxint (&def, &saved_entryno);
|
---|
| 4276 | }
|
---|
| 4277 |
|
---|
| 4278 | grub_close ();
|
---|
| 4279 | @@ -1050,6 +1103,16 @@
|
---|
| 4280 | while (is_preset);
|
---|
| 4281 | }
|
---|
| 4282 |
|
---|
| 4283 | + /* go ahead and make sure the terminal is setup */
|
---|
| 4284 | + if (current_term->startup)
|
---|
| 4285 | + {
|
---|
| 4286 | + /* If initialization fails, go back to default terminal */
|
---|
| 4287 | + if (current_term->startup() == 0)
|
---|
| 4288 | + {
|
---|
| 4289 | + current_term = term_table;
|
---|
| 4290 | + }
|
---|
| 4291 | + }
|
---|
| 4292 | +
|
---|
| 4293 | if (! num_entries)
|
---|
| 4294 | {
|
---|
| 4295 | /* If no acceptable config file, goto command-line, starting
|
---|
| 4296 | diff -Naur grub-0.97.orig/stage2/term.h grub-0.97/stage2/term.h
|
---|
| 4297 | --- grub-0.97.orig/stage2/term.h 2003-07-09 04:45:53.000000000 -0700
|
---|
| 4298 | +++ grub-0.97/stage2/term.h 2006-07-03 23:58:41.000000000 -0700
|
---|
| 4299 | @@ -60,6 +60,8 @@
|
---|
| 4300 | const char *name;
|
---|
| 4301 | /* The feature flags defined above. */
|
---|
| 4302 | unsigned long flags;
|
---|
| 4303 | + /* Default for maximum number of lines if not specified */
|
---|
| 4304 | + unsigned short max_lines;
|
---|
| 4305 | /* Put a character. */
|
---|
| 4306 | void (*putchar) (int c);
|
---|
| 4307 | /* Check if any input character is available. */
|
---|
| 4308 | @@ -79,6 +81,10 @@
|
---|
| 4309 | void (*setcolor) (int normal_color, int highlight_color);
|
---|
| 4310 | /* Turn on/off the cursor. */
|
---|
| 4311 | int (*setcursor) (int on);
|
---|
| 4312 | + /* function to start a terminal */
|
---|
| 4313 | + int (*startup) (void);
|
---|
| 4314 | + /* function to use to shutdown a terminal */
|
---|
| 4315 | + void (*shutdown) (void);
|
---|
| 4316 | };
|
---|
| 4317 |
|
---|
| 4318 | /* This lists up available terminals. */
|
---|
| 4319 | @@ -124,4 +130,24 @@
|
---|
| 4320 | int hercules_setcursor (int on);
|
---|
| 4321 | #endif
|
---|
| 4322 |
|
---|
| 4323 | +#ifdef SUPPORT_GRAPHICS
|
---|
| 4324 | +extern int foreground, background, window_border, graphics_inited, saved_videomode;
|
---|
| 4325 | +
|
---|
| 4326 | +void graphics_set_splash(char *splashfile);
|
---|
| 4327 | +int set_videomode(int mode);
|
---|
| 4328 | +int get_videomode(void);
|
---|
| 4329 | +void graphics_putchar (int c);
|
---|
| 4330 | +int graphics_getxy(void);
|
---|
| 4331 | +void graphics_gotoxy(int x, int y);
|
---|
| 4332 | +void graphics_cls(void);
|
---|
| 4333 | +void graphics_setcolorstate (color_state state);
|
---|
| 4334 | +void graphics_setcolor (int normal_color, int highlight_color);
|
---|
| 4335 | +int graphics_setcursor (int on);
|
---|
| 4336 | +int graphics_init(void);
|
---|
| 4337 | +void graphics_end(void);
|
---|
| 4338 | +
|
---|
| 4339 | +int hex(int v);
|
---|
| 4340 | +void graphics_set_palette(int idx, int red, int green, int blue);
|
---|
| 4341 | +#endif /* SUPPORT_GRAPHICS */
|
---|
| 4342 | +
|
---|
| 4343 | #endif /* ! GRUB_TERM_HEADER */
|
---|
| 4344 | diff -Naur grub-0.97.orig/THANKS grub-0.97/THANKS
|
---|
| 4345 | --- grub-0.97.orig/THANKS 2005-05-07 19:17:43.000000000 -0700
|
---|
| 4346 | +++ grub-0.97/THANKS 2006-07-04 00:01:50.000000000 -0700
|
---|
| 4347 | @@ -121,3 +121,4 @@
|
---|
| 4348 | Yedidyah Bar-David <didi@post.tau.ac.il>
|
---|
| 4349 | Yury V. Umanets <umka@namesys.com>
|
---|
| 4350 | Yuri Zaporogets <yuriz@ukr.net>
|
---|
| 4351 | +Vitaly Fertman <vitaly@namesys.com>
|
---|
| 4352 | diff -Naur grub-0.97.orig/util/grub-install.in grub-0.97/util/grub-install.in
|
---|
| 4353 | --- grub-0.97.orig/util/grub-install.in 2004-07-24 11:57:31.000000000 -0700
|
---|
| 4354 | +++ grub-0.97/util/grub-install.in 2006-07-04 00:01:50.000000000 -0700
|
---|
| 4355 | @@ -81,6 +81,50 @@
|
---|
| 4356 | EOF
|
---|
| 4357 | }
|
---|
| 4358 |
|
---|
| 4359 | +# Usage: getraid_mdadm mddevice
|
---|
| 4360 | +# Routine to find a physical device from an md device
|
---|
| 4361 | +# If found, the first grub BIOS device (from device.map) is returned
|
---|
| 4362 | +# If no BIOS drives match the RAID devices, the first device returned
|
---|
| 4363 | +# from mdadm -D is returned
|
---|
| 4364 | +getraid_mdadm() {
|
---|
| 4365 | + device=$1
|
---|
| 4366 | + mdadm=$(mdadm -D "$device") || {
|
---|
| 4367 | + echo "$PROG: mdadm -D $device failed" >&2
|
---|
| 4368 | + exit 1
|
---|
| 4369 | + }
|
---|
| 4370 | + eval "$(
|
---|
| 4371 | + echo "$mdadm" | awk '
|
---|
| 4372 | + $1 == "Number" && $2 == "Major" { start = 1; next }
|
---|
| 4373 | + $1 == "UUID" { print "uuid=" $3; start = 0; next }
|
---|
| 4374 | + !start { next }
|
---|
| 4375 | + $2 == 0 && $3 == 0 { next }
|
---|
| 4376 | + { devices = devices "\n" $NF }
|
---|
| 4377 | + END { print "devices='\''" devices "'\''" }
|
---|
| 4378 | + '
|
---|
| 4379 | + )"
|
---|
| 4380 | +
|
---|
| 4381 | + # Convert RAID devices list into a list of disks
|
---|
| 4382 | + tmp_disks=`echo "$devices" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \
|
---|
| 4383 | + -e 's%\(d[0-9]*\)p[0-9]*$%\1%' \
|
---|
| 4384 | + -e 's%\(fd[0-9]*\)$%\1%' \
|
---|
| 4385 | + -e 's%/part[0-9]*$%/disc%' \
|
---|
| 4386 | + -e 's%\(c[0-7]d[0-9]*\).*$%\1%' \
|
---|
| 4387 | + -e '/^$/d' |
|
---|
| 4388 | + sed -n '1h;2,$H;${g;s/\n/|/g;p}'`
|
---|
| 4389 | +
|
---|
| 4390 | + # Find first BIOS disk that's a member of the RAID array
|
---|
| 4391 | + # Default to first RAID member if no tmp_disks are BIOS devices
|
---|
| 4392 | + set -- `egrep $tmp_disks $device_map | \
|
---|
| 4393 | + sort | \
|
---|
| 4394 | + sed -n 1p `
|
---|
| 4395 | + device=${2:-${tmp_disks%%|*}}
|
---|
| 4396 | +
|
---|
| 4397 | + # Return first partition on BIOS disk that's part of the RAID
|
---|
| 4398 | + echo "$devices" | \
|
---|
| 4399 | + sed -n "\:${device}:p" | \
|
---|
| 4400 | + sed -n 1p
|
---|
| 4401 | +}
|
---|
| 4402 | +
|
---|
| 4403 | # Usage: convert os_device
|
---|
| 4404 | # Convert an OS device to the corresponding GRUB drive.
|
---|
| 4405 | # This part is OS-specific.
|
---|
| 4406 | @@ -96,6 +140,10 @@
|
---|
| 4407 | # Break the device name into the disk part and the partition part.
|
---|
| 4408 | case "$host_os" in
|
---|
| 4409 | linux*)
|
---|
| 4410 | + # Find an actual physical device if we're passed a RAID device
|
---|
| 4411 | + case $1 in
|
---|
| 4412 | + /dev/md*) set -- `getraid_mdadm $1`
|
---|
| 4413 | + esac
|
---|
| 4414 | tmp_disk=`echo "$1" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' \
|
---|
| 4415 | -e 's%\(d[0-9]*\)p[0-9]*$%\1%' \
|
---|
| 4416 | -e 's%\(fd[0-9]*\)$%\1%' \
|
---|
| 4417 | @@ -112,8 +160,8 @@
|
---|
| 4418 | tmp_disk=`echo "$1" | sed 's%\([sh]d[0-9]*\).*%\1%'`
|
---|
| 4419 | tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;;
|
---|
| 4420 | freebsd* | kfreebsd*-gnu)
|
---|
| 4421 | - tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%r\1%' \
|
---|
| 4422 | - | sed 's%r\{0,1\}\(da[0-9]*\).*$%r\1%'`
|
---|
| 4423 | + tmp_disk=`echo "$1" | sed 's%r\{0,1\}\([saw]d[0-9]*\).*$%\1%' \
|
---|
| 4424 | + | sed 's%r\{0,1\}\(da[0-9]*\).*$%\1%'`
|
---|
| 4425 | tmp_part=`echo "$1" \
|
---|
| 4426 | | sed "s%.*/r\{0,1\}[saw]d[0-9]\(s[0-9]*[a-h]\)%\1%" \
|
---|
| 4427 | | sed "s%.*/r\{0,1\}da[0-9]\(s[0-9]*[a-h]\)%\1%"`
|
---|
| 4428 | @@ -131,7 +179,7 @@
|
---|
| 4429 |
|
---|
| 4430 | # Get the drive name.
|
---|
| 4431 | tmp_drive=`grep -v '^#' $device_map | grep "$tmp_disk *$" \
|
---|
| 4432 | - | sed 's%.*\(([hf]d[0-9][a-g0-9,]*)\).*%\1%'`
|
---|
| 4433 | + | sed 's%.*\(([hf]d[0-9][a-z0-9,]*)\).*%\1%'`
|
---|
| 4434 |
|
---|
| 4435 | # If not found, print an error message and exit.
|
---|
| 4436 | if test "x$tmp_drive" = x; then
|
---|
| 4437 | @@ -148,13 +196,13 @@
|
---|
| 4438 | gnu*)
|
---|
| 4439 | if echo $tmp_part | grep "^s" >/dev/null; then
|
---|
| 4440 | tmp_pc_slice=`echo $tmp_part \
|
---|
| 4441 | - | sed "s%s\([0-9]*\)[a-g]*$%\1%"`
|
---|
| 4442 | + | sed "s%s\([0-9]*\)[a-z]*$%\1%"`
|
---|
| 4443 | tmp_drive=`echo "$tmp_drive" \
|
---|
| 4444 | | sed "s%)%,\`expr "$tmp_pc_slice" - 1\`)%"`
|
---|
| 4445 | fi
|
---|
| 4446 | - if echo $tmp_part | grep "[a-g]$" >/dev/null; then
|
---|
| 4447 | + if echo $tmp_part | grep "[a-z]$" >/dev/null; then
|
---|
| 4448 | tmp_bsd_partition=`echo "$tmp_part" \
|
---|
| 4449 | - | sed "s%[^a-g]*\([a-g]\)$%\1%"`
|
---|
| 4450 | + | sed "s%[^a-z]*\([a-z]\)$%\1%"`
|
---|
| 4451 | tmp_drive=`echo "$tmp_drive" \
|
---|
| 4452 | | sed "s%)%,$tmp_bsd_partition)%"`
|
---|
| 4453 | fi
|
---|
| 4454 | @@ -336,6 +384,10 @@
|
---|
| 4455 | # Create a safe temporary file.
|
---|
| 4456 | test -n "$mklog" && log_file=`$mklog`
|
---|
| 4457 |
|
---|
| 4458 | + # Before all invocations of the grub shell, call sync to make sure
|
---|
| 4459 | + # the raw device is in sync with any bufferring in filesystems.
|
---|
| 4460 | + sync
|
---|
| 4461 | +
|
---|
| 4462 | $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
|
---|
| 4463 | quit
|
---|
| 4464 | EOF
|
---|
| 4465 | @@ -450,6 +502,24 @@
|
---|
| 4466 | # Create a safe temporary file.
|
---|
| 4467 | test -n "$mklog" && log_file=`$mklog`
|
---|
| 4468 |
|
---|
| 4469 | +# Sync to prevent GRUB from not finding stage files (notably, on XFS)
|
---|
| 4470 | +sync
|
---|
| 4471 | +
|
---|
| 4472 | +# XFS needs special magic
|
---|
| 4473 | +xfs_frozen=false
|
---|
| 4474 | +if which xfs_freeze > /dev/null ; then
|
---|
| 4475 | + cat << EOF
|
---|
| 4476 | +Due to a bug in xfs_freeze, the following command might produce a segmentation
|
---|
| 4477 | +fault when ${grubdir} is not in an XFS filesystem. This error is harmless and
|
---|
| 4478 | +can be ignored.
|
---|
| 4479 | +EOF
|
---|
| 4480 | + if xfs_freeze -f ${grubdir} ; then xfs_frozen=true ; fi
|
---|
| 4481 | +fi
|
---|
| 4482 | +
|
---|
| 4483 | +# Before all invocations of the grub shell, call sync to make sure
|
---|
| 4484 | +# the raw device is in sync with any bufferring in filesystems.
|
---|
| 4485 | +sync
|
---|
| 4486 | +
|
---|
| 4487 | # Now perform the installation.
|
---|
| 4488 | $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file
|
---|
| 4489 | root $root_drive
|
---|
| 4490 | @@ -457,6 +527,10 @@
|
---|
| 4491 | quit
|
---|
| 4492 | EOF
|
---|
| 4493 |
|
---|
| 4494 | +if ${xfs_frozen} ; then
|
---|
| 4495 | + xfs_freeze -u ${grubdir}
|
---|
| 4496 | +fi
|
---|
| 4497 | +
|
---|
| 4498 | if grep "Error [0-9]*: " $log_file >/dev/null || test $debug = yes; then
|
---|
| 4499 | cat $log_file 1>&2
|
---|
| 4500 | exit 1
|
---|