Subversion Repositories Kolibri OS

Rev

Rev 5512 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5512 Rev 5513
1
//Leency 2008-2014
1
//Leency 2008-2014
2
 
2
 
3
#ifdef LANG_RUS
3
#ifdef LANG_RUS
4
	?define INFO_AFTER_COPY "Š®¯¨à®¢ ­¨¥ § ¢¥à襭®"
4
	?define INFO_AFTER_COPY "Š®¯¨à®¢ ­¨¥ § ¢¥à襭®"
5
#elif LANG_EST
5
#elif LANG_EST
6
	?define INFO_AFTER_COPY "Copy finished"
6
	?define INFO_AFTER_COPY "Copy finished"
7
#else
7
#else
8
	?define INFO_AFTER_COPY "Copy finished"
8
	?define INFO_AFTER_COPY "Copy finished"
9
#endif
9
#endif
10
 
10
 
11
byte copy_to[4096];
11
byte copy_to[4096];
12
byte cut_active=0;
12
byte cut_active=0;
13
 
13
 
14
enum {NOCUT, CUT, COPY_PASTE_END};
14
enum {NOCUT, CUT, COPY_PASTE_END};
15
 
15
 
16
Clipboard clipboard;
16
Clipboard clipboard;
17
 
17
 
18
void Copy(dword pcth, char cut)
18
void Copy(dword pcth, char cut)
19
{
19
{
20
        dword selected_offset2;
20
    dword selected_offset2;
21
        byte copy_t[4096];
21
    byte copy_t[4096];
22
        int cont = 0;
-
 
23
        dword buff_data;
22
    dword buff_data;
24
        int ind = 0;
23
    int ind = 0;
25
        
-
 
26
        for (i=0; i
-
 
27
        {
-
 
28
                selected_offset2 = file_mas[i]*304 + buf+32 + 7;
-
 
29
                if (ESBYTE[selected_offset2]) cont++;
-
 
30
        }
24
      
31
		if (!cont)
25
    if (selected_count)
32
		{
26
	{
33
            buff_data = malloc(4106);
27
        buff_data = malloc(selected_count*4096+10);
34
            ESDWORD[buff_data] = 4106;
28
        ESDWORD[buff_data] = selected_count*4096+10;
35
            ESDWORD[buff_data+4] = 3;
-
 
36
            ESINT[buff_data+8] = 1;
-
 
37
            strlcpy(buff_data+10, #file_path, 4096);;
-
 
38
			clipboard.SetSlotData(4106, buff_data);
-
 
39
	    }
-
 
40
		else
-
 
41
		{
-
 
42
            buff_data = malloc(cont*4096+10);
-
 
43
            ESDWORD[buff_data] = cont*4096+10;
-
 
44
            ESDWORD[buff_data+4] = 3;
29
        ESDWORD[buff_data+4] = 3;
45
            ESINT[buff_data+8] = cont;
30
        ESINT[buff_data+8] = selected_count;
46
            for (i=0; i
31
        for (i=0; i
47
            {
32
        {
48
                    selected_offset2 = file_mas[i]*304 + buf+32 + 7;
33
            selected_offset2 = file_mas[i]*304 + buf+32 + 7;
49
                    if (ESBYTE[selected_offset2]) {
34
            if (ESBYTE[selected_offset2]) {
50
                            strcpy(#copy_t, #path);
35
                strcpy(#copy_t, #path);
51
                            strcat(#copy_t, file_mas[i]*304+buf+72);
36
                strcat(#copy_t, file_mas[i]*304+buf+72);                         
52
                            
-
 
53
                            strlcpy(ind*4096+buff_data+10, #copy_t, 4096);;
37
                strlcpy(ind*4096+buff_data+10, #copy_t, 4096);;
54
                            ind++;
38
                ind++;
55
                    }
39
            }
56
            }
40
        }
57
			clipboard.SetSlotData(cont*4096+10, buff_data);
41
		clipboard.SetSlotData(selected_count*4096+10, buff_data);
-
 
42
	}
-
 
43
	else
-
 
44
	{
-
 
45
		buff_data = malloc(4106);
-
 
46
        ESDWORD[buff_data] = 4106;
-
 
47
        ESDWORD[buff_data+4] = 3;
-
 
48
        ESINT[buff_data+8] = 1;
-
 
49
        strlcpy(buff_data+10, #file_path, 4096);;
-
 
50
		clipboard.SetSlotData(4106, buff_data);
58
		}
51
	}
59
	cut_active = cut;
52
	cut_active = cut;
60
	free(buff_data);
53
	free(buff_data);
61
}
54
}
62
 
55
 
63
void copyf_Draw_Progress(dword filename) {
56
void copyf_Draw_Progress(dword filename) {
64
	DrawRectangle(0,0,WIN_COPY_W-5, 15,sc.work);
57
	DrawRectangle(0,0,WIN_COPY_W-5, 15,sc.work);
65
	WriteText(5,8, 0x80, sc.work_text, T_PASTE_WINDOW_TEXT);
58
	WriteText(5,8, 0x80, sc.work_text, T_PASTE_WINDOW_TEXT);
66
	DrawBar(5, 26, WIN_COPY_W-10, 10, sc.work);
59
	DrawBar(5, 26, WIN_COPY_W-10, 10, sc.work);
67
	WriteText(5,26, 0x80, sc.work_text, filename);
60
	WriteText(5,26, 0x80, sc.work_text, filename);
68
}
61
}
69
 
62
 
70
void Paste()
63
void Paste()
71
{
64
{
72
	char copy_rezult;
65
	char copy_rezult;
73
	byte copy_from[4096];
66
	byte copy_from[4096];
74
	int j;
67
	int j;
75
    int cnt = 0;
68
    int cnt = 0;
76
	dword buf;
69
	dword buf;
77
	
70
	
78
	buf = clipboard.GetSlotData(clipboard.GetSlotCount()-1);
71
	buf = clipboard.GetSlotData(clipboard.GetSlotCount()-1);
79
    if (DSDWORD[buf+4] != 3) return;
72
    if (DSDWORD[buf+4] != 3) return;
80
	cnt = ESINT[buf+8];
73
	cnt = ESINT[buf+8];
81
    for (j = 0; j < cnt; j++) {
74
    for (j = 0; j < cnt; j++) {
82
		strlcpy(#copy_from, j*4096+buf+10, 4096);
75
		strlcpy(#copy_from, j*4096+buf+10, 4096);
83
		if (!copy_from) CopyExit();
76
		if (!copy_from) CopyExit();
84
		strcpy(#copy_to, #path);
77
		strcpy(#copy_to, #path);
85
		strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
78
		strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
86
		if (!strcmp(#copy_from,#copy_to))
79
		if (!strcmp(#copy_from,#copy_to))
87
		{
80
		{
88
			strcpy(#copy_to, #path);
81
			strcpy(#copy_to, #path);
89
			strcat(#copy_to, "new_");
82
			strcat(#copy_to, "new_");
90
			strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
83
			strcat(#copy_to, #copy_from+strrchr(#copy_from,'/'));
91
		}
84
		}
92
		if (strstr(#copy_to, #copy_from))
85
		if (strstr(#copy_to, #copy_from))
93
		{
86
		{
94
			notify("Copy directory into itself is a bad idea...");
87
			notify("Copy directory into itself is a bad idea...");
95
			CopyExit();
88
			CopyExit();
96
		}
89
		}
97
		if (copy_rezult = copyf(#copy_from,#copy_to))
90
		if (copy_rezult = copyf(#copy_from,#copy_to))
98
		{
91
		{
99
			Write_Error(copy_rezult);
92
			Write_Error(copy_rezult);
100
		}
93
		}
101
	
94
	
102
		else if (cut_active)
95
		else if (cut_active)
103
		{
96
		{
104
			strcpy(#file_path, #copy_from);
97
			strcpy(#file_path, #copy_from);
105
			Del_File(true);
98
			Del_File(true);
106
			
99
			
107
		}
100
		}
108
	}
101
	}
109
	if (cut_active)
102
	if (cut_active)
110
	{
103
	{
111
		cut_active=false;
104
		cut_active=false;
112
	}
105
	}
113
	if (info_after_copy) notify(INFO_AFTER_COPY);
106
	if (info_after_copy) notify(INFO_AFTER_COPY);
114
	CopyExit();
107
	CopyExit();
115
}
108
}
116
 
109
 
117
void CopyExit()
110
void CopyExit()
118
{
111
{
119
	action_buf = COPY_PASTE_END;
112
	action_buf = COPY_PASTE_END;
120
	ActivateWindow(GetProcessSlot(Form.ID));
113
	ActivateWindow(GetProcessSlot(Form.ID));
121
	ExitProcess();
114
	ExitProcess();
122
}
115
}