Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Dos7book

.pdf
Скачиваний:
75
Добавлен:
09.02.2015
Размер:
5.1 Mб
Скачать

Глава 1. Знакомство с клавиатурой в DOS

Для всех версий DOS основное устройство ввода клавиатура. Нажатие каждой

ее клавиши вызывает исполнение по крайней мере одного заранее загруженного в память (резидентного) программного модуля. Иногда исполнение такого модуля вообще никак не проявляет себя, но чаще сводится к индикации на экране соответствующего клавише символа. Однако некоторые клавиши, называемые активными (или "горячими" = "hot" keys), инициируют сложные последовательности вложенных вызовов. Резидентные программные модули, вызываемые по нажатию клавиши, могут быть загружены в память

-базовой системой ввода-вывода (BIOS);

-загрузчиком DOS (действующим только в процессе загрузки);

-драйвером консоли (т.е. клавиатуры и экрана) в составе ядра DOS;

-командным интерпретатором (обычно это файл COMMAND.COM).

Вэтой главе не описывается действие других программных модулей, которые могут быть загружены устанавливаемыми драйверами, файл-менеджерами (Norton Commander, Volcov Commander и т.п.) или другими резидентными программами. Загружаясь позже, они могут перехватывать вызовы и тем самым заменять действия клавишей или подменять их частичной эмуляцией. Командная строка, которую представляют файл-менеджеры, уже не эквивалентна исходной командной строке DOS: значительная часть исходных функций клавиатуры перехвачена и дезактивирована (пример в разделе 6.25).

Следующие разделы первой главы представляют функции наиболее распространенной сейчас "улучшенной" ("enhanced") клавиатуры, различные модели которой насчитывают от 101 до 108 клавишей. Эволюция функций описана в той последовательности, в которой клавиши активизируются в процессе загрузки MS-DOS7. Конечной стадией эволюции предполагается та, которая формируется в результате загрузки командного интерпретатора COMMAND.COM.

1.01Клавиши вызова операций системы BIOS

Вмомент включения электропитания компьютер начинает работать под управлением базовой системы ввода-вывода (BIOS). С самого начала BIOS загружает обработчик прерывания INT 09 (8.01-09), воспринимающий вызовы контроллера клавиатуры по линии IRQ 1. Благодаря этому BIOS начинает чувствовать каждое нажатие любой клавиши, но только некоторые клавиши вызывают отклик. Многие версии BIOS начинают реагировать на нажатие следующих клавишей и их комбинаций:

Ctrl-Alt-Deleteинициирует перезагрузку компьютера.

11 –

Глава 1 Знакомство с клавиатурой в DOS

Delete – запускает программу BIOS Setup, позволяющую указать параметры для системы BIOS (примечания 1 и 2).. Клавиша "Delete" автоматически дезактивируется примерно через 2 секунды, так что при необходимости ее надо держать нажатой с момента включения компьютера.

Pause/Break (или Ctrl-Break)вызывает временный останов загрузки до нажатия какой-либо другой клавиши, позволяя тем самым прочитать выведенные на экран сообщения.

Shift-PrtScr– посылает содержимое буфера экрана на принтер, подключенный к порту LPT1. Принтер должен быть включен и должен быть способен к взаимодействию с системой BIOS. Принтеры с интерфейсом USB, а также разработанные под

WINDOWS ("designed for WINDOWS") для этого не годятся.

Единого стандарта на клавишные функции систем BIOS не существует; в разных компьютерах их реализация может несколько отличаться. Например, BIOS версии 8.01 фирмы American Megatrends дополнительно по нажатию клавиши F8 выводит меню альтернатив загрузки. Тем не менее некоторые функции фактически стали стандартом для всех современных версий BIOS: в частности, функции клавиши Delete (примечание 2) и клавишной комбинации Ctrl-Alt-Delete.

Активные клавиши, установленные системой BIOS, могут быть дезактивированы, как любая программно реализованная функция. В частности, комбинация Shift-PrtScr нередко дезактивируется программой, "зашитой" в постоянное запоминающее устройство видеокарты. Другие активные клавиши, установленные системой BIOS, обычно не дезактивируются намеренно, но тем не менее могут пострадать в результате сбоев, приводящих к потере или искажениям данных в таблице прерываний (от 0000:0000h до 0000:0400h) или в области данных BIOS (A.01-1). Поэтому наиболее важная функция выхода в перезагрузку во многих компьютерах аппаратно дублирована кнопкой RESET на лицевой панели системного блока.

Примечание 1: в самой программе BIOS Setup могут быть активизированы другие клавиши это зависит от версии BIOS. Ими приходится пользоваться, когда нужно изменять настройки программы BIOS Setup. Одна из этих настроек, в частности, позволяет запретить выведение логотипа BIOS, чтобы он не скрывал результаты стартовых тестов.

Примечание 2: в некоторых (преимущественно старых) компьютерах запуск программы BIOS Setup может осуществляться клавишами F1, F2, F10, ESC или клавишными комбинациями F3-F2, Ctrl-Alt-S, Ctrl-Alt-Ins, Ctrl-Alt-Esc.

Примечание 3: на многих "улучшенных" клавиатурах выпуска 1990-х годов имелась клавиша TURBO, причем комбинация TURBO-F11

– 12 –

Глава 1 Знакомство с клавиатурой в DOS

включала и выключала блокировку клавиатуры, а комбинация TURBO-F12 включала и выключала блокировку звуковых сигналов. На современных клавиатурах клавиша TURBO обычно отсутствует.

Примечание 4: на многих моделях клавиатур имеются особые клавиши управления электропитанием компьютера: POWER, SLEEP и WAKE UP. Они также предназначены для обслуживания системой BIOS, но эти функции бывают "перехвачены", в частности, операционными системами Windows-XP и Windows Vista.

1.02Клавиши вызова операций загрузчика DOS

Входе загрузки наступает момент, когда на экране дисплея логотип BIOS сменяется логотипом операционной системы Windows-95/98. Это значит, что система BIOS завершила свою начальную миссию и передала управление загрузчику операционной системы. В частности, у операционных систем Windows-95/98 и MS-DOS7 первичный загрузчик один и тот же. Он входит в состав файла IO.SYS и начинает свою деятельность со считывания параметров загрузки DOS из файла MSDOS.SYS (5.01-01), а затем в соответствии со считанными параметрами временно активизирует еще несколько "горячих" клавишей и клавишных комбинаций:

F5 – изменяет режим последующей загрузки WINDOWS на безопасный (Safe Mode), при котором графическая оболочка (GUI) загружается с установками по умолчанию, а

конфигурационные файлы (CONFIG.SYS and AUTOEXEC.BAT)

полностью игнорируются.

SHIFT-F5 – загрузка в режим командной строки ("command prompt only" mode), т.е. процесс завершается по окончании нормальной загрузки MS-DOS7, далее система WINDOWS не загружается.

F6 – изменяет режим последующей загрузки WINDOWS на безопасный (Safe Mode), так же как и клавиша F5, но дополнительно устанавливает службы сетевой поддержки.

F8 – вызывает индикацию стандартного загрузочного меню системы WINDOWS и останавливает процесс загрузки до выбора пользователем пункта в этом меню. В версии MS-DOS8 действие клавиши F8 дублируется клавишей CTRL.

SHIFT-F8переводит исполнение командных строк в конфигурационных файлах в пошаговый режим; это позволяет избежать исполнения отдельных строк по выбору пользователя.

Перечисленные функции "горячих" клавишей в MSDOS7 и MSDOS8 отличаются от тех, которые использовались в предшествовавших версиях DOS. На количество активизируемых "горячих" клавишей и длительность поддержания их в

– 13 –

Глава 1 Знакомство с клавиатурой в DOS

активном состоянии влияют параметры (BOOTDELAY, BOOTKEYS, BOOTMULTI), указываемые в файле MSDOS.SYS (5.01-01). Когда MS-DOS7

используется как отдельная операционная система, и пакет программ, составляющий собственно систему WINDOWS, вообще недоступен, тогда, конечно, загрузка графической оболочки системы WINDOWS не может быть выполнена, и нажатия соответствующих клавишей будут проигнорированы.

Если пользователь успеет вовремя нажать клавишу F8, то на экране появится стандартное загрузочное меню операционной системы Windows. Пока загрузочное меню остается на экране, загрузчик воспринимает нажатия клавишей управления курсором вверх-вниз, клавиши ENTER и числовых клавишей (0 – 9) в основной части клавиатуры. Если переключатель NUMLOCK (4.23) включен, клавиши

числового набора в правой части клавиатуры позволяют выбирать пункт меню по номеру. Когда выбор сделан, все связанные с меню клавиши дезактивируются. Если выбранным пунктом меню не предусмотрено иное, то затем загрузчик переходит к исполнению команд из строк конфигурационного файла CONFIG.SYS (пример в разделе 9.01-01).

При пошаговом исполнении команд из файла CONFIG.SYS загрузчик запрашивает подтверждения, на которые можно отвечать нажатием клавишей Y (= yes), N (= no), ENTER (= yes) или A (= yes для всех последующих строк).

Нормальное (не-пошаговое) исполнение команд файла CONFIG.SYS по умолчанию не контролируется, потому что экран дисплея в это время продолжает воспроизводить логотип операционной системы Windows. Однако выведение логотипа можно запретить, указав параметр "Logo=0" в файле MSDOS.SYS (подробнее в разделе 5.01-01). Тогда на экране будут видны быстро смещающиеся сообщения от загружаемых драйверов. Чтобы внимательно рассмотреть эти сообщения, процесс исполнения команд можно остановить нажатием клавиши PAUSE/BREAK или комбинации CTRL-S. Затем после нажатия любой клавиши процесс исполнения продолжится.

Закончив интерпретацию всех строк конфигурационного файла CONFIG.SYS, загрузчик DOS дезактивирует задействованные им "горячие" клавиши и передает управление командному интерпретатору COMMAND.COM.

Примечание 1: в версии 7.00 MS-DOS загрузчик DOS активизировал клавишу F4 для загрузки той DOS, "поверх" которой была установлена операционная система Windows-95. Но начиная с версии 7.10 возможность загрузки старой DOS не поддерживается.

1.03Активные клавиши при исполнении командных файлов

Интерпретатор COMMAND.COM принимает управление на себя, когда процедура загрузки резидентных программ еще не завершена. Его первая миссия

– 14 –

Глава 1 Знакомство с клавиатурой в DOS

состоит в интерпретации строк последнего конфигурационного файла AUTOEXEC.BAT (пример в разделе 9.01-02). Считывая команды из файла, интерпретатор действует вполне самостоятельно, но при этом роль пользователя все же не сведена к нулю. Во-первых, отказавшись от воспроизведения на экране логотипа Windows (5.01-01), можно просматривать сообщения, выводимые по ходу исполнения команд из файла AUTOEXEC.BAT. Во-вторых, имеются активные клавиши, посредством которых можно временно остановить или вообще прекратить исполнение любого командного файла.

Клавиши и клавишные комбинации, продолжающие оставаться активными во время исполнения командных файлов, инициируют довольно сложную последовательность вызовов (подробнее в разделе 8.01-95), в которую вовлечены резидентные модули ядра DOS и обработчики прерываний, установленные системой BIOS. Из-за этого в каждом конкретном компьютере перечень активных клавишей и характер их действия могут зависеть от версии системы BIOS. Тем не менее в большинстве AT-совместимых компьютеров задействуемые "горячие" клавиши одинаковы.

Клавиша BREAK (Pause) вызывает временный останов исполнения, позволяет прочитать индицируемые сообщения, но не дает возможности прекратить исполнение командного файла: после нажатия любой клавиши исполнение возобновляется.

Прервать исполнение командного файла можно с помощью "горячих" клавишных комбинаций CTRL-C, CTRL-BREAK и ALT-03, причем цифры 03 в комбинации ALT-03 должны быть набраны в группе цифровых клавишей в правой части клавиатуры. Действие этих клавишных комбинаций зависит от того, как был запущен на исполнение сам интерпретатор COMMAND.COM. Если интерпретатор был запущен с параметрами /K или /P (6.04), то перечисленные клавишные комбинации останавливают исполнение и предлагают выбор, прекратить исполнение или нет:

"Terminate batch job? Y/N"

Но когда интерпретатор COMMAND.COM запущен для исполнения одиночной задачи с параметром /C (6.04), как обычно это делают файл-менеджеры, то клавишные комбинации CTRL-C, CTRL-BREAK и ALT-03 прекращают исполнение сразу, не давая шанса на продолжение.

Комбинация CTRL-S вызывает временный останов, но всегда дает шанс продолжить исполнение после нажатия любой клавиши, кроме комбинаций

CTRL-C, CTRL-BREAK, ALT-03 и CTRL-2. Последние действуют в зависимости от условий запуска интерпретатора COMMAND.COM, как было описано выше, но комбинация CTRL-2 выделяется тем, что прекращает исполнение только если оно

– 15 –

Глава 1 Знакомство с клавиатурой в DOS

уже было приостановлено клавишной комбинацией CTRL-S. Нормальный процесс исполнения командных файлов не прерывается комбинацией CTRL-2.

Функции клавиатуры, прерывающие исполнение командных файлов, могут быть заблокированы командой CTTY NUL (3.07), указываемой в одной из строк исполняемого командного файла. Но пользование такой блокировкой бывает оправдано только в особых обстоятельствах (пример в разделе 9.03-02).

Закончив исполнение файла AUTOEXEC.BAT, интерпретатор COMMAND.COM должен будет передать управление загрузчику "графической оболочки" операционной системы Windows – файлу WIN.COM. Но это не произойдет, если

файл WIN.COM не будет найден (например, при загрузке с дискеты);

в момент начала загрузки была нажата комбинация Shift-F5 (1.02);

в загрузочном меню (1.02) выбран пункт "Command prompt only";

в файле MSDOS.SYS (5.01-01) указан параметр "BootGUI=0";

в команде DOS указан параметр SINGLE (примечание 1 к 4.08).

Влюбом из перечисленных пяти случаев вместо операционной системы Windows будет загружена MS-DOS7, интерпретатор COMMAND.COM перейдет в режим ввода командных строк с клавиатуры, покажет на экране свое "приглашение", и с этого момента начнет работать с клавиатурой совсем по-другому.

1.04Ввод командных и текстовых строк

Когда интерпретатор показывает приглашение командной строки, он принимает ввод с клавиатуры через драйвер консоли (устройства CON). Последний позволяет вводить буквы, цифры и специальные символы в соответствии с таблицей раскладки клавиатуры, заранее загруженной в память компьютера. Символы можно вводить как с помощью соответствующих клавишей, так и по номеру в стандартном коде ASCII: для этого надо, придерживая клавишу ALT, набрать номер на группе цифровых клавишей в правой части клавиатуры. Каждый

следующий символ добавляется к имеющимся и одновременно увеличивает на единицу указатели текущей позиции как командной строки, так и внутреннего буфера, в котором автоматически запоминается предыдущая командная строка.

Выборка символов, набираемых с помощью буквенных клавишей, зависит от положения управляющих (регистровых) клавишей SHIFT и CAPSLOCK. Нажатие клавиши CAPSLOCK переключает клавиатуру в верхний регистр заглавных букв и обратно. Клавиша SHIFT тоже переключает клавиатуру в верхний регистр, но только на то время, пока она не отпущена. DOS предоставляет

ограниченные возможности редактирования содержания вводимых строк посредством функциональных клавишей, описываемых в разделе 1.05.

– 16 –

Глава 1 Знакомство с клавиатурой в DOS

Все перечисленные особенности действительны также при вводе текстовых строк. Переход к вводу текстовых строк происходит в результате обращения к драйверу консоли (устройства CON), например, с помощью следующей команды:

COPY CON FILENAME.TXT

здесь FILENAME.TXT – произвольное имя файла, куда надлежит записать вводимые строки текста.

Команда COPY является не отдельной программой, а встроенной командой командного интерпретатора COMMAND.COM (3.06). Другие программы также могут вызывать режим ввода текстовых строк, если способны обращаться для ввода к драйверу консоли.

Различия режимов ввода командных и текстовых строк проявляются в том, что происходит с набранной строкой, когда пользователь подтверждает окончание набора нажатием клавиши ENTER или эквивалентной клавишной комбинации CTRL-M. При вводе текстовых строк происходит запись строки во внутренний буфер, замещение там предыдущей строки и открытие для ввода новой строки. Конец введенной строки отмечается двумя байтами 0Dh 0Ah, и в таком виде она присоединяется к области памяти, где записаны все предшествовавшие строки, образуя тем самым многострочный текст. Интерпретатор COMMAND.COM позволяет послать этот текст в файл или в указанный канал (подробнее в разделе

3.06).

Возвращение обратно к режиму ввода командных строк производится нажатием комбинаций клавишей F6-ENTER, CTRL-Z-ENTER или ALT-26-ENTER (в

последней комбинации цифры "26" должны быть набраны в группе цифровых клавишей в правой части клавиатуры).

При вводе командных строк нажатие клавиши ENTER также вызывает запись строки во внутренний буфер, но потом события разворачиваются иначе:

происходит разбор содержимого буфера с целью выделения имени команды и выяснения, является ли она встроенной командой интерпретатора или именем отдельной программы (утилиты). Для отдельных программ (утилит) проводится их поиск (2.02-02), после чего программа считывается с носителя и подготавливается к исполнению. Потом управление передается подготовленной программе, а когда исполнение завершается, управление возвращается командному интерпретатору,

который выводит на экран новое приглашение командной строки и начинает очередной цикл ожидания ввода команды пользователем.

Если строка содержит вызов на исполнение командного файла, то нажатие клавиши ENTER вызывает переход интерпретатора в режим построчного считывания команд из этого файла. Когда исполнение командного файла завершится, интерпретатор вернется к обычному вводу командных строк с клавиатуры.

– 17 –

Глава 1 Знакомство с клавиатурой в DOS

Конкретное содержание командной строки, конечно, зависит от того, какому интерпретатору она адресована, и представляет собой тему для отдельного разговора, который начнется с главы 2 и будет продолжаться на протяжении всех последующих глав этой книги.

1.05Клавиши редактирования вводимых строк

Самой "горячей" клавишей при вводе строк, конечно, является клавиша ENTER, роль которой была показана в предыдущем разделе 1.04. Помимо нее, однако, при вводе строк действуют еще несколько клавишей и клавишных комбинаций, наделенных особыми функциями редактирования строк и управления. Оба интерактивных командных интерпретатора в DOS (COMMAND.COM и DEBUG.EXE) наследуют эти функции, имеющие долгую историю в предшествующих поколениях компьютеров. Некоторые из них весьма архаичны, но некоторые до сих пор активно используются.

Клавиша BACKSPACE (левая стрелка) уменьшает на 1 значение указателя позиции как для текущей строки, так и для внутреннего буфера. Последний знак строки перестает воспроизводиться на экране, и это знакоместо готово принять следующий вводимый знак. Клавишные комбинации CTRL-H и ALT-08, левая стрелка среди

клавишей управления курсором и левая стрелка в группе цифровых клавишей в правой части клавиатуры действуют так же.

Комбинации CTRL-2, CTRL-C, CTRL-BREAK и ALT-03 аннулируют текущую строку и открывают для набора новую пустую строку.

При построчном вводе текста пропадает весь набранный к тому моменту текст.

Комбинации CTRL-J, CTRL-ENTER и ALT-10 сворачивают текущую

строку и дают возможность набирать ее оставшуюся часть в следующем ряду знакомест. Это позволяет видеть набираемую строку полной длины (до 128 знаков) на экране, ширина которого обычно составляет 80 знакомест. Свернутая строка воспринимается и исполняется так же, как непрерывная.

Комбинации CTRL-G и ALT-07 вводят код 07h ("Звуковой сигнал"). В текстовых строках он себя не проявляет, но когда строка с этим кодом подается для воспроизведения на экране, то раздается короткий звуковой сигнал ( beep ).

Комбинации CTRL-P и ALT-16 переключают вывод данных с дисплея на принтер и обратно. Это бывает опасно, если принтер не готов к работе, не подсоединен или подключен не к порту LPT1. В каждом таком случае на экран выводится сообщение "Abort,

– 18 –

Глава 1 Знакомство с клавиатурой в DOS

Retry?" ("Отменить, Повторить?"), но выбор альтернативы "Abort" ("Отменить") не восстанавливает исходное состояние. Чтобы вернуться в командную строку, нужно нажать CTRL-P еще раз, иначе вывод сообщения "Abort, Retry?" будет продолжаться.

Клавиша DEL (DELETE) при редактировании строк влияет только на внутренний буфер: увеличивает на 1 значение указателя позиции в нем. Это воспринимается как смещение предыдущей строки в буфере на одно знакоместо влево. Если после нажатия клавиши DEL (DELETE) производится копирование в текущую строку, то один знак из предыдущей строки оказывается пропущен.

Клавиша ESC, а также комбинации CTRL-ESC, CTRL-[ и ALT-27

сбрасывают текущую строку без сохранения ее в буфере,

закрывают ее изображение на экране знаком обратной косой черты ( \ ), и открывают для набора новую пустую строку. Предыдущая строка в буфере сохраняется. Перечисленные действия не вызваны знаком обратной косой черты, его можно вводить в строку наравне с другими знаками.

Клавиша F1 дополняет текущую строку одним знаком, считываемым из той же позиции в предшествующей строке, которая хранится во внутреннем буфере. Правая стрелочка среди клавиш управления

курсором и правая стрелочка в группе цифровых клавиш в правой части клавиатуры действуют так же.

Клавиша F2 вызывает паузу ожидания ввода одного знака. Следующий вводимый знак на экране не отображается. Если этот знак не

содержится в оставшейся части предыдущей строки во внутреннем буфере, то нажатие клавиши F2 аннулируется без последствий; но если введенный знак там присутствует, то группа знаков, предшествующих введенному, копируется из внутреннего буфера в текущую строку.

Клавиша F3 копирует предыдущую строку из внутреннего буфера на свободное пространство текущей строки. Если текущая строка уже содержит несколько знаков, то они сохраняются, и знаки из соответствующих знакомест внутреннего буфера не выводятся.

Клавиша F4 вызывает паузу ожидания ввода одного знака. Следующий вводимый знак на экране не отображается. Если этот знак не

содержится в оставшейся части предыдущей строки во внутреннем буфере, то нажатие клавиши F4 аннулируется без последствий; но если введенный знак там присутствует, то предшествующие ему знаки удаляются из буфера. Содержимое буфера сдвигается влево, так что введенный знак занимает то же положение в буфере, на котором находится курсор в текущей

– 19 –

Глава 1 Знакомство с клавиатурой в DOS

строке. Это позволяет предотвратить копирование фрагмента предыдущей строки при нажатии клавиш F1 или F3.

Клавиша F5 копирует текущую строку во внутренний буфер, закрывает ее на экране символом "at" ( @ ) и открывает для набора новую пустую строку. Копируемая строка не исполняется и не присоединяется к тексту. Перечисленные действия не вызваны символом "at" ( @ ), его можно использовать в строке наравне с другими знаками.

Клавиша F7 и комбинация ALT-00 вводят код 00h, который маркирует конец интерпретируемой части командной строки. Последующие вводимые знаки при интерпретации игнорируются.

Клавиша INS (INSERT) изменяет на противоположное состояние бита по адресу 0040:0017 (A.02-3), который останавливает приращение

значения указателя позиции во внутреннем буфере при вводе знаков в текущую строку. Если Вы скопировали часть предыдущей строки, затем остановили приращение указателя клавишей INS, ввели несколько знаков с клавиатуры, а потом копируете оставшуюся часть предыдущей строки, то введенные с

клавиатуры знаки оказываются вставленными между знаками предыдущей строки. Для восстановления нормального приращения указателя нужно нажать клавишу INS еще один раз.

Клавиша TAB, а также комбинации CTRL-I или ALT-09 вводят код 09h горизонтальной табуляции. При выдаче этого кода для индикации на экране он автоматически заменяется на 8 пробелов. При записи текста в файл код 09h пробелами не заменяется. Некоторые программы редактирования текстов сами заменяют код 09h пробелами, и тогда количество пробелов на один код табуляции может быть не равно 8.

Действия перечисленных клавишей с функциями редактирования бывают часто перехвачены и подменены резидентными программами, которые загружаются позже командного интерпретатора. В частности, файл-менеджеры (Norton Commander, Volcov Commander, и др.) обычно перехватывают действия клавишей INS, DEL, F1 – F7 и некоторых других, дезактивируют их или наделяют иными функциями (6.25). Тем не менее, перечисленные исходные функции всегда остаются действующими при построчном вводе текста, а также при интерактивной работе с интерпретатором DEBUG.EXE.

1.06Раскладки клавиатуры и индицируемые символы

По умолчанию MS-DOS7 использует американский (US) набор знаков, определяемый кодовой страницей 437, но дает возможность установить другую

– 20 –

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]