Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
1

Управление клавиатурой в Турбо Си

16.09.2016, 17:14. Просмотров 1203. Ответов 35
Метки нет (Все метки)

Cкачал Borland C++ 3.1.У меня виндовс 8.1
DosBox запускается.File->Open указываю файл.Начинаю компилировать и вот самое интересное.Перед решеткой инклайдов ему видятся постоянно символы,которых нет.Он не понимает русский язык.

Управление клавиатурой в Турбо Си


Требуется,что бы при сочетании клавиш Shift+Alt+f вместо Left Shift, Right Ctrl, F1, блокировалась F6 вместо 1.
Он на элементарные команды Си ругается.
В чем тогда компилировать и как решить задачу?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// Подключение стандартных заголовков
#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)();
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2016, 17:14
Ответы с готовыми решениями:

Управление видеопамятью Турбо Си
Что за ошибки такие? // ****** Control videoadapter ................ * /...

Работа с клавиатурой в graphics.h
Всем привет! Кто знает каким образом можно обрабатывать нажатия клавиш...

Управление клавиатурой
Доброго времени суток! Есть такое необычное задание, управление клавиатурой на...

Управление клавиатурой
Помогите написать программу чтобы можно было прямоугольник двигать по...

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

35
nmcf
16.09.2016, 17:32
  #2

Не по теме:

Возьми что-то современное.

0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
16.09.2016, 18:23  [ТС] 3
А лабораторную как длать в чем то современном?
0
sourcerer
Модератор
Эксперт CЭксперт С++
4897 / 2083 / 326
Регистрация: 20.02.2013
Сообщений: 5,568
Записей в блоге: 24
Завершенные тесты: 1
16.09.2016, 19:01 4
scherbakovss201, не мучайтесь, скачайте и установите какую-нибудь удобную бесплатную IDE, с современным компилятором на борту, поддерживающим текущий стандарт, например, Code::Blocks, или QtCreator (Community), или же MS Visual Studio 2015 (Community).
1
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
16.09.2016, 19:18  [ТС] 5
У меня установлена vs 2013
Embargo rad studio 2010
пробовал в них в консольку данный исходник залить,там не компилиться.А задачу решить нужно.
0
Hikari
Хитрая блондиночка $)
1453 / 966 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
16.09.2016, 19:53 6
Цитата Сообщение от scherbakovss201 Посмотреть сообщение
Он на элементарные команды Си ругается.
Ничче ссеббе
Это вас так преподаватель на прерывания подсаживает?
Цитата Сообщение от gru74ik Посмотреть сообщение
не мучайтесь, скачайте и установите какую-нибудь удобную бесплатную IDE, с современным компилятором на борту
Для работы с прерываниями DOS??
А они умеют такое? Я думала Дос давно забыт современниками.
1
MansMI
1450 / 1159 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
16.09.2016, 19:53 7
Лучший ответ Сообщение было отмечено scherbakovss201 как решение

Решение

writevect(9,(void*)new9); возможно поможет
1
Hikari
Хитрая блондиночка $)
1453 / 966 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
16.09.2016, 19:55 8
Цитата Сообщение от scherbakovss201 Посмотреть сообщение
void interrupt new9();
А где кстати описан указатель на эту функцию?
Ты в writevect должен указатель передавать.
1
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
16.09.2016, 20:12  [ТС] 9
Управление клавиатурой в Турбо Си

помогло
C++
1
writevect(9,(void*)new9);
осталось еще две ошибки.
0
Hikari
Хитрая блондиночка $)
1453 / 966 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
16.09.2016, 20:47 10
Цитата Сообщение от scherbakovss201 Посмотреть сообщение
осталось еще две ошибки
И где они в коде?
Может вместо картинки текст напишешь?\
1
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
16.09.2016, 20:56  [ТС] 11
C++
1
2
cprintf("\r\nВводите строку символов>"); scanf("%s",string);//stroka 33
intdosx(&rr,&rr,&sr); return(MK_FP(sr.es,rr.x.bx));//stroka 41
0
MansMI
1450 / 1159 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
16.09.2016, 21:03 12
#include <stdlib.h> попробуй

Добавлено через 2 минуты
void far *readvect(int in)
1
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
16.09.2016, 21:05  [ТС] 13
#include <stdlib.h> добавил
теперь ошибка в 34 и 42 строке
Управление клавиатурой в Турбо Си
0
MansMI
1450 / 1159 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
16.09.2016, 21:17 14
убрать везде этот бред между "...." , если FAR недоступен, то учим аглицкий или на латиницу переводим
0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
16.09.2016, 21:37  [ТС] 15
Так чего тогда в учебниках демонстрируеться,что он русский текст понимает.Можно ли его научить?
Управление клавиатурой в Турбо Си
0
MansMI
1450 / 1159 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
16.09.2016, 21:43 16
можно, keyrus.com в прошлом веке вроде был, я FAR пользую,
вопрос чего ему scanf не нравится? либо этот бред мешает, либо "scanf" вперемешку с кириллицей набран, других версий пока нет
0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
16.09.2016, 21:50  [ТС] 17
keyrus.com на ХР запустился и все,черній єкран,никакого меню или приглашения.На восьмачке не запускаеться.
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
16.09.2016, 23:56 18
В DOS же был стандартный способ русский включить.
0
inquisitor
15 / 6 / 16
Регистрация: 22.12.2015
Сообщений: 1,763
17.09.2016, 10:55  [ТС] 19
и как его в DOS включить?
0
nmcf
6522 / 5748 / 2619
Регистрация: 14.04.2014
Сообщений: 24,493
17.09.2016, 15:02 20
Ну в настоящей DOS был autoexec.bat и config.sys, в них что-то про codepage и country.
0
17.09.2016, 15:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2016, 15:02

Управление клавиатурой
Нужно при нажатии стрелки вниз ↓ смещать индикаторы( значение caps lock, num...

Управление мышью и клавиатурой
Всем привет! Хочу сделать седующее: 1. В программе открывается окно; 2....

проверка оборудования, управление клавиатурой с++
Написать программу на С++ ( у меня стоит Visual Studio 2010 Express , C++) с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru