2015-02-22 19:42:51 +01:00
# ifdef LANG_RUS
2015-02-23 14:34:27 +01:00
? define WINDOW_TITLE_PROPERTIES " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ⢠"
2015-02-22 19:42:51 +01:00
? define BTN_CLOSE " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> "
2015-02-24 01:01:08 +01:00
? define PR_T_NAME " <EFBFBD> <EFBFBD> <EFBFBD> :"
? define PR_T_DEST " <EFBFBD> <EFBFBD> ᯮ<EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> :"
? define PR_T_SIZE " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> :"
2015-02-27 21:25:28 +01:00
? define SET_3 " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> :"
? define SET_4 " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> :"
? define SET_5 " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> :"
2015-02-22 19:42:51 +01:00
? define SET_6 " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> : "
? define SET_7 " <20> <> <EFBFBD> <EFBFBD> <EFBFBD> : "
2015-02-24 01:01:08 +01:00
? define PR_T_CONTAINS " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> ন<EFBFBD> : "
2015-02-23 14:12:43 +01:00
? define FLAGS " <20> <> <EFBFBD> ਡ<EFBFBD> <E0A8A1> <EFBFBD> "
2015-02-24 01:01:08 +01:00
? define PR_T_HIDDEN " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> "
? define PR_T_SYSTEM " <EFBFBD> <EFBFBD> <EFBFBD> ⥬<EFBFBD> <EFBFBD> <EFBFBD> "
? define PR_T_ONLY_READ " <EFBFBD> <EFBFBD> <EFBFBD> 쪮 <20> ⥭<EFBFBD> <E2A5AD> "
2015-07-21 03:10:37 +02:00
? define SET_BYTE_LANG " <EFBFBD> <EFBFBD> <EFBFBD> <EFBFBD> "
2015-02-22 19:42:51 +01:00
# else
2015-02-23 14:34:27 +01:00
? define WINDOW_TITLE_PROPERTIES " Properties "
2015-02-23 14:12:43 +01:00
? define BTN_CLOSE " Close "
2015-02-24 01:01:08 +01:00
? define PR_T_NAME " Name: "
? define PR_T_DEST " Destination: "
? define PR_T_SIZE " Size: "
2015-02-27 21:25:28 +01:00
? define SET_3 " Created: "
? define SET_4 " Opened: "
? define SET_5 " Modified: "
2015-02-23 14:12:43 +01:00
? define SET_6 " Files: "
? define SET_7 " Folders: "
2015-02-24 01:01:08 +01:00
? define PR_T_CONTAINS " Contains: "
2015-02-23 14:12:43 +01:00
? define FLAGS " Attributes "
2015-02-24 01:01:08 +01:00
? define PR_T_HIDDEN " Hidden "
? define PR_T_SYSTEM " System "
? define PR_T_ONLY_READ " Read-only "
2015-07-21 03:10:37 +02:00
? define SET_BYTE_LANG " byte "
2015-02-22 19:42:51 +01:00
# endif
dword mouse_ddd2 ;
char path_to_file [ 4096 ] = " \0 " ;
char file_name2 [ 4096 ] = " \0 " ;
2015-02-24 18:47:47 +01:00
edit_box file_name_ed = { 195 , 50 , 25 , 0xffffff , 0x94AECE , 0x000000 , 0xffffff , 2 , 4098 , # file_name2 , # mouse_ddd2 , 1000000000000000 b , 2 , 2 } ;
edit_box path_to_file_ed = { 145 , 100 , 46 , 0xffffff , 0x94AECE , 0x000000 , 0xffffff , 2 , 4098 , # path_to_file , # mouse_ddd2 , 1000000000000000 b , 2 , 2 } ;
2015-02-27 21:25:28 +01:00
frame flags_frame = { 0 , 280 , 10 , 83 , 151 , 0x000111 , 0xFFFfff , 1 , FLAGS , 0 , 0 , 6 , 0x000111 , 0xCCCccc } ;
2015-02-22 19:42:51 +01:00
int file_count , dir_count , size_dir ;
char folder_info [ 200 ] ;
2015-02-24 18:47:47 +01:00
BDVK file_info_general ;
BDVK file_info_dirsize ;
2015-02-22 19:42:51 +01:00
2015-05-10 03:12:52 +02:00
void SetProperties ( byte id )
{
if ( selected_count ) return ;
else
{
2015-07-21 03:10:37 +02:00
if ( id = = 20 ) file_info_general . readonly ^ = true ;
if ( id = = 21 ) file_info_general . hidden ^ = true ;
if ( id = = 22 ) file_info_general . system ^ = true ;
2015-05-10 03:12:52 +02:00
SetFileInfo ( # file_path , # file_info_general ) ;
}
}
2015-02-27 21:25:28 +01:00
2015-02-22 19:42:51 +01:00
void GetSizeDir ( dword way )
{
dword dirbuf , fcount , i , filename ;
2015-07-21 03:10:37 +02:00
dword cur_file ;
2015-02-22 19:42:51 +01:00
if ( isdir ( way ) )
{
2015-07-21 03:10:37 +02:00
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.
2015-02-22 19:42:51 +01:00
GetDir ( # dirbuf , # fcount , way , DIRS_ONLYREAL ) ;
for ( i = 0 ; i < fcount ; i + + )
{
filename = i * 304 + dirbuf + 72 ;
2015-07-21 03:10:37 +02:00
sprintf ( cur_file , " %s/%s " , way , filename ) ;
if ( TestBit ( ESDWORD [ filename - 40 ] , 4 ) )
2015-02-22 19:42:51 +01:00
{
dir_count + + ;
2015-07-21 03:10:37 +02:00
GetSizeDir ( cur_file ) ;
2015-02-22 19:42:51 +01:00
}
else
{
2015-07-21 03:10:37 +02:00
GetFileInfo ( cur_file , # file_info_dirsize ) ;
size_dir + = file_info_dirsize . sizelo ;
2015-02-22 19:42:51 +01:00
file_count + + ;
}
}
2015-07-21 03:10:37 +02:00
free ( cur_file ) ;
2015-02-22 19:42:51 +01:00
}
}
2015-03-08 16:25:21 +01:00
void GetSizeMoreFiles ( dword way )
{
int all_file_count , all_dir_count , all_size ;
char cur_file [ 4096 ] ;
dword selected_offset2 ;
all_file_count = 0 ;
all_dir_count = 0 ;
all_size = 0 ;
for ( i = 0 ; i < files . count ; i + + )
{
selected_offset2 = file_mas [ i ] * 304 + buf + 32 + 7 ;
if ( ESBYTE [ selected_offset2 ] ) {
2015-07-21 03:10:37 +02:00
sprintf ( # cur_file , " %s/%s " , way , file_mas [ i ] * 304 + buf + 72 ) ;
2015-03-08 16:25:21 +01:00
GetFileInfo ( # cur_file , # file_info_general ) ;
if ( file_info_general . isfolder )
{
GetSizeDir ( # cur_file ) ;
all_file_count = all_file_count + file_count ;
all_dir_count = all_dir_count + dir_count + 1 ;
all_size = all_size + size_dir ;
}
else
{
all_file_count + + ;
all_size = all_size + file_info_general . sizelo ;
}
}
}
file_count = all_file_count ;
dir_count = all_dir_count ;
size_dir = all_size ;
}
2015-02-22 19:42:51 +01:00
void properties_dialog ( )
{
byte id ;
2015-02-26 23:29:09 +01:00
byte key ;
2015-02-22 19:42:51 +01:00
dword file_name_off ;
2015-02-26 23:29:09 +01:00
dword element_size ;
2015-03-08 16:25:21 +01:00
dword selected_offset2 ;
2015-07-16 03:44:30 +02:00
char element_size_label [ 32 ] , tmp ;
2015-02-22 19:42:51 +01:00
proc_info settings_form ;
2015-07-16 03:44:30 +02:00
DSBYTE [ # folder_info ] = 0 ;
2015-02-22 19:42:51 +01:00
file_count = 0 ;
dir_count = 0 ;
size_dir = 0 ;
2015-03-08 16:25:21 +01:00
2015-03-09 19:02:10 +01:00
if ( selected_count ) GetSizeMoreFiles ( # path ) ;
2015-03-08 16:25:21 +01:00
else
{
GetFileInfo ( # file_path , # file_info_general ) ;
strcpy ( # file_name2 , # file_name ) ;
2015-07-21 03:10:37 +02:00
file_name_ed . size = strlen ( # file_name2 ) ;
if ( itdir ) GetSizeDir ( # file_path ) ;
2015-03-08 16:25:21 +01:00
}
2015-02-22 19:42:51 +01:00
strcpy ( # path_to_file , # path ) ;
path_to_file_ed . size = strlen ( # path_to_file ) ;
SetEventMask ( 0x27 ) ;
loop ( ) switch ( WaitEvent ( ) )
{
case evButton :
id = GetButtonID ( ) ;
2015-07-21 03:10:37 +02:00
if ( id = = 1 ) | | ( id = = 10 )
{
cmd_free = 3 ;
ExitProcess ( ) ;
}
2015-05-10 03:12:52 +02:00
if ( id = = 20 ) SetProperties ( id ) ;
if ( id = = 21 ) SetProperties ( id ) ;
if ( id = = 22 ) SetProperties ( id ) ;
DrawPropertiesCheckBoxes ( ) ;
2015-02-22 19:42:51 +01:00
break ;
case evMouse :
edit_box_mouse stdcall ( # file_name_ed ) ;
edit_box_mouse stdcall ( # path_to_file_ed ) ;
break ;
case evKey :
key = GetKey ( ) ;
2015-07-21 03:10:37 +02:00
if ( key = = 27 )
{
cmd_free = 3 ;
ExitProcess ( ) ;
}
2015-02-22 19:42:51 +01:00
EAX = key < < 8 ;
edit_box_key stdcall ( # file_name_ed ) ;
edit_box_key stdcall ( # path_to_file_ed ) ;
break ;
case evReDraw :
2015-02-27 21:25:28 +01:00
DefineAndDrawWindow ( Form . left + 150 , 150 , 270 , 285 + GetSkinHeight ( ) , 0x34 , sc . work , WINDOW_TITLE_PROPERTIES ) ;
2015-02-22 19:42:51 +01:00
GetProcessInfo ( # settings_form , SelfInfo ) ;
2015-02-24 18:47:47 +01:00
DrawFlatButton ( settings_form . cwidth - 70 - 13 , settings_form . cheight - 34 , 70 , 22 , 10 , 0xE4DFE1 , BTN_CLOSE ) ;
2015-02-23 14:12:43 +01:00
DrawBar ( 10 , 10 , 32 , 32 , 0xFFFfff ) ;
2015-03-08 16:25:21 +01:00
2015-02-24 01:01:08 +01:00
WriteText ( 10 , 50 , 0x80 , 0x000000 , PR_T_DEST ) ;
2015-02-22 19:42:51 +01:00
edit_box_draw stdcall ( # path_to_file_ed ) ;
2015-02-23 14:12:43 +01:00
2015-02-24 01:01:08 +01:00
WriteText ( 10 , 65 , 0x80 , 0x000000 , PR_T_SIZE ) ;
2015-03-08 16:25:21 +01:00
2015-03-09 19:02:10 +01:00
if ( selected_count )
2015-02-22 19:42:51 +01:00
{
2015-03-09 19:49:34 +01:00
Put_icon ( ' ' , 18 , 19 , 0xFFFfff , 0 ) ;
2015-07-16 03:44:30 +02:00
sprintf ( # folder_info , " %s%d%s%d " , SET_6 , file_count , SET_7 , dir_count ) ;
2015-03-08 16:25:21 +01:00
WriteText ( 50 , 23 , 0x80 , 0x000000 , # folder_info ) ;
2015-07-21 03:10:37 +02:00
sprintf ( # element_size_label , " %s (%d %s) " , ConvertSize ( size_dir ) , size_dir , SET_BYTE_LANG ) ;
2015-03-08 16:25:21 +01:00
WriteText ( 100 , 65 , 0x80 , 0x000000 , # element_size_label ) ;
2015-02-22 19:42:51 +01:00
}
2015-03-08 16:25:21 +01:00
else
{
2015-07-21 03:10:37 +02:00
if ( file_info_general . isfolder )
Put_icon ( " <DIR> " , 18 , 19 , 0xFFFfff , 0 ) ;
else
Put_icon ( # file_name2 + strrchr ( # file_name2 , ' . ' ) , 18 , 19 , 0xFFFfff , 0 ) ;
2015-02-23 14:12:43 +01:00
2015-07-21 03:10:37 +02:00
WriteText ( 50 , 13 , 0x80 , 0x000000 , PR_T_NAME ) ;
2015-03-08 16:25:21 +01:00
edit_box_draw stdcall ( # file_name_ed ) ;
2015-07-21 03:10:37 +02:00
if ( ! itdir ) element_size = file_info_general . sizelo ;
2015-03-08 16:25:21 +01:00
else
{
2015-07-21 03:10:37 +02:00
WriteText ( 10 , 80 , 0x80 , 0x000000 , PR_T_CONTAINS ) ;
2015-07-16 03:44:30 +02:00
sprintf ( # folder_info , " %s%d%s%d " , SET_6 , file_count , SET_7 , dir_count ) ;
2015-03-08 16:25:21 +01:00
WriteText ( 100 , 80 , 0x80 , 0x000000 , # folder_info ) ;
element_size = size_dir ;
}
WriteText ( 10 , 95 , 0x80 , 0x000000 , SET_3 ) ;
2015-07-21 03:10:37 +02:00
WriteText ( 10 , 110 , 0x80 , 0x000000 , SET_4 ) ;
WriteText ( 10 , 125 , 0x80 , 0x000000 , SET_5 ) ;
2015-03-08 16:25:21 +01:00
DrawDate ( 100 , 95 , 0 , # file_info_general . datecreate ) ;
2015-07-21 03:10:37 +02:00
DrawDate ( 100 , 110 , 0 , # file_info_general . datelastaccess ) ;
DrawDate ( 100 , 125 , 0 , # file_info_general . datelastedit ) ;
sprintf ( # element_size_label , " %s (%d %s) " , ConvertSize ( element_size ) , element_size , SET_BYTE_LANG ) ;
2015-03-08 16:25:21 +01:00
WriteText ( 100 , 65 , 0x80 , 0x000000 , # element_size_label ) ;
2015-07-21 03:10:37 +02:00
2015-03-08 16:25:21 +01:00
flags_frame . size_x = - flags_frame . start_x * 2 + settings_form . cwidth - 2 ;
flags_frame . font_color = sc . work_text ;
flags_frame . font_backgr_color = sc . work ;
flags_frame . ext_col = sc . work_graph ;
frame_draw stdcall ( # flags_frame ) ;
2015-07-21 03:10:37 +02:00
2015-03-08 16:25:21 +01:00
DrawPropertiesCheckBoxes ( ) ;
}
2015-02-22 19:42:51 +01:00
}
2015-02-24 18:47:47 +01:00
}
void DrawPropertiesCheckBoxes ( )
{
2015-02-27 21:25:28 +01:00
CheckBox2 ( 22 , flags_frame . start_y + 14 , 20 , PR_T_ONLY_READ , file_info_general . readonly ) ;
CheckBox2 ( 22 , flags_frame . start_y + 36 , 21 , PR_T_HIDDEN , file_info_general . hidden ) ;
CheckBox2 ( 22 , flags_frame . start_y + 58 , 22 , PR_T_SYSTEM , file_info_general . system ) ;
2015-02-22 19:42:51 +01:00
}