Rev 5620 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5620 | Rev 5674 | ||
---|---|---|---|
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, COPY_PASTE_END}; |
5 | enum {NOCUT, CUT, COPY_PASTE_END}; |
6 | 6 | ||
7 | Clipboard clipboard; |
7 | Clipboard clipboard; |
8 | 8 | ||
9 | void Copy(dword pcth, char cut) |
9 | void Copy(dword pcth, char cut) |
10 | { |
10 | { |
11 | dword selected_offset2; |
11 | dword selected_offset2; |
12 | byte copy_t[4096]; |
12 | byte copy_t[4096]; |
13 | dword buff_data; |
13 | dword buff_data; |
14 | int ind = 0; |
14 | int ind = 0; |
15 | 15 | ||
16 | if (selected_count) |
16 | if (selected_count) |
17 | { |
17 | { |
18 | buff_data = malloc(selected_count*4096+10); |
18 | buff_data = malloc(selected_count*4096+10); |
19 | ESDWORD[buff_data] = selected_count*4096+10; |
19 | ESDWORD[buff_data] = selected_count*4096+10; |
20 | ESDWORD[buff_data+4] = 3; |
20 | ESDWORD[buff_data+4] = 3; |
21 | ESINT[buff_data+8] = selected_count; |
21 | ESINT[buff_data+8] = selected_count; |
22 | for (i=0; i |
22 | for (i=0; i |
23 | { |
23 | { |
24 | selected_offset2 = file_mas[i]*304 + buf+32 + 7; |
24 | selected_offset2 = file_mas[i]*304 + buf+32 + 7; |
25 | if (ESBYTE[selected_offset2]) { |
25 | if (ESBYTE[selected_offset2]) { |
26 | strcpy(#copy_t, #path); |
26 | strcpy(#copy_t, #path); |
27 | strcat(#copy_t, file_mas[i]*304+buf+72); |
27 | strcat(#copy_t, file_mas[i]*304+buf+72); |
28 | strlcpy(ind*4096+buff_data+10, #copy_t, 4096);; |
28 | strlcpy(ind*4096+buff_data+10, #copy_t, 4096);; |
29 | ind++; |
29 | ind++; |
30 | } |
30 | } |
31 | } |
31 | } |
32 | clipboard.SetSlotData(selected_count*4096+10, buff_data); |
32 | clipboard.SetSlotData(selected_count*4096+10, buff_data); |
33 | } |
33 | } |
34 | else |
34 | else |
35 | { |
35 | { |
36 | buff_data = malloc(4106); |
36 | buff_data = malloc(4106); |
37 | ESDWORD[buff_data] = 4106; |
37 | ESDWORD[buff_data] = 4106; |
38 | ESDWORD[buff_data+4] = 3; |
38 | ESDWORD[buff_data+4] = 3; |
39 | ESINT[buff_data+8] = 1; |
39 | ESINT[buff_data+8] = 1; |
40 | strlcpy(buff_data+10, #file_path, 4096);; |
40 | strlcpy(buff_data+10, #file_path, 4096);; |
41 | clipboard.SetSlotData(4106, buff_data); |
41 | clipboard.SetSlotData(4106, buff_data); |
42 | } |
42 | } |
43 | cut_active = cut; |
43 | cut_active = cut; |
44 | free(buff_data); |
44 | free(buff_data); |
45 | } |
45 | } |
46 | 46 | ||
47 | 47 | ||
48 | void Paste() { |
48 | void Paste() { |
49 | copy_stak = malloc(20000); |
49 | copy_stak = malloc(20000); |
50 | CreateThread(#PasteThread,copy_stak+20000-4); |
50 | CreateThread(#PasteThread,copy_stak+20000-4); |
51 | } |
51 | } |
52 | 52 | ||
53 | 53 | ||
54 | void PasteThread() |
54 | void PasteThread() |
55 | { |
55 | { |
56 | char copy_rezult; |
56 | char copy_rezult; |
57 | int j; |
57 | int j; |
58 | int cnt = 0; |
58 | int cnt = 0; |
59 | dword buf; |
59 | dword buf; |
60 | 60 | ||
61 | buf = clipboard.GetSlotData(clipboard.GetSlotCount()-1); |
61 | buf = clipboard.GetSlotData(clipboard.GetSlotCount()-1); |
62 | if (DSDWORD[buf+4] != 3) return; |
62 | if (DSDWORD[buf+4] != 3) return; |
63 | cnt = ESINT[buf+8]; |
63 | cnt = ESINT[buf+8]; |
64 | for (j = 0; j < cnt; j++) { |
64 | for (j = 0; j < cnt; j++) { |
65 | strlcpy(#copy_from, j*4096+buf+10, 4096); |
65 | strlcpy(#copy_from, j*4096+buf+10, 4096); |
66 | if (!copy_from) CopyExit(); |
66 | if (!copy_from) CopyExit(); |
67 | strcpy(#copy_to, #path); |
67 | strcpy(#copy_to, #path); |
68 | strcat(#copy_to, #copy_from+strrchr(#copy_from,'/')); |
68 | strcat(#copy_to, #copy_from+strrchr(#copy_from,'/')); |
69 | if (!strcmp(#copy_from,#copy_to)) |
69 | if (!strcmp(#copy_from,#copy_to)) |
70 | { |
70 | { |
71 | strcpy(#copy_to, #path); |
71 | strcpy(#copy_to, #path); |
72 | strcat(#copy_to, "new_"); |
72 | strcat(#copy_to, "new_"); |
73 | strcat(#copy_to, #copy_from+strrchr(#copy_from,'/')); |
73 | strcat(#copy_to, #copy_from+strrchr(#copy_from,'/')); |
74 | } |
74 | } |
75 | if (strstr(#copy_to, #copy_from)) |
75 | if (strstr(#copy_to, #copy_from)) |
76 | { |
76 | { |
77 | notify("Copy directory into itself is a bad idea..."); |
77 | notify("Copy directory into itself is a bad idea..."); |
78 | CopyExit(); |
78 | CopyExit(); |
79 | } |
79 | } |
80 | 80 | ||
81 | DisplayCopyfForm(); |
81 | DisplayCopyfForm(); |
82 | 82 | ||
83 | if (copy_rezult = copyf(#copy_from,#copy_to)) |
83 | if (copy_rezult = copyf(#copy_from,#copy_to)) |
84 | { |
84 | { |
85 | Write_Error(copy_rezult); |
85 | Write_Error(copy_rezult); |
86 | } |
86 | } |
87 | else if (cut_active) |
87 | else if (cut_active) |
88 | { |
88 | { |
89 | strcpy(#file_path, #copy_from); |
89 | strcpy(#file_path, #copy_from); |
90 | Del_File(true); |
90 | Del_File(true); |
91 | 91 | ||
92 | } |
92 | } |
93 | } |
93 | } |
94 | if (cut_active) |
94 | if (cut_active) |
95 | { |
95 | { |
96 | cut_active=false; |
96 | cut_active=false; |
97 | } |
97 | } |
98 | if (info_after_copy) notify(INFO_AFTER_COPY); |
98 | if (info_after_copy) notify(INFO_AFTER_COPY); |
99 | CopyExit(); |
99 | CopyExit(); |
100 | } |
100 | } |
101 | 101 | ||
102 | #define WIN_COPY_W 345 |
102 | #define WIN_COPY_W 345 |
103 | #define WIN_COPY_H 80 |
103 | #define WIN_COPY_H 80 |
104 | proc_info Copy_Form; |
104 | proc_info Copy_Form; |
105 | 105 | ||
106 | void DisplayCopyfForm() |
106 | void DisplayCopyfForm() |
107 | { |
107 | { |
108 | switch(CheckEvent()) |
108 | switch(CheckEvent()) |
109 | { |
109 | { |
110 | case evButton: |
110 | case evButton: |
111 | notify(T_CANCEL_PASTE); |
111 | notify(T_CANCEL_PASTE); |
112 | CopyExit(); |
112 | CopyExit(); |
113 | break; |
113 | break; |
114 | 114 | ||
115 | case evReDraw: |
115 | case evReDraw: |
116 | DefineAndDrawWindow(Form.left+Form.width-200,Form.top+90,WIN_COPY_W,GetSkinHeight()+WIN_COPY_H,0x34,sc.work,T_PASTE_WINDOW_TITLE); |
116 | DefineAndDrawWindow(Form.left+Form.width-200,Form.top+90,WIN_COPY_W,GetSkinHeight()+WIN_COPY_H,0x34,system.color.work,T_PASTE_WINDOW_TITLE); |
117 | GetProcessInfo(#Copy_Form, SelfInfo); |
117 | GetProcessInfo(#Copy_Form, SelfInfo); |
118 | WriteText(45, 11, 0x80, sc.work_text, T_PASTE_WINDOW_TEXT); |
118 | WriteText(45, 11, 0x80, system.color.work_text, T_PASTE_WINDOW_TEXT); |
119 | DrawFlatButton(Copy_Form.cwidth - 90, Copy_Form.cheight - 32, 80, 22, 10, sc.work_button, T_PASTE_WINDOW_BUTTON); |
119 | DrawFlatButton(Copy_Form.cwidth - 90, Copy_Form.cheight - 32, 80, 22, 10, system.color.work_button, T_PASTE_WINDOW_BUTTON); |
120 | DrawBar(8, 10, 32, 32, 0xFFFfff); |
120 | DrawBar(8, 10, 32, 32, 0xFFFfff); |
121 | break; |
121 | break; |
122 | } |
122 | } |
123 | } |
123 | } |
124 | 124 | ||
125 | void CopyExit() { |
125 | void CopyExit() { |
126 | action_buf = COPY_PASTE_END; |
126 | action_buf = COPY_PASTE_END; |
127 | ActivateWindow(GetProcessSlot(Form.ID)); |
127 | ActivateWindow(GetProcessSlot(Form.ID)); |
128 | ExitProcess(); |
128 | ExitProcess(); |
129 | } |
129 | } |
130 | 130 | ||
131 | 131 | ||
132 | void copyf_Draw_Progress(dword copying_filename) { |
132 | void copyf_Draw_Progress(dword copying_filename) { |
133 | if (Copy_Form.cwidth==0) return; |
133 | if (Copy_Form.cwidth==0) return; |
134 | DisplayCopyfForm(); |
134 | DisplayCopyfForm(); |
135 | Put_icon(copying_filename+strrchr(copying_filename,'.'), 16, 19, 0xFFFfff, 0); |
135 | Put_icon(copying_filename+strrchr(copying_filename,'.'), 16, 19, 0xFFFfff, 0); |
136 | DrawBar(45, 29, Copy_Form.cwidth-40, 10, sc.work); |
136 | DrawBar(45, 29, Copy_Form.cwidth-40, 10, system.color.work); |
137 | WriteText(45, 29, 0x80, sc.work_text, copying_filename); |
137 | WriteText(45, 29, 0x80, system.color.work_text, copying_filename); |
138 | }> |
138 | }> |
139 | 139 | ||
140 | 140 |