Subversion Repositories Kolibri OS

Rev

Rev 5957 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5957 Rev 5962
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 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
    if (selected_count)
15
    if (selected_count)
16
	{
16
	{
17
        buff_data = malloc(selected_count*4096+10);
17
        buff_data = malloc(selected_count*4096+10);
18
        ESDWORD[buff_data] = selected_count*4096+10;
18
        ESDWORD[buff_data] = selected_count*4096+10;
19
        ESDWORD[buff_data+4] = 3;
19
        ESDWORD[buff_data+4] = 3;
20
        ESINT[buff_data+8] = selected_count;
20
        ESINT[buff_data+8] = selected_count;
21
        for (i=0; i
21
        for (i=0; i
22
        {
22
        {
23
            selected_offset2 = file_mas[i]*304 + buf+32 + 7;
23
            selected_offset2 = file_mas[i]*304 + buf+32 + 7;
24
            if (ESBYTE[selected_offset2]) {
24
            if (ESBYTE[selected_offset2]) {
25
                strcpy(#copy_t, #path);
25
                strcpy(#copy_t, #path);
26
                strcat(#copy_t, file_mas[i]*304+buf+72);                         
26
                strcat(#copy_t, file_mas[i]*304+buf+72);                         
27
                strlcpy(ind*4096+buff_data+10, #copy_t, 4096);;
27
                strlcpy(ind*4096+buff_data+10, #copy_t, 4096);;
28
                ind++;
28
                ind++;
29
            }
29
            }
30
        }
30
        }
31
		clipboard.SetSlotData(selected_count*4096+10, buff_data);
31
		clipboard.SetSlotData(selected_count*4096+10, buff_data);
32
	}
32
	}
33
	else
33
	else
34
	{
34
	{
35
		buff_data = malloc(4106);
35
		buff_data = malloc(4106);
36
        ESDWORD[buff_data] = 4106;
36
        ESDWORD[buff_data] = 4106;
37
        ESDWORD[buff_data+4] = 3;
37
        ESDWORD[buff_data+4] = 3;
38
        ESINT[buff_data+8] = 1;
38
        ESINT[buff_data+8] = 1;
39
        strlcpy(buff_data+10, #file_path, 4096);;
39
        strlcpy(buff_data+10, #file_path, 4096);;
40
		clipboard.SetSlotData(4106, buff_data);
40
		clipboard.SetSlotData(4106, buff_data);
41
	}
41
	}
42
	cut_active = cut;
42
	cut_active = cut;
43
	free(buff_data);
43
	free(buff_data);
44
}
44
}
45
 
45
 
46
 
46
 
47
void Paste() {
47
void Paste() {
48
	copy_stak = malloc(20000);
48
	copy_stak = malloc(64000);
49
	CreateThread(#PasteThread,copy_stak+20000-4);
49
	CreateThread(#PasteThread,copy_stak+64000-4);
50
}
50
}
51
 
51
 
52
void PasteThread()
52
void PasteThread()
53
{
53
{
54
	char copy_rezult;
54
	char copy_rezult;
55
	int j;
55
	int j;
56
	int cnt = 0;
56
	int cnt = 0;
57
	dword buf;
57
	dword buf;
58
	file_count_copy = 0;
58
	file_count_copy = 0;
59
	copy_bar.value = 0; 
59
	copy_bar.value = 0; 
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
		GetFileInfo(#copy_from, #file_info_count);
66
		GetFileInfo(#copy_from, #file_info_count);
67
		if ( file_info_count.isfolder ) DirFileCount(#copy_from);
67
		if ( file_info_count.isfolder ) DirFileCount(#copy_from);
68
		else file_count_copy++;
68
		else file_count_copy++;
69
	}
69
	}
70
	copy_bar.max = file_count_copy;
70
	copy_bar.max = file_count_copy;
71
	
71
	
72
	if (cut_active)  operation_flag = MOVE_FLAG;
72
	if (cut_active)  operation_flag = MOVE_FLAG;
73
	else  operation_flag = COPY_FLAG;
73
	else  operation_flag = COPY_FLAG;
74
	
74
	
75
	DisplayOperationForm();
75
	DisplayOperationForm();
76
	for (j = 0; j < cnt; j++) {
76
	for (j = 0; j < cnt; j++) {
77
		strlcpy(#copy_from, j*4096+buf+10, 4096);
77
		strlcpy(#copy_from, j*4096+buf+10, 4096);
78
		if (!copy_from) DialogExit();
78
		if (!copy_from) DialogExit();
79
		strcpy(#copy_to, #path);
79
		strcpy(#copy_to, #path);
80
		strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
80
		strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
81
		if (!strcmp(#copy_from,#copy_to))
81
		if (!strcmp(#copy_from,#copy_to))
82
		{
82
		{
83
			strcpy(#copy_to, #path);
83
			strcpy(#copy_to, #path);
84
			strcat(#copy_to, "new_");
84
			strcat(#copy_to, "new_");
85
			strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
85
			strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
86
		}
86
		}
87
		if (strstr(#copy_to, #copy_from))
87
		if (strstr(#copy_to, #copy_from))
88
		{
88
		{
89
			notify("Copy directory into itself is a bad idea...");
89
			notify("Copy directory into itself is a bad idea...");
90
			DialogExit();
90
			DialogExit();
91
		}
91
		}
92
 
92
 
93
		if (copy_rezult = copyf(#copy_from,#copy_to))
93
		if (copy_rezult = copyf(#copy_from,#copy_to))
94
		{
94
		{
95
			Write_Error(copy_rezult);
95
			Write_Error(copy_rezult);
96
		}
96
		}
97
		else if (cut_active)
97
		else if (cut_active)
98
		{
98
		{
99
			//strcpy(#file_path, #copy_from);
99
			//strcpy(#file_path, #copy_from);
100
			Del_File2(#copy_from, 0);
100
			Del_File2(#copy_from, 0);
101
			
101
			
102
		}
102
		}
103
	}
103
	}
104
	if (cut_active)
104
	if (cut_active)
105
	{
105
	{
106
		cut_active=false;
106
		cut_active=false;
107
	}
107
	}
108
	if (info_after_copy) notify(INFO_AFTER_COPY);
108
	if (info_after_copy) notify(INFO_AFTER_COPY);
109
	DialogExit();
109
	DialogExit();
110
}
110
}