Subversion Repositories Kolibri OS

Rev

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

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