Rev 8871 | Rev 8934 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4042 | leency | 1 | |
7878 | leency | 2 | // // |
3 | // MASS ACTIONS // |
||
4 | // // |
||
5 | //===================================================// |
||
6 | |||
4896 | punk_joker | 7 | |
6646 | leency | 8 | dword selected_offset = items.get(n)*304 + buf+32 + 7; |
7972 | leency | 9 | ESBYTE[selected_offset] = state; |
6602 | leency | 10 | if (n==0) && (strncmp(items.get(n)*304+buf+72,"..",2)==0) { |
7972 | leency | 11 | ESBYTE[selected_offset] = false; //do not selec ".." directory |
7278 | leency | 12 | return; |
13 | } |
||
14 | if (state==true) selected_count++; |
||
6602 | leency | 15 | if (state==false) selected_count--; |
16 | if (selected_count<0) selected_count=0; |
||
7804 | leency | 17 | } |
4042 | leency | 18 | |
19 | |||
6646 | leency | 20 | dword selected_offset = items.get(n)*304 + buf+32 + 7; |
7972 | leency | 21 | return ESBYTE[selected_offset]; |
6646 | leency | 22 | } |
23 | |||
24 | |||
7878 | leency | 25 | { |
4042 | leency | 26 | BDVK file_info_count; |
7878 | leency | 27 | DIR_SIZE paste_dir_size; |
28 | |||
29 | |||
30 | if ( file_info_count.isfolder ) { |
||
31 | return paste_dir_size.get(_in_path); |
||
32 | } else { |
||
33 | return 1; |
||
34 | } |
||
35 | } |
||
36 | |||
37 | |||
38 | // // |
||
39 | // COPY AND PASTE // |
||
40 | // // |
||
41 | //===================================================// |
||
42 | byte copy_to[4096]; |
||
43 | byte copy_from[4096]; |
||
44 | bool cut_active = false; |
||
45 | |||
46 | |||
8861 | leency | 47 | |
7878 | leency | 48 | |
8861 | leency | 49 | { |
7878 | leency | 50 | byte copy_t[4096]; |
6602 | leency | 51 | dword buff_data; |
52 | dword path_len = 0; |
||
6597 | punk_joker | 53 | dword size_buf = 0; |
6602 | leency | 54 | dword copy_buf_offset = 0; |
55 | dword i; |
||
7422 | leency | 56 | |
6597 | punk_joker | 57 | |
6602 | leency | 58 | |
7278 | leency | 59 | |
8871 | leency | 60 | |
7878 | leency | 61 | |
7278 | leency | 62 | if (!selected_count) { |
7878 | leency | 63 | setElementSelectedFlag(files.cur_y, true); |
7278 | leency | 64 | } |
7878 | leency | 65 | |
7278 | leency | 66 | |
67 | |||
68 | |||
6602 | leency | 69 | for (i=0; i |
70 | { |
||
71 | if (getElementSelectedFlag(i) == true) { |
||
6646 | leency | 72 | sprintf(#copy_t,"%s/%s",#path,items.get(i)*304+buf+72); |
7972 | leency | 73 | path_len = strlen(#copy_t); |
6602 | leency | 74 | size_buf += path_len + 1; |
75 | } |
||
6597 | punk_joker | 76 | } |
77 | size_buf += 20; |
||
6602 | leency | 78 | buff_data = malloc(size_buf); |
79 | ESDWORD[buff_data] = size_buf; |
||
80 | ESDWORD[buff_data+4] = SLOT_DATA_TYPE_RAW; |
||
6791 | leency | 81 | ESINT[buff_data+8] = selected_count; |
6602 | leency | 82 | copy_buf_offset = buff_data + 10; |
83 | for (i=0; i |
||
84 | { |
||
6597 | punk_joker | 85 | if (getElementSelectedFlag(i) == true) { |
6646 | leency | 86 | sprintf(copy_buf_offset,"%s/%s",#path,items.get(i)*304+buf+72); |
7972 | leency | 87 | copy_buf_offset += strlen(copy_buf_offset) + 1; |
6602 | leency | 88 | |
7998 | leency | 89 | |
90 | if (i>=files.first) && (i |
||
91 | PutShadow(files.x+4,i-files.first*files.item_h+files.y,icons16_default,files.item_h,1,-3); |
||
8933 | leency | 92 | } |
7998 | leency | 93 | } |
6602 | leency | 94 | } |
6597 | punk_joker | 95 | if (cut_active) { |
7998 | leency | 96 | pause(20); |
97 | List_ReDraw(); |
||
7999 | leency | 98 | } |
7998 | leency | 99 | if (selected_count==1) setElementSelectedFlag(files.cur_y, false); |
6602 | leency | 100 | Clipboard__SetSlotData(size_buf, buff_data); |
7038 | leency | 101 | free(buff_data); |
6597 | punk_joker | 102 | } |
103 | |||
104 | |||
6600 | punk_joker | 105 | |
6597 | punk_joker | 106 | { |
107 | char copy_rezult; |
||
108 | int j, i, slash_count=0; |
||
8826 | leency | 109 | int paste_elements_count = 0; |
6602 | leency | 110 | dword buf; |
6597 | punk_joker | 111 | dword path_offset; |
6602 | leency | 112 | |
113 | |||
7038 | leency | 114 | if (DSDWORD[buf+4] != 3) return; |
5514 | leency | 115 | paste_elements_count = ESINT[buf+8]; |
6602 | leency | 116 | path_offset = buf + 10; |
117 | |||
7878 | leency | 118 | |
119 | DisplayOperationForm(MOVE_FLAG); |
||
120 | } else { |
||
121 | DisplayOperationForm(COPY_FLAG); |
||
122 | } |
||
123 | |||
124 | |||
8826 | leency | 125 | for (j = 0; j < paste_elements_count; j++) { |
126 | sprintf(#copy_to, "%s/%s", #path, path_offset+strrchr(path_offset,'/')); |
||
127 | slash_count = 0; |
||
128 | for (i=0; i<=10; i++) { |
||
129 | if (copy_to[i]=='/') slash_count++; |
||
130 | if (slash_count==3) break; |
||
131 | } |
||
132 | if (strncmp(#copy_to, path_offset, i)!=0) goto _DIFFERENT_DRIVES; |
||
133 | RenameMove(#copy_to+i, path_offset); |
||
134 | if (EAX!=0) goto _DIFFERENT_DRIVES; |
||
135 | path_offset += strlen(path_offset) + 1; |
||
136 | } |
||
137 | DialogExit(); |
||
138 | } |
||
139 | |||
140 | |||
141 | path_offset = buf + 10; |
||
142 | for (j = 0; j < paste_elements_count; j++) { |
||
6602 | leency | 143 | copy_bar.max += GetFilesCount(path_offset); |
7878 | leency | 144 | path_offset += strlen(path_offset) + 1; |
6602 | leency | 145 | } |
5957 | punk_joker | 146 | |
5804 | punk_joker | 147 | |
6602 | leency | 148 | for (j = 0; j < paste_elements_count; j++) { |
149 | strcpy(#copy_from, path_offset); |
||
150 | if (!copy_from) DialogExit(); |
||
5804 | punk_joker | 151 | sprintf(#copy_to, "%s/%s", #path, #copy_from+strrchr(#copy_from,'/')); |
6635 | leency | 152 | if (streq(#copy_from,#copy_to)) |
8015 | leency | 153 | { |
5957 | punk_joker | 154 | if (cut_active) continue; |
8015 | leency | 155 | sprintf(#copy_to, "%s/NEW_%s", #path, #copy_from+strrchr(#copy_from,'/')); |
6635 | leency | 156 | } |
5957 | punk_joker | 157 | if (strstr(#copy_to, #copy_from)) |
4698 | punk_joker | 158 | { |
159 | notify("'Not possible to copy directory into itself.\nProcess terminated.' -E"); |
||
8861 | leency | 160 | DialogExit(); |
5804 | punk_joker | 161 | } |
4698 | punk_joker | 162 | |
5957 | punk_joker | 163 | |
164 | { |
||
165 | Write_Error(copy_rezult); |
||
166 | if (copy_rezult==8) DialogExit(); //not enough space |
||
7491 | leency | 167 | } |
5957 | punk_joker | 168 | else if (cut_active) |
169 | { |
||
170 | strcpy(#file_path, #copy_from); |
||
6597 | punk_joker | 171 | RecursiveDelete(#copy_from, false); |
8861 | leency | 172 | |
5957 | punk_joker | 173 | |
174 | path_offset += strlen(path_offset) + 1; |
||
6602 | leency | 175 | } |
5931 | punk_joker | 176 | DialogExit(); |
177 | } |
||
6602 | leency | 178 | |
6600 | punk_joker | 179 | |
7878 | leency | 180 | |
181 | // // |
||
182 | // DELETE // |
||
183 | // // |
||
184 | //===================================================// |
||
185 | |||
186 | |||
187 | int RecursiveDelete(dword way, bool show_progress) |
||
8861 | leency | 188 | { |
7878 | leency | 189 | dword dirbuf, fcount, i, filename; |
190 | int error; |
||
191 | char del_from[4096]; |
||
192 | if (dir_exists(way)) |
||
193 | { |
||
194 | if (error = GetDir(#dirbuf, #fcount, way, DIRS_ONLYREAL)) del_error = error; |
||
195 | for (i=0; i |
||
196 | { |
||
197 | //if (CheckEvent()==evReDraw) draw_window(); |
||
198 | filename = i*304+dirbuf+72; |
||
199 | sprintf(#del_from,"%s/%s",way,filename); |
||
200 | if ( TestBit(ESDWORD[filename-40], 4) ) |
||
201 | { |
||
202 | RecursiveDelete(#del_from, true); |
||
8861 | leency | 203 | } |
7878 | leency | 204 | else |
205 | { |
||
206 | if (show_progress) Operation_Draw_Progress(filename); |
||
8861 | leency | 207 | if (error = DeleteFile(#del_from)) del_error = error; |
7878 | leency | 208 | } |
209 | } |
||
210 | } |
||
211 | if (error = DeleteFile(way)) del_error = error; |
||
212 | } |
||
213 | |||
214 | |||
8861 | leency | 215 | { |
216 | int j; |
||
217 | int elements_count = 0; |
||
218 | dword buf; |
||
219 | dword path_offset; |
||
220 | |||
7878 | leency | 221 | |
222 | |||
223 | |||
8861 | leency | 224 | Clipboard__DeleteLastSlot(); |
225 | if (DSDWORD[buf+4] != 3) return; |
||
226 | elements_count = ESINT[buf+8]; |
||
227 | |||
7878 | leency | 228 | |
8861 | leency | 229 | for (j = 0; j < elements_count; j++) { |
230 | copy_bar.max += GetFilesCount(path_offset); |
||
231 | path_offset += strlen(path_offset) + 1; |
||
232 | } |
||
7878 | leency | 233 | |
8861 | leency | 234 | |
235 | for (j = 0; j < elements_count; j++) { |
||
236 | RecursiveDelete(path_offset, true); |
||
237 | path_offset += strlen(path_offset) + 1; |
||
238 | } |
||
239 | if (del_error) Write_Error(del_error); |
||
7878 | leency | 240 | DialogExit(); |
241 | }>>>>=10;>> |
||
8861 | leency | 242 | >=0)>0)> |