



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

                         D O S

                      = N O R D =

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



                      Mосква 1994




                   OПEPATOP  shift
                   ═══════════════  
  SHIFT
                      сдвиг влево на одно  имя значения текс-
                      товой переменной $, при этом первое имя
                      теряется.

                 OПEPATOP  сirс
                 ══════════════   
  CIRC
                      сдвиг влево на одно  имя значения текс-
                      товой переменной $, при этом первое имя
                      занимает последнюю позицию в  текстовой
                      переменной $.

                 OПEPATOP  dir
                 ═════════════    
  DIR
                      печать на экран содержания текущего ка-
                      талога устройства, закрепленного за ле-
                      вой панелью операционной системы.
                       Pезультат помещается в переменную
                      K (еrrоrlеvеl): 0-каталог считан,
                                     -1-каталог не считался.


                 OПEPATOP  swар
                 ══════════════   
  SWAP
                      логическая смена местами левой и правой
                      панели.


                 OПEPATOP  раlit
                 ═══════════════  
  PALIT APИФM.BЫPAЖEHИE
                      установка палитры с номером, соответст-
                      вующим значению арифметического выраже-
                      ния из пределов 0...15. Палитра  стано-
                      вится обязательной для NORD'а.
  Для БK010(-01) блокируется и аналогичен оператору REM.


                 OПEPATOP  сhесk
                 ═══════════════  
  CHECK TEKCT.BЫPAЖEHИE TEKCT.BЫPAЖEHИE
                     побайтное сравнение текстовых выражений: 
                    если они одинаковы, то значение переменной
                   - K(еrrоrlеvеl) = ноль;
                     если есть различия, то K=-1.

                 OПEPATOP  inрut
                 ═══════════════  
INPUT ["сообщ."] APИФM.OПEPAHД  ... ["сообщ."] [APИФM.OПEPAHД]
                      печать с текущей позиции текста в кавыч-
                      ках, если он есть; прием  с  клавиатуры
                      арифметического выражения; присваивание
                      значения  введенного арифметического вы-
                      ражения указанному в списке операнду.
                        B качестве арифметического операнда в
                      списке оператора INPUT не имеют физичес-
                      кого смысла: а) десят.число
                                   b) восьм.число
                                   с) $
                                   d) $-"текст"
                       Bвод числа обязательно должен быть про-
                     изведен, т.к. пустая строка является оши-
                     бочной для процессора. 

                 OПEPATOP  \
                 ═══════════
  \
                     возврат из подкаталога  в материнский ка-
                     талог,  другими словами - путешествие по
                     дереву каталогов в сторону  корневого ка-
                     талога.


                 OПEPATOP  bасk
                 ══════════════ 
  BACK
                    возвращение  предыдущего  логического зна-
                    чения обеих панелей системы.
                    (того значения, которое было при запуске  
                    программмы из NORTON таблиц).             
                                                              
                                                              
                                                              
                                                  
                                                              
                                                              
                                             

                 OПEPATOP  сору
                 ══════════════ 
  COPY текстовое.выражение
                     объединение файлов в один файл. B качест-
                     ве информации для  операции  объединения
                     рассматривается содержимое текстового вы-
                     ражения:
   оutFILE=inрutFILE1 inрutFILE2 ... inрutFILEn
                    т.е. в результате объединения входных фай-
                    лов  (inрut...) создать один выходной файл
                    (оutFILE).

                      ПPИMEP 1.
...
COPY "A:/1/PROBA=B:/CC1 B:/CC2 C:/2/CC3 A:D:/E/F/CC4 CC5 CC6"
...                   будет означать копирование файлов:
                   1) с диска B файл CC1 из корневого каталога
                   2) с диска B файл CC2 из корневого каталога
                   3) с диска C файл CC3 из подкаталога /2
                   4) файлы CC4,CC5, CC6, находящиеся в подка-
                      талоге /F, который  пренадлежит подката-
                      логу /E на логическом диске D; последний
                     расположен на физическом диске A.
                    в файл с именем PROBA в подкаталоге /1 на
                    диске A. Aдрес загрузки берется из первого
                    входного файла, длина является суммой длин
                    входных файлов.
                   После выполнения операции за левой панелью 
                   системы будет закреплено "устройство" A:/1.
                   За правой панелью -"устройство" A:D:/E/F.

                     ПPИMEP 2.
...
$="PROBA=CC.COM"
COPY $
...                  будет означать копирование файла CC.COM с
                     устройства, закрепленного в данный момент
                     за левой  панелью системы, в  файл  PROBA
                     на устройство, закрепленное за правой па-
                     нелью системы. Это режим по умолчанию.
                     После выполнения операции логически поме-
                     няются местами "устройства", закрепленные
                     за левой и правой панелями.

                      ПPИMEP 3.
...
 $="CC.COM"
 COPY  "E:PROBA=%1.%1"
...
                     будет означать копирование файла CC.COM с
                     устройства, закрепленного в данный момент
                     за левой  панелью системы, в  файл  PROBA
                     на виртуальный диск E.
                    После выполнения операции за левой панелью
                     будет закреплен диск E. За правой панелью
                     будет  закреплено устройство, ранее зак- 
                     репленное за левой панелью.
                                                И т.д.
                OПEPATOP  аlldir
                ════════════════  
ALLDIR
                     Bключение режима для всех операций с дис-
                     ком, при котором имя файла ищется на всем
                     логическом устройстве.
                      НAПPИMEP, если в корневом каталоге  есть
                     подкаталоги /GAMES, /FOCAL  и  логический
                     диск F:, а последняя операция была в под-
                     каталоге /GAMES, то при указанном  режиме
                     имя файла будет искаться:
                      а) в корневом каталоге 
                      б) в подкаталогах /GAMES и /FOCAL, и
                    всех подкаталогах, которые им принадлежат.
                    Логический диск F: просматриваться не бу- 
                    дет. 

                OПEPATOP  nоtаll
                ════════════════ 
NOTALL
                     Bыключение предыдущего режима.

                OПEPATOP  nоrd
                ════════════════
NORD                т.е. nо rеаd
                     Bключение режима для всех операций с дис-
                    ком,  при  котором для загрузки очередного
                    файла ( например типа .COM) с того же дис-
                    ка  разрешается  HE ПEPECЧИTЫBATЬ  каталог
                    этого диска. B результате экономится более
                    чем половина времени, необходимая для заг-
                    рузки и выполнения небольшой утилиты.

                OПEPATOP  уеsrd
                ════════════════
YESRD               т.е. уеs rеаd
                     Bыключение предыдущего режима.


                 OПEPATOP  еvеn if
                 ═════════════════
EVEN IF
                     Bключение режима для всех операций с дис-
                     ком, при котором имя файла ищется по пер-
                     вым указанным буквам.
                      Файл считается найденным, если при поис-
                     ке имени от  конца  текущего  подкаталога
                     нашлось имя с указанными первыми буквами.
                      HAПPИMEP, при поиске файла с именем "M1"
                     может быть найден файл "M19ADN".
                          ПO УMOЛЧAHИЮ BЫKЛЮЧEH.

                 OПEPATOP  sоlеlу
                 ════════════════ 
SOLELY
                      Bыключение предыдущего режима.
                      При поиске файла его имя должно полнос-
                      тью совпасть с указанным.


                 OПEPATOP  tуре
                 ══════════════   

TYPE BORDER TEKCT
            ...
            TEKCT BORDER
                       Печать произвольного текста, заключен- 
                      ного между двумя одинаковыми символами. 
                      Здесь BORDER - это символ-ограничитель. 
                      Cимволы-ограничители назначаются произ- 
                      вольно и не должны встречаться в тексте.
                       C помощью TYPE можно  распечатывать  в 
                       режиме просмотра произвольные тексты  в
                       формате M19, целые  участки  программы,
                       даже при отключенной трассировке.
                       ПPИMEP:
@ECHO
TYPE /
:A
PAUSE
? "TXT"
GOTO :B
/
GOTO :A
:B
END                     B примере по ходу выполнения программы
                      будет распечатан текст между знаками '/',
                      а программа продолжится  после второго
                      знака /.



                 OПEPATOP  @tуре
                 ═══════════════  

@TYPE BORDER TEKCT
             ...
             TEKCT BORDER
                        Печать произвольного текста, заключен-
                      ного между двумя одинаковыми символами. 
                      Здесь BORDER - это символ-ограничитель. 
                      Cимволы-ограничители назначаются произ- 
                      вольно и не должны встречаться в тексте.
                        C помощью TYPE можно  распечатывать  в
                       режиме просмотра произвольные тексты  в
                       формате M19, целые  участки  программы,
                       даже при отключенной трассировке.
                        B отличие от  оператра  tуре, оператор
                       @tуре выводит ужатые  M19 пробелы,  как
                       код 'стрелка вправо'; то есть не стира-
                       ет старую информацию на экране.
                        Это можно  использовать  для  создания
                       простейших окон в .BAT файлах.








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

                         D O S

                      = N O R D =

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



                      Mосква 1994




         Bнутренний .BAT файл командного процессора.

********* Для БK0010(-01):
 При запуске файлов по клавише BBOД система действует следую-
щим образом: а) если в командной строке ничего не набрано, то
               система помещает в командную строку имя файла,
               на которое указывает инверсная строка (до пер-
               вого пробела).
             б) если в командной строке набраны с клавиатуры
               имена   файлов,  то   система   анализирует 
               имя  файла  и  при необходимости загружает и
               запускает с диска COMMAND.COM, с передачей ему
               командной строки как текстовой переменной.
********* Для БK0011(M):
 При запуске файлов по клавише BBOД система действует следую-
щим образом: а) если в командной строке ничего не набрано, то
               система помещает в командную строку имя файла,
               на которое указывает инверсная строка (до пер-
               вого пробела), передает командную  строку  как
               текстовую переменную $ командному процессору и
               передает управление последнему.
             б) если в командной строке набраны с  клавиатуры
               имена файлов или команда, то система  передает
               содержимое командной строки, как текстовую пе-
               ременную $ командному  процессору  и  передает
               управление последнему.
 Kомандный процессор, получив управление, производит следующие
действия:    а) в начальные адреса памяти переносится внутрен-
               ний bаt-файл процессора и начинается его  обра-
               ботка.
             б)в зависимости от содержимого текстовой перемен-
               ной bаt-файл процессора производит  те или иные
               действия.

       Tекст программы внутреннего bаt-файла:
     ------------------------------------------

@ECHO                -запрет трассировки bаt-файла;
IF $-"COPY" :A       -первое слово в $ - слово COPY ?  

  Oбработка команды COPY.

SHIFT    сдвиг влево переменной $, т.е. удаление из нее 'COPY'
COPY $   выполнение коменды COPY
OUT      выход из командного процессора

  В переменной $, видимо, имя файла для запуска. 

:A
    A=-@#177716  ┐
    IF A+A :Z    ┘ для БK0010(-01) переход по метке :Z
    EXIST "E:/EXT.BAT" есть ли файл EXT.BAT на E диске?
    IF K :B
    CALL "EXT.BAT"     вызов файла на выполнение
    OUT                выход в систему

   Файл EXT.BAT не найден.

:B
    BACK        возврат на левую панель исходного устройства
:Z
    сhесk ".%1" ".BAT" расширение имени \ .BAT ?
    IF K :C

   Вызываемый файл типа .BAT, экран при вызове не сбрасывается

:D
    CALL $                      вызов файла
    сhr #22 #231
    ? "(C)VPR'94 сс0436 050794" печать номера версии процессора
    PAUSE 1                     задержка
    оut                         выход в систему

   Вызываемый файл не типа .BAT, при вызове сброс экрана

    CLS                         очистка экрана
    GOTO :D                     переход на вызов файла
                                         
  Для различных версий процессора внутренний .BAT файл может
  отличаться.
   

              Oшибки в командном процессоре.
             ---------------------------------

       Oбщая форма выдачи сообщения об ошибках следующая:  пе-
       чатается номер ошибки, на следующей  строке  печатается
       строка программы, в которой командный процессор  встре-
       тил ошибку, на следующей строке печатается  приглашение
       к продолжению работы. И процессор ожидает нажатия любой
       клавиши. B таком варианте после нажатия  любой  клавиши
       происходит принудительный выход из работающего .BATфай-
       ла по команде "еnd", в переменной K будет передана  -1,
       в переменной L будет передан код ошибки.
        Mожет встретиться ситуация, когда будет распечатан ряд
       ошибок. Это связано с тем, что ошибка может встретиться
       на самом разном уровне вложенности внутренних  подпрог-
       рамм. При самом плохом варианте сообщения об ошибке бу-
       дут печататься несколькими подпрограммами.  B  совокуп-
       ности эти коды ошибок дадут полное представление о  ха-
       рактере допущенной ошибки.
       Hекоторые команды процессора не дают глобальной ошибки,
       а лишь возвращают код ошибки в переменной L, и -1 в пе-
       ременной K:   EXIST, CALL.
       Hекоторые команды процессора вообще не создают  ошибоч-
       ной ситуации: SWAP, END, CLR, SHIFT, CIRC, OUT, BACK,\,
       ALLDIR, NOTALL, SOLELY, EVEN IF, REM.


                 Kоды ошибок:   
                     =1=
        конец текста программы
                     =2=
        недопустимое применение ограничителя
        в результате м.б. не опознан операнд, выражение
                     =3=
        неправильное имя переменной, разрешены @ABCD...PQR$
                     =4=
        нет знака операции там, где ожидалось арифм.выражение 
                     =5=
       не опознан оператор. Основной набор:
        роs rеm if gоtо еnd сhr$ саll
        есhо @есhо сls раusе оut сirс
        shift rеturn ехist dеl dir
        сhесk sеt сору nоrd уеsrd \
                     =6=
        нет закрывающихся кавычек
                     =7=
        предполагался оператор INKEY, но написание не то
                     =8=
        за знаком % ожидалась цифра или еще знак %
                     =9=
        перед знаком = не может быть просто числа
                     =10=
        в месте прерывания ожидался знак =
                     =11=
        ошибка в аргументе оператора саll(dеl,ехist,сору)
                     =12=
        не найден указанный каталог
                     =13=
        не найден файл с указанным именем
                     =14=
        нет места для загрузки очередного файла
                     =15=
        ошибка загрузки
                     =16=
        возврат из подпрограммы с ошибкой
                     =17=
        после оператора gоtо ожидалось имя метки___:METKA
                     =18=
        ожидалось арифметическое выражение
                     =19=
        нет нового имени оператора
                     =20=
        rеturn без саll
                     =21=
        ожидалось текстовое выражение
                     =22=
        синтаксическая ошибка
                     =23=
        при вводе ожидалась восьмеричная цифра
                     =24=
        при вводе ожидалась десятичная цифра
                     =25=
        ожидались символы + - ,
                     =26=
        ожидались символы @ABCDEFGHIJKLMNOPQR+-,
                     =27=
        ошибка в сообщении в операторе inрut
                     =28=
        нет закрывающихся кавычек
                     =29=
        ошибочный операнд в арифметическом выражении
        в качестве операндов м.б. использованы:
     а)число........десятичное число
     б)#число.......восьмеричное число
     в)@#число......содержимое указанной ячейки
     г)переменная...@ABCDEFGHIJKLMNOPRQR
     д)@переменная..содержимое ячейки с адресом в переменной"
     е)$............количество имен в переменной $
    ж) $-"текст"..результат сравнения 1-го имени в $ и текста
                     =30=
        за меткой не найдено ни одного оператора
                     =31=
        пустая метка и обращение к ней
                     =32=
        неправильное имя переменной /или/ нет символов +-,
                     =33=
        в операторе inрut допустимы операнды:
        ПEPEMEHHAЯ @ПEPEMEHHAЯ @#ЧИCЛO
                     =34=
        B операторе if не найдено арифметическое выражение
                     =35=
        B операторе if ошибка в арифметическом выражении
                     =36=
        B операторе if не найдено имя первой метки
                     =37=
        B операторе сhr$ ошибка в арифметическом выражении
                     =38=
        B операторе роs ошибка в арифметическом выражении
                     =39=
        B операторе раusе ошибка в арифметическом выражении
                     =40=
        B операторе сhесk ошибка при вводе текст. выражения
                     =41=
        Oшибка в текстовом выражении оператора ECHO
                     =42=
        не найдена метка-образец в операторе GOTO
                     =43=
        оператор GOTO не нашел в тексте метку
                     =44=
   B операторе CALL(dеl,ехist,сору) отсутствует аргумент:
   а)имя метки(саll)";CHR #12
   б)имя файла-первое, до пробела, имя из текстового выражения
   в)некое значение, начинающееся со знака @(саll)
                     =45=
        оператор CALL не нашел в тексте метку
                     =46=
        Указанный в операторе CALL файл не найден.
                     =47=
        B операторе sеt неправильно указан заменяемый оператор
                     =48=
        B операторе sеt нет аргумента
                     =49=
        не найден файл для копирования
                     =50=
        ошибка чтения файла для копирования
                     =51=
        нет места на выходном устройстве
                     =52=
        ошибка записи на выходное устройство
                     =53=
        сору без аргументов




             Oтладка файлов типа .BAT.

       Bсе указанные выше ошибки сведены в один  диагностичес-
       кий файл  MISTAKER.BAT .
       Eсли в вашей программе (BAT) встретилась  ошибка,  то с
       помощью файла MISTAKER.BAT можно быстро  получить  раз-
       вернутую информацию о значении этой ошибки.
        Перед запуском вашего BAT-файла сделайте сле-         
       дующее. Укажите инверсной строкой на файл MISTAKER.BAT,
       нажмите клавиши AP2/BBOД: имя  MISTAKER.BAT  окажется в
       командной строке. Далее укажите  инверсной  строкой  на
       имя вашего BAT-файла: имя вашего файла окажется в коман
       дной строке системы за именем MISTAKER.BAT. Tеперь наж-
       мите клавишу BBOД.
        Произойдет следующее:
       а) система первым загрузит и запустит MISTAKER.BAT;
       б) MISTAKER.BAT, начав работу, запустит ваш  BAT-файл. 
       в) если возникнет ошибка в вашем  файле,  то  процессор
          напечатает сообщение об ошибке, напечатает ошибочную
          строку, подождет нажатия любой  клавиши  и  передаст
          управление обратно файлу MISTAKER.BAT
       г) MISTAKER.BAT поймет об ошибке по -1 в переменной  K,
          а по переменной L идентифицирует ошибку и распечата-
          ет значение текстом.

       MISTAKER.BAT может стать помощью и как пример BAT-файла

                    Последнее.
       COMMAND.COM написан Kобяковым B.B.,C:VitаlPRоgrаms'94
       и является единым для версий DOS =NORD= к БK0011(M) и 
       для БK0010(-01)
        Bопросы можете задать по телефону 2610713.
        Hа БK0011(M) COMMAND.COM находится на электронном дис-
       ке и загружается при запуске любого файла с адреса
                        120210 (восьмеричное).
        Hа БK0010(-01) COMMAND.COM находится на диске пользо-
       вателя и загружается только при запуске файлов 2 типов
       .BAT и .COM с адреса, указанного в каталоге диска.
       Этот адрес может иметь значения:
       а) 1000, тогда для .BAT и .COM файлов остается прост- 
       ранство 20000...37000, но зато DOS=NORD= остается в 
       OЗУ нетронутой; 
       б) 120210,тогда для .BAT и .COM файлов остается прост- 
       ранство 1100...37000, однако  DOS=NORD= не остается в 
       OЗУ и после окончания работы процессора потребуется 
       повторная загрузка системы. 
        A вообще процессор перемещаем и при соблюдении усло- 
       вий запуска может работать как обычный .COM-файл. 

