04 Sep 97 12:44, Alexander E. Tcherenkov (2:50/128@fidonet) wrote to All:
AET> Dmitry Kishchukov wrote:
>> Кто подскажет как мне на C/C++ попроще сделать две простые вещи:
>> 1. Узнать есть ли нажатые клавиши?
>> 2. Взять код нажатой клавиши (сразу а не после нажатия "Enter")
AET> см. man curs_getch функции getch,wgetch ,...
AET> но надо будет использовать curses.
AET> Если создашь класс в дальнейшем это будет
AET> действительно просто...
Если нет особой необходимости связываться с ncurses, то можно этого не делать, а
почитать man termios ()
_ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _
From : Victor Vislobokov 2:5054/8.34 19 May 97 23:43:38
Subj : GNUc
________________________________________________________________________________
Hello NMi.
Держи маленьки примерчик, который ждет нажатия клавиши и
затем выдает код клавиши (не для клавиш вырабатывающих несколько
кодов). Выход по нажатию Enter.
_ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _
From : Leonid Broukhis 2:5020/400 16 May 97 08:11:10
Subj : Как пpочитать с клавиатypы символ ?
________________________________________________________________________________
From: leob@asylum.mailcom.com (Leonid Broukhis)
On Fri, 16 May 97 00:21:40 +0400, NMi iNtERCEPtOR wrote:
>Еще вопpос - faq, навеpное... всю жизнь под дос/bcpp кодил.
>Как пpочитать с клавиатypы символ ? В смысле - "c=???();", нажимаем бyквy 'a' и
>полyчаем c=69, и т.п. (стpелки, ...)
>
>Уже все пеpепpобовал - getch, getc, getchar, read(fileno(stdin),c,1),... =((
>
>Еще пpоблема - когда делаю #include <curses.h> - не видит "stdscr","wgetch()".
>Hасколько я понимаю, нyжно пpилинковать /lib/libncurses.so ? Как ?
Если тебе нужен только небуферизованный ввод с клавиатуры, а рисование
на экране не нужно, то system("stty -icanon min 1"); тебя устроит.
(В конце программы нужно поставить system("stty icanon");)
После этого делаешь stdin небуферизованным setbuf(stdin, NULL); и читаешь
getchar'ом.
Leo
--- ifmail v.2.9
* Origin: Demos online service (2:5020/400@fidonet)
где это у тебя 'a'=69??? 'a'=То ли 0x61 то ли 0x41
Ni> Уже все пеpепpобовал - getch, getc, getchar,
Ni> read(fileno(stdin),c,1),...
Ni> =((
естественно все эти падлы ждут нажатия enter, да???
неудивительно. консоль же у тебя и печатной машинкой consul
может быть :)
кстати очевидно, что вся еpунда типа стpелок, пэйджапов
и эфодинов пpиходит как ескейппоследовательности.
With best regards,
Oleg.
--- user_defined_warning UNREG
* Origin: powered by Linux (FidoNet 2:5020/623.20)
_ RU.UNIX.BSD (2:5077/15.22) _____________________________________ RU.UNIX.BSD _
From : Ivan Pascal 2:5020/400 11 Sep 98 12:35:14
Subj : Re: траблы + Re: сканкоды
________________________________________________________________________________
From: Ivan Pascal <pascal@tsu.ru>
Valentin Davydov wrote:
>
> > From: Ivan Pascal <pascal@tsu.ru>
> > Date: 9 Sep 1998 13:48:02 +0400
> >
> >#include <machine/console.h>
> >#include <ncurses.h>
> >
> >main()
> >{ char c;
> >
> > initscr(); savetty(); raw(); noecho();
> > if (ioctl(0, KDSKBMODE, K_CODE) < 0) perror(0);
> >
> > do {
> > c = getchar();
> > if (c > 0) printf("%dnr", c);
> > } while (c != 1);
> >
> > if (ioctl(0, KDSKBMODE, K_XLATE) < 0) perror(0);
> > resetty();
> >
> > exit();
> >}
>
> Большое спасибо! Только не K_CODE, а K_RAW, наверное.
Это зависит от того, что вы хотите :-)
C K_RAW она вам будет отдавать "сырые" скан-коды.
То есть, "код нажатия"/"код отжатия" и к тому же, некоторые
клавиши генерят целую последовательность кодов.
А то, что указывется в keymap в первой колонке, это уже
не "сырые" коды, а внутренние коды syscons. Они отличаются
тем, что для простых клавиш берется только "код нажатия",
а "расширенные" коды он просто заменяет на однобайтные
(те, которые еще не заняты простыми клавишами).
Так вот, K_KODE - это отдавать эти внутренние коды.
То есть, если вам нужны коды кнопок, чтобы потом "навесить"
на них что-нибудь полезное через keymap, то лучше K_KODE.
> Вал. Дав.
P.S. кстати, для "сырых" кодов программку надо подправить -
убрать проверку (c > 0), или сделать c - unsigned char
--
-----
Ivan Pascal | pascal@tsu.ru
Administrator of | Tomsk State University.
university network | Tomsk. Russia.
--- ifmail v.2.14dev2
* Origin: Tomsk State University (2:5020/400@fidonet)