From aa203600d542b9528146c176e8cae1044b48a98f Mon Sep 17 00:00:00 2001 From: Mike Smith Date: Tue, 15 Dec 1998 14:21:30 +0000 Subject: [PATCH] Build the composite help file from the generic and architecture-specific help files, sorting topics and subtopics to allow maximum flexibility. --- sys/boot/common/help.common | 41 +++++++- sys/boot/common/merge_help.pl | 184 +++++++++++++++++++++++++++++++++ sys/boot/i386/loader/Makefile | 18 +++- sys/boot/i386/loader/help.i386 | 18 ++++ 4 files changed, 257 insertions(+), 4 deletions(-) create mode 100644 sys/boot/common/merge_help.pl diff --git a/sys/boot/common/help.common b/sys/boot/common/help.common index 0470dea4bfd..a57ab7d0f9c 100644 --- a/sys/boot/common/help.common +++ b/sys/boot/common/help.common @@ -105,7 +105,7 @@ The set command is used to set variables. ################################################################################ -# Tset Sauotboot_delay DSet the default autoboot delay +# Tset Sautoboot_delay DSet the default autoboot delay set autoboot_delay= @@ -120,6 +120,45 @@ It may be overridden by setting the bootfile variable to a semicolon-separated list of paths, which will be searched for in turn. +################################################################################ +# Tset Sboot_askname DPrompt for root device when kernel is booted + + set boot_askname + + Instructs the kernel to prompt the user for the name of the root device + when the kernel is booted. + +################################################################################ +# Tset Sboot_ddb DDrop to the kernel debugger (DDB) when the kernel is loaded + + set boot_ddb + + Instructs the kernel to start in the DDB debugger, rather than + proceeding to initialise when booted. + +################################################################################ +# Tset Sboot_gdb DSelect gdb-remote mode for kernel debugger + + set boot_gdb + + Selects gdb-remote mode for the kernel debugger by default. + +################################################################################ +# Tset Sboot_single DRequest the kernel start in single-user mode + + set boot_single + + Prevents the kernel from initiating a multi-user startup, single-user + mode will be entered when the kernel has finished device probes. + +################################################################################ +# Tset Sboot_verbose DDisplay verbose device probes and debugging information + + set boot_verbose + + Setting this variable causes extra debugging information to be printed + by the kernel during the boot phase. + ################################################################################ # Tset Sconsole DSet the current console diff --git a/sys/boot/common/merge_help.pl b/sys/boot/common/merge_help.pl new file mode 100644 index 00000000000..395485484c7 --- /dev/null +++ b/sys/boot/common/merge_help.pl @@ -0,0 +1,184 @@ +#!/usr/bin/perl +# +# Copyright (c) 1998 Nick Hibma +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# +# +# Reads all the files mentioned on the command line (or stdin) and combines +# them into one. +# +# The files must have the following format: +# +# ######################### (line is ignored) +# # Ttopic Dhello world (short description) +# This is the long description and can span +# multiple lines and empty +# +# ones. +# ########################### (this line is again ignored) +# # Ttopic Ssubtopic Dagain a short description +# a subtopic is a topic that will connected under the subtree of +# topic. + +use FileHandle; + +# Declaration of constants +# +$SOD = 'D'; # Start of description character +$SLABEL = '_sdescr'; # Short description label +$LLABEL = '_ldescr'; # Long description label + +# Global variables +# + +# Read the command line parameters +# +while ( $arg = shift @ARGV ) { + if ( $arg eq '-h' ) { + die "$0 [-h] [files ...]\nno filenames or '-' as a filename reads stdin\n"; + } else { + push @files, $arg; + } +} + +# No files to process? Read STDIN +# +push @files, '-' # no files found? Process STDIN + if $#files == -1; + +# Perform processing on each file +# +foreach $filename ( @files ) { + if ( $filename eq '-' ) { + $file = STDIN; + } else { + die "Could not open file $filename, $!" + unless $file = new FileHandle $filename; + } + + # Process one file and add it to the hash + # + &add_file($file); +} + +# Print the results of our processing +# +&print_topic($topics, '#'x80 . "\n# "); +print '#'x80 . "\n"; + +#require 'z39.50/PerlieZ/debug.pm'; +#debug::Dump($topics, '$topics'); + +# Make like a tree and leave. +# +exit 0; + +sub add_file { + my ($file) = @_; + + # process a file and add it to the hash + + $line = <$file>; + while ( !eof($file) ) { + if ( $line =~ s/^#\s+// ) { + + # the line contains a number of parts (separated by whitespace): + # (Cl+ )+ Dd+ + # C is a character not equal to D + # l+ is a word without spaces + # (Cl+ )+ is a list of words preceded by C and separated by spaces + # d+ is a description (can contain spaces) + # D is the character in $SOD + # + # we split it into multiple l+ parts and one d+ part + # after that we insert the d+ part at the right point in the tree + # (after reading also the long descrescription in the next lines) + + @ar = (); + while ( $line =~ s/^([^$SOD]\S+)\s+//o ) { + $label = $1; + $label .= ' ' # avoid conflicts with hash labels + if $label eq $SLABEL or $label eq $LLABEL; + push @ar, $label; + } + $sdescr = $line; # short descr. is rest of line + + my $ldescr = ''; # read the long description + $line = <$file>; + while ( !eof($file) and $line !~ m/^#/ ) { + $ldescr .= $line; + $line = <$file>; + } + + $topics = &add_to_hash($topics, $sdescr, $ldescr, @ar); + } else { + $line = <$file>; + } + } +} + +sub add_to_hash { + my ($hash, $sdescr, $ldescr, @ar) = @_; + + # bit more complicated than usual, because we want to insert + # value into an existing tree if possible, or otherwise build it. + # Probably could be done with references as well, but this seems neater. + + if ( $#ar == -1 ) { + # Create a new leaf (reference to descriptions hash) + + return {$SLABEL=>$sdescr, $LLABEL=>$ldescr}; + } else { + # Add subtree to node and if node does not exist, create an empty one + # (reference to a hash of subnodes) + + $hash = {} # create a new ref to hash on the fly + if !$hash; + my $label = shift @ar; # next label in tree to be used + $hash->{$label} = &add_to_hash($hash->{$label}, $sdescr, $ldescr, @ar); + return $hash; + } +} + +sub print_topic { + my ($topic, $preprint) = @_; + + # print out a topic and its subtopics recursively + # preprint is the string before the current subtopic hash + # and is the same for all the subtopics in the current hash + + if ( $topic->{$SLABEL} or $topic->{$LLABEL} ) { + # leaf found + print $preprint . "$topic->{$SLABEL}$topic->{$LLABEL}"; + } + + # iterate over all the subtopics + my ($label); + foreach $label ( sort keys %{ $topic } ) { + next + if $label eq $SLABEL or $label eq $LLABEL; + &print_topic($topic->{$label}, $preprint . $label . ' '); + } +} diff --git a/sys/boot/i386/loader/Makefile b/sys/boot/i386/loader/Makefile index 1edffdb698b..cb58e165171 100644 --- a/sys/boot/i386/loader/Makefile +++ b/sys/boot/i386/loader/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.18 1998/11/04 03:42:36 msmith Exp $ +# $Id: Makefile,v 1.19 1998/11/12 07:40:51 jkh Exp $ BASE= loader PROG= ${BASE} @@ -29,7 +29,7 @@ LIBFICL= ${.CURDIR}/../../ficl/libficl.a CFLAGS+= -I${.CURDIR}/../../common CFLAGS+= -I${.CURDIR}/../../.. -I. -CLEANFILES+= vers.c vers.o ${BASE}.list ${BASE}.bin ${BASE}.sym +CLEANFILES+= vers.c vers.o ${BASE}.list ${BASE}.bin ${BASE}.sym ${BASE}.help CFLAGS+= -Wall LDFLAGS= -nostdlib -static -Ttext 0x1000 @@ -68,7 +68,7 @@ vers.o: sh ${.CURDIR}/newvers.sh ${.CURDIR}/version ${NEWVERSWHAT} ${CC} -c vers.c -${BASE}: ${BASE}.bin ${BTXLDR} ${BTXKERN} ${BTXCRT} +${BASE}: ${BASE}.bin ${BTXLDR} ${BTXKERN} ${BTXCRT} ${BASE}.help btxld -v -f aout -e 0x100000 -o ${.TARGET} -l ${BTXLDR} -b ${BTXKERN} \ ${BASE}.bin @@ -76,6 +76,18 @@ ${BASE}.bin: ${BASE}.sym cp ${.ALLSRC} ${.TARGET} strip ${.TARGET} +${BASE}.help: help.common help.i386 + perl ${.CURDIR}/../../common/merge_help.pl ${.ALLSRC} > ${.TARGET} + +beforeinstall: +.if exists(${.OBJDIR}/loader.help) + ${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 ${.OBJDIR}/${BASE}.help \ + ${DESTDIR}/boot +.else + ${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 ${.CURDIR}/${BASE}.help \ + ${DESTDIR}/boot +.endif + # Cannot use ${OBJS} above this line .include diff --git a/sys/boot/i386/loader/help.i386 b/sys/boot/i386/loader/help.i386 index 2d2da433a57..96e42ab923e 100644 --- a/sys/boot/i386/loader/help.i386 +++ b/sys/boot/i386/loader/help.i386 @@ -14,3 +14,21 @@ only. ################################################################################ +# Tset Snum_ide_disks DSet the number of IDE disks when booting from a SCSI disk + + set num_ide_disks= + + When booting from a SCSI disk on a system with one or more IDE disks, + and where the IDE disks are the default boot device, it is necessary + to tell the kernel how many IDE disks there are in order to have it + correctly locate the SCSI disk you are booting from. + +################################################################################ +# Tset Sboot_userconfig DStart userconfig when the kernel is booted + + set boot_userconfig + + Indicates that the kernel's interactive device configuration program + should be run when the kernel is booted. + +################################################################################