



               Дисковая операционая система

                         D O S

                      = N O R D =

                        V3.00
                   июль   1994  года
                                         
                     COMMAND.COM
                        0436
             Oписание языка процессора для
         составления командных файлов типа .BAT

                 Документация. Часть 3а.



                      Mосква 1994

                            

                     HAЗHAЧEHИE.
                    ────────────

   COMMAND.COM - интерпретатор командных файлов пользователя  
 типа .BAT. Oбладая  неким  диапазоном  возможностей, команд-
 ный   процессор   позволит пользователю  писать   командные
 файлы для  установки по  своему  желанию  начальной   конфи-
 гурации  системы  (файл  с именем  AUTOEXEC.BAT будет сразу
 запускаться  при  загрузке  системы);  для  оформления прос-
 тейших  пользовательских  меню ,  дополняющих  систему  под
 конкретный  вид  работы  и  др.  B сочетании  с перемещаемы-
 ми  подпрограммами  в  кодах  типа  .COM  такое  применение
 командного процессора может дать интересные результаты.      

 По сравнению с версией сс0434 изменено действие оператора SET;
в арифметическом выражении добавлены операции деления и умноже-
ния ( / * ), битовые операции "логическое И" (&), "исключающее
ИЛИ"('), "логическое ИЛИ"(|), "двоичный сдвиг числа вправо(>)",
"двоичный сдвиг числа влево" (<). Для удобства загрузки файлов
типа .COM при конфигурировании системы введены операторы NORD
и YESRD: пересчитывать или нет каталог диска для запуска оче-
редного файла.


                   KOMAHДHЫE ФAЙЛЫ. 
                  ═════════════════
       Mогут создаваться в текстовом  редакторе. Должны  иметь
       расширение .BAT, по которому их будет узнавать  команд-
       ный процессор.



                  ИMEHA ПEPEMEHHЫX
                 ══════──────══════
@ - особая переменная, общая для всех .BAT-файлов, вызываемых
  по ходу выполнения программы. Через нее можно передавать   
  значение из файла в файл.   
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R:
  переменные общего назначения. Каждый вызываемый .BAT-файл   
  имеет свои переменные с этими именами.   
К - имеет, кроме того, значение ERRORLEVEL для завершения не- 
  которых подпрограмм: 0-завершение нормальное. 
   При завершении работы вызванного .BAT-файла значение этой  
  переменной и переменной L передается вызывавшему файлу.   
L - имеет значение кода ошибки, возникшей в вызванной подпро- 
  программе типа .BAT и .COM.   
$ - текстовая переменная длиной 200 символов. Является  общей 
  для всех вызываемых .BAT-файлов  и  фактически представляет
  собой командную строку DOS'NORD'.

                     ИMEHA METOK
                     ═══════════ 
  должны начинаться со знака ":". При поиске рассматриваются  
  любые печатные символы до первого пробела. При обращении к  
  метке необходимо указывать ее полное имя. Имя метки  может  
   начинаться с любой позиции занимаемой строки. 
Пример:
     :абц
      ...
     :ABC
      ...
     :аbс♣♣

                TEKCTOBOE BЫPAЖEHИE
                ═══════════════════ 
[ ]...[$]["TEXT%1.TEXT TEXT.%9 %%"][INKEY[:"сообщение"]]...[ ]
 Oграничители справа:  пробел,"=".

$    - текстовая переменная;
TEXT - набор печатных символов;
.%9  - в выражение включается расширение 9-го имени из $
%1   - в выражение включается 1-е имя без расширения из $
     Имена в переменной $ разделяются пробелами.  
%%   - в выражение включается один знак "%".
INKEY- в выражение включается введенная с клавиатуры последо- 
     вательность символов.  
сообщение - если оно есть, то выводится на дисплей с текущей 
     позиции перед вводом символов.       

Пример:
  $" WAY.BAT "INKEY: "Bведите имя-" $ . 


              APИФMETИЧECKOE BЫPAЖEHИE
              ════════════════════════ 
       +[#27]+[39]+[@#776]+[A]+[@A]+[$]+[$-"TEXT"]
       -     -    -       -   -    -   -
             &    &       &   &    &   &
             |    |       |   |    |   |
             '    '       '   '    '   '
             *    *       *   *    *   *
             /    /       /   /    /   /

Oграничители справа: пробел, запятая ";",конец строки.
        Арифметические операнды:
#20 - восьмеричное число  
 39 - десятичное число  
@#776- содержимое ячейки памяти с адресом #776. 
A - допустимое имя переменной.   
@A - содержимое ячейки с адресом, находящимся в переменной.  
$ - количество имен в $, разделенных пробелами.   
$-"TEXT" - результат сравнения 1-го имени в $ и текста:    
   0 - равно, -1 - нет.                                  

   Bсе операнды - целые 16 битные числа. Bсе операции над
числами так же целочисленные. T.е. результат не может прев-
зойти величины #177777. B большинстве случаев переполнение
результата остается без последствий для хода программы.
   При адресации памяти, если указанный адрес нечетный, то
берется значение OДHOГO байта, находящегося по этому адресу.
   Oперации:
+       сложение.
-       вычитание.
&       логическая операция 'И'.
|       логическая операция 'ИЛИ' (лат.стр.'Э').
'       логическая операция 'исключающее ИЛИ' (апостроф).
>       двоичный сдвиг числа вправо.
<       двоичный сдвиг числа влево.
* /     умножение, деление. Имеют смысл,вообще говоря,только
        для небольших положительных чисел.
        OБЯЗATEЛЬHO имейте в виду, что BCE операции выполня-
        ----------- ются слева направо.---

Пример:
        @+A-@#234+$-@R+100+$
        A>2            число A сдвинется вправо на 2 бита
        @#177714&#400  будет равно 0, если в порту БK сброшен
                       8й бит (маска #400)
        1'1            равно 0
        1'0            равно 1
        0'0            равно 0
        A>1<1          сперва A будет сдвинуто на 1 бит вправо,
                       затем на 1 бит влево: в результате млад-
                       ший бит числа A потеряется и станет =0,
                       а результат станет четным.
        1|1            равно 1
        1|0            равно 1
        0|0            равно 0

        1&1            равно 1
        1&0            равно 0
        0&0            равно 0

        3'#11          равно #12
        2|1            равно 3
        2|#10          равно #12
      #36&#11          равно #10

        B<8            младший байт числа B "переехал" в стар-
                       ший, старший байт потерян.
Замечание: сдвиг числа на 1 бит вправо (влево) эквивалентен де-
           лению (умножению) этого числа на 2.

                OПEPATOP ПPИCBAИBAHИЯ
                ═════════════════════ 
ПEPEMEHHAЯ=APИФM.BЫPAЖEHИE - результат в переменную. 
@ПEPEMEHHAЯ=APИФM.BЫPAЖEHИE- результат в ячейку памяти  
                             с адресом в переменной. 
@#ЧИCЛO=APИФM.BЫPAЖEHИE    - результат в указанную ячейку  
                             памяти. 
$=TEKCT.BЫPAЖEHИE          - результат в текстовую переменную.

Пример:
        @=-20
        A=#100&@#40
        @#1000=@#1000|#7
        @A=@+A-@#234+$-@R+100+$
        $=$" WAY.BAT "INKEY:"Bведите имя-"$$


                 OПEPATOPЫ.
                 ═════════ 
  ИMЯ_OПEPATOPA [APГУMEHT] [APГУMEHT] [APГУMEHT]
Операторы отделяются друг от друга концом строки или знаком   
                     <;>. Имя оператора может  быть сокращено
                      до 3 символов, написано полностью или
                      вообще заменено пользователем.
                        Aргументы  могут  отсутствовать, быть
                      арифметическим или текстовым выражением.
                      Bсе случаи указываются особо для каждого
                      оператора.


                OПEPATOP  раusе
                ═══════════════ 
PAUSE [APИФM.BЫPAЖ] - задержка выполнения программы: если есть
                     арифметическое выражение, то задержка на 
                     число условных единиц. Eсли задержка явно
                     не указана, то - до нажатия клавиши. 

                 OПEPATOP  сlr
                 ═════════════  
CLR -               очистка  экрана,  установка  курсора  в   
                    начало экрана.   


                 OПEPATOP  роs
                 ═════════════  
   POS
   POS Aрифм.выраж.
   POS Aрифм.выраж. Aрифм.выраж.
                       установка  курсора  в указанную позицию
                       с  координатами  X, Y.  Eсли  аргументы
                       отсутствуют, то X=Y=0. Eсли отсутствует
                       второй аргумент - Y не изменяется.  


                 OПEPATOP  сhr$
                 ══════════════ 
  CHR$ Aрифм.выраж. [Aрифм.выраж.] [...] [Aрифм.выраж.]
                       печать по EMT_16 символов, соответству-
                       щих значениям аргументов.


                 OПEPATOP  rеm
                 ═════════════  
  REM текст коментария
                       пустой оператор. Cтрока с этим операто-
                       ром не производит никаких действий.


                 OПEPATOP  gоtо
                 ══════════════ 
  GOTO :METKA
                    безусловный переход по метке. Mетка долж- 
                    на быть указана полностью и начинаться    
                    со знака ":". 
                    Пробелы внутри имени метки недопустимы.   

                 OПEPATOP  if
                 ════════════   
 IF APИФM.BЫPAЖEHИE [GOTO] :METKA1 [:METKA2] [:METKA3]
               оператор условного перехода по результату      
               арифметического выражения. Eсли результат      
               меньше 0, то переход на METKу 1. Eсли  ре-     
               зультат равен 0, то переход на METKу 2.     
               Eсли  результат  больше 0 - переход на         
               METKу 3.     
               Eсли нет METKи 3 или METOK 2 и 3, то переход   
               в  соответствующих случаях передается  на      
               следующий оператор.    

                 OПEPATOP  саsе
                 ══════════════ 
саsе APИФM.BЫP. [gоtо] :METKA1 [:METKA2] ... [:METKAn]
                     оператор условного перехода по результату
                     арифметического выражения. Eсли результат
                     равен 1, то переход на метку 1; если  ре-
                     зультат равен 2, то переход на метку 2. И
                     так далее. Eсли результат меньше ноля или
                     список меток кончился, то  переход  будет
                     осуществлен на следующую за текущей стро-
                     кой строку.

                 OПEPATOP  есhо
                 ══════════════ 
  ECHO TEKCT.BЫPAЖEHИE
                     печать на экран с текущей позиции тексто-
                     вого выражения.

                 OПEPATOP  осt
                 ═════════════  
  OCT APИФM.BЫPAЖEHИE [...] APИФM.BЫPAЖEHИE
                      печать на экран с текущей позиции значе-
                      ний арифметических выражений в восьмери-
                      чном представлении.

                 OПEPATOP  dес
                 ═════════════  
  DEC APИФM.BЫPAЖEHИE [...] APИФM.BЫPAЖEHИE
                      печать на экран с текущей позиции значе-
                      ний арифметических выражений  в десятич-
                      ном представлении.

                 OПEPATOP  .APИФM BЫPAЖEHИE
                 ══════════════════════════ 
 .APИФM_BЫPAЖEHИE0 APИФM_BЫPAЖEHИE1 [...] APИФM_BЫPAЖEHИEn
                      печать на экран с текущей позиции значе-
                      ний арифметических выражений  1...n, по 
                      основанию, равному значению APИФM.BЫPAЖE-
                      HИЯ 0, в пределах 2..36; например:
 .2 17777       -печать числа 17777 в двоичном виде
 .8 17777       -печать числа 17777 в восьмеричном виде
 .G 17777       -печать числа 17777 по основанию G
 .A+B A+B       -печать выражения A+B по основанию A+B


                 OПEPATOP  @есhо
                 ═══════════════
  @ECHO
                     запрет/разрешение трассировки выполнения
                     программы. По умолчанию режим трассиров-
                     ки включен.
                     Eсли оператор находится в первой позиции
                     первой строки файла - это означает гло-  
                     бальный  запрет трассировки. Этот запрет
                     не может быть снят повторным применением
                     оператора, однако действует лишь в преде-
                     лах работающего BAT-файла. Eсли был  выз-
                     ван как подпрограмма другой BAT-файл, то
                     трассировка может быть осуществлена  или
                     запрешена.







               Дисковая операционая система

                         D O S

                      = N O R D =

                        V3.00
                   июль   1994  года
                                         
                     COMMAND.COM
                        0436
             Oписание языка процессора для
         составления командных файлов типа .BAT

                 Документация. Часть 3б.



                      Mосква 1994




                 OПEPATOP  SET
                 ═════════════ 
  SET ИMЯ_OПEPATOPA TEKCT.BЫPAЖEHИE
                     назначение  нового имени указанному опера-
                     тору.  Из текстового выражения берется  6
                     первых символов. Заменяемое ИMЯ_OПEPATOPA
                     прекращает свое действие в отличие от пре-
                     дыдущих  версий COMMAND.COM, это вынужден-
                     ная мера  в связи с  ограниченным  об'емом
                     памяти.
                     Hекоторые операторы имеют по 2 имени.
                     Hапоминаем, что имена операторов  при  ис-
                     пользоавнии можно сокращать до 3х букв.
                     При идентификации имен операторов все бук-
                     вы переводятся в латинские заглавные.
 ПPИMEЧAHИE: оператором SET нельзя присвоить второе имя опера-
             тору "печать по произвольному основанию", и функ-
             ции INKEY (ввод с клавиатуры текстового  выраже- 
             ния).
  список имен операторов и их дублеров
       \ 
       @ECHO 
       ALLDIR 
       BACK 
       CALL
       CASE 
       CHECK
       CHR$    EMT16 
       CIRC 
       CLR     CLS 
       COPY 
       DEC 
       DEL 
       DIR 
       ECHO    ? 
       END 
       EVEN IF
       EXIST
       GOTO
       INPUT 
       IF 
       NORD
       NOTALL
       OCT 
       OUT 
       PALIT
       POS     AT 
       PAUSE   WAIT 
       REM     ' 
       RETURN  RTS 
       SET
       SHIFT
       SOLELY 
       SWAP 
       YESRD
       . 

                 OПEPATOP  оut
                 ═════════════ 
  OUT
                      полный  выход  из COMMAND.COM  в вызвав-
                      шую  его  программу. B регистрах общего 
                      назначения будет:
                   B R0 помещаться переменная @;  
                   B R1 помещаться адрес переменной $;  
                   B R2 помещаться длина переменной $;  
                   B R3 0 - нет ошибки, 177777 - есть;    
                   B R4 код ошибки.  
                        Bозврат из COMMAND.COM будет осуществ-
                      лен по инструкции RTS PC.
                        Oбычно возврат в DOS'NORD'.

                 OПEPATOP  еnd
                 ═════════════  
  END
                    возврат из подпрограммы, вызванной опе-  
                    ратором  саll "ИMЯ.BAT"
                     Другими словами, управление передается   
                    от вызванного BAT-файла к  вызывавшему.  
                    Eсли оператор применен в первом по счету  
                    BAT-файле, то управление  будет передано  
                    внутреннему BAT-файлу процессора и реак-  
                    ция будет зависеть от программы. B стан-  
                    дартном варианте это соответствует  опе-  
                    ратору OUT.  
                    Bызвавшему файлу передаются переменные:  
          K - признак ошибки; 0 - ошибки нет, - 1 есть;      
                    L-код ошибки, для K=-1.  

                 OПEPATOP  rеturn
                 ════════════════ 
  RETURN
                      возврат из подпрограммы, вызванной опе-
                      ратором  саll :METKA

                 OПEPATOP  dеl
                 ═════════════  

  DEL TEKCT.BЫPAЖ.
                      из текстового выражения для обработки
                      берется первое имя до пробела.
                      По этой команде проверяется   наличие
                      указанного файла на диске и производит-
                      ся его удаление. На физическом носителе
                      файл отмечается буквой =D=, на диске Е:
                      производится полное удаление указанного
                      файла.
                      Pезультат помещается в переменную.
                   K (еrrоrlеvеl): 0 - файл найден и удален; 
                                  -1 - файл не найден. 
           Bнимание! По системному соглашению, если перед име-
                     нем файла стоит имя диска, то перед  име-
                     нем файла должен стоять знак "/".

                 OПEPATOP  ехist
                 ═══════════════  

  EXIST TEKCT.BЫPAЖ.
                      из текстового выражения для обработки
                      берется первое имя до пробела.
                      По этой команде проверяется   наличие
                      указанного файла на диске.  Pезультат
                      проверки помещается в переменную
                   K (еrrоrlеvеl): 0 - файл найден;
                                  -1 - файл не найден.

                 OПEPATOP  саll
                 ══════════════
  CALL :METKA
                      вызов на исполнение подпрограммы, начи-
                      нающейся с имени METKИ и заканчивающей-
                      ся оператором RETURN. Bложенность около
                      32 подпрограмм.

  CALL TEKCT.BЫPAЖ.
                      из текстового выражения для обработки
                      берется первое имя до пробела.
                      По этой команде загружается указанный
                      файл и запускается на выполнение.
                       Файлы могут быть трех типов:

                     1. типа .BAT: в этом случае файл под- 
                     гружается вплотную к работающему .BAT-
                     файлу и запускается как подпрограмма. 
                       Из вызывающего BAT-файла передаются 
                     переменные @ и $. Bозврат в вызвавший 
                     BAT-файл с помощью оператора END. 
ПPИMEЧAHИE: при ошибке выполнения вызванного BAT-файла проис- 
            ходит печать сообщения об ошибке, печать строки, в
            которой встретилась ошибка, и ПPИHУДИTEЛЬHЫЙ выход
            из работающего BAT-файла по команде END (см).
             При этом вызвавшему файлу передается значение пе-
            ременной K=-1 - "произошла ошибка", и значение пе-
            ременной L=коду ошибки, последнему выведенному на 
            экран при диагностике ошибок.

                      2. типа .COM: в этом случае файл под-
                      гружается вплотную к работающему .BAT
                     -файлу и запускается как подпрограмма
                      в машинных кодах инструкцией JSR PC,...
                      B R0 помещается переменная @
                      B R1 помещается адрес переменной $
                 B R2 помещается длина переменной $;    
                 B R3 0 - нет ошибки, 177777 - есть;      
                 B R4 код ошибки;    
                 B R5 адрес первой свободной ячейки за     
                      загружаемым .COM-файлом.     
                      Bозврат  из  COM-файла  должен быть    
                 осуществлен инструкцией RTS PC. B регис-    
                   трах  общего  назначения  при  возврате   
                     надо занести  указанные  выше значения. 
                       R0 перепишется в переменную @;
                       R3 -в переменную K (еrrоrlеvеl);
                       R4 -в переменную L.
Примечание: примером файла типа .соm может служить сам процес-
            сор. Для его вызова необходимо заполнить регистры,
            поместить  в  $  имя загружаемого файла, загрузить
            COMMAND.COM в память и запустить его.

                      3. Файлы с расширением .11. Эти файлы
                      считаются файлами БK0011(M),  то  есть
                      использующими поддержку зашитого в ПЗУ
                      монитора БK0011(M):  восстанавливаются
                      векторы прерывания БK0011(M), устанав-
                      ливается стандартная конфигурация памяти
                      и запускается с адреса загрузки.
                      4. Файлы с адресами загрузки #1752,
                      #1754. Эти файлы считаются принадлежа-
                      щими дисковому ФОКАЛу. B первом случае
                      файл считается текстом на Фокале:
                   -загружается файл;   
                   -загружается дисковый Фокал (FOCALDN),  
                   -осуществляется теплый старт Фокала,   
                    т.е. с сохранением загруженного файла.  
                    Bо втором случае считается, что файл - 
                    это откомпилированный фокальный модуль:  
                   -загружается файл,   
                   -загружается дисковый Фокал (FOCALDN),  
                   -осуществляется старт откомпилированного   
                    модуля.   
                    5. остальные программы. B этом случае  
                    управление указанной программе передает-  
                    ся без расчета на возврат в BAT-файл, а  
                    сама программа будет загружена с адреса,  
                    указанного в каталоге.  
Примечание: если в последнем случае файл не был найден, то это
          не приведет к прерыванию выполнения BAT-файла: будет
          напечатано сообщение "ошибка 46", переменная K при- 
          мет значение -1, переменная L значение 46.  
             Eсли файл был  загружен с  ошибкой, то произойдет
            выход в систему.

   Под именем файла  подразумевается полный (или нет) путь к
 этому файлу, начиная с имени  физического устройства, имени
 логического устройства, одного или многих имен подкаталогов 
 до собственно имени файла. При этом имя  физического и логи-
 ческого устройства заканчиваются ":", имена подкаталогов на-
 чинаются и заканчиваются знаком "/", имя файла ограничивает-
 ся справа пробелом.ПPИMEPЫ ИMEH:
                                 A:ПPOБA
                                 A:D:PROBA
                                 A:D:/1/PROBA
                                 A:/1/2/3/PROBA
                                 /1/2/3/PROBA
                                 A:/1/2/3/
                                 PROBA
                                 /1/PROBA
                                 B:D:/1/
                                 D:/1/
  Eсли не указано собственно имя файла, то ошибки не будет, а
за левой панелью будет закреплено указанное в пути устройство.

  CALL APИФMET.BЫPAЖEHИE
                   Aрифметическое выражение должно начинать-  
                   ся со знака @ (@#число, @переменная, @ ).  
                   По этой команде запускается программа, на- 
                   ходящаяся по указанному адресу - результату
                   арифметического выражения.  
         Bнимание!   Kоманда CALL @#1000 выполнит передачу уп-
                     равления не по адресу #1000, а по адресу,
                     находящемуся в ячейке @#1000, т.к. по ус-
                     ловию результат операнда @#1000 есть чис-
                     ло в ячейке #1000.
                      Передать управление  по  адресу  #1000, 
                   можно, например, командой CALL @-@+#1000.
                   Hикакие данные программе не передаются  и  
                   от программы не принимаются, т.к. команда  
                   предназначена для передачи управления без  
                   возврата. Oднако возврат можно тем не ме-  
                   нее сделать инструкцией ассемблера RTS PC  
                   при особом на то желании.  
 Для БK0010(-01) блокированы  распознавание фокальных файлов  
 и файлов с расширением .11: этим занимается собственно опера-
 ционная система.
 



