|  | #%ybinscript-1.1 | 
|  |  | 
|  | ## THIS IS NOT A CONFFILE DO NOT EDIT !!! | 
|  |  | 
|  | ############################################################################### | 
|  | ## | 
|  | ## ofboot first stage autoconfiguring bootloader for yaboot and ybin | 
|  | ## Copyright (C) 2000, 2001, 2002, 2003 Ethan Benson | 
|  | ## | 
|  | ## Forth code written by Chris Emerson | 
|  | ## | 
|  | ## Copyright (C) 2000, 2001 Chris Emerson | 
|  | ## | 
|  | ## Portions of Forth code also written by iNOUE Koich! | 
|  | ## | 
|  | ## Copyright (C) 2000, 2001 iNOUE Koich! | 
|  | ## | 
|  | ## This program is free software; you can redistribute it and/or | 
|  | ## modify it under the terms of the GNU General Public License | 
|  | ## as published by the Free Software Foundation; either version 2 | 
|  | ## of the License, or (at your option) any later version. | 
|  | ## | 
|  | ## This program is distributed in the hope that it will be useful, | 
|  | ## but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | ## GNU General Public License for more details. | 
|  | ## | 
|  | ## You should have received a copy of the GNU General Public License | 
|  | ## along with this program; if not, write to the Free Software | 
|  | ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. | 
|  | ## | 
|  | ############################################################################### | 
|  |  | 
|  | ## THIS IS NOT A CONFFILE DO NOT EDIT !!! | 
|  | ## | 
|  | ## This script is not meant to be called directly, only by ybin. | 
|  | ## | 
|  | ## Usage: OS-count defaultos timeout fgc bgc osname oslabel oskey osdev osfile ... | 
|  |  | 
|  | DEBUG=0 | 
|  | PRG=ofboot | 
|  |  | 
|  | ## make sure we are called at least somewhat sanely. | 
|  | if [ $# = 0 ] ; then | 
|  | echo 1>&2 "$PRG: Need arguments" | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | if [ $# != "$(($1 * 5 + 5))" ] ; then | 
|  | echo 1>&2 "$PRG: Invalid argument count: $# should be $(($1 * 5 + 5))" | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | if [ "$1" -gt 8 ] ; then | 
|  | echo 1>&2 "$PRG: Maximum number of OSes is currently 8" | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | ## we need printf so \n works, but echo -e -n will sometimes do. | 
|  | if [ "$(printf printf_test 2>/dev/null)" = printf_test ] ; then | 
|  | PRINTF=printf | 
|  | else | 
|  | PRINTF="echo -e -n" | 
|  | fi | 
|  |  | 
|  | ## make sure echo is not lame if we must use it. | 
|  | if [ "$PRINTF" != printf ] ; then | 
|  | if [ "$(echo -e -n echo_test)" != echo_test ] ; then | 
|  | echo 1>&2 "$PRG: printf unavailable and echo is broken, sorry." | 
|  | exit 1 | 
|  | fi | 
|  | fi | 
|  |  | 
|  | ## get first 5 args which are global and dispose of them. | 
|  | OSNUM="$1" | 
|  | DEFAULTOS="$2" | 
|  | TIMEOUT="$3" | 
|  | FGCOLOR="$4" | 
|  | BGCOLOR="$5" | 
|  | shift 5 | 
|  |  | 
|  | ## is a boot menu actually needed? | 
|  | if [ "$OSNUM" = 1 ] ; then | 
|  | MENU=0 | 
|  | else | 
|  | MENU=1 | 
|  | fi | 
|  |  | 
|  | ## create the variables. | 
|  | ## | 
|  | ## OSNAME="$1" | 
|  | ## OSLABEL="$2" | 
|  | ## OSKEY="$3" | 
|  | ## OSDEV="$4" | 
|  | ## OSFILE="$5" | 
|  |  | 
|  | COUNT=1 | 
|  | while [ "$COUNT" -le "$OSNUM" ] ; do | 
|  | case "$COUNT" in | 
|  | 1) | 
|  | OSNAME1="$1" | 
|  | [ "$DEBUG" = 1 ] && $PRINTF 1>&2 "$PRG: DEBUG: file1: $5\n" | 
|  | [ "$COUNT" = "$OSNUM" ] && c="." | 
|  | BTYA=": boot$1 \" Loading second stage bootstrap...\" .printf 100 ms load-base release-load-area \" ${4}${5}\" \$boot ;" | 
|  | MENUYA="\" Press $3 for GNU/Linux${c-,}\"(0d 0a)\" .printf" | 
|  | GETYA="      ascii $3 of \" $3 \"(0d 0a)\" .printf boot$1 endof" | 
|  | shift 5 | 
|  | COUNT="$(($COUNT + 1))" | 
|  | ;; | 
|  | 2) | 
|  | [ "$DEBUG" = 1 ] && $PRINTF 1>&2 "$PRG: DEBUG: file2: $5\n" | 
|  | [ "$COUNT" = "$OSNUM" ] && c="." | 
|  | [ "$4" = "quit" ] && BOOT=quit | 
|  | [ "$1" = "ybsd" ] && BOOT="load-base release-load-area \" ${4}${5%/*} ${5##*/},/bsd\" \$boot" | 
|  | [ "$1" != ybsd -a "$4" != quit  ] && BOOT="load-base release-load-area \" ${4}${5}\" \$boot" | 
|  | BT2=": boot$1 \" Booting $2...\" .printf 100 ms $BOOT ;" | 
|  | MENU2="\"       $3 for $2${c-,}\"(0d 0a)\" .printf" | 
|  | GET2="      ascii $3 of \" $3 \"(0d 0a)\" .printf boot$1 endof" | 
|  | shift 5 | 
|  | COUNT="$(($COUNT + 1))" | 
|  | ;; | 
|  | 3) | 
|  | [ "$DEBUG" = 1 ] && $PRINTF 1>&2 "$PRG: DEBUG: file3: $5\n" | 
|  | [ "$COUNT" = "$OSNUM" ] && c="." | 
|  | [ "$4" = "quit" ] && BOOT=quit | 
|  | [ "$1" = "ybsd" ] && BOOT="load-base release-load-area \" ${4}${5%/*} ${5##*/},/bsd\" \$boot" | 
|  | [ "$1" != ybsd -a "$4" != quit  ] && BOOT="load-base release-load-area \" ${4}${5}\" \$boot" | 
|  | BT3=": boot$1 \" Booting $2...\" .printf 100 ms $BOOT ;" | 
|  | MENU3="\"       $3 for $2${c-,}\"(0d 0a)\" .printf" | 
|  | GET3="      ascii $3 of \" $3 \"(0d 0a)\" .printf boot$1 endof" | 
|  | shift 5 | 
|  | COUNT="$(($COUNT + 1))" | 
|  | ;; | 
|  | 4) | 
|  | [ "$DEBUG" = 1 ] && $PRINTF 1>&2 "$PRG: DEBUG: file4: $5\n" | 
|  | [ "$COUNT" = "$OSNUM" ] && c="." | 
|  | [ "$4" = "quit" ] && BOOT=quit | 
|  | [ "$1" = "ybsd" ] && BOOT="load-base release-load-area \" ${4}${5%/*} ${5##*/},/bsd\" \$boot" | 
|  | [ "$1" != ybsd -a "$4" != quit  ] && BOOT="load-base release-load-area \" ${4}${5}\" \$boot" | 
|  | BT4=": boot$1 \" Booting $2...\" .printf 100 ms $BOOT ;" | 
|  | MENU4="\"       $3 for $2${c-,}\"(0d 0a)\" .printf" | 
|  | GET4="      ascii $3 of \" $3 \"(0d 0a)\" .printf boot$1 endof" | 
|  | shift 5 | 
|  | COUNT="$(($COUNT + 1))" | 
|  | ;; | 
|  | 5) | 
|  | [ "$DEBUG" = 1 ] && $PRINTF 1>&2 "$PRG: DEBUG: file5: $5\n" | 
|  | [ "$COUNT" = "$OSNUM" ] && c="." | 
|  | [ "$4" = "quit" ] && BOOT=quit | 
|  | [ "$1" = "ybsd" ] && BOOT="load-base release-load-area \" ${4}${5%/*} ${5##*/},/bsd\" \$boot" | 
|  | [ "$1" != ybsd -a "$4" != quit  ] && BOOT="load-base release-load-area \" ${4}${5}\" \$boot" | 
|  | BT5=": boot$1 \" Booting $2...\" .printf 100 ms $BOOT ;" | 
|  | MENU5="\"       $3 for $2${c-,}\"(0d 0a)\" .printf" | 
|  | GET5="      ascii $3 of \" $3 \"(0d 0a)\" .printf boot$1 endof" | 
|  | shift 5 | 
|  | COUNT="$(($COUNT + 1))" | 
|  | ;; | 
|  | 6) | 
|  | [ "$DEBUG" = 1 ] && $PRINTF 1>&2 "$PRG: DEBUG: file6: $5\n" | 
|  | [ "$COUNT" = "$OSNUM" ] && c="." | 
|  | [ "$4" = "quit" ] && BOOT=quit | 
|  | [ "$1" = "ybsd" ] && BOOT="load-base release-load-area \" ${4}${5%/*} ${5##*/},/bsd\" \$boot" | 
|  | [ "$1" != ybsd -a "$4" != quit  ] && BOOT="load-base release-load-area \" ${4}${5}\" \$boot" | 
|  | BT6=": boot$1 \" Booting $2...\" .printf 100 ms $BOOT ;" | 
|  | MENU6="\"       $3 for $2${c-,}\"(0d 0a)\" .printf" | 
|  | GET6="      ascii $3 of \" $3 \"(0d 0a)\" .printf boot$1 endof" | 
|  | shift 5 | 
|  | COUNT="$(($COUNT + 1))" | 
|  | ;; | 
|  | 7) | 
|  | [ "$DEBUG" = 1 ] && $PRINTF 1>&2 "$PRG: DEBUG: file7: $5\n" | 
|  | [ "$COUNT" = "$OSNUM" ] && c="." | 
|  | [ "$4" = "quit" ] && BOOT=quit | 
|  | [ "$1" = "ybsd" ] && BOOT="load-base release-load-area \" ${4}${5%/*} ${5##*/},/bsd\" \$boot" | 
|  | [ "$1" != ybsd -a "$4" != quit  ] && BOOT="load-base release-load-area \" ${4}${5}\" \$boot" | 
|  | BT7=": boot$1 \" Booting $2...\" .printf 100 ms $BOOT ;" | 
|  | MENU7="\"       $3 for $2${c-,}\"(0d 0a)\" .printf" | 
|  | GET7="      ascii $3 of \" $3 \"(0d 0a)\" .printf boot$1 endof" | 
|  | shift 5 | 
|  | COUNT="$(($COUNT + 1))" | 
|  | ;; | 
|  | 8) | 
|  | [ "$DEBUG" = 1 ] && $PRINTF 1>&2 "$PRG: DEBUG: file8: $5\n" | 
|  | [ "$COUNT" = "$OSNUM" ] && c="." | 
|  | [ "$4" = "quit" ] && BOOT=quit | 
|  | [ "$1" = "ybsd" ] && BOOT="load-base release-load-area \" ${4}${5%/*} ${5##*/},/bsd\" \$boot" | 
|  | [ "$1" != ybsd -a "$4" != quit  ] && BOOT="load-base release-load-area \" ${4}${5}\" \$boot" | 
|  | BT8=": boot$1 \" Booting $2...\" .printf 100 ms $BOOT ;" | 
|  | MENU8="\"       $3 for $2${c-,}\"(0d 0a)\" .printf" | 
|  | GET8="      ascii $3 of \" $3 \"(0d 0a)\" .printf boot$1 endof" | 
|  | shift 5 | 
|  | COUNT="$(($COUNT + 1))" | 
|  | ;; | 
|  | esac | 
|  | done | 
|  |  | 
|  | ## first OS is reserved. | 
|  | if [ "$OSNAME1" != yaboot ] ; then | 
|  | echo 1>&2 "ofboot: first OS must be yaboot" | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | ## concatenate the variables together. | 
|  | case "$OSNUM" in | 
|  | 1) | 
|  | BOOTVARS="${BTYA}" | 
|  | MENUOPTS="${MENUYA}" | 
|  | GETOS="${GETYA}" | 
|  | ;; | 
|  | 2) | 
|  | BOOTVARS="${BTYA}\n${BT2}" | 
|  | MENUOPTS="${MENUYA}\n${MENU2}" | 
|  | GETOS="${GETYA}\n${GET2}" | 
|  | ;; | 
|  | 3) | 
|  | BOOTVARS="${BTYA}\n${BT2}\n${BT3}" | 
|  | MENUOPTS="${MENUYA}\n${MENU2}\n${MENU3}" | 
|  | GETOS="${GETYA}\n${GET2}\n${GET3}" | 
|  | ;; | 
|  | 4) | 
|  | BOOTVARS="${BTYA}\n${BT2}\n${BT3}\n${BT4}" | 
|  | MENUOPTS="${MENUYA}\n${MENU2}\n${MENU3}\n${MENU4}" | 
|  | GETOS="${GETYA}\n${GET2}\n${GET3}\n${GET4}" | 
|  | ;; | 
|  | 5) | 
|  | BOOTVARS="${BTYA}\n${BT2}\n${BT3}\n${BT4}\n${BT5}" | 
|  | MENUOPTS="${MENUYA}\n${MENU2}\n${MENU3}\n${MENU4}\n${MENU5}" | 
|  | GETOS="${GETYA}\n${GET2}\n${GET3}\n${GET4}\n${GET5}" | 
|  | ;; | 
|  | 6) | 
|  | BOOTVARS="${BTYA}\n${BT2}\n${BT3}\n${BT4}\n${BT5}\n${BT6}" | 
|  | MENUOPTS="${MENUYA}\n${MENU2}\n${MENU3}\n${MENU4}\n${MENU5}\n${MENU6}" | 
|  | GETOS="${GETYA}\n${GET2}\n${GET3}\n${GET4}\n${GET5}\n${GET6}" | 
|  | ;; | 
|  | 7) | 
|  | BOOTVARS="${BTYA}\n${BT2}\n${BT3}\n${BT4}\n${BT5}\n${BT6}\n${BT7}" | 
|  | MENUOPTS="${MENUYA}\n${MENU2}\n${MENU3}\n${MENU4}\n${MENU5}\n${MENU6}\n${MENU7}" | 
|  | GETOS="${GETYA}\n${GET2}\n${GET3}\n${GET4}\n${GET5}\n${GET6}\n${GET7}" | 
|  | ;; | 
|  | 8) | 
|  | BOOTVARS="${BTYA}\n${BT2}\n${BT3}\n${BT4}\n${BT5}\n${BT6}\n${BT7}\n${BT8}" | 
|  | MENUOPTS="${MENUYA}\n${MENU2}\n${MENU3}\n${MENU4}\n${MENU5}\n${MENU6}\n${MENU7}\n${MENU8}" | 
|  | GETOS="${GETYA}\n${GET2}\n${GET3}\n${GET4}\n${GET5}\n${GET6}\n${GET7}\n${GET8}" | 
|  | ;; | 
|  | esac | 
|  |  | 
|  | if [ -n "$YBINOFICON" -a -f "$YBINOFICON" -a -r "$YBINOFICON" ] ; then | 
|  | OFBOOTICON="$(cat "$YBINOFICON")" | 
|  | else | 
|  | OFBOOTICON="<OS-BADGE-ICONS> | 
|  | 1010 | 
|  | 000000000000F8FEACF6000000000000 | 
|  | 0000000000F5FFFFFEFEF50000000000 | 
|  | 00000000002BFAFEFAFCF70000000000 | 
|  | 0000000000F65D5857812B0000000000 | 
|  | 0000000000F5350B2F88560000000000 | 
|  | 0000000000F6335708F8FE0000000000 | 
|  | 00000000005600F600F5FD8100000000 | 
|  | 00000000F9F8000000F5FAFFF8000000 | 
|  | 000000008100F5F50000F6FEFE000000 | 
|  | 000000F8F700F500F50000FCFFF70000 | 
|  | 00000088F70000F50000F5FCFF2B0000 | 
|  | 0000002F582A00F5000008ADE02C0000 | 
|  | 00090B0A35A62B0000002D3B350A0000 | 
|  | 000A0A0B0B3BF60000505E0B0A0B0A00 | 
|  | 002E350B0B2F87FAFCF45F0B2E090000 | 
|  | 00000007335FF82BF72B575907000000 | 
|  | 000000000000ACFFFF81000000000000 | 
|  | 000000000081FFFFFFFF810000000000 | 
|  | 0000000000FBFFFFFFFFAC0000000000 | 
|  | 000000000081DFDFDFFFFB0000000000 | 
|  | 000000000081DD5F83FFFD0000000000 | 
|  | 000000000081DDDF5EACFF0000000000 | 
|  | 0000000000FDF981F981FFFF00000000 | 
|  | 00000000FFACF9F9F981FFFFAC000000 | 
|  | 00000000FFF98181F9F981FFFF000000 | 
|  | 000000ACACF981F981F9F9FFFFAC0000 | 
|  | 000000FFACF9F981F9F981FFFFFB0000 | 
|  | 00000083DFFBF981F9F95EFFFFFC0000 | 
|  | 005F5F5FDDFFFBF9F9F983DDDD5F0000 | 
|  | 005F5F5F5FDD81F9F9E7DF5F5F5F5F00 | 
|  | 0083DD5F5F83FFFFFFFFDF5F835F0000 | 
|  | 000000FBDDDFACFBACFBDFDFFB000000 | 
|  | 000000000000FFFFFFFF000000000000 | 
|  | 0000000000FFFFFFFFFFFF0000000000 | 
|  | 0000000000FFFFFFFFFFFF0000000000 | 
|  | 0000000000FFFFFFFFFFFF0000000000 | 
|  | 0000000000FFFFFFFFFFFF0000000000 | 
|  | 0000000000FFFFFFFFFFFF0000000000 | 
|  | 0000000000FFFFFFFFFFFFFF00000000 | 
|  | 00000000FFFFFFFFFFFFFFFFFF000000 | 
|  | 00000000FFFFFFFFFFFFFFFFFF000000 | 
|  | 000000FFFFFFFFFFFFFFFFFFFFFF0000 | 
|  | 000000FFFFFFFFFFFFFFFFFFFFFF0000 | 
|  | 000000FFFFFFFFFFFFFFFFFFFFFF0000 | 
|  | 00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 | 
|  | 00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00 | 
|  | 00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 | 
|  | 000000FFFFFFFFFFFFFFFFFFFF000000 | 
|  | </OS-BADGE-ICONS>" | 
|  | fi | 
|  |  | 
|  | ## create tmp files safely. | 
|  | TMP="${TMPDIR:-/tmp}" | 
|  | TMPBOOT=`mktemp -q "$TMP/ofboot.XXXXXX"` | 
|  | if [ $? != 0 ] ; then | 
|  | echo 1>&2 "Cannot create temp file, aborting." | 
|  | exit 1 | 
|  | fi | 
|  |  | 
|  | ## create the real script | 
|  | $PRINTF \ | 
|  | "<CHRP-BOOT> | 
|  | <COMPATIBLE> | 
|  | MacRISC MacRISC3 MacRISC4 | 
|  | </COMPATIBLE> | 
|  | <DESCRIPTION> | 
|  | PowerPC GNU/Linux First Stage Bootstrap | 
|  | </DESCRIPTION> | 
|  | <BOOT-SCRIPT> | 
|  | : .printf fb8-write drop ; | 
|  | $BOOTVARS | 
|  | \" screen\" output | 
|  | variable interactive | 
|  | $MENU interactive ! | 
|  |  | 
|  | 0 interactive @ = if | 
|  | bootyaboot | 
|  | then | 
|  |  | 
|  | dev screen | 
|  | \" \"(0000000000aa00aa0000aaaaaa0000aa00aaaa5500aaaaaa)\" drop 0 7 set-colors | 
|  | \" \"(5555555555ff55ff5555ffffff5555ff55ffffff55ffffff)\" drop 8 15 set-colors | 
|  | device-end | 
|  | $FGCOLOR to foreground-color | 
|  | $BGCOLOR to background-color | 
|  | \" \"(0C)\" .printf | 
|  |  | 
|  | \" First Stage Debian GNU/Linux Bootstrap\"(0d 0a)\" .printf | 
|  | \"  \"(0d 0a)\" .printf | 
|  | $MENUOPTS | 
|  | \"  \"(0d 0a)\" .printf | 
|  | \" Stage 1 Boot: \" .printf | 
|  | get-msecs d# $TIMEOUT 3E8 * + | 
|  | begin | 
|  | key? if | 
|  | key case | 
|  | $GETOS | 
|  | endcase | 
|  | then | 
|  | dup get-msecs < | 
|  | until | 
|  | drop | 
|  | \"  \"(0d 0a)\" .printf $DEFAULTOS | 
|  | </BOOT-SCRIPT> | 
|  | $OFBOOTICON | 
|  | </CHRP-BOOT>\n" > "$TMPBOOT" | 
|  |  | 
|  | echo "$TMPBOOT" |