annotate linux/getch2.c @ 4559:5dc383bb1c82

added mga_top_reserved module parameter to skip a configurable amount of space at the top of video memory. this is needed to prevent corruption of the kernel's console font when using the "fastfont" option with matroxfb.
author rfelker
date Thu, 07 Feb 2002 02:07:29 +0000
parents 334bae48841b
children 5d7bd47b46ef
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
1 /* GyS-TermIO v2.0 (for GySmail v3) (C) 1999 A'rpi/ESP-team */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
2
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
3 #include "../config.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
4
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
5 //#define USE_TERMCAP
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
6 #define USE_IOCTL
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
7
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
8 #define MAX_KEYS 64
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
9 #define BUF_LEN 256
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
11 #include <stdio.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
12 #include <stdlib.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
13 #include <string.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
14 #include <sys/time.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15 #include <sys/types.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
16 #ifdef USE_IOCTL
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
17 #include <sys/ioctl.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
18 #endif
3281
310c0b9bea21 detect termios.h if no sys/termios.h (qnx getch2 support working)
alex
parents: 3014
diff changeset
19
3009
e22bba6cb6a6 added HAVE_TERMIOS
alex
parents: 2089
diff changeset
20 #ifdef HAVE_TERMIOS
3281
310c0b9bea21 detect termios.h if no sys/termios.h (qnx getch2 support working)
alex
parents: 3014
diff changeset
21 #ifdef HAVE_TERMIOS_H
310c0b9bea21 detect termios.h if no sys/termios.h (qnx getch2 support working)
alex
parents: 3014
diff changeset
22 #include <termios.h>
310c0b9bea21 detect termios.h if no sys/termios.h (qnx getch2 support working)
alex
parents: 3014
diff changeset
23 #endif
3282
alex
parents: 3281
diff changeset
24 #ifdef HAVE_SYS_TERMIOS_H
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
25 #include <sys/termios.h>
3009
e22bba6cb6a6 added HAVE_TERMIOS
alex
parents: 2089
diff changeset
26 #endif
3281
310c0b9bea21 detect termios.h if no sys/termios.h (qnx getch2 support working)
alex
parents: 3014
diff changeset
27 #endif
310c0b9bea21 detect termios.h if no sys/termios.h (qnx getch2 support working)
alex
parents: 3014
diff changeset
28
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
29 #include <unistd.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
30
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
31 #include "keycodes.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
32
3009
e22bba6cb6a6 added HAVE_TERMIOS
alex
parents: 2089
diff changeset
33 #ifdef HAVE_TERMIOS
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
34 static struct termios tio_orig;
3009
e22bba6cb6a6 added HAVE_TERMIOS
alex
parents: 2089
diff changeset
35 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
36 static int getch2_len=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
37 static char getch2_buf[BUF_LEN];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
38
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
39 int screen_width=80;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
40 int screen_height=24;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
41
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
42 typedef struct {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
43 int len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
44 int code;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
45 char chars[8];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
46 } keycode_st;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47 static keycode_st getch2_keys[MAX_KEYS];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48 static int getch2_key_db=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
49
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
50 #ifdef USE_TERMCAP
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
51
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
52 #if 0
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
53 #include <termcap.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
54 #else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55 extern int tgetent (char *BUFFER, char *TERMTYPE);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56 extern int tgetnum (char *NAME);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
57 extern int tgetflag (char *NAME);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
58 extern char *tgetstr (char *NAME, char **AREA);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
59 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61 static char term_buffer[4096];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
62 static char term_buffer2[4096];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
63 static char *term_p=term_buffer2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
64
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
65 static void termcap_add(char *id,int code){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
66 char *p=tgetstr(id,&term_p);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67 if(!p) return;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
68 if(getch2_key_db>=MAX_KEYS) return;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69 getch2_keys[getch2_key_db].len=strlen(p);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
70 strncpy(getch2_keys[getch2_key_db].chars,p,8);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
71 getch2_keys[getch2_key_db].code=code;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
72 ++getch2_key_db;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
73 /* printf("%s=%s\n",id,p); */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
74 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
75
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76 static int success=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
77
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
78 int load_termcap(char *termtype){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
79 if(!termtype) termtype=getenv("TERM");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
80 success=tgetent(term_buffer, termtype);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
81 if(success<0){ printf("Could not access the 'termcap' data base.\n"); return 0; }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
82 if(success==0){ printf("Terminal type `%s' is not defined.\n", termtype);return 0;}
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
83
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
84 screen_width=tgetnum("co");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
85 screen_height=tgetnum("li");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
86 if(screen_width<1 || screen_width>255) screen_width=80;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
87 if(screen_height<1 || screen_height>255) screen_height=24;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
88
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
89 termcap_add("kP",KEY_PGUP);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
90 termcap_add("kN",KEY_PGDWN);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
91 termcap_add("kh",KEY_HOME);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
92 termcap_add("kH",KEY_END);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
93 termcap_add("kI",KEY_INS);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
94 termcap_add("kD",KEY_DEL);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
95 termcap_add("kb",KEY_BS);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
96 termcap_add("kl",KEY_LEFT);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
97 termcap_add("kd",KEY_DOWN);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
98 termcap_add("ku",KEY_UP);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
99 termcap_add("kr",KEY_RIGHT);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
100 termcap_add("k0",KEY_F+0);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
101 termcap_add("k1",KEY_F+1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
102 termcap_add("k2",KEY_F+2);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
103 termcap_add("k3",KEY_F+3);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
104 termcap_add("k4",KEY_F+4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
105 termcap_add("k5",KEY_F+5);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
106 termcap_add("k6",KEY_F+6);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
107 termcap_add("k7",KEY_F+7);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
108 termcap_add("k8",KEY_F+8);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
109 termcap_add("k9",KEY_F+9);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
110 termcap_add("k;",KEY_F+10);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
111 return getch2_key_db;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
112 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
113
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
114 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
115
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
116 void get_screen_size(){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
117 #ifdef USE_IOCTL
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
118 struct winsize ws;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
119 if (ioctl(0, TIOCGWINSZ, &ws) < 0 || !ws.ws_row || !ws.ws_col) return;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
120 /* printf("Using IOCTL\n"); */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
121 screen_width=ws.ws_col;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
122 screen_height=ws.ws_row;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
123 #endif
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
124 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
125
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
126 int getch2(int time){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
127 int len=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
128 int code=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
129 int i=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
130
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
131 while(!getch2_len || (getch2_len==1 && getch2_buf[0]==27)){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
132 fd_set rfds;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
133 struct timeval tv;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
134 int retval;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
135 /* Watch stdin (fd 0) to see when it has input. */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
136 FD_ZERO(&rfds); FD_SET(0,&rfds);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
137 /* Wait up to 'time' microseconds. */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
138 tv.tv_sec=time/1000; tv.tv_usec = (time%1000)*1000;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
139 retval=select(1, &rfds, NULL, NULL, &tv);
3014
16576e05b93a Profiling fix by Artur Skawina <skawina@geocities.com>
atmos4
parents: 3009
diff changeset
140 if(retval<=0) return -1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
141 /* Data is available now. */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
142 retval=read(0,&getch2_buf[getch2_len],BUF_LEN-getch2_len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
143 if(retval<1) return -1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
144 getch2_len+=retval;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
145 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
146
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
147 /* First find in the TERMCAP database: */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
148 for(i=0;i<getch2_key_db;i++){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
149 if((len=getch2_keys[i].len)<=getch2_len)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
150 if(memcmp(getch2_keys[i].chars,getch2_buf,len)==0){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
151 code=getch2_keys[i].code; goto found;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
152 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
153 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
154 len=1;code=getch2_buf[0];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
155 /* Check the well-known codes... */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
156 if(code!=27){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
157 if(code=='A'-64){ code=KEY_HOME; goto found;}
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
158 if(code=='E'-64){ code=KEY_END; goto found;}
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
159 if(code=='D'-64){ code=KEY_DEL; goto found;}
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
160 if(code=='H'-64){ code=KEY_BS; goto found;}
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
161 if(code=='U'-64){ code=KEY_PGUP; goto found;}
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
162 if(code=='V'-64){ code=KEY_PGDWN; goto found;}
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
163 if(code==8 || code==127){ code=KEY_BS; goto found;}
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
164 if(code==10 || code==13){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
165 if(getch2_len>1){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
166 int c=getch2_buf[1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
167 if(c==10 || c==13) if(c!=code) len=2;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
168 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
169 code=KEY_ENTER;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
170 goto found;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
171 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
172 } else if(getch2_len>1){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
173 int c=getch2_buf[1];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
174 if(c==27){ code=KEY_ESC; len=2; goto found;}
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
175 if(c>='0' && c<='9'){ code=c-'0'+KEY_F; len=2; goto found;}
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
176 if(getch2_len>=4 && c=='[' && getch2_buf[2]=='['){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
177 int c=getch2_buf[3];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
178 if(c>='A' && c<'A'+12){ code=KEY_F+1+c-'A';len=4;goto found;}
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
179 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
180 if(c=='[' || c=='O') if(getch2_len>=3){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
181 int c=getch2_buf[2];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
182 static short int ctable[]={ KEY_UP,KEY_DOWN,KEY_RIGHT,KEY_LEFT,0,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
183 KEY_END,KEY_PGDWN,KEY_HOME,KEY_PGUP,0,0,KEY_INS,0,0,0,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
184 KEY_F+1,KEY_F+2,KEY_F+3,KEY_F+4};
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
185 if(c>='A' && c<='S')
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
186 if(ctable[c-'A']){ code=ctable[c-'A']; len=3; goto found;}
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
187 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
188 if(getch2_len>=4 && c=='[' && getch2_buf[3]=='~'){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
189 int c=getch2_buf[2];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
190 int ctable[8]={KEY_HOME,KEY_INS,KEY_DEL,KEY_END,KEY_PGUP,KEY_PGDWN,KEY_HOME,KEY_END};
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
191 if(c>='1' && c<='8'){ code=ctable[c-'1']; len=4; goto found;}
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
192 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
193 if(getch2_len>=5 && c=='[' && getch2_buf[4]=='~'){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
194 int i=getch2_buf[2]-'0';
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
195 int j=getch2_buf[3]-'0';
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
196 if(i>=0 && i<=9 && j>=0 && j<=9){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
197 static short int ftable[20]={
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
198 11,12,13,14,15, 17,18,19,20,21,
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
199 23,24,25,26,28, 29,31,32,33,34 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
200 int a=i*10+j;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
201 for(i=0;i<20;i++) if(ftable[i]==a){ code=KEY_F+1+i;len=5;goto found;}
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
202 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
203 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
204 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
205 found:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
206 if((getch2_len-=len)>0){
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
207 int i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
208 for(i=0;i<getch2_len;i++) getch2_buf[i]=getch2_buf[len+i];
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
209 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
210 return code;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
211 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
212
1632
77cf72182c7f status management
arpi
parents: 1451
diff changeset
213 static int getch2_status=0;
77cf72182c7f status management
arpi
parents: 1451
diff changeset
214
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
215 void getch2_enable(){
3009
e22bba6cb6a6 added HAVE_TERMIOS
alex
parents: 2089
diff changeset
216 #ifdef HAVE_TERMIOS
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
217 struct termios tio_new;
1433
d2c90f272101 Win32 portability.
atmos4
parents: 1038
diff changeset
218 #if defined(__NetBSD__) || defined(__svr4__) || defined(__CYGWIN__)
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 958
diff changeset
219 tcgetattr(0,&tio_orig);
2089
d7920c8257e2 BSD/OS support
arpi
parents: 1632
diff changeset
220 #elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__bsdi__)
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 958
diff changeset
221 ioctl(0,TIOCGETA,&tio_orig);
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents: 1
diff changeset
222 #else
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 958
diff changeset
223 ioctl(0,TCGETS,&tio_orig);
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents: 1
diff changeset
224 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
225 tio_new=tio_orig;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
226 tio_new.c_lflag &= ~(ICANON|ECHO); /* Clear ICANON and ECHO. */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
227 tio_new.c_cc[VMIN] = 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
228 tio_new.c_cc[VTIME] = 0;
1433
d2c90f272101 Win32 portability.
atmos4
parents: 1038
diff changeset
229 #if defined(__NetBSD__) || defined(__svr4__) || defined(__CYGWIN__)
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 958
diff changeset
230 tcsetattr(0,TCSANOW,&tio_new);
2089
d7920c8257e2 BSD/OS support
arpi
parents: 1632
diff changeset
231 #elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__bsdi__)
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 958
diff changeset
232 ioctl(0,TIOCSETA,&tio_new);
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents: 1
diff changeset
233 #else
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 958
diff changeset
234 ioctl(0,TCSETS,&tio_new);
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents: 1
diff changeset
235 #endif
3009
e22bba6cb6a6 added HAVE_TERMIOS
alex
parents: 2089
diff changeset
236 #endif
1632
77cf72182c7f status management
arpi
parents: 1451
diff changeset
237 getch2_status=1;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
238 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
239
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
240 void getch2_disable(){
1632
77cf72182c7f status management
arpi
parents: 1451
diff changeset
241 if(!getch2_status) return; // already disabled / never enabled
3009
e22bba6cb6a6 added HAVE_TERMIOS
alex
parents: 2089
diff changeset
242 #ifdef HAVE_TERMIOS
1433
d2c90f272101 Win32 portability.
atmos4
parents: 1038
diff changeset
243 #if defined(__NetBSD__) || defined(__svr4__) || defined(__CYGWIN__)
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 958
diff changeset
244 tcsetattr(0,TCSANOW,&tio_orig);
2089
d7920c8257e2 BSD/OS support
arpi
parents: 1632
diff changeset
245 #elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__bsdi__)
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 958
diff changeset
246 ioctl(0,TIOCSETA,&tio_orig);
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents: 1
diff changeset
247 #else
1038
b36fb1ae4b53 applied solaris8/netbsd/other fixes patch by J¸«ärgen Keil <jk@tools.de>
arpi_esp
parents: 958
diff changeset
248 ioctl(0,TCSETS,&tio_orig);
958
162a78d3cc08 FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
arpi_esp
parents: 1
diff changeset
249 #endif
3009
e22bba6cb6a6 added HAVE_TERMIOS
alex
parents: 2089
diff changeset
250 #endif
1632
77cf72182c7f status management
arpi
parents: 1451
diff changeset
251 getch2_status=0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
252 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
253