Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
1449 IgorA 1
;Огромная благодарность Maxxxx32, Diamond, Heavyiron
2
;и другим программистам, а также
3
;Теплову Алексею ( www.lrz.land.ru)
1338 IgorA 4
 
5
 
6
use32
7
  org 0x0
1449 IgorA 8
  db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
1338 IgorA 9
  dd 0x01
10
  dd start
1449 IgorA 11
  dd i_end ; размер приложения
1338 IgorA 12
  dd mem
13
  dd stacktop
1449 IgorA 14
  dd file_name ; command line
1338 IgorA 15
  dd sys_path
16
 
17
MAX_COLOR_WORD_LEN equ 40
18
maxChars equ 100002 ;(...+2)
1457 IgorA 19
BUF_SIZE equ 1000 ;buffer for copy|paste
20
maxSyntaxFileSize equ 410000
1338 IgorA 21
 
1449 IgorA 22
include '../../proc32.inc'
1338 IgorA 23
include '../../macros.inc'
1390 IgorA 24
include '../../develop/libraries/box_lib/load_lib.mac'
1449 IgorA 25
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
1338 IgorA 26
 
1343 IgorA 27
include 'lang.inc'
1467 IgorA 28
include '../../develop/libraries/box_lib/asm/trunk/opendial.mac'
29
use_OpenDialog
30
 
1338 IgorA 31
include 't_data.inc'
32
include 'strlen.inc'
33
include 't_draw.inc' ;draw main window functions
1457 IgorA 34
include 't_button.inc' ;text work functions
1338 IgorA 35
 
36
@use_library
37
 
1456 IgorA 38
align 4
1338 IgorA 39
start:
1456 IgorA 40
  mcall 48,3,sc,sizeof.system_colors
1338 IgorA 41
 
42
  mcall 68,11
43
  or eax,eax
44
  jz button.exit
45
 
46
  mcall 66,1,1 ;scan code
47
  ;mcall 26,2,1,conv_tabl
1456 IgorA 48
  mcall 40,0x27
1338 IgorA 49
 
1456 IgorA 50
  mov esi,file_name
51
  call strlen
52
  mov ecx,eax
1467 IgorA 53
  mov edi,openfile_path
1456 IgorA 54
  rep movsb ;копируем имя файла в буфер edit1
1338 IgorA 55
 
1456 IgorA 56
load_libraries l_libs_start,load_lib_end
1338 IgorA 57
 
1456 IgorA 58
;проверка на сколько удачно загузилась наша либа
59
	mov	ebp,lib0
60
	cmp	dword [ebp+ll_struc_size-4],0
61
	jz	@f
62
	mcall -1 ;exit not correct
63
@@:
64
	mov	ebp,lib1 ;
65
	cmp	dword [ebp+ll_struc_size-4],0
66
	jz	@f
67
	mcall -1 ;exit not correct
68
@@:
1338 IgorA 69
 
1456 IgorA 70
;---------------------------------------------------------------------
1457 IgorA 71
  stdcall [ted_init], tedit0
1456 IgorA 72
  stdcall dword[tl_data_init], tree1
1338 IgorA 73
 
1467 IgorA 74
; OpenDialog initialisation
75
init_OpenDialog OpenDialog_data
76
 
1338 IgorA 77
; init bmp file
78
  mov ecx,1200*18
79
  call mem_Alloc
80
  mov [bmp_icon],eax
81
 
1390 IgorA 82
  copy_path fn_icon,sys_path,file_name,0x0
1338 IgorA 83
 
84
  mov eax,70 ;load icon file
1464 IgorA 85
  mov [run_file_70.Function], 0
86
  mov [run_file_70.Position], 54
87
  mov [run_file_70.Flags], 0
88
  mov [run_file_70.Count], 1200*18
89
  m2m [run_file_70.Buffer], [bmp_icon]
90
  mov byte[run_file_70+20], 0
91
  mov [run_file_70.FileName], file_name
1338 IgorA 92
  mov ebx,run_file_70
93
  int 0x40
94
 
95
  cmp ebx,-1
96
  mov [err_ini0],1
97
  je @f ;if open file
98
    mov [err_ini0],0
99
  @@:
100
 
101
;---------------------------------------------------------------------
1449 IgorA 102
; читаем bmp файл с курсорами и линиями
1390 IgorA 103
  copy_path fn_icon_tl_sys,sys_path,file_name,0x0
1338 IgorA 104
 
105
  mov ecx,3*256*13
106
  call mem_Alloc
107
  mov dword[tree1.data_img_sys],eax
108
 
1464 IgorA 109
  ;mov [run_file_70.Function], 0
110
  ;mov [run_file_70.Position], 54
111
  ;mov [run_file_70.Flags], 0
112
  mov [run_file_70.Count], 3*256*13
113
  mov [run_file_70.Buffer], eax
114
  ;mov byte[run_file_70+20], 0
115
  ;mov [run_file_70.FileName], file_name
1338 IgorA 116
 
117
  mov eax,70 ;load icon file
118
  mov ebx,run_file_70
119
  int 0x40
120
  cmp ebx,0
121
  jg @f
122
    mov dword[tree1.data_img_sys],0
123
  @@:
124
;---------------------------------------------------------------------
1449 IgorA 125
; читаем bmp файл с иконками узлов
1390 IgorA 126
  copy_path fn_icon_tl_nod,sys_path,file_name,0x0
1338 IgorA 127
 
128
  mov ecx,3*256*2
129
  call mem_Alloc
130
  mov dword[tree1.data_img],eax
131
 
1464 IgorA 132
;  mov [run_file_70.Function], 0
133
;  mov [run_file_70.Position], 54
134
;  mov [run_file_70.Flags], 0
135
  mov [run_file_70.Count], 3*256*2
136
  mov [run_file_70.Buffer], eax
137
;  mov byte[run_file_70+20], 0
138
;  mov [run_file_70.FileName], file_name
1338 IgorA 139
 
140
  mov eax,70 ;load icon file
141
  mov ebx,run_file_70
142
  int 0x40
143
  cmp ebx,0
144
  jg @f
145
    mov dword[tree1.data_img],0
146
  @@:
147
;------------------------------------------------------------------------------
1449 IgorA 148
  copy_path fn_syntax_dir,sys_path,file_name,0x0 ;берем путь к папке с файлами синтаксиса
1338 IgorA 149
  mov eax,70
150
  mov ebx,tree_file_struct
151
  int 0x40
152
 
153
cmp ebx,-1
154
je .end_dir_init
155
 
156
  mov eax,dir_mem
157
  add eax,32+4+1+3+4*6+8
158
mov ecx,ebx
159
@@:
1449 IgorA 160
  cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..'
1338 IgorA 161
  je .filter
1456 IgorA 162
    ;0x10000 ;1*2^16 - где 1 номер иконки с книгой
163
    stdcall dword[tl_node_add], eax,0x10000, tree1
1338 IgorA 164
 
1456 IgorA 165
    stdcall dword[tl_cur_next], tree1
1338 IgorA 166
  .filter:
167
  add eax,304
168
  loop @b
169
.end_dir_init:
170
 
171
;--- load color option file ---
1457 IgorA 172
	mov ebx,dword[fn_col_option]
173
	copy_path ebx,fn_syntax_dir,file_name_rez,0x0
174
	copy_path file_name_rez,sys_path,file_name,0x0
175
	stdcall [ted_init_syntax_file], tedit0,run_file_70,file_name
1338 IgorA 176
 
177
;--- get cmd line ---
1467 IgorA 178
  cmp byte[openfile_path+3],0 ;openfile_path
1338 IgorA 179
  je @f ;if file names exist
1467 IgorA 180
    mov esi,openfile_path
1338 IgorA 181
    call strlen ;eax=strlen
182
    mov [edit1.size],eax
1456 IgorA 183
    call but_no_msg_OpenFile
1338 IgorA 184
  @@:
185
 
1456 IgorA 186
align 4
1338 IgorA 187
red_win:
1467 IgorA 188
  call draw_window
189
 
190
align 4
191
still:
192
  mov eax,10
193
  mcall
194
 
195
  cmp al,1 ;изм. положение окна
196
  jz red_win
197
  cmp al,2
198
  jz key
199
  cmp al,3
200
  jz button
201
  cmp al,6
202
  jz mouse
203
 
204
  jmp still
205
 
206
align 4
207
draw_window:
1343 IgorA 208
  mcall 12,1
1338 IgorA 209
 
210
  xor eax,eax
211
  mov ebx,10*65536+485
1467 IgorA 212
  mov ecx,10*65536+320
1338 IgorA 213
  mov edx,[sc.work]
214
  or  edx,0x73000000
215
  mov edi,hed
1449 IgorA 216
  int 0x40
1338 IgorA 217
 
1449 IgorA 218
  mov edi,tedit0
219
 
1338 IgorA 220
  mcall 9,procinfo,-1
1449 IgorA 221
  stdcall EvSize,edi
1338 IgorA 222
 
1457 IgorA 223
  mov eax,13 ;верхний прямоугольник, для очистки верхней панели
1338 IgorA 224
  xor ebx,ebx
1449 IgorA 225
  mov ecx,ted_wnd_t
1338 IgorA 226
  mov bx,word [procinfo.client_box.width]
227
  inc bx
1449 IgorA 228
  int 0x40
1338 IgorA 229
 
1467 IgorA 230
	mov eax,4
231
	mov ebx,185*65536+9
232
	mov ecx,[sc.work_text]
233
	or  ecx,0x80000000
234
	mov edx,txtFile
235
	int 0x40
236
 
1449 IgorA 237
  stdcall [edit_box_draw], dword edit1
238
  stdcall [menu_bar_draw], dword menu_data_1
1338 IgorA 239
 
240
  call draw_but_toolbar
241
 
242
  cmp [err_ini0],1
243
  jne @f
244
    mov eax,4
1449 IgorA 245
    mov ebx,ted_wnd_l
246
    add ebx,ted_rec_l
1338 IgorA 247
    shl ebx,16
1449 IgorA 248
    add ebx,ted_wnd_t
249
    add ebx,ted_rec_t
1338 IgorA 250
    mov ecx,0x80ff0000
251
    mov edx,txtErrIni0
252
    int 0x40
253
 
254
    add ebx,10 ;move <--y-->
255
    mov ecx,0x80ff0080
256
    mov edx,file_name
257
    int 0x40
258
  @@:
259
 
260
  cmp [err_ini0],1
261
  je @f
1457 IgorA 262
    stdcall [ted_draw], tedit0
1338 IgorA 263
  @@:
264
 
1343 IgorA 265
  mcall 12,2
1467 IgorA 266
  ret
1338 IgorA 267
 
1456 IgorA 268
align 4
1338 IgorA 269
mouse:
1449 IgorA 270
  stdcall [edit_box_mouse], dword edit1
1338 IgorA 271
 
272
  test word [edit1.flags],10b;ed_focus ; если не в фокусе, выходим
273
  jne still
274
 
1457 IgorA 275
  stdcall [ted_mouse], tedit0
1338 IgorA 276
 
1457 IgorA 277
  cmp byte[tedit0.panel_id],TED_PANEL_FIND ;if not panel
1338 IgorA 278
  jne @f
1456 IgorA 279
    stdcall [edit_box_mouse], dword edit2
1338 IgorA 280
  @@:
1457 IgorA 281
  cmp byte[tedit0.panel_id],TED_PANEL_SYNTAX ;if not panel
1338 IgorA 282
  jne .menu_bar_1 ;@f
1456 IgorA 283
  stdcall [tl_mouse], tree1
1338 IgorA 284
;-----------------------------------------------
285
.menu_bar_1:
286
  mov [menu_data_1.get_mouse_flag],1
287
; mouse event for Menu 1
288
  push	dword menu_data_1
289
  call	[menu_bar_mouse]
290
  cmp	[menu_data_1.click],dword 1
291
  jne	.mnu_1
292
  cmp [menu_data_1.cursor_out],dword 4
293
  je	button.exit
294
  cmp [menu_data_1.cursor_out],dword 3
295
  jne	@f
1457 IgorA 296
    stdcall [ted_but_save_file], tedit0,run_file_70,[edit1.text]
1338 IgorA 297
  @@:
298
  cmp [menu_data_1.cursor_out],dword 2
299
  jne	@f
1457 IgorA 300
    call ted_but_open_file
1338 IgorA 301
  @@:
302
  cmp [menu_data_1.cursor_out],dword 1
303
  jne	@f
1457 IgorA 304
    call ted_but_new_file
1338 IgorA 305
  @@:
306
  ;cmp [menu_data_1.cursor_out],dword 0
307
  ;jne @f
308
.mnu_1:
309
  jmp still
310
;---------------------------------------------------------------------
311
 
1456 IgorA 312
;output:
313
; ah = symbol
314
align 4
315
proc KeyConvertToASCII, table:dword
316
  push ebx
317
  mov ebx,dword[table] ;convert scan to ascii
1338 IgorA 318
  ror ax,8
319
  xor ah,ah
320
  add bx,ax
321
  mov ah,byte[ebx]
1456 IgorA 322
  pop ebx
1338 IgorA 323
  ret
1456 IgorA 324
endp
1338 IgorA 325
 
1456 IgorA 326
align 4
1338 IgorA 327
key:
1456 IgorA 328
  mcall 66,3 ;66.3 получить состояние управляющих клавиш
1457 IgorA 329
  xor esi,esi
1338 IgorA 330
  mov ecx,1
331
  test al,0x03 ;[Shift]
332
  jz @f
1456 IgorA 333
    mov cl,2
1457 IgorA 334
    or esi,KM_SHIFT
1338 IgorA 335
  @@:
336
  test al,0x0c ;[Ctrl]
337
  jz @f
1457 IgorA 338
    or esi,KM_CTRL
1338 IgorA 339
  @@:
340
  test al,0x30 ;[Alt]
341
  jz @f
1456 IgorA 342
    mov cl,3
1457 IgorA 343
    or esi,KM_ALT
1338 IgorA 344
  @@:
345
  test al,0x80 ;[NumLock]
346
  jz @f
1457 IgorA 347
    or esi,KM_NUMLOCK
1338 IgorA 348
  @@:
1457 IgorA 349
 
1456 IgorA 350
  mcall 26,2,,conv_tabl ;26.2 получить раскладку клавиатуры
351
  mcall 2 ;получаем код нажатой клавиши
1458 IgorA 352
  stdcall [tl_key], tree1
1338 IgorA 353
 
354
  test word [edit1.flags],10b;ed_focus ; если не в фокусе, выходим
355
  je @f
356
    cmp ah,0x80 ;if key up
357
    ja still
358
    cmp ah,42 ;[Shift] (left)
359
    je still
360
    cmp ah,54 ;[Shift] (right)
361
    je still
362
    cmp ah,56 ;[Alt]
363
    je still
364
    cmp ah,29 ;[Ctrl]
365
    je still
366
    cmp ah,69 ;[Pause Break]
367
    je still
368
 
1456 IgorA 369
    stdcall KeyConvertToASCII, dword conv_tabl
370
    stdcall [edit_box_key], dword edit1
1338 IgorA 371
    jmp still
372
  @@:
373
 
374
  test word [edit2.flags],10b;ed_focus ; если не в фокусе, выходим
375
  je @f
376
    cmp ah,0x80 ;if key up
377
    ja still
378
    cmp ah,42 ;[Shift] (left)
379
    je still
380
    cmp ah,54 ;[Shift] (right)
381
    je still
382
    cmp ah,56 ;[Alt]
383
    je still
384
    cmp ah,29 ;[Ctrl]
385
    je still
386
    cmp ah,69 ;[Pause Break]
387
    je still
388
 
1456 IgorA 389
    stdcall KeyConvertToASCII, dword conv_tabl
1449 IgorA 390
    stdcall [edit_box_key], dword edit2
1338 IgorA 391
    jmp still
392
  @@:
393
 
1457 IgorA 394
  stdcall [ted_key], tedit0, conv_tabl,esi
1338 IgorA 395
  jmp still
396
 
1457 IgorA 397
align 4
1338 IgorA 398
button:
1449 IgorA 399
;  cmp [menu_active],1 ;если нажали меню, то сначала реакция на меню
1338 IgorA 400
;  jne @f ;mouse.menu_bar_1
401
;    mov [menu_active],0
402
;    jmp still
403
;  @@:
404
 
1449 IgorA 405
  mcall 17 ;получить код нажатой кнопки
1338 IgorA 406
  cmp ah,3
407
  jne @f
1457 IgorA 408
    call ted_but_new_file
1338 IgorA 409
  @@:
410
  cmp ah,4
411
  jne @f
1457 IgorA 412
    call ted_but_open_file
1338 IgorA 413
  @@:
414
  cmp ah,5
415
  jne @f
1457 IgorA 416
    stdcall [ted_but_save_file], tedit0,run_file_70,[edit1.text]
1338 IgorA 417
  @@:
418
  cmp ah,6
1456 IgorA 419
  jne @f
1457 IgorA 420
    stdcall [ted_but_select_word], tedit0
1456 IgorA 421
  @@:
1338 IgorA 422
  cmp ah,7
1456 IgorA 423
  jne @f
1457 IgorA 424
    stdcall [ted_but_cut], tedit0
1456 IgorA 425
  @@:
1338 IgorA 426
  cmp ah,8
427
  jne @f
1457 IgorA 428
    stdcall [ted_but_copy], tedit0
1338 IgorA 429
  @@:
430
  cmp ah,9
1456 IgorA 431
  jne @f
1457 IgorA 432
    stdcall [ted_but_paste], tedit0
1456 IgorA 433
  @@:
1338 IgorA 434
  cmp ah,10
1449 IgorA 435
  jne @f
1457 IgorA 436
    call ted_but_find
1449 IgorA 437
  @@:
1338 IgorA 438
  cmp ah,11
1456 IgorA 439
  jne @f
440
    call but_replace
441
  @@:
1338 IgorA 442
  cmp ah,12
1456 IgorA 443
  jne @f
444
    call but_find_key_w
445
  @@:
1338 IgorA 446
  cmp ah,13
1456 IgorA 447
  jne @f
1457 IgorA 448
    stdcall [ted_but_sumb_upper], tedit0
1456 IgorA 449
  @@:
1338 IgorA 450
  cmp ah,14
1456 IgorA 451
  jne @f
1457 IgorA 452
    stdcall [ted_but_sumb_lover], tedit0
1456 IgorA 453
  @@:
1338 IgorA 454
  cmp ah,15
1456 IgorA 455
  jne @f
1457 IgorA 456
    stdcall [ted_but_reverse], tedit0
1456 IgorA 457
  @@:
1338 IgorA 458
  cmp ah,16
1456 IgorA 459
  jne @f
1457 IgorA 460
    stdcall [ted_but_undo], tedit0
1456 IgorA 461
  @@:
1338 IgorA 462
  cmp ah,17
1456 IgorA 463
  jne @f
1457 IgorA 464
    stdcall [ted_but_redo], tedit0
1456 IgorA 465
  @@:
1338 IgorA 466
  cmp ah,18
1456 IgorA 467
  jne @f
468
    stdcall but_sumb_invis, tedit0
469
  @@:
1338 IgorA 470
  cmp ah,19
1456 IgorA 471
  jne @f
472
    stdcall but_k_words_show, tedit0
473
  @@:
1338 IgorA 474
  cmp ah,20
1449 IgorA 475
  jne @f
476
    stdcall but_synt_show, tedit0
477
  @@:
1338 IgorA 478
 
479
  cmp ah,200
480
  jne @f
1456 IgorA 481
    stdcall ted_but_open_syntax, tedit0
1338 IgorA 482
  @@:
483
  cmp ah,201
484
  jne @f
1457 IgorA 485
    stdcall [ted_but_find_next], tedit0
1338 IgorA 486
  @@:
487
 
488
  cmp ah,1
489
  jne still
490
.exit:
1457 IgorA 491
  stdcall [ted_can_save], tedit0
1338 IgorA 492
  cmp al,1
493
  jne @f
1456 IgorA 494
    stdcall [mb_create],msgbox_8,thread ;message: save changes in file?
1338 IgorA 495
    jmp still
496
  @@:
497
  mov ecx,[bmp_icon]
498
  call mem_Free
1456 IgorA 499
 
1457 IgorA 500
  stdcall [ted_delete], tedit0
1456 IgorA 501
  stdcall dword[tl_data_clear], tree1
1449 IgorA 502
  mcall -1 ;выход из программы
1338 IgorA 503
 
504
 
505
 
506
txtErrIni0 db 'Не открылся файл с иконками',0
507
err_ini0 db 0
508
 
1467 IgorA 509
edit1 edit_box 250, 220, 5, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 4090, openfile_path, mouse_dd, 0
1457 IgorA 510
edit2 edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_find, mouse_dd, 0
1338 IgorA 511
 
512
buf_find db 302 dup(0)
513
 
1343 IgorA 514
if lang eq ru
515
  err_message_found_lib0 db 'Извините не удалось найти библиотеку box_lib.obj',0
516
  head_f_i0:
517
  head_f_l0  db 'Системная ошибка',0
518
  err_message_import0 db 'Ошибка при импорте библиотеки box_lib.obj',0
519
  err_message_found_lib1 db 'Извините не удалось найти библиотеку msgbox.obj',0
520
  err_message_import1 db 'Ошибка при импорте библиотеки msgbox.obj',0
521
else
522
  err_message_found_lib0 db 'Sorry I cannot found library box_lib.obj',0
523
  head_f_i0:
524
  head_f_l0  db 'System error',0
525
  err_message_import0 db 'Error on load import library box_lib.obj',0
526
  err_message_found_lib1 db 'Sorry I cannot found library msgbox.obj',0
527
  ;head_f_i1:
528
  ;head_f_l1 db 'System error',0
529
  err_message_import1 db 'Error on load import library msgbox.obj',0
530
end if
1338 IgorA 531
 
532
;library structures
533
l_libs_start:
534
  lib0 l_libs boxlib_name, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l0, myimport,err_message_import0, head_f_i0
535
  lib1 l_libs msgbox_name, sys_path, file_name, system_dir1, err_message_found_lib1, head_f_l0, msgbox_lib_import, err_message_import1, head_f_i0
536
load_lib_end:
537
 
538
 
539
i_end:
1467 IgorA 540
	rb 1024
541
	align 16
542
	procinfo process_information
543
	thread:
544
		rb 1024
1338 IgorA 545
stacktop:
546
  sys_path:
547
    rb 4096
548
  file_name:
549
    rb 4096
550
  file_name_rez:
551
    rb 4096
1467 IgorA 552
  plugin_path:
553
    rb 4096
554
  openfile_path:
555
    rb 4096
556
  filename_area:
557
    rb 256
1338 IgorA 558
  file_info:
559
    rb 40
560
mem: