Subversion Repositories Kolibri OS

Rev

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

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