Управление клавиатурой в Турбо Си - 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