Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > ввод информации с клавиатуры


Автор: klepik 24.5.2007, 16:22
1) У кого небудь есть примерчик програмки, чтоб можно было вводить данные с клавиатуры и выводить на екран. 
Желательно через порт в/в или прерывания int 09h и 16h

2) программа, управляющея светодиодами на лицевой панели компьютера
Исправте пожалуйста ошибку с outp

Код

#include <stdio.h>
void main(void);
void main(void) {
        int i;
/* Посылаем процессору клавиатуры  команду управления светодиодами */
         outp(0x60,0xed);

/* Перед посылкой второго байта команды  выполняем небольшую задержку */
        for(i=0; i<4000; i++);
/* Выводим второй байт команды,  младшие три бита которого определяют  состояние светодиодов на лицевой панели  клавиатуры. */
        outp(0x60,7);
/* Ожидаем нажатия на любую клавишу. */
        getch();
/* Выключаем все светодиоды.*/
        outp(0x60,0xed);
        for(i=0; i<4000; i++);
        outp(0x60,0);
        exit(0);
}


Всем спасибо

Автор: jonie 24.5.2007, 22:03
Код

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;ReadKey-reading 1 key from stdin
;;in=-
;;out=    al-charecter
;;    ah-scancode
;;note:
;; if Press Any Special key (F1,F3,etc.) then
;; you must cmp al with 0 and if it`s true 
;; take ah=scancode,else see beloow
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ReadKey PROC Near
    mov ah,00h
    int 16h
    ret
ReadKey ENDP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Readln using int 21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Readln -read 1 string from file to buffer.String now NULL-terminate!
;;in =bx   -hadle
;;    ds:dx-buffer
;;     ah=0 if EOF
;;     al=1 if not EOF
;;out=CF set on Error
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Readln PROC NEAR
;    mov dx,offset buffer ;already
;    mov bx,handle        ;already
    mov si,dx
 readstart:
    mov ah,3Fh
    mov cx,01
    int 21h
    jc ErrorRead
    test ax,ax    ;maby EOF already
    jz  EndReadEOF
    cmp [si],byte ptr 0Dh
    jz  EndRead
    inc si
    mov dx,si
    jmp short readstart
 EndReadEOF:
    mov [si],byte ptr 00
    jmp short errorread  ;go to exit
 EndRead:
  ;read 0Ah byte....
    mov [si],byte ptr 00

    mov ah,42h
    mov al,01h
; mov bx,handle ;already set
    xor cx,cx
    mov dx,01h
    int 21h
    mov ah,01
 ErrorRead:
    ret
Readln ENDP

ну и вывод собсна...
Код

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Length  - return length of ASCIZ string -WITHOUT 00 BYTE!!!
;;in-      bp - offset string ASCIZ
;;out-     cx - length of that string
;;modif. - cx,al,si
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LengthW PROC Near
    xor cx,cx
    mov si,bp
 calcul:
    mov al,[si]
    test al,al
    jz endcalc
    inc si
    jmp short calcul
endcalc:
    sub si,bp
    mov cx,si
    ret
LengthW ENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;Writeln - show string which terminate by zero byte.
;;          use color.
;;          cursor will after string
;;in=    bp - offset string
;;       bl - atribute
;;out-   ???
;;modif. ah,al,bl,bh,dl,dh,cx
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Writeln PROC Near
  call WhereXY
  mov ah,13h
  mov al,01    ;{must be 0 if cursor must be stand after string}
; mov bl,14    ;{<--atribut!}   ;already set
  mov bh,00    ;{video page}
  call LengthW
; mov cx,len   {length of string}          ;set by Length
; mov bp,offset string  {offset of string} ;<already set
  int 10h
Writeln ENDP

писалось очень давно под определенные нужды...посему мб ошибки.. ну и общий стиль никакой)...так что AS IS )

Автор: student0511 13.5.2008, 01:33
А какие есть функции в Win API для заполнения переменных определенного типа, например, мне нужно определить значение переменной A типа int: в С++ - это cin>>A, в С scanf(...), а в WinAPI? 

Автор: 586 13.5.2008, 04:13
Цитата(student0511 @  13.5.2008,  02:33 Найти цитируемый пост)
какие есть функции в Win API для заполнения переменных определенного типа

Есть функция для чтения ввода.
Код
char buff[260];
DWORD dwRead;
int i;
ReadConsole(GetStdHandle(STD_INPUT_HANDLE), buff, 260, &dwRead, 0);
i = atoi(buff);

Автор: xvr 13.5.2008, 13:42
Цитата(klepik @ 24.5.2007,  16:22)
1) У кого небудь есть примерчик програмки, чтоб можно было вводить данные с клавиатуры и выводить на екран. 
Желательно через порт в/в или прерывания int 09h и 16h

2) программа, управляющея светодиодами на лицевой панели компьютера
Исправте пожалуйста ошибку с outp

В Windows никакие int xx, in и out не работают, только в голом ДОСе, увы  smile 
В ДОС программах, запущенных из ДОС бокса Windows они тоже могут не работать (все int/in/out перехватываются специальной подсистемой в Windows и эмулируются на уровне Win32 прикладной программы)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)