Rev 6600 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6600 | Rev 6602 | ||
---|---|---|---|
1 | byte copy_to[4096]; |
1 | byte copy_to[4096]; |
2 | byte copy_from[4096]; |
2 | byte copy_from[4096]; |
3 | byte cut_active=0; |
3 | byte cut_active=0; |
4 | 4 | ||
5 | enum {NOCUT, CUT}; |
5 | enum {NOCUT, CUT}; |
6 | 6 | ||
7 | Clipboard clipboard; |
7 | Clipboard clipboard; |
8 | 8 | ||
9 | void Copy(dword pcth, char cut) |
9 | void setElementSelectedFlag(dword n, bool state) { |
10 | { |
- | |
11 | dword selected_offset2; |
- | |
12 | byte copy_t[4096]; |
- | |
13 | dword buff_data; |
- | |
14 | dword path_len = 0; |
- | |
15 | dword buffer_len = 0; |
- | |
16 | dword size_buf = 0; |
- | |
17 | int ind = 0; |
- | |
18 | if (selected_count) |
- | |
19 | { |
- | |
20 | for (i=0; i |
- | |
21 | { |
- | |
22 | selected_offset2 = file_mas[i]*304 + buf+32 + 7; |
10 | dword selected_offset = file_mas[n]*304 + buf+32 + 7; |
23 | if (ESBYTE[selected_offset2]) { |
11 | if (!n) if (!strncmp(selected_offset+33, "..", 2)) return; //do not selec ".." directory |
24 | strcpy(#copy_t, #path); |
12 | ESBYTE[selected_offset] = state; |
25 | strcat(#copy_t, file_mas[i]*304+buf+72); |
13 | if (state==true) selected_count++; |
26 | path_len = strlen(#copy_t); |
14 | if (state==false) selected_count--; |
27 | size_buf = size_buf + path_len + 4; |
- | |
28 | } |
- | |
29 | } |
15 | } |
30 | - | ||
31 | buff_data = malloc(size_buf); |
- | |
32 | ESDWORD[buff_data] = size_buf; |
- | |
33 | ESDWORD[buff_data+4] = 3; |
- | |
34 | ESINT[buff_data+8] = selected_count; |
- | |
35 | - | ||
36 | for (i=0; i |
- | |
37 | { |
- | |
38 | selected_offset2 = file_mas[i]*304 + buf+32 + 7; |
- | |
39 | if (ESBYTE[selected_offset2]) { |
- | |
40 | strcpy(#copy_t, #path); |
- | |
41 | strcat(#copy_t, file_mas[i]*304+buf+72); |
- | |
42 | path_len = strlen(#copy_t); |
- | |
43 | ESDWORD[buff_data+10+buffer_len] = path_len; |
- | |
44 | strlcpy(buff_data+10+4+buffer_len, #copy_t, path_len); |
- | |
45 | buffer_len = buffer_len + 4 + path_len; |
- | |
46 | ind++; |
- | |
47 | } |
- | |
48 | } |
- | |
49 | clipboard.SetSlotData(size_buf+10, buff_data); |
- | |
50 | } |
- | |
51 | else |
- | |
52 | { |
- | |
53 | path_len = strlen(#file_path)+4; |
- | |
54 | buff_data = malloc(path_len); |
- | |
55 | ESDWORD[buff_data] = path_len; |
- | |
56 | ESDWORD[buff_data+4] = 3; |
- | |
57 | ESINT[buff_data+8] = 1; |
- | |
58 | ESDWORD[buff_data+10] = path_len; |
- | |
59 | strlcpy(buff_data+14, #file_path, path_len);; |
- | |
60 | clipboard.SetSlotData(path_len+10, buff_data); |
- | |
61 | } |
- | |
62 | cut_active = cut; |
- | |
63 | free(buff_data); |
- | |
64 | } |
- | |
65 | - | ||
66 | void Paste() { |
- | |
67 | copy_stak = malloc(64000); |
- | |
68 | CreateThread(#PasteThread,copy_stak+64000-4); |
- | |
69 | } |
- | |
70 | - | ||
71 | void PasteThread() |
- | |
72 | { |
- | |
73 | char copy_rezult; |
- | |
74 | int j; |
- | |
75 | int cnt = 0; |
- | |
76 | dword buf; |
- | |
77 | dword path_len = 0; |
- | |
78 | dword buffer_len = 0; |
- | |
79 | file_count_copy = 0; |
- | |
80 | copy_bar.value = 0; |
- | |
81 | - | ||
82 | buf = clipboard.GetSlotData(clipboard.GetSlotCount()-1); |
- | |
83 | if (DSDWORD[buf+4] != 3) return; |
- | |
84 | cnt = ESINT[buf+8]; |
- | |
85 | for (j = 0; j < cnt; j++) { |
- | |
86 | path_len = ESDWORD[buf+10+buffer_len]; |
- | |
87 | strlcpy(#copy_from, buf+10+buffer_len+4, path_len); |
- | |
88 | buffer_len = buffer_len + 4 + path_len; |
- | |
89 | GetFileInfo(#copy_from, #file_info_count); |
- | |
90 | if ( file_info_count.isfolder ) DirFileCount(#copy_from); |
- | |
91 | else file_count_copy++; |
- | |
92 | } |
- | |
93 | copy_bar.max = file_count_copy; |
- | |
94 | - | ||
95 | if (cut_active) operation_flag = MOVE_FLAG; |
- | |
96 | else operation_flag = COPY_FLAG; |
- | |
97 | - | ||
98 | path_len = 0; |
- | |
99 | buffer_len = 0; |
- | |
100 | DisplayOperationForm(); |
- | |
101 | for (j = 0; j < cnt; j++) { |
- | |
102 | path_len = ESDWORD[buf+10+buffer_len]; |
- | |
103 | strlcpy(#copy_from, buf+10+buffer_len+4, path_len); |
- | |
104 | buffer_len = buffer_len + 4 + path_len; |
- | |
105 | if (!copy_from) DialogExit(); |
- | |
106 | strcpy(#copy_to, #path); |
- | |
107 | strcat(#copy_to, #copy_from+strrchr(#copy_from,'/')); |
- | |
108 | if (!strcmp(#copy_from,#copy_to)) |
- | |
109 | { |
- | |
110 | strcpy(#copy_to, #path); |
- | |
111 | strcat(#copy_to, "new_"); |
- | |
112 | strcat(#copy_to, #copy_from+strrchr(#copy_from,'/')); |
- | |
113 | } |
- | |
114 | if (strstr(#copy_to, #copy_from)) |
- | |
115 | { |
- | |
116 | notify("Copy directory into itself is a bad idea..."); |
- | |
117 | DialogExit(); |
- | |
118 | } |
- | |
119 | - | ||
120 | if (copy_rezult = copyf(#copy_from,#copy_to)) |
- | |
121 | { |
- | |
122 | Write_Error(copy_rezult); |
- | |
123 | } |
- | |
124 | else if (cut_active) |
- | |
125 | { |
- | |
126 | strcpy(#file_path, #copy_from); |
- | |
127 | Del_File2(#copy_from, 0); |
- | |
128 | - | ||
129 | } |
- | |
130 | } |
- | |
131 | if (cut_active) |
- | |
132 | { |
- | |
133 | cut_active=false; |
- | |
134 | } |
- | |
135 | if (info_after_copy) notify(INFO_AFTER_COPY); |
- | |
136 | DialogExit(); |
- | |
137 | } |
- | |
138 | - | ||
139 | //Another version of the function copy/paste |
- | |
140 | - | ||
141 | /* |
16 | |
142 | void Copy(dword pcth, char cut) |
17 | void Copy(dword pcth, char cut) |
143 | { |
18 | { |
144 | dword selected_offset2; |
19 | dword selected_offset2; |
145 | byte copy_t[4096]; |
20 | byte copy_t[4096]; |
146 | dword buff_data; |
21 | dword buff_data; |
147 | dword path_len = 0; |
22 | dword path_len = 0; |
148 | dword buffer_len = 0; |
23 | dword size_buf = 0; |
149 | dword size_buf = 0; |
- | |
150 | int ind = 0; |
24 | dword copy_buf_offset = 0; |
151 | if (selected_count) |
25 | |
- | 26 | if (files.count<=0) return; //no files |
|
- | 27 | if (selected_count==0) setElementSelectedFlag(files.cur_y, true); //no element selected by "insert", so we copy current element |
|
- | 28 | debugi(selected_count); |
|
152 | { |
29 | size_buf = 4; |
153 | for (i=0; i |
30 | for (i=0; i |
154 | { |
31 | { |
155 | selected_offset2 = file_mas[i]*304 + buf+32 + 7; |
32 | selected_offset2 = file_mas[i]*304 + buf+32 + 7; |
156 | if (ESBYTE[selected_offset2]) { |
33 | if (ESBYTE[selected_offset2]) { |
157 | strcpy(#copy_t, #path); |
34 | strcpy(#copy_t, #path); |
158 | strcat(#copy_t, file_mas[i]*304+buf+72); |
35 | strcat(#copy_t, file_mas[i]*304+buf+72); |
159 | path_len = strlen(#copy_t); |
36 | path_len = strlen(#copy_t); |
160 | size_buf = size_buf + path_len; |
37 | size_buf += path_len + 1; |
161 | } |
38 | } |
162 | } |
39 | } |
163 | 40 | size_buf += 20; |
|
164 | buff_data = malloc(size_buf); |
- | |
- | 41 | buff_data = malloc(size_buf); |
|
165 | ESDWORD[buff_data] = size_buf; |
42 | ESDWORD[buff_data] = size_buf; |
166 | ESDWORD[buff_data+4] = 3; |
43 | ESDWORD[buff_data+4] = 3; |
167 | ESINT[buff_data+8] = selected_count; |
44 | ESINT[buff_data+8] = selected_count; |
168 | 45 | copy_buf_offset = buff_data + 10; |
|
169 | for (i=0; i |
- | |
- | 46 | for (i=0; i |
|
170 | { |
47 | { |
171 | selected_offset2 = file_mas[i]*304 + buf+32 + 7; |
48 | selected_offset2 = file_mas[i]*304 + buf+32 + 7; |
172 | if (ESBYTE[selected_offset2]) { |
49 | if (ESBYTE[selected_offset2]) { |
173 | strcpy(#copy_t, #path); |
50 | strcpy(copy_buf_offset, #path); |
174 | strcat(#copy_t, file_mas[i]*304+buf+72); |
51 | strcat(copy_buf_offset, file_mas[i]*304+buf+72); |
175 | path_len = strlen(#copy_t); |
52 | copy_buf_offset += strlen(copy_buf_offset) + 1; |
176 | strlcpy(buff_data+10+buffer_len+1, #copy_t, path_len); |
53 | } |
177 | buffer_len = buffer_len + path_len; |
- | |
178 | ind++; |
- | |
179 | } |
- | |
180 | } |
- | |
181 | clipboard.SetSlotData(size_buf+10, buff_data); |
54 | } |
182 | } |
- | |
183 | else |
- | |
184 | { |
- | |
185 | buff_data = malloc(4106); |
- | |
186 | ESDWORD[buff_data] = 4106; |
- | |
187 | ESDWORD[buff_data+4] = 3; |
- | |
188 | ESINT[buff_data+8] = 1; |
- | |
189 | strlcpy(buff_data+10, #file_path, 4096);; |
- | |
190 | clipboard.SetSlotData(4106, buff_data); |
- | |
191 | } |
- | |
192 | cut_active = cut; |
55 | WriteFile(size_buf, buff_data, "/rd/1/log.log"); |
- | 56 | if (selected_count==1) setElementSelectedFlag(files.cur_y, false); |
|
- | 57 | clipboard.SetSlotData(size_buf, buff_data); |
|
- | 58 | cut_active = cut; |
|
193 | free(buff_data); |
59 | free(buff_data); |
194 | } |
60 | } |
195 | 61 | ||
196 | - | ||
197 | void Paste() { |
62 | void Paste() { |
198 | copy_stak = malloc(64000); |
63 | copy_stak = malloc(64000); |
199 | CreateThread(#PasteThread,copy_stak+64000-4); |
64 | CreateThread(#PasteThread,copy_stak+64000-4); |
200 | } |
65 | } |
201 | 66 | ||
202 | void PasteThread() |
67 | void PasteThread() |
203 | { |
68 | { |
204 | char copy_rezult; |
69 | char copy_rezult; |
205 | int j; |
70 | int j; |
206 | int cnt = 0; |
71 | int paste_elements_count = 0; |
207 | dword buf; |
72 | dword buf; |
208 | dword path_len = 0; |
73 | dword path_offset; |
209 | dword buffer_len = 0; |
74 | file_count_copy = 0; |
210 | file_count_copy = 0; |
- | |
211 | copy_bar.value = 0; |
75 | copy_bar.value = 0; |
212 | debugln("Step 1"); |
76 | |
213 | buf = clipboard.GetSlotData(clipboard.GetSlotCount()-1); |
- | |
- | 77 | buf = clipboard.GetSlotData(clipboard.GetSlotCount()-1); |
|
214 | if (DSDWORD[buf+4] != 3) return; |
78 | if (DSDWORD[buf+4] != 3) return; |
215 | cnt = ESINT[buf+8]; |
79 | paste_elements_count = ESINT[buf+8]; |
216 | for (j = 0; j < cnt; j++) { |
80 | path_offset = buf + 10; |
217 | if (j==0) strlcpy(#copy_from, buf+10+buffer_len); |
81 | //calculate copy files count for progress bar |
218 | else strlcpy(#copy_from, buf+10+buffer_len+1); |
- | |
219 | buffer_len = buffer_len + path_len; |
82 | for (j = 0; j < paste_elements_count; j++) { |
220 | GetFileInfo(#copy_from, #file_info_count); |
83 | GetFileInfo(path_offset, #file_info_count); |
221 | if ( file_info_count.isfolder ) DirFileCount(#copy_from); |
84 | if ( file_info_count.isfolder ) DirFileCount(path_offset); |
222 | else file_count_copy++; |
85 | else file_count_copy++; |
223 | } |
86 | path_offset += strlen(path_offset) + 1; |
- | 87 | } |
|
224 | copy_bar.max = file_count_copy; |
88 | copy_bar.max = file_count_copy; |
225 | 89 | ||
226 | if (cut_active) operation_flag = MOVE_FLAG; |
90 | if (cut_active) operation_flag = MOVE_FLAG; |
227 | else operation_flag = COPY_FLAG; |
91 | else operation_flag = COPY_FLAG; |
228 | 92 | ||
229 | debugln("Step 2"); |
- | |
230 | path_len = 0; |
93 | path_offset = buf + 10; |
231 | buffer_len = 0; |
- | |
232 | DisplayOperationForm(); |
94 | DisplayOperationForm(); |
233 | for (j = 0; j < cnt; j++) { |
95 | for (j = 0; j < paste_elements_count; j++) { |
234 | if (j==0) strlcpy(#copy_from, buf+10+buffer_len); |
- | |
235 | else strlcpy(#copy_from, buf+10+buffer_len+1); |
96 | strcpy(#copy_from, path_offset); |
236 | debugln(#copy_from); |
- | |
237 | path_len = strlen(#copy_from); |
- | |
238 | debugi(path_len); |
- | |
239 | debug("Step "); |
- | |
240 | debugi(j); |
- | |
241 | debugln(" "); |
- | |
242 | buffer_len = buffer_len + path_len; |
- | |
243 | if (!copy_from) DialogExit(); |
97 | if (!copy_from) DialogExit(); |
244 | strcpy(#copy_to, #path); |
98 | strcpy(#copy_to, #path); |
245 | strcat(#copy_to, #copy_from+strrchr(#copy_from,'/')); |
99 | strcat(#copy_to, #copy_from+strrchr(#copy_from,'/')); |
246 | if (!strcmp(#copy_from,#copy_to)) |
100 | if (!strcmp(#copy_from,#copy_to)) |
247 | { |
101 | { |
248 | strcpy(#copy_to, #path); |
102 | strcpy(#copy_to, #path); |
249 | strcat(#copy_to, "new_"); |
103 | strcat(#copy_to, "NEW_"); |
250 | strcat(#copy_to, #copy_from+strrchr(#copy_from,'/')); |
104 | strcat(#copy_to, #copy_from+strrchr(#copy_from,'/')); |
251 | } |
105 | } |
252 | if (strstr(#copy_to, #copy_from)) |
106 | if (strstr(#copy_to, #copy_from)) |
253 | { |
107 | { |
254 | notify("Copy directory into itself is a bad idea..."); |
108 | notify("Copy directory into itself is a bad idea..."); |
255 | DialogExit(); |
109 | DialogExit(); |
256 | } |
110 | } |
257 | 111 | ||
258 | if (copy_rezult = copyf(#copy_from,#copy_to)) |
112 | if (copy_rezult = copyf(#copy_from,#copy_to)) |
259 | { |
113 | { |
260 | Write_Error(copy_rezult); |
114 | Write_Error(copy_rezult); |
261 | } |
115 | } |
262 | else if (cut_active) |
116 | else if (cut_active) |
263 | { |
117 | { |
264 | strcpy(#file_path, #copy_from); |
118 | strcpy(#file_path, #copy_from); |
265 | Del_File2(#copy_from, 0); |
119 | Del_File2(#copy_from, 0); |
266 | 120 | ||
267 | } |
121 | } |
268 | } |
122 | path_offset += strlen(path_offset) + 1; |
- | 123 | } |
|
269 | debugln("Step 3000"); |
124 | cut_active=false; |
270 | if (cut_active) |
- | |
271 | { |
- | |
272 | cut_active=false; |
- | |
273 | } |
125 | if (info_after_copy) notify(INFO_AFTER_COPY); |
274 | if (info_after_copy) notify(INFO_AFTER_COPY); |
- | |
275 | DialogExit(); |
126 | DialogExit(); |
276 | }*/>>>> |
127 | }>>=0)> |
277 | - | ||
278 | 128 |