Subversion Repositories Kolibri OS

Rev

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