Subversion Repositories Kolibri OS

Rev

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