Форум программистов, компьютерный форум CyberForum.ru

Работа с клавиатурой, сочетания клавиш, блокировка клавиш - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Авторизация клиента на сервере http://www.cyberforum.ru/cpp-beginners/thread1492760.html
Пишу на QT, в разделе QT нет подфорума для начинающих, а основной форум не стал пачкать своим вопросом. Есть клиент - приложение оно на .NET с гуи, и серверное на QT. Работа с базой, прикрутил socket многопоточный делал все по уроки.(Если надо скину туториал) Все подключается, проверял через штатный telnet в винде. Сообщения сервер принимает (команда send в telnet). Необходима...
C++ Вводится два слова, необходимо определить, одинаковые они или нет Я новичёк в программировании, помогите, пожалуйста. Вводится два слова, необходимо определить, одинаковые они или нет http://www.cyberforum.ru/cpp-beginners/thread1492750.html
C++ Русскоязычная литература по Flex&Bison
Моя задача: необходимо создать или найти готовый лексер/парсер для разбора кода C++ и преобразования его в некоторую структуру (дерево). Начал изучать Flex&Bison (Yacc & Lex). Подскажите пожалуйста русскоязычную литературу (есть ли она вообще?) по этой теме и есть ли готовый лексер/парсер для плюсов (я понимаю, что велосипеды делать это хорошо, но всё же)?
Принудительный вызов метода родителя C++
#include <iostream> using namespace std; class A { public: virtual void f() { cout << "A::F()" << endl; } virtual void onLoad()
C++ Объясните пожалуйста, в чем здесь дело(структура и указатель) http://www.cyberforum.ru/cpp-beginners/thread1492715.html
#include <iostream> #include <string> #include <windows.h> using namespace std; struct pizza { double diameter; string name; double weight;
C++ Сделать массив расширяемым Никак не получается сделать динамический массив расширяемым , помогите пожалуйста, где,что не так? #include<iostream> using namespace std; class myVector { int *arr, size,var,count; public: myVector(int s=5):var(0), size(s), count(0) { подробнее

Показать сообщение отдельно
Рыжий Лис
Просто Лис
271 / 218 / 58
Регистрация: 17.05.2012
Сообщений: 911
Записей в блоге: 4
04.07.2015, 10:18
Могу предложить код на tasm.
Кликните здесь для просмотра всего текста
Assembler
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
109
110
111
112
113
114
;Написать обработчик прерываний от клавиатуры. Изучить и реализовать, если необходимо, отслеживание временных промежутков с помощью прерывания 1Ch. Изучить перепрограммирование стандартного контроллера прерываний, реализацию маскирования линий IRQ. Самостоятельно решить задачу в соответствии с индивидуальным вариантом.
 
;64. Цифры можно набирать (от 1 до 9) только через нажатие ScrollLock, количество нажатий больше цифры на 1. Например, 3 – это 4 нажатия ScrollLock, при этом интервал между нажатиями должен быть не более 1 секунды.
  
;TASM, COM-файл
.286                      ; for pusha popa
.model tiny               ; Модель памяти, используемая для COM
.code                     ; Начало сегмента кода
org 100h                  ; for *.COM
start:
    jmp main
;///////////////////////////////////////////////////////////////////////
; обработчик 1Ch (вызывается таймером)
my proc far
    pusha
    sti     ;Установка флага прерывания
    
    cmp cs:flag,0   
    jz zero                 ; if(flag==0)
    
    dec cs:flag                ; flag--
    jmp exit
zero:
    cmp cs:kol,0   
    jz exit
    ;выводим цифру
    
    mov cs:kol,0
    
exit:
    cli           ;Сброс флага прерывания.
    mov al,20h    ;пошлем контроллеру прерываний???
    out 20h,al    ;сигнал EOI???
    popa
    iret                    ; завершаем прерывание
my endp
;///////////////////////////////////////////////////////////////////////
; обработчик 09h (вызывается клавиатурой)
my2 proc far
    pusha
   ; sti     ;Установка флага прерывания
    
    in al,60h               ; принимаем скан-код с клавиатуры
    cmp al,46h              ; сравниваем со скан кодом Scroll lock
    jnz notscr
    
    mov cs:flag,20
    inc cs:kol                 ;kol++    
   
    jmp ok
notscr:
    ;блокируем цифры 1-9
    ;TODO сравнить if (al>02h $$ al<0ah)
    cmp al,02h              ; сравниваем с '1'
    jz ok
    cmp al,03h            
    jz ok
    cmp al,04h            
    jz ok
    cmp al,05h            
    jz ok
    cmp al,06h            
    jz ok
    cmp al,07h            
    jz ok
    cmp al,08h            
    jz ok
    cmp al,09h            
    jz ok
    cmp al,0Ah            
    jz ok
old:
    popa
    jmp dword ptr [oldint9] ; передаем управление старому обработчику
;///
ok:
    in al,61h    ;посылаем подтверждение о считывании scan-кода???
    or al,80h    ;из порта 60h
    out 61h,al    ;в порт 61h
   ; cli           ;Сброс флага прерывания.
    mov al,20h    ;пошлем контроллеру прерываний???
    out 20h,al    ;сигнал EOI???
    popa
    iret
my2 endp
;///////////////////////////////////////////////////////////////////////
main:
    ; устанавливаем свой обработчик таймера
    mov ax,251Ch
    mov dx,offset my
    int 21h       
    
    ;~ mov ax,3509h            ; принимаем адрес обработчика int 9
    ;~ int 21h
    ;~ mov word ptr oldint9+2,es ; сохраняем аддрес
    ;~ mov word ptr oldint9,bx
    
    ; устанавливаем свой обработчик клавиатуры
    mov ax,2509h
    mov dx,offset my2
    int 21h     
    
    jmp $
   ; int 20h ;выход
    ;////////////////////////////////////////////////////////////////////    
    oldint9 dd ?  ; здесь будет храниться адрес старого обработчика
    flag    db 20 ;1 dup (?)   ;счётчик таймера
    kol     db 0 
    ;~ hello   db 'hello from 1Ch',0Dh,0Ah,'$'  
    ;~ hello2  db 'hello from 09h',0Dh,0Ah,'$'  
    ;~ mes     db 'Ok',0Dh,0Ah,'$'
    ;~ buffer  db 255 dup ('$')
    ;~ endl    db 0Dh,0Ah,'$'
end start
Компилируется так:
Bash
1
2
3
tasm %1.asm
tlink %1.obj /t
%1.com


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