Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование для начинающих #19


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Программирование для начинающих

Выпуск 19

3 JUN 2001

 
 
 
Ведущий рассылки: Вячеслав Мацнев
e-mail: stac@stacmv.net
Мое почтение уважаемым подписчикам!

В этом выпуске читайте:

ОТСЕБЯТИНА

Председатель: Здравствуйте, дамы и господа! Прошу садиться.

Сегодня на повестке дня следующие вопросы:

  I. Изменения в домашнем задании basic/2.
 II. Письма зарегистрированных подписчиков.
III. Коллективная разработка программы.

Вопросы по повестке у кого-нибудь имеются?

Все: Нет, нет. <легкий шум в зале>

Председатель: Тихо-тихо, господа. Хорошо, приступим к пункту I. Слово для доклада имеет преподаватель Бейсика, господин Байсиков.

Байсиков: Господа, на прошлой неделе на педсовете мы приняли решение изменить второе домашнее задание по Бейсику (код: basic/2). Изменения коснулись 1-ой и 7-ой задач. Первая была немного усложнена, а седьмая добавлена (раньше мы ее не имели). Текущие версии задач были разосланы всем вам вместе с программой заседания.

Задача basic/2/1
  1. Имеется суперсекретная дверь с тремя замками. Ключами от замков обладают три человека (каждый одним ключом). Дверь открывается только тогда, когда любые два человека (а не три) открывают свои замки. Напишите условие (а не программу!) открывания двери, используя логические функции.
    Укажите, как можно записать это условие, не используя логические функции.
  2. Имеется здание-мишень, состоящее из трех секций (комнат), расположенных по одной линии:
    
              *-----*-----*-----*
              |  1  |  2  |  3  |
              *-----*-----*-----*
    
    В секции 1 находится взрывчатка.

    В здание производится метание гранаты. Она может:

      • не долететь до здания
      • попасть в одну из трех секций
      • взорваться
      • не взорваться

    В случае взрыва гранаты, уничтожается секция здания, в которую она попала. В случае взрыва секции 1, взрывается также и секция 2.

    Напишите условия взрыва каждой секции (всего три условия).

Задача basic/2/7
Напишите программу, которая будет рисовать рамки прямоугольной формы, используя символы псевдографики, в произвольном месте экрана.

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

Председатель: Спасибо, господин Байсиков. Есть ли у вас, дамы и господа, комментарии, вопросы, предложения?

Новикова: Господин Председатель, позвольте...

Председатель: Да, конечно, госпожа Новикова. Друзья, госпожа Новикова впервые на нашем заседании.

Новикова: Господин Байсиков, не могли бы Вы сказать, как ознакомиться с остальными задачами.

Байсиков: Спасибо. Это очень интересный вопрос. Особенно для тех, кто только что к нам присоединился. <еле слышное хихиканье в зале, Председатель сердито покашливает и все замолкают> Второе домашнее задание мы публиковали в 13-ом выпуске рассылки. Ну, и конечно, текущий его вариант имеется на нашем сайте: http://stacmv.nm.ru/edu_dz_basic2.html.

Хорошеев: Вопрос к уважаемому преподавателю Байсикову. Господин Байсиков, тем, кто уже выполнил и послал на проверку 1-ую задачу, нужно ли ее переделывать?

Байсиков: Рад, что Вы спросили. Нет, переделывать задачу 1 не нужно, но только если она уже была зачтена до внесения данных изменений в домашнее задание.

Бэфин: У меня предложение не по второму ДЗ, а вообще, по всем. Предлагаю домашние задания уменьшить в объеме до одной, но объемной задачи. Давать время народу на решение и разбирать задание в ближайшем выпуске рассылки.

Председатель: Поступило предложение. Давайте его обсудим: stac@stacmv.net

Председатель: Ок, переходим к пункту II. Слово имеет Александр Данилович Министратор.

А.Д.Министратор: Недавно зарегистрированным подписчикам было предложено проанализировать ситуацию с рассылкой за прошедший год. Мы получили много писем и благодарим всех, кто написал. Наиболее интересные письма в ближайшее время будут опубликованы на нашем сайте: http://stacmv.nm.ru/lib_mail_1stresults.html
Если кто-нибудь из авторов опубликованных писем против публикации, сообщите мне и ваше письмо будет убрано.

Главбухов: Я слышал, что за самое интересное письмо был обещан приз. Как я могу получить его?

А.Д.Министратор: Да, господин Спонсоров, который сейчас болен, обещал нам предоставить несколько призов. Первыми о них узнают авторы лучших писем. Но господина Главбухова <просматривает свои бумаги> в нашем списке нет.

Главбухов: А...

Председатель: Отлично, переходим к последнему пункту. Кто будет говорить? <оглядывает присутствующих>

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

Хорошеев: Да, мы хотим работать самостоятельно. Но, даже, если у нас есть все необходимые знания, у нас совсем нет опыта.

Знайкин: Ну, допустим, кое у кого есть и опыт ...

Хорошеев: Подождите. Это у Вас что ли? А, вот, у меня нет. И что, мне сейчас дадут написать программу гораздо сложнее тех, что были в домашних заданиях. Я не уверен, что смогу написать ... А начинать, а потом бросать ... не за этим я здесь.

Знайкин: Вы забываете, что у нас есть преподаватель, который будет Вам помогать...

Хорошеев: Ага, мы проверки ДЗ по месяцу ждем, а тут сто человек будут писать большую программу и все, естественно, по разному. Как Вы будете проверять, господин Байсиков?

Байсиков: Пока не думал над этим, если честно.

Новикова: Ну, допустим, и не сто человек будут писать. Я еще и первое ДЗ не доделала, а вы говорите большую программу и самостоятельно. Я, вообще пока не въехала, что к чему.

Бэфин: И она не одна такая, между прочим. Кто-то въезжает, кто-то не въезжает, а большинство, вообще пешком ходят... ха.

Новикова: Вот, Вам смешно.

Знайкин: Да чего Вы шум-то подняли, как скажут, так и будет.

Байсиков: Не уверен. У меня уже была однажды подобная идея - не пошла, на нее никто внимания не обратил. Я бы и сейчас не стал этого затевать, да средний подписчик вырос, окреп, так сказать, рвется работать.

Средний: Э, не, не правы Вы, товарищ учитель, я скорее потолстел, чем вырос.

Хорошеев: Проснулся. А тебя никто и не имел в виду. Преподаватель говорил о среднем, а не о Среднем.

Средний: А какая разница-то?

Председатель: Так, прекратите. Есть проблема, давайте, предлагайте варианты решений.

Байсиков: Действительно, друзья, что-то мы расшумелись, а все без толку. Итак, вариант номер один. В рассылке поставим задачу, разберем ее так и сяк, и дадим ее в качестве домашнего задания.

Хорошеев: Что такое, в самом деле? Мы уже битые 29 минут говорим, что это не приемлемо, а Вы снова это предлагаете.

Байсиков: Ладно-ладно. Пусть это будет базовым вариантом, должны же мы из чего-то выбирать. Теперь давайте его изменять или предлагайте другие.

Главбухов: А что если эту задачу не проверять. Т.е. код не проверять. Если программа работает как надо, то все хорошо, если заметны какие-нибудь ошибки - плохо.

Председатель: А как находить тогда ошибки, если не проверять программы?

Главбухов: Непосредственным тестированием.

Байсиков: Не пойдет. Я уже пытался организовать подобное тестирование. Это называется задача basic/1/7. Кто-нибудь ее делал?

Хорошеев: Да, что-то было такое...

Знайкин: Э...

Новикова: Я еще до нее не дошла, на шестой застряла :).

Знайкин: Бэфин?

Бэфин: Что? А, я тоже не дошел.

Хорошеев: Пешком ходишь? :-)

Председатель: Прекратите, не в театре.

А.Д.Министратор: Может подписчиков вообще не напрягать?

Председатель: Это как?

А.Д.Министратор: Сначала будем действовать по варианту, предложенному господином Байсиковым: поставим задачу, разберем все в рассылке, а потом...

Главбухов: ... дадим ее в качестве домашнего задания. Отличная идея, я за!

Председатель: Не перебивайте Александра Данилыча.

А.Д.Министратор: Действительно, не перебивайте, я вовсе не это хотел сказать. Так вот, поставим задачу, а потом сами ее и решим, а подписчикам выдадим готовое.

Хорошеев: Мы можем просто книжку почитать. В книжках часто так делается, как Вы предлагаете.

Байсиков: Можно добавить интерактивности, выносить те или иные вопросы на обсуждение.

Хорошеев: Но это не получится настолько интерактивно и интересно, как если бы мы сами все писали. Да Вы и сами говорили, что надо вначале побиться лбом о стенку, попытаться все делать самим от начала до конца, а потом уже использовать готовое.

Байсиков: Ну, именно такими словами я не говорил.

Хорошеев: Хорошо, но я именно так Вас понял.

Новикова: И я. Подписываясь на рассылку, я совсем не умела программировать. Сейчас я уже могу написать простенькую программку. Простенькую, но зато сама! И это самое важное, потому что, если бы мне просто нужна была бы программа, я бы попросила нашего программиста ее написать или бы скачала в Интернете. Но я хо-чу са-ма писать программы! Поэтому я буду голосовать против второго варианта.

Хорошеев<Знайкину>: А женщины иногда говорят умные вещи.

Знайкин<Хорошееву>: Иногда, но я бы за программой пошел на Митино, так дешевле :).

Председатель: Прекрасно, у нас есть уже два варианта, и активность собравшихся повышается.

Хорошеев: Прекрасно, у нас есть два варианта, подходящих для администрации и совсем неприемлемых для подписчиков.

Председатель: А что приемлемо для подписчиков?

Знайкин: Подписчики хотят хлеба и зрелищ :).

Байсиков: Давайте дадим всем задачу. Кто захочет ее делать тот будет, кто не захочет, тот не будет.

Бэфин: А я, вообще, за то чтобы всем раздать разные задачи, а не одну и ту же.

Хорошеев: Да эта одна у всех по разному получится, так что для преподавателя они все и будут разными, с точки зрения проверки.

Байсиков: Нет, разные большие (даже и не очень большие) программы мы сейчас не потянем.

Бэфин: А разные маленькие?

Знайкин: А смысл?

Хорошеев: А что, Бэфин, гениально! Помните 18-й выпуск? Ну, нам там про подпрограммы рассказывали. Принцип Джона помните?

Бэфин: И что?

Знайкин: А то что, на этапе постановки задачи, мы ее разобьем на подзадачи, т.е. подпрограммы.

Хорошеев: Ага, а потом каждому дадим по одной, пусть пишет.

Бэфин: Неужели это я придумал? :)

Хорошеев: Не льсти себе :). Но мы, ведь, действительно убьем всех зайцев. Программа будет более или менее серьезная, но одна. Каждый будет занят делом и в то же время мы будем писать ее вместе. Вот он, наш вариант.

Новикова: Хитрые вы, а я что буду делать?

Знайкин: А что ты? У нас дискриминации нет, будешь делать тоже, что и все - свою часть задачи решать.

Новикова: А если я не умею?

Хорошеев: Вот человек! А мы тут чего делаем? Учимся. Все. Даже я и Знайкин ... <Знайкин: Привет!>. Если что, поможем, да и под руководством же преподавателя. Вы, ведь, нас не бросите, господин Байсиков?

Байсиков: Да вас попробуй брось :).

Бэфин: Соглашайся, короче.

Новикова: Ну не знаю...

Хорошеев: Вот человек!...

Знайкин: Ты это уже говорил.

Хорошеев: Ну, да. Так подпрограммы же разные будут по сложности. Кому что достанется. Посложнее, попроще.

Знайкин: Так они что доставаться будут? Может каждый сам выберет?

Хорошеев: А ты не думаешь, что все выберут одно и то же?

Бэфин: Да, проблемка та еще.

Председатель: Ну это уже вопросы организации.

Знайкин: Главное изначально хорошо продумать структуру программы. Разбить ее на системы. Назначить или выбрать ответственных. Каждую систему уже с их помощью разбить на подсистемы и т.д. Это один вариант.

Бэфин: Можно потом создать пул задач из которого бы каждый мог выбрать одну или несколько.

Новикова: А можно и чтобы несколько человек работали над одной частью программы.

Хорошеев: Вместе или независимо...

Средний: А можно я скажу?

Председатель: mailto:stac@stacmv.net

DOS .::. Ввод символов с клавиатуры и их кодирование

Кодирование символов

Кодирование - это запись данных с использованием некоторого кода.

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

Соответственно, каждый символ, введенный с клавиатуры или иным образом в памяти машины будет записан в двоичном коде.

Исторически за основу кодирования символов в персональных компьютерах (IBM PC compatible), как и во многих других компьютерах, взят код ASCII (American Standard Code for Information Interchange - американский стандартный код для обмена информацией). Он был введен в 1963 году и ставит в соответствие каждому символу семиразрядный (семибитный) двоичный код. В коде ASCII можно представить 128 символов (т.к. 2^7=128).

ASCII содержит две группы символов:

1)прописные, строчные латинские буквы и цифры, а также специальные символы, т.е. символы пишущей машинки;

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

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

IBM расширила ASCII таким образом, что каждый символ стал представляться 8-мибитным числом. Это позволило закодировать уже 256 символов.

IBM зарегистрировала кодовую страницу 437, которая называется американской кодировкой. Расширенный ASCII полностью содержит в себе стандарт ASCII и дополнительно содержит 128 кодов в старшем бите (при записи числа в двоичном виде, старший бит находится слева).

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

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

Символ с кодом FFH (также как и 00H) не задействован и является "пустым".

В настоящее время под ASCII понимается описанное выше расширение ASCII.

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

Для представления символов кириллицы было предложено много вариантов кодовой таблицы IBM. Все они основываются на подмене некоторых символов русскими буквами и иногда на изменении кодировки некоторых символов. ГОСТом была закреплена так называемая основная кодировка, в которой русские буквы размещены там, где у американцев псевдографика, а псевдографика перенесена в начало второй половины таблицы.

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

Для устранения этого недостатка В.М. Брябин и А.А. Чижов предложили альтернативную кодировку, в которой русские буквы заместили европейские, греческие и математические символы.

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

Следует только помнить, что буквы "Ё" и "ё" идут после "я".

Альтернативную кодировку сменила модифицированная альтернативная кодировка. В ней последний столбец (см. рисунки на сайте) соответствует оригинальной кодировке IBM. Недостатком этой кодировки является отсутствие букв "Ё" и "ё", а также некоторых полезных символов типа стрелок.

И только потом IBM зарегистрировала для стран СНГ кодовую страницу 866, которая основана на альтернативной кодировке, только вместо упоминавшихся в предыдущем абзаце полезных символов стоят уникальные буквы украинского и белорусского алфавитов.

Было и еще несколько кодировок, но они по разным причинам не получили распространения.

Все проблемы с кодировками предполагалось решить созданием 16-битной кодировки Unicode. Она была разработана еще в начале девяностых годов, а ее внедрение и распространение можно наблюдать сейчас. С помощью Unicode можно закодировать 65536 символов, а именно:

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

Таким образом, в будущем будет чем заняться.

Ввод символов с клавиатуры

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

Как же работает клавиатура?

Скажу сразу, мы не будем очень сильно вдаваться в технические особенности аппаратуры, а только познакомимся с принципами работы клавиатуры в общем, с тем чтобы применять полученные знания на практике.

После ознакомления с кодированием символов становится очевидным следующее:

1) каждому расширенному коду ASCII не может быть поставлена в соответствие определенная клавиша на клавиатуре, т.к. количество клавиш намного меньше;

2) не каждая комбинация клавиш может быть представлена в расширенном коде ASCII, т.к. этих комбинаций может быть существенно больше, чем 256.

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

Тогда возникают два вопроса. Как фиксируются в компьютере нажатия клавиш и их комбинаций и как вводить с клавиатуры символ с произвольным ASCII кодом?

Начнем с первого вопроса и рассмотрим принцип действия клавиатуры. Будем рассматривать XT клавиатуру. Функционирование 101-клавишной клавиатуры несколько отличается, мы не будем придавать сейчас этому значения. Почти все различия "сглаживаются" драйвером клавиатуры (это сделано для совместимости).

Каждой клавише на клавиатуре XT соответствует семибитный код санирования или опроса клавиатуры (scan-код). Эти коды не совпадают с ASCII кодами.

Каждый раз при нажатии клавиши аппаратура клавиатуры генерирует однобайтный код нажатия, а при отпускании - однобайтный код отпускания. Код нажатия совпадает с кодом сканирования, код отпускания отличается от кода сканирования наличием единицы в старшем бите, т.е. он больше кода сканирования на 128 или 80H.

Если клавиша остается нажатой дольше, чем 0,5 сек., то автоматически начинают генерироваться ее коды нажатия с частотой 10 раз в секунду, что имитирует серию быстрых нажатий на эту клавишу.

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

Код нажатия/отпускания клавиши выдается в порт 60H (есть такие специальные каналы по которым периферийные устройства могут обмениваться информацией с процессором, называются порты, не путать с портами tcp/ip).

Одновременно с этим клавиатура выдает аппаратное прерывание 09H (прерывания это механизм обработки исключительных ситуаций. Прерывания бывают аппаратные и программные. При возникновении прерывания процессор в буквальном смысле прерывает свою работу и обрабатывает прерывание путем выполнения специальной подпрограммы - обработчика прерывания. У каждого прерывания может быть свой обработчик, после того, как он отработает, процессор продолжает заниматься своими делами :).

При возникновении прерывания 09H управление передается на драйвер клавиатуры, который считывает из порта 60H код нажатия/отпускания клавиши. Дальнейшие его действия зависят от типа кода.

Различаются клавиши-переключатели и кодовые клавиши.

Клавиши-переключатели служат для изменения состояния клавиатуры (переключения регистров). На каждом регистре нажатие кодовых клавиш интерпретируется по-разному. К клавишам-переключателям (на XT-клавиатуре) относятся клавиши Ins, Caps Lock, Num Lock, Scroll Lock, Alt, Ctrl, левый и правый Shift, а также комбинация клавиш Ctrl - Num Lock. Для хранения статуса (состояния) клавиш-переключателей в области данных BIOS, находящейся в ОЗУ, зарезервировано два байта. Драйвер 101-клавишной клавиатуры различает также правый и левый Ctrl и Alt.

При получении драйвером кода нажатия/отпускания клавиши-переключателя соответствующий бит устанавливается в 1/0. Это позволяет распознавать одновременное нажатие нескольких клавиш.

Дополнительно для каждой из клавиш Ins, Caps Lock и Num Lock закреплен один бит для хранения состояния режимов вставки/замены, ввода прописных букв и фиксирования цифр.

Кодовые клавиши (к которым относятся все остальные клавиши) служат для непосредственного ввода символов в компьютер.

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

Если такое соответствие есть, то то двухбайтный код символа будет состоять из расширенного ASCII кода (младший байт) и кода сканирования клавиши (старший байт). Например, для клавиши "А" в нижнем регистре двухбайтный код будет следующим: 1E61H (1EH - код сканирования, 61H - ASCII код клавиши "a").

Некоторые служебные клавиши, не являющиеся переключателями, тоже формируют двухбайтный код такой структуры. Это клавиши ESC, BS (BackSpace), TAB и ENTER, они имеют расширенные коды ASCII, соответственно, 27, 8, 9 и 13.

Для клавиш или комбинаций, не имеющих ASCII кода, вырабатывается двухбайтный код, называемый расширенным кодом клавиши. Расширенный код клавиши в младшем байте содержит нулевой код (00H - ASCII код символа NUL), а в старшем - двоичное число, однозначно определяющее нажатую клавишу или комбинацию. Часто это число совпадает с кодом сканирования.

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

Сформированный драйвером двухбайтный код помещается в буфер клавиатуры, расположенный в области данных BIOS в ОЗУ. На этом обработка нажатия клавиши завершается и процессор продолжает выполнять отложенную работу.

Буфер рассчитан на хранение 15 двухбайтовых кодов. Он организован в виде циклического списка-очереди. Т.е. двухбайтный код код помещается всегда в конец очереди, а берется сначала.

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

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

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

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

Любая функция DOS, осуществляющая ввод (а реально - считывание из буфера) одного символа, возвращает либо расширенный код ASCII, либо нулевой код. В последнем случае нужно повторить запрос для выдачи другого (старшего) байта расширенного кода клавиши.

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

Ctrl-Alt-Del  - рестарт ОС;
Ctrl-Break    - принудительное завершение выполнения программы;
Ctrl-Num Lock - приостановка выполнения программы до нажатия
                какой-либо клавиши на клавиатуре, за исключением
                Num Lock (эквивалент Pause);
Shift-PrtSc   - печать экрана.

Ввести с клавиатуры символ расширенного кода ASCII в выполняемую программу можно одним из следующих способов:

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

2)путем нажатия комбинации Ctrl-клавиша_печатной_машинки_или_служебная_ клавиша;

3) путем нажатия клавиши Alt, набора расширенного кода ASCII в десятичной системе счисления на малой цифровой клавиатуре и последующего отпускания клавиши ALT.

Первым способом могут быть введены все символы пишущей машинки и четыре управляющих символа, а именно: ESC, BS, HT(TAB) и CR(ENTER). Если к DOS подключен соответствующий драйвер, то можно ввести и другие символы, например символы кириллицы.

Вторым способом можно ввести любой управляющий символ ASCII за исключением NUL. Комбинация Ctrl-кл, где кл - одна из клавиш A-Z, [, \, ], , ^ и -, обеспечивает ввод символа, код ASCII которого меньше кода ASCII символа кл на 40H.

Третий способ обеспечивает ввод любого ASCII символа, за исключением NUL, путем явного задания его кода в десятичной системе счисления. Чтобы драйвер распознал такой способ ввода символа, код последнего набирается на фоне нажатой клавиши Alt.

----------------------------

Данная заметка основана на книге Б.С. Богумирского "Руководство пользователя ПЭВМ", том 1. Поэтому более подробную информацию вы сможете найти в этой книге, если найдете ее, конечно.

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

Также таблицу ASCII кодов можно встретить в хелпе к Quick Basic'у, а в хелпе моего QBasic'а я даже встретил таблицу скан-кодов клавиш.

ОКРУЖЕНИЕ .::. Как самому создать игру?

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

Рассылка выходит с Subscribe.ru, поэтому процедура подписки вам знакома и много времени не займет.

Рассылки Subscribe.Ru
Как самому создать компьютерную игру

ЗАКЛЮЧЕНИЕ

Напоминаю, что сайт рассылки все еще находится по адресу http://stacmv.nm.ru и что там всегда можно взять все выпуски рассылки, как по одному, так и все сразу (http://stacmv.nm.ru/issues.zip).

Кстати, сайт ежедневно посещают 4-6 человек, что, конечно, очень много. Но меня интересует вот что: эти ежедневные 4-6 человек одни и те же люди или разные?

Если одни и те же, то друзья, намекните, пожалуйста, что нужно исправить, сделать, ввести, открыть, закрыть, сломать. В конце концов, сайт делается для вас. На кой я буду делать то, что никому не надо и, соответственно, не делать то, что кому-нибудь нужно?

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

Кстати, кто-нибудь из вас имеет опыт организации библиотек? Мне бы не хотелось делать свалку электронной макулатуры, а это значит, что к проектированию структуры (хотя бы) библиотеки нужно подойти по возможности серьезно.

Вопрос к самым начинающим. Что вы ожидаете найти в библиотеке начинающего программиста?
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

С уважением,
Вячеслав Stac Мацнев mailto:stac@stacmv.net
03.06.01.



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться Relayed by Corbina
Рейтингуется SpyLog

В избранное