blob: d0e28802d3e6d084f366c10c58b9430769058e94 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
#include <stdio.h>
#include <string.h>
#include "config.h"
#include "interface.h"
#include "terminal.h"
#include "exceptions.h"
void supprime(char * ch) {
for (; *ch; ch++) {
*ch = *(ch + 1);
}
}
void inserer(char * ch, char c) {
int i;
for (i = strlen(ch) - 1; i != -1; i--) {
*(ch + i + 1) = *(ch + i);
}
*ch = c;
}
void ifloop(void) {
int cread, i, insert = 0;
int gotesc = 0, quit = 0;
char buffer[BUFSIZ] = "";
int position = 0;
printf("> ");
while (!quit) {
cread = fgetc(input);
if (gotesc) {
switch (cread) {
case 91:
cread = fgetc(input);
switch (cread) {
case 49: /* Home */
break;
case 50: /* Insert */
insert ^= 1;
break;
case 52: /* End */
break;
case 67: /* Droite */
if (buffer[position]) {
printf("%c", buffer[position++]);
}
break;
case 68: /* Gauche */
if (position) {
printf("\010");
position--;
}
break;
default:
gotesc = 0;
break;
}
break;
default:
gotesc = 0;
break;
}
if (gotesc) {
cread = fgetc(input);
gotesc = 0;
}
}
switch(cread) {
case 3: /* CTRL-C */
quit = 1;
break;
case 8: /* backspace */
if (position) {
supprime(&(buffer[--position]));
}
printf("\010%s ", &(buffer[position]));
for (i = 0; i <= strlen(&(buffer[position])); i++) {
printf("\010");
}
break;
case 10: /* Entrée */
printf("\n");
parse_line(buffer);
position = 0;
buffer[0] = 0;
printf("> ");
break;
case 27: /* ESC */
gotesc = 1;
break;
case 126: /* ~ */
break;
case 127: /* Suppr */
if (buffer[position]) {
supprime(&(buffer[position]));
}
printf("%s ", &(buffer[position]));
for (i = 0; i <= strlen(&(buffer[position])); i++) {
printf("\010");
}
break;
default:
if (insert) {
inserer(&(buffer[position]), cread);
printf("%s", &(buffer[position]));
position++;
for (i = 0; i < strlen(&(buffer[position])); i++) {
printf("\010");
}
} else {
printf("%c", cread);
buffer[position++] = cread;
}
break;
}
}
}
|