Subversion Repositories Kolibri OS

Rev

Rev 6600 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6600 Rev 6602
Line 5... Line 5...
5
enum {NOCUT, CUT};
5
enum {NOCUT, CUT};
Line 6... Line 6...
6
 
6
 
Line 7... Line 7...
7
Clipboard clipboard;
7
Clipboard clipboard;
8
 
-
 
9
void Copy(dword pcth, char cut)
-
 
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
8
 
21
        {
9
void setElementSelectedFlag(dword n, bool state) {
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);
-
 
26
                path_len = strlen(#copy_t);
-
 
27
                size_buf = size_buf + path_len + 4;
13
	if (state==true) selected_count++;
Line 28... Line -...
28
            }
-
 
29
        }
-
 
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
14
	if (state==false) selected_count--;
140
 
15
}
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];
-
 
146
    dword buff_data;
20
	byte copy_t[4096];
147
    dword path_len = 0;
21
	dword buff_data;
-
 
22
	dword path_len = 0;
-
 
23
	dword size_buf = 0;
-
 
24
	dword copy_buf_offset = 0;
148
    dword buffer_len = 0;
25
 
149
    dword size_buf = 0;
26
	if (files.count<=0) return; //no files
150
    int ind = 0; 
27
	if (selected_count==0) setElementSelectedFlag(files.cur_y, true); //no element selected by "insert", so we copy current element
151
    if (selected_count)
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);
-
 
174
                strcat(#copy_t, file_mas[i]*304+buf+72);
-
 
175
                path_len = strlen(#copy_t);
-
 
176
                strlcpy(buff_data+10+buffer_len+1, #copy_t, path_len);
-
 
177
                buffer_len = buffer_len + path_len;
50
			strcpy(copy_buf_offset, #path);
178
                ind++;
-
 
179
            }
-
 
180
        }
-
 
181
		clipboard.SetSlotData(size_buf+10, buff_data);
-
 
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;
51
			strcat(copy_buf_offset, file_mas[i]*304+buf+72);
-
 
52
			copy_buf_offset += strlen(copy_buf_offset) + 1;
-
 
53
		}
-
 
54
	}
189
        strlcpy(buff_data+10, #file_path, 4096);;
55
	WriteFile(size_buf, buff_data, "/rd/1/log.log");
190
		clipboard.SetSlotData(4106, buff_data);
56
	if (selected_count==1) setElementSelectedFlag(files.cur_y, false);
191
	}
57
	clipboard.SetSlotData(size_buf, buff_data);
Line 192... Line -...
192
	cut_active = cut;
-
 
193
	free(buff_data);
58
	cut_active = cut;
194
}
59
	free(buff_data);
195
 
60
}
196
 
61
 
Line 197... Line 62...
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;
-
 
205
	int j;
69
	char copy_rezult;
206
	int cnt = 0;
70
	int j;
207
	dword buf;
-
 
-
 
71
	int paste_elements_count = 0;
208
	dword path_len = 0;
72
	dword buf;
209
    dword buffer_len = 0;
73
	dword path_offset;
210
    file_count_copy = 0;
74
	file_count_copy = 0;
211
	copy_bar.value = 0; 
75
	copy_bar.value = 0; 
212
    debugln("Step 1");
-
 
213
    buf = clipboard.GetSlotData(clipboard.GetSlotCount()-1);
76
	
214
	if (DSDWORD[buf+4] != 3) return;
77
	buf = clipboard.GetSlotData(clipboard.GetSlotCount()-1);
215
	cnt = ESINT[buf+8];
78
	if (DSDWORD[buf+4] != 3) return;
216
	for (j = 0; j < cnt; j++) {
79
	paste_elements_count = ESINT[buf+8];
217
		if (j==0) strlcpy(#copy_from, buf+10+buffer_len);
80
	path_offset = buf + 10;
-
 
81
	//calculate copy files count for progress bar
218
		else strlcpy(#copy_from, buf+10+buffer_len+1);
82
	for (j = 0; j < paste_elements_count; j++) {
219
		buffer_len = buffer_len + path_len;
83
		GetFileInfo(path_offset, #file_info_count);
Line 220... Line 84...
220
		GetFileInfo(#copy_from, #file_info_count);
84
		if ( file_info_count.isfolder ) DirFileCount(path_offset);
221
		if ( file_info_count.isfolder ) DirFileCount(#copy_from);
85
		else file_count_copy++;
Line 222... Line -...
222
		else file_count_copy++;
-
 
223
	}
86
		path_offset += strlen(path_offset) + 1;
224
	copy_bar.max = file_count_copy;
-
 
225
	
87
	}
226
	if (cut_active)  operation_flag = MOVE_FLAG;
88
	copy_bar.max = file_count_copy;
227
	else  operation_flag = COPY_FLAG;
-
 
228
	
89
	
229
	debugln("Step 2");
-
 
230
    path_len = 0;
-
 
231
    buffer_len = 0;
-
 
232
    DisplayOperationForm();
-
 
233
	for (j = 0; j < cnt; j++) {
-
 
234
		if (j==0) strlcpy(#copy_from, buf+10+buffer_len);
-
 
235
		else strlcpy(#copy_from, buf+10+buffer_len+1);
-
 
236
		debugln(#copy_from);
90
	if (cut_active)  operation_flag = MOVE_FLAG;
237
		path_len = strlen(#copy_from);
91
	else  operation_flag = COPY_FLAG;
238
		debugi(path_len);
92
	
239
		debug("Step ");
93
	path_offset = buf + 10;
240
		debugi(j);
94
	DisplayOperationForm();
241
		debugln(" ");
95
	for (j = 0; j < paste_elements_count; j++) {
242
		buffer_len = buffer_len + path_len;
96
		strcpy(#copy_from, path_offset);
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
		{
Line 264... Line 118...
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
			
Line 267... Line 121...
267
		}
121
		}
-
 
122
		path_offset += strlen(path_offset) + 1;
268
	}
123
	}
269
	debugln("Step 3000");
-
 
270
	if (cut_active)
-
 
271
	{
-
 
272
		cut_active=false;
124
	cut_active=false;
273
	}
-
 
274
	if (info_after_copy) notify(INFO_AFTER_COPY);
125
	if (info_after_copy) notify(INFO_AFTER_COPY);
275
	DialogExit();
126
	DialogExit();
276
}*/
-
 
277
127
}