Subversion Repositories Kolibri OS

Rev

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

Rev 8565 Rev 8707
1
/* Copyright (C) 2019-2021 Logaev Maxim (turbocat2001), GPLv2 */
1
/* Copyright (C) 2019-2021 Logaev Maxim (turbocat2001), GPLv2 */
-
 
2
 
2
 
3
#include 
3
#include 
4
#include 
4
#include 
5
#include 
5
#include 
6
#include 
6
#include 
-
 
7
#include 
7
#include 
8
#include 
8
#include 
9
#include 
9
#include 
10
#include 
10
#include 
11
#include 
11
#include 
12
#include 
12
#include 
13
 
13
 
14
#define TRUE 1;
14
#define TRUE 1;
15
#define FALSE 0;
15
#define FALSE 0;
16
#define MAX_HASH_LEN 65 // Œ ªá¨¬ «ì­ ï ¤«¨­  áâப¨
16
#define MAX_HASH_LEN 65 // Œ ªá¨¬ «ì­ ï ¤«¨­  áâப¨
17
#define WINDOW_W 665
17
#define WINDOW_W 665
18
#define VERSION "%s - thashview 2.6.1"
18
#define VERSION "%s - thashview 2.6.1"
19
#define EDIT_TEXT_SIZE 0x10000000
19
#define EDIT_TEXT_SIZE 0x10000000
-
 
20
#define DATA(type, addr, offset) *((type*)((uint8_t*)addr+offset))
20
 
21
 
21
struct kolibri_system_colors sys_color_table;
22
ksys_colors_table_t sys_color_table;
22
 
23
 
23
char hash_str_md5[MAX_HASH_LEN]=   "Click the 'MD5:' button to show the md5-checksum!"; //‚뢮¤ MD5
24
char hash_str_md5[MAX_HASH_LEN]=   "Click the 'MD5:' button to show the md5-checksum!"; //‚뢮¤ MD5
24
char hash_str_sha1[MAX_HASH_LEN]=  "Click the 'SHA1:' button to show the sha1-checksum!"; //‚뢮¤ SHA1
25
char hash_str_sha1[MAX_HASH_LEN]=  "Click the 'SHA1:' button to show the sha1-checksum!"; //‚뢮¤ SHA1
25
char hash_str_sha256[MAX_HASH_LEN]="Click the 'SHA256:' button to show the sha256-checksum!"; //‚뢮¤ SHA256
26
char hash_str_sha256[MAX_HASH_LEN]="Click the 'SHA256:' button to show the sha256-checksum!"; //‚뢮¤ SHA256
26
char edit_box_buff[MAX_HASH_LEN]; // ãää¥à ¤«ï ¢¢®¤ 
27
char edit_box_buff[MAX_HASH_LEN]; // ãää¥à ¤«ï ¢¢®¤ 
27
char *filename; // ˆ¬ï ®¡à ¡ â뢠¥¬®£® ä ©« 
28
char *filename; // ˆ¬ï ®¡à ¡ â뢠¥¬®£® ä ©« 
28
char *title; // ‡ £®«®¢®ª ®ª­ 
29
char *title; // ‡ £®«®¢®ª ®ª­ 
29
 
30
 
30
enum MYCOLORS // –¢¥â 
31
enum MYCOLORS // –¢¥â 
31
{
32
{
32
    GREEN = 0x067D06 | EDIT_TEXT_SIZE,
33
    GREEN = 0x067D06 | EDIT_TEXT_SIZE,
33
    RED   = 0xFF0000 | EDIT_TEXT_SIZE,
34
    RED   = 0xFF0000 | EDIT_TEXT_SIZE,
34
    BLACK = 0x000000 | EDIT_TEXT_SIZE,
35
    BLACK = 0x000000 | EDIT_TEXT_SIZE,
35
    WHITE = 0xFFFFFF,
36
    WHITE = 0xFFFFFF,
36
    GREY  = 0x919191
37
    GREY  = 0x919191
37
};
38
};
38
 
39
 
39
edit_box hash_edit_box={WINDOW_W-140,10,121,WHITE,0,0,GREY,EDIT_TEXT_SIZE, MAX_HASH_LEN-1, edit_box_buff,NULL,ed_focus}; // ‘®§¤ ñ¬ áâàãªâãàã edit_box
40
edit_box hash_edit_box={WINDOW_W-140,10,121,WHITE,0,0,GREY,EDIT_TEXT_SIZE, MAX_HASH_LEN-1, edit_box_buff,NULL,ed_focus}; // ‘®§¤ ñ¬ áâàãªâãàã edit_box
40
int md5_flag=0, sha1_flag=0, sha256_flag=0; // ”« £¨ ¯®ª §ë¢ î騥 ¡ë«  «¨ 㦥 à ááç¨â ­  ª®â஫쭠ï á㬬  ¢ ä㭪樨 check_sum()
41
int md5_flag=0, sha1_flag=0, sha256_flag=0; // ”« £¨ ¯®ª §ë¢ î騥 ¡ë«  «¨ 㦥 à ááç¨â ­  ª®â஫쭠ï á㬬  ¢ ä㭪樨 check_sum()
41
 
42
 
42
enum BUTTONS // Š­®¯ª¨ ¢ ¨­âà¥ä¥©á¥
43
enum BUTTONS // Š­®¯ª¨ ¢ ¨­âà¥ä¥©á¥
43
{
44
{
44
    BTN_QUIT=1,        //‚ë室
45
    BTN_QUIT=1,        //‚ë室
45
    BTN_MD5 = 10,      // ááç¨â âì md5-ª®­â஫ì­ãî á㬬ã
46
    BTN_MD5 = 10,      // ááç¨â âì md5-ª®­â஫ì­ãî á㬬ã
46
    BTN_SHA1 = 20,     // ááç¨â âì sha1-ª®­â஫ì­ãî á㬬ã
47
    BTN_SHA1 = 20,     // ááç¨â âì sha1-ª®­â஫ì­ãî á㬬ã
47
    BTN_SHA256 = 30,   // ááç¨â âì sha256-ª®­â஫ì­ãî á㬬ã
48
    BTN_SHA256 = 30,   // ááç¨â âì sha256-ª®­â஫ì­ãî á㬬ã
48
    BTN_COPY_MD5= 11,  //‘ª®¯¨à®¢ âì ¢ ¡ãää¥à ®¡¬¥­ 
49
    BTN_COPY_MD5= 11,  //‘ª®¯¨à®¢ âì ¢ ¡ãää¥à ®¡¬¥­ 
49
    BTN_COPY_SHA1= 21,
50
    BTN_COPY_SHA1= 21,
50
    BTN_COPY_SHA256=31,
51
    BTN_COPY_SHA256=31,
51
    BTN_CMP=40,        //‘à ¢­¨âì edit_box ¨ ª®­â஫ì­ãî á㬬ã
52
    BTN_CMP=40,        //‘à ¢­¨âì edit_box ¨ ª®­â஫ì­ãî á㬬ã
52
    BTN_PASTE=50       //‚áâ ¢¨âì ¢ edit_box(¯®ª  ¢ ࠧࠡ®âª¥)
53
    BTN_PASTE=50       //‚áâ ¢¨âì ¢ edit_box(¯®ª  ¢ ࠧࠡ®âª¥)
53
};
54
};
54
 
55
 
55
void notify_show(char *text)
56
void notify_show(char *text)
56
{
57
{
57
   start_app("/sys/@notify", text);
58
   _ksys_exec("/sys/@notify", text);
58
}
59
}
59
 
60
 
60
void* safe_malloc(size_t size) // ¥§®¯ á­ë© malloc. ®ª §ë¢ ¥â 㢥¤®¬«¥­¨¥ ®¡ ®è¨¡ª¥ ¨ § ªà뢠¥â ¯à®£à ¬¬ã ¥á«¨ ¯ ¬ïâì ­¥ ¡ë«  ¢ë¤¥«¥­ 
61
void* safe_malloc(size_t size) // ¥§®¯ á­ë© malloc. ®ª §ë¢ ¥â 㢥¤®¬«¥­¨¥ ®¡ ®è¨¡ª¥ ¨ § ªà뢠¥â ¯à®£à ¬¬ã ¥á«¨ ¯ ¬ïâì ­¥ ¡ë«  ¢ë¤¥«¥­ 
61
{
62
{
62
    void *p=malloc(size);
63
    void *p=malloc(size);
63
    if(p==NULL){
64
    if(p==NULL){
64
       notify_show("'Memory allocation error!' -E");
65
       notify_show("'Memory allocation error!' -E");
65
       exit(0);
66
       exit(0);
66
    }else{
67
    }else{
67
        return p;
68
        return p;
68
    }
69
    }
69
}
70
}
70
 
71
 
71
void global_var_init(unsigned int size)  // ˆ­¨æ¨ «¨§¨àãîâáï £«®¡ «ì­ë¥ ¬ áᨢë
72
void global_var_init(unsigned int size)  // ˆ­¨æ¨ «¨§¨àãîâáï £«®¡ «ì­ë¥ ¬ áᨢë
72
{
73
{
73
  filename=safe_malloc(size);
74
  filename=safe_malloc(size);
74
  title=safe_malloc(size+20);
75
  title=safe_malloc(size+20);
75
}
76
}
76
 
77
 
77
/* ”㭪樨 £¥­¥à æ¨¨ ª®­â஫ì­ëå á㬬 */
78
/* ”㭪樨 £¥­¥à æ¨¨ ª®­â஫ì­ëå á㬬 */
78
void md5_hash(FILE* input, BYTE* hash )
79
void md5_hash(FILE* input, BYTE* hash )
79
{
80
{
80
    int input_size;
81
    int input_size;
81
    BYTE *temp_buffer;
82
    BYTE *temp_buffer;
82
    temp_buffer=safe_malloc(1024);
83
    temp_buffer=safe_malloc(1024);
83
    MD5_CTX ctx;
84
    MD5_CTX ctx;
84
    md5_init(&ctx);
85
    md5_init(&ctx);
85
    while((input_size = fread(temp_buffer, 1, 1024, input)) > 0){
86
    while((input_size = fread(temp_buffer, 1, 1024, input)) > 0){
86
                md5_update(&ctx, temp_buffer, input_size);
87
                md5_update(&ctx, temp_buffer, input_size);
87
    }
88
    }
88
    md5_final(&ctx, hash);
89
    md5_final(&ctx, hash);
89
    free(temp_buffer);
90
    free(temp_buffer);
90
}
91
}
91
 
92
 
92
void sha1_hash(FILE* input, BYTE* hash )
93
void sha1_hash(FILE* input, BYTE* hash )
93
{
94
{
94
    int input_size;
95
    int input_size;
95
    BYTE *buffer;
96
    BYTE *buffer;
96
    buffer=safe_malloc(1024);
97
    buffer=safe_malloc(1024);
97
    SHA1_CTX ctx;
98
    SHA1_CTX ctx;
98
    sha1_init(&ctx);
99
    sha1_init(&ctx);
99
    while((input_size = fread(buffer, 1, 1024, input)) > 0){
100
    while((input_size = fread(buffer, 1, 1024, input)) > 0){
100
                sha1_update(&ctx, buffer, input_size);
101
                sha1_update(&ctx, buffer, input_size);
101
    }
102
    }
102
    sha1_final(&ctx, hash);
103
    sha1_final(&ctx, hash);
103
    free(buffer);
104
    free(buffer);
104
}
105
}
105
 
106
 
106
void sha256_hash(FILE* input, BYTE* hash )
107
void sha256_hash(FILE* input, BYTE* hash )
107
{
108
{
108
    int input_size;
109
    int input_size;
109
    BYTE *buffer;
110
    BYTE *buffer;
110
    buffer=safe_malloc(1024);
111
    buffer=safe_malloc(1024);
111
    SHA256_CTX ctx;
112
    SHA256_CTX ctx;
112
    sha256_init(&ctx);
113
    sha256_init(&ctx);
113
    while((input_size = fread(buffer, 1, 1024, input)) > 0){
114
    while((input_size = fread(buffer, 1, 1024, input)) > 0){
114
                sha256_update(&ctx, buffer, input_size);
115
                sha256_update(&ctx, buffer, input_size);
115
    }
116
    }
116
    sha256_final(&ctx, hash);
117
    sha256_final(&ctx, hash);
117
    free(buffer);
118
    free(buffer);
118
}
119
}
119
 
120
 
120
 
121
 
121
BYTE* check_sum(int alg) // ƒ¥­¥à¨à㥬 ª®­â஫ì­ë¥ áã¬¬ë ¨á¯®«ì§ãï ®¤¨­ ¨§  «£®à¨â¬®¢
122
BYTE* check_sum(int alg) // ƒ¥­¥à¨à㥬 ª®­â஫ì­ë¥ áã¬¬ë ¨á¯®«ì§ãï ®¤¨­ ¨§  «£®à¨â¬®¢
122
{
123
{
123
    FILE* input_file;
124
    FILE* input_file;
124
    BYTE *hash;
125
    BYTE *hash;
125
    input_file=fopen(filename,"rb");
126
    input_file=fopen(filename,"rb");
126
    hash = safe_malloc(alg);
127
    hash = safe_malloc(alg);
127
    switch (alg)
128
    switch (alg)
128
    {
129
    {
129
        case MD5_BLOCK_SIZE :
130
        case MD5_BLOCK_SIZE :
130
            md5_hash(input_file, hash);
131
            md5_hash(input_file, hash);
131
            md5_flag=1;
132
            md5_flag=1;
132
        break;
133
        break;
133
 
134
 
134
        case SHA1_BLOCK_SIZE :
135
        case SHA1_BLOCK_SIZE :
135
            sha1_hash(input_file, hash);
136
            sha1_hash(input_file, hash);
136
            sha1_flag=1;
137
            sha1_flag=1;
137
        break;
138
        break;
138
 
139
 
139
        case SHA256_BLOCK_SIZE :
140
        case SHA256_BLOCK_SIZE :
140
            sha256_hash(input_file, hash);
141
            sha256_hash(input_file, hash);
141
            sha256_flag=1;
142
            sha256_flag=1;
142
        break;
143
        break;
143
    }
144
    }
144
    fclose(input_file);
145
    fclose(input_file);
145
    return hash;
146
    return hash;
146
}
147
}
147
 
148
 
148
void sprint_hash(BYTE *hash, char* hash_str, int hash_size) //à¥®¡à ã¥¬ ¤¢®¨ç­ë¥ ¤ ­­ë¥ ¨§ hash ¢ áâபã hash_str
149
void sprint_hash(BYTE *hash, char* hash_str, int hash_size) //à¥®¡à ã¥¬ ¤¢®¨ç­ë¥ ¤ ­­ë¥ ¨§ hash ¢ áâபã hash_str
149
{
150
{
150
    char block[3];
151
    char block[3];
151
    memset(hash_str, 0, MAX_HASH_LEN); // Žç¨é ¥¬ áâப㠤«ï strcat
152
    memset(hash_str, 0, MAX_HASH_LEN); // Žç¨é ¥¬ áâப㠤«ï strcat
152
    for(int i=0; i
153
    for(int i=0; i
153
    {
154
    {
154
        sprintf(block,"%02x", hash[i]);
155
        sprintf(block,"%02x", hash[i]);
155
        strcat(hash_str,block);
156
        strcat(hash_str,block);
156
    }
157
    }
157
    free(hash);
158
    free(hash);
158
}
159
}
159
 
160
 
160
void redraw_window() //¨á㥬 ®ª­®
161
void redraw_window() //¨á㥬 ®ª­®
161
{
162
{
162
    sprintf(title,VERSION, filename); // “áâ ­ ¢«¨¢ ¥¬ § £®«®¢®ª ®ª­ 
163
    sprintf(title,VERSION, filename); // “áâ ­ ¢«¨¢ ¥¬ § £®«®¢®ª ®ª­ 
163
    pos_t win_pos = get_mouse_pos(0); // ®«ãç ¥¬ ª®®à¤¨­ âë ªãàá®à 
164
    ksys_pos_t win_pos = _ksys_get_mouse_pos(KSYS_MOUSE_SCREEN_POS); // ®«ãç ¥¬ ª®®à¤¨­ âë ªãàá®à 
164
    begin_draw(); // ç¨­ ¥¬ à¨á®¢ ­¨¥ ¨­â¥àä¥©á  )
165
    _ksys_start_draw(); // ç¨­ ¥¬ à¨á®¢ ­¨¥ ¨­â¥àä¥©á  )
165
    sys_create_window(win_pos.x, win_pos.y, WINDOW_W, 150, title, sys_color_table.work_area, 0x14); // ‘®§¤ ñ¬ ®ª­®.
166
    _ksys_create_window(win_pos.x, win_pos.y, WINDOW_W, 150, title, sys_color_table.work_area, 0x14); // ‘®§¤ ñ¬ ®ª­®.
166
 
-
 
167
    edit_box_draw(&hash_edit_box); // ¨á㥬 edit_box
167
    edit_box_draw(&hash_edit_box); // ¨á㥬 edit_box
168
 
168
 
169
    define_button(X_W(10,60), Y_H(30,20), BTN_MD5, GREEN); // Ž¯à¥¤¥«ï¥¬ ª­®¯ªã md5
169
    _ksys_define_button(10, 30, 60, 20, BTN_MD5, GREEN); // Ž¯à¥¤¥«ï¥¬ ª­®¯ªã md5
170
    define_button(X_W(10,60), Y_H(60,20), BTN_SHA1, GREEN);// Ž¯à¥¤¥«ï¥¬ ª­®¯ªã sha1
170
    _ksys_define_button(10, 60, 60, 20, BTN_SHA1, GREEN);// Ž¯à¥¤¥«ï¥¬ ª­®¯ªã sha1
171
    define_button(X_W(10,60), Y_H(90,20), BTN_SHA256, GREEN);// Ž¯à¥¤¥«ï¥¬ ª­®¯ªã sha256
171
    _ksys_define_button(10, 90, 60, 20, BTN_SHA256, GREEN);// Ž¯à¥¤¥«ï¥¬ ª­®¯ªã sha256
172
 
172
 
173
    draw_text_sys("MD5:", 15, 34, 0,   0x90000000 | sys_color_table.work_button_text); // ¨é¥¬ ⥪áâ ­  ª­®¯ª å
173
    _ksys_draw_text("MD5:", 15, 34, 0,   0x90000000 | sys_color_table.work_button_text); // ¨é¥¬ ⥪áâ ­  ª­®¯ª å
174
    draw_text_sys("SHA1:", 15, 64, 0,  0x90000000 | sys_color_table.work_button_text);
174
    _ksys_draw_text("SHA1:", 15, 64, 0,  0x90000000 | sys_color_table.work_button_text);
175
    draw_text_sys("SHA256:", 15,94, 0, 0x90000000 | sys_color_table.work_button_text);
175
    _ksys_draw_text("SHA256:", 15,94, 0, 0x90000000 | sys_color_table.work_button_text);
176
 
176
 
177
    draw_text_sys(hash_str_md5, 80, 34, 0, 0x90000000 | sys_color_table.work_text); // ‚뢮¤¨¬ ª®­â஫ì­ë¥ áã¬¬ë ¢ ®ª­®
177
    _ksys_draw_text(hash_str_md5, 80, 34, 0, 0x90000000 | sys_color_table.work_text); // ‚뢮¤¨¬ ª®­â஫ì­ë¥ áã¬¬ë ¢ ®ª­®
178
    draw_text_sys(hash_str_sha1, 80, 64, 0, 0x90000000 | sys_color_table.work_text);
178
    _ksys_draw_text(hash_str_sha1, 80, 64, 0, 0x90000000 | sys_color_table.work_text);
-
 
179
    _ksys_draw_text(hash_str_sha256, 80, 94, 0, 0x90000000| sys_color_table.work_text);
179
    draw_text_sys(hash_str_sha256, 80, 94, 0, 0x90000000| sys_color_table.work_text);
180
 
180
 
181
    
181
    define_button(X_W(610,42), Y_H(30, 20), BTN_COPY_MD5, sys_color_table.work_button); // Ž¯à¥¤¥«ï¥¬ ª­®¯ª¨ ¤«ï ª®¯¨à®¢ ­¨ï
182
    _ksys_define_button(610, 30, 42, 20, BTN_COPY_MD5, sys_color_table.work_button); // Ž¯à¥¤¥«ï¥¬ ª­®¯ª¨ ¤«ï ª®¯¨à®¢ ­¨ï
182
    define_button(X_W(610,42), Y_H(60, 20), BTN_COPY_SHA1, sys_color_table.work_button);
183
    _ksys_define_button(610, 60, 42, 20, BTN_COPY_MD5, sys_color_table.work_button);
183
    define_button(X_W(610,42), Y_H(90, 20), BTN_COPY_SHA256, sys_color_table.work_button);
184
    _ksys_define_button(610, 90, 42, 20, BTN_COPY_MD5, sys_color_table.work_button);
184
 
185
 
185
    draw_text_sys("Copy", 615, 34, 0,   0x90000000 | sys_color_table.work_button_text); // ¨è¥¬ copy ­  ¢á¥å ª­®¯ª å ¤«ï ª®¯¨à®¢ ­¨ï
186
    _ksys_draw_text("Copy", 615, 34, 0,   0x90000000 | sys_color_table.work_button_text); // ¨è¥¬ copy ­  ¢á¥å ª­®¯ª å ¤«ï ª®¯¨à®¢ ­¨ï
186
    draw_text_sys("Copy", 615, 64, 0,  0x90000000 | sys_color_table.work_button_text);
187
    _ksys_draw_text("Copy", 615, 64, 0,  0x90000000 | sys_color_table.work_button_text);
187
    draw_text_sys("Copy", 615, 94, 0, 0x90000000 | sys_color_table.work_button_text);
188
    _ksys_draw_text("Copy", 615, 94, 0, 0x90000000 | sys_color_table.work_button_text);
188
 
189
 
189
    define_button(X_W(592,60), Y_H(120,20), BTN_CMP, GREEN); // Ž¯à¥¤¥«ï¥¬ ª­®¯ªã ¤«ï áà ¢­¥­¨ï ª®­â®«ì­ëå á㬬
190
    _ksys_define_button(592, 120, 60, 20, BTN_CMP, GREEN); // Ž¯à¥¤¥«ï¥¬ ª­®¯ªã ¤«ï áà ¢­¥­¨ï ª®­â®«ì­ëå á㬬
190
    draw_text_sys("Compare", 595, 124 , 0,0x90000000 | sys_color_table.work_button_text); // ¨è¥¬ â¥ªá ­  ª­®¯ª¥.
191
    _ksys_draw_text("Compare", 595, 124 , 0,0x90000000 | sys_color_table.work_button_text); // ¨è¥¬ â¥ªá ­  ª­®¯ª¥.
191
    define_button(X_W(540, 45), Y_H(120,20), BTN_PASTE, sys_color_table.work_button); //Š­®¯ª  ¤«ï ¢áâ ¢ª¨ (­¥à ¡®â ¥â)
192
    _ksys_define_button(540, 120, 45, 20, BTN_PASTE, sys_color_table.work_button); //Š­®¯ª  ¤«ï ¢áâ ¢ª¨ (­¥à ¡®â ¥â)
192
    draw_text_sys("Paste", 543, 124 , 0,0x90000000 | sys_color_table.work_button_text); // ’¥ªáâ paste ­  ª­®¯ª¥
193
    _ksys_draw_text("Paste", 543, 124 , 0,0x90000000 | sys_color_table.work_button_text); // ’¥ªáâ paste ­  ª­®¯ª¥
193
    end_draw();
194
    _ksys_end_draw();
194
}
195
}
195
 
196
 
196
void paste_to_edit_buffer()    // ‚áâ ¢¨âì ¨§ ¡ãää¥à  ®¡¬¥­ 
197
void paste_to_edit_buffer()    // ‚áâ ¢¨âì ¨§ ¡ãää¥à  ®¡¬¥­ 
197
{
198
{
198
    char *temp_buff=NULL;
199
    char *temp_buff=NULL;
199
    if(kol_clip_num()>0){
200
    if(_ksys_clip_num()>0){
200
        temp_buff=kol_clip_get(kol_clip_num()-1);
201
        temp_buff=_ksys_clip_get(_ksys_clip_num()-1);
201
        memset(edit_box_buff,0,MAX_HASH_LEN);
202
        memset(edit_box_buff,0,MAX_HASH_LEN);
202
        if(DATA(int, temp_buff,0)>0 && DATA(int,temp_buff,4)==CLIP_TEXT && DATA(int,temp_buff,8)==CLIP_CP866){
203
        if(DATA(int, temp_buff,0)>0 && DATA(int,temp_buff,4)==KSYS_CLIP_TEXT && DATA(int,temp_buff,8)==KSYS_CLIP_CP866){
203
            strncpy(edit_box_buff,temp_buff+12, MAX_HASH_LEN-1);
204
            strncpy(edit_box_buff,temp_buff+12, MAX_HASH_LEN-1);
204
            edit_box_set_text(&hash_edit_box,edit_box_buff);
205
            edit_box_set_text(&hash_edit_box,edit_box_buff);
205
            notify_show("'Pasted from clipboard!' -I");
206
            notify_show("'Pasted from clipboard!' -I");
206
            hash_edit_box.text_color = BLACK;
207
            hash_edit_box.text_color = BLACK;
207
            user_free(temp_buff);
208
            free(temp_buff);
208
        }
209
        }
209
    }
210
    }
210
}
211
}
211
 
212
 
212
void copy_to_clipboard(char *text) // Š®¯¨à®¢ âì ¢ ¡ãä¥à ®¡¬¥­ 
213
void copy_to_clipboard(char *text) // Š®¯¨à®¢ âì ¢ ¡ãä¥à ®¡¬¥­ 
213
{
214
{
214
    int text_hash_len = strlen(text)/2;
215
    int text_hash_len = strlen(text)/2;
215
    if(text_hash_len==MD5_BLOCK_SIZE  ||
216
    if(text_hash_len==MD5_BLOCK_SIZE  ||
216
       text_hash_len==SHA1_BLOCK_SIZE || 
217
       text_hash_len==SHA1_BLOCK_SIZE || 
217
       text_hash_len==SHA256_BLOCK_SIZE) // …᫨ ⥪áâ ï¥âáï åíè-áâப®©
218
       text_hash_len==SHA256_BLOCK_SIZE) // …᫨ ⥪áâ ï¥âáï åíè-áâப®©
218
    {
219
    {
219
        char *temp_buffer=safe_malloc(MAX_HASH_LEN+12); // ‚뤥«ï¥¬ ¯ ¬ïâì ¤«ï ¢à¥¬­­®£® ¡ãä¥à 
220
        char *temp_buffer=safe_malloc(MAX_HASH_LEN+12); // ‚뤥«ï¥¬ ¯ ¬ïâì ¤«ï ¢à¥¬­­®£® ¡ãä¥à 
220
        memset(temp_buffer, 0, MAX_HASH_LEN);   // ‡ ­ã«ï¥¬ ¡ãä¥à
221
        memset(temp_buffer, 0, MAX_HASH_LEN);   // ‡ ­ã«ï¥¬ ¡ãä¥à
221
        DATA(char,temp_buffer,4)=CLIP_TEXT;     // “áâ ­ ¢«¨¢ ¥¬ TEXT ¤«ï ¡ãä¥à (‘¬¥é¥­¨¥ 4 ¡ ©â )
222
        DATA(char,temp_buffer,4)=KSYS_CLIP_TEXT;     // “áâ ­ ¢«¨¢ ¥¬ TEXT ¤«ï ¡ãä¥à (‘¬¥é¥­¨¥ 4 ¡ ©â )
222
        DATA(char,temp_buffer,8)=CLIP_CP866;    // “áâ ­ ¢«¨¢ ¥¬ ª®¤¨à®¢ªã CP866(‘¬¥é¥­¨¥ 8 ¡ ©â)
223
        DATA(char,temp_buffer,8)=KSYS_CLIP_CP866;    // “áâ ­ ¢«¨¢ ¥¬ ª®¤¨à®¢ªã CP866(‘¬¥é¥­¨¥ 8 ¡ ©â)
223
        strncpy(temp_buffer+12, text, MAX_HASH_LEN-1); // Š®¯¨à㥬 ¤ ­­ë¥ ¨§ text ¢® ¢à¥¬¥­­ë© ¡ãä¥à(‘¬¥é¥­¨¥ 12 ¡ ©â)
224
        strncpy(temp_buffer+12, text, MAX_HASH_LEN-1); // Š®¯¨à㥬 ¤ ­­ë¥ ¨§ text ¢® ¢à¥¬¥­­ë© ¡ãä¥à(‘¬¥é¥­¨¥ 12 ¡ ©â)
224
        kol_clip_set(strlen(text)+12, temp_buffer); // ‚믮«­ï¥¬ á¨á⥬­ë© ¢ë§®¢ ¨ ¯¥à¥¬¥é ¥¬ ¤ ­­ë¥ ¨§ ¢à¥¬¥­­®£® ¡ãä¥à  ¢ ¡ãä¥à ®¡¬¥­ 
225
        _ksys_clip_set(strlen(text)+12, temp_buffer); // ‚믮«­ï¥¬ á¨á⥬­ë© ¢ë§®¢ ¨ ¯¥à¥¬¥é ¥¬ ¤ ­­ë¥ ¨§ ¢à¥¬¥­­®£® ¡ãä¥à  ¢ ¡ãä¥à ®¡¬¥­ 
225
        notify_show("'Copied to clipboard!' -I");   
226
        notify_show("'Copied to clipboard!' -I");   
226
        free(temp_buffer); // Žá¢®¡®¦ ¥¬ ¢à¥¬¥­­ë© ¡ãä¥à.
227
        free(temp_buffer); // Žá¢®¡®¦ ¥¬ ¢à¥¬¥­­ë© ¡ãä¥à.
227
    }
228
    }
228
}
229
}
229
 
230
 
230
void print_pending_calc(char *str) // ‚뢮¤¨¬ á®®¡é¥­¨¥ ® ⮬ çâ® ª®­â஫쭠ï á㬬¬  ¢ëç¨á«ï¥âáï.
231
void print_pending_calc(char *str) // ‚뢮¤¨¬ á®®¡é¥­¨¥ ® ⮬ çâ® ª®­â஫쭠ï á㬬¬  ¢ëç¨á«ï¥âáï.
231
{
232
{
232
  strcpy(str, "Please wait! Calculating checksum...");
233
  strcpy(str, "Please wait! Calculating checksum...");
233
  redraw_window();
234
  redraw_window();
234
}
235
}
235
 
236
 
236
bool calc_and_cmp(char *hash_str_universal,int alg) // ‚ëç¨á«ï¥¬ ª®­â஫ì­ãî á㬬㠨 áà ¢­¨¢ ¥¬ á edit_box_buff.
237
bool calc_and_cmp(char *hash_str_universal,int alg) // ‚ëç¨á«ï¥¬ ª®­â஫ì­ãî á㬬㠨 áà ¢­¨¢ ¥¬ á edit_box_buff.
237
{
238
{
238
   print_pending_calc(hash_str_universal);
239
   print_pending_calc(hash_str_universal);
239
   sprint_hash(check_sum(alg),hash_str_universal, alg);
240
   sprint_hash(check_sum(alg),hash_str_universal, alg);
240
   return !strcmp(edit_box_buff, hash_str_universal);
241
   return !strcmp(edit_box_buff, hash_str_universal);
241
}
242
}
242
 
243
 
243
bool hash_compare() // ƒ« ¢­ ï äã­ªæ¨ï ¤«ï áà ¢­¥­¨ï
244
bool hash_compare() // ƒ« ¢­ ï äã­ªæ¨ï ¤«ï áà ¢­¥­¨ï
244
{
245
{
245
   int alg=strlen(edit_box_buff)/2;
246
   int alg=strlen(edit_box_buff)/2;
246
   switch (alg){ // …᫨ ¢ëç¨á«¥­¨ï ¥éñ ­¥¡ë«®
247
   switch (alg){ // …᫨ ¢ëç¨á«¥­¨ï ¥éñ ­¥¡ë«®
247
        case MD5_BLOCK_SIZE:
248
        case MD5_BLOCK_SIZE:
248
            if(md5_flag){
249
            if(md5_flag){
249
                return !strcmp(edit_box_buff,hash_str_md5);
250
                return !strcmp(edit_box_buff,hash_str_md5);
250
            }else{
251
            }else{
251
                return calc_and_cmp(hash_str_md5,alg);
252
                return calc_and_cmp(hash_str_md5,alg);
252
            }
253
            }
253
            break;
254
            break;
254
        case SHA1_BLOCK_SIZE:
255
        case SHA1_BLOCK_SIZE:
255
            if(sha1_flag){
256
            if(sha1_flag){
256
                return !strcmp(edit_box_buff,hash_str_sha1);
257
                return !strcmp(edit_box_buff,hash_str_sha1);
257
            }else{
258
            }else{
258
                return calc_and_cmp(hash_str_sha1,alg);
259
                return calc_and_cmp(hash_str_sha1,alg);
259
            }
260
            }
260
            break;
261
            break;
261
        case SHA256_BLOCK_SIZE:
262
        case SHA256_BLOCK_SIZE:
262
            if(sha256_flag){
263
            if(sha256_flag){
263
                return !strcmp(edit_box_buff,hash_str_sha256);
264
                return !strcmp(edit_box_buff,hash_str_sha256);
264
            }else{
265
            }else{
265
                return calc_and_cmp(hash_str_sha256,alg);
266
                return calc_and_cmp(hash_str_sha256,alg);
266
            }
267
            }
267
            break;
268
            break;
268
        default:
269
        default:
269
            return FALSE;
270
            return FALSE;
270
            break;
271
            break;
271
    }
272
    }
272
}
273
}
273
 
274
 
274
int main(int argc, char** argv)
275
int main(int argc, char** argv)
275
{
276
{
276
    kolibri_boxlib_init(); // ‡ £à㦠¥¬ boxlib
277
    kolibri_boxlib_init(); // ‡ £à㦠¥¬ boxlib
277
    if(argc<2){ // …᫨  à£ã¬¥­â®¢ ­¥â, â® § ¯ã᪠¥¬ ¤¨ «®£ ¢ë¡®à  ä 
278
    if(argc<2){ // …᫨  à£ã¬¥­â®¢ ­¥â, â® § ¯ã᪠¥¬ ¤¨ «®£ ¢ë¡®à  ä 
278
        kolibri_dialog_init(); // § £à㦠¥¬ proc_lib(libdialog)
279
        kolibri_dialog_init(); // § £à㦠¥¬ proc_lib(libdialog)
279
        open_dialog* dialog = kolibri_new_open_dialog(OPEN,0, 0, 420, 320);
280
        open_dialog* dialog = kolibri_new_open_dialog(OPEN,0, 0, 420, 320);
280
        OpenDialog_init(dialog);
281
        OpenDialog_init(dialog);
281
        OpenDialog_start(dialog); 
282
        OpenDialog_start(dialog); 
282
        if(dialog->status==SUCCESS){ // …᫨ ä ©« ¢ë¡à ­
283
        if(dialog->status==SUCCESS){ // …᫨ ä ©« ¢ë¡à ­
283
            global_var_init(strlen(dialog->openfile_path));
284
            global_var_init(strlen(dialog->openfile_path));
284
            strcpy(filename, dialog->openfile_path);  
285
            strcpy(filename, dialog->openfile_path);  
285
        }else{ // …᫨ ä ©« ­¥ ¢ë¡à ­
286
        }else{ // …᫨ ä ©« ­¥ ¢ë¡à ­
286
            notify_show("'No file selected!' -E");
287
            notify_show("'No file selected!' -E");
287
            exit(0);
288
            exit(0);
288
        }
289
        }
289
        free(dialog);
290
        free(dialog);
290
    }else{
291
    }else{
291
        global_var_init(strlen(argv[1]));
292
        global_var_init(strlen(argv[1]));
292
        strcpy(filename, argv[1]);
293
        strcpy(filename, argv[1]);
293
    }
294
    }
294
 
295
 
295
    if(NULL==fopen(filename,"rb")){ // …᫨ ä ©«  ­¥â ¨«¨ ­¥ ®âªà뢠¥âáï
296
    if(NULL==fopen(filename,"rb")){ // …᫨ ä ©«  ­¥â ¨«¨ ­¥ ®âªà뢠¥âáï
296
        notify_show("'File not found!' -E");
297
        notify_show("'File not found!' -E");
297
        exit(0);
298
        exit(0);
298
    }
299
    }
299
 
-
 
300
    if(GetScreenSize()/65536
300
    if(_ksys_screen_size().x
301
        notify_show("'Low screen resolution! Program will not display correctrly!' -W");
301
        notify_show("'Low screen resolution! Program will not display correctrly!' -W");
302
    }
302
    }
303
 
303
 
304
    int gui_event; // ¥à¥¬¥­­ ï ¤«ï åà ­¥­¨ï ᮡëâ¨ï
304
    int gui_event; // ¥à¥¬¥­­ ï ¤«ï åà ­¥­¨ï ᮡëâ¨ï
305
    uint32_t pressed_button = 0; // Š®¤ ­ ¦ â®© ª­®¯ª¨ ¢ ®ª­¥
305
    uint32_t pressed_button = 0; // Š®¤ ­ ¦ â®© ª­®¯ª¨ ¢ ®ª­¥
306
 
306
 
307
    get_system_colors(&sys_color_table);
307
    _ksys_get_system_colors(&sys_color_table);
308
    hash_edit_box.shift_color=sys_color_table.work_button;
308
    hash_edit_box.shift_color=sys_color_table.work_button;
309
 
309
 
310
    set_event_mask(0xC0000027);// “áâ ­ ¢«¨¢ ¥¬ ¬ áªã ᮡë⨩
310
    _ksys_set_event_mask(0xC0000027);// “áâ ­ ¢«¨¢ ¥¬ ¬ áªã ᮡë⨩
311
    do // –¨ª« ®¡à ¡®âª¨ ᮡë⨩
311
    do // –¨ª« ®¡à ¡®âª¨ ᮡë⨩
312
    {
312
    {
313
        gui_event = get_os_event(); // ®«ãç ¥¬ ᮡë⨥
313
        gui_event = _ksys_get_event(); // ®«ãç ¥¬ ᮡë⨥
314
        switch(gui_event){ // Ž¡à ¡ â뢠¥¬ ᮡëâ¨ï
314
        switch(gui_event){ // Ž¡à ¡ â뢠¥¬ ᮡëâ¨ï
315
            case KOLIBRI_EVENT_NONE:
315
            case KSYS_EVENT_NONE:
316
                break;
316
                break;
317
            case KOLIBRI_EVENT_REDRAW:
317
            case KSYS_EVENT_REDRAW:
318
                redraw_window();
318
                redraw_window();
319
                break;
319
                break;
320
            case KOLIBRI_EVENT_MOUSE:
320
            case KSYS_EVENT_MOUSE:
321
                edit_box_mouse(&hash_edit_box);
321
                edit_box_mouse(&hash_edit_box);
322
                break;        
322
                break;        
323
            case KOLIBRI_EVENT_KEY:
323
            case KSYS_EVENT_KEY:
324
                hash_edit_box.text_color = BLACK;
324
                hash_edit_box.text_color = BLACK;
325
                edit_box_key(&hash_edit_box,get_key().val);
325
                edit_box_key(&hash_edit_box, _ksys_get_key().val);
326
                break;
326
                break;
327
            case KOLIBRI_EVENT_BUTTON: // ‘®¡ë⨥ ®¡à ¡®âª¨ ª­®¯®ª
327
            case KSYS_EVENT_BUTTON: // ‘®¡ë⨥ ®¡à ¡®âª¨ ª­®¯®ª
328
                pressed_button = get_os_button(); // ®«ã祭¨¥ ª®¤  ­ ¦ â®© ª­®¯ª¨.
328
                pressed_button = _ksys_get_button(); // ®«ã祭¨¥ ª®¤  ­ ¦ â®© ª­®¯ª¨.
329
                switch (pressed_button){ // à®¢¥àª  ª ª ï ª­®¯ª  ¡ë«  ­ ¦ â 
329
                switch (pressed_button){ // à®¢¥àª  ª ª ï ª­®¯ª  ¡ë«  ­ ¦ â 
330
                    case BTN_MD5:
330
                    case BTN_MD5:
331
                        print_pending_calc(hash_str_md5);
331
                        print_pending_calc(hash_str_md5);
332
                        sprint_hash(check_sum(MD5_BLOCK_SIZE),hash_str_md5, MD5_BLOCK_SIZE);
332
                        sprint_hash(check_sum(MD5_BLOCK_SIZE),hash_str_md5, MD5_BLOCK_SIZE);
333
                        break;
333
                        break;
334
                    case BTN_SHA1:
334
                    case BTN_SHA1:
335
                        print_pending_calc(hash_str_sha1);
335
                        print_pending_calc(hash_str_sha1);
336
                        sprint_hash(check_sum(SHA1_BLOCK_SIZE),hash_str_sha1, SHA1_BLOCK_SIZE);
336
                        sprint_hash(check_sum(SHA1_BLOCK_SIZE),hash_str_sha1, SHA1_BLOCK_SIZE);
337
                        break;
337
                        break;
338
                    case BTN_SHA256:
338
                    case BTN_SHA256:
339
                        print_pending_calc(hash_str_sha256);
339
                        print_pending_calc(hash_str_sha256);
340
                        sprint_hash(check_sum(SHA256_BLOCK_SIZE),hash_str_sha256, SHA256_BLOCK_SIZE);
340
                        sprint_hash(check_sum(SHA256_BLOCK_SIZE),hash_str_sha256, SHA256_BLOCK_SIZE);
341
                        break;
341
                        break;
342
                    case BTN_COPY_MD5:
342
                    case BTN_COPY_MD5:
343
                        copy_to_clipboard(hash_str_md5);
343
                        copy_to_clipboard(hash_str_md5);
344
                        break;
344
                        break;
345
                    case BTN_COPY_SHA1:
345
                    case BTN_COPY_SHA1:
346
                        copy_to_clipboard(hash_str_sha1);
346
                        copy_to_clipboard(hash_str_sha1);
347
                        break;
347
                        break;
348
                    case BTN_COPY_SHA256:
348
                    case BTN_COPY_SHA256:
349
                        copy_to_clipboard(hash_str_sha256);
349
                        copy_to_clipboard(hash_str_sha256);
350
                        break;
350
                        break;
351
                    case BTN_PASTE:
351
                    case BTN_PASTE:
352
                        paste_to_edit_buffer();
352
                        paste_to_edit_buffer();
353
                        break;
353
                        break;
354
                    case BTN_CMP:
354
                    case BTN_CMP:
355
                        if(hash_compare()){
355
                        if(hash_compare()){
356
                            notify_show("'The checksum matches :)' -OK");
356
                            notify_show("'The checksum matches :)' -OK");
357
                            hash_edit_box.text_color = GREEN; // “áâ ­ ¢«¨¢ ¥¬ ⥪áâ ¢¢®¤  §¥«ñ­ë¬ ¥á«¨ ª®­â஫쭠ï á㬬  ᮢ¯ ¤ ¥â
357
                            hash_edit_box.text_color = GREEN; // “áâ ­ ¢«¨¢ ¥¬ ⥪áâ ¢¢®¤  §¥«ñ­ë¬ ¥á«¨ ª®­â஫쭠ï á㬬  ᮢ¯ ¤ ¥â
358
                        }else{
358
                        }else{
359
                            notify_show("'The checksum does not match! :(' -W");
359
                            notify_show("'The checksum does not match! :(' -W");
360
                            hash_edit_box.text_color = RED; // “áâ ­ ¢«¨¢ ¥¬ ⥪áâ ¢¢®¤  ªà á­ë¬ ¥á«¨ ª®­â஫쭠ï áã¬¬ë ­¥ ᮢ¯ ¤ ¥â
360
                            hash_edit_box.text_color = RED; // “áâ ­ ¢«¨¢ ¥¬ ⥪áâ ¢¢®¤  ªà á­ë¬ ¥á«¨ ª®­â஫쭠ï áã¬¬ë ­¥ ᮢ¯ ¤ ¥â
361
                        }
361
                        }
362
                        break;
362
                        break;
363
                    case BTN_QUIT:
363
                    case BTN_QUIT:
364
                        exit(0);
364
                        exit(0);
365
                        break;
365
                        break;
366
                }
366
                }
367
                redraw_window();
367
                redraw_window();
368
                break; 
368
                break; 
369
        }
369
        }
370
    }while(1);
370
    }while(1);
371
    exit(0);
371
    exit(0);
372
}
372
}
373
>
373
>