Методическое пособие для выполнения лабораторных работ и КР (1075934), страница 27
Текст из файла (страница 27)
Логика ввода информации с клавиатуры такова:− При выполнении специальных операций ввода (например, функции getch() в СИ)первый байт либо содержит код вводимого с клавиатуры (например, “А” – код65), либо специальное значение, обозначающее использование режима вводаскан-кода.− Специальное значение может быть либо 0, либо 0xE0h.
Величина 0 означает, чтополучен скан-код и его значение находится во втором байте, который долженбыть считан дополнительно. Скан-код позволяет однозначно определить комбинацию клавиш нажатых одновременно (Например, для ALT+V – скан-код = 47).Значение 0xE0h также сигнализирует о режиме ввода скан-кодов, и дополнительно указывает, что используется клавиши 101 символьной клавиатуры дублирующие основные клавиши.Список распространенных расширенных скан-кодов приведен в фрагменте программы на СИ, описывающей перечисление (enum EXTENDED) с константами скан – кодов.enum EXTENDED{extINTRO = 0,// Для всех клавиатурextINTRO2 = 0xE0,// For keypad and other keys unique to//101-key keyboard/* Второй байт содержит расширенные скан коды : *//* Цифровая клавиатура */extUP= 72, extDOWN = 80,extPGUP = 73, extPGDN = 81,extINS= 82, extDEL= 83,extCTRL_PRTSCextCTRL_LEFTextCTRL_PGUPextCTRL_HOME====NullKey = 3,extSH_Tab = 15,extLEFTextHOME= 75,= 71,114,115, extCTRL_RIGHT = 116,132, extCTRL_PGDN = 118,119, extCTRL_END= 117,extRIGHT = 77,extEND= 79,1362010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”/* ALT+буква */extALT_A = 30, extALT_B = 48,extALT_E = 18, extALT_F = 33,extALT_I = 23, extALT_J = 36,extALT_M = 50, extALT_N = 49,extALT_Q = 16, extALT_R = 19,extALT_U = 22, extALT_V = 47,extALT_Y = 21, extALT_Z = 44,extALT_CextALT_GextALT_KextALT_OextALT_SextALT_W======46,34,37,24,31,17,extALT_DextALT_HextALT_LextALT_PextALT_TextALT_X======32,35,38,25,20,45,/* extALT+цифровая клавиатура */extALT_1 = 120, extALT_2, extALT_3, extALT_4, extALT_5,extALT_6,extALT_7, extALT_8, extALT_9, extALT_0,extALT_minus = 130,extALT_equals,/* функциональная клавиша */extF1 = 59, extF2, extF3, extF4, extF5,extF6,extF7, extF8, extF9, extF10,extF11 = 133, extF12,/* SHIFT+функциональная клавиша */extSH_F1 = 84, extSH_F2, extSH_F3, extSH_F4, extSH_F5,extSH_F6,extSH_F7, extSH_F8, extSH_F9, extSH_F10,extSH_F11= 137, extSH_F12,/* CTRL+ функциональная клавиша */extCTRL_F1 = 94, extCTRL_F2, extCTRL_F3, extCTRL_F4,extCTRL_F5,extCTRL_F6, extCTRL_F7, extCTRL_F8,extCTRL_F9,extCTRL_F10, extCTRL_F11 = 137,extCTRL_F12,};/* ALT+ функциональная клавиша */extALT_F1 = 104, extALT_F2, extALT_F3, extALT_F4, extALT_F5,extALT_F6,extALT_F7, extALT_F8, extALT_F9, extALT_F10,extALT_F11 = 139, extALT_F12,В справочниках и в литературе вы найдете полный перечень расширенных скан –кодов.
Кроме того, вы можете воспользоваться программкой, которая приведена в концеданного раздела для получения таблиц кодов самостоятельно.23.6. Кодировка UNICODEБольшинство современных программ позволяет работать в специальной кодировкеUNICODE. В этой кодировке символы кодируются 2-мя байтами, поэтому возможно закодировать 65536 символов.
Такой способ кодирования позволяет таблицы кодов для разных стран и для разных иностранных языков. Это в свою очередь позволяет хранить информацию в файлах и БД на разных языках, что делает программные продукты более универсальными.Здесь мы не будем приводить особенности работы с кодировкой UNICODE, так какдля выполнения ЛР и курсовой работы в этом нет необходимости. Таблицы UNICODEочень большие, поэтому для получения информации о кодах символов удобнее воспользоваться специальной программой charmap.exe, которую Вы легко найдете в операционной системе. Эту программу достаточно вызвать из главного меню WINDOWS:“Пуск/Start” => “Выполнить/Run” => “charmap.exe ”.23.7.
Программы для получения списка кодовНебольшая программка на СИ, сделанная в среде QC25, позволяет получить кодыразных символов в кодировке ASCII. Текст ее приведен ниже. Ее можно скопировать в2010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”137NOTEPAD, сохранить с расширением *.с, перекодировать в ДОС формат и выполнить вQC25.#include <stdio.h>main(){int key; // Переменная для ввода кодов символоввиш)так:);/* Программа читает и выводит символы пока не нажатаклавиша ESC */while( 1 ){// Ввод первого символаkey = getch();if( (key == 0) || (key == 0xE0) ){// Если скан код(первый символ = 0) или расширенная клавиатура (101 кла// В этом случае первый символ равен 0xe0, то выводим так:key = getch();printf( "ASCII: скан\tChar: Нет\t" );printf( "Десятичное: %d\tШестнад.: %X\n", key, key );}else{// Первый символ не является скан кодом, а обычным символом, то выводимif ( key <=128 )// Можно ли напечатить символprintf( "ASCII: Да\tСимвол: %c \t", isgraph( key ) ? key : ' 'elseprintf( "ASCII: Да\tСимвол: %c \t", key );printf( "Десятичное: %d\tШестнад.: %X\n", key, key );}/* Проверка ESC - 27 или 0x1b */if( key == 27){printf( "Вы хотите завершить программу? (Y/n) " );key = getche();printf( "\n" );// Завершаем программу по Y/y или Enterif( (toupper( key ) == 'Y') || (key == 13) )break;}}}Блок-схема данной программы представлена в разделе 21.3.
Примеры блок-схемпрограмм. Достаточно щелкнуть мышкой на номере раздела для перехода в раздел описания блок-схем.Программка для записи в файл кодов ANSI. Данную программу можно выполнитьв среде BORLANDC и получить файл справки с ANSI кодировкой (ANSI.txt).#include <stdio.h>void main(){int key , i ; // Переменная для ввода кодов символовFILE *fp;// Открываем файлfp = fopen("ANSI.txt", "w");138SYM2010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”fprintf( fp, "SYMDECHEX SYMDECHEX\n" );for( i = 32 ;i < 256; i++ ){fprintf(i++;fprintf(i++;fprintf(i++;fprintf(DECHEX SYMfp, " %c%3d%X", i , i , i );fp, " %c%3d%X", i , i , i );fp, " %c%3d%X", i , i , i );fp, " %c%3d%X\n", i , i , i );DECHEX}}1.2.3.4.fclose (fp);Практика.Запустите под управлением QC25 программу для считывания расширенных кодов.Запустите под BC++ 3.1 программу для считывания расширенных кодов.Создайте под управлением QC25 свою программу перекодировки на СИ.Создайте под управлением QC25 свою программу перекодировки на Ассемблере.Заключение2010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”139Приложение1402010 год 2 курс 4-й семестр Большаков С.А.“Системное программирование”Приложение 1 Элементы блок-схемНАЧАЛО0ПроцессУсловие1Начало циклаКонец циклаПечатьКОНЕЦНУ циклаАПроцедураТело циклаАПродолжитьПроверказавершенияКонец11.
НУ циклаКлючевое условие12...N22. ПроверказавершенияКонецПродолжитьNТело циклаНачало11Процесс1Печать0Условие1КонецИз телаПараметры циклаВ тело.