BpBatch, MrBatch и MrZip
Эти три названия относятся к трем вариантам одной и той же программы, различающихся в следующем:
-
BpBatch - это специальная программа, которую можно запустить из BootPROM до загрузки операционной системы. Она состоит из двух частей: bpbatch.P - динамического загрузчика, и bpbatch.ovl - собственно самой программы. BpBatch предоставляет возможность работать с дисками и файлами на них, при помощи собственной встроенной поддержки FAT16, FAT32 и Ext2fs, а также с сетевыми ресурсами, при помощи BootPROM TFTP API. BpBatch был собран в DOS, при помощи Borland C 5.0 и Turbo Assembler 3.2.
-
MrBatch - это DOS/Linux-версия BpBatch. Все команды, известные BpBatch, обрабатываются MrBatch и наоборот. Она бывает очень полезна, если вы хотите проверить работу своих пакетных скриптов из DOS/Linux. В DOS, MrBatch эмулирует удаленный доступ к файлам, при помощи ОС, если BootPROM не доступен. В Linux, BootPROM недоступен вообще, но MrBatch эмулирует его работу, при помощи встроенной в Linux поддержки IP, или, в крайнем случае, при помощи ОС. MrBatch был собран в Linux при помощи GCC 2.7.2.1, и в DOS, при помощи Borland C 5.0 и Turbo Assembler 3.2.
-
MrZip - это интерпретатор, обрабатывающий дополнительный набор команд языка MrBatch, служащий для создания образов дисков. В MrZip
ограниченный доступ к удаленным файлам заменен на полноценный доступ к файлам, при помощи ОС. В MrZip не встроена поддержка VESA. MrZip был собран в Linux, при помощи GCC 2.7.2.1, и в DOS, при помощи Borland C 5.0 и Turbo Assembler 3.2.
Опции командной строки
Все программы имеют одинаковый набор возможных опций. MrBatch и MrZip берут их из командной строки, а MrBatch берет их из опции 155 BOOTP. Список возможных опций:
[-x] [-l] [-b] [-v] [-w] [-i] [базовое_имя_скрипта] |
где:
-
-x запрещает использование расширенной памяти
-
-l запрещает использование набора символов ISO-latin-8859-1 в качестве стандартного
-
-b запрещает обнаружение BootPROM (вызывающее инициализацию флоппи-диска в DOS)
-
-v запрещает обнаружение VESA (вызывающее переключение в полноэкранный режим в Windows 95)
-
- w разрешает прямую запись на диск (она запрещена по умолчанию в DOS и Linux)
-i включает интерактивный режим, даже если было задано имя скрипта
Базовое_имя_скрипта - это необязательный аргумент. Если оно задано, MrBatch
и BpBatch загружают скрипт с этим именем и расширением .bpb, а MrZip
загружает скрипт с этим именем и расширением .mrz. Если это имя не задано, MrBatch и MrZip работают в интерактивном режиме, а MrBatch загружает файл с тем же именем, что и загрузочный файл BOOTP, только с расширением .bpb.
Синтаксические правила
При обработке команды BpBatch следует нижеприведенным правилам.
Команды обрабатываются построчно. Строки разделяются переводом строки и/или возвратом каретки.
Максимальная длина строки - 255 символов.
Регистр ключевых слов и имен переменных не имеет значения.
" - это специальный символ - ограничитель строковых констант
Когда в тексте встречается конструкция вида ${variable} или $variable, она заменяется на значение переменной или на пустую строку, если переменная не определена.. Эта подстановка выполняется также и внутри строк. Более того, подставляемое значение должно быть также включено в кавычки, если предполагается, что оно является строкой (т.е. можно говорить скорее о макро-подстановке, а не о переменных).
\a заменяется на символ звукового сигнала (ASCII 7)
\b заменяется на символ "забой" (ASCII 8)
\n заменяется на символ "перевод строки" (ASCII 10)
\r заменяется на символ "возврат каретки" (ASCII 13)
\t заменяется на символ "табуляция" (ASCII 9)
\v заменяется на символ "вертикальная табуляция" (ASCII ...)
\nnn где nnn - это трехзначное восьмеричное число от 000 до 377, заменяется на символ с ASCII-кодом nnn
\X, где X - это любой символ, не перечисленный выше, заменяется на сам символ X. В частности:
\" заменяется на стандартную двойную кавычку (т.е. не является ограничителем строки)
\$ заменяется на символ $ (не выполняет подстановку переменных)
\\ заменяется на символ \ (не является специальным символом)
Символ "конец строки" ( ASCII код 0) НЕ МОЖЕТ быть использован в тексте, так как он является внутренним ограничителем строки
Символ "волнистые линии" (ASCII код 249, 0F9h, 0371 - KOI-8 символ "Ы") НЕ МОЖЕТ быть использован в тексте, так как он используется программой в качестве внутреннего ограничителя строки.
Символ "блок" (ASCII код 255, 0FFh, 0377) НЕ МОЖЕТ быть использован в тексте, так как он используется программой в качестве внутреннего ограничителя переменных.
Пустые строки игнорируются. Строки, начинающиеся с символа #
воспринимаются, как комментарии, и также игнорируются. Строки, начинающиеся с двоеточия (:), воспринимаются как метки перехода и не обрабатываются.
Строковые выражения
Строки ограничиваются с обеих сторон двойными кавычками:
"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). Поддержка шестнадцатеричных, восьмеричных и двоичных чисел не встроена. При необходимости получить числовое выражения система распознает следующие конструкции:
Положительное или отрицательное целое число
Выражение в форме (выражение1 операция выражение2), где операция - это +, -, * (умножение), / (деление) или % (остаток от деления), а выражение - это числовое выражение. Заметьте, что КАЖДАЯ операция должна заключаться в скобки:
((3 * 5)+2) == 17
Оператор "длина строки" (@), за которым следует собственно строка: @"Hello world" == 11
Оператор "количество слов в строке" (#), за которым следует собственно строка: #"Hello world" == 2
Промежутки времени
Некоторые команды в качестве аргументов обрабатывают промежутки времени. Эти промежутки измеряются в секундах с точностью до десятых: Delay 3 пауза 3 секунды Delay 0.3 пауза 3/10 секунды
Цвета
В командах, которые требуют указание цвета, вы можете использовать либо его название (регистр не имеет значения) или его номер:
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 (Белый) |
Ссылки на файлы
Имена файлов - это строки. Следовательно, они должны заключаться в двойные кавычки. Регистр имен файлов имеет значение в зависимости от файловой системы. Слэш и обратный слэш могут свободно использоваться, заменяя друг друга. Не забудьте, что надо использовать двойной обратный слэш: одинарный обратный слэш - это специальный символ.
Существует два вида ссылок на файлы:
Прямой доступ к файлам на локальном диске
Косвенный доступ к файлам (удаленные файлы и локальные файлы при помощи ОС)
Прямой доступ к файлам на диске описывается следующим образом: "{номер_диска:номер_раздела}/полный_путь/имя_файла" Номер диска можно не указывать - по умолчанию он будет 0. Например, "{:1}/usr/bin" указывает на /usr/bin, если такой каталог есть на первом разделе. Прямой доступ к файлам на диске производится, исключительно при помощи нашей программы (мы не используем операционную систему).
Существует также два специальных раздела. Раздел с номером 0 указывает на Главную Загрузочную Запись (master boot record (MBR)) и имеет псевдо-файловую систему, позволяющую вам иметь доступ к загрузочному коду. Раздел с номером -1 - это кэш-раздел (см. ниже).
В BpBatch/MrBatch косвенный доступ работает с удаленными файлами, находящимися на TFTP-сервере, если доступ к BootPROM:
"help.bpb" - это файл help.bpb в каталоге /tftpboot "gifs/MyImage.gif" - этой файл в каталоге /tftpboot/gifs |
Можно получить доступ к другим TFTP-серверам:
Также можно получить доступ к файлам на сервере, находящемся за шлюзом: "198.70.0.1/198.76.54.31:help.bpb" |
Можно также указать специальный порт для TFTP-соединения: "198.76.54.32@89:getpasswd/smith" |
В один момент времени может быть открыт только один удаленный файл. Если BootPROM недоступен, доступ к удаленным файлам производится, при помощи операционной системы, но существуют ограничения, накладываемые ОС.
В MrZip косвенный доступ работает с файлами ОС в соответствии с ее правилами обращения к файлам. Не существует никаких ограничений - косвенный доступ можно использовать везде, где можно использовать прямой. Косвенный доступ обычно работает быстрее прямого, потому что в ОС есть большее количество буферов и кэш. При помощи косвенного доступа, можно работать с удаленными файлами, если это поддерживается ОС.
"C:\\autoexec.bat" "C:/config.sys" "/mnt/net/usr" |
Кэш-раздел
С целью уменьшить нагрузку на сеть и ускорить процесс загрузки, образы дисков, ядра Linux и, возможно, другие файлы кэшируются на жестком диске. Кэш-раздел находится в конце диска между последним цилиндром, занятым стандартными разделами, и последним цилиндром диска (то есть за пределами стандартных разделов). Для того, чтобы это кэширование работало, между последним разделом и концом диска ДОЛЖНО быть пустое пространство. Кэш-раздел ДОЛЖЕН существовать, если вы хотите восстановить образ диска.
Кэш-раздел представляет из себя надежную файловую систему с контролем CRC: Каждый каталог и каждый 32-килобайтный блок данных имеет свою 32-битную CRC-контрольную сумму. Если содержимое каталога или блока данных испорчено, то файл автоматически удаляется из кэша, и при обращении к нему, снова загружается с сервера.
Вы имеете возможность работать с файлами кэш-раздела из BpBatch, MrBatch и MrZip, используя прямой доступ к специальному разделу "{:-1}". Чтобы увидеть содержимое кэш-раздела, наберите:
Если данные в кэше испорчены, и автоматически не очищаются (этого не должно происходить), вы можете либо дать в интерактивном режиме команду:
, либо удерживать обе клавиши Shift при загрузке BpBatch
Специальные переменные
Некоторые переменные бывают установлены при запуске интерпретатора и/или имеют специальное назначение. Некоторые из них существуют во всех программах, другие есть только в MrZip. Часть из них появляются только после получения ответа на BOOTP/DHCP-запрос.
Общие переменные
$Program имеет значение "BpBatch" в BpBatch, "MrBatch" в MrBatch и "MrZip" в MrZip
$Basename базовое имя скрипта, автоматически запущенного в интерпретаторе
$HelpFile имя файла, выводимого по команде Help. По умолчанию оно равно "${Basename}.hlp"
$BOOTP-... - переменные, установленные в соответствии с ответом на BOOTP-запрос (см. ниже подробное описание этих переменных)
$DHCP-... - переменные, установленные в соответствии с ответом на DHCP-запрос (см. ниже подробное описание этих переменных)
$Disks содержит список размеров дисков, разделенных пробелами. Соответственно, #"$Disks" - это количество дисков, а "$Disks"{0} - размер первого диска
$Keypressed равен первому не запрошенному коду клавиши из буфера клавиатуры (если таковой имеется)
$LBA контролирует использование режима LBA для доступа к дискам размером более 2 Гб. Значение по умолчанию: "ON"
$FDA контролирует быстрый доступ к диску (черезцилиндровая запись). Значение по умолчанию: "ON"
$VESA контролирует использование VESA-графики. Значение по умолчанию: "ON", если существует поддержка VESA
$VESA-Modes содержит в себе список всех доступных VESA-видеорежимов. Первый из этого списка - это видеорежим, используемый по умолчанию (если режим не указан в команде InitGraph). Замечание: если VESA="OFF", то эта переменная будет пуста
$APM установлено в "ON", если ваш компьютер поддерживает Расширенное Управление Питанием (Advanced Power Management). Если $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-кодов от 128 до 255, включенных в скрипты и модифицируемые файлы. Установки IsoLatin обрабатываются при загрузке файла, а не при его обработке. Значение по умолчанию: "ON"
$ProgressX и $ProgressY задают координаты графического окна, отражающего процесс загрузки и декомпрессирования образа диска. Значение по умолчанию: 200 200
$EXT2-Backup контролирует обновление резервных копий суперблоков в файловой системе ext2 в Linux. Копии суперблоков создаются несколько секунд и не используются текущими версиями ядер (их использует только e2fsck).
$Security-Gateway содержит имя шлюза, используемого для авторизации пользователей. На указанном в этой переменной компьютере должна работать наша специальная программа-шлюз. Значение по умолчанию: "${BOOTP-Server-IP}@89" (т.е. порт 89 TFTP-сервера)
$Security- Check содержит ответ сервера безопасности на последнюю проведенную авторизацию, соответственно PASSED или FAILED. Значение по умолчанию: "FAILED"
$Security-Passwd, $HelpTopic, $OnExit, $OnKey-... внутренние переменные.
Смотрите также список специальных переменных BOOTP и MrZip.
Специальные переменные MrZip
Следующие переменные используются только в MrZip.
$TempPath содержит каталог, в котором содержатся временные файлы. Значение по умолчанию: == текущий каталог
$DumpFormat содержит формат вывода в журнал данных о создаваемых архивах. Это строка, содержащая
"h"/"H" - вывод заголовка архива
"b"/"B" - вывод итогов/содержимого загрузочных секторов
"s"/"S" - вывод краткой/подробной информации о занятом месте
"d"/"D" - вывод краткого/подробного содержимого каталогов
"f"/"F" - вывод итогов/содержимого файлов
Значение по умолчанию: "hbD"
$FragmentSize задает размер частей архива. Если вы не используете улучшенную версию TFTP-сервера фирмы InCom, установите ее в "30 MB". Значение по умолчанию: "87 MB"
$SourceArchive, $DestArchive, $Filter... внутренние переменные.
Переменные BOOTP
Системой распознаются следующие переменные BOOTP-... и DHCP-... , заполняемые после получения соответствующего ответа на BOOTP/DHCP запрос (TCP/IP BootPROM должна существовать и работать):
Содержание раздела