Linux: getchar()
Linux: getchar()
För att läsa tangentbordet i ett textlägesprogram använder jag nu getchar(). Specialtangenter skall användas och då kräker denna funktion en jätteharrang. Finns det någon alterbativ funktion som bara ger ett enda, eller fast antal, värden?
Vad värre är, spyan inleds med 0x1b !!! Hur f*n skall då Esc kunna användas? Är det möjligt att se om en spya ligger köad, eller är det timerelände som gäller?
Vad värre är, spyan inleds med 0x1b !!! Hur f*n skall då Esc kunna användas? Är det möjligt att se om en spya ligger köad, eller är det timerelände som gäller?
- MadModder
- Co Admin
- Inlägg: 30112
- Blev medlem: 6 september 2003, 13:32:07
- Ort: MadLand (Enköping)
- Kontakt:
Re: Linux: getchar()
Kanske detta https://github.com/pkubik/readkey
Sen hittade jag detta:
” Back in the day, programs that wanted to distinguish between the press of an escape key and the press of an arrow or numeric keypad key had to fiddle with the termios VTIME and VMIN values. Multiple characters that appeared within a few tenths of a second of each other were considered to have come from an arrow or numerical keypad key”
Sen hittade jag detta:
” Back in the day, programs that wanted to distinguish between the press of an escape key and the press of an arrow or numeric keypad key had to fiddle with the termios VTIME and VMIN values. Multiple characters that appeared within a few tenths of a second of each other were considered to have come from an arrow or numerical keypad key”
Re: Linux: getchar()
Tack för svar.
Då är det så här bakvänt. Den som designade getchar() måste ha druckit mycket jäst Jolt efter en alldeles för lång dag när han hittade på eländet.
Då är det så här bakvänt. Den som designade getchar() måste ha druckit mycket jäst Jolt efter en alldeles för lång dag när han hittade på eländet.
Re: Linux: getchar()
Getchar() gör väl det den skall, visar vilka tangenter som tryckts? Sen att tangentbordet skickar en kaskad av tangenttryckningar för vissa tangenter är väl inte funktionens fel?
Men jag har aldrig programmerat i Linux så kanske jag som fattar fel.
Men jag har aldrig programmerat i Linux så kanske jag som fattar fel.
Re: Linux: getchar()
Ncurses getch() kan ge funktionstangenter om jag kommer ihåg rätt
Men man vill kanske inte använda ncurses av andra skäl.
Men man vill kanske inte använda ncurses av andra skäl.
Re: Linux: getchar()
Gräver man mot lågnivå så hittar man mycket historiskt skit som måste hanteras, som alla glömt bort men faktiskt är kvar men väl gömt bakom funktioner... och PC-världen är väl en av de sämsta när det gäller hela tiden plåstrad HW och dess quirkar stackade på varandra.
Re: Linux: getchar()
Man kan använda Xlib, men det är ju inte jätteenkelt, som du säkert vet.
Där får man ut tangentkoder på låg nivå.
Där får man ut tangentkoder på låg nivå.
Re: Linux: getchar()
Funktionen getchar() är mycket primitiv vilket man snabbt konstaterade redan på 80-talet.
Minsta "feltryck" på någon F-tangent eller liknande och programmet spårar ur.
Sedan dess har jag alltid använt en egen funktion som kapslar in getchar() med egen buffert och hantering av fler-teckens-tangenter.
Man kompletterar även med egna funktioner motsvarande clearbuffer() och ungetchar().
Dessutom behöver man en tabell/#DEFINE/motsavarnde med vad de olika ASCII- och ICKEASCII-koderna motsvarar för tangent.
Allt hamnar i en liten .c-fil och .h-fil som enkelt inkluderas i projektet.
Därefter är det hur lätt som helst att hantera alla tänkbara knapptryck och knapptrycks-kombinationer på tangentbordet.
De man inte behöver bara ignoreras utan att programmet kraschar.
Minsta "feltryck" på någon F-tangent eller liknande och programmet spårar ur.
Sedan dess har jag alltid använt en egen funktion som kapslar in getchar() med egen buffert och hantering av fler-teckens-tangenter.
Man kompletterar även med egna funktioner motsvarande clearbuffer() och ungetchar().
Dessutom behöver man en tabell/#DEFINE/motsavarnde med vad de olika ASCII- och ICKEASCII-koderna motsvarar för tangent.
Allt hamnar i en liten .c-fil och .h-fil som enkelt inkluderas i projektet.
Därefter är det hur lätt som helst att hantera alla tänkbara knapptryck och knapptrycks-kombinationer på tangentbordet.
De man inte behöver bara ignoreras utan att programmet kraschar.
Re: Linux: getchar()
Det är väl något i den stilen jag har nu. Kommer den i otakt kan det ske lite magiska saker, men den kommer snabbt rätt igen.
Tangentbordet kräker väl en del på vissa knappar, men just det borde systemet hantera och erbjuda en alternativ ny funktion som ger ett entydigt värde i fast format för alla tangenterna. Xlib har det, varför inte glibc?
Med egna teckentabeller till Xlib är nästan allt "fritt". Det är Alt-F som där är problem med och något med program som tar över en viss kombination i alla lägen.
getchar() har många problemtangenter, men antar rätt parameterblock löser det mesta.
Saknar också en event driven funktion, men de blir väl ungefär detsamma med en blocking. Det viktiga är att den inte vrålkör i en väntloop och konsumerar CPU till ingenting.
Tangentbordet kräker väl en del på vissa knappar, men just det borde systemet hantera och erbjuda en alternativ ny funktion som ger ett entydigt värde i fast format för alla tangenterna. Xlib har det, varför inte glibc?
Med egna teckentabeller till Xlib är nästan allt "fritt". Det är Alt-F som där är problem med och något med program som tar över en viss kombination i alla lägen.
getchar() har många problemtangenter, men antar rätt parameterblock löser det mesta.
Saknar också en event driven funktion, men de blir väl ungefär detsamma med en blocking. Det viktiga är att den inte vrålkör i en väntloop och konsumerar CPU till ingenting.
Re: Linux: getchar()
Hur f*n får jag bort xon/xoff från getchar?
Skickar en termios med IXON och IXOFF clearade, men detta hänger kvar ändå.
Löste det själv. c_iflag, inte c_lflag...
Skickar en termios med IXON och IXOFF clearade, men detta hänger kvar ändå.
Löste det själv. c_iflag, inte c_lflag...