本节详细介绍了我们在日内瓦大学 CUI 开发的用于此远程启动配置的工具的使用信息。
这三个名称代表同一程序的三个变体,具有以下特点
BpBatch
是一个特殊的程序,可以在操作系统加载之前从 BootProm 启动。它由两个部分组成:bpbatch.P
,动态加载器,和 bpbatch.ovl
,程序本身。BpBatch
通过我们自己实现的 FAT16、FAT32 和 Ext2fs 具有完整的磁盘 I/O 功能,以及通过 BootProm TFTP API 具有远程网络 I/O 功能。BpBatch
是在 DOS 下使用 Borland C 5.0 和 Turbo Assembler 3.2 编译的。MrBatch
是 BpBatch
的 DOS/Linux 版本。BpBatch
识别的所有命令 MrBatch
都识别,反之亦然。如果您想从 DOS/Linux 会话测试您的批处理脚本,这将非常有用。在 DOS 下,如果 bootprom 不可用,MrBatch
通过基于操作系统的文件访问来模拟远程 I/O。在 Linux 下,bootprom 不再可见,但 MrBatch
可以使用 Linux IP 支持来模拟它,或使用基于操作系统的文件访问。MrBatch
是在 Linux 下使用 GCC 2.7.2.1 和在 DOS 下使用 Borland C 5.0 和 Turbo Assembler 3.2 编译的。MrZip
是一个解释器,它识别 MrBatch
语言的超集,并用于构建磁盘映像。在 MrZip
中,有限的远程文件 I/O 被功能齐全的基于操作系统的文件访问所取代。MrZip
不包括 VESA 支持。MrZip
是在 Linux 下使用 GCC 2.7.2.1 和在 DOS 下使用 Borland C 5.0 和 Turbo Assembler 3.2 编译的。
所有程序都接受相同的参数语法。MrBatch
和 MrZip
从命令行获取参数,而 BpBatch
在 BOOTP 选项 155(十进制)中查找它们。以下是参数的语法
[-x] [-l] [-b] [-v] [-w] [-i] [script-basename]其中
-x
禁用扩展内存的使用-l
禁用使用 ISO-latin-8859-1 作为默认字符集-b
取消 bootprom 检测(这会在 DOS 下导致软盘寻道)-v
取消 VESA 检测(这会在 Windows 95 下导致切换到全屏)-w
启用直接磁盘写入访问(在 DOS 和 Linux 下默认禁用)-i
即使提供了脚本名称,也启用交互模式script-basename
是可选的。如果提供,MrBatch
和 BpBatch
加载扩展名为 .bpb
的文件,而 MrZip
加载扩展名为 .mrz
的文件。如果未提供,MrBatch
和 MrZip
在交互模式下运行,而 BpBatch
加载与 BOOTP 引导文件具有相同基本名称且扩展名为 .bpb
的文件。
当 BpBatch
解析输入行时,以下规则适用。
\a
被替换为 audible-bell 字符 (ASCII 7)\b
被替换为退格字符 (ASCII 8)\n
被替换为换行字符 (ASCII 10)\r
被替换为回车字符 (ASCII 13)\t
被替换为制表符 (ASCII 9)\v
被替换为垂直制表符 (ASCII ...)\nnn
其中 n 是介于 000 和 377 之间的 3 位八进制数,被替换为具有指定 ascii 代码的字符\X
其中 X 是上面未列出的任何其他字符,被 X 本身替换。特别是,\"
被替换为常规双引号(不是字符串分隔符)\$
被替换为常规美元符号(不是变量替换)\\
被替换为常规反斜杠(不是特殊字符)空行将被忽略。以井号 (#
) 开头的行被视为注释,不会被解释。以冒号 (:
) 开头的行被视为标签,不会被解释。
字符串由开头和结尾的双引号分隔
"Hello world"要在字符串中包含双引号,请使用反斜杠引用它们
"I said: \"Hello world\""字符串可以后跟几个运算符。
"Hello world"/o=u/ == "Hellu wurld" "198.76.54.32"/.= / == "198 76 54 32"
"Hello world"{0} == "Hello" "198 76 54 32"{1-3} == "76 54 32"
"Hello world"[4] == "o" "Hello world"[4-7] == "o wo"
数值表达式适用于 32 位整数(从 -2,147,483,646 到 2,147,483,647)。不理解十六进制八进制和二进制数。每当需要数值表达式时,都会识别以下内容
%
(取模),而 expr
是数值表达式。请注意,每个操作都必须用括号括起来((3 * 5)+2) == 17
@"Hello world" == 11
#"Hello world" == 2
一些命令需要持续时间作为参数。持续时间以秒为单位测量,精度高达十分之一秒
Delay 3 waits for 3 seconds Delay 0.3 waits for 3/10 seconds
每当需要颜色时,您可以使用颜色的数值或其符号名称(不区分大小写)。以下颜色被识别
Black 0 Blue 1 Green 2 Cyan 3 Red 4 Magenta 5 Brown 6 LightGray 7 DarkGray 8 LightBlue 9 LightGreen 10 LightCyan 11 LightRed 12 LightMagenta 13 Yellow 14 White 15
文件名是字符串。因此,它们必须始终用双引号括起来。文件名在区分大小写的文件系统上区分大小写,在不区分大小写的文件系统上不区分大小写。斜杠和反斜杠可以自由地相互替代使用。不要忘记双反斜杠,因为单反斜杠是转义字符。
有两种类型的文件引用
直接磁盘文件使用以下表示法引用
"{disk:partition}/absolute/filename"磁盘号可以省略,默认为零。例如,
"{:1}/usr/bin"
指向 /usr/bin
,假设第一个分区上存在这样的目录。直接文件 I/O 完全基于我们自己的文件访问例程(我们不使用操作系统)。有两个特殊分区。分区零对应于硬盘主引导记录 (MBR),并具有一个伪文件系统,可让您访问引导代码。分区负一 (-1) 对应于缓存文件系统(见下文)。
在 BpBatch/MrBatch 下,当 BootProm 可用时,外部文件对应于 TFTP 服务器上的远程文件
"help.bpb" is the file help.bpb in the /tftpboot directory "gifs/MyImage.gif" is a file in /tftpboot/gifs可以引用其他 TFTP 服务器
"198.76.54.32:help.bpb"如果其他服务器位于网关后面
"198.70.0.1/198.76.54.31:help.bpb"还可以为 TFTP 连接指定特定端口
"198.76.54.32@89:getpasswd/smith"一次只能打开一个远程文件。如果 BootProm 不可用,则使用操作系统文件 I/O 模拟远程文件,但相同的限制适用。
在 MrZip 下,外部文件对应于操作系统看到的文件。没有限制,外部文件可以在任何可以使用直接磁盘文件的地方使用。外部文件通常比直接磁盘文件更快,因为操作系统具有更多的缓冲区。如果操作系统支持,外部文件可以引用网络文件。
"C:\\autoexec.bat" "C:/config.sys" "/mnt/net/usr"
为了减少网络负载并加快启动过程,磁盘存档、Linux 内核以及可能的其他文件缓存在硬盘上。此磁盘缓存位于硬盘末尾,在分区表中分配的最后一个柱面和磁盘的最后一个物理柱面之间(在任何已分配分区之外)。如果您希望缓存文件系统工作,则最后一个分区和磁盘末尾之间必须有空间。如果您想恢复磁盘映像,则缓存文件系统必须工作。
磁盘缓存以易失性、CRC 验证的文件系统组织:每个目录条目和每个 32 KB 数据块都通过 32 位 CRC 验证。每当目录条目或数据块意外更改时,该文件将自动从缓存中删除,并在下次请求时再次下载。
您可以使用特殊分区 "{:-1}"
上的直接磁盘访问,从 BpBatch、MrBatch 和 MrZip 中自由访问缓存文件系统。要查看缓存的内容,只需键入
logdir "{:-1}"如果缓存损坏并且未自动清除(这永远不应该发生),您可以键入
clean -1(在交互模式下)或在 BpBatch 首次访问缓存时按住两个 Shift 键。
某些变量最初已设置和/或具有特殊含义。其中一些变量存在于所有程序中,另一些变量仅在 MrZip 下可用,另一些变量仅在收到 BOOTP/DHCP 答复时可用。
$Program
在 BpBatch 中设置为 "BpBatch",在 MrBatch 中设置为 "MrBatch",在 MrZip 中设置为 "MrZip"$Basename
设置为启动批处理解释器的脚本的基本名称$HelpFile
是调用 Help
时加载的文件名。默认值:"${Basename}.hlp"
$BOOTP-...
是从 BOOTP/DHCP 答复设置的变量(有关更多详细信息,请参见有关 BOOTP/DHCP 变量的段落)$DHCP-...
是从 DHCP 答复设置的变量(有关更多详细信息,请参见有关 BOOTP/DHCP 变量的段落)$Disks
设置为每个磁盘大小的空格分隔列表。这意味着,#"$Disks"
表示磁盘的数量,而 "$Disks"{0}
是第一个磁盘的大小$Keypressed
设置为键盘缓冲区中下一个准备读取的键(如果可用)$LBA
控制 LBA 的使用以访问 > 2Gb 的磁盘。默认值:“ON”$FDA
控制快速磁盘访问(跨柱面写入)的使用。默认值:“ON”$VESA
控制 VESA 图形的使用。默认值:如果可用,则为 “ON”$VESA-Modes
提供所有可用 VESA 模式的列表。列表的第一个条目是默认模式,当没有为 InitGraph 提供参数时使用。注意:如果 VESA="OFF",则此变量为空白$APM
如果您的计算机支持高级电源管理,则设置为 “ON”。如果 $APM 为 “ON”,您可以使用 PowerOff 命令关闭计算机。默认值:取决于您的硬件$Trace
控制执行前每个命令的显示。它还控制创建新存档时文件名的显示。默认值:“OFF”$AutoShowLog
控制在按下 ESC 键时自动切换到文本日志。默认值:“ON”$PauseLog
控制日志可见时每页日志之间的暂停。默认值:“ON”$CacheDisk
设置为用于缓存远程文件的磁盘。默认值:空 == 0,第一个硬盘$CacheAlways
控制复制、修补或绘制为 GIF 的远程文件的自动缓存。默认值:“OFF”$CacheNever
阻止缓存任何文件。为无盘 Linux 启动打开此变量。默认值:“OFF”$CacheReserve
控制在缓存分区中预先分配比必要空间多 25% 的空间,以使文件增长。如果您磁盘空间不足,请关闭此变量。默认值:“ON”$ExtMemory
控制扩展内存(或 XMS)的使用。一旦停用,扩展内存就无法重新激活。默认值:如果可用,则为 “ON”$IsoLatin
控制包含和修补文件中高位 ASCII 代码的解释。IsoLatin 设置在文件加载时处理,而不是在文件处理时处理。默认值:“ON”$ProgressX
和 $ProgressY
控制在 VESA 图形中显示存档下载和解压缩期间的进度窗口的位置。默认值:200 200$EXT2-Backup
控制 Linux ext2 文件系统中超级块备份的更新。超级块备份需要几秒钟才能完成,并且当前内核永远不会使用(仅由 e2fsck 使用)。$Security-Gateway
控制用于用户身份验证的网关服务器。我们的特殊身份验证网关必须在目标计算机上运行。默认值:"${BOOTP-Server-IP}@89"
(即 TFTP 服务器,端口 89)$Security-Check
包含安全服务器对上次执行的检查的响应,PASSED 或 FAILED。默认值:“FAILED”$Security-Passwd, $HelpTopic, $OnExit, $OnKey-...
在内部使用。另请参见 BOOTP 变量和 MrZip 特定变量。
以下变量仅在 MrZip 中使用。
$TempPath
控制将临时文件存储在哪个目录中。默认值:<empty> == 当前目录$DumpFormat
控制请求时存档转储到日志的方式。它是一个包含以下内容的字符串$FragmentSize
控制存档片段的大小。如果您不使用 InCom 的扩展 TFTP 服务器,则应将其设置为 “30 MB”。默认值:“87 MB”$SourceArchive, $DestArchive, $Filter...
在内部使用。
只要收到 BOOTP/DHCP 答复(TCP/IP Bootprom 必须报告为已检测到),就会识别以下 BOOTP-... 和 DHCP-... 变量
$BOOTP-Client-ID $BOOTP-Your-IP $BOOTP-Server-IP $BOOTP-Gateway-IP $BOOTP-Bootfile $BOOTP-Server-Name $BOOTP-Subnet-Mask $BOOTP-Time-Offset $BOOTP-Routers $BOOTP-Time-Servers $BOOTP-Name-Servers $BOOTP-Domain-name-Servers $BOOTP-BOOTP-Log-Servers $BOOTP-Cookie-Servers $BOOTP-Lpr-Servers $BOOTP-Impress-Servers $BOOTP-Resource-Location-Servers $BOOTP-Host-Name $BOOTP-Boot-Size $BOOTP-Merit-Dump $BOOTP-Domain-Name $BOOTP-Swap-Servers $BOOTP-Root-Path $BOOTP-Extensions-Path $BOOTP-IP-Forwarding $BOOTP-Interface-MTU $BOOTP-All-Subnets-Are-Local $BOOTP-Broadcast-Address $BOOTP-NIS-Domain $BOOTP-NIS-Servers $BOOTP-NTP-Servers $BOOTP-Font-Servers $BOOTP-X-Display-Manager $DHCP-IP-Address-Lease-Time $DHCP-Message-Type $DHCP-Server-Identifier $DHCP-Message $DHCP-Renewal-Time $DHCP-Rebinding-Time $BOOTP-NIS+-Domain $BOOTP-NIS+-Servers $BOOTP-Server-Name $BOOTP-Bootfile $BOOTP-Mobile-IP-Agent $BOOTP-SMTP-Servers $BOOTP-POP3-Servers $BOOTP-NNTP-Servers $BOOTP-WWW-Servers $BOOTP-Finger-Servers $BOOTP-IRC-Servers $BOOTP-StreetTalk-Servers $BOOTP-STDA-Servers
其他 BOOTP/DHCP 参数可以在名称下使用
$BOOTP-Option-n其中 n 是 BOOTP 选项号的十进制表示形式。
不要混淆 BOOTP-Gateway-IP
,它是用于 TFTP 的网关,如果 TFTP 服务器在同一子网中,则应为 0.0.0.0,以及 BOOTP-Routers
,它包含默认 IP 网关。TCP/IP Bootprom 有时似乎从 BOOTP-Routers
中的值设置 BOOTP-Gateway-IP
的值,导致每个 TFTP ack 数据包首先发送到路由器。为了避免这种行为,如果您的 TFTP 服务器与客户端在同一子网中,请强制将 BOOTP-Gateway-IP
设置为 0.0.0.0
(感谢 Maciek Uhlig 指出此问题)。
本节列出了用于监控系统状态的命令。可选参数列在括号之间(我本来更喜欢方括号,但 LaTeX 在此处不喜欢它们...)
显示日志并切换到交互模式,直到输入 QUIT 或 EXIT。如果您想避免在批处理执行期间干扰日志消息,请在退出之前键入 HideLog。
加载在线帮助文件 (bpbatch.hlp
) 并显示给定主题的描述。如果没有提供主题,或者主题未知,则显示帮助索引。
在日志上显示字符串。不会隐式添加返回/换行符。
在日志上显示字符串并转到下一行。等效于
Log "text\r\n".
记录(即在日志上显示)与给定模式匹配的所有变量。模式可以包含通配符(?和 *)。
Example: LogVars "BOOTP-*" list all BootP variables
记录(即在日志上显示)给定路径中与模式匹配的所有文件。模式可以包含通配符(?和 *)。
Example: LogDir "/usr/g*p" list files names like g...p
记录以给定路径为根的目录树。
记录文件的内容。该文件的大小不得超过 64 KB。
如果日志已隐藏,则使其可见。当按下 ESC 键且 "$AutoShowLog" == "ON" 并且进入交互模式时自动执行。
阻止日志消息出现在屏幕上。当 BpBatch、MrBatch 和 MrZip 在脚本文件上启动时的默认状态。
将所有日志输出记录到 64 KB 缓冲区,直到发出 EndCapture。如果日志输出超过 64 KB,则环绕缓冲区。此命令可用于创建具有任意内容的文本文件。EndCapture 必须在同一批处理文件中发生。
结束日志的捕获。如果给定文件名,则将捕获的文本存储到文件中。否则,丢弃它。
发出声音。此命令等效于 Echo "\007"。
本节列出了控制批处理执行的命令。可选参数列在括号之间。
加载给定文件并启动其上的解析器。当包含文件处理完成时,返回到当前点。包含文件中 ASCII 127 以上字符的解释取决于包含文件时 $IsoLatin 的值。
设置一个退出处理程序,该处理程序将在当前批处理文件结束时自动评估。
将执行光标移动到给定的标签(即以 :label 开头的行)
对“command”执行所有替换,并在其上运行解析器。
If (not) <expr1> (==|!=|<|>|>=|<=|=>|=<|<>) <expr2> <command> If (not) (ci) "str1" (==|!=|<|>|>=|<=|=>|=<|<>) "str2" <command> If (not) (ci) "str1" Match-Expr "pattern" <command> If (not) (ci) "str1" Match-Passwd "unix-passwd" <command> If (not) (ci) "str1" in "wordlist" <command> If (not) (ci) "str1" in-file "filename" <command> If (not) exist "filename" <command> If (not) valid <disk>:<partition> <command>
如果测试成功,这些命令将执行 command;。第一种形式比较两个数值表达式。第二种形式比较两个字符串,可选地不区分大小写。第三种形式测试 “str1” 是否与给定的模式匹配(允许使用通配符)。第四种形式测试明文密码 “str1” 是否与 Unix 加密密码匹配。第五种形式测试 “str1” 是否包含在单词列表中。第六种形式测试 “str1” 是否包含在单词文件中。第七种形式测试给定文件是否存在。第八种形式测试给定的分区是否有效(即已格式化)。此形式仅受 1999 年 2 月之后的 BpBatch 版本支持。
Set variable = "string-value" Set variable = <expr>
为给定变量设置一个值。如果给定的值是数值表达式,它将隐式转换为字符串。变量可以在任何地方使用,方法是将其称为 $variable 或 ${variable}。如果结果引用要解释为字符串,则应将其括在双引号之间:“$variable” 或 “${variable}”。
等待直到指定的持续时间(以秒为单位表示)到期。另请参见有关持续时间格式的段落。
获取 CMOS 时间并将其以 HH:MM:SS 格式存储到 variable 中。获取 CMOS 日期并将其以 YY/MM/DD 格式存储到 variable 中。这可用于根据一天中的时间或日期自定义引导脚本的行为。
将计算机 CMOS 时间或日期设置为给定值。如果您有一个安全网关(我们的特殊 TFTP 服务器)正在运行,您可以通过评估以下命令在每次启动时自动调整客户端计算机的 CMOS 时间和日期
include "$Security-Gateway:gettime"如果您想了解此命令的作用,只需键入
logfile "$Security-Gateway:gettime"
关闭计算机。此命令仅在计算机与高级电源管理 (APM) 兼容时才有效。
本节列出了让您监控键盘输入的命令。可选参数列在括号之间。另请参见国家语言支持下。
无限期等待直到按下某个键,并将其存储在 variable 中。
等待直到在不超过 duration 秒的时间内按下某个键。如果在给定时间后未按下任何键,则评估 command。否则,将键留在键盘缓冲区中。另请参见有关持续时间格式的段落。
从键盘读取回车符终止的字符串,并将结果字符串存储在 variable 中(不带终止回车符)。如果给定了 max-length,则不允许用户输入超过此字符数。
另请参见安全相关命令下的 GetPasswd
。
设置一个按键处理程序,当按下键 “c” 时,它将自动评估给定的 command(除非通过 GetChar 或 Input 命令显式等待)。如果字符串 "default"
代替单个字符使用,则在按下任何其他键时执行该命令。
本节列出了用于执行常规文本输出的命令。所有这些命令也可以在图形模式下使用,具有相同的行为(除了文本模式提供 80x25 个字符,而图形模式提供 100x37 个字符,因为图形模式字符的大小为 8x16)。可选参数列在括号之间。另请参见国家语言支持下。
在当前光标位置使用当前文本属性打印指定的字符串/表达式,然后移动光标。在字符串末尾添加 "\r\n" 以转到下一行。
设置文本属性。也可以放置一个表示两种颜色的单个数值,定义为 16*bg-color+fg-color。
如果您需要更多花哨的东西,可以使用 LoadFont
。请参见国家语言支持下。
将光标位置移动到指定位置,并在提供时评估命令。
Example: At 10,20 Print "Gnats and rats !"
用给定的 pattern-char(字符串或十进制 ascii 代码)填充给定的文本区域。该区域默认为全屏,模式字符默认为全块(ASCII 十进制 219),颜色默认为黑色(清除屏幕)。将光标移动到清除区域的左上角。
.ATT (<attribute>) .CLS (<attribute>) .DEF <key> (<timeout_val>) .KEY <key> <filename> .POS ((<x>) <y>) .PWD <key> <cpasswd> .WLN (<text>) .WRT <text>
有关更多信息,请参见 InCom 手册。我们不久前编写了一个 程序 程序,用于使用此语法编辑菜单文件,但最好使用新的显式语法制作菜单。请注意,.PWD 命令未实现,因为我们现在不知道 InCom GmbH 使用的密码加密算法。
本节列出了用于执行图形模式输出的命令。对于本节中列出的函数,坐标以像素为单位给出。您也可以在图形模式下使用所有文本输出命令(见上文)。可选参数列在括号之间。
请注意,只要使用图形命令,就会自动打开图形模式,除非变量 VESA
设置为 "OFF"
。
打开 VESA 图形。原点在屏幕的左上角 (0 0)。VESA 图形可能会使某些 Windows 95 下的计算机挂起。运行 MrBatch 时使用 -v 选项以避免此类问题。
如果您使用参数 “mode”,则可以请求特定的视频模式。此参数是可选的:如果您未指定任何值,则视频模式将从 VESA-Modes 变量的第一个字段中获取。
有效模式为
VESA-Modes 变量列出了您的硬件支持的视频模式。
示例:InitGraph "640x480"
关闭 VESA 图形模式并返回到文本模式。
VESA 图形。绘制给定大小和颜色的填充条。
VESA 图形。绘制给定大小和颜色的窗口。背景颜色默认为 LightGray,标题栏颜色默认为 Blue。如果您包含标题字符串和颜色,则此文本将显示在标题栏中。
VESA 图形。在给定位置绘制文本字符串,背景透明。颜色默认为文本前景色。
VESA 图形。加载给定的 GIF-87a 文件并将其绘制在屏幕上。该文件可以是隔行扫描的,但必须是 GIF-87a(而不是 GIF-89a)。图像大小应适合所选视频模式。当您选择 640x480 模式时,您无法加载 1024x768 GIF 文件。GIF 位置默认为屏幕的左上角 (0 0)。
color-strategy 定义了当需要超过 256 种颜色时(例如,当同时显示两个 256 色 GIF 文件时)调色板中颜色的分配
Best-Colors
为最新的 GIF 使用最佳可能的颜色Spare-Colors
尝试避免分配颜色,更改现有颜色Share-Colors
尝试避免分配颜色,使用现有颜色Reuse-Colors
不分配新颜色,仅使用现有颜色Best-Colors
。
本节列出了帮助您验证用户身份的命令。可选参数列在括号之间。
其中一些功能与安全网关配合使用,您应该首先安装该网关。有关更多信息,请参见有关特殊 TFTP 服务器的部分。
与 Input 相同,但回显星号而不是键入的字符。
将 Unix crypt 函数应用于给定的 8 个字符的文本,并将生成的加密字符串存储到 variable 中。“salt” 通常是一个双字符字符串,它将作为加密字符串的前两个字符找到。
请注意,Unix crypt 是单向函数。无法解码加密字符串。只能尝试使用相同的 salt 加密另一个字符串并比较生成的加密字符串。
使用给定的 8 个字符的密钥加密给定的文本,并将结果作为十六进制字符串存储在 variable 中。
使用给定的 8 个字符的密钥解密给定的十六进制字符串,并将结果存储在 variable 中。
计算给定文本的 MD5 校验和,并将其作为十六进制字符串存储在 variable 中。可以用作 Unix crypt 函数的替代方法,以检查大于 8 个字符的密码。
连接到 $Security-Gateway 并检查给定用户是否存在于给定的 radius 域中,并使用指定的密码。如果域为 "Unix"
,请使用安全网关上的 Unix 用户/密码定义。对于任何其他域,请使用安全网关域定义文件来确定要检查的实际 Radius 或 NT 域。
将 $Security-Check 的值设置为 “PASSED” 或 “FAILED”。密码不会以明文形式在网络上传输。
本节列出了用于准备硬盘的命令。可选参数列在括号之间。
读取给定磁盘的分区表,并将其作为字符串存储到给定的 variable 中。结果字符串是以空格分隔的 Type:Size 列表,其中
将分区表设置为字符串的内容。使用的格式与 GetPartitions 相同。此命令还会重置所有引导标志(提示:使用 SetBootPart)。
主引导记录 (MBR) 中的主分区表只有四个条目。此外,DOS 和 Windows 只接受主分区表中的一个 FAT 分区(称为主分区 C:)。任何补充的 FAT 分区都应嵌套在扩展分区中(因此称为逻辑分区)。如果我们将 MBR 分区表中描述的分区编号为 1-4,并将第一个扩展分区中描述的分区编号为 5-8,则定义两个 FAT 分区的方案将通过将分区 1 定义为 FAT,分区 2 定义为 EXT,分区 5 定义为 FAT 来实现。分区 3、4、6、7 和 8 应标记为未使用。相同的方案可以递归地用于定义两个以上的 FAT 分区:在分区 6 中嵌套另一个扩展分区,并在分区 9 中添加一个逻辑 FAT 分区。
在对 DOS 规范最严格的解释中,这意味着分区表的条目 3 和 4 永远不会被使用。实际上,某些版本的 DOS 和其他一些操作系统能够在一个分区表中使用两个以上的分区,但没有明确的规则。在这方面,BpBatch 在其对分区表的解释方面相当灵活,它通常可以理解操作系统无法理解的内容。
一个普遍的规则是,每个分区表永远不应超过一个扩展分区,否则分区编号方案会崩溃。
如果您想尝试有趣的配置,请进行自己的实验,但如果操作系统无法识别您的分区,请不要抱怨。保证其工作的唯一方法是使用主分区来存储操作系统启动分区,并将所有其他分区一次一个地嵌套在扩展分区中。
扩展分区示例
SetPartitions "BIGDOS:100 EXT:400 EMPTY EMPTY BIGDOS:400"
获取引导标志已开启的分区号(DOS 称之为:激活的主分区),并将其存储到变量中。第一个分区编号为 1。如果没有分区开启引导标志,则返回零。
将引导标志设置为给定的分区。引导标志让主引导记录 (MBR) 选择要从哪个分区启动。第一个分区编号为 1。
用零填充给定的分区。对于大型分区,可能需要相当长的时间。不要为任何操作系统格式化分区。另请参阅 Clean
。
根据分区表中声明的类型快速格式化给定的分区。如果给出了卷标并且文件系统支持它,则设置分区卷标。对于偏执狂式的完整格式化,请先在分区上调用 Blank
。
Clean 支持 (FAT16) BIGDOS、FAT32、EXT、LINUX-EXT2 和 LINUX-SWAP 分区。要清理主引导记录 (MBR),请使用 Clean 0
。
Clean 应该用于数据分区和 MBR/EXT 分区。在使用 FullUnzip
在分区上解压缩文件系统之前清理分区是完全没用的。
将完整磁盘存档解压缩到给定的分区,覆盖任何现有文件(动态清理)。
FullUnzip 支持 (FAT16) BIGDOS、FAT32 和 LINUX-EXT2。
除非 VESA
已被设置为 OFF
,否则此命令会开启 VESA 图形以显示进度横幅。
将增量磁盘存档解压缩到给定的路径。存档中的文件替换目标路径上同名的文件,但其他文件不会被删除。
IncrUnzip 支持 (FAT16) BIGDOS、FAT32 和 LINUX-EXT2。此命令远不如 FullUnzip 有效,因为必须保留现有的文件系统结构。但是,它通过仅存储差异来避免增加不同磁盘映像的数量。
解压缩先前使用 MrZip
FileZip 命令压缩的文件。该文件通过 32 位 CRC 校验。
将源文件逐字节复制到目标文件。例如,可以在 FullUnzip 之后使用它来从服务器更新配置文件,而无需重建映像。对于大型且易于压缩的文件,最好使用 FileUnzip
。
先复制第一个文件,然后复制第二个文件到目标文件,逐字节复制。可以用于任意大的文件。目标文件不能是两个源文件之一。
读取源文件并在将其写入目标文件之前执行变量替换。ASCII 127 以上字符的解释取决于 $IsoLatin 的值。
默认情况下,当变量以“${”为前缀,以“}”为后缀时被识别。这可以更改为任何其他非空字符串。请记住,如果您想在前缀或后缀中使用美元符号,则必须对其进行转义,否则它将被宏评估。例如,如果您想显式使用默认前缀和后缀,请使用
Patch "source-file" "dest-file" "\${" "}"
从根目录递归创建目录到给定的完整路径。如果路径已存在,则此命令无效。
删除给定的文件。文件必须存在。
递归删除给定路径下的所有文件和目录,并删除目录本身。
本节列出了用于继续引导过程的命令。可选参数列在括号之间。
恢复引导程序分配的内存和中断向量。调用此命令后,所有进行 TFTP 传输的尝试都将失败。通常在 HdBoot 之前调用此命令是一个好主意,否则您可能会在 DOS/Windows 下内存不足。此命令由 FloppyBoot 隐式调用。
请注意,尽管此函数“正式”恢复了 BootProm 重新路由的所有向量,但似乎并没有恢复所有内容。但它对 DOS 和 Windows 来说已经足够好了。
将软盘磁盘映像加载到扩展内存中,并重定向 BIOS 磁盘服务,使软盘磁盘调用使用此映像代替。此命令隐式调用 HideBootProm
。调用 FloppyBoot
以从您刚刚加载的 ramdisk 启动。
这种 ramdisk 可能不如您在使用 TFTPBoot 命令时获得的 ramdisk 那么健壮。唯一的优点是它只占用几百字节的常规内存,而不是 TCP/IP BootPROM 保留的 >64 KB。警告,没有任何东西可以保护 ramdisk 所在的扩展内存。没有办法卸载这样的 ramdisk。
执行与 LoadRamDisk
相同的操作,但用于已使用 MrZip
FileZip 命令压缩的映像。压缩的 ramdisk 通过字节计数和 32 位 CRC 来防止数据损坏(和不完整的下载)。
链接到另一个引导文件(例如使用 InCom 的 BpShell 程序制作的软盘映像)。请参阅文件引用约定以访问另一个 TFTP 服务器上的文件。
隐藏引导 ROM,加载软盘磁盘引导扇区并在其上启动。
加载给定的引导扇区并从中启动。磁盘默认为零,即第一个硬盘,分区默认为零,即主引导记录。您可以从任何分区启动,但请注意,Windows 95 可能不允许您启动未设置为引导分区的分区(提示:使用 SetBootPart)。
此命令不会隐式调用 HideBootProm,因此您可能需要在之前调用它。
将给定的内核和 ramdisk 加载到高位内存中,设置命令行并引导内核。最好至少放置一个包含根文件系统位置的最小命令行(例如 “root=
dev/hda1”/)。如果您使用的 Linux 系统严重依赖 lilo
(如 RedHat Linux 5.1),则可能需要在命令行中添加类似 BOOT_IMAGE=linux
的内容。请注意,内核可以通过 TFTP 加载(自动缓存在硬盘上),也可以直接从目标根分区加载。
此命令适用于小型和大型内核(zImage
和 bzImage
)。
本节列出了与国家语言支持相关的命令。可选参数列在括号之间。
国家键盘支持。将给定的按键重新映射到其他字符。例如,要交换 Y 和 Z 键,请使用
Remapkeys "yzYZ" "zyZY"当使用未包含在最小 ASCII 字符集中的字符时,最好使用带引号的八进制表示法,以避免对 iso-latin 模式设置的依赖。
对于国际键盘,有两个按键在未重新映射(美国)模式下产生反斜杠。由于 BpBatch
将其中一个键视为回答 ASCII 代码 252(八进制)或 ASCII 代码 335(八进制)的键(在按下 Shift 键时),因此可以独立地重新映射它们中的每一个。
如果您向我发送一个为您的国家键盘进行键盘映射的示例脚本,我将使其在 http://cuiwww.unige.ch/info/pc/remote-boot/soft/sample-scripts
下可用。为了帮助您制作自己的键盘映射,我建议在不重新映射键盘的情况下按下所有特殊按键,并写下它们产生的字符。这些将是 原始按键
。重新映射的按键
只是您希望看到的按键,顺序相同。如果某些按键(无论是原始按键还是重新映射的按键)产生 ASCII 十进制 127 以上的字符,请使用带引号的八进制表示法。例如,您可以通过查看 HelpPC 的 ASCII 表(HelpPC 是 David Jurgens 的共享软件超文本在线帮助程序)轻松获得任何给定字符的八进制代码。
国家键盘支持。当按下 ALT 键时,重新映射给定的按键。例如,要将 Alt-2 映射到 & 符号,请使用
RemapAltKeys "2" "@"请注意,不支持死键。
加载并激活给定的二进制代码页文件。代码页用于将 Unicode 字符(例如 VFAT 卷上的字符)转换为 8 位字符。如果您没有加载正确的代码页,则在访问文件系统时遇到特殊字符时,您将收到 FAT 警告。
所有二进制代码页文件都可以在 http://cuiwww.unige.ch/info/pc/remote-boot/soft/codepage.zip
获取
默认代码页是 850,它是 ISO-Latin-1 的重新排序超集。如果您加载更奇特的代码页,您通常应该将变量 $IsoLatin
设置为 “off”
,否则您可能会得到无意义的隐式转换。此外,如果您想显示奇特的字符,您还应该加载正确的屏幕字体(使用 “LoadFont”
)。
在文本和图形模式下加载并激活 VGA/VESA 字体。字体文件必须是 16 字节/字符(8x16 位图)的二进制文件。此命令可用于国家语言支持以及幻想支持。
包含多种幻想字体的存档文件可在 http://cuiwww.unige.ch/info/pc/remote-boot/soft/fonts.zip
获取。此存档文件还包含一个程序,用于从 DOS .CPI
文件中提取您的代码页的字体。
Source (i)archive "filename" Source path "path"
将存档操作的源设置为给定的(增量)存档文件或磁盘路径。
Dest (i)archive "filename" Dest (i)dump Dest path "path"
将存档操作的目标设置为给定的(增量)存档文件、转储或磁盘路径。要控制转储期间显示的数据量,请使用 $DumpFormat 特殊变量。
压缩文件以供进一步使用 FileUnzip 解压缩或用作 ZRamDisk。该文件通过 32 位 CRC 校验。
Filter -"pattern" Filter +"pattern"
避免/允许与给定模式(允许使用通配符)匹配的文件和目录包含在存档中。模式与完整路径名匹配。默认情况下,所有文件都包含在映像中。您只需要显式允许被过滤器取消的文件。每个否定过滤器都有其自己的肯定过滤器(允许)子列表。
对于 DOS/Windows 映像,您通常会使用
Filter -"*.swp" Filter -"temp/*"对于 Unix 映像,您通常会使用
Filter -"var/log/*" Filter -"tmp/*"
根据源、目标和过滤器设置启动存档操作。除非在少数情况下,否则您可能会使用下面的快捷方式来代替显式调用 CopyArchive
。您将显式使用 CopyArchive
的一种情况是当您想要更改映像的碎片时,如下所示
set FragmentSize="30 MB" Source archive "original.imz" Dest archive "refragmented.imz" CopyArchive
CopyArchive
的快捷方式为
Source path "path" Dest archive "full-archive" CopyArchive您通常应该首先设置过滤器。
CopyArchive
的快捷方式为
Source path "path" Dest iarchive "incr-archive" CopyArchive
CopyArchive
的快捷方式为
Source archive "full-archive" Dest dump CopyArchive
CopyArchive
的快捷方式为
Source iarchive "incr-archive" Dest dump CopyArchive
CopyArchive
的快捷方式为
Source path "srcpath" Dest path "dstpath" CopyArchive
Nobreak.sys
是一个非常小的驱动程序(只有大约 350 字节),您将其包含在 config.sys
的开头。其目标是保护引导过程,直到用户登录。DOS 为此提供了一个设置(即 BREAK=OFF
),但这不够彻底,并且在 autoexec.bat
中几乎没有效果。我们的驱动程序通过直接在 BIOS 级别修改请求中断时按下的键的扫描码来工作。这样,在再次启用中断之前,任何程序都无法接收到中断。
驱动程序必须从 config.sys
加载(或使用 Undocumented DOS 中的 devlod
程序)。之后,可以通过向 NOBRK
伪设备发送 Yes
来启用中断,并通过发送 No
再次禁用中断(实际上,只有第一个字符 Y
或 N
是有意义的)。
由于此驱动程序依赖于 BIOS,因此它仅适用于 DOS 和 Windows 3.1。Windows 95 有其自己的低级键盘处理例程。
汇编源代码 可用。