@@ -47,7 +47,6 @@ kbhit(void) {
47
47
48
48
static void
49
49
raw (char * s , char * fmt , ...) {
50
- //raw(char s[], char *fmt, ...) {
51
50
52
51
va_list ap ;
53
52
@@ -59,7 +58,6 @@ raw(char *s, char *fmt, ...) {
59
58
}
60
59
61
60
static void
62
- //con(char s[]) {
63
61
con (char * s ) {
64
62
65
63
struct addrinfo * res , hints = {
@@ -151,6 +149,21 @@ pars(int sl, char *s) {
151
149
}
152
150
}
153
151
152
+ static char *
153
+ input_handler (size_t size ) {
154
+
155
+ char * usrin = malloc (sizeof (char ) * (size + 1 ));
156
+ struct termios tp , save ;
157
+
158
+ tcgetattr (STDIN_FILENO , & tp );
159
+ save = tp ;
160
+ tp .c_cc [VERASE ] = 127 ;
161
+ tcsetattr (STDIN_FILENO , TCSANOW , & tp );
162
+ fgets (usrin , size , stdin );
163
+ tcsetattr (STDIN_FILENO , TCSANOW , & save );
164
+ return usrin ;
165
+ }
166
+
154
167
int
155
168
main (int argc , char * * argv ) {
156
169
@@ -202,20 +215,13 @@ main(int argc, char **argv) {
202
215
}
203
216
else {
204
217
char usrin [BUFF ], v1 [BUFF - 20 ], v2 [20 ], c1 ;
205
- struct termios tp , save ;
206
-
207
- tcgetattr (STDIN_FILENO , & tp );
208
- save = tp ;
209
- tp .c_cc [VERASE ] = 127 ;
210
218
211
219
while (waitpid (pid , NULL , WNOHANG ) == 0 ) {
212
220
while (!kbhit () && waitpid (pid , NULL , WNOHANG ) == 0 ) {
213
221
dprintf (fd [1 ], ":\n" );
214
222
}
215
223
216
- tcsetattr (STDIN_FILENO , TCSANOW , & tp );
217
- fgets (usrin , BUFF , stdin );
218
- tcsetattr (STDIN_FILENO , TCSANOW , & save );
224
+ strcpy (usrin , input_handler (BUFF ));
219
225
220
226
if (sscanf (usrin , ":%[M] %s %[^\n]\n" , & c1 , v2 , v1 ) == 3 ||
221
227
sscanf (usrin , ":%[Qnjpm] %[^\n]\n" , & c1 , v1 ) == 2 ||
@@ -232,8 +238,6 @@ main(int argc, char **argv) {
232
238
}
233
239
}
234
240
else dprintf (fd [1 ], "%s" , usrin );
235
-
236
- fflush (stdout );
237
241
}
238
242
}
239
243
return 0 ;
0 commit comments