Управление клавиатурой в Турбо Си - C (СИ)
Формулировка задачи:
Cкачал Borland C++ 3.1.У меня виндовс 8.1
DosBox запускается.File->Open указываю файл.Начинаю компилировать и вот самое интересное.Перед решеткой инклайдов ему видятся постоянно символы,которых нет.Он не понимает русский язык.
Требуется,что бы при сочетании клавиш Shift+Alt+f вместо Left Shift, Right Ctrl, F1, блокировалась F6 вместо 1.
Он на элементарные команды Си ругается.
В чем тогда компилировать и как решить задачу?
// Подключение стандартных заголовков #include <stdio.h> #include <dos.h> #include <conio.h> void interrupt (*old9)(); // Старый обработчик прерывания 9h void interrupt new9(); // Новый обработчик прерывания 9h void *readvect (int in); // Чтение вектора void writevect (int in,void *h); // Запись вектора unsigned char F1_code=59; // scan-code "F1" unsigned char key1_code=1; //scan-code "1" char f=0; // Флаг union REGS rr; struct SREGS sr; void main() { char string[80]; //Буфер для ввода текста textbackground(0); clrscr(); textattr(0x0a); printf("---------------"); printf(" Лабораторная работа №2 "); printf("---------------"); printf("---------------"); printf(" Управление клавиатурой "); printf("---------------"); old9=(void interrupt(*)())readvect(9); [B] writevect(9,new9);[/B] textattr(0x0c); printf("\n\n\r"горячая" комбинация: "); textattr(0x0a); printf("Left Shift, Right Ctrl, F1\n\r"); textattr(0x0b); printf("Клавиша, которая блокируется: "); textattr(0x0f); printf("1"); textattr(0x07); printf("\r\nВводите строку символов>"); scanf("%s",string); writevect(9,old9); } //Чтение вектора void *readvect(int in) { rr.h.ah=0x35; rr.h.al=in; intdosx(&rr,&rr,&sr); return(MK_FP(sr.es,rr.x.bx)); } // Запись вектора void writevect(int in,void *h) { rr.h.ah=0x25; rr.h.al=in; sr.ds=FP_SEG(h); rr.x.dx=FP_OFF(h); intdosx(&rr,&rr,&sr); } // Новый обработчик 9-го прерыванмя void interrupt new9() { unsigned char c,x,y; unsigned char byte17,byte18; unsigned char mask=0x02; unsigned char mask17=0x04; unsigned char mask18=0x01; byte17=peekb(0x40,0x17); byte18=peekb(0x40,0x18); if((inportb(0x60)==F1_code)&&(byte17&mask)&& (byte17&mask17)&&(!(byte18&mask18))) { puts("\7"); x=wherex(); y=wherey(); gotoxy(55,3); textattr(0x1e); if(f==0) { f=1; printf("Клавиша "1" заблокирована "); } else { f=0; printf("Клавиша "1" разблокирована"); } gotoxy(x,y); textattr(0x07); (*old9)(); } if( (f==1) && (inportb(0x60)==key1_code) ) { c=inportb(0x61); outportb(0x61,c|0x80); outportb(0x61,c); outportb(0x20,0x20); } else (*old9)(); }
Решение задачи: «Управление клавиатурой в Турбо Си»
textual
Листинг программы
cprintf("\r\nВводите строку символов>"); scanf("%s",string);//stroka 33 intdosx(&rr,&rr,&sr); return(MK_FP(sr.es,rr.x.bx));//stroka 41
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д