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