2015-02-24 13:48:22 +01:00
2014-01-07 02:04:38 +01:00
byte copy_to [ 4096 ] ;
2015-03-09 19:49:34 +01:00
byte copy_from [ 4096 ] ;
2014-01-07 02:04:38 +01:00
byte cut_active = 0 ;
2014-01-06 01:36:08 +01:00
2015-08-07 04:11:35 +02:00
progress_bar copy_bar = { 0 , 16 , 49 , 50 , 20 , 0 , 0 , 1 , 0xFFFFFF , 0x00FF00 , 0x000000 } ;
2014-04-26 00:31:07 +02:00
enum { NOCUT , CUT , COPY_PASTE_END } ;
2014-03-26 13:51:42 +01:00
2014-01-06 01:36:08 +01:00
Clipboard clipboard ;
2013-04-04 19:07:38 +02:00
void Copy ( dword pcth , char cut )
{
2015-03-09 19:02:10 +01:00
dword selected_offset2 ;
byte copy_t [ 4096 ] ;
dword buff_data ;
2015-08-07 04:11:35 +02:00
int ind = 0 ;
2015-03-09 19:02:10 +01:00
if ( selected_count )
{
buff_data = malloc ( selected_count * 4096 + 10 ) ;
ESDWORD [ buff_data ] = selected_count * 4096 + 10 ;
ESDWORD [ buff_data + 4 ] = 3 ;
ESINT [ buff_data + 8 ] = selected_count ;
2014-11-05 23:34:25 +01:00
for ( i = 0 ; i < files . count ; i + + )
{
2015-03-09 19:02:10 +01:00
selected_offset2 = file_mas [ i ] * 304 + buf + 32 + 7 ;
if ( ESBYTE [ selected_offset2 ] ) {
strcpy ( # copy_t , # path ) ;
strcat ( # copy_t , file_mas [ i ] * 304 + buf + 72 ) ;
strlcpy ( ind * 4096 + buff_data + 10 , # copy_t , 4096 ) ; ;
ind + + ;
2014-12-01 21:11:26 +01:00
}
2015-03-09 19:02:10 +01:00
}
clipboard . SetSlotData ( selected_count * 4096 + 10 , buff_data ) ;
}
else
{
buff_data = malloc ( 4106 ) ;
ESDWORD [ buff_data ] = 4106 ;
ESDWORD [ buff_data + 4 ] = 3 ;
ESINT [ buff_data + 8 ] = 1 ;
strlcpy ( buff_data + 10 , # file_path , 4096 ) ; ;
clipboard . SetSlotData ( 4106 , buff_data ) ;
}
2013-04-04 19:07:38 +02:00
cut_active = cut ;
2014-12-01 21:11:26 +01:00
free ( buff_data ) ;
2013-04-04 19:07:38 +02:00
}
2015-07-23 14:23:52 +02:00
void Paste ( ) {
copy_stak = malloc ( 20000 ) ;
2015-07-29 14:14:49 +02:00
CreateThread ( # PasteThread , copy_stak + 20000 - 4 ) ;
2015-07-23 14:23:52 +02:00
}
2015-08-07 04:11:35 +02:00
BDVK file_info_count ;
int file_count_copy ;
void DirFileCount ( dword way )
{
dword dirbuf , fcount , i , filename ;
dword cur_file ;
if ( isdir ( way ) )
{
cur_file = malloc ( 4096 ) ;
// In the process of recursive descent, memory must be allocated dynamically, because the static memory -> was a bug !!! But unfortunately pass away to sacrifice speed.
GetDir ( # dirbuf , # fcount , way , DIRS_ONLYREAL ) ;
for ( i = 0 ; i < fcount ; i + + )
{
filename = i * 304 + dirbuf + 72 ;
sprintf ( cur_file , " %s/%s " , way , filename ) ;
if ( TestBit ( ESDWORD [ filename - 40 ] , 4 ) )
{
file_count_copy + + ;
DirFileCount ( cur_file ) ;
}
else
{
file_count_copy + + ;
}
}
free ( cur_file ) ;
}
}
2015-07-23 14:23:52 +02:00
2015-07-23 14:15:53 +02:00
void PasteThread ( )
2013-04-04 19:07:38 +02:00
{
2013-10-15 01:16:04 +02:00
char copy_rezult ;
2014-11-05 23:34:25 +01:00
int j ;
2015-03-09 19:49:34 +01:00
int cnt = 0 ;
2014-04-21 05:01:45 +02:00
dword buf ;
2015-08-07 04:11:35 +02:00
file_count_copy = 0 ;
copy_bar . value = 0 ;
2014-04-21 05:01:45 +02:00
buf = clipboard . GetSlotData ( clipboard . GetSlotCount ( ) - 1 ) ;
2015-03-09 19:49:34 +01:00
if ( DSDWORD [ buf + 4 ] ! = 3 ) return ;
2014-11-05 23:34:25 +01:00
cnt = ESINT [ buf + 8 ] ;
2015-08-07 04:11:35 +02:00
for ( j = 0 ; j < cnt ; j + + ) {
strlcpy ( # copy_from , j * 4096 + buf + 10 , 4096 ) ;
GetFileInfo ( # copy_from , # file_info_count ) ;
if ( file_info_count . isfolder ) DirFileCount ( # copy_from ) ;
else file_count_copy + + ;
}
copy_bar . max = file_count_copy ;
DisplayCopyfForm ( ) ;
2015-03-09 19:49:34 +01:00
for ( j = 0 ; j < cnt ; j + + ) {
2014-11-05 23:34:25 +01:00
strlcpy ( # copy_from , j * 4096 + buf + 10 , 4096 ) ;
2014-04-20 11:52:52 +02:00
if ( ! copy_from ) CopyExit ( ) ;
2013-04-04 19:07:38 +02:00
strcpy ( # copy_to , # path ) ;
strcat ( # copy_to , # copy_from + strrchr ( # copy_from , ' / ' ) ) ;
2014-03-26 13:51:42 +01:00
if ( ! strcmp ( # copy_from , # copy_to ) )
{
strcpy ( # copy_to , # path ) ;
strcat ( # copy_to , " new_ " ) ;
strcat ( # copy_to , # copy_from + strrchr ( # copy_from , ' / ' ) ) ;
}
if ( strstr ( # copy_to , # copy_from ) )
{
notify ( " Copy directory into itself is a bad idea... " ) ;
2014-04-20 11:52:52 +02:00
CopyExit ( ) ;
2014-03-26 13:51:42 +01:00
}
2015-03-09 19:49:34 +01:00
2014-03-26 13:51:42 +01:00
if ( copy_rezult = copyf ( # copy_from , # copy_to ) )
{
Write_Error ( copy_rezult ) ;
}
2014-04-25 18:20:33 +02:00
else if ( cut_active )
{
strcpy ( # file_path , # copy_from ) ;
Del_File ( true ) ;
}
2013-04-04 19:07:38 +02:00
}
2014-04-25 18:20:33 +02:00
if ( cut_active )
2013-04-04 19:07:38 +02:00
{
cut_active = false ;
}
2015-02-24 13:48:22 +01:00
if ( info_after_copy ) notify ( INFO_AFTER_COPY ) ;
2014-04-20 11:52:52 +02:00
CopyExit ( ) ;
}
2015-03-09 19:49:34 +01:00
# define WIN_COPY_W 345
2015-08-07 04:11:35 +02:00
# define WIN_COPY_H 110
2015-03-09 19:49:34 +01:00
proc_info Copy_Form ;
void DisplayCopyfForm ( )
2014-04-20 11:52:52 +02:00
{
2015-03-09 19:49:34 +01:00
switch ( CheckEvent ( ) )
{
case evButton :
notify ( T_CANCEL_PASTE ) ;
CopyExit ( ) ;
break ;
case evReDraw :
2015-08-07 00:18:15 +02:00
DefineAndDrawWindow ( Form . left + Form . width - 200 , Form . top + 90 , WIN_COPY_W , GetSkinHeight ( ) + WIN_COPY_H , 0x34 , 0xFFFFFF , T_PASTE_WINDOW_TITLE ) ;
2015-03-09 19:49:34 +01:00
GetProcessInfo ( # Copy_Form , SelfInfo ) ;
2015-08-04 16:36:07 +02:00
WriteText ( 45 , 11 , 0x80 , system . color . work_text , T_PASTE_WINDOW_TEXT ) ;
2015-08-07 04:11:35 +02:00
DrawFlatButton ( Copy_Form . cwidth - 96 , Copy_Form . cheight - 32 , 80 , 22 , 10 , system . color . work_button , T_PASTE_WINDOW_BUTTON ) ;
2015-03-09 19:49:34 +01:00
DrawBar ( 8 , 10 , 32 , 32 , 0xFFFfff ) ;
break ;
}
}
void CopyExit ( ) {
2014-04-20 11:52:52 +02:00
action_buf = COPY_PASTE_END ;
2013-04-04 19:07:38 +02:00
ActivateWindow ( GetProcessSlot ( Form . ID ) ) ;
ExitProcess ( ) ;
2015-03-09 19:49:34 +01:00
}
void copyf_Draw_Progress ( dword copying_filename ) {
2015-08-07 04:11:35 +02:00
if ( Copy_Form . cwidth = = 0 )
{
copy_bar . value + + ;
return ;
}
copy_bar . width = Copy_Form . cwidth - 32 ;
2015-03-09 19:49:34 +01:00
DisplayCopyfForm ( ) ;
Put_icon ( copying_filename + strrchr ( copying_filename , ' . ' ) , 16 , 19 , 0xFFFfff , 0 ) ;
2015-08-07 00:18:15 +02:00
DrawBar ( 45 , 29 , Copy_Form . cwidth - 45 , 10 , 0xFFFFFF ) ;
2015-08-07 04:11:35 +02:00
WriteText ( 45 , 29 , 0x80 , 0x000000 , copying_filename ) ;
progressbar_draw stdcall ( # copy_bar ) ;
progressbar_progress stdcall ( # copy_bar ) ;
//copy_bar.value++;
pause ( 100 ) ;
2014-04-20 11:52:52 +02:00
}