Subversion Repositories Kolibri OS

Rev

Rev 7438 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
7427 theonlymir 1
;CNC CONTROL
2
;Igor Afanasyev (aka IgorA) and Sergey Efremenkov (aka theonlymirage), 2018
3
 
4
;02.10.18 - Only prototype UI
5
 
6
format binary as ""
7
use32
8
        org 0
9
        db 'MENUET01'
10
        dd 1,start,i_end,mem,stacktop,0,sys_path
11
 
12
include '../../macros.inc'
13
include '../../proc32.inc'
14
include '../../KOSfuncs.inc'
15
include '../../load_img.inc'
16
include '../../develop/libraries/libs-dev/libimg/libimg.inc'
17
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
18
include 'lang.inc'
19
include 'cnc_control.inc'
20
include '../../develop/info3ds/info_fun_float.inc'
21
 
22
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
23
caption db 'CNC Control 02.10.18',0 ;подпись окна
24
 
25
run_file_70 FileInfoBlock
26
 
27
offs_last_timer dd 0 ;последний сдвиг показаный в функции таймера
28
 
29
IMAGE_TOOLBAR_ICON_SIZE equ 16*16*3
30
image_data_toolbar dd 0 ;указатель на временную память. для нужен преобразования изображения
31
icon_tl_sys dd 0 ;указатель на память для хранения системных иконок
32
icon_toolbar dd 0 ;указатель на память для хранения иконок объектов
33
 
34
align 4
35
start:
36
        load_libraries l_libs_start,l_libs_end
37
        ;проверка на сколько удачно загузилась библиотека
38
        mov     ebp,lib_0
39
        cmp     dword [ebp+ll_struc_size-4],0
40
        jz      @f
41
                mcall SF_TERMINATE_PROCESS
42
        @@:
43
        mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
44
        mcall SF_SET_EVENTS_MASK,0xC0000027
45
        stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога
46
 
47
        stdcall [buf2d_create], buf_0 ;создание буфера
48
 
49
        ;шрифт делаем до создания панели (для экономии указателя image_data_toolbar)
50
        include_image_file '..\..\fs\kfar\trunk\font6x9.bmp', image_data_toolbar, buf_1.w,buf_1.h
51
        stdcall [buf2d_create_f_img], buf_1,[image_data_toolbar] ;создаем буфер
52
        stdcall mem.Free,[image_data_toolbar] ;освобождаем память
53
        stdcall [buf2d_conv_24_to_8], buf_1,1 ;делаем буфер прозрачности 8 бит
54
        stdcall [buf2d_convert_text_matrix], buf_1
55
        mov eax,[buf_1.h]
56
        shr eax,8
57
        mov [font_h],eax
58
 
59
        include_image_file 'toolbar.png', image_data_toolbar
60
 
61
        ;*** установка времени для таймера
62
        mcall SF_SYSTEM_GET,SSF_TIME_COUNT
63
        mov [last_time],eax
64
 
65
        ;call but_new_file
66
        option_boxes_set_sys_color sc,opt_grlist1
67
 
68
        ;mov    eax, 68               ;progress bar trash
69
        ;mov    ebx, 19
70
        ;mov    ecx, sz_pb_lib
71
        ;int    64
72
        ;mov    [pb_lib], eax
73
 
74
        ;push   dword[pb_lib]
75
        ;push   sz_progressbar_draw
76
        ;call   getprocaddress
77
        ;mov    [progressbar_draw], eax
78
 
79
        ;push   dword[pb_lib]
80
        ;push   sz_progressbar_progress
81
        ;call   getprocaddress
82
        ;mov    [progressbar_progress], eax
83
        mov    [pb.left],           dword  50
84
        mov    [pb.top],            dword  30
85
        mov    [pb.width],          dword  350
86
        mov    [pb.height],         dword  17
87
        mov    [pb.max],            dword  100;599
88
        mov    [pb.min],            dword  0 ;-397
89
        mov    [pb.value],          dword  50;-397
90
        mov    [pb.back_color],     dword 00C8D0D4h
91
        mov    [pb.progress_color], dword 8072B7EBh
92
        mov    [pb.frame_color],    dword 00406175h
93
        ;mov    ecx, [pb.max]
94
        ;sub    ecx, [pb.min]
95
 
96
align 4
97
red_win:
98
        call draw_window
99
 
100
align 4
101
still:
102
        mcall SF_SYSTEM_GET,SSF_TIME_COUNT
103
        mov ebx,[last_time]
104
        add ebx,10 ;задержка
105
        cmp ebx,eax
106
        jge @f
107
                mov ebx,eax
108
        @@:
109
        sub ebx,eax
110
        mcall SF_WAIT_EVENT_TIMEOUT
111
        cmp eax,0
112
        jne @f
113
                call timer_funct
114
                jmp still
115
        @@:
116
 
117
        cmp al,1
118
        jz red_win
119
        cmp al,2
120
        jz key
121
        cmp al,3
122
        jz button
123
        cmp al,6
124
        jne @f
125
                mcall SF_THREAD_INFO,procinfo,-1
126
                cmp ax,word[procinfo.window_stack_position]
127
                jne @f ;окно не активно
128
                call mouse
129
        @@:
130
        jmp still
131
 
132
align 4
133
mouse:
134
        stdcall [option_box_mouse], opt_grlist1
135
        stdcall [edit_box_mouse], editFileName
136
        stdcall [edit_box_mouse], editCommand
137
 
138
        push eax ebx ecx
139
        mcall SF_MOUSE_GET,SSF_BUTTON_EXT
140
        bt eax,8
141
        jnc @f
142
                ;mouse l. but. press
143
                call mouse_left_d
144
                jmp .end_l
145
        @@:
146
        ;bt eax,0
147
        ;jnc @f
148
                ;mouse l. but. move
149
                ;call mouse_left_m
150
                ;jmp .end_l
151
        ;@@:
152
        bt eax,16
153
        jnc .end_l
154
                ;mouse l. but. up
155
                call mouse_left_u
156
                ;jmp .end_l
157
        .end_l:
158
        ;bt eax,9
159
        ;jnc @f
160
                ;mouse r. but. press
161
                ;jmp .end_r
162
        ;@@:
163
        ;bt eax,1
164
        ;jnc @f
165
                ;mouse r. but. move
166
                ;call mouse_right_m
167
                ;jmp .end_r
168
        ;@@:
169
        ;.end_r:
170
 
171
        call buf_get_mouse_coord
172
        cmp eax,-1
173
        je .end0
174
                shl eax,1
175
                sub eax,[buf_0.w]
176
                sar eax,1
177
                mov [mouse_prop_x],eax
178
                mov ecx,ObjData
179
                shl ebx,1
180
                sub ebx,[buf_0.h]
181
                sar ebx,1
182
                mov [mouse_prop_y],ebx
183
 
184
                mcall SF_MOUSE_GET,SSF_SCROLL_DATA
185
                test ax,ax
186
                jz .end0
187
                finit
188
                fld qword[zoom_plus]
189
                fld1
190
                fsubp
191
                fld st0 ;for Y coord
192
 
193
                ;for X coord
194
                fild dword[mouse_prop_x]
195
                fmulp st1,st0
196
 
197
                mov ebx,eax
198
                test ax,0x8000
199
                jnz .decr
200
                        ;увеличение масштаба
201
                        fchs
202
                        fild dword[ecx+Figure.MCentrX] ;add old value
203
                        fmul qword[zoom_plus]
204
                        faddp
205
 
206
                        fld qword[ecx+Figure.MScale]
207
                        fmul qword[zoom_plus]
208
                        ;if (Figure.MScale>16.0)
209
                        ;...
210
                        jmp @f
211
                .decr:
212
                        ;уменьшение масштаба
213
                        fild dword[ecx+Figure.MCentrX] ;add old value
214
                        fdiv qword[zoom_plus]
215
                        faddp
216
 
217
                        fld qword[ecx+Figure.MScale]
218
                        fdiv qword[zoom_plus]
219
                        fld1
220
                        fcomp
221
                        fstsw ax
222
                        sahf
223
                        jbe @f
224
                                ;if (Figure.MScale<1.0)
225
                                ffree st0
226
                                fincstp
227
                                ffree st0
228
                                fincstp
229
                                fldz ;default Figure.MCentrX
230
                                fld1 ;default Figure.MScale
231
                                mov dword[ecx+Figure.MCentrY],0
232
                @@:
233
                fstp qword[ecx+Figure.MScale]
234
                fistp dword[ecx+Figure.MCentrX]
235
 
236
                ;for Y coord
237
                fild dword[mouse_prop_y]
238
                fmulp st1,st0
239
                test bx,0x8000
240
                jnz .decr_y
241
                        ;увеличение масштаба
242
                        fild dword[ecx+Figure.MCentrY] ;add old value
243
                        fmul qword[zoom_plus]
244
                        faddp
245
                        jmp @f
246
                .decr_y:
247
                        ;уменьшение масштаба
248
                        fchs
249
                        fild dword[ecx+Figure.MCentrY] ;add old value
250
                        fdiv qword[zoom_plus]
251
                        faddp
252
                @@:
253
                fistp dword[ecx+Figure.MCentrY]
254
 
255
                mov dword[offs_last_timer],0
256
        .end0:
257
 
258
        pop ecx ebx eax
259
        ret
260
 
261
;output:
262
; eax - buffer coord X (если курсор за буфером -1)
263
; ebx - buffer coord Y (если курсор за буфером -1)
264
align 4
265
proc buf_get_mouse_coord
266
        mcall SF_MOUSE_GET,SSF_WINDOW_POSITION
267
        cmp ax,word[buf_0.t]
268
        jl .no_buf ;не попали в окно буфера по оси y
269
        mov ebx,eax
270
        shr ebx,16
271
        cmp bx,word[buf_0.l]
272
        jl .no_buf ;не попали в окно буфера по оси x
273
 
274
        and eax,0xffff ;оставляем координату y
275
        sub ax,word[buf_0.t]
276
        cmp eax,[buf_0.h]
277
        jg .no_buf
278
        sub bx,word[buf_0.l]
279
        cmp ebx,[buf_0.w]
280
        jg .no_buf
281
        xchg eax,ebx
282
        jmp .end_f
283
        .no_buf:
284
                xor eax,eax
285
                not eax
286
                xor ebx,ebx
287
                not ebx
288
        .end_f:
289
        ret
290
endp
291
 
292
align 4
293
proc timer_funct
294
        pushad
295
        mcall SF_SYSTEM_GET,SSF_TIME_COUNT
296
        mov [last_time],eax
297
 
298
        cmp dword[offs_last_timer],ObjData
299
        je @f
300
                mov dword[offs_last_timer],ObjData
301
                stdcall draw_obj2d,ObjData
302
                stdcall [buf2d_draw], buf_0
303
        @@:
304
        popad
305
        ret
306
endp
307
 
308
align 4
309
draw_window:
310
pushad
311
        mcall SF_REDRAW,SSF_BEGIN_DRAW
312
 
313
        ; *** рисование главного окна (выполняется 1 раз при запуске) ***
314
        mov edx,[sc.work]
315
        or  edx,0x33000000
316
        mov edi,caption
317
        mcall SF_CREATE_WINDOW,(20 shl 16)+775,(20 shl 16)+445
318
 
319
        ;;mcall SF_THREAD_INFO,procinfo,-1
320
        ;;mov eax,dword[procinfo.box.height]
321
        ;;cmp eax,120
322
        ;;jge @f
323
                ;;mov eax,120 ;min size
324
        ;;@@:
325
        ;;sub eax,65
326
        ;;mov ebx,dword[procinfo.box.width]
327
        ;;cmp ebx,270
328
        ;;jge @f
329
                ;;mov ebx,270
330
        ;;@@:
331
        ;;sub ebx,215
332
        ;;cmp eax,dword[buf_0.h] ;смотрим размер буфера
333
        ;;jne @f
334
        ;;cmp ebx,dword[buf_0.w]
335
        ;;jne @f
336
                ;;jmp .end0
337
        ;;@@:
338
                ;;stdcall [buf2d_resize],buf_0,ebx,eax,1
339
                mov ecx,[ObjData.FigCount]
340
                or ecx,ecx
341
                jz .end0
342
                mov eax,[ObjData.FigData]
343
                xor edx,edx
344
                .cycle0:
345
                        stdcall FigCalculateSizes,[eax+4*edx],0
346
                        inc edx
347
                        loop .cycle0
348
                stdcall ObjCalculateScale,ObjData
349
                mov dword[offs_last_timer],0
350
                call timer_funct
351
        .end0:
352
 
353
        stdcall [edit_box_draw], editFileName
354
        stdcall [edit_box_draw], editCommand
355
 
356
        stdcall [option_box_draw], opt_grlist1
357
        push   pb
358
        call   [progressbar_draw]
359
 
360
        ; *** создание кнопок на панель ***
361
        mcall SF_DEFINE_BUTTON,(731 shl 16)+20,(75 shl 16)+20,3, [sc.work_button]
362
        mcall , (15 shl 16)+20,(27 shl 16)+20,4 ;restore
363
        mcall ,(538 shl 16)+20,,5 ;connect
364
        mcall ,(563 shl 16)+20,,6 ;close connect
365
        mcall ,(437 shl 16)+86,(378 shl 16)+20,7 ;cancel
366
        mcall ,(616 shl 16)+136,(378 shl 16)+20,8 ;run
367
 
368
        ; ***
369
        mov ecx,[sc.work_text]
370
        or ecx,0x81000000
371
        mcall SF_DRAW_TEXT,(15 shl 16)+5,,txt_preview
372
        mcall ,(424 shl 16)+5,,txt_port
373
        mov ecx,[sc.work_button_text]
374
        or ecx,0x81000000
375
        mcall ,(440 shl 16)+381,,txt_but_cancel
376
        mcall ,(619 shl 16)+381,,txt_but_run
377
 
378
        ; *** рисование иконок на кнопках ***
379
        mcall SF_PUT_IMAGE,[image_data_toolbar],(16 shl 16)+16,(733 shl 16)+77 ;icon open
380
 
381
        add ebx,IMAGE_TOOLBAR_ICON_SIZE
382
        mcall ,,,(17 shl 16)+29 ;restore scale
383
        add ebx,IMAGE_TOOLBAR_ICON_SIZE
384
        mcall ,,,(540 shl 16)+29 ;connect
385
        add ebx,IMAGE_TOOLBAR_ICON_SIZE
386
        mcall ,,,(565 shl 16)+29 ;close connect
387
        ;;add ebx,IMAGE_TOOLBAR_ICON_SIZE
388
        ;;mcall ,,,(439 shl 16)+380 ;cancel
389
        add ebx,IMAGE_TOOLBAR_ICON_SIZE
390
        mcall ,,,((638+97) shl 16)+380 ;run
391
 
392
        stdcall [buf2d_draw], buf_0
393
 
394
        mcall SF_REDRAW,SSF_END_DRAW
395
popad
396
        ret
397
 
398
align 4
399
key:
400
        mcall SF_GET_KEY
401
 
402
        stdcall [edit_box_key], editFileName
403
        stdcall [edit_box_key], editCommand
404
 
405
        mov ecx,eax
406
        mcall SF_KEYBOARD,SSF_GET_CONTROL_KEYS
407
        bt eax,2 ;left Ctrl
408
        jc .key_Ctrl
409
        bt eax,3 ;right Ctrl
410
        jc .key_Ctrl
411
        jmp .end0
412
        .key_Ctrl:
413
                cmp ch,15 ;111 ;Ctrl+O
414
                jne @f
415
                        call but_open_file
416
                @@:
417
        .end0:
418
        jmp still
419
 
420
align 4
421
button:
422
        mcall SF_GET_BUTTON
423
        cmp ah,3
424
        jne @f
425
                call but_open_file
426
                jmp still
427
        @@:
428
        cmp ah,4
429
        jne @f
430
                call but_restore_zoom
431
                jmp still
432
        @@:
433
 
434
        ;cmp ah,5
435
        ;jne @f
436
                ;call but_...
437
                ;jmp still
438
        ;@@:
439
        cmp ah,1
440
        jne still
441
.exit:
442
        stdcall [buf2d_delete],buf_0
443
        stdcall mem.Free,[image_data_toolbar]
444
        stdcall mem.Free,[open_file_data]
445
        mcall SF_TERMINATE_PROCESS
446
 
447
 
448
 
449
align 4
450
open_file_data dd 0 ;указатель на память для открытия файлов
451
open_file_size dd 0 ;размер открытого файла
452
 
453
align 4
454
but_open_file:
455
        pushad
456
        copy_path open_dialog_name,communication_area_default_path,file_name,0
457
        mov [OpenDialog_data.type],0
458
        stdcall [OpenDialog_Start],OpenDialog_data
459
        cmp [OpenDialog_data.status],2
460
        je .end_open_file
461
        ;код при удачном открытии диалога
462
 
463
        push eax ebx ecx edx ;copy file name path
464
        mov eax, openfile_path ;dword[OpenDialog_data.openfile_path]
465
        mov ebx, fileNameBuffer ;.data
466
        mov ecx, 0
467
      @@:
468
        mov dl, byte[eax]
469
        cmp dl, 0 ;byte[eax], 0
470
        je @f
471
        mov byte[ebx], dl
472
        inc eax
473
        inc ebx
474
        inc ecx
475
        jmp @b
476
      @@:
477
        mov byte[ebx], 0
478
        mov dword[fileNameBuffer.size], ecx
479
        mov dword[editFileName.size], ecx
480
        mov dword[editFileName.pos], ecx
481
        pop edx ecx ebx eax
482
 
483
        mov [run_file_70.Function], SSF_GET_INFO
484
        mov [run_file_70.Position], 0
485
        mov [run_file_70.Flags], 0
486
        mov dword[run_file_70.Count], 0
487
        mov dword[run_file_70.Buffer], open_b
488
        mov byte[run_file_70+20], 0
489
        mov dword[run_file_70.FileName], openfile_path
490
        mcall SF_FILE,run_file_70
491
 
492
        mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах
493
        inc ecx ;for text files
494
        stdcall mem.ReAlloc,[open_file_data],ecx
495
        mov [open_file_data],eax
496
        dec ecx ;for text files
497
        mov byte[eax+ecx],0 ;for text files
498
 
499
        mov [run_file_70.Function], SSF_READ_FILE
500
        mov [run_file_70.Position], 0
501
        mov [run_file_70.Flags], 0
502
        mov dword[run_file_70.Count], ecx
503
        m2m dword[run_file_70.Buffer], dword[open_file_data]
504
        mov byte[run_file_70+20], 0
505
        mov dword[run_file_70.FileName], openfile_path
506
        mcall SF_FILE,run_file_70 ;загружаем файл изображения
507
        test eax,eax
508
        jnz .end_open_file
509
        cmp ebx,0xffffffff
510
        je .end_open_file
511
 
512
                mov [open_file_size],ebx
513
                mcall SF_SET_CAPTION,1,openfile_path
514
 
515
                ;---
516
                stdcall FileInit,[open_file_data],[open_file_size]
517
                stdcall [buf2d_clear], buf_0, [buf_0.color] ;чистим буфер
518
                stdcall [buf2d_draw], buf_0 ;обновляем буфер на экране
519
        .end_open_file:
520
        popad
521
        ret
522
 
523
;output:
524
; ecx - memory size for save file
525
align 4
526
proc get_file_save_size uses eax ebx edx esi
527
        mov ecx,100 ;title
528
        mov ebx,ObjData
529
        add ecx,50 ;object
530
        mov edx,[ebx+Object.FigCount]
531
        or edx,edx
532
        jz .cycle1end
533
        mov esi,[ebx+Object.FigData]
534
align 4
535
        .cycle1: ; цикл по фигурам
536
                add ecx,80 ;figure
537
                mov eax,[esi]
538
                or eax,eax
539
                jz @f
540
                        mov eax,[eax+Figure.PoiCount]
541
                        imul eax,70
542
                        add ecx,eax ;points
543
                @@:
544
                add esi,4
545
                dec edx
546
                jnz .cycle1
547
        .cycle1end:
548
        ret
549
endp
550
 
551
align 4
552
proc but_restore_zoom
553
        finit
554
        fld1
555
        fstp qword[ObjData.MScale]
556
        mov dword[ObjData.MCentrX],0
557
        mov dword[ObjData.MCentrY],0
558
        mov dword[offs_last_timer],0
559
        ret
560
endp
561
 
562
 
563
 
564
;input:
565
; buf - указатель на строку, число должно быть в 10 или 16 ричном виде
566
;output:
567
; eax - число
568
align 4
569
proc conv_str_to_int uses ebx ecx esi, buf:dword
570
        xor eax,eax
571
        xor ebx,ebx
572
        mov esi,[buf]
573
 
574
        ;на случай если перед числом находятся пробелы
575
        @@:
576
        cmp byte[esi],' '
577
        jne @f
578
                inc esi
579
                jmp @b
580
        @@:
581
 
582
        ;определение отрицательных чисел
583
        xor ecx,ecx
584
        inc ecx
585
        cmp byte[esi],'-'
586
        jne @f
587
                dec ecx
588
                inc esi
589
        @@:
590
 
591
        cmp word[esi],'0x'
592
        je .load_digit_16
593
 
594
        .load_digit_10: ;считывание 10-тичных цифр
595
                mov bl,byte[esi]
596
                cmp bl,'0'
597
                jl @f
598
                cmp bl,'9'
599
                jg @f
600
                        sub bl,'0'
601
                        imul eax,10
602
                        add eax,ebx
603
                        inc esi
604
                        jmp .load_digit_10
605
        jmp @f
606
 
607
        .load_digit_16: ;считывание 16-ричных цифр
608
                add esi,2
609
        .cycle_16:
610
                mov bl,byte[esi]
611
                cmp bl,'0'
612
                jl @f
613
                cmp bl,'f'
614
                jg @f
615
                cmp bl,'9'
616
                jle .us1
617
                        cmp bl,'A'
618
                        jl @f ;отсеиваем символы >'9' и <'A'
619
                .us1: ;составное условие
620
                cmp bl,'F'
621
                jle .us2
622
                        cmp bl,'a'
623
                        jl @f ;отсеиваем символы >'F' и <'a'
624
                        sub bl,32 ;переводим символы в верхний регистр, для упрощения их последущей обработки
625
                .us2: ;составное условие
626
                        sub bl,'0'
627
                        cmp bl,9
628
                        jle .cor1
629
                                sub bl,7 ;convert 'A' to '10'
630
                        .cor1:
631
                        shl eax,4
632
                        add eax,ebx
633
                        inc esi
634
                        jmp .cycle_16
635
        @@:
636
        cmp ecx,0 ;если число отрицательное
637
        jne @f
638
                sub ecx,eax
639
                mov eax,ecx
640
        @@:
641
        ret
642
endp
643
 
644
 
645
;данные для диалога открытия файлов
646
align 4
647
OpenDialog_data:
648
.type                   dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать дтректорию
649
.procinfo               dd procinfo     ;+4
650
.com_area_name          dd communication_area_name      ;+8
651
.com_area               dd 0    ;+12
652
.opendir_path           dd plugin_path  ;+16
653
.dir_default_path       dd default_dir ;+20
654
.start_path             dd file_name ;+24 путь к диалогу открытия файлов
655
.draw_window            dd draw_window  ;+28
656
.status                 dd 0    ;+32
657
.openfile_path          dd openfile_path        ;+36 путь к открываемому файлу
658
.filename_area          dd filename_area        ;+40
659
.filter_area            dd Filter
660
.x:
661
.x_size                 dw 420 ;+48 ; Window X size
662
.x_start                dw 10 ;+50 ; Window X position
663
.y:
664
.y_size                 dw 320 ;+52 ; Window y size
665
.y_start                dw 10 ;+54 ; Window Y position
666
 
667
default_dir db '/rd/1',0
668
 
669
communication_area_name:
670
        db 'FFFFFFFF_open_dialog',0
671
open_dialog_name:
672
        db 'opendial',0
673
communication_area_default_path:
674
        db '/rd/1/File managers/',0
675
 
676
Filter:
677
dd Filter.end - Filter ;.1
678
.1:
679
db 'NC',0
680
db 'PNG',0
681
.end:
682
db 0
683
 
684
 
685
 
686
head_f_i:
687
head_f_l db 'Системная ошибка',0
688
 
689
system_dir_0 db '/sys/lib/'
690
lib_name_0 db 'proc_lib.obj',0
691
err_message_found_lib_0 db 'Не найдена библиотека ',39,'proc_lib.obj',39,0
692
err_message_import_0 db 'Ошибка при импорте библиотеки ',39,'proc_lib.obj',39,0
693
 
694
system_dir_1 db '/sys/lib/'
695
lib_name_1 db 'libimg.obj',0
696
err_message_found_lib_1 db 'Не найдена библиотека ',39,'libimg.obj',39,0
697
err_message_import_1 db 'Ошибка при импорте библиотеки ',39,'libimg.obj',39,0
698
 
699
system_dir_2 db '/sys/lib/'
700
lib_name_2 db 'buf2d.obj',0
701
err_msg_found_lib_2 db 'Не найдена библиотека ',39,'buf2d.obj',39,0
702
err_msg_import_2 db 'Ошибка при импорте библиотеки ',39,'buf2d',39,0
703
 
704
system_dir_3 db '/sys/lib/'
705
lib_name_3 db 'box_lib.obj',0
706
err_msg_found_lib_3 db 'Не найдена библиотека ',39,'box_lib.obj',39,0
707
err_msg_import_3 db 'Ошибка при импорте библиотеки ',39,'box_lib',39,0
708
 
709
l_libs_start:
710
        lib_0 l_libs lib_name_0, sys_path, file_name, system_dir_0,\
711
                err_message_found_lib_0, head_f_l, proclib_import,err_message_import_0, head_f_i
712
        lib_1 l_libs lib_name_1, sys_path, file_name, system_dir_1,\
713
                err_message_found_lib_1, head_f_l, import_libimg, err_message_import_1, head_f_i
714
        lib_2 l_libs lib_name_2, sys_path, library_path, system_dir_2,\
715
                err_msg_found_lib_2,head_f_l,import_buf2d,err_msg_import_2,head_f_i
716
        lib_3 l_libs lib_name_3, sys_path, file_name,  system_dir_3,\
717
                err_msg_found_lib_3, head_f_l, import_box_lib,err_msg_import_3,head_f_i
718
l_libs_end:
719
 
720
align 4
721
import_libimg:
722
        dd alib_init1
723
        img_is_img  dd aimg_is_img
724
        img_info    dd aimg_info
725
        img_from_file dd aimg_from_file
726
        img_to_file dd aimg_to_file
727
        img_from_rgb dd aimg_from_rgb
728
        img_to_rgb  dd aimg_to_rgb
729
        img_to_rgb2 dd aimg_to_rgb2
730
        img_decode  dd aimg_decode
731
        img_encode  dd aimg_encode
732
        img_create  dd aimg_create
733
        img_destroy dd aimg_destroy
734
        img_destroy_layer dd aimg_destroy_layer
735
        img_count   dd aimg_count
736
        img_lock_bits dd aimg_lock_bits
737
        img_unlock_bits dd aimg_unlock_bits
738
        img_flip    dd aimg_flip
739
        img_flip_layer dd aimg_flip_layer
740
        img_rotate  dd aimg_rotate
741
        img_rotate_layer dd aimg_rotate_layer
742
        img_draw    dd aimg_draw
743
 
744
        dd 0,0
745
        alib_init1   db 'lib_init',0
746
        aimg_is_img  db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
747
        aimg_info    db 'img_info',0
748
        aimg_from_file db 'img_from_file',0
749
        aimg_to_file db 'img_to_file',0
750
        aimg_from_rgb db 'img_from_rgb',0
751
        aimg_to_rgb  db 'img_to_rgb',0 ;преобразование изображения в данные RGB
752
        aimg_to_rgb2 db 'img_to_rgb2',0
753
        aimg_decode  db 'img_decode',0 ;автоматически определяет формат графических данных
754
        aimg_encode  db 'img_encode',0
755
        aimg_create  db 'img_create',0
756
        aimg_destroy db 'img_destroy',0
757
        aimg_destroy_layer db 'img_destroy_layer',0
758
        aimg_count   db 'img_count',0
759
        aimg_lock_bits db 'img_lock_bits',0
760
        aimg_unlock_bits db 'img_unlock_bits',0
761
        aimg_flip    db 'img_flip',0
762
        aimg_flip_layer db 'img_flip_layer',0
763
        aimg_rotate  db 'img_rotate',0
764
        aimg_rotate_layer db 'img_rotate_layer',0
765
        aimg_draw    db 'img_draw',0
766
 
767
align 4
768
proclib_import: ;описание экспортируемых функций
769
        OpenDialog_Init dd aOpenDialog_Init
770
        OpenDialog_Start dd aOpenDialog_Start
771
dd 0,0
772
        aOpenDialog_Init db 'OpenDialog_init',0
773
        aOpenDialog_Start db 'OpenDialog_start',0
774
 
775
align 4
776
import_buf2d:
777
        init dd sz_init
778
        buf2d_create dd sz_buf2d_create
779
        buf2d_create_f_img dd sz_buf2d_create_f_img
780
        buf2d_clear dd sz_buf2d_clear
781
        buf2d_draw dd sz_buf2d_draw
782
        buf2d_delete dd sz_buf2d_delete
783
        buf2d_resize dd sz_buf2d_resize
784
        buf2d_line dd sz_buf2d_line
785
        buf2d_line_sm dd sz_buf2d_line_sm
786
        buf2d_rect_by_size dd sz_buf2d_rect_by_size
787
        buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
788
        buf2d_circle dd sz_buf2d_circle
789
        buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
790
        buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
791
        buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
792
        buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
793
        buf2d_bit_blt dd sz_buf2d_bit_blt
794
        buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
795
        buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
796
        buf2d_curve_bezier dd sz_buf2d_curve_bezier
797
        buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
798
        buf2d_draw_text dd sz_buf2d_draw_text
799
        buf2d_crop_color dd sz_buf2d_crop_color
800
        buf2d_flip_h dd sz_buf2d_flip_h
801
        buf2d_flip_v dd sz_buf2d_flip_v
802
        buf2d_offset_h dd sz_buf2d_offset_h
803
        buf2d_flood_fill dd sz_buf2d_flood_fill
804
        buf2d_set_pixel dd sz_buf2d_set_pixel
805
        dd 0,0
806
        sz_init db 'lib_init',0
807
        sz_buf2d_create db 'buf2d_create',0
808
        sz_buf2d_create_f_img db 'buf2d_create_f_img',0
809
        sz_buf2d_clear db 'buf2d_clear',0
810
        sz_buf2d_draw db 'buf2d_draw',0
811
        sz_buf2d_delete db 'buf2d_delete',0
812
        sz_buf2d_resize db 'buf2d_resize',0
813
        sz_buf2d_line db 'buf2d_line',0
814
        sz_buf2d_line_sm db 'buf2d_line_sm',0
815
        sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0
816
        sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
817
        sz_buf2d_circle db 'buf2d_circle',0
818
        sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
819
        sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
820
        sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
821
        sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
822
        sz_buf2d_bit_blt db 'buf2d_bit_blt',0
823
        sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
824
        sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
825
        sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
826
        sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
827
        sz_buf2d_draw_text db 'buf2d_draw_text',0
828
        sz_buf2d_crop_color db 'buf2d_crop_color',0
829
        sz_buf2d_flip_h db 'buf2d_flip_h',0
830
        sz_buf2d_flip_v db 'buf2d_flip_v',0
831
        sz_buf2d_offset_h db 'buf2d_offset_h',0
832
        sz_buf2d_flood_fill db 'buf2d_flood_fill',0
833
        sz_buf2d_set_pixel db 'buf2d_set_pixel',0
834
 
835
align 4
836
import_box_lib:
837
        dd sz_init1
838
 
839
        init_checkbox   dd sz_Init_checkbox
840
        check_box_draw  dd sz_Check_box_draw
841
        check_box_mouse dd sz_Check_box_mouse
842
        ;version_ch     dd sz_Version_ch
843
 
844
        option_box_draw  dd sz_Option_box_draw
845
        option_box_mouse dd sz_Option_box_mouse
846
        ;version_op      dd sz_Version_op
847
 
848
        edit_box_draw      dd sz_edit_box_draw
849
        edit_box_key       dd sz_edit_box_key
850
        edit_box_mouse     dd sz_edit_box_mouse
851
        edit_box_set_text  dd sz_edit_box_set_text
852
        scrollbar_ver_draw dd sz_scrollbar_ver_draw
853
        scrollbar_hor_draw dd sz_scrollbar_hor_draw
854
 
855
        progressbar_draw     dd sz_progressbar_draw
856
        progressbar_progress dd sz_progressbar_progress
857
 
858
        dd 0,0
859
        sz_init1 db 'lib_init',0
860
 
861
        sz_Init_checkbox   db 'init_checkbox2',0
862
        sz_Check_box_draw  db 'check_box_draw2',0
863
        sz_Check_box_mouse db 'check_box_mouse2',0
864
        ;sz_Version_ch     db 'version_ch2',0
865
 
866
        sz_Option_box_draw      db 'option_box_draw',0
867
        sz_Option_box_mouse     db 'option_box_mouse',0
868
        ;sz_Version_op      db 'version_op',0
869
 
870
        sz_edit_box_draw      db 'edit_box',0
871
        sz_edit_box_key       db 'edit_box_key',0
872
        sz_edit_box_mouse     db 'edit_box_mouse',0
873
        sz_edit_box_set_text  db 'edit_box_set_text',0
874
        sz_scrollbar_ver_draw db 'scrollbar_v_draw',0
875
        sz_scrollbar_hor_draw db 'scrollbar_h_draw',0
876
 
877
        sz_progressbar_draw     db 'progressbar_draw', 0
878
        sz_progressbar_progress db 'progressbar_progress', 0
879
 
880
align 4
881
mouse_dd dd 0
882
last_time dd 0
883
 
884
align 16
885
sc system_colors
886
 
887
align 16
888
procinfo process_information
889
 
890
align 4
891
buf_0: dd 0 ;указатель на буфер изображения
892
.l: dw 15 ;+4 left
893
.t: dw 50 ;+6 top
894
.w: dd 384 ;+8 w
895
.h: dd 350 ;+12 h
896
.color: dd 0xffffd0 ;+16 color
897
        db 24 ;+20 bit in pixel
898
 
899
align 4
900
buf_1:
901
        dd 0 ;указатель на буфер изображения
902
        dd 0 ;+4 left,top
903
.w: dd 0
904
.h: dd 0,0,24 ;+12 color,bit in pixel
905
 
906
font_h dd 0 ;высота шрифта
907
 
908
;input:
909
; eax - число
910
; edi - буфер для строки
911
; len - длинна буфера
912
;output:
913
align 4
914
proc convert_int_to_str uses eax ecx edx edi esi, len:dword
915
        mov esi,[len]
916
        add esi,edi
917
        dec esi
918
        call .str
919
        ret
920
endp
921
 
922
align 4
923
.str:
924
        mov ecx,10
925
        cmp eax,ecx
926
        jb @f
927
                xor edx,edx
928
                div ecx
929
                push edx
930
                ;dec edi  ;смещение необходимое для записи с конца строки
931
                call .str
932
                pop eax
933
        @@:
934
        cmp edi,esi
935
        jge @f
936
                or al,0x30
937
                stosb
938
                mov byte[edi],0 ;в конец строки ставим 0, что-бы не вылазил мусор
939
        @@:
940
        ret
941
 
942
align 4
943
proc mem_copy uses ecx esi edi, destination:dword, source:dword, len:dword
944
        cld
945
        mov esi, dword[source]
946
        mov edi, dword[destination]
947
        mov ecx, dword[len]
948
        rep movsb
949
        ret
950
endp
951
 
952
edMaxSize = 511
953
edMax = 0 ;max, size, pos
954
 
955
align 4
956
editFileName  edit_box 270,450,78, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, fileNameBuffer.data, mouse_dd, 0, edMax, edMax
957
editCommand   edit_box 150,450,121, 0xffffff, 0x6a9480, 0, 0xAABBCC, 0, edMaxSize, commandBuffer.data, mouse_dd, 0, edMax, edMax
958
 
959
opt1 option_box opt_gr1, 433,64, 6,12,0xd0d0ff, 0xff, 0x80ff,txt_filename,txt_filename.end-txt_filename
960
opt2 option_box opt_gr1, 433,107,6,12,0xd0d0ff, 0xff, 0x80ff,txt_command,txt_command.end-txt_command
961
opt_gr1 dd opt1
962
align 4
963
opt_grlist1 dd opt1,opt2,0 ;end option group
964
 
965
;progressbar_progress dd 0
966
;progressbar_draw     dd 0
967
;pb_lib               dd 0
968
;sz_pb_lib  db "/sys/lib/box_lib.obj",0
969
pb:
970
.value          dd 0
971
.left           dd 0
972
.top            dd 0
973
.width          dd 0
974
.height         dd 0
975
.style          dd 0
976
.min            dd 0
977
.max            dd 0
978
.back_color     dd 0
979
.progress_color dd 0
980
.frame_color    dd 0
981
 
982
test_path db '/rd/1/test.txt', 0
983
;getprocaddress:
984
;        mov  edx, [esp + 8] ; hlib
985
;        xor  eax, eax
986
;        test edx, edx       ; If hlib = 0 then goto .end
987
;        jz  .end
988
;.next:
989
;        cmp  [edx], dword 0 ; If end of export table then goto .end
990
;        jz  .end
991
 
992
;        xor  eax, eax
993
;        mov  esi, [edx]
994
;        mov  edi, [esp + 4] ; name
995
;.next_:
996
;        lodsb
997
;        scasb
998
;        jne  .fail
999
;        or   al, al
1000
;        jnz  .next_
1001
;        jmp  .ok
1002
;.fail:
1003
;        add  edx, 8
1004
;        jmp  .next
1005
;.ok:                        ; return address
1006
;        mov  eax, [edx + 4]
1007
;.end:
1008
;        ret 8
1009
 
1010
fileNameBuffer:
1011
.data: rb 512
1012
.size: rd 1
1013
fileNameBufferEnd:
1014
 
1015
commandBuffer:
1016
.data: rb 512
1017
.size: rd 1
1018
commandBufferEnd:
1019
 
1020
align 16
1021
i_end:
1022
        rb 2048
1023
thread_coords:
1024
        rb 2048
1025
thread_scale:
1026
        rb 2048
1027
thread_n_file:
1028
        rb 2048
1029
stacktop:
1030
        sys_path rb 1024
1031
        file_name:
1032
                rb 1024 ;4096
1033
        library_path rb 1024
1034
        plugin_path rb 4096
1035
        openfile_path rb 4096
1036
        filename_area rb 256
1037
mem:
1038