Subversion Repositories Kolibri OS

Rev

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);