Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
773 gluk 1
//Leency & Veliant -=- KolibriOS Team -=- 2008
2
 
3
#pragma option J0
4
#pragma option LST
5
#pragma option OC
6
#pragma option 4
7
#pragma option A
8
#include "lib\kolibri.h--"
9
#include "lib\memory.h--"
10
#include "imgs\Imgs.cpp"
11
#include "imgs\icons.cpp"
12
#include "imgs\left_p.cpp"
13
#include "LVabout.c--"
14
#speed
15
 
16
//локализация и настройки
17
char header = "Eolite File Manager v0.84";
18
char gotodev = "Goto:";
19
char actions = "Actions";
20
char preview = "Preview";
21
char tfile = "File";
22
char ttype = "Type";
23
char tsize = "Size";
24
dword videlenie=0x94AECE; //цвет выделенного элемента из списка файлов
25
//
26
 
27
int but_num, kolichestvo, curbtn, za_kadrom, longest_name;;
28
dword top_actions, show_actions=1, show_preview=0, top_pr;
29
int razm_scrl, on_y; //для скрола
30
int y,off; //для текста
31
char path[256] = "/rd/1/", edit_path[256], temp[256]; //для путей
32
char file_path[256], param[256], file_name[256]; //для файлов
33
char copyfile[256],copy_name[256]; //копирование
34
int i=1; //для циклов
35
dword id=1;
36
dword ins_mas[200]=0; //Insert
37
dword file_mas[2000]; //список файлов
38
int cut_active, rename_active, del_active;
39
int temp_int, str_len;
40
dword stak[100]=0;
41
 
42
proc_info	Form;
43
 
44
struct {
45
	int	func;
46
	int	pos;
47
	int	rezerv;
48
	int	sizefile;
49
	int	buffer;
50
	char rezerv2;
51
	int	stroka;
52
}open_file_70;
53
dword buf, size, isdir;
54
 
55
struct {
56
     int     func;
57
     int     flag;
58
     int     param;
59
     int     rez1;
60
     int     rez2;
61
     char rezerv2;
62
     int     stroka;
63
}run_file_70;
64
 
65
void main()
66
dword pressed, key;
67
mouse m;
68
{
69
	skin_width = GetSkinWidth();
70
	buf = malloc(65536); //65536
71
	draw_window();
72
	$mov eax,40
73
    	$mov ebx,100111b
74
    	$int 0x40
75
	loop()
76
	{
77
		switch(WaitEvent())
78
		{
79
			CASE 6:
80
					IF (del_active==1) break;
81
					m.get();
82
					IF ((kolichestvo==but_num) || (m.y<57)) break; //если прокрутки нет, то никуда не мотаем
83
					IF (m.y>Form.width) m.y=57; //если курсор над окном
84
					IF (m.lkm==0) pressed=0; ELSE
85
					//if (m.y>=on_y+skin_width) if (m.y<=on_y+razm_scrl+skin_width)
86
					IF (m.x>=onLeft(21,0)) IF (m.x<=onLeft(6,0)) pressed=1;
87
					if (pressed==1) IF (m.y>=on_y+razm_scrl+skin_width) //if (kolichestvo
88
						{
89
						IF (za_kadrom+but_num>=kolichestvo) break;
90
						Line_ReDraw(0xFFFFFF); //белая полоса
91
						za_kadrom=za_kadrom+but_num; //za_kadrom=za_kadrom+1;
92
						List_ReDraw();
93
						}
94
					ELSE IF (pressed==1) IF (m.y<=on_y) IF (on_y<>57)
95
						{
96
						IF (za_kadrom>but_num) za_kadrom=za_kadrom-but_num; //za_kadrom=za_kadrom-1;
97
					 		ELSE za_kadrom=0;
98
						List_ReDraw();
99
						}
100
					break;
101
			CASE evButton:
102
				id=GetButtonID();
103
				IF (id==1) {ExitProcess(); break;}
104
				IF (del_active==1)
105
					{
106
					IF (id==301) Del_File();
107
					IF (id==302) {del_active=0; Open_Dir(#path,1);}
108
				 	break;
109
				 	}
110
				switch(id)
111
				{
112
					CASE 23: IF (strcmp(#path,"/")==-1) Dir_Up(); break;//up!
113
					case 26: Paste(); break;//paste
114
					case 27: Goto_edit_path(); break; //goto edit_path
115
					case 81: Del_Form(); break;//Delete file
116
					case 24: //cut
117
					case 25: //copy
118
						if (isdir==1) break; //папки пока что копировать не умеем
119
						copystr(#file_name,#copy_name);
120
						copystr(#file_path,#copyfile); //вычисляем какой файл копировать
121
						IF (id==24) cut_active=1; ELSE cut_active=0; //режем или копируем?
122
						break;
123
					case 30: //about
124
						EAX = 51;
125
						EBX = 1;
126
						ECX = #authors;
127
						EDX = #stak;
128
						$int 40h;
129
						break;
130
					case 50: //стрелка вверх на скроле
131
						IF (za_kadrom<=0) break;
132
						za_kadrom=za_kadrom-1;
133
						List_ReDraw();
134
						break;
135
					case 51: //стрелка вниз на скроле
136
						IF (za_kadrom+but_num>=kolichestvo) break;
137
						za_kadrom=za_kadrom+1;
138
						List_ReDraw();
139
						break;
140
					case 77: //actions
141
						IF (show_actions==1) show_actions=0; else show_actions=1;
142
						Actions(); //далее рисуем сдесь чтоб меньше была перерисовка
143
						IF (show_actions==1) DrawBar(22,top_actions*16+159,160,15,0x00699C);
144
						ELSE {
145
							DrawBar(22,top_actions*16+120,160,15,0x00699C);
146
							DrawBar(22,top_actions*16+242,160,50,0x00699C);
147
							}
148
						Preview();
149
						IF (show_preview==0) DrawBar(22,top_pr+18,160,101,0x00699C); //синее рисуем сдесь
150
						break;
151
					case 78: //preview
152
						if (show_preview==0)show_preview=1; else
153
						{ show_preview=0; DrawBar(22,top_pr+18,160,101,0x00699C); } //синее
154
						Preview();
155
						break;
156
					case 80: //rename
157
						if (isdir==1) break; //папки пока что переименовывать не умеем
158
						y= curbtn*18+85;
159
						DrawRegion(219,curbtn*18+57,onLeft(50,197),17,0x94AECE); //ободок
160
						DrawBar(220,curbtn*18+58,onLeft(50,197)-1,16,0xFFFFCC); //жёлтое
161
						WriteTextXY(224<<16+y, 0x80000000, #file_name, 0);
162
						rename_active=1;
163
						break;
164
					case 21: //Назад
165
						GoBack(1);
166
						break;
167
					case 22: //Вперёд
168
						GoBack(0);
169
						break;
170
				}//---------------------------переход по id----------------------
171
				if (id>200) //кнопки из списка файлов
172
				{
173
					if (curbtn!=id-201)
174
					{
175
						Line_ReDraw(0xFFFFFF); //белая полоса
176
						curbtn=id-201;
177
						Line_ReDraw(videlenie); //выделение
178
						break;
179
					}
180
					else
181
					if ((isdir==1)	if (strcmp(curbtn+1*304 + buf+72,"..")==-1)
182
					{
183
							copystr(#file_path, #path);
184
							copystr("/", #path+strlen(#path));
185
							za_kadrom=0; //вверх списка
186
							curbtn=0;
187
							Open_Dir(#path,1);
188
					} else Dir_Up(); else Run_File();
189
					break;
190
				}
191
				if (id>=100) //подключённые носители информации
192
				{
193
				Open_Dir("/",0);
194
				copystr(id-100*304+ buf+72, #path);
195
				if (strcmp(#path,"rd")==0) copystr("/rd/1/",#path);
196
				else
197
					{
198
					copystr("/", #temp);
199
					copystr(#path, #temp+strlen(#temp));
200
					copystr("/", #temp+strlen(#temp));
201
					copystr(#temp,#path);
202
					}
203
				za_kadrom=0; //вверх списка
204
				curbtn=0;
205
				Open_Dir(#path,1);
206
				break;
207
				}
208
			case evKey:
209
				key = GetKey();
210
				IF (del_active==1)
211
					{
212
					IF (key==013) Del_File();
213
					IF (key==027) {del_active=0; Open_Dir(#path,1);}
214
				 	break;
215
				 	}
216
				switch (key)
217
				{
218
						case 0x08: //backspace
219
									if (rename_active==1) {copystr(#file_name,#temp); if (strlen(#temp)<=0) break;}
220
										else {copystr(#edit_path,#temp); if (strlen(#temp)<=1) break;} //оставляем только "/"
221
										EBX=#temp + strlen(#temp)-1;
222
										ESBYTE[EBX] = 0;
223
									if (rename_active==1)
224
									{
225
										DrawBar(strlen(#file_name)*6+218,curbtn*18+58,6,16,0xFFFFCC); //жёлтое
226
										copystr(#temp,#file_name);
227
										WriteTextXY(224<<16+y, 0x80000000, #file_name, 0);
228
									} else { copystr(#temp,#edit_path); KEdit(); }
229
									break;
230
						case 014: //новое окно
231
									break;
232
						case 024: //Ctrl+X cut
233
									if (isdir==1) break; //папки пока что копировать не умеем
234
									copystr(#file_name,#copy_name);
235
									copystr(#file_path,#copyfile); //вычисляем какой файл копировать
236
									cut_active=1;
237
									break;
238
						case 089: //Ctrl+Ins copy
239
						case 003: //Ctrl+C copy
240
									if (isdir==1) break; //папки пока что копировать не умеем
241
									copystr(#file_name,#copy_name);
242
									copystr(#file_path,#copyfile); //вычисляем какой файл копировать
243
									cut_active=0;
244
									break;
245
						case 022: //Ctrl+V paste
246
									Paste();
247
									break;
248
						case 027: //Esc
249
									if (rename_active==1) { rename_active=0; Line_ReDraw(videlenie); }
250
									break;
251
						case 013:	//Enter
252
									if (rename_active==1) {Line_ReDraw(videlenie); break;}
253
									if (strcmp(#path,#edit_path)==-1) Goto_edit_path(); else
254
									if ((isdir==1)	if (strcmp(curbtn+1*304 + buf+72,"..")==-1)
255
									{
256
										copystr(#file_path, #path);
257
										copystr("/", #path+strlen(#path));
258
										za_kadrom=0; //вверх списка
259
										curbtn=0;
260
										Open_Dir(#path,1);
261
									} else Dir_Up(); else Run_File();
262
									break;
263
						case 178:	//up
264
									if (curbtn>=1)
265
									{
266
										Line_ReDraw(0xFFFFFF); //белая полоса
267
										curbtn=curbtn-1;
268
										Line_ReDraw(videlenie); //выделение
269
										break;
270
									}
271
									if (za_kadrom<=0) break;
272
									za_kadrom=za_kadrom-1;
273
									List_ReDraw();
274
									break;
275
						case 177:	//down
276
									if(curbtn
277
									{
278
										Line_ReDraw(0xFFFFFF); //белая полоса
279
										curbtn=curbtn+1;
280
										Line_ReDraw(videlenie); //выделение
281
										break;
282
									}
283
									if (za_kadrom+but_num>=kolichestvo) break;
284
									za_kadrom=za_kadrom+1;
285
									List_ReDraw();
286
									break;
287
						case 180: //home
288
									if (curbtn==0)
289
									if (strcmp(".",buf+72)==-1) if (za_kadrom==0) break; else if (za_kadrom==1) break;
290
									if (za_kadrom==0){
291
										Line_ReDraw(0xFFFFFF); //белая полоса
292
										curbtn=0;
293
										Line_ReDraw(videlenie); //выделение
294
										break;
295
									}
296
									Line_ReDraw(0xFFFFFF); //белая полоса
297
									za_kadrom=0; //если мы уже промотали и первый элемент за кадром
298
									curbtn=0;
299
									List_ReDraw();
300
									break;
301
						case 181: //end
302
									if (curbtn==kolichestvo-za_kadrom-1) break;
303
									if (but_num==kolichestvo-za_kadrom){
304
										Line_ReDraw(0xFFFFFF); //белая полоса
305
										curbtn=but_num-1;
306
										Line_ReDraw(videlenie); //выделение
307
										break;
308
									}
309
									Line_ReDraw(0xFFFFFF); //белая полоса
310
									za_kadrom=kolichestvo-but_num;
311
									curbtn=but_num;
312
									List_ReDraw();
313
									break;
314
						case 183: //Page Down
315
									IF (but_num==kolichestvo-za_kadrom) break;
316
									IF (kolichestvo-za_kadrom-but_num
317
										za_kadrom=kolichestvo-but_num; ELSE za_kadrom=za_kadrom+but_num;
318
									List_ReDraw();
319
									break;
320
						case 184: //Page Up
321
									IF (za_kadrom==0) break;
322
									IF (za_kadrom<=but_num)	za_kadrom=0; ELSE za_kadrom=za_kadrom-but_num;
323
									List_ReDraw();
324
									break;
325
						case 185: //Insert
326
									if (ins_mas[file_mas[za_kadrom+curbtn]]==0) ins_mas[file_mas[za_kadrom+curbtn]]=1;
327
										else ins_mas[file_mas[za_kadrom+curbtn]]=0;
328
									if(curbtn
329
									{
330
										Line_ReDraw(0xFFFFFF); //белая полоса
331
										curbtn++;
332
										Line_ReDraw(videlenie); //выделение
333
										break;
334
									}
335
									if (za_kadrom+but_num>=kolichestvo) Line_ReDraw(videlenie);
336
										else { za_kadrom=za_kadrom+1; List_ReDraw(); }
337
									break;
338
						case 182:	Del_Form(); break; //delete file
339
						case 054: IF (rename_active==0) {draw_window(); break;} ELSE goto REN_; //перерисовать окно F5
340
						case 051: //Нажата F2
341
									if (rename_active==0){
342
									if (isdir==1) break; //папки пока что переименовывать не умеем
343
									y= curbtn*18+85;
344
									DrawRegion(219,curbtn*18+57,onLeft(50,197),17,0x94AECE);
345
									DrawBar(220,curbtn*18+58,onLeft(50,197)-1,16,0xFFFFCC);
346
									WriteTextXY(224<<16+y, 0x80000000, #file_name, 0);
347
									rename_active=1;
348
									} ELSE GOTO REN_;
349
									break;
350
						default:
351
									REN_:
352
									if (rename_active==1) copystr(#file_name,#temp); else copystr(#edit_path,#temp);
353
									if (strlen(#temp)>256) break;
354
										EBX=#temp + strlen(#temp);
355
										ESBYTE[EBX] = key;
356
										ESBYTE[EBX+1] = 0;
357
									//
358
									if (rename_active==1)
359
									{
360
										DrawBar(220,curbtn*18+58,onLeft(50,197)-1,16,0xFFFFCC); //жёлтое
361
										copystr(#temp,#file_name);
362
										WriteTextXY(224<<16+y, 0x80000000, #file_name, 0);
363
									} else { copystr(#temp,#edit_path); KEdit(); }
364
									break;
365
				}
366
				break;
367
				CASE evReDraw:
368
				draw_window();
369
				break;
370
		}
371
	}
372
	ExitProcess();
373
}
374
 
375
void draw_window()
376
{
377
	WindowRedrawStatus(1);
378
	DefineAndDrawWindow(100,100,600,410,0x03,0x00E4DFE1,0,0,0);
379
     DrawTitle(#header);
380
     Form.getme();
381
     if (Form.height
382
     if (Form.width<493) MoveSize(OLD,OLD,493,OLD);
383
	//control buttons
384
	DefineButton(14,5,31,29,21+BT_HIDE,0xE4DFE1); //back
385
		PutImage(#back,30,28,15,6);
386
	DefineButton(50,5,31,29,22+BT_HIDE,0xE4DFE1); //forward
387
		PutImage(#forward,30,28,51,6);
388
	DefineButton(89,5,31,29,23+BT_HIDE,0xE4DFE1); //up!
389
		PutImage(#up,30,28,90,6);
390
	DrawBar(132,8,1,25,0x94AECE);
391
	DefineButton(140,5,31,29,24+BT_HIDE,0xE4DFE1); //cut
392
		PutImage(#fcut,30,28,141,6);
393
	DefineButton(176,5,31,29,25+BT_HIDE,0xE4DFE1); //copy
394
		PutImage(#fcopy,30,28,177,6);
395
	DefineButton(212,5,31,29,26+BT_HIDE,0xE4DFE1); //paste
396
		PutImage(#fpaste,30,28,213,6);
397
	DefineButton(onLeft(34,0),6,27,28,30+BT_HIDE+BT_NOFRAME,0xE4DFE1); //about
398
		PutImage(#about,25,26,onLeft(34,0),7);
399
	//полоса адреса
400
	DrawRegion(251,12,onLeft(61,251),16,0x94AECE);//ободок
401
	DefineButton(onLeft(61,0),12,18,16,27+BT_HIDE,0xE4DFE1); //goto there
402
	PutImage(#Edit_Goto,18,17,onLeft(60,0),12);
403
	//главный прямоугольник внутри
404
	DrawRegion(6,40,Form.width-12,Form.height-skin_width-46,0x94AECE);
405
	DrawBar(7,41,190,onTop(6,41),0x00699C);	//синий прямоугольник
406
     LeftBar(); //панель слева на синем фоне
407
	//Названия столбцов
408
	DrawBar(197,41,onLeft(6,197),1,0xFFFFFF); //белая полоса сверху
409
	DrawBar(197,56,onLeft(6,197),1,0x94AECE); //полоса снизу
410
	DrawBar(onLeft(163,0),41,1,16,0x94AECE); //полоса вертикальная 1
411
	DrawBar(onLeft(90,0),41,1,16,0x94AECE); //полоса вертикальная 2
412
	temp_int=Form.width-163-197>>1-15; //находим середину поля text File
413
	WriteText(temp_int+197,45,0x80,0,#tfile,0);//text File
414
	WriteText(onLeft(137,0),45,0x80,0,#ttype,0);//text Type
415
	WriteText(onLeft(66,0),45,0x80,0,#tsize,0);//text Size
416
	if (curbtn<>0) DrawBar(197,57,onLeft(22,197),18,0xFFFFFF);
417
	Open_Dir(#path,1);
418
	//прокрутка
419
	DefineButton(onLeft(22,0),40,16,16,50+BT_HIDE,0xE4DFE1); //прокрутка вверх
420
		DrawBar(onLeft(21,0),42,1,14,0x00FFFFFF); //белая полоса слева
421
		WriteText(onLeft(16,0),45,0x80,0,"\x18",0); //стрелка вверх
422
	DefineButton(onLeft(22,0),onTop(22,0),16,16,51+BT_DEL,0xE4DFE1); //удаляем
423
	DrawFlatButton(onLeft(22,0),onTop(22,0),16,16,51,0xE4DFE1); //прокрутка вниз
424
		DrawBar(onLeft(21,0),onTop(22,0)+15,15,1,0xE4DFE1); //удаляем тень
425
		DrawBar(onLeft(7,0),onTop(20,0),1,14,0xE4DFE1); //удаляем тень
426
		WriteText(onLeft(16,0),onTop(17,0),0x80,0,"\x19",0); //стрелка вниз
427
	DrawBar(onLeft(22,0),41,1,onTop(6,57),0x94AECE); //линия слева от прокрутки
428
	IF (del_active==1) Del_Form();
429
	WindowRedrawStatus(2);
430
}
431
 
432
void KEdit()
433
{
434
	temp_int=onLeft(61,252)/6;
435
	IF (strlen(#edit_path)
436
		{
437
		DrawBar(strlen(#edit_path)*6+252+5,17,6,9,0xFFFFFF); //белая область под KEdit
438
		WriteText(257,17,0x80,0,#edit_path,0); //text 'path'
439
		}
440
	ELSE
441
		{
442
		DrawBar(252,17,onLeft(61,252),9,0xFFFFFF); //белая область
443
		WriteText(257,17,0x80,0,#edit_path+strlen(#edit_path)-temp_int,0); //text 'path'
444
		}
445
}
446
 
447
char drive_name[30];
448
dword dev_icon;
449
void LeftBar(){
450
	//список дисков
451
	DrawBar(22,56,160,17,0xE4DFE1); //серое сверху
452
	WriteText(30,61,0x80,0,#gotodev,0); //text Goto:
453
	DrawBar(22,73,160,1,0x94AECE); //подчёркивание
454
	Open_Dir("/",0);
455
	DrawBar(22,74,160,kolichestvo*16+1,0xFFFFFF); //белое
456
	for (i=0;i
457
	    {
458
	    copystr("Unknown drive",#drive_name); //изначально неизвесный носитель
459
         DefineButton(22,i*16+74,159,16,100+i+BT_HIDE,0xE4DFE1); //создаём кнопки, а потом выводим названия дисков
460
         IF (strcmp(i*304+ buf+72,"rd")<>-1) { copystr("RAM-disk /rd/1/",#drive_name); dev_icon=#rd; }
461
         IF (strcmp(i*304+ buf+72,"fd")<>-1) { copystr("Floppy disk /fd/",#drive_name); dev_icon=#fd; }
462
         IF (strcmp(i*304+ buf+72,"hd0")<>-1) { copystr("Hard disk drive /hd0/",#drive_name); dev_icon=#hd; }
463
         IF (strcmp(i*304+ buf+72,"hd1")<>-1) { copystr("Hard disk drive /hd1/",#drive_name); dev_icon=#hd; }
464
         IF (strcmp(i*304+ buf+72,"hd2")<>-1) { copystr("Hard disk drive /hd2/",#drive_name); dev_icon=#hd; }
465
         IF (strcmp(i*304+ buf+72,"bd0")<>-1) { copystr("Hard disk drive /bd0/",#drive_name); dev_icon=#hd; }
466
         IF (strcmp(i*304+ buf+72,"bd1")<>-1) { copystr("Hard disk drive /bd1/",#drive_name); dev_icon=#hd; }
467
         IF (strcmp(i*304+ buf+72,"bd2")<>-1) { copystr("Hard disk drive /bd2/",#drive_name); dev_icon=#hd; }
468
         IF (strcmp(i*304+ buf+72,"cd1")<>-1) { copystr("CD-drive /cd1/",#drive_name); dev_icon=#cd; }
469
         IF (strcmp(i*304+ buf+72,"cd2")<>-1) { copystr("CD-drive /cd2/",#drive_name); dev_icon=#cd; }
470
	    WriteText(45,i*16+79,0x80,0,#drive_name,0);
471
	    PutImage(dev_icon,14,13,26,i*16+76);
472
         }
473
     //функции файлов и папок
474
	top_actions=kolichestvo;
475
	Actions();
476
	Preview();
477
}
478
 
479
void Actions()
480
{
481
	DrawBar(22,top_actions*16+90,160,17,0xE4DFE1); //серое сверху
482
	WriteText(30,top_actions*16+95,0x80,0,#actions,0); //text Actions
483
	DefineButton(164,top_actions*16+91,16,16,77+BT_HIDE+BT_NOFRAME,0xE4DFE1); //кнопа для стрелки
484
	DrawBar(22,top_actions*16+107,160,1,0x94AECE); //подчёркивание
485
	if (show_actions==1)
486
	{
487
		WriteText(170,top_actions*16+95,0x80,0,"\x19",0); //стрелка вниз
488
		DrawBar(22,top_actions*16+108,160,51,0xFFFFFF); //белое
489
		//rename file
490
		DefineButton(22,top_actions*16+108,159,16,80+BT_HIDE,0xE4DFE1);
491
		WriteText(47,top_actions*16+113,0x80,0,"Rename file ",0);
492
		PutImage(#ren_file,16,15,26,top_actions*16+109);
493
		//delete file
494
		DefineButton(22,top_actions*16+125,159,16,81+BT_HIDE,0xE4DFE1);
495
		WriteText(47,top_actions*16+130,0x80,0,"Delete file ",0);
496
		PutImage(#del_file,16,15,26,top_actions*16+125);
497
		//create folder
498
		DefineButton(22,top_actions*16+142,159,16,82+BT_HIDE,0xE4DFE1);
499
		WriteText(47,top_actions*16+147,0x80,0,"Create folder ",0);
500
		PutImage(#new_fol,16,15,26,top_actions*16+142);
501
	}
502
	else
503
	{
504
	DefineButton(22,top_actions*16+108,159,16,80+BT_DEL,0xE4DFE1);
505
	DefineButton(22,top_actions*16+125,159,16,81+BT_DEL,0xE4DFE1);
506
	DefineButton(22,top_actions*16+142,159,16,82+BT_DEL,0xE4DFE1);
507
	WriteText(170,top_actions*16+95,0x80,0,"\x18",0); //стрелка вверх
508
	DrawBar(22,top_actions*16+108,160,51,0x00699C); //синее
509
	}
510
}
511
 
512
void Preview()
513
{
514
	IF (show_actions==1) top_pr=top_actions*16+174; ELSE top_pr=top_actions*16+174-51;
515
	DrawBar(22,top_pr,160,17,0xE4DFE1); //серое сверху
516
	WriteText(30,top_pr+5,0x80,0,#preview,0); //text Preview
517
	DefineButton(164,top_pr+1,16,16,78+BT_DEL,0xE4DFE1);
518
	DefineButton(164,top_pr+1,16,16,78+BT_HIDE+BT_NOFRAME,0xE4DFE1); //кнопа для стрелки
519
	DrawBar(22,top_pr+17,160,1,0x94AECE); //подчёркивание
520
	IF (show_preview==0) WriteText(170,top_pr+5,0x80,0,"\x18",0); else//стрелка вверх
521
	{
522
		WriteText(170,top_pr+5,0x80,0,"\x19",0); //стрелка вниз
523
		DrawBar(22,top_pr+18,160,100,0xFFFFFF); //белое
524
		/*WriteText(30,top_pr+30,0x80,0,IntToStr(kolichestvo),0);
525
		WriteText(30,top_pr+50,0x80,0,IntToStr(but_num),0);
526
		WriteText(30,top_pr+60,0x80,0,IntToStr(za_kadrom),0);
527
		WriteText(30,top_pr+70,0x80,0,#file_path,0);
528
		WriteText(30,top_pr+80,0x80,0,#param,0);*/
529
		WriteText(30,top_pr+60,0x80,0,"Not realized... Yet.",0);
530
	}
531
}
532
 
533
void TVScroll() { //Прокрутка
534
if (but_num==kolichestvo)
535
	{
536
		DefineButton(onLeft(22,0),57,15,on_y-57,54+BT_DEL,0xE4DFE1); //удаляем
537
		DefineButton(onLeft(22,0),on_y+razm_scrl+2,16,onTop(22,57)-razm_scrl-on_y+55,55+BT_DEL,0xE4DFE1); //удаляем
538
		DrawBar(onLeft(21,0),57,15,onTop(79,0),0xCED0D0); //серую область рисуем
539
	}
540
else
541
	{
542
		razm_scrl=onTop(22,57) * but_num - but_num / kolichestvo; //считает по-порядку
543
		on_y = za_kadrom / but_num * razm_scrl+57;
544
		IF (razm_scrl<20) razm_scrl = 20; //устанавливаем минимальный размер скролла
545
		IF (za_kadrom==0) on_y= 57; ELSE IF (za_kadrom
546
		IF (za_kadrom+but_num==kolichestvo) on_y= onTop(23,57)-razm_scrl+57; //в конец если там ничё нет
547
		//ползунок, рисуем видимый, красивый прямоугольник
548
		DrawBar(onLeft(21,0),on_y,15,1,0x94AECE); //синяя линия сверху
549
		DrawBar(onLeft(21,0),on_y+razm_scrl,15,1,0x94AECE); //синяя линия снизу
550
		DrawBar(onLeft(21,0),on_y+1,1,razm_scrl-1,0x00FFFFFF); //белая полоса слева
551
		DrawBar(onLeft(21,0),on_y+1,15,1,0x00FFFFFF); //белая полоса сверху
552
		DrawBar(onLeft(20,0),on_y+2,14,razm_scrl-2,0x00E4DFE1); //прямоугольник внутри
553
		//полосы
554
		DrawBar(onLeft(21,0),57,15,on_y-57,0xCED0D0); //поле до ползунка
555
		DrawBar(onLeft(21,0),on_y+razm_scrl+1,15,onTop(22,57)-razm_scrl-on_y+56,0xCED0D0); //поле после ползунка
556
	}
557
}
558
 
559
void List_ReDraw()
560
{
561
	y=85;
562
	if ((kolichestvo-za_kadrom1)) //если мы в конце списка файлов развернём окно появяться пустяе белые кнопки
563
	{
564
		za_kadrom=kolichestvo-but_num;
565
		curbtn=but_num-1;
566
	} else if (curbtn>but_num-1) curbtn=but_num-1; //это если выделение после схлопывания окна за кадром
567
	//
568
	if (onLeft(165,220)/6
569
	DrawBar(220,57,longest_name*6,curbtn-3*18+57-3,0xFFFFFF); //белая область слева
570
	DrawBar(220,curbtn+1*18+57,longest_name*6,onTop(6,curbtn+1*18+57),0xFFFFFF); //белая область слева
571
	DrawBar(onLeft(155,0),57,121,curbtn-3*18+57-3,0xFFFFFF); //белая область справа
572
	DrawBar(onLeft(155,0),curbtn+1*18+57,121,onTop(6,curbtn+1*18+57),0xFFFFFF); //белая область справа
573
	//
574
	str_len = onLeft(220,160)/6; //длинна названия файла
575
	longest_name=strlen(off);
576
	for (i=za_kadrom;i
577
	{
578
		if (strcmp(".",buf+72)==-1) off = file_mas[i]*304 + buf+72; else off = file_mas[i+1]*304 + buf+72;
579
		EAX = off - 8;
580
		size=ESDWORD[EAX];
581
		EAX = off - 40;
582
		EAX=ESDWORD[EAX];
583
		$shr eax,4
584
		$and eax,1
585
		isdir=EAX;
586
		if (curbtn<>i) if (isdir==1) Put_icon(""); else
587
		{
588
			WriteText(7-strlen(ConvertSize(size))*6+onLeft(75,0),y-22,0x80,0,ConvertSize(size),0);
589
			Put_icon(off+strlen(off)-4);
590
		}
591
		if (strlen(off)
592
  		if (ins_mas[file_mas[i]]==0)
593
	         WriteTextXY(220<<16+y, 0, off, temp_int); //выделено ли инсертом?
594
          	else WriteTextXY(220<<16+y, 0x00FF9900, off, temp_int);
595
		y=y+18;
596
		if (longest_name
597
	}
598
	Line_ReDraw(videlenie);
599
	DrawBar(onLeft(90,0),57,1,onTop(7,57),0xE4DFE1); //полоса серая вертикальная 2
600
	TVScroll();
601
}
602
 
603
void Line_ReDraw(dword color){
604
	if (rename_active==1)
605
		{
606
		rename_active=0;
607
		copystr(#path,#temp);
608
		copystr(#file_name,#temp+strlen(#temp));
609
		if (strcmp(#file_path,#temp)==-1) if (strlen(#file_name)>0)
610
			{
611
			CopyFile(#file_path,#temp);
612
			Del_File();
613
			//za_kadrom=kolichestvo-but_num;
614
			//curbtn=but_num-1;
615
			//Line_ReDraw(videlenie);
616
			}
617
		}
618
	DrawBar(197,curbtn*18+57,onLeft(22,197),18,color); //полоса белая или выделения
619
	y= curbtn*18+85; //положение текста по Y
620
	if (strcmp(".",buf+72)==-1) off = file_mas[curbtn+za_kadrom]*304 + buf+72; else off = file_mas[curbtn+za_kadrom+1]*304 + buf+72;
621
	temp_int = onLeft(220,160)/6;
622
	if (strlen(off)
623
  if (ins_mas[file_mas[za_kadrom+curbtn]]==0)
624
          WriteTextXY(220<<16+y, 0, off, temp_int); //выделено ли инсертом?
625
		//EDI = 0x80FFFFFF;
626
		//WriteTextXY(temp_int<<16+y, 0xC0000000,#temp, 7); //DD8500 или FF3399
627
          else WriteTextXY(220<<16+y, 0x80DD8500, off, temp_int); //DD8500 или FF3399
628
	EAX = off - 8;
629
	size=ESDWORD[EAX];
630
	EAX = off - 40;
631
	EAX=ESDWORD[EAX];
632
	$shr eax,4
633
	$and eax,1
634
	isdir=EAX;
635
	if (isdir==1) Put_icon(""); else
636
	{
637
		WriteText(7-strlen(ConvertSize(size))*6+onLeft(75,0),y-22,0x80,0,ConvertSize(size),0);
638
		Put_icon(off+strlen(off)-4);
639
	}
640
	copystr(#path,#file_path);
641
	copystr(off,#file_name);
642
	copystr(off,#file_path+strlen(#file_path)); //итак, file_path=файлу, т.к. по-умолчанию это прога
643
	DrawBar(onLeft(163,0),curbtn*18+57,1,18,0xE4DFE1); //полоса серая вертикальная 1
644
	DrawBar(onLeft(90,0),curbtn*18+57,1,18,0xE4DFE1); //полоса серая вертикальная 2
645
	if (color==videlenie) //закрашиваем иконку
646
		{
647
		if (temp_int==1) //файлик
648
			{
649
			DrawBar(200,y-26,2,15,videlenie);
650
			DrawBar(214,y-26,2,15,videlenie);
651
			DrawBar(210,y-26,4,1,videlenie);//ле
652
			DrawBar(211,y-25,3,1,videlenie);//сен
653
			DrawBar(212,y-24,2,1,videlenie);//ка
654
			DrawBar(213,y-23,1,1,videlenie);//
655
			}
656
		if (temp_int==2) //папка
657
			{
658
			DrawBar(201,y-13,15,2,videlenie); //снизу линия
659
			DrawBar(200,y-26,1,15,videlenie); //слева линия
660
			DrawBar(208,y-26,8,2,videlenie); //сверху справа линия
661
			//.точки
662
			PutPixel(201,y-26+skin_width,videlenie); //сверху слева точка
663
			PutPixel(207,y-26+skin_width,videlenie); //сверху справа точка
664
			PutPixel(201,y-14+skin_width,videlenie); //слева снизу точка
665
			PutPixel(215,y-14+skin_width,videlenie); //справа снизу точка
666
			PutPixel(215,y-24+skin_width,videlenie); //какая разница где
667
			}
668
		IF (temp_int==3) PutPixel(215,y-26+skin_width,videlenie); //skin
669
		IF (temp_int==5) {DrawBar(200,y-26,1,15,videlenie); DrawBar(215,y-26,1,15,videlenie);} //video
670
		}
671
}
672
 
673
void Open_Dir(dword path_,redraw){
674
for (i=0;i
675
//temp=path+3;
676
//copestr(#temp
677
//if (strcmp(#temp,"/rd")==0) ExitProcess(); //realloc(500000
678
	open_file_70.func = 1;
679
	open_file_70.pos = 0;
680
	open_file_70.rezerv = 0;
681
	open_file_70.sizefile = 65536;
682
	open_file_70.buffer = buf;
683
	open_file_70.rezerv2 = 0;
684
	open_file_70.stroka = path_;
685
    $mov eax,70
686
    $mov ebx,#open_file_70.func
687
    $int 0x40
688
    kolichestvo=EBX;
689
    //
690
	if (kolichestvo<>-1) if (redraw==1)
691
	{
692
		FOR (i=0;i
693
		but_num=onTop(6,57)/18;
694
		if (strcmp(".",buf+72)==0) kolichestvo--; //фильтруем элемент "."
695
		IF (but_num>100) but_num=1; ELSE//эта странная строчка для того если размеры окра слишком маленькие
696
		IF (kolichestvo
697
		FOR (i=0;i
698
		DrawBar(197,75,onLeft(22,197),onTop(6,75),0xFFFFFF); //белая область
699
		DrawBar(onLeft(163,0),57,1,onTop(7,57),0xE4DFE1); //полоса серая вертикальная 1
700
		FoldesGoUp();
701
		List_ReDraw();
702
		copystr(path_,#edit_path);
703
		DrawBar(252,13,onLeft(61,252),15,0xFFFFFF); //белая область под KEdit
704
		KEdit();
705
	}
706
}
707
 
708
int k,l;
709
void FoldesGoUp(){
710
if (strcmp(#path,"/rd/1/")==0) kolichestvo--;  else if (strcmp(#path,"/fd/1/")==0) kolichestvo--;
711
else if (strlen(#path)>7) if (strcmp(".",buf+72)==-1) kolichestvo--; //>7 это для /hd1/ и т.д.
712
k=0; l=0;
713
off=buf+72;
714
FOR (i=0;i<=kolichestvo;i++)
715
	{
716
		EAX = off - 8;
717
		EAX = off - 40;
718
		EAX=ESDWORD[EAX];
719
		$shr eax,4
720
		$and eax,1
721
		isdir=EAX;
722
		IF (isdir==1) {file_mas[k]=i; k++;}
723
			ELSE {file_mas[kolichestvo-l]=i; l++;}
724
		off = off + 304;
725
	}
726
}
727
 
728
dword offs_put_icon, file_type;
729
void Put_icon(dword extension){
730
	lowcase(extension);
731
	offs_put_icon = #somefile; //еши неизвесный файл
732
	file_type = ""; temp_int=1;
733
	IF (strcmp(extension,".kex")==0) {	offs_put_icon = #kex; file_type="Program";  temp_int=0;}
734
	IF (strcmp(extension,".cmd")==0) {	offs_put_icon = #cmd; file_type="CMD skript"; temp_int=0;}
735
	IF (strcmp(extension,".skn")==0) {	offs_put_icon = #skn; file_type="Skin"; temp_int=3;}
736
	IF (strcmp(extension,".chr")==0) {	offs_put_icon = #font; file_type="Font"; temp_int=4;}
737
	IF (strcmp(extension,".avi")==0) {	offs_put_icon = #video; file_type="Video"; temp_int=5;}
738
	IF (strcmp(extension,".ini")==0) {	offs_put_icon = #ini; file_type="Config"; temp_int=1;}
739
	IF (strcmp(extension,"conf")==0) {	offs_put_icon = #ini; file_type="Config"; temp_int=1;}
740
	IF (strcmp(extension,".htm")==0) {	offs_put_icon = #web; file_type="Web-page"; temp_int=1;}
741
	IF (strcmp(extension,"html")==0) {	offs_put_icon = #web; file_type="Web-page"; temp_int=1;}
742
	IF (strcmp(extension,".asm")==0) {	offs_put_icon = #source; file_type="Source"; }
743
	IF (strcmp(extension,".inc")==0) {	offs_put_icon = #inc ; temp_int=8;}
744
	IF (strcmp(extension,".exe")==0) {	offs_put_icon = #exe; file_type="Win32 Exec"; temp_int=0;}
745
	IF (strcmp(extension,".dll")==0) {	offs_put_icon = #lib; file_type="Library"; temp_int=0;}
746
	IF (strcmp(extension,".obj")==0) {	offs_put_icon = #lib; file_type="Library"; temp_int=0;}
747
	//text
748
	IF (strcmp(extension,".txt")==0) {	offs_put_icon = #text; file_type="Text"; temp_int=1;}
749
	IF (strcmp(extension,".doc")==0) {	offs_put_icon = #text; file_type="Text"; temp_int=1;}
750
	IF (strcmp(extension,".rtf")==0) {	offs_put_icon = #text; file_type="Text"; temp_int=1;}
751
	//изображения
752
	IF (strcmp(extension,".gif")==0) {	offs_put_icon = #pic; file_type="Image"; temp_int=1;}
753
	IF (strcmp(extension,".bmp")==0) {	offs_put_icon = #pic; file_type="Image"; temp_int=1;}
754
	IF (strcmp(extension,".png")==0) {	offs_put_icon = #pic; file_type="Image"; temp_int=1;}
755
	IF (strcmp(extension,".jpg")==0) {	offs_put_icon = #pic; file_type="Image"; temp_int=1;}
756
	IF (strcmp(extension,"jpeg")==0) {	offs_put_icon = #pic; file_type="Image"; temp_int=1;}
757
	IF (strcmp(extension,".raw")==0) {	offs_put_icon = #pic; file_type="Image"; temp_int=1;}
758
	//архивы
759
	IF (strcmp(extension,".rar")==0) {	offs_put_icon = #arhiv; file_type="Archive"; temp_int=6;}
760
	IF (strcmp(extension,".zip")==0) {	offs_put_icon = #arhiv; file_type="Archive"; temp_int=6;}
761
	IF (strcmp(extension,".cab")==0) {	offs_put_icon = #arhiv; file_type="Archive"; temp_int=6;}
762
	IF (strcmp(extension,".tar")==0) {	offs_put_icon = #arhiv; file_type="Archive"; temp_int=6;}
763
	IF (strcmp(extension,".ajr")==0) {	offs_put_icon = #arhiv; file_type="Archive"; temp_int=6;}
764
	//audio
765
	IF (strcmp(extension,".mp3")==0) {	offs_put_icon = #audio; file_type="Music"; temp_int=7;}
766
	IF (strcmp(extension,".wav")==0) {	offs_put_icon = #audio; file_type="Audio"; temp_int=7;}
767
	IF (strcmp(extension,".mid")==0) {	offs_put_icon = #audio; file_type="Audio"; temp_int=7;}
768
	IF (strcmp(extension,"midi")==0) {	offs_put_icon = #audio; file_type="Audio"; temp_int=7;}
769
	IF (strcmp(extension,".ogg")==0) {	offs_put_icon = #audio; file_type="Audio"; temp_int=7;}
770
	//папка
771
	IF (strcmp(extension,"")==0) { offs_put_icon = #folder; WriteText(onLeft(140,0),y-22,0x80,0,"",0); temp_int=2;}
772
	PutImage(offs_put_icon,16,15,200,y-26);
773
	WriteText(onLeft(155,0),y-22,0x80,0,file_type,0);
774
}
775
 
776
void Dir_Up()
777
{
778
	i=strlen(#path)-1;
779
	do
780
	{
781
		path[i]=0x00;
782
		i--;
783
		IF (i==0) break;
784
	}
785
   	while (path[i]!='/');
786
	za_kadrom=0; //в самый вверх списка
787
	curbtn=0;
788
   	Open_Dir(#path,1);
789
}
790
 
791
dword onLeft(dword right,left) {return Form.width-right-left;}
792
dword onTop(dword down,up) {return Form.height-skin_width-down-up;}
793
 
794
char extension[5];
795
void Run_File(){
796
copystr(#file_path,#param); //по-умолчанию прога и параметр равны, если окажется что это файл, парам - сбросим
797
copystr(#file_path+strlen(#file_path)-4,#extension); //узнаём расширение файла с каким работаем
798
lowcase(#extension);
799
//тут мы это расширение сравнимаем, и, если оно асоциируется с прогой, прога - это file_path
800
	IF (strcmp(#extension,".skn")==0) copystr("/rd/1/desktop",#file_path);
801
	IF (strcmp(#extension,".avi")==0) copystr("/rd/1/kvid",#file_path);
802
	IF (strcmp(#extension,".htm")==0) copystr("/rd/1/network/hTTPC",#file_path);
803
	IF (strcmp(#extension,"html")==0) copystr("/rd/1/network/hTTPC",#file_path);
804
	IF (strcmp(#extension,".3ds")==0) copystr("/rd/1/3d/view3ds",#file_path);
805
	IF (strcmp(#extension,".lif")==0) copystr("/rd/1/demos/life2",#file_path);
806
	//audio
807
	IF (strcmp(#extension,".mp3")==0) copystr("/rd/1/AC97SND",#file_path);
808
	IF (strcmp(#extension,".wav")==0) copystr("/rd/1/AC97SND",#file_path);
809
	IF (strcmp(#extension,".mid")==0) copystr("/rd/1/MIDAMP",#file_path);
810
	IF (strcmp(#extension,"midi")==0) copystr("/rd/1/MIDAMP",#file_path);
811
	//text
812
	IF (strcmp(#extension,".rtf")==0) copystr("/rd/1/RtfRead",#file_path);
813
	IF (strcmp(#extension,".txt")==0) copystr("/rd/1/TinyPad",#file_path);
814
	IF (strcmp(#extension,".inc")==0) copystr("/rd/1/TinyPad",#file_path);
815
	IF (strcmp(#extension,".ini")==0) copystr("/rd/1/TinyPad",#file_path);
816
	IF (strcmp(#extension,"conf")==0) copystr("/rd/1/TinyPad",#file_path);
817
	IF (strcmp(#extension,".dat")==0) copystr("/rd/1/TinyPad",#file_path);
818
	IF (strcmp(#extension,".asm")==0) copystr("/rd/1/TinyPad",#file_path); //AsmMenu1,AsmMenu2
819
	//изображения
820
	IF (strcmp(#extension,".gif")==0) copystr("/rd/1/GIFVIEW",#file_path); //GifMenu1,MenuAnimage
821
	IF (strcmp(#extension,".bmp")==0) copystr("/rd/1/MV",#file_path); //BmpMenu1,MenuAnimage
822
	IF (strcmp(#extension,".png")==0) copystr("/rd/1/@rcher",#file_path);
823
	IF (strcmp(#extension,".jpg")==0) copystr("/rd/1/JpegView",#file_path);
824
	IF (strcmp(#extension,"jpeg")==0) copystr("/rd/1/JpegView",#file_path);
825
IF (strcmp(#file_path,#param)==0) copystr("",#param); //если file_path не изменился, то это таки, наверное, прога, параметров нет.
826
Run_Program(); //запуск!
827
}
828
 
829
void Run_Program()
830
{
831
    run_file_70.func = 7;
832
    run_file_70.flag = 0;
833
    run_file_70.param= #param;
834
    run_file_70.rez1 = 0;
835
    run_file_70.rez2 = 0;
836
    run_file_70.rezerv2 = 0;
837
    run_file_70.stroka = #file_path;
838
    $mov eax,70
839
    $mov ebx,#run_file_70.func
840
    $int 0x40
841
}
842
 
843
void Del_Form()
844
{
845
	if (isdir==0){//папки пока что удалять не умеем
846
	temp_int=Form.width-200+197/2;
847
	//типа окно
848
	FOR (i=5;i<11;i++) DefineButton(197,i+1*18+39,onLeft(22,197),18,201+i+BT_DEL,0xFFFFFF); //удаляем кнопки под формой
849
	DrawFlatButton(temp_int,160,200,80,0,0xE4DFE1); //форма
850
	WriteText(temp_int+19,175,0x80,0,"Do you really want to delete",28);
851
	WriteTextXY(220<<16+y, 0, off, strlen(off));
852
	WriteText(temp_int+20,190,0x80,0,#file_name,0); //пишем имя и оно может быть очень длинным
853
	WriteText(strlen(#file_name)*6+temp_int+20,190,0x80,0,"?",1);
854
	//кнопочки
855
	DrawFlatButton(temp_int+20,208,70,20,301,0xFFB6B5);
856
	WriteText(temp_int+46,215,0x80,0,"Yes",3);
857
	DrawFlatButton(temp_int+111,208,70,20,302,0xC6DFC6);
858
	WriteText(temp_int+141,215,0x80,0,"No",2);
859
	del_active=1;
860
}}
861
 
862
void Del_File()
863
{
864
	run_file_70.func = 8;
865
	run_file_70.flag = 0;
866
	run_file_70.param= 0;
867
	run_file_70.rez1 = 0;
868
	run_file_70.rez2 = 0;
869
	run_file_70.rezerv2 = 0;
870
	run_file_70.stroka = #file_path;
871
	$mov eax,70
872
	$mov ebx,#run_file_70.func
873
	$int 0x40
874
	del_active=0;
875
    	Open_Dir(#path,1);
876
}
877
 
878
dword size_prefix;
879
dword ConvertSize(dword bytes)
880
{
881
	copystr(IntToStr(bytes),#size_prefix);
882
	copystr(" b ",#size_prefix+strlen(#size_prefix));
883
	if (bytes>=1024)
884
		{
885
		bytes=bytes/1024;
886
		copystr(IntToStr(bytes),#size_prefix);
887
		copystr(" Kb",#size_prefix+strlen(#size_prefix));
888
		}
889
	if (bytes>=1024)
890
		{
891
		bytes=bytes/1024;
892
		copystr(IntToStr(bytes),#size_prefix);
893
		copystr(" Mb",#size_prefix+strlen(#size_prefix));
894
		}
895
	if (bytes>=1024)
896
		{
897
		bytes=bytes/1024;
898
		copystr(IntToStr(bytes),#size_prefix);
899
		copystr(" Gb",#size_prefix+strlen(#size_prefix));
900
		}
901
	return #size_prefix;
902
}
903
 
904
void Paste()
905
{
906
	if (strcmp(#copyfile,"")==-1){ //отмена, еши ещё ничё не скопировали
907
	copystr(#path,#temp);
908
	copystr(#copy_name,#temp+strlen(#temp));
909
	if (strcmp(#copyfile,#temp)==0) //если мы копируем и вставляем в одной и той же папке
910
		{
911
			copystr(#path,#temp);
912
			copystr("new_",#temp+strlen(#temp));
913
			copystr(#copy_name,#temp+strlen(#temp));
914
		}
915
	CopyFile(#copyfile,#temp);
916
	//
917
	if (cut_active==1) //если мы выбрали вырезать
918
		{
919
			copystr(#copyfile,#file_path);
920
			Del_File();
921
			copystr("",#copyfile);
922
		}
923
	Open_Dir(#path,1);
924
}}
925
 
926
void Goto_edit_path()
927
{
928
	if (strcmp(#path,#edit_path)==-1) //проверка не в этой ли мы папке
929
	{
930
	copystr(#edit_path+strlen(#edit_path)-1,#temp); //если лень было ставить /
931
 	if (strcmp(#temp,"/")==-1) copystr("/",#edit_path+strlen(#edit_path));
932
	copystr(#edit_path,#temp);
933
	Open_Dir(#temp,0);
934
	if (kolichestvo==-1) KEdit(); else //просто очищаем полосу адреса
935
		{
936
		za_kadrom=0; //наверх списка
937
		curbtn=0;
938
		copystr(#temp,#path);
939
		}
940
		Open_Dir(#path,1);
941
	}
942
}
943
 
944
//
945
dword PathHistory[256*8]="/rd/1/";
946
dword PathHistory_Len[8]=0;
947
int cur_path=0;
948
//
949
void GoBack(dword back)
950
{
951
if (back==0) //IF (cur_path<=8)
952
	{
953
	cur_path++;
954
	copystr(#path,256*cur_path+#PathHistory); //пишем
955
	PathHistory_Len[cur_path]=strlen(#path);
956
	}
957
if (back==1) IF (cur_path>=1)
958
	{
959
	cur_path--;
960
	copystr(256*cur_path+#PathHistory,#edit_path); //читаем
961
	}
962
DrawBar(252,13,onLeft(61,252),15,0xFFFFFF); //белая область под KEdit
963
copystr(IntToStr(cur_path),#edit_path); //читаем
964
KEdit();
965
//Open_Dir(#path);
966
}
967
 
968
/*int i,j,k;
969
int n=20;
970
 
971
void sort_by_name(int z){
972
     for(i = 0; i <= n-1; i++)
973
    {
974
        for(j = 0; j <= n-2-i; j++)
975
        {
976
            if( mas[j][z]>mas[j+1][z] )
977
            {
978
                    if (mas[j][z-1] == mas[j+1][z-1])
979
                    {
980
                    strcpy(back,mas[j]);
981
                    strcpy(mas[j],mas[j+1]);
982
                    strcpy(mas[j+1],back);
983
                    }
984
            }
985
        }
986
    }
987
}*/
988
 
989
/*int q,z;
990
int n=20;
991
void sort_by_name(int z)
992
{
993
     for(q = 0; q <= n-1; q++) for(i = 0; i <= n-2-i; i++)
994
     if( mas[i][z]>mas[j+1][z]) if (mas[i][z-1]==mas[i+1][z-1])
995
     	{
996
          	strcpy(back,mas[i]);
997
          	strcpy(mas[i],mas[i+1]);
998
      		strcpy(mas[i+1],back);
999
          }
1000
}*/
1001
 
1002
/*вызывать так
1003
for (k=0;k<255;k++) sort(k);
1004
*/
1005
 
1006
stop: