Subversion Repositories Kolibri OS

Rev

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