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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы