|
| Udvidet tastetur koder (C) Fra : Heine Laursen |
Dato : 13-12-01 11:41 |
|
Hvordan bruger jeg udvidet tastetur koder (Hvor finder jeg en liste over
dem)
Jeg vil F.eks gerne have at man kan på et vilket som helst tidspungt
trykke ESC for at afbryde programmet.
Jeg har alt program kode erklæret i Funktioner, så det er vel bare en
while(1) lykke omkring de funktioner der er i main eller hvordan?
Det er C programmering jeg arbejder med,
Mvh
Heine Laursen
| |
frank damgaard (13-12-2001)
| Kommentar Fra : frank damgaard |
Dato : 13-12-01 16:31 |
|
Heine Laursen <gozar@pokerface.dk> wrote:
> Hvordan bruger jeg udvidet tastetur koder (Hvor finder jeg en liste over
> dem)
> Jeg vil F.eks gerne have at man kan på et vilket som helst tidspungt
> trykke ESC for at afbryde programmet.
Problemet er at du skal anvende "ikke-bufferet" mode til at læse med.
Der er ingen enkelt standard for udvidede tastaturkoder,
og det afhænger helt af hvilken terminal ($TERM) der er i brug.
Evt. (sakset fra et af mine programmer til fri afbenyttelse...):
#ifndef USE_WIN32
static struct termios saved_termios_data;
#endif
void tty_inputmode(int on) {
/* 0: no line buffering of input => no ICANON !! and no echo */
/* 1: restore from saved_termios_data */
#ifndef USE_WIN32
int fd=1;
if (on) {
tcsetattr ( fd, TCSAFLUSH, &saved_termios_data );
} else /* off */ {
static struct termios termios_data;
tcgetattr ( fd , &saved_termios_data );
termios_data= saved_termios_data;
termios_data.c_lflag &= ~(ECHO | ICANON);
tcsetattr ( fd, TCSAFLUSH, &termios_data );
}
#endif
}
getch() mv, skulle nu køre unbuffered hvis tty_inputmode(0)
Husk tty_inputmode(1) inden programmet afsluttes.
Fang evt. SIGHUP/SIGINT mv. ok kald derfra, så inputmode er ok ved
retur til shell.
Bedre er nok at bruge ncurses(3)....
--
Frank Damgaard |
| |
Heine Laursen (14-12-2001)
| Kommentar Fra : Heine Laursen |
Dato : 14-12-01 08:27 |
|
frank damgaard <frank.damgaard@spam.invalid> wrote in
news:goagff.bi0@mkb84.ftn:
Ups,
Forkert NG!
Mvh
Heine Laursen
| |
|
|