Rev 7422 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 7422 | Rev 7491 | ||
---|---|---|---|
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 | void setElementSelectedFlag(dword n, int state) { |
7 | void setElementSelectedFlag(dword n, int state) { |
8 | dword selected_offset = file_mas[n]*304 + buf+32 + 7; |
8 | dword selected_offset = file_mas[n]*304 + buf+32 + 7; |
9 | ESBYTE[selected_offset] = state; |
9 | ESBYTE[selected_offset] = state; |
10 | if (n==0) && (strncmp(file_mas[n]*304+buf+72,"..",2)==0) { |
10 | if (n==0) && (strncmp(file_mas[n]*304+buf+72,"..",2)==0) { |
11 | ESBYTE[selected_offset] = false; //do not selec ".." directory |
11 | ESBYTE[selected_offset] = false; //do not selec ".." directory |
12 | return; |
12 | return; |
13 | } |
13 | } |
14 | if (state==true) selected_count++; |
14 | if (state==true) selected_count++; |
15 | if (state==false) selected_count--; |
15 | if (state==false) selected_count--; |
16 | } |
16 | } |
17 | 17 | ||
18 | int getElementSelectedFlag(dword n) { |
18 | int getElementSelectedFlag(dword n) { |
19 | dword selected_offset = file_mas[n]*304 + buf+32 + 7; |
19 | dword selected_offset = file_mas[n]*304 + buf+32 + 7; |
20 | return ESBYTE[selected_offset]; |
20 | return ESBYTE[selected_offset]; |
21 | } |
21 | } |
22 | 22 | ||
23 | void Copy(dword pcth, char cut) |
23 | void Copy(dword pcth, char cut) |
24 | { |
24 | { |
25 | byte copy_t[4096]; |
25 | byte copy_t[4096]; |
26 | dword buff_data; |
26 | dword buff_data; |
27 | dword path_len = 0; |
27 | dword path_len = 0; |
28 | dword size_buf = 0; |
28 | dword size_buf = 0; |
29 | dword copy_buf_offset = 0; |
29 | dword copy_buf_offset = 0; |
30 | dword i; |
30 | dword i; |
31 | 31 | ||
32 | if (files.count<=0) return; //no files |
32 | if (files.count<=0) return; //no files |
33 | 33 | ||
34 | //if no element selected by "Insert" key, then we copy current element |
34 | //if no element selected by "Insert" key, then we copy current element |
35 | if (!selected_count) |
35 | if (!selected_count) |
36 | setElementSelectedFlag(files.cur_y, true); |
36 | setElementSelectedFlag(files.cur_y, true); |
37 | 37 | ||
38 | if (!selected_count) return; |
38 | if (!selected_count) return; |
39 | 39 | ||
40 | size_buf = 4; |
40 | size_buf = 4; |
41 | for (i=0; i |
41 | for (i=0; i |
42 | { |
42 | { |
43 | if (getElementSelectedFlag(i) == true) { |
43 | if (getElementSelectedFlag(i) == true) { |
44 | sprintf(#copy_t,"%s/%s",#path,file_mas[i]*304+buf+72); |
44 | sprintf(#copy_t,"%s/%s",#path,file_mas[i]*304+buf+72); |
45 | path_len = strlen(#copy_t); |
45 | path_len = strlen(#copy_t); |
46 | size_buf += path_len + 1; |
46 | size_buf += path_len + 1; |
47 | } |
47 | } |
48 | } |
48 | } |
49 | size_buf += 20; |
49 | size_buf += 20; |
50 | buff_data = malloc(size_buf); |
50 | buff_data = malloc(size_buf); |
51 | ESDWORD[buff_data] = size_buf; |
51 | ESDWORD[buff_data] = size_buf; |
52 | ESDWORD[buff_data+4] = SLOT_DATA_TYPE_RAW; |
52 | ESDWORD[buff_data+4] = SLOT_DATA_TYPE_RAW; |
53 | ESINT[buff_data+8] = selected_count; |
53 | ESINT[buff_data+8] = selected_count; |
54 | copy_buf_offset = buff_data + 10; |
54 | copy_buf_offset = buff_data + 10; |
55 | for (i=0; i |
55 | for (i=0; i |
56 | { |
56 | { |
57 | if (getElementSelectedFlag(i) == true) { |
57 | if (getElementSelectedFlag(i) == true) { |
58 | sprintf(copy_buf_offset,"%s/%s",#path,file_mas[i]*304+buf+72); |
58 | sprintf(copy_buf_offset,"%s/%s",#path,file_mas[i]*304+buf+72); |
59 | copy_buf_offset += strlen(copy_buf_offset) + 1; |
59 | copy_buf_offset += strlen(copy_buf_offset) + 1; |
60 | } |
60 | } |
61 | } |
61 | } |
62 | if (selected_count==1) setElementSelectedFlag(files.cur_y, false); |
62 | if (selected_count==1) setElementSelectedFlag(files.cur_y, false); |
63 | Clipboard__SetSlotData(size_buf, buff_data); |
63 | Clipboard__SetSlotData(size_buf, buff_data); |
64 | cut_active = cut; |
64 | cut_active = cut; |
65 | free(buff_data); |
65 | free(buff_data); |
66 | } |
66 | } |
67 | 67 | ||
68 | void Paste() { |
68 | void Paste() { |
69 | copy_stak = free(copy_stak); |
69 | copy_stak = free(copy_stak); |
70 | copy_stak = malloc(64000); |
70 | copy_stak = malloc(64000); |
71 | CreateThread(#PasteThread,copy_stak+64000-4); |
71 | CreateThread(#PasteThread,copy_stak+64000-4); |
72 | } |
72 | } |
73 | 73 | ||
74 | void PasteThread() |
74 | void PasteThread() |
75 | { |
75 | { |
76 | char copy_rezult; |
76 | char copy_rezult; |
77 | int j; |
77 | int j; |
78 | int paste_elements_count = 0; |
78 | int paste_elements_count = 0; |
79 | dword buf; |
79 | dword buf; |
80 | dword path_offset; |
80 | dword path_offset; |
81 | dword file_count_paste = 0; |
81 | dword file_count_paste = 0; |
82 | _dir_size paste_dir_size; |
82 | _dir_size paste_dir_size; |
83 | BDVK file_info_count; |
83 | BDVK file_info_count; |
84 | 84 | ||
85 | copy_bar.value = 0; |
85 | copy_bar.value = 0; |
86 | 86 | ||
87 | buf = Clipboard__GetSlotData(Clipboard__GetSlotCount()-1); |
87 | buf = Clipboard__GetSlotData(Clipboard__GetSlotCount()-1); |
88 | if (DSDWORD[buf+4] != 3) return; |
88 | if (DSDWORD[buf+4] != 3) return; |
89 | paste_elements_count = ESINT[buf+8]; |
89 | paste_elements_count = ESINT[buf+8]; |
90 | path_offset = buf + 10; |
90 | path_offset = buf + 10; |
91 | //calculate copy files count for progress bar |
91 | //calculate copy files count for progress bar |
92 | for (j = 0; j < paste_elements_count; j++) { |
92 | for (j = 0; j < paste_elements_count; j++) { |
93 | GetFileInfo(path_offset, #file_info_count); |
93 | GetFileInfo(path_offset, #file_info_count); |
94 | if ( file_info_count.isfolder ) { |
94 | if ( file_info_count.isfolder ) { |
95 | paste_dir_size.get(path_offset); |
95 | paste_dir_size.get(path_offset); |
96 | file_count_paste += paste_dir_size.files; |
96 | file_count_paste += paste_dir_size.files; |
97 | } |
97 | } |
98 | else file_count_paste++; |
98 | else file_count_paste++; |
99 | path_offset += strlen(path_offset) + 1; |
99 | path_offset += strlen(path_offset) + 1; |
100 | } |
100 | } |
101 | copy_bar.max = file_count_paste; |
101 | copy_bar.max = file_count_paste; |
102 | 102 | ||
103 | if (cut_active) operation_flag = MOVE_FLAG; |
103 | if (cut_active) operation_flag = MOVE_FLAG; |
104 | else operation_flag = COPY_FLAG; |
104 | else operation_flag = COPY_FLAG; |
105 | 105 | ||
106 | path_offset = buf + 10; |
106 | path_offset = buf + 10; |
107 | DisplayOperationForm(); |
107 | DisplayOperationForm(); |
108 | for (j = 0; j < paste_elements_count; j++) { |
108 | for (j = 0; j < paste_elements_count; j++) { |
109 | strcpy(#copy_from, path_offset); |
109 | strcpy(#copy_from, path_offset); |
110 | if (!copy_from) DialogExit(); |
110 | if (!copy_from) DialogExit(); |
111 | sprintf(#copy_to, "%s/%s", #path, #copy_from+strrchr(#copy_from,'/')); |
111 | sprintf(#copy_to, "%s/%s", #path, #copy_from+strrchr(#copy_from,'/')); |
112 | if (!strcmp(#copy_from,#copy_to)) |
112 | if (!strcmp(#copy_from,#copy_to)) |
113 | { |
113 | { |
114 | sprintf(#copy_to, "%s/NEW_%s", #path, #copy_from+strrchr(#copy_from,'/')); |
114 | sprintf(#copy_to, "%s/NEW_%s", #path, #copy_from+strrchr(#copy_from,'/')); |
115 | } |
115 | } |
116 | if (strstr(#copy_to, #copy_from)) |
116 | if (strstr(#copy_to, #copy_from)) |
117 | { |
117 | { |
118 | notify("Copy directory into itself is a bad idea..."); |
118 | notify("Copy directory into itself is a bad idea..."); |
119 | DialogExit(); |
119 | DialogExit(); |
120 | } |
120 | } |
121 | 121 | ||
122 | if (copy_rezult = copyf(#copy_from,#copy_to)) |
122 | if (copy_rezult = copyf(#copy_from,#copy_to)) |
123 | { |
123 | { |
124 | Write_Error(copy_rezult); |
124 | Write_Error(copy_rezult); |
125 | } |
125 | if (copy_rezult==8) DialogExit(); //not enough space |
- | 126 | } |
|
126 | else if (cut_active) |
127 | else if (cut_active) |
127 | { |
128 | { |
128 | strcpy(#file_path, #copy_from); |
129 | strcpy(#file_path, #copy_from); |
129 | Del_File2(#copy_from, 0); |
130 | Del_File2(#copy_from, 0); |
130 | 131 | ||
131 | } |
132 | } |
132 | path_offset += strlen(path_offset) + 1; |
133 | path_offset += strlen(path_offset) + 1; |
133 | } |
134 | } |
134 | cut_active=false; |
135 | cut_active=false; |
135 | if (info_after_copy.checked) notify(INFO_AFTER_COPY); |
136 | if (info_after_copy.checked) notify(INFO_AFTER_COPY); |
136 | DialogExit(); |
137 | DialogExit(); |
137 | }>>=0)> |
138 | }>>=0)> |