Subversion Repositories Kolibri OS

Rev

Rev 5478 | Rev 5483 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5478 Rev 5481
1
//Leency & Veliant 2008-2015
1
//Leency, Veliant, Punk_Joker & KolibriOS Team 2008-2015
2
//GNU GPL licence.
2
//GNU GPL licence.
3
 
3
 
4
#ifndef AUTOBUILD
4
#ifndef AUTOBUILD
5
#include "lang.h--"
5
#include "lang.h--"
6
#endif
6
#endif
7
 
7
 
8
//libraries
8
//libraries
9
#define MEMSIZE 0xD0000
9
#define MEMSIZE 0xD0000
10
#include "..\lib\kolibri.h"
10
#include "..\lib\kolibri.h"
11
#include "..\lib\clipboard.h"
11
#include "..\lib\clipboard.h"
12
#include "..\lib\strings.h"
12
#include "..\lib\strings.h"
13
#include "..\lib\mem.h"
13
#include "..\lib\mem.h"
14
#include "..\lib\dll.h"
14
#include "..\lib\dll.h"
15
#include "..\lib\lib.obj\libini.h"
15
#include "..\lib\lib.obj\libini.h"
16
#include "..\lib\lib.obj\box_lib.h"
16
#include "..\lib\lib.obj\box_lib.h"
17
#include "..\lib\file_system.h"
17
#include "..\lib\file_system.h"
18
#include "..\lib\figures.h"
18
#include "..\lib\figures.h"
19
#include "..\lib\encoding.h"
19
#include "..\lib\encoding.h"
20
#include "..\lib\list_box.h"
20
#include "..\lib\list_box.h"
21
#include "..\lib\copyf.h"
21
#include "..\lib\copyf.h"
22
#include "..\lib\random.h"
22
#include "..\lib\random.h"
23
//images
23
//images
24
#include "imgs\toolbar.txt"
24
#include "imgs\toolbar.txt"
25
#include "imgs\left_p.txt"
25
#include "imgs\left_p.txt"
26
#include "imgs\icons.txt"
26
#include "imgs\icons.txt"
27
 
27
 
28
#ifdef LANG_RUS
28
#ifdef LANG_RUS
29
	?define T_FILE "” ©«"
29
	?define T_FILE "” ©«"
30
	?define T_TYPE "’¨¯"
30
	?define T_TYPE "’¨¯"
31
	?define T_SIZE " §¬¥à"
31
	?define T_SIZE " §¬¥à"
32
	?define T_NEW_FOLDER "®¢ ï ¯ ¯ª "
32
	?define T_NEW_FOLDER "®¢ ï ¯ ¯ª "
33
	?define T_NEW_FILE "®¢ë© ä ©«"
33
	?define T_NEW_FILE "®¢ë© ä ©«"
34
	?define T_DELETE_FILE "‚ë ¤¥©á⢨⥫쭮 å®â¨â¥ 㤠«¨âì"
34
	?define T_DELETE_FILE "‚ë ¤¥©á⢨⥫쭮 å®â¨â¥ 㤠«¨âì"
35
	?define T_YES "„ "
35
	?define T_YES "„ "
36
	?define T_NO "¥â"
36
	?define T_NO "¥â"
37
	?define T_DEL_ERROR_1 "Žè¨¡ª .  ¯ª  ­¥ ¯ãáâ ï."
37
	?define T_DEL_ERROR_1 "Žè¨¡ª .  ¯ª  ­¥ ¯ãáâ ï."
38
	?define WAIT_DELETING_FOLDER "“¤ «ï¥âáï ¯ ¯ª . ®¤®¦¨â¥..."
38
	?define WAIT_DELETING_FOLDER "“¤ «ï¥âáï ¯ ¯ª . ®¤®¦¨â¥..."
39
	?define NOT_CREATE_FOLDER "¥ 㤠«®áì ᮧ¤ âì ¯ ¯ªã."
39
	?define NOT_CREATE_FOLDER "¥ 㤠«®áì ᮧ¤ âì ¯ ¯ªã."
40
	?define NOT_CREATE_FILE "¥ 㤠«®áì ᮧ¤ âì ä ©«."
40
	?define NOT_CREATE_FILE "¥ 㤠«®áì ᮧ¤ âì ä ©«."
41
	?define ERROR_1 "Žè¨¡ª  ¯à¨ § £à㧪¥ ¡¨¡«¨®â¥ª¨ /rd/1/lib/box_lib.obj"
41
	?define ERROR_1 "Žè¨¡ª  ¯à¨ § £à㧪¥ ¡¨¡«¨®â¥ª¨ /rd/1/lib/box_lib.obj"
42
	?define T_PASTE_WINDOW "Š®¯¨àãî..."
42
	?define T_PASTE_WINDOW "Š®¯¨àãî..."
43
	?define T_PASTE_WINDOW_TEXT "Š®¯¨àã¥âáï ä ©«:"
43
	?define T_PASTE_WINDOW_TEXT "Š®¯¨àã¥âáï ä ©«:"
44
	?define T_CANCEL_PASTE "Š®¯¨à®¢ ­¨¥ ¯à¥ªà é¥­®.  ¯ª  ᪮¯¨à®¢ ­  ­¥ ¯®«­®áâìî."
44
	?define T_CANCEL_PASTE "Š®¯¨à®¢ ­¨¥ ¯à¥ªà é¥­®.  ¯ª  ᪮¯¨à®¢ ­  ­¥ ¯®«­®áâìî."
45
	?define T_SELECT_APP_TO_OPEN_WITH "‚ë¡¥à¨â¥ ¯à®£à ¬¬ã ¤«ï ®âªàëâ¨ï ä ©« "
45
	?define T_SELECT_APP_TO_OPEN_WITH "‚ë¡¥à¨â¥ ¯à®£à ¬¬ã ¤«ï ®âªàëâ¨ï ä ©« "
46
#elif LANG_EST
46
#elif LANG_EST
47
	?define T_FILE "Fail"
47
	?define T_FILE "Fail"
48
	?define T_TYPE "Tüüp"
48
	?define T_TYPE "Tüüp"
49
	?define T_SIZE "Suurus"
49
	?define T_SIZE "Suurus"
50
	?define T_NEW_FOLDER "Uus kataloog"
50
	?define T_NEW_FOLDER "Uus kataloog"
51
	?define T_NEW_FILE "Uus fail"
51
	?define T_NEW_FILE "Uus fail"
52
	?define T_DELETE_FILE "Kas sa tahad tõesti kustutada"
52
	?define T_DELETE_FILE "Kas sa tahad tõesti kustutada"
53
	?define T_YES "Jah"
53
	?define T_YES "Jah"
54
	?define T_NO "Ei"
54
	?define T_NO "Ei"
55
	?define T_DEL_ERROR_1 "Viga. Kataloog ei ole tühi."
55
	?define T_DEL_ERROR_1 "Viga. Kataloog ei ole tühi."
56
	?define WAIT_DELETING_FOLDER "Deleting folder. Please, wait..."
56
	?define WAIT_DELETING_FOLDER "Deleting folder. Please, wait..."
57
	?define NOT_CREATE_FOLDER "Kataloogi ei saa luua."
57
	?define NOT_CREATE_FOLDER "Kataloogi ei saa luua."
58
	?define NOT_CREATE_FILE "Faili ei saa luua."
58
	?define NOT_CREATE_FILE "Faili ei saa luua."
59
	?define ERROR_1 "Viga teegi laadimisel /rd/1/lib/box_lib.obj"
59
	?define ERROR_1 "Viga teegi laadimisel /rd/1/lib/box_lib.obj"
60
	?define T_PASTE_WINDOW "Kopeerin..."
60
	?define T_PASTE_WINDOW "Kopeerin..."
61
	?define T_PASTE_WINDOW_TEXT "Kopeerin faili:"
61
	?define T_PASTE_WINDOW_TEXT "Kopeerin faili:"
62
	?define T_CANCEL_PASTE "Copy process terminated. Folder copied incompletely."
62
	?define T_CANCEL_PASTE "Copy process terminated. Folder copied incompletely."
63
	?define T_SELECT_APP_TO_OPEN_WITH "Select application to open file"
63
	?define T_SELECT_APP_TO_OPEN_WITH "Select application to open file"
64
#else
64
#else
65
	?define T_FILE "File"
65
	?define T_FILE "File"
66
	?define T_TYPE "Type"
66
	?define T_TYPE "Type"
67
	?define T_SIZE "Size"
67
	?define T_SIZE "Size"
68
	?define T_NEW_FOLDER "New folder"
68
	?define T_NEW_FOLDER "New folder"
69
	?define T_NEW_FILE "New file"
69
	?define T_NEW_FILE "New file"
70
	?define T_DELETE_FILE "Do you really want to delete"
70
	?define T_DELETE_FILE "Do you really want to delete"
71
	?define T_YES "Yes"
71
	?define T_YES "Yes"
72
	?define T_NO "No"
72
	?define T_NO "No"
73
	?define T_DEL_ERROR_1 "Error. Folder isn't empty."
73
	?define T_DEL_ERROR_1 "Error. Folder isn't empty."
74
	?define WAIT_DELETING_FOLDER "Deleting folder. Please, wait..."
74
	?define WAIT_DELETING_FOLDER "Deleting folder. Please, wait..."
75
	?define NOT_CREATE_FOLDER "Folder can not be created."
75
	?define NOT_CREATE_FOLDER "Folder can not be created."
76
	?define NOT_CREATE_FILE "File can not be created."
76
	?define NOT_CREATE_FILE "File can not be created."
77
	?define ERROR_1 "Error while loading library /rd/1/lib/box_lib.obj"
77
	?define ERROR_1 "Error while loading library /rd/1/lib/box_lib.obj"
78
	?define T_PASTE_WINDOW "Copying..."
78
	?define T_PASTE_WINDOW "Copying..."
79
	?define T_PASTE_WINDOW_TEXT "Copying file:"
79
	?define T_PASTE_WINDOW_TEXT "Copying file:"
80
	?define T_CANCEL_PASTE "Copy process terminated. Folder copied incompletely."
80
	?define T_CANCEL_PASTE "Copy process terminated. Folder copied incompletely."
81
	?define T_SELECT_APP_TO_OPEN_WITH "Select application to open file"
81
	?define T_SELECT_APP_TO_OPEN_WITH "Select application to open file"
82
#endif
82
#endif
83
 
83
 
84
enum {ONLY_SHOW, WITH_REDRAW, ONLY_OPEN}; //OpenDir
84
enum {ONLY_SHOW, WITH_REDRAW, ONLY_OPEN}; //OpenDir
85
 
85
 
86
#define TITLE "Eolite File Manager v2.57"
86
#define TITLE "Eolite File Manager v2.58"
87
#define ABOUT_TITLE "Eolite v2.57"
87
#define ABOUT_TITLE "Eolite v2.58"
88
dword col_padding, col_selec, col_lpanel;
88
dword col_padding, col_selec, col_lpanel;
89
 
89
 
90
int toolbar_buttons_x[7]={9,46,85,134,167,203};
90
int toolbar_buttons_x[7]={9,46,85,134,167,203};
91
char tmp_disk_del_param[]="d0";
91
char tmp_disk_del_param[]="d0";
92
struct path_string { char Item[4096]; };
92
struct path_string { char Item[4096]; };
93
 
93
 
94
byte active_about=0;
94
byte active_about=0;
95
word about_window;
95
word about_window;
96
byte active_settings=0;
96
byte active_settings=0;
97
word settings_window;
97
word settings_window;
98
 
98
 
99
byte menu_call_mouse=0;
99
byte menu_call_mouse=0;
100
 
100
 
101
llist files;
101
llist files;
102
 
102
 
103
byte
103
byte
104
	path[4096],
104
	path[4096],
105
	file_path[4096],
105
	file_path[4096],
106
	file_name[256],
106
	file_name[256],
107
	temp[4096];	 
107
	temp[4096];	 
108
byte
108
byte
109
	rename_active=0,
109
	rename_active=0,
110
	del_active=0,
110
	del_active=0,
111
	show_dev_name=1,
111
	show_dev_name=1,
112
	real_files_names_case=0,
112
	real_files_names_case=0,
113
	info_after_copy=0,
113
	info_after_copy=0,
114
	sort_num=2,
114
	sort_num=2,
115
	itdir;
115
	itdir;
116
 
116
 
117
dword eolite_ini_path;
117
dword eolite_ini_path;
118
 
118
 
119
proc_info Form;
119
proc_info Form;
120
system_colors sc;
120
system_colors sc;
121
mouse m;
121
mouse m;
122
int mouse_dd, scroll_used, scroll_size, sorting_arrow_x, kolibrios_drive;
122
int mouse_dd, scroll_used, scroll_size, sorting_arrow_x, kolibrios_drive;
123
dword buf;
123
dword buf;
124
dword file_mas[6898];
124
dword file_mas[6898];
125
int j, i;
125
int j, i;
126
int action_buf;
126
int action_buf;
127
int rand_n;
127
int rand_n;
128
 
128
 
129
edit_box edit2 = {250,213,80,0xFFFFCC,0x94AECE,0xFFFFCC,0xffffff,0,248,#file_name,#mouse_dd,64,6,6};
129
edit_box edit2 = {250,213,80,0xFFFFCC,0x94AECE,0xFFFFCC,0xffffff,0,248,#file_name,#mouse_dd,64,6,6};
130
PathShow_data PathShow = {0, 17,250, 6, 250, 0, 0, 0x0, 0xFFFfff, #path, #temp, 0};
130
PathShow_data PathShow = {0, 17,250, 6, 250, 0, 0, 0x0, 0xFFFfff, #path, #temp, 0};
131
PathShow_data FileShow = {0, 56,215, 6, 100, 0, 0, 0x0, 0xFFFfff, #file_name, #temp, 0};
131
PathShow_data FileShow = {0, 56,215, 6, 100, 0, 0, 0x0, 0xFFFfff, #file_name, #temp, 0};
132
 
132
 
133
#include "include\copy.h"
133
#include "include\copy.h"
134
#include "include\gui.h"
134
#include "include\gui.h"
135
#include "include\sorting.h"
135
#include "include\sorting.h"
136
#include "include\icons.h"
136
#include "include\icons.h"
137
#include "include\left_panel.h"
137
#include "include\left_panel.h"
138
#include "include\history.h"
138
#include "include\history.h"
139
#include "include\menu.h"
139
#include "include\menu.h"
140
#include "include\about.h"
140
#include "include\about.h"
141
#include "include\settings.h"
141
#include "include\settings.h"
142
#include "include\properties.h"
142
#include "include\properties.h"
143
 
143
 
144
void main() 
144
void main() 
145
{
145
{
146
	word key, id, can_show, can_select, m_selected;
146
	word key, id, can_show, can_select, m_selected;
147
	dword selected_offset;
147
	dword selected_offset;
148
	rand_n = random(40);
148
	rand_n = random(40);
149
 
149
 
150
	files.line_h=18;
150
	files.line_h=18;
151
	mem_Init();
151
	mem_Init();
152
	if (load_dll2(boxlib, #box_lib_init,0)!=0) notify(ERROR_1);
152
	if (load_dll2(boxlib, #box_lib_init,0)!=0) notify(ERROR_1);
153
    if (load_dll2(libini, #lib_init,1)!=0) notify("Error: library doesn't exists - libini");
153
    if (load_dll2(libini, #lib_init,1)!=0) notify("Error: library doesn't exists - libini");
154
	eolite_ini_path = abspath("Eolite.ini"); 
154
	eolite_ini_path = abspath("Eolite.ini"); 
155
	LoadIniSettings();
155
	LoadIniSettings();
156
	GetSystemDiscs();
156
	GetSystemDiscs();
157
	SetAppColors();
157
	SetAppColors();
158
	if (param)
158
	if (param)
159
	{
159
	{
160
		strcpy(#path, #param);
160
		strcpy(#path, #param);
161
		if (path[strlen(#path)-1]!='/') chrcat(#path, '/'); //add "/" to the end of the string
161
		if (path[strlen(#path)-1]!='/') chrcat(#path, '/'); //add "/" to the end of the string
162
	}
162
	}
163
	else
163
	else
164
	{
164
	{
165
		strcpy(#path, "/rd/1/");		
165
		strcpy(#path, "/rd/1/");		
166
	}
166
	}
167
	Open_Dir(#path,ONLY_OPEN);
167
	Open_Dir(#path,ONLY_OPEN);
168
	SetEventMask(0x27);
168
	SetEventMask(0x27);
169
	loop() switch(WaitEvent())
169
	loop() switch(WaitEvent())
170
	{
170
	{
171
		case evMouse:
171
		case evMouse:
172
			if (del_active) || (!CheckActiveProcess(Form.ID)) || (Form.status_window>2) break;
172
			if (del_active) || (!CheckActiveProcess(Form.ID)) || (Form.status_window>2) break;
173
			if (rename_active) { edit_box_mouse stdcall(#edit2); break; }
173
			if (rename_active) { edit_box_mouse stdcall(#edit2); break; }
174
			
174
			
175
			m.get();
175
			m.get();
176
 
176
 
177
			if (files.MouseOver(m.x, m.y)) && (!can_select)
177
			if (files.MouseOver(m.x, m.y)) && (!can_select)
178
			{
178
			{
179
				m_selected = m.y - files.y / files.line_h;
179
				m_selected = m.y - files.y / files.line_h;
180
				if (m.lkm) can_select = 1;
180
				if (m.lkm) can_select = 1;
181
				if (m.pkm)
181
				if (m.pkm)
182
				{
182
				{
183
					can_show = 1;
183
					can_show = 1;
184
					if (m.y - files.y / files.line_h != files.current) can_select = 1;
184
					if (m.y - files.y / files.line_h != files.current) can_select = 1;
185
				}
185
				}
186
			}
186
			}
187
 
187
 
188
			//select/open file {
188
			//select/open file {
189
			if (!m.lkm) && (!m.pkm) && (can_select)
189
			if (!m.lkm) && (!m.pkm) && (can_select)
190
			{
190
			{
191
				can_select = 0;
191
				can_select = 0;
192
				if (m.y>=files.y)
192
				if (m.y>=files.y)
193
				{
193
				{
194
					id = m.y - files.y / files.line_h;
194
					id = m.y - files.y / files.line_h;
195
					if (id!=m_selected)
195
					if (id!=m_selected)
196
					{
196
					{
197
						can_show=0;
197
						can_show=0;
198
						break;
198
						break;
199
					}
199
					}
200
					if (files.current!=id)
200
					if (files.current!=id)
201
					{
201
					{
202
						if (id
202
						if (id
203
					}
203
					}
204
					else
204
					else
205
						Open(0);
205
						Open(0);
206
				}
206
				}
207
			};
207
			};
208
			// } select/open file
208
			// } select/open file
209
 
209
 
210
			//file menu {
210
			//file menu {
211
			if (!m.pkm) && (!m.lkm) && (can_show)
211
			if (!m.pkm) && (!m.lkm) && (can_show)
212
			{
212
			{
213
				can_show = 0;
213
				can_show = 0;
214
				menu_call_mouse = 1;
214
				menu_call_mouse = 1;
215
				if (m.y>=files.y)
215
				if (m.y>=files.y)
216
				{
216
				{
217
					SwitchToAnotherThread();
217
					SwitchToAnotherThread();
218
					CreateThread(#FileMenu,#menu_stak+4092);
218
					CreateThread(#FileMenu,#menu_stak+4092);
219
				}
219
				}
220
				break;
220
				break;
221
			}
221
			}
222
			// } file menu
222
			// } file menu
223
 
223
 
224
			if (m.vert)
224
			if (m.vert)
225
			{
225
			{
226
				if (files.MouseScroll(m.vert)) List_ReDraw();
226
				if (files.MouseScroll(m.vert)) List_ReDraw();
227
				break;
227
				break;
228
			}
228
			}
229
 
229
 
230
			if (m.x>=Form.width-26) && (m.x<=Form.width-6) && (m.y>40) && (m.y
230
			if (m.x>=Form.width-26) && (m.x<=Form.width-6) && (m.y>40) && (m.y
231
			{
231
			{
232
				IF (m.lkm==1) DrawRectangle3D(Form.cwidth - 17,41,14,14,0xC7C7C7,0xFFFFFF);
232
				IF (m.lkm==1) DrawRectangle3D(Form.cwidth - 17,41,14,14,0xC7C7C7,0xFFFFFF);
233
				WHILE (m.lkm==1) && (files.first>0)
233
				WHILE (m.lkm==1) && (files.first>0)
234
				{
234
				{
235
					pause(8);
235
					pause(8);
236
					files.first--;
236
					files.first--;
237
					List_ReDraw();
237
					List_ReDraw();
238
					m.get();
238
					m.get();
239
				}
239
				}
240
				DrawRectangle3D(Form.cwidth - 17,41,14,14,0xFFFFFF,0xC7C7C7);
240
				DrawRectangle3D(Form.cwidth - 17,41,14,14,0xFFFFFF,0xC7C7C7);
241
			}
241
			}
242
 
242
 
243
			if (m.x>=Form.width-26) && (m.x<=Form.width-6) && (m.y>onTop(22,0)+1) && (m.y
243
			if (m.x>=Form.width-26) && (m.x<=Form.width-6) && (m.y>onTop(22,0)+1) && (m.y
244
			{
244
			{
245
				IF (m.lkm==1) DrawRectangle3D(Form.cwidth - 17,onTop(21,0),14,14,0xC7C7C7,0xFFFFFF);
245
				IF (m.lkm==1) DrawRectangle3D(Form.cwidth - 17,onTop(21,0),14,14,0xC7C7C7,0xFFFFFF);
246
				while (m.lkm==1) && (files.first
246
				while (m.lkm==1) && (files.first
247
				{
247
				{
248
					pause(8);
248
					pause(8);
249
					files.first++;
249
					files.first++;
250
					List_ReDraw();
250
					List_ReDraw();
251
					m.get();
251
					m.get();
252
				}
252
				}
253
				DrawRectangle3D(Form.cwidth - 17,onTop(21,0),14,14,0xFFFFFF,0xC7C7C7);
253
				DrawRectangle3D(Form.cwidth - 17,onTop(21,0),14,14,0xFFFFFF,0xC7C7C7);
254
			}
254
			}
255
 
255
 
256
			//Scrooll
256
			//Scrooll
257
			if (!m.lkm) && (scroll_used) { scroll_used=NULL; Scroll(); }
257
			if (!m.lkm) && (scroll_used) { scroll_used=NULL; Scroll(); }
258
			if (m.x>=Form.width-26) && (m.x<=Form.width-6) && (m.y>56) && (m.y
258
			if (m.x>=Form.width-26) && (m.x<=Form.width-6) && (m.y>56) && (m.y
259
			
259
			
260
			if (scroll_used)
260
			if (scroll_used)
261
			{
261
			{
262
				IF (scroll_size/2+files.y>m.y) || (m.y<0) || (m.y>4000) m.y=scroll_size/2+files.y; //anee eo?ni? iaa ieiii
262
				IF (scroll_size/2+files.y>m.y) || (m.y<0) || (m.y>4000) m.y=scroll_size/2+files.y; //anee eo?ni? iaa ieiii
263
				id=files.first;
263
				id=files.first;
264
				j= scroll_size/2;
264
				j= scroll_size/2;
265
				files.first = m.y -j -files.y * files.count;
265
				files.first = m.y -j -files.y * files.count;
266
				files.first /= onTop(22,files.y);
266
				files.first /= onTop(22,files.y);
267
				IF (files.visible+files.first>files.count) files.first=files.count-files.visible;
267
				IF (files.visible+files.first>files.count) files.first=files.count-files.visible;
268
				IF (id!=files.first) List_ReDraw();
268
				IF (id!=files.first) List_ReDraw();
269
			}
269
			}
270
			break;  
270
			break;  
271
//Button pressed-----------------------------------------------------------------------------
271
//Button pressed-----------------------------------------------------------------------------
272
		case evButton:
272
		case evButton:
273
			id=GetButtonID();
273
			id=GetButtonID();
274
			if (id==1)
274
			if (id==1)
275
			{
275
			{
276
				KillProcess(about_window);
276
				KillProcess(about_window);
277
				ExitProcess();
277
				ExitProcess();
278
			}
278
			}
279
			if (rename_active) break;
279
			if (rename_active) break;
280
			if (del_active)
280
			if (del_active)
281
			{
281
			{
282
				IF (id==301) || (id==302) Del_File(302-id);
282
				IF (id==301) || (id==302) Del_File(302-id);
283
				break;
283
				break;
284
			}
284
			}
285
			
285
			
286
			switch(id) 
286
			switch(id) 
287
			{
287
			{
288
				case 21: //Back
288
				case 21: //Back
289
						GoBack();
289
						GoBack();
290
						break;
290
						break;
291
				case 22: //Forward
291
				case 22: //Forward
292
						if (HistoryPath(GO_FORWARD))
292
						if (HistoryPath(GO_FORWARD))
293
						{
293
						{
294
							files.first=files.current=NULL; //aaa?o nienea
294
							files.first=files.current=NULL; //aaa?o nienea
295
							Open_Dir(#path,WITH_REDRAW);
295
							Open_Dir(#path,WITH_REDRAW);
296
						}
296
						}
297
						break;
297
						break;
298
				case 23: //up!
298
				case 23: //up!
299
						Dir_Up();
299
						Dir_Up();
300
						break;
300
						break;
301
				case 24: //cut
301
				case 24: //cut
302
						Copy(#file_path, CUT);
302
						Copy(#file_path, CUT);
303
						break;
303
						break;
304
				case 25: //copy
304
				case 25: //copy
305
						Copy(#file_path, NOCUT);
305
						Copy(#file_path, NOCUT);
306
						break;
306
						break;
307
				case 26: //paste
307
				case 26: //paste
308
						CreateThread(#Paste,#copy_stak+4092);
308
						CreateThread(#Paste,#copy_stak+4092);
309
						break;
309
						break;
310
				case 31...33: //sort
310
				case 31...33: //sort
311
						IF(sort_num==1) DrawFilledBar(sorting_arrow_x,42,6,10);
311
						IF(sort_num==1) DrawFilledBar(sorting_arrow_x,42,6,10);
312
						IF(sort_num==2) DrawFilledBar(sorting_arrow_x,42,6,10);
312
						IF(sort_num==2) DrawFilledBar(sorting_arrow_x,42,6,10);
313
						IF(sort_num==3) DrawFilledBar(sorting_arrow_x,42,6,10);
313
						IF(sort_num==3) DrawFilledBar(sorting_arrow_x,42,6,10);
314
						sort_num=id-30;
314
						sort_num=id-30;
315
						Open_Dir(#path,WITH_REDRAW);
315
						Open_Dir(#path,WITH_REDRAW);
316
						break;
316
						break;
317
				case 50...60: //Actions
317
				case 50...60: //Actions
318
						FnProcess(id-50);
318
						FnProcess(id-50);
319
						break;
319
						break;
320
				case 100...120:
320
				case 100...120:
321
					DEVICE_MARK:
321
					DEVICE_MARK:
322
						DrawRectangle(17,id-100*16+74,159,16, 0); //auaaeaiea
322
						DrawRectangle(17,id-100*16+74,159,16, 0); //auaaeaiea
323
						strcpy(#path, #disk_list[id-100].Item);
323
						strcpy(#path, #disk_list[id-100].Item);
324
						files.first=files.current=0;
324
						files.first=files.current=0;
325
						Open_Dir(#path,WITH_REDRAW);
325
						Open_Dir(#path,WITH_REDRAW);
326
						pause(5);
326
						pause(5);
327
						DrawRectangle(17,id-100*16+74,159,16, 0xFFFFFF);
327
						DrawRectangle(17,id-100*16+74,159,16, 0xFFFFFF);
328
						break;
328
						break;
329
				case 130...160:
329
				case 130...160:
330
						tmp_disk_del_param[1] = id - 130 + 48;
330
						tmp_disk_del_param[1] = id - 130 + 48;
331
						RunProgram("/sys/tmpdisk", #tmp_disk_del_param);
331
						RunProgram("/sys/tmpdisk", #tmp_disk_del_param);
332
						pause(10);
332
						pause(10);
333
						GetSystemDiscs();
333
						GetSystemDiscs();
334
						Open_Dir(#path,WITH_REDRAW);
334
						Open_Dir(#path,WITH_REDRAW);
335
						DrawLeftPanel();
335
						DrawLeftPanel();
336
						//m.get();
336
						//m.get();
337
						break;
337
						break;
338
			}
338
			}
339
			break;
339
			break;
340
//Key pressed-----------------------------------------------------------------------------
340
//Key pressed-----------------------------------------------------------------------------
341
		case evKey:
341
		case evKey:
342
			key = GetKey();
342
			key = GetKey();
343
			if (Form.status_window>2) break;
343
			if (Form.status_window>2) break;
344
			IF (del_active)
344
			IF (del_active)
345
			{
345
			{
346
				IF (key==013) Del_File(true);
346
				IF (key==013) Del_File(true);
347
				IF (key==027) Del_File(false);
347
				IF (key==027) Del_File(false);
348
				break;
348
				break;
349
			}
349
			}
350
			IF (edit2.flags!=64) && (key!=13) && (key!=27)
350
			IF (edit2.flags!=64) && (key!=13) && (key!=27)
351
			{
351
			{
352
				EAX=key<<8;
352
				EAX=key<<8;
353
				edit_box_key stdcall (#edit2);
353
				edit_box_key stdcall (#edit2);
354
				break;
354
				break;
355
			}
355
			}
356
			switch (key)
356
			switch (key)
357
			{
357
			{
358
					case 209...217:
358
					case 209...217:
359
							id=key-110;
359
							id=key-110;
360
							IF (id-100>=disc_num) break;
360
							IF (id-100>=disc_num) break;
361
							GOTO DEVICE_MARK;
361
							GOTO DEVICE_MARK;
362
					case 008:
362
					case 008:
363
							//GoBack();
363
							//GoBack();
364
							Dir_Up();
364
							Dir_Up();
365
							break; 
365
							break; 
366
					case 004: //Ctrl+D set as bg
366
					case 004: //Ctrl+D set as bg
367
							strcpy(#temp, "\\S__");
367
							strcpy(#temp, "\\S__");
368
							strcat(#temp, #file_path);
368
							strcat(#temp, #file_path);
369
							RunProgram("/sys/media/kiv", #temp);
369
							RunProgram("/sys/media/kiv", #temp);
370
							break;
370
							break;
371
					case 014: //Ctrl+N new window
371
					case 014: //Ctrl+N new window
372
							IF (Form.left==98) MoveSize(Form.left-20,Form.top-20,OLD,OLD);
372
							IF (Form.left==98) MoveSize(Form.left-20,Form.top-20,OLD,OLD);
373
							RunProgram("/sys/File Managers/Eolite", #path);
373
							RunProgram("/sys/File Managers/Eolite", #path);
374
							break; 
374
							break; 
375
					case 024: //Ctrl+X
375
					case 024: //Ctrl+X
376
							Copy(#file_path, CUT);
376
							Copy(#file_path, CUT);
377
							break;
377
							break;
378
					case 003: //Ctrl+C
378
					case 003: //Ctrl+C
379
							Copy(#file_path, NOCUT);
379
							Copy(#file_path, NOCUT);
380
							break;
380
							break;
381
					case 022: //Ctrl+V
381
					case 022: //Ctrl+V
382
							CreateThread(#Paste,#copy_stak+4092);
382
							CreateThread(#Paste,#copy_stak+4092);
383
							break;
383
							break;
384
					case 027: //Esc
384
					case 027: //Esc
385
							IF (rename_active==1) ReName(false);
385
							IF (rename_active==1) ReName(false);
386
							break;
386
							break;
387
					case 013: //Enter
387
					case 013: //Enter
388
							IF (rename_active==1) {ReName(true); break;}
388
							IF (rename_active==1) {ReName(true); break;}
389
							Open(0);
389
							Open(0);
390
							break; 
390
							break; 
391
					case 074: //menu
391
					case 074: //menu
392
							menu_call_mouse=0;
392
							menu_call_mouse=0;
393
							SwitchToAnotherThread();
393
							SwitchToAnotherThread();
394
							CreateThread(#FileMenu,#menu_stak+4092);
394
							CreateThread(#FileMenu,#menu_stak+4092);
395
							break;
395
							break;
396
					case 173: //Ctrl+Enter
396
					case 173: //Ctrl+Enter
397
							if (!itdir) ShowOpenWithDialog();
397
							if (!itdir) ShowOpenWithDialog();
398
							else Open(1);
398
							else Open(1);
399
							break;
399
							break;
400
					case 178: //up
400
					case 178: //up
401
							List_Current(-1);
401
							List_Current(-1);
402
							break;
402
							break;
403
					case 177: //down
403
					case 177: //down
404
							List_Current(1);
404
							List_Current(1);
405
							break;
405
							break;
406
					case 180: //home
406
					case 180: //home
407
							if (files.KeyHome()) List_ReDraw();
407
							if (files.KeyHome()) List_ReDraw();
408
							break;
408
							break;
409
					case 181: //end
409
					case 181: //end
410
							if (files.KeyEnd()) List_ReDraw();
410
							if (files.KeyEnd()) List_ReDraw();
411
							break;
411
							break;
412
					case 183: //Page Down
412
					case 183: //Page Down
413
							List_Current(files.visible-1);
413
							List_Current(files.visible-1);
414
							break;
414
							break;
415
					case 184: //Page Up
415
					case 184: //Page Up
416
							List_Current(-files.visible+1);
416
							List_Current(-files.visible+1);
417
							break;
417
							break;
418
					case 182: //del
418
					case 182: //del
419
							Del_Form();
419
							Del_Form();
420
							break;
420
							break;
421
					case 185: //ins
421
					case 185: //ins
422
							selected_offset = file_mas[files.current+files.first]*304 + buf+32 + 7;
422
							selected_offset = file_mas[files.current+files.first]*304 + buf+32 + 7;
423
							if (ESBYTE[selected_offset]) ESBYTE[selected_offset]=0; else ESBYTE[selected_offset] = 1;
423
							if (ESBYTE[selected_offset]) ESBYTE[selected_offset]=0; else ESBYTE[selected_offset] = 1;
424
							List_Current(1);
424
							List_Current(1);
425
							break;
425
							break;
426
					case 048...059: //F1-F10
426
					case 048...059: //F1-F10
427
							FnProcess(key-49);
427
							FnProcess(key-49);
428
							break; 
428
							break; 
429
					default:    
429
					default:    
430
							for (i=files.current+files.first+1; i
430
							for (i=files.current+files.first+1; i
431
							{
431
							{
432
								strcpy(#temp, file_mas[i]*304+buf+72);
432
								strcpy(#temp, file_mas[i]*304+buf+72);
433
								IF (temp[0]==key) || (temp[0]==key-32)
433
								IF (temp[0]==key) || (temp[0]==key-32)
434
								{
434
								{
435
									List_Current(i-files.current-files.first);
435
									List_Current(i-files.current-files.first);
436
									break;
436
									break;
437
								}
437
								}
438
							}
438
							}
439
			}                         
439
			}                         
440
			break;
440
			break;
441
		case evReDraw:
441
		case evReDraw:
442
			draw_window();
442
			draw_window();
443
			if (action_buf) { menu_action(action_buf); action_buf=0;}
443
			if (action_buf) { menu_action(action_buf); action_buf=0;}
444
	}
444
	}
445
}
445
}
446
 
446
 
447
 
447
 
448
inline fastcall signed int _strrchr( ESI,BL)
448
inline fastcall signed int _strrchr( ESI,BL)
449
{
449
{
450
	int jj=0, last=strlen(ESI);
450
	int jj=0, last=strlen(ESI);
451
	do{
451
	do{
452
		jj++;
452
		jj++;
453
		$lodsb
453
		$lodsb
454
		IF(AL==BL) last=jj;
454
		IF(AL==BL) last=jj;
455
	} while(AL!=0);
455
	} while(AL!=0);
456
	return last;
456
	return last;
457
}
457
}
458
 
458
 
459
 
459
 
460
void menu_action(dword id)
460
void menu_action(dword id)
461
{
461
{
462
	if (id==COPY_PASTE_END)
462
	if (id==COPY_PASTE_END)
463
	{
463
	{
464
		FnProcess(5);
464
		FnProcess(5);
465
		SelectFile(#copy_to+strrchr(#copy_to,'/'));
465
		SelectFile(#copy_to+strrchr(#copy_to,'/'));
466
	}
466
	}
467
	if (id==100) Open(0);
467
	if (id==100) Open(0);
468
	if (id==201) ShowOpenWithDialog();
468
	if (id==201) ShowOpenWithDialog();
469
	if (id==202) FnProcess(3); //F3
469
	if (id==202) FnProcess(3); //F3
470
	if (id==203) FnProcess(4); //F4
470
	if (id==203) FnProcess(4); //F4
471
	if (id==104) Copy(#file_path, NOCUT);
471
	if (id==104) Copy(#file_path, NOCUT);
472
	if (id==105) Copy(#file_path, CUT);
472
	if (id==105) Copy(#file_path, CUT);
473
	if (id==106) CreateThread(#Paste,#copy_stak+4092);
473
	if (id==106) CreateThread(#Paste,#copy_stak+4092);
474
	if (id==207) FnProcess(2);
474
	if (id==207) FnProcess(2);
475
	if (id==108) Del_Form();
475
	if (id==108) Del_Form();
476
	if (id==109) FnProcess(5);
476
	if (id==109) FnProcess(5);
477
	if (id==110) FnProcess(8);
477
	if (id==110) FnProcess(8);
478
	if (id==300) { FnProcess(5); List_ReDraw(); }
478
	if (id==300) { FnProcess(5); List_ReDraw(); }
479
}
479
}
480
 
480
 
481
 
481
 
482
void draw_window()
482
void draw_window()
483
{
483
{
484
	DefineAndDrawWindow(GetScreenWidth()-550/4+rand_n,rand_n+30,550,500,0x73,sc.work,TITLE,0);
484
	DefineAndDrawWindow(GetScreenWidth()-550/4+rand_n,rand_n+30,550,500,0x73,sc.work,TITLE,0);
485
	GetProcessInfo(#Form, SelfInfo);
485
	GetProcessInfo(#Form, SelfInfo);
486
	if (Form.status_window>2) return;
486
	if (Form.status_window>2) return;
487
	files.SetSizes(192, 57, Form.cwidth - 210, onTop(57,6), disc_num*16+195,files.line_h);
487
	files.SetSizes(192, 57, Form.cwidth - 210, onTop(57,6), disc_num*16+195,files.line_h);
488
	if (Form.height < files.min_h) MoveSize(OLD,OLD,OLD,files.min_h);
488
	if (Form.height < files.min_h) MoveSize(OLD,OLD,OLD,files.min_h);
489
	if (Form.width<480) MoveSize(OLD,OLD,480,OLD);
489
	if (Form.width<480) MoveSize(OLD,OLD,480,OLD);
490
	GetProcessInfo(#Form, SelfInfo); //if win_size changed
490
	GetProcessInfo(#Form, SelfInfo); //if win_size changed
491
 
491
 
492
	PutPaletteImage(#toolbar,246,34,0,0,8,#toolbar_pal);
492
	PutPaletteImage(#toolbar,246,34,0,0,8,#toolbar_pal);
493
	DrawBar(127, 8, 1, 25, sc.work_graph);
493
	DrawBar(127, 8, 1, 25, sc.work_graph);
494
	for (j=0; j<3; j++) DefineButton(toolbar_buttons_x[j]+2,5+2,31-5,29-5,21+j+BT_HIDE,sc.work);
494
	for (j=0; j<3; j++) DefineButton(toolbar_buttons_x[j]+2,5+2,31-5,29-5,21+j+BT_HIDE,sc.work);
495
	for (j=3; j<6; j++) DefineButton(toolbar_buttons_x[j],5,31,29,21+j+BT_HIDE,sc.work);
495
	for (j=3; j<6; j++) DefineButton(toolbar_buttons_x[j],5,31,29,21+j+BT_HIDE,sc.work);
496
	DrawBar(246,0,Form.cwidth - 297,12, sc.work); //upper editbox
496
	DrawBar(246,0,Form.cwidth - 297,12, sc.work); //upper editbox
497
	DrawBar(246,29,Form.cwidth - 297,5,sc.work);  //under editbox
497
	DrawBar(246,29,Form.cwidth - 297,5,sc.work);  //under editbox
498
	DrawRectangle(246,12,Form.cwidth - 303,16,sc.work_graph);
498
	DrawRectangle(246,12,Form.cwidth - 303,16,sc.work_graph);
499
	DefineButton(Form.cwidth - 25,6,27,28,51+BT_HIDE+BT_NOFRAME,0); //about
499
	DefineButton(Form.cwidth - 25,6,27,28,51+BT_HIDE+BT_NOFRAME,0); //about
500
	PutPaletteImage(#goto_about,56,34,Form.width-65,0,8,#goto_about_pal);
500
	PutPaletteImage(#goto_about,56,34,Form.width-65,0,8,#goto_about_pal);
501
	//main rectangles
501
	//main rectangles
502
	DrawRectangle(1,40,Form.cwidth-3,onTop(46,0),sc.work_graph);
502
	DrawRectangle(1,40,Form.cwidth-3,onTop(46,0),sc.work_graph);
503
	DrawRectangle(0,39,Form.cwidth-1,onTop(44,0),col_palette[4]); //bg
503
	DrawRectangle(0,39,Form.cwidth-1,onTop(44,0),col_palette[4]); //bg
504
	for (i=0; i<5; i++) DrawBar(0, 34+i, Form.cwidth, 1, col_palette[8-i]);	
504
	for (i=0; i<5; i++) DrawBar(0, 34+i, Form.cwidth, 1, col_palette[8-i]);	
505
	DrawLeftPanel();
505
	DrawLeftPanel();
506
	//ListBox
506
	//ListBox
507
	DrawFlatButton(files.x,40,Form.cwidth - files.x - 159,16,31,sc.work,T_FILE);
507
	DrawFlatButton(files.x,40,Form.cwidth - files.x - 159,16,31,sc.work,T_FILE);
508
	DrawFlatButton(Form.cwidth - 159,40,73,16,32,sc.work,T_TYPE);
508
	DrawFlatButton(Form.cwidth - 159,40,73,16,32,sc.work,T_TYPE);
509
	DrawFlatButton(Form.cwidth - 86,40,68,16,33,sc.work,T_SIZE);
509
	DrawFlatButton(Form.cwidth - 86,40,68,16,33,sc.work,T_SIZE);
510
	DrawBar(files.x+files.w,files.y,1,onTop(22,files.y),sc.work_graph); //line to the left from the scroll
510
	DrawBar(files.x+files.w,files.y,1,onTop(22,files.y),sc.work_graph); //line to the left from the scroll
511
	DrawFlatButton(files.x+files.w,40,16,16,0,sc.work,"\x18");
511
	DrawFlatButton(files.x+files.w,40,16,16,0,sc.work,"\x18");
512
	DrawFlatButton(files.x+files.w,onTop(22,0),16,16,0,sc.work,"\x19");
512
	DrawFlatButton(files.x+files.w,onTop(22,0),16,16,0,sc.work,"\x19");
513
	Open_Dir(#path,ONLY_SHOW);
513
	Open_Dir(#path,ONLY_SHOW);
514
	if (del_active) Del_Form();
514
	if (del_active) Del_Form();
515
	//if (itdir) ShowMessage(WAIT_DELETING_FOLDER, 0);
515
	//if (itdir) ShowMessage(WAIT_DELETING_FOLDER, 0);
516
	if (rename_active) FnProcess(2);
516
	if (rename_active) FnProcess(2);
517
}
517
}
518
 
518
 
519
 
519
 
520
void KEdit()
520
void KEdit()
521
{
521
{
522
	if (Form.width<480) return;
522
	if (Form.width<480) return;
523
	PathShow.area_size_x = Form.cwidth-306;
523
	PathShow.area_size_x = Form.cwidth-306;
524
	DrawBar(PathShow.start_x-3, PathShow.start_y-4, PathShow.area_size_x+2, 15, 0xFFFfff);
524
	DrawBar(PathShow.start_x-3, PathShow.start_y-4, PathShow.area_size_x+2, 15, 0xFFFfff);
525
	PathShow_prepare stdcall(#PathShow);
525
	PathShow_prepare stdcall(#PathShow);
526
	PathShow_draw stdcall(#PathShow);
526
	PathShow_draw stdcall(#PathShow);
527
}
527
}
528
 
528
 
529
 
529
 
530
void List_Current(int cur)
530
void List_Current(int cur)
531
{
531
{
532
	if (cur<=0) //up
532
	if (cur<=0) //up
533
	{
533
	{
534
		IF (files.first==0) && (files.current<=0) return;
534
		IF (files.first==0) && (files.current<=0) return;
535
		IF (-cur-1
535
		IF (-cur-1
536
		{
536
		{
537
			Line_ReDraw(0xFFFFFF, files.current);
537
			Line_ReDraw(0xFFFFFF, files.current);
538
			files.current+=cur;
538
			files.current+=cur;
539
			Line_ReDraw(col_selec, files.current);
539
			Line_ReDraw(col_selec, files.current);
540
			return;
540
			return;
541
		}
541
		}
542
		ELSE
542
		ELSE
543
		{
543
		{
544
			IF (-cur
544
			IF (-cur
545
			files.current=0;
545
			files.current=0;
546
			List_ReDraw();
546
			List_ReDraw();
547
			return;
547
			return;
548
		}
548
		}
549
	}
549
	}
550
	else  //down
550
	else  //down
551
	{
551
	{
552
		IF (files.first==files.count-files.visible) && (files.current==files.visible-1) return;
552
		IF (files.first==files.count-files.visible) && (files.current==files.visible-1) return;
553
		IF (files.visible-files.current>cur)
553
		IF (files.visible-files.current>cur)
554
		{
554
		{
555
			Line_ReDraw(0xFFFFFF, files.current);
555
			Line_ReDraw(0xFFFFFF, files.current);
556
			files.current+=cur;
556
			files.current+=cur;
557
			Line_ReDraw(col_selec, files.current);
557
			Line_ReDraw(col_selec, files.current);
558
			return;
558
			return;
559
		}
559
		}
560
		else
560
		else
561
		{
561
		{
562
			IF(files.first+files.current+cur>=files.count)
562
			IF(files.first+files.current+cur>=files.count)
563
			{
563
			{
564
				files.first=files.count-files.visible;
564
				files.first=files.count-files.visible;
565
				files.current=cur-files.first+files.current;
565
				files.current=cur-files.first+files.current;
566
				}
566
				}
567
			ELSE
567
			ELSE
568
			{
568
			{
569
				files.first+=cur+files.current-files.visible+1;
569
				files.first+=cur+files.current-files.visible+1;
570
				files.current=files.visible-1;
570
				files.current=files.visible-1;
571
			}
571
			}
572
			
572
			
573
			IF (files.current<0) || (files.current>files.visible)
573
			IF (files.current<0) || (files.current>files.visible)
574
			{
574
			{
575
				files.current=files.visible-1;
575
				files.current=files.visible-1;
576
			}
576
			}
577
			List_ReDraw();
577
			List_ReDraw();
578
		}
578
		}
579
	}
579
	}
580
}
580
}
581
 
581
 
582
 
582
 
583
void List_ReDraw()
583
void List_ReDraw()
584
{
584
{
585
	int paint_y;
585
	int paint_y;
586
	//we are in the end of the list => maximize window => there will be white lines after the last element
586
	//we are in the end of the list => maximize window => there will be white lines after the last element
587
	if (files.count-files.firstfiles.visible-1)
587
	if (files.count-files.firstfiles.visible-1)
588
	{ files.first=files.count-files.visible; files.current=files.visible-1; }
588
	{ files.first=files.count-files.visible; files.current=files.visible-1; }
589
	for (j=0; j
589
	for (j=0; j
590
	//in the bottom
590
	//in the bottom
591
	paint_y = j * files.line_h + files.y;
591
	paint_y = j * files.line_h + files.y;
592
	DrawBar(files.x,paint_y,files.w,onTop(paint_y,6),0xFFFFFF);
592
	DrawBar(files.x,paint_y,files.w,onTop(paint_y,6),0xFFFFFF);
593
	DrawBar(Form.cwidth-159,paint_y,1,onTop(paint_y,6),sc.work);
593
	DrawBar(Form.cwidth-159,paint_y,1,onTop(paint_y,6),sc.work);
594
	DrawBar(Form.cwidth-86,paint_y,1,onTop(paint_y,6),sc.work);
594
	DrawBar(Form.cwidth-86,paint_y,1,onTop(paint_y,6),sc.work);
595
	Scroll();
595
	Scroll();
596
}
596
}
597
 
597
 
598
 
598
 
599
void Line_ReDraw(dword color, filenum){
599
void Line_ReDraw(dword color, filenum){
600
	dword text_col=0,
600
	dword text_col=0,
601
	      ext1,
601
	      ext1,
602
	      file_offet,
602
	      file_offet,
603
	      file_name_off,
603
	      file_name_off,
604
	      y=filenum*files.line_h+files.y;
604
	      y=filenum*files.line_h+files.y;
605
	      BDVK file;
605
	      BDVK file;
606
	if (filenum==-1) return;
606
	if (filenum==-1) return;
607
	DrawBar(files.x,y,3,files.line_h,color); 
607
	DrawBar(files.x,y,3,files.line_h,color); 
608
	DrawBar(files.x+19,y,files.w-19,files.line_h,color);
608
	DrawBar(files.x+19,y,files.w-19,files.line_h,color);
609
	DrawBar(files.x+3,y+17,16,1,color);
609
	DrawBar(files.x+3,y+17,16,1,color);
610
	if (files.line_h>18) DrawBar(files.x+3,y+18,16,files.line_h-18,color);
610
	if (files.line_h>18) DrawBar(files.x+3,y+18,16,files.line_h-18,color);
611
	if (files.line_h>15) DrawBar(files.x+3,y,16,files.line_h-15,color); 
611
	if (files.line_h>15) DrawBar(files.x+3,y,16,files.line_h-15,color); 
612
 
612
 
613
	file_offet = file_mas[filenum+files.first]*304 + buf+32;
613
	file_offet = file_mas[filenum+files.first]*304 + buf+32;
614
	file.attr     = ESDWORD[file_offet];
614
	file.attr     = ESDWORD[file_offet];
615
	file.selected = ESBYTE[file_offet+7];
615
	file.selected = ESBYTE[file_offet+7];
616
	file.sizelo   = ESDWORD[file_offet+32];
616
	file.sizelo   = ESDWORD[file_offet+32];
617
	file_name_off = file_offet+40;
617
	file_name_off = file_offet+40;
618
 
618
 
619
	if (! TestBit(file.attr, 4) ) //file or folder?
619
	if (! TestBit(file.attr, 4) ) //file or folder?
620
	{	
620
	{	
621
		Put_icon(file_name_off+_strrchr(file_name_off,'.'), files.x+3, files.line_h/2-7+y, color, 0);
621
		Put_icon(file_name_off+_strrchr(file_name_off,'.'), files.x+3, files.line_h/2-7+y, color, 0);
622
		WriteText(7-strlen(ConvertSize(file.sizelo))*6+Form.cwidth - 76,files.line_h-6/2+y,0x80,0,ConvertSize(file.sizelo));
622
		WriteText(7-strlen(ConvertSize(file.sizelo))*6+Form.cwidth - 76,files.line_h-6/2+y,0x80,0,ConvertSize(file.sizelo));
623
	}
623
	}
624
	else
624
	else
625
	{
625
	{
626
		if (strcmp("..",file_name_off)==0) ext1=".."; else ext1="";
626
		if (strcmp("..",file_name_off)==0) ext1=".."; else ext1="";
627
		Put_icon(ext1, files.x+3, files.line_h/2-7+y, color, 0);		
627
		Put_icon(ext1, files.x+3, files.line_h/2-7+y, color, 0);		
628
	}
628
	}
629
 
629
 
630
	if (TestBit(file.attr, 1)) || (TestBit(file.attr, 2)) text_col=0xA6A6B7; //system or hiden?
630
	if (TestBit(file.attr, 1)) || (TestBit(file.attr, 2)) text_col=0xA6A6B7; //system or hiden?
631
	if (color!=0xFFFfff)
631
	if (color!=0xFFFfff)
632
	{
632
	{
633
		itdir = TestBit(file.attr, 4);
633
		itdir = TestBit(file.attr, 4);
634
		strcpy(#file_name, file_name_off);
634
		strcpy(#file_name, file_name_off);
635
		strcpy(#file_path, #path);
635
		strcpy(#file_path, #path);
636
		strcat(#file_path, #file_name);
636
		strcat(#file_path, #file_name);
637
		if (text_col==0xA6A6B7) text_col=0xFFFFFF;
637
		if (text_col==0xA6A6B7) text_col=0xFFFFFF;
638
	}
638
	}
639
	if (file.selected) text_col=0xFF0000;
639
	if (file.selected) text_col=0xFF0000;
640
	if (Form.width>=480)
640
	if (Form.width>=480)
641
	{
641
	{
642
		FileShow.start_x = files.x + 23;
642
		FileShow.start_x = files.x + 23;
643
		FileShow.font_color = text_col;
643
		FileShow.font_color = text_col;
644
		FileShow.area_size_x = Form.width - 380;
644
		FileShow.area_size_x = Form.width - 380;
645
		FileShow.text_pointer = file_name_off;
645
		FileShow.text_pointer = file_name_off;
646
		FileShow.start_y = files.text_y+y;
646
		FileShow.start_y = files.text_y+y;
647
		PathShow_prepare stdcall(#FileShow);
647
		PathShow_prepare stdcall(#FileShow);
648
		PathShow_draw stdcall(#FileShow);
648
		PathShow_draw stdcall(#FileShow);
649
	}
649
	}
650
	DrawBar(Form.cwidth-159,y,1,files.line_h,sc.work); //gray line 1
650
	DrawBar(Form.cwidth-159,y,1,files.line_h,sc.work); //gray line 1
651
	DrawBar(Form.cwidth-86,y,1,files.line_h,sc.work); //gray line 2
651
	DrawBar(Form.cwidth-86,y,1,files.line_h,sc.work); //gray line 2
652
}
652
}
653
 
653
 
654
 
654
 
655
void Open_Dir(dword dir_path, redraw){
655
void Open_Dir(dword dir_path, redraw){
656
	int errornum, maxcount;
656
	int errornum, maxcount;
657
 
657
 
658
	if (redraw!=ONLY_SHOW)
658
	if (redraw!=ONLY_SHOW)
659
	{
659
	{
660
		if (ESBYTE[dir_path+1]!='\0') ESBYTE[dir_path+strlen(dir_path)-1] = '\0';
660
		if (ESBYTE[dir_path+1]!='\0') ESBYTE[dir_path+strlen(dir_path)-1] = '\0';
661
		if (buf) free(buf);
661
		if (buf) free(buf);
662
		errornum = GetDir(#buf, #files.count, dir_path, DIRS_NOROOT);
662
		errornum = GetDir(#buf, #files.count, dir_path, DIRS_NOROOT);
663
		if (ESBYTE[dir_path+1]!='\0') chrcat(dir_path, '/');
663
		if (ESBYTE[dir_path+1]!='\0') chrcat(dir_path, '/');
664
		if (errornum)
664
		if (errornum)
665
		{
665
		{
666
			HistoryPath(ADD_NEW_PATH);
666
			HistoryPath(ADD_NEW_PATH);
667
			GoBack();
667
			GoBack();
668
			Write_Error(errornum);
668
			Write_Error(errornum);
669
			return;
669
			return;
670
		}
670
		}
671
		maxcount = sizeof(file_mas)/sizeof(dword)-1;
671
		maxcount = sizeof(file_mas)/sizeof(dword)-1;
672
		if (files.count>maxcount) files.count = maxcount;
672
		if (files.count>maxcount) files.count = maxcount;
673
		if (files.count>0) && (files.current==-1) files.current=0;
673
		if (files.count>0) && (files.current==-1) files.current=0;
674
	}
674
	}
675
	if (files.count!=-1)
675
	if (files.count!=-1)
676
	{
676
	{
677
		KEdit();
677
		KEdit();
678
		HistoryPath(ADD_NEW_PATH);
678
		HistoryPath(ADD_NEW_PATH);
679
		files.visible = files.h / files.line_h;
679
		files.visible = files.h / files.line_h;
680
		IF (files.count < files.visible) files.visible = files.count;
680
		IF (files.count < files.visible) files.visible = files.count;
681
		IF (sort_num==1) sorting_arrow_x = Form.width+60/2;
681
		IF (sort_num==1) sorting_arrow_x = Form.width+60/2;
682
		IF (sort_num==2) sorting_arrow_x = Form.width-115;
682
		IF (sort_num==2) sorting_arrow_x = Form.width-115;
683
		IF (sort_num==3) sorting_arrow_x = strlen(T_SIZE)*3-30+files.x+files.w;
683
		IF (sort_num==3) sorting_arrow_x = strlen(T_SIZE)*3-30+files.x+files.w;
684
		WriteText(sorting_arrow_x,45,0x80,sc.work_graph,"\x19");
684
		WriteText(sorting_arrow_x,45,0x80,sc.work_graph,"\x19");
685
		IF (redraw!=ONLY_SHOW) Sorting();
685
		IF (redraw!=ONLY_SHOW) Sorting();
686
		IF (redraw!=ONLY_OPEN) List_ReDraw();
686
		IF (redraw!=ONLY_OPEN) List_ReDraw();
687
	}
687
	}
688
	IF (files.count==-1) && (redraw!=ONLY_OPEN) {files.visible=files.count=0; List_ReDraw();}
688
	IF (files.count==-1) && (redraw!=ONLY_OPEN) {files.visible=files.count=0; List_ReDraw();}
689
}
689
}
690
 
690
 
691
 
691
 
692
inline Sorting()
692
inline Sorting()
693
{
693
{
694
	dword k=0, l=1;
694
	dword k=0, l=1;
695
	dword file_off;
695
	dword file_off;
696
	int i;
696
	int i;
697
	if (!strcmp(#path,"/")) //do not sort
697
	if (!strcmp(#path,"/")) //do not sort
698
	{
698
	{
699
		FOR(k=1;k
699
		FOR(k=1;k
700
		return;
700
		return;
701
	}
701
	}
702
	FOR (j=files.count-1, file_off=files.count-1*304+buf+32; j>=0; j--, file_off-=304;)  //files | folders
702
	FOR (j=files.count-1, file_off=files.count-1*304+buf+32; j>=0; j--, file_off-=304;)  //files | folders
703
	{
703
	{
704
		if (!real_files_names_case) strttl(file_off+40);
704
		if (!real_files_names_case) strttl(file_off+40);
705
		if (TestBit(ESDWORD[file_off],4)) //directory?
705
		if (TestBit(ESDWORD[file_off],4)) //directory?
706
		{
706
		{
707
			file_mas[k]=j;
707
			file_mas[k]=j;
708
			k++;
708
			k++;
709
		}
709
		}
710
		else
710
		else
711
		{
711
		{
712
			file_mas[files.count-l]=j;
712
			file_mas[files.count-l]=j;
713
			l++;
713
			l++;
714
		}
714
		}
715
	}
715
	}
716
	//sorting: files first, then folders
716
	//sorting: files first, then folders
717
	Sort_by_Name(0,k-1);
717
	Sort_by_Name(0,k-1);
718
	IF (sort_num==1) Sort_by_Name(k,files.count-1);
718
	IF (sort_num==1) Sort_by_Name(k,files.count-1);
719
	IF (sort_num==2) Sort_by_Type(k,files.count-1);
719
	IF (sort_num==2) Sort_by_Type(k,files.count-1);
720
	IF (sort_num==3) Sort_by_Size(k,files.count-1);
720
	IF (sort_num==3) Sort_by_Size(k,files.count-1);
721
	//".." should be first
721
	//".." should be first
722
	IF (k>0) && (strcmp(file_mas[0]*304+buf+72,"..")!=0)
722
	IF (k>0) && (strcmp(file_mas[0]*304+buf+72,"..")!=0)
723
		FOR(k--; k>0; k--;) IF (!strcmp(file_mas[k]*304+buf+72,"..")) {file_mas[k]>
723
		FOR(k--; k>0; k--;) IF (!strcmp(file_mas[k]*304+buf+72,"..")) {file_mas[k]>
724
}
724
}
725
 
725
 
726
 
726
 
727
void Del_Form()
727
void Del_Form()
728
{
728
{
729
	int dform_x=files.w-220/2+files.x;
729
	int dform_x=files.w-220/2+files.x;
730
	if (strcmp(#file_name,".")==0) || (strcmp(#file_name,"..")==0) return;
730
	if (strcmp(#file_name,".")==0) || (strcmp(#file_name,"..")==0) return;
731
	if (del_active==2)
731
	if (del_active==2)
732
	{
732
	{
733
		if (itdir) ShowMessage(WAIT_DELETING_FOLDER, 0);
733
		if (itdir) ShowMessage(WAIT_DELETING_FOLDER, 0);
734
	}
734
	}
735
	else
735
	else
736
	{
736
	{
737
		if (!files.count) return;
737
		if (!files.count) return;
738
		DrawPopup(dform_x,160,220,80,1,sc.work,sc.work_graph);
738
		DrawPopup(dform_x,160,220,80,1,sc.work,sc.work_graph);
739
		WriteText(-strlen(T_DELETE_FILE)*3+110+dform_x,175,0x80,sc.work_text,T_DELETE_FILE);
739
		WriteText(-strlen(T_DELETE_FILE)*3+110+dform_x,175,0x80,sc.work_text,T_DELETE_FILE);
740
		IF (strlen(#file_name)<28) 
740
		IF (strlen(#file_name)<28) 
741
		{
741
		{
742
			WriteText(strlen(#file_name)*3+110+dform_x+2,190,0x80,sc.work_text,"?");
742
			WriteText(strlen(#file_name)*3+110+dform_x+2,190,0x80,sc.work_text,"?");
743
			WriteText(-strlen(#file_name)*3+110+dform_x,190,0x80,sc.work_text,#file_name);
743
			WriteText(-strlen(#file_name)*3+110+dform_x,190,0x80,sc.work_text,#file_name);
744
		}
744
		}
745
		else
745
		else
746
		{
746
		{
747
			WriteText(164+dform_x,190,0x80,0,"...?");
747
			WriteText(164+dform_x,190,0x80,0,"...?");
748
			ESI = 24;
748
			ESI = 24;
749
			WriteText(dform_x+20,190,0,0,#file_name);
749
			WriteText(dform_x+20,190,0,0,#file_name);
750
		}
750
		}
751
		DrawFlatButton(dform_x+27,208,70,20,301,0xFFB6B5,T_YES);
751
		DrawFlatButton(dform_x+27,208,70,20,301,0xFFB6B5,T_YES);
752
		DrawFlatButton(dform_x+120,208,70,20,302,0xC6DFC6,T_NO);		
752
		DrawFlatButton(dform_x+120,208,70,20,302,0xC6DFC6,T_NO);		
753
		del_active=1;
753
		del_active=1;
754
	}
754
	}
755
}
755
}
756
 
756
 
757
int del_error;
757
int del_error;
758
int Del_File2(dword way)
758
int Del_File2(dword way)
759
{    
759
{    
760
	dword dirbuf, fcount, i, filename;
760
	dword dirbuf, fcount, i, filename;
761
	int error;
761
	int error;
762
	char del_from[4096];
762
	char del_from[4096];
763
	if (isdir(way))
763
	if (isdir(way))
764
	{
764
	{
765
		if (error = GetDir(#dirbuf, #fcount, way, DIRS_ONLYREAL)) del_error = error;
765
		if (error = GetDir(#dirbuf, #fcount, way, DIRS_ONLYREAL)) del_error = error;
766
		for (i=0; i
766
		for (i=0; i
767
		{
767
		{
768
			if (CheckEvent()==evReDraw) draw_window();
768
			if (CheckEvent()==evReDraw) draw_window();
769
			filename = i*304+dirbuf+72;
769
			filename = i*304+dirbuf+72;
770
			strcpy(#del_from, way);
770
			strcpy(#del_from, way);
771
			chrcat(#del_from, '/');
771
			chrcat(#del_from, '/');
772
			strcat(#del_from, filename);
772
			strcat(#del_from, filename);
773
			if ( TestBit(ESDWORD[filename-40], 4) )
773
			if ( TestBit(ESDWORD[filename-40], 4) )
774
				Del_File2(#del_from);
774
				Del_File2(#del_from);
775
			else
775
			else
776
			{
776
			{
777
				if (error = DeleteFile(#del_from)) del_error = error;
777
				if (error = DeleteFile(#del_from)) del_error = error;
778
			}
778
			}
779
		}
779
		}
780
	}
780
	}
781
	if (error = DeleteFile(way)) del_error = error;
781
	if (error = DeleteFile(way)) del_error = error;
782
}
782
}
783
 
783
 
784
 
784
 
785
void Del_File(byte dodel)
785
void Del_File(byte dodel)
786
{   
786
{   
787
	byte del_from[4096];
787
	byte del_from[4096];
788
	dword selected_offset2;
788
	dword selected_offset2;
789
	int tst, count, i;
789
	int tst, count, i;
790
	int cont = 0;
790
	int cont = 0;
791
	
791
	
792
	if (dodel==true)
792
	if (dodel==true)
793
	{
793
	{
794
		del_active=2;
794
		del_active=2;
795
		if (itdir) ShowMessage(WAIT_DELETING_FOLDER, 0);
795
		if (itdir) ShowMessage(WAIT_DELETING_FOLDER, 0);
796
		del_error = 0;
796
		del_error = 0;
797
		
797
		
798
		for (i=0; i
798
		for (i=0; i
799
        {
799
        {
800
            selected_offset2 = file_mas[i]*304 + buf+32 + 7;
800
            selected_offset2 = file_mas[i]*304 + buf+32 + 7;
801
            if (ESBYTE[selected_offset2]) cont++;
801
            if (ESBYTE[selected_offset2]) cont++;
802
        }
802
        }
803
		if (!cont)
803
		if (!cont)
804
		{
804
		{
805
		    Del_File2(#file_path);
805
		    Del_File2(#file_path);
806
		}
806
		}
807
		else
807
		else
808
		{
808
		{
809
		   for (i=0; i
809
		   for (i=0; i
810
            {
810
            {
811
                    selected_offset2 = file_mas[i]*304 + buf+32 + 7;
811
                    selected_offset2 = file_mas[i]*304 + buf+32 + 7;
812
                    if (ESBYTE[selected_offset2]) {
812
                    if (ESBYTE[selected_offset2]) {
813
                            strcpy(#del_from, #path);
813
                            strcpy(#del_from, #path);
814
                            strcat(#del_from, file_mas[i]*304+buf+72);
814
                            strcat(#del_from, file_mas[i]*304+buf+72);
815
                            Del_File2(#del_from);
815
                            Del_File2(#del_from);
816
                    }
816
                    }
817
            }
817
            }
818
			
818
			
819
		}
819
		}
820
		if (del_error) Write_Error(del_error);
820
		if (del_error) Write_Error(del_error);
821
 	}
821
 	}
822
	del_active=0;
822
	del_active=0;
823
	DeleteButton(301);
823
	DeleteButton(301);
824
	DeleteButton(302);
824
	DeleteButton(302);
825
	Open_Dir(#path,WITH_REDRAW);
825
	Open_Dir(#path,WITH_REDRAW);
826
}
826
}
827
 
827
 
828
 
828
 
829
void ReName(byte rename)
829
void ReName(byte rename)
830
{
830
{
831
	int del_rezult, copy_rezult;
831
	int del_rezult, copy_rezult;
832
	char edit_name[256];
832
	char edit_name[256];
833
	rename_active=0;
833
	rename_active=0;
834
	edit2.flags=64;
834
	edit2.flags=64;
835
	if (rename==true)
835
	if (rename==true)
836
	{
836
	{
837
		strcpy(#temp, #path);
837
		strcpy(#temp, #path);
838
		strcpy(#edit_name, #file_name); //save edit name to select it later
838
		strcpy(#edit_name, #file_name); //save edit name to select it later
839
		strcat(#temp, #file_name);
839
		strcat(#temp, #file_name);
840
		if (strcmpi(#file_path,#temp)!=0) && (file_name)
840
		if (strcmpi(#file_path,#temp)!=0) && (file_name)
841
		if (itdir)
841
		if (itdir)
842
		{
842
		{
843
			if (del_rezult = DeleteFile(#file_path))
843
			if (del_rezult = DeleteFile(#file_path))
844
			{
844
			{
845
				Write_Error(del_rezult);
845
				Write_Error(del_rezult);
846
				ShowMessage(T_DEL_ERROR_1, 150);
846
				ShowMessage(T_DEL_ERROR_1, 150);
847
				return;
847
				return;
848
			}
848
			}
849
			if (CreateDir(#temp)) CreateDir(#file_path);
849
			if (CreateDir(#temp)) CreateDir(#file_path);
850
			Open_Dir(#path,WITH_REDRAW);
850
			Open_Dir(#path,WITH_REDRAW);
851
			SelectFile(#edit_name);
851
			SelectFile(#edit_name);
852
		}
852
		}
853
		else
853
		else
854
		{
854
		{
855
			if (copy_rezult = CopyFile(#file_path,#temp))
855
			if (copy_rezult = CopyFile(#file_path,#temp))
856
			{
856
			{
857
				Write_Error(copy_rezult);
857
				Write_Error(copy_rezult);
858
			}
858
			}
859
			else
859
			else
860
			{
860
			{
861
				Del_File(true);
861
				Del_File(true);
862
				SelectFile(#edit_name);
862
				SelectFile(#edit_name);
863
			}
863
			}
864
		}
864
		}
865
	}
865
	}
866
	Line_ReDraw(col_selec,files.current);
866
	Line_ReDraw(col_selec,files.current);
867
}
867
}
868
 
868
 
869
 
869
 
870
void SelectFile(dword that_file)
870
void SelectFile(dword that_file)
871
{
871
{
872
	files.first=files.current=0;
872
	files.first=files.current=0;
873
   	Open_Dir(#path,ONLY_OPEN);
873
   	Open_Dir(#path,ONLY_OPEN);
874
	if (!real_files_names_case) strttl(that_file);
874
	if (!real_files_names_case) strttl(that_file);
875
	for (i=files.count-1; i>=0; i--;)
875
	for (i=files.count-1; i>=0; i--;)
876
		if (!strcmp(file_mas[i]*304+buf+72,that_file)) break;
876
		if (!strcmp(file_mas[i]*304+buf+72,that_file)) break;
877
	List_Current(i);
877
	List_Current(i);
878
	List_ReDraw();
878
	List_ReDraw();
879
}
879
}
880
 
880
 
881
 
881
 
882
void Dir_Up()
882
void Dir_Up()
883
{
883
{
884
	char cur_folder[4096];
884
	char cur_folder[4096];
885
	i=strlen(#path)-1;
885
	i=strlen(#path)-1;
886
	if (i==0) return;
886
	if (i==0) return;
887
	path[i]=0x00;
887
	path[i]=0x00;
888
	i = strrchr(#path, '/');
888
	i = strrchr(#path, '/');
889
	strcpy(#cur_folder, #path+i);
889
	strcpy(#cur_folder, #path+i);
890
	path[i]=0x00;
890
	path[i]=0x00;
891
	SelectFile(#cur_folder);
891
	SelectFile(#cur_folder);
892
}
892
}
893
 
893
 
894
void Open(byte rez)
894
void Open(byte rez)
895
{
895
{
896
	byte temp[4096];
896
	byte temp[4096];
897
	if (rez)
897
	if (rez)
898
	{
898
	{
899
		if (!strcmp(#file_name,"..")) return;
899
		if (!strcmp(#file_name,"..")) return;
900
		strcpy(#temp, #file_path);
900
		strcpy(#temp, #file_path);
901
		if (path[strlen(#temp)-1]!='/') chrcat(#temp, '/'); //need "/" in the end
901
		if (path[strlen(#temp)-1]!='/') chrcat(#temp, '/'); //need "/" in the end
902
		RunProgram("/sys/File Managers/Eolite", #temp);
902
		RunProgram("/sys/File Managers/Eolite", #temp);
903
		return;
903
		return;
904
	}
904
	}
905
	if (!files.count) return;
905
	if (!files.count) return;
906
	if (!itdir)
906
	if (!itdir)
907
	{
907
	{
908
		if (strrchr(#file_name, '.')==0) RunProgram(#file_path, ""); else RunProgram("/sys/@open", #file_path);
908
		if (strrchr(#file_name, '.')==0) RunProgram(#file_path, ""); else RunProgram("/sys/@open", #file_path);
909
	} 
909
	} 
910
	else
910
	else
911
	{
911
	{
912
		if (!strcmp(#file_name,"..")) { Dir_Up(); return; }
912
		if (!strcmp(#file_name,"..")) { Dir_Up(); return; }
913
		strcpy(#path, #file_path);
913
		strcpy(#path, #file_path);
914
		if (path[strlen(#path)-1]!='/') chrcat(#path, '/'); //need "/" in the end
914
		if (path[strlen(#path)-1]!='/') chrcat(#path, '/'); //need "/" in the end
915
		files.first=files.current=0;
915
		files.first=files.current=0;
916
		Open_Dir(#path,WITH_REDRAW);
916
		Open_Dir(#path,WITH_REDRAW);
917
	}
917
	}
918
}
918
}
919
 
919
 
920
 
920
 
921
inline fastcall void GoBack()
921
inline fastcall void GoBack()
922
{
922
{
923
	char cur_folder[4096];
923
	char cur_folder[4096];
924
	strcpy(#cur_folder, GetCurrentFolder());
924
	strcpy(#cur_folder, GetCurrentFolder());
925
	if (HistoryPath(GO_BACK)) SelectFile(#cur_folder);
925
	if (HistoryPath(GO_BACK)) SelectFile(#cur_folder);
926
}
926
}
927
 
927
 
928
void ShowOpenWithDialog()
928
void ShowOpenWithDialog()
929
{
929
{
930
	byte param[4097];
930
	byte param[4097];
931
	param[0] = '~';
931
	param[0] = '~';
932
	param[1] = '\0';
932
	param[1] = '\0';
933
	strcat(#param, #file_path);
933
	strcat(#param, #file_path);
934
	RunProgram("/sys/@open", #param);
934
	RunProgram("/sys/@open", #param);
935
}
935
}
936
 
936
 
937
void FnProcess(char N)
937
void FnProcess(char N)
938
{
938
{
939
	switch(N)
939
	switch(N)
940
	{
940
	{
941
		case 1:
941
		case 1:
942
			if (!active_about) 
942
			if (!active_about) 
943
			{
943
			{
944
				SwitchToAnotherThread();
944
				SwitchToAnotherThread();
945
				about_window=CreateThread(#about_dialog,#about_stak+4092);
945
				about_window=CreateThread(#about_dialog,#about_stak+4092);
946
				break;
946
				break;
947
			}
947
			}
948
			else
948
			else
949
			{
949
			{
950
				ActivateWindow(GetProcessSlot(about_window));
950
				ActivateWindow(GetProcessSlot(about_window));
951
			}
951
			}
952
			break;
952
			break;
953
		case 2:
953
		case 2:
954
			if (!files.count) break;
954
			if (!files.count) break;
955
			edit2.flags = 100000000000010b; //set active
955
			edit2.flags = 100000000000010b; //set active
956
			edit2.left = files.x + 21;
956
			edit2.left = files.x + 21;
957
			edit2.width = files.w - 26;
957
			edit2.width = files.w - 26;
958
			edit2.top=files.current*files.line_h+59;
958
			edit2.top=files.current*files.line_h+59;
959
			edit2.size=edit2.pos=strlen(#file_name);
959
			edit2.size=edit2.pos=strlen(#file_name);
960
			edit_box_draw  stdcall (#edit2);
960
			edit_box_draw  stdcall (#edit2);
961
			DrawBar(edit2.left,files.current*files.line_h+58,edit2.width+1,1,0xFFFFCC); //bg
961
			DrawBar(edit2.left,files.current*files.line_h+58,edit2.width+1,1,0xFFFFCC); //bg
962
			rename_active=1;
962
			rename_active=1;
963
			break;
963
			break;
964
		case 3:
964
		case 3:
965
			IF (!itdir) RunProgram("/sys/tinypad", #file_path);
965
			IF (!itdir) RunProgram("/sys/tinypad", #file_path);
966
			break;
966
			break;
967
		case 4:
967
		case 4:
968
			IF (!itdir) RunProgram("/sys/develop/heed", #file_path);
968
			IF (!itdir) RunProgram("/sys/develop/heed", #file_path);
969
			break;
969
			break;
970
		case 5: //refresh cur dir & devs
970
		case 5: //refresh cur dir & devs
971
			Tip(56, T_DEVICES, 55, "-");
971
			Tip(56, T_DEVICES, 55, "-");
972
			Open_Dir(#path,WITH_REDRAW);
972
			Open_Dir(#path,WITH_REDRAW);
973
			pause(10);
973
			pause(10);
974
			LoadIniSettings();
974
			LoadIniSettings();
975
			GetSystemDiscs();
975
			GetSystemDiscs();
976
			Open_Dir(#path,WITH_REDRAW);
976
			Open_Dir(#path,WITH_REDRAW);
977
			DrawLeftPanel();
977
			DrawLeftPanel();
978
			break;
978
			break;
979
		case 6:
979
		case 6:
980
			strcpy(#temp, #path);
980
			strcpy(#temp, #path);
981
			strcat(#temp, T_NEW_FOLDER);
981
			strcat(#temp, T_NEW_FOLDER);
982
			CreateDir(#temp);
982
			CreateDir(#temp);
983
			if (!EAX){
983
			if (!EAX){
984
				SelectFile(T_NEW_FOLDER);
984
				SelectFile(T_NEW_FOLDER);
985
				FnProcess(2);
985
				FnProcess(2);
986
			}
986
			}
987
			else
987
			else
988
			{
988
			{
989
				Write_Error(EAX);
989
				Write_Error(EAX);
990
				ShowMessage(NOT_CREATE_FOLDER, 150);
990
				ShowMessage(NOT_CREATE_FOLDER, 150);
991
			}
991
			}
992
			break;
992
			break;
993
		case 7:
993
		case 7:
994
			strcpy(#temp, #path);
994
			strcpy(#temp, #path);
995
			strcat(#temp, T_NEW_FILE);
995
			strcat(#temp, T_NEW_FILE);
996
			WriteFile(0, 0, #temp);
996
			WriteFile(0, 0, #temp);
997
			if (!EAX){
997
			if (!EAX){
998
				SelectFile(T_NEW_FILE);
998
				SelectFile(T_NEW_FILE);
999
				FnProcess(2);
999
				FnProcess(2);
1000
			}
1000
			}
1001
			else
1001
			else
1002
			{
1002
			{
1003
				Write_Error(EAX);
1003
				Write_Error(EAX);
1004
				ShowMessage(NOT_CREATE_FILE, 150);
1004
				ShowMessage(NOT_CREATE_FILE, 150);
1005
			}
1005
			}
1006
			break;
1006
			break;
1007
		case 8:
1007
		case 8:
1008
			SwitchToAnotherThread();
1008
			SwitchToAnotherThread();
1009
			CreateThread(#properties_dialog, #properties_stak+4092);
1009
			CreateThread(#properties_dialog, #properties_stak+4092);
1010
			break;
1010
			break;
1011
		case 10: //F10
1011
		case 10: //F10
1012
			if (!active_settings) 
1012
			if (!active_settings) 
1013
			{
1013
			{
1014
				SwitchToAnotherThread();
1014
				SwitchToAnotherThread();
1015
				settings_window=CreateThread(#settings_dialog, #settings_stak+4092);
1015
				settings_window=CreateThread(#settings_dialog, #settings_stak+4092);
1016
				break;
1016
				break;
1017
			}
1017
			}
1018
			else
1018
			else
1019
			{
1019
			{
1020
				ActivateWindow(GetProcessSlot(settings_window));
1020
				ActivateWindow(GetProcessSlot(settings_window));
1021
			}
1021
			}
1022
			break;
1022
			break;
1023
	}
1023
	}
1024
}
1024
}
1025
 
1025
 
1026
//need to remove these functiones, they are a very old shit :)
1026
//need to remove these functiones, they are a very old shit :)
1027
dword onTop(dword down,up) {EAX=Form.height-GetSkinHeight()-down-up;}
1027
dword onTop(dword down,up) {EAX=Form.height-GetSkinHeight()-down-up;}
1028
 
1028
 
1029
 
1029
 
1030
stop:
1030
stop:
1031
 
1031
 
1032
char menu_stak[4096];
1032
char menu_stak[4096];
1033
char copy_stak[4096];
1033
char copy_stak[4096];
1034
char open_with_stak[4096];
1034
char open_with_stak[4096];
1035
char about_stak[4096];
1035
char about_stak[4096];
1036
char properties_stak[4096];
1036
char properties_stak[4096];
1037
char settings_stak[4096];
1037
char settings_stak[4096];
1038
>
1038
>
1039
>
1039
>
1040
>
1040
>
1041
>
1041
>
1042
>
1042
>
1043
>
1043
>