Rev 3247 | Rev 4050 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3247 | Rev 4015 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | /// =========================================================== |
1 | /// =========================================================== |
Line 2... | Line -... | ||
2 | - | ||
3 | void command_clear() |
- | |
4 | { |
- | |
5 | for (;CMD_POS;CMD_POS--) |
- | |
6 | printf("%c %c", 8, 8); |
- | |
7 | CMD[0]='\0'; |
- | |
8 | } |
- | |
9 | - | ||
10 | /// =========================================================== |
- | |
11 | 2 | ||
12 | void command_history_add(char command[]) |
3 | void command_history_add(char command[]) |
Line 13... | Line 4... | ||
13 | { |
4 | { |
14 | 5 | ||
Line 47... | Line 38... | ||
47 | 38 | ||
Line 48... | Line 39... | ||
48 | void command_get() |
39 | void command_get() |
49 | { |
40 | { |
50 | unsigned key; |
41 | unsigned key; |
51 | //unsigned pos = 0; |
- | |
52 | int hist; |
- | |
Line 53... | Line 42... | ||
53 | 42 | ||
- | 43 | unsigned i; |
|
- | 44 | unsigned cmdLen = 0; |
|
54 | CMD_POS = 0; |
45 | unsigned cmdPos = 0; |
Line 55... | Line 46... | ||
55 | CMD_NUM = 0; |
46 | CMD[0] = '\0'; |
56 | 47 | ||
57 | for (;;) |
48 | for (;;) |
58 | { |
49 | { |
59 | key = getch(); |
50 | key = getch(); |
60 | if ( 0 != (key & 0xff) ) |
51 | if ( 0 != (key & 0xff) ) |
61 | { |
52 | { |
62 | key &= 0xff; |
53 | key &= 0xff; |
63 | switch (key) |
54 | switch (key) |
- | 55 | { |
|
- | 56 | case 27: // ESC |
|
- | 57 | for (i = cmdPos; i < cmdLen; i++) |
|
- | 58 | printf(" "); |
|
64 | { |
59 | for (i = cmdLen; i > 0; i--) |
- | 60 | printf("%c %c", 8, 8); |
|
- | 61 | cmdLen = 0; |
|
65 | case 27: // ESC |
62 | cmdPos = 0; |
Line -... | Line 63... | ||
- | 63 | CMD[0] = '\0'; |
|
66 | command_clear(); |
64 | break; |
67 | break; |
- | |
68 | 65 | ||
69 | case 13: // ENTER |
- | |
70 | CMD[CMD_POS] = '\0'; |
66 | |
71 | printf("\n\r"); |
67 | case 13: // ENTER |
Line -... | Line 68... | ||
- | 68 | printf("\n\r"); |
|
72 | 69 | command_history_add(CMD); |
|
73 | command_history_add(CMD); |
70 | return; |
74 | return; |
71 | |
- | 72 | ||
- | 73 | case 8: // BACKSPACE |
|
- | 74 | if (cmdPos > 0) |
|
- | 75 | { |
|
- | 76 | for (i = cmdPos-1; i < cmdLen; i++) |
|
- | 77 | CMD[i] = CMD[i+1]; |
|
- | 78 | ||
75 | 79 | for (i = 0; i < cmdLen-cmdPos; i++) |
|
- | 80 | printf (" "); |
|
76 | case 8: // BACKSPACE |
81 | |
- | 82 | for (i = 0; i < cmdLen; i++) |
|
- | 83 | printf ("%c %c", 8, 8); |
|
- | 84 | ||
- | 85 | printf("%s", CMD); |
|
- | 86 | ||
- | 87 | for (i = 0; i < cmdLen-cmdPos; i++) |
|
77 | if (CMD_POS > 0) |
88 | printf("%c", 8); |
78 | { |
89 | |
Line -... | Line 90... | ||
- | 90 | cmdPos--; |
|
79 | printf ("%c %c", 8, 8); |
91 | cmdLen--; |
80 | CMD_POS--; |
92 | } |
Line -... | Line 93... | ||
- | 93 | break; |
|
81 | } |
94 | |
82 | break; |
95 | |
83 | 96 | case 9: // TAB |
|
84 | case 9: // TAB |
- | |
85 | break; |
97 | break; |
86 | 98 | ||
87 | default: |
99 | |
88 | if (CMD_POS < 255) |
100 | default: |
89 | { |
101 | if (cmdLen < 255) |
Line -... | Line 102... | ||
- | 102 | { |
|
- | 103 | if ( kol_key_control() & 0x40 ) // ¥á«¨ ¢ª«îçñ CapsLock |
|
- | 104 | if ( (kol_key_control() & 1) || (kol_key_control() & 2)) // ¥á«¨ ¦ âë è¨äâë |
|
90 | 105 | key = tolower(key); |
|
- | 106 | else |
|
- | 107 | key = toupper(key); |
|
- | 108 | ||
- | 109 | for (i = cmdLen+1; i > cmdPos; i--) |
|
- | 110 | CMD[i] = CMD[i-1]; |
|
- | 111 | ||
- | 112 | CMD[cmdPos] = key; |
|
- | 113 | ||
- | 114 | for (i = cmdPos; i > 0; i--) |
|
91 | if ( kol_key_control() & 0x40 ) // ¥á«¨ ¢ª«îçñ CapsLock |
115 | printf("%c %c", 8, 8); |
92 | if ( (kol_key_control() & 1) || (kol_key_control() & 2)) // ¥á«¨ ¦ âë è¨äâë |
116 | |
93 | key = tolower(key); |
117 | printf("%s", CMD); |
94 | else |
118 | |
95 | key = toupper(key); |
119 | for (i = 0; i < cmdLen-cmdPos; i++) |
- | 120 | printf("%c", 8); |
|
96 | 121 | ||
97 | CMD[CMD_POS] = key; |
122 | cmdPos++; |
98 | CMD_POS++; |
123 | cmdLen++; |
99 | printf("%c", key); |
124 | } |
100 | } |
- | |
101 | break; |
- | |
102 | }; |
125 | break; |
103 | } |
126 | |
- | 127 | } |
|
- | 128 | } |
|
- | 129 | else |
|
- | 130 | { |
|
- | 131 | key = (key>>8)&0xff; |
|
- | 132 | switch (key) |
|
- | 133 | { |
|
- | 134 | case 83: // Del |
|
- | 135 | if (cmdPos < cmdLen) |
|
- | 136 | { |
|
- | 137 | for (i = cmdPos; i < cmdLen; i++) |
|
- | 138 | CMD[i] = CMD[i+1]; |
|
- | 139 | ||
- | 140 | for (i = 0; i < cmdLen-cmdPos; i++) |
|
- | 141 | printf(" "); |
|
- | 142 | ||
- | 143 | for (i = 0; i < cmdLen-cmdPos; i++) |
|
- | 144 | printf("%c", 8); |
|
- | 145 | ||
- | 146 | for (i = cmdPos; i < cmdLen; i++) |
|
- | 147 | printf("%c", CMD[i]); |
|
- | 148 | ||
- | 149 | for (i = 0; i < cmdLen-cmdPos; i++) |
|
- | 150 | printf("%c", 8); |
|
- | 151 | ||
- | 152 | cmdLen--; |
|
- | 153 | } |
|
- | 154 | ||
- | 155 | break; |
|
- | 156 | ||
- | 157 | case 75: // Left |
|
- | 158 | if (cmdPos > 0) |
|
- | 159 | { |
|
- | 160 | printf("%c", 8); |
|
- | 161 | cmdPos--; |
|
- | 162 | } |
|
- | 163 | break; |
|
- | 164 | ||
- | 165 | ||
- | 166 | case 77: // Right |
|
Line 104... | Line 167... | ||
104 | else // ®¡à ¡®âª à áè¨à¥ëå ª« ¢¨è |
167 | if (cmdPos < cmdLen) |
105 | { |
168 | { |
106 | key = (key>>8)&0xff; |
169 | printf("%c", CMD[cmdPos]); |
- | 170 | cmdPos++; |
|
- | 171 | } |
|
107 | // printf ("%d\n\r", key); |
172 | break; |
- | 173 | ||
- | 174 | ||
- | 175 | case 80: // Down |
|
Line 108... | Line 176... | ||
108 | 176 | for (i = 0; i < CMD_HISTORY_NUM; i++) |
|
109 | switch (key) |
177 | { |
110 | { |
178 | |
111 | 179 | for (i = cmdPos; i < cmdLen; i++) |
|
Line 112... | Line 180... | ||
112 | case 80: // Down |
180 | printf(" "); |
113 | for (hist = 0; hist < CMD_HISTORY_NUM; hist++) |
181 | |
- | 182 | for (i = cmdLen; i > 0; i--) |
|
114 | { |
183 | printf("%c %c", 8, 8); |
115 | command_clear(); |
184 | |
- | 185 | if (CMD_NUM < CMD_HISTORY_NUM-1) |
|
116 | 186 | CMD_NUM++; |
|
Line 117... | Line 187... | ||
117 | if (CMD_NUM < CMD_HISTORY_NUM-1) |
187 | else |
Line -... | Line 188... | ||
- | 188 | CMD_NUM = 0; |
|
118 | CMD_NUM++; |
189 | |
119 | else |
190 | printf( CMD_HISTORY[CMD_NUM] ); |
120 | CMD_NUM = 0; |
191 | strcpy(CMD, CMD_HISTORY[CMD_NUM]); |
- | 192 | cmdLen = strlen(CMD); |
|
- | 193 | if ((cmdPos = strlen(CMD)) != 0) |
|
121 | 194 | break; |
|
- | 195 | ||
- | 196 | } |
|
- | 197 | ||
Line 122... | Line 198... | ||
122 | printf( CMD_HISTORY[CMD_NUM] ); |
198 | break; |
123 | strcpy(CMD, CMD_HISTORY[CMD_NUM]); |
199 | |
124 | if ((CMD_POS = strlen(CMD)) != 0) |
200 | |
125 | break; |
201 | case 72: // Up |
Line 126... | Line 202... | ||
126 | } |
202 | for (i = 0; i < CMD_HISTORY_NUM; i++) |
127 | 203 | { |
|
- | 204 | ||
128 | break; |
205 | for (i = cmdPos; i < cmdLen; i++) |
129 | 206 | printf(" "); |
|
130 | case 72: // Up |
207 | |
131 | for (hist = 0; hist < CMD_HISTORY_NUM; hist++) |
208 | for (i = cmdLen; i > 0; i--) |
Line -... | Line 209... | ||
- | 209 | printf("%c %c", 8, 8); |
|
132 | { |
210 | |
133 | command_clear(); |
211 | if (CMD_NUM > 0) |
Line 134... | Line -... | ||
134 | - | ||
135 | if (CMD_NUM > 0) |
212 | CMD_NUM--; |
Line 136... | Line 213... | ||
136 | CMD_NUM--; |
213 | else |
137 | else |
214 | CMD_NUM = CMD_HISTORY_NUM-1; |
Line 138... | Line 215... | ||
138 | CMD_NUM = CMD_HISTORY_NUM-1; |
215 | |
Line 139... | Line 216... | ||
139 | 216 | printf( CMD_HISTORY[CMD_NUM] ); |
|
Line 140... | Line 217... | ||
140 | printf( CMD_HISTORY[CMD_NUM] ); |
217 | strcpy(CMD, CMD_HISTORY[CMD_NUM]); |
141 | strcpy(CMD, CMD_HISTORY[CMD_NUM]); |
218 | cmdLen = strlen(CMD); |