Subversion Repositories Kolibri OS

Rev

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

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