Subversion Repositories Kolibri OS

Rev

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

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