Subversion Repositories Kolibri OS

Rev

Rev 6050 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5614 punk_joker 1
#ifndef AUTOBUILD
2
	#include "lang.h--"
3
#endif
4
 
5612 punk_joker 5
#define MEMSIZE 0x100000
6
#include "..\lib\kolibri.h"
7
#include "..\lib\strings.h"
8
#include "..\lib\mem.h"
9
#include "..\lib\file_system.h"
10
#include "..\lib\dll.h"
11
#include "..\lib\gui.h"
5915 punk_joker 12
#include "..\lib\obj\iconv.h"
5612 punk_joker 13
#include "..\lib\obj\box_lib.h"
14
#include "..\lib\obj\proc_lib.h"
15
#include "..\lib\obj\libio_lib.h"
5915 punk_joker 16
//#include "..\lib\obj\wword.h"
5612 punk_joker 17
 
18
#ifdef LANG_RUS
19
	?define T_FILE "Файл"
20
	?define T_TYPE "Тип"
21
	?define T_SIZE "Размер"
5915 punk_joker 22
 
5612 punk_joker 23
	?define MENU1 "Файл"
24
	?define MENU1_SUBMENU1 "Открыть"
25
	?define MENU1_SUBMENU2 "Закрыть"
26
	?define MENU1_SUBMENU3 "Свойства"
27
	?define MENU1_SUBMENU4 "Выход"
5915 punk_joker 28
 
29
	?define MENU2 "Кодировка"
30
	?define MENU2_SUBMENU1 "UTF-8"
31
	?define MENU2_SUBMENU2 "KOI8-RU"
32
	?define MENU2_SUBMENU3 "CP1251"
33
	?define MENU2_SUBMENU4 "CP1252"
34
	?define MENU2_SUBMENU5 "ISO8859-5"
35
	?define MENU2_SUBMENU6 "CP866"
36
 
37
	?define ERROR_LOAD_BOX_LIB "Ошибка при загрузке библиотеки - box_lib.obj"
38
	?define ERROR_LOAD_LIBIO "Ошибка при загрузке библиотеки - libio.obj"
39
	?define ERROR_LOAD_PROC_LIB "Ошибка при загрузке библиотеки - proc_lib.obj"
5612 punk_joker 40
#else
41
	?define T_FILE "File"
42
	?define T_TYPE "Type"
43
	?define T_SIZE "Size"
44
	?define MENU1 "File"
5915 punk_joker 45
 
5612 punk_joker 46
	?define MENU1_SUBMENU1 "Open"
47
	?define MENU1_SUBMENU2 "Close"
48
	?define MENU1_SUBMENU3 "Properties"
49
	?define MENU1_SUBMENU4 "Exit"
5915 punk_joker 50
 
51
	?define MENU2 "Encoding"
52
	?define MENU2_SUBMENU1 "UTF-8"
53
	?define MENU2_SUBMENU2 "KOI8-RU"
54
	?define MENU2_SUBMENU3 "CP1251"
55
	?define MENU2_SUBMENU4 "CP1252"
56
	?define MENU2_SUBMENU5 "ISO8859-5"
57
	?define MENU2_SUBMENU6 "CP866"
58
 
59
	?define ERROR_LOAD_BOX_LIB "Error while loading library - box_lib.obj"
60
	?define ERROR_LOAD_LIBIO "Error while loading library - libio.obj"
61
	?define ERROR_LOAD_PROC_LIB "Error while loading library - proc_lib.obj"
5612 punk_joker 62
#endif
63
 
64
#ifdef LANG_RUS
5915 punk_joker 65
struct menu1_text_struct
5612 punk_joker 66
{
67
	char menu[5];
68
	char sub_menu1[8];
69
	char sub_menu2[8];
70
	//char sub_menu3[9];
71
	char sub_menu4[6];
72
	byte end;
73
};
5915 punk_joker 74
struct menu2_text_struct
75
{
76
	char menu[10];
77
	char sub_menu1[6];
78
	char sub_menu2[8];
79
	char sub_menu3[7];
80
	char sub_menu4[7];
81
	char sub_menu5[10];
82
	char sub_menu6[6];
83
	byte end;
84
};
5612 punk_joker 85
#else
5915 punk_joker 86
struct menu1_text_struct
5612 punk_joker 87
{
88
	char menu[5];
89
	char sub_menu1[5];
90
	char sub_menu2[6];
91
	//char sub_menu3[11];
92
	char sub_menu4[5];
93
	byte end;
94
};
5915 punk_joker 95
struct menu2_text_struct
96
{
97
	char menu[9];
98
	char sub_menu1[6];
99
	char sub_menu2[8];
100
	char sub_menu3[7];
101
	char sub_menu4[7];
102
	char sub_menu5[10];
103
	char sub_menu6[6];
104
	byte end;
105
};
5612 punk_joker 106
#endif
107
 
5915 punk_joker 108
#define TITLE "Calypte v0.15"
109
 
5612 punk_joker 110
#define TOPPANELH 19
111
#define BOTPANELH 10
112
#define WIN_W 600
113
#define WIN_H 400
114
 
115
proc_info Form;
5674 pavelyakov 116
 
5612 punk_joker 117
byte active_properties = 0;
5915 punk_joker 118
int encoding;
5612 punk_joker 119
dword properties_window;
120
 
121
#include "include\properties.h"
122
 
123
struct filter
124
{
125
	dword size;
126
	char ext1[4];
127
	//char ext2[4];
128
	//char ext3[4];
129
	//char ext4[4];
130
	byte end;
131
};
132
 
133
filter filter2;
5915 punk_joker 134
menu1_text_struct menu1_text_area1;
135
menu2_text_struct menu2_text_area2;
5612 punk_joker 136
 
5915 punk_joker 137
char win_title[4096] = "Calypte v0.15";
5612 punk_joker 138
 
5915 punk_joker 139
int
140
	cur_row=0,
141
	read=0,
142
	pos=0,
143
	row_num=0,
144
	col_count=0,
145
	row_count=0;
146
 
147
dword old_width,old_height;
5612 punk_joker 148
 
149
proc_info pr_inf;
150
char communication_area_name[] = "FFFFFFFF_open_dialog";
151
byte plugin_path[4096];
152
char default_dir[] = "/rd/1";
153
char open_dialog_path[] = "/rd/1/File managers/opendial"; //opendial
154
byte openfile_path[2048];
155
byte filename_area[4096];
156
 
157
opendialog o_dialog = {0, #pr_inf, #communication_area_name, 0, #plugin_path, #default_dir, #open_dialog_path, #draw_window, 0, #openfile_path, #filename_area, #filter2, 420, 200, 320, 120};
158
 
159
dword bufpointer;
160
dword bufsize;
161
dword draw_sruct;
162
 
5915 punk_joker 163
menu_data menudata1 = {0, 40, 2, 15, 2, #menu1_text_area1.menu, #menu1_text_area1.sub_menu1, #menu1_text_area1.end, 0, 0, 80, 2, 100, 18, 0xEEEEEE, 0xFF, 0xEEEEEE, 0, 0, 0, #Form, 0, 0, 0, 16, 0, 0, 0x00CC00, 0, 0xFFFFFF, 0, 8, 0, 0};
164
menu_data menudata2 = {0, 70, 44, 15, 2, #menu2_text_area2.menu, #menu2_text_area2.sub_menu1, #menu2_text_area2.end, 0, 0, 80, 44, 100, 18, 0xEEEEEE, 0xFF, 0xEEEEEE, 0, 0, 0, #Form, 0, 0, 0, 16, 0, 0, 0x00CC00, 0, 0xFFFFFF, 0, 8, 0, 0};
5612 punk_joker 165
 
166
void main()
167
{
5705 punk_joker 168
	int id;
5612 punk_joker 169
 
170
	strcpy(#filter2.ext1, "TXT");
171
	//strcpy(#filter2.ext2, "ASM");
172
	//strcpy(#filter2.ext3, "INC\0");
173
	//strcpy(#filter2.ext4, "\0");
174
	filter2.size = 8;
175
	filter2.end = 0;
176
 
5915 punk_joker 177
	strcpy(#menu1_text_area1.menu, MENU1);
178
	strcpy(#menu1_text_area1.sub_menu1, MENU1_SUBMENU1);
179
	strcpy(#menu1_text_area1.sub_menu2, MENU1_SUBMENU2);
180
	//strcpy(#menu1_text_area1.sub_menu3, MENU1_SUBMENU3);
181
	strcpy(#menu1_text_area1.sub_menu4, MENU1_SUBMENU4);
182
	menu1_text_area1.end = 0;
5612 punk_joker 183
 
5915 punk_joker 184
	strcpy(#menu2_text_area2.menu, MENU2);
185
	strcpy(#menu2_text_area2.sub_menu1, MENU2_SUBMENU1);
186
	strcpy(#menu2_text_area2.sub_menu2, MENU2_SUBMENU2);
187
	strcpy(#menu2_text_area2.sub_menu3, MENU2_SUBMENU3);
188
	strcpy(#menu2_text_area2.sub_menu4, MENU2_SUBMENU4);
189
	strcpy(#menu2_text_area2.sub_menu5, MENU2_SUBMENU5);
190
	strcpy(#menu2_text_area2.sub_menu6, MENU2_SUBMENU6);
191
	menu2_text_area2.end = 0;
192
 
193
	//mem_Init();
5626 leency 194
	load_dll(boxlib, #box_lib_init,0);
195
	load_dll(libio, #libio_init,1);
5915 punk_joker 196
	load_dll(iconv_lib, #iconv_open,0);
5626 leency 197
	load_dll(Proc_lib, #OpenDialog_init,0);
5612 punk_joker 198
	OpenDialog_init stdcall (#o_dialog);
5915 punk_joker 199
 
5612 punk_joker 200
	SetEventMask(0x27);
201
	loop()
202
	{
203
      switch(WaitEvent())
204
      {
205
		case evMouse:
5915 punk_joker 206
			menu_bar_mouse stdcall (#menudata1);
207
			menu_bar_mouse stdcall (#menudata2);
208
			if (menudata1.click==1)
5612 punk_joker 209
			{
210
				switch(menudata1.cursor_out)
211
				{
212
					case 1:
213
						OpenDialog_start stdcall (#o_dialog);
214
						OpenFile(#openfile_path);
215
						Prepare();
216
						draw_window();
217
						break;
218
					case 2:
219
						read = 0;
220
						strcpy(#win_title, TITLE);
221
						FreeBuf();
222
						draw_window();
223
						break;
224
					case 3:
225
						if (!active_properties)
226
						{
227
							SwitchToAnotherThread();
228
							properties_window = CreateThread(#properties_dialog, #properties_stak+4092);
229
							break;
230
						}
231
						else
232
						{
233
							ActivateWindow(GetProcessSlot(properties_window));
234
						}
235
						break;
236
					case 4:
237
						ExitProcess();
238
				}
239
			}
5915 punk_joker 240
			if (menudata2.click==1)
241
			{
242
				encoding = menudata2.cursor_out - 1;
243
				OpenFile(#openfile_path);
244
				Prepare();
245
				draw_window();
246
			}
5612 punk_joker 247
			break;
248
 
249
        case evButton:
5915 punk_joker 250
			id=GetButtonID();
251
            if (id==1) || (id==10) ExitProcess();
5612 punk_joker 252
			break;
5915 punk_joker 253
 
5612 punk_joker 254
        case evKey:
5915 punk_joker 255
            GetKeys();
5706 leency 256
			if (TestBit(key_modifier, 2))
5612 punk_joker 257
			{
5705 punk_joker 258
				switch(key_scancode)
259
				{
260
					case 024:  //Ctrl+O
261
						OpenDialog_start stdcall (#o_dialog);
262
						OpenFile(#openfile_path);
263
						Prepare();
264
						draw_window();
265
						break;
266
				}
267
				break;
268
			}
269
			switch (key_scancode)
270
			{
5915 punk_joker 271
				if (Form.status_window>2) break;
272
				case SCAN_CODE_HOME:
273
					cur_row = 0;
274
					DrawText();
275
					break;
5705 punk_joker 276
				case SCAN_CODE_END:
5915 punk_joker 277
					cur_row = row_num - row_count - 1;
278
					DrawText();
279
					break;
5705 punk_joker 280
				case SCAN_CODE_UP:
5915 punk_joker 281
					if (!cur_row) break;
282
					else cur_row = cur_row-1;
283
					DrawText();
284
					break;
5705 punk_joker 285
				case SCAN_CODE_DOWN:
5915 punk_joker 286
					if (cur_row+row_count>=row_num) break;
287
					cur_row = cur_row+1;
288
					DrawText();
289
					break;
5705 punk_joker 290
				case SCAN_CODE_PGUP:
5915 punk_joker 291
					if (!cur_row) break;
292
					if (cur_row
293
					else cur_row = cur_row-row_count;
5612 punk_joker 294
					DrawText();
295
					break;
5705 punk_joker 296
				case SCAN_CODE_PGDN:
5915 punk_joker 297
					if (cur_row+row_count>row_num) break;
298
					cur_row = cur_row+row_count;
5612 punk_joker 299
					DrawText();
300
					break;
301
			}
302
			break;
303
 
304
         case evReDraw:
305
			draw_window();
306
			break;
307
      }
308
   }
309
}
310
 
311
 
312
void draw_window()
313
{
5674 pavelyakov 314
	system.color.get();
6746 leency 315
	DefineAndDrawWindow(GetScreenWidth()-WIN_W/2,GetScreenHeight()-WIN_H/2,WIN_W,WIN_H,0x73,0xFFFFFF,#win_title,0);
5612 punk_joker 316
	GetProcessInfo(#Form, SelfInfo);
5674 pavelyakov 317
	DrawBar(0, 0, Form.cwidth, TOPPANELH, system.color.work);
318
	DrawBar(0, Form.cheight-BOTPANELH, Form.cwidth, BOTPANELH, system.color.work);
5612 punk_joker 319
 
5674 pavelyakov 320
	menudata1.bckg_col = system.color.work;
5915 punk_joker 321
	menudata2.bckg_col = system.color.work;
5612 punk_joker 322
	menu_bar_draw stdcall (#menudata1);
5915 punk_joker 323
	menu_bar_draw stdcall (#menudata2);
5612 punk_joker 324
 
325
	if (old_width!=Form.width) || (old_height!=Form.height)
326
	{
327
		old_width = Form.width;
328
		old_height = Form.height;
5915 punk_joker 329
 
330
		col_count = Form.cwidth/6;
331
		row_count = Form.cheight-BOTPANELH-TOPPANELH-2;
332
		row_count = row_count/10;
333
 
5612 punk_joker 334
		if (read==1) Prepare();
335
	}
336
	if (read==1)
337
	{
338
		DrawText();
339
	}
5915 punk_joker 340
	else DrawBar(0, TOPPANELH, Form.cwidth, Form.cheight-BOTPANELH-TOPPANELH, 0xFFFFFF);
5612 punk_joker 341
}
342
 
343
void OpenFile(dword path)
344
{
345
	strcpy(#win_title, TITLE);
346
	strcat(#win_title, " - ");
347
	strcat(#win_title, path);
348
	file_size stdcall (path);
349
	bufsize = EBX;
350
	if (bufsize)
351
	{
352
		mem_Free(bufpointer);
353
		bufpointer = mem_Alloc(bufsize);
354
		ReadFile(0, bufsize, bufpointer, path);
355
		read=1;
356
	}
5915 punk_joker 357
	if (encoding!=CH_CP866) ChangeCharset(charsets[encoding], "CP866", bufpointer);
5612 punk_joker 358
}
359
 
360
void FreeBuf()
361
{
362
	int i;
5915 punk_joker 363
	for (i=0; i
5612 punk_joker 364
	{
365
		mem_Free(DSDWORD[i*4+draw_sruct]);
366
	}
367
	mem_Free(draw_sruct);
368
	mem_Free(bufpointer);
369
}
370
 
371
void Prepare()
372
{
373
	int i, sub_pos;
374
	int len_str = 0;
375
	byte do_eof = 0;
376
	word bukva[2];
377
	dword address;
5915 punk_joker 378
	row_num = 0;
5612 punk_joker 379
	while(1)
380
	{
381
		while(1)
382
		{
5915 punk_joker 383
			bukva = DSBYTE[bufpointer+pos+len_str];
5612 punk_joker 384
			if (bukva=='\0')
385
			{
386
				do_eof = 1;
387
				break;
388
			}
389
			if (bukva==0x0a) break;
390
			else len_str++;
391
		}
5915 punk_joker 392
		if (len_str<=col_count)
5612 punk_joker 393
		{
5915 punk_joker 394
			pos=pos+len_str+1;
395
			row_num++;
5612 punk_joker 396
		}
397
		else
398
		{
5915 punk_joker 399
			pos=pos+col_count;
400
			row_num++;
5612 punk_joker 401
		}
402
		len_str = 0;
403
		if (do_eof) break;
404
	}
405
	mem_Free(draw_sruct);
5915 punk_joker 406
	draw_sruct = mem_Alloc(row_num*4);
407
	pos=0;
5612 punk_joker 408
	sub_pos=0;
409
	len_str = 0;
410
	do_eof = 0;
411
	while(1)
412
	{
413
		while(1)
414
		{
5915 punk_joker 415
			bukva = DSBYTE[bufpointer+pos+len_str];
5612 punk_joker 416
			if (bukva=='\0')
417
			{
418
				do_eof = 1;
419
				break;
420
			}
421
			if (bukva==0x0a) break;
422
			else len_str++;
423
		}
5915 punk_joker 424
		if (len_str<=col_count)
5612 punk_joker 425
		{
426
			address = mem_Alloc(len_str+1);
427
			ESDWORD[sub_pos*4+draw_sruct] = address;
5915 punk_joker 428
			strlcpy(DSDWORD[sub_pos*4+draw_sruct], bufpointer+pos, len_str);
429
			pos=pos+len_str+1;
5612 punk_joker 430
			sub_pos++;
431
		}
432
		else
433
		{
434
			address = mem_Alloc(len_str+1);
435
			ESDWORD[sub_pos*4+draw_sruct] = address;
5915 punk_joker 436
			strlcpy(DSDWORD[sub_pos*4+draw_sruct], bufpointer+pos, col_count);
437
			pos=pos+col_count;
5612 punk_joker 438
			sub_pos++;
439
		}
440
		len_str = 0;
5915 punk_joker 441
		if (pos>=bufsize-1) break;
5612 punk_joker 442
	}
5915 punk_joker 443
	pos=0;
5612 punk_joker 444
}
445
 
446
void DrawText()
447
{
448
	int i, top, num_line;
5915 punk_joker 449
	if (row_num
5612 punk_joker 450
	else
451
	{
5915 punk_joker 452
		if (row_num-cur_row<=row_count) top = row_num-cur_row-1;
453
		else top = row_count;
5612 punk_joker 454
	}
5915 punk_joker 455
	DrawBar(0, TOPPANELH, Form.cwidth, 3, 0xFFFFFF);
456
	for (i=0, num_line = cur_row; i
5612 punk_joker 457
	{
5915 punk_joker 458
		DrawBar(0, i*10+TOPPANELH+3, Form.cwidth, 10, 0xFFFFFF);
459
		WriteText(2, i*10+TOPPANELH+3, 0x80, 0x000000, DSDWORD[num_line*4+draw_sruct]);
5612 punk_joker 460
	}
5915 punk_joker 461
	DrawBar(0, i*10+TOPPANELH+3, Form.cwidth, -i*10-TOPPANELH-BOTPANELH+Form.cheight, 0xFFFFFF);
5612 punk_joker 462
}
463
 
464
stop:
465
char properties_stak[4096];