2018-09-14 18:10:51 +02:00
|
|
|
|
|
|
|
|
|
;FigureInit, (<EFBFBD>६. <EFBFBD><EFBFBD><EFBFBD>.), (Object.FigData)
|
|
|
|
|
|
|
|
|
|
;add_object_in_list, ___, ___, (<EFBFBD>६. <EFBFBD><EFBFBD><EFBFBD>.), (Object.FigData)
|
|
|
|
|
; mov [Object.FigData], (tl_node_add(<EFBFBD>६. <EFBFBD><EFBFBD><EFBFBD>.),tl_node_get_data)
|
|
|
|
|
|
|
|
|
|
;draw_fig2d_litl, ___, pobj, (Object.FigData), ___, ___, ___
|
|
|
|
|
|
|
|
|
|
struct Object
|
|
|
|
|
OType dd ?
|
|
|
|
|
FigCount dd ?
|
|
|
|
|
FigData dd ? ;array pointers to Figures
|
|
|
|
|
MinX dq ?
|
|
|
|
|
MinY dq ?
|
|
|
|
|
SizeX dq ?
|
|
|
|
|
SizeY dq ?
|
|
|
|
|
WScale dq ? ;prewiew window scale
|
|
|
|
|
MScale dq ? ;mouse scale (show partition figure)
|
|
|
|
|
MCentrX dd ? ;mouse centr X
|
|
|
|
|
MCentrY dd ? ;mouse centr Y
|
|
|
|
|
Caption rb 32
|
|
|
|
|
ends
|
|
|
|
|
|
|
|
|
|
struct Figure
|
|
|
|
|
OType dd ?
|
|
|
|
|
PoiCount dd ?
|
|
|
|
|
PoiData dd ?
|
|
|
|
|
MinX dq ?
|
|
|
|
|
MinY dq ?
|
|
|
|
|
SizeX dq ?
|
|
|
|
|
SizeY dq ?
|
|
|
|
|
WScale dq ? ;prewiew window scale (show all figure)
|
|
|
|
|
MScale dq ? ;mouse scale (show partition figure)
|
|
|
|
|
MCentrX dd ? ;mouse centr X
|
|
|
|
|
MCentrY dd ? ;mouse centr Y
|
|
|
|
|
Caption rb 32
|
|
|
|
|
ends
|
|
|
|
|
|
|
|
|
|
struct Point
|
|
|
|
|
Prop dd ? ;prorerties
|
|
|
|
|
CoordX dq ? ;coord X
|
|
|
|
|
CoordY dq ? ;coord Y
|
|
|
|
|
ends
|
|
|
|
|
|
|
|
|
|
txt_err_1 db '<27>訡<EFBFBD><E8A8A1> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD> <20><>ꥪ<EFBFBD><EAA5AA>',0
|
|
|
|
|
txt_err_2 db '<27>訡<EFBFBD><E8A8A1> <20><><EFBFBD> <20><><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0><EFBFBD> 䨣<><E4A8A3><EFBFBD>',0
|
|
|
|
|
txt_err_3 db '<27><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>窠 <20> 䨣<><E4A8A3><EFBFBD>',0
|
|
|
|
|
txt_err_no_figure_select db '<27><> <20><><EFBFBD>࠭<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><>६<EFBFBD>饭<EFBFBD><E9A5AD>',0
|
|
|
|
|
txt_err_figure_is_0 db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ᤢ<><E1A4A2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>,',13,10,'<27><><EFBFBD> <20> <20><>砫<EFBFBD> ᯨ᪠.',0
|
|
|
|
|
txt_err_figure_is_last db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ᤢ<><E1A4A2><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>,',13,10,'<27><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> ᯨ᪠.',0
|
|
|
|
|
txt_err_no_point_del db '<27><> <20><><EFBFBD><EFBFBD><EFBFBD> 㤠<><E3A4A0><EFBFBD><EFBFBD> <20><><EFBFBD> <20><>窨 <20><> 䨣<><E4A8A3><EFBFBD>.',0
|
|
|
|
|
txt_err_poi_is_0 db '<27><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>,',13,10,'<27><><EFBFBD> <20> <20><>砫<EFBFBD> ᯨ᪠.',0
|
|
|
|
|
txt_err_poi_is_last db '<27><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>,',13,10,'<27><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> ᯨ᪠.',0
|
|
|
|
|
txt_err_no_1_point_sel db '<27>롥<EFBFBD><EBA1A5><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>窨.',0
|
|
|
|
|
|
|
|
|
|
txt_min_x db 'min x: ',0
|
|
|
|
|
txt_min_y db 'min y: ',0
|
|
|
|
|
|
|
|
|
|
if lang eq ru
|
|
|
|
|
;
|
|
|
|
|
; rus
|
|
|
|
|
;
|
|
|
|
|
txt_err_no_point_sel db '<27><> <20><><EFBFBD>࠭<EFBFBD> <20><>窨.',0
|
|
|
|
|
txt_err_no_point_sel_1 db '<27>롥<EFBFBD><EBA1A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>.',0
|
|
|
|
|
txt_but_cancel db '<27>⬥<EFBFBD><E2ACA5>',0
|
|
|
|
|
txt_but_apply db '<27>ਬ<EFBFBD><E0A8AC><EFBFBD><EFBFBD><EFBFBD>',0
|
|
|
|
|
txt_but_create db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>',0
|
|
|
|
|
txt_size_x db 'ࠧ<><E0A0A7><EFBFBD> x: ',0
|
|
|
|
|
txt_size_y db 'ࠧ<><E0A0A7><EFBFBD> y: ',0
|
|
|
|
|
txt_poi_sel: db '<27><><EFBFBD>࠭<EFBFBD> <20><>祪: '
|
|
|
|
|
.end db 0
|
|
|
|
|
txt_err_save_txt_file_0:
|
|
|
|
|
db '<27><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD> *.nc 䠩<>.',0
|
|
|
|
|
txt_err_save_txt_file_1:
|
|
|
|
|
db '<27><> 㤠<><E3A4A0><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD><EFBFBD> *.nc 䠩<>.',0
|
|
|
|
|
txt_err_save_img_file:
|
|
|
|
|
db '<27><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD> *.png 䠩<>.',0
|
|
|
|
|
txt_obj: db '<27><>ꥪ<EFBFBD>: ',39
|
|
|
|
|
.end db 0
|
|
|
|
|
else
|
|
|
|
|
;
|
|
|
|
|
; eng
|
|
|
|
|
;
|
|
|
|
|
txt_err_no_point_sel db 'No select points.',0
|
|
|
|
|
txt_err_no_point_sel_1 db 'Select one point.',0
|
|
|
|
|
txt_but_cancel db 'Cancel',0
|
|
|
|
|
txt_but_apply db 'Apply',0
|
|
|
|
|
txt_but_create db 'Create',0
|
|
|
|
|
txt_size_x db 'size x: ',0
|
|
|
|
|
txt_size_y db 'size y: ',0
|
|
|
|
|
txt_poi_sel: db 'Select points: '
|
|
|
|
|
.end db 0
|
|
|
|
|
txt_err_save_txt_file_0:
|
|
|
|
|
txt_err_save_txt_file_1:
|
|
|
|
|
db 'Can',39,'t save *.nc file.',0
|
|
|
|
|
txt_err_save_img_file:
|
|
|
|
|
db 'Can',39,'t save *.png file.',0
|
|
|
|
|
txt_obj: db 'Object: ',39
|
|
|
|
|
.end db 0
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
txt_s_39 db 39,' ',0
|
|
|
|
|
txt_s_poi db 'X',0
|
|
|
|
|
txt_s_poi_Y db ' Y',0
|
|
|
|
|
txt_s_poi_Z db ' Z',0
|
|
|
|
|
txt_coma db ','
|
|
|
|
|
txt_space db ' ',0 ;<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>⮩
|
|
|
|
|
txt_nl db 13,10,0
|
|
|
|
|
txt_n db 13,0
|
|
|
|
|
txt_ls db ' (',0
|
|
|
|
|
txt_rs db ')',0
|
|
|
|
|
txt_len db ' len=',0
|
|
|
|
|
txt_39 db 39,0
|
|
|
|
|
|
|
|
|
|
;<EFBFBD><EFBFBD>⢠ <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ᮢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>祪
|
|
|
|
|
PROP_BIT_SELECT equ 30 ;<EFBFBD><EFBFBD>窠 <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>뤥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
zoom_plus dq 1.25992105
|
2019-05-23 21:31:53 +02:00
|
|
|
|
opt_koef dq 0.02 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>⨬<EFBFBD><EFBFBD><EFBFBD>樨 (祬 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> 0, ⥬ <EFBFBD><EFBFBD>ﬥ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
2018-09-14 18:10:51 +02:00
|
|
|
|
mouse_prop_x dd 0 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>⭮<EFBFBD><EFBFBD>⥫쭮 業<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> buf_0 (<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠡<EFBFBD>)
|
|
|
|
|
mouse_prop_y dd 0
|
|
|
|
|
mouse_down_x dd 0 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>⭮<EFBFBD><EFBFBD>⥫쭮 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>孥<EFBFBD><EFBFBD> 㣫<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> buf_0 (<EFBFBD><EFBFBD><EFBFBD> ᤢ<EFBFBD><EFBFBD><EFBFBD> 䨣<EFBFBD><EFBFBD><EFBFBD>)
|
|
|
|
|
mouse_down_y dd 0
|
|
|
|
|
opt_draw dd 1
|
|
|
|
|
graf_margin_left dd 3 ;margin in pixels
|
|
|
|
|
graf_margin_right dd 3+6 ;margin in pixels
|
|
|
|
|
graf_margin_top dd 3+9 ;margin in pixels
|
|
|
|
|
graf_margin_bot dd 3+9 ;margin in pixels
|
|
|
|
|
png_data dd ?
|
|
|
|
|
png_size dd ?
|
|
|
|
|
|
|
|
|
|
;global variables:
|
|
|
|
|
ObjData Object
|
|
|
|
|
FigData Figure ;<EFBFBD>६<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> tree1
|
|
|
|
|
PoiData Point
|
|
|
|
|
|
|
|
|
|
size_one_list equ sizeof.Figure ;max (sizeof.Figure, sizeof.Object)
|
|
|
|
|
|
|
|
|
|
if sizeof.Object > sizeof.Figure
|
|
|
|
|
... need fix size_one_list
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
if (Object.FigCount <> Figure.PoiCount) | (Object.FigData <> Figure.PoiData) | (Object.MScale <> Figure.MScale) | (Object.MCentrX <> Figure.MCentrX) | (Object.MCentrY <> Figure.MCentrY)
|
|
|
|
|
... need fix offsets
|
|
|
|
|
end if
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
Scale1mm dq 11.81102362204724 ;pixels in 1 mm -> 300 dpi
|
|
|
|
|
;5.905511811023622 ;pixels in 1 mm -> 150 dpi
|
|
|
|
|
|
|
|
|
|
txt_buf rb 80 ;???
|
|
|
|
|
txt_sp db ' ',0
|
|
|
|
|
|
|
|
|
|
;input:
|
|
|
|
|
; esi - text pointer
|
|
|
|
|
align 4
|
|
|
|
|
proc txt_next_line uses eax ecx edi, mlen:dword
|
|
|
|
|
mov al,13
|
|
|
|
|
mov ecx,[mlen]
|
|
|
|
|
mov edi,esi
|
|
|
|
|
repne scasb
|
|
|
|
|
cmp byte[edi],10
|
|
|
|
|
jne @f
|
|
|
|
|
inc edi
|
|
|
|
|
@@:
|
|
|
|
|
mov esi,edi
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;input:
|
|
|
|
|
; edi - destination buffer
|
|
|
|
|
; esi - source text string: '...\nl
|
|
|
|
|
; mlen - maximum len destination buffer
|
|
|
|
|
align 4
|
|
|
|
|
proc txt_load_line uses eax ebx ecx esi, mlen:dword
|
|
|
|
|
mov byte[edi],0
|
|
|
|
|
mov al,13
|
|
|
|
|
cmp byte[esi],al
|
|
|
|
|
je .end_f
|
|
|
|
|
mov ecx,[mlen]
|
|
|
|
|
mov ebx,edi
|
|
|
|
|
mov edi,esi
|
|
|
|
|
repne scasb ;found end of string
|
|
|
|
|
mov ecx,edi
|
|
|
|
|
sub ecx,esi
|
|
|
|
|
dec ecx ;ecx = string len
|
|
|
|
|
mov edi,ebx
|
|
|
|
|
rep movsb ;copy caption string
|
|
|
|
|
cmp byte[esi],13
|
|
|
|
|
je @f
|
|
|
|
|
.cycle0:
|
|
|
|
|
inc esi
|
|
|
|
|
cmp byte[esi],13
|
|
|
|
|
jne .cycle0
|
|
|
|
|
@@:
|
|
|
|
|
mov byte[edi],0
|
|
|
|
|
inc esi
|
|
|
|
|
.end_f:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;input:
|
|
|
|
|
; itxt - input description text
|
|
|
|
|
; msize - max size
|
|
|
|
|
align 4
|
|
|
|
|
proc FileInit uses eax ebx ecx edi esi, itxt:dword, msize:dword
|
|
|
|
|
stdcall [tl_node_poi_get_info], tree1,0
|
|
|
|
|
or eax,eax
|
|
|
|
|
jz @f
|
|
|
|
|
mov ebx,eax
|
|
|
|
|
stdcall [tl_node_poi_get_data], tree1,ebx
|
|
|
|
|
stdcall clear_object_in_list, eax
|
|
|
|
|
@@:
|
|
|
|
|
stdcall [tl_info_clear], tree1 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD>⪠ ᯨ᪠ <EFBFBD><EFBFBD>ꥪ⮢
|
|
|
|
|
mov dword[offs_last_timer],0
|
|
|
|
|
|
|
|
|
|
mov esi,[itxt]
|
|
|
|
|
mov ebx,esi
|
|
|
|
|
add ebx,[msize]
|
|
|
|
|
stdcall ObjectInit,ObjData,ebx
|
|
|
|
|
stdcall [tl_cur_beg], tree1
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;input:
|
|
|
|
|
; esi - input description text
|
|
|
|
|
; pobj - pointer to object struct
|
|
|
|
|
; etxt - pointer to end of input text
|
|
|
|
|
align 4
|
|
|
|
|
proc ObjectInit uses eax ebx ecx edi, pobj:dword, etxt:dword
|
|
|
|
|
mov ebx,[pobj]
|
|
|
|
|
mov [ebx+Object.OType],'Obj'
|
|
|
|
|
mov edi,ebx
|
|
|
|
|
add edi,Object.Caption
|
|
|
|
|
mov dword[edi],'CNC'
|
|
|
|
|
|
|
|
|
|
stdcall get_max_lines
|
|
|
|
|
test eax,eax
|
|
|
|
|
jz .err_init
|
|
|
|
|
mov [ebx+Object.FigCount],eax
|
|
|
|
|
mov ecx,eax
|
|
|
|
|
|
|
|
|
|
shl eax,2
|
|
|
|
|
stdcall mem.Alloc,eax
|
|
|
|
|
mov [ebx+Object.FigData],eax
|
|
|
|
|
push ecx
|
|
|
|
|
mov edi,eax
|
|
|
|
|
xor eax,eax
|
|
|
|
|
rep stosd ;clear memory
|
|
|
|
|
pop ecx
|
|
|
|
|
|
|
|
|
|
stdcall add_object_in_list,0,0,ebx,0
|
|
|
|
|
;eax -> pointer to object node
|
|
|
|
|
mov edi,[ebx+Object.FigData]
|
|
|
|
|
align 4
|
|
|
|
|
.cycle0:
|
|
|
|
|
stdcall FigureInit,FigData,edi
|
|
|
|
|
cmp esi,[etxt]
|
|
|
|
|
jge .cycle0end
|
|
|
|
|
add edi,4
|
|
|
|
|
loop .cycle0
|
|
|
|
|
.cycle0end:
|
|
|
|
|
inc dword[ebx+Object.FigCount] ;???
|
|
|
|
|
or ecx,ecx
|
|
|
|
|
jz @f
|
|
|
|
|
;㬥<EFBFBD><EFBFBD>蠥<EFBFBD> <EFBFBD><EFBFBD>ꥬ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>뤥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
sub [ebx+Object.FigCount],ecx
|
|
|
|
|
mov eax,[ebx+Object.FigCount]
|
|
|
|
|
shl eax,2
|
|
|
|
|
stdcall mem.ReAlloc,[ebx+Object.FigData],eax
|
|
|
|
|
mov [ebx+Object.FigData],eax
|
|
|
|
|
@@:
|
|
|
|
|
|
|
|
|
|
stdcall ObjCalculateScale,ebx
|
|
|
|
|
|
|
|
|
|
jmp .end_f
|
|
|
|
|
.err_init:
|
|
|
|
|
notify_window_run txt_err_1
|
|
|
|
|
.end_f:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
proc ObjCalculateScale uses eax ebx ecx edi, pobj:dword
|
|
|
|
|
mov ebx,[pobj]
|
|
|
|
|
|
|
|
|
|
;*** Calculate scale for object ***
|
|
|
|
|
finit
|
|
|
|
|
|
|
|
|
|
;found min coord X
|
|
|
|
|
mov ecx,[ebx+Object.FigCount]
|
|
|
|
|
jecxz .cycle2end
|
|
|
|
|
mov edi,[ebx+Object.FigData]
|
2018-09-24 18:42:54 +02:00
|
|
|
|
@@:
|
|
|
|
|
mov eax,[edi]
|
|
|
|
|
dec ecx
|
|
|
|
|
jecxz .cycle2end
|
|
|
|
|
add edi,4
|
|
|
|
|
or eax,eax
|
|
|
|
|
jz @b
|
|
|
|
|
cmp [eax+Figure.PoiCount],0
|
|
|
|
|
je @b
|
2018-09-14 18:10:51 +02:00
|
|
|
|
push edi esi ;copy first min X
|
|
|
|
|
lea esi,[eax+Figure.MinX]
|
|
|
|
|
lea edi,[ebx+Object.MinX]
|
|
|
|
|
movsd
|
|
|
|
|
movsd
|
|
|
|
|
pop esi edi
|
|
|
|
|
align 4
|
|
|
|
|
.cycle2:
|
|
|
|
|
mov eax,[edi]
|
|
|
|
|
or eax,eax
|
|
|
|
|
jz @f
|
|
|
|
|
cmp [eax+Figure.PoiCount],0
|
|
|
|
|
je @f
|
|
|
|
|
fld qword[eax+Figure.MinX]
|
|
|
|
|
fcomp qword[ebx+Object.MinX]
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
2018-09-24 18:42:54 +02:00
|
|
|
|
jae @f
|
2018-09-14 18:10:51 +02:00
|
|
|
|
push edi esi
|
|
|
|
|
mov eax,[edi]
|
|
|
|
|
lea esi,[eax+Figure.MinX]
|
|
|
|
|
lea edi,[ebx+Object.MinX]
|
|
|
|
|
movsd
|
|
|
|
|
movsd
|
|
|
|
|
pop esi edi
|
|
|
|
|
@@:
|
|
|
|
|
add edi,4
|
|
|
|
|
loop .cycle2
|
|
|
|
|
.cycle2end:
|
|
|
|
|
|
|
|
|
|
;found min coord Y
|
|
|
|
|
mov ecx,[ebx+Object.FigCount]
|
|
|
|
|
jecxz .cycle3end
|
|
|
|
|
mov edi,[ebx+Object.FigData]
|
2018-09-24 18:42:54 +02:00
|
|
|
|
@@:
|
|
|
|
|
mov eax,[edi]
|
|
|
|
|
dec ecx
|
|
|
|
|
jecxz .cycle3end
|
|
|
|
|
add edi,4
|
|
|
|
|
or eax,eax
|
|
|
|
|
jz @b
|
|
|
|
|
cmp [eax+Figure.PoiCount],0
|
|
|
|
|
je @b
|
2018-09-14 18:10:51 +02:00
|
|
|
|
push edi esi ;copy first min Y
|
|
|
|
|
lea esi,[eax+Figure.MinY]
|
|
|
|
|
lea edi,[ebx+Object.MinY]
|
|
|
|
|
movsd
|
|
|
|
|
movsd
|
|
|
|
|
pop esi edi
|
|
|
|
|
align 4
|
|
|
|
|
.cycle3:
|
|
|
|
|
mov eax,[edi]
|
|
|
|
|
or eax,eax
|
|
|
|
|
jz @f
|
|
|
|
|
cmp [eax+Figure.PoiCount],0
|
|
|
|
|
je @f
|
|
|
|
|
fld qword[eax+Figure.MinY]
|
|
|
|
|
fcomp qword[ebx+Object.MinY]
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
2018-09-24 18:42:54 +02:00
|
|
|
|
jae @f
|
2018-09-14 18:10:51 +02:00
|
|
|
|
push edi esi
|
|
|
|
|
mov eax,[edi]
|
|
|
|
|
lea esi,[eax+Figure.MinY]
|
|
|
|
|
lea edi,[ebx+Object.MinY]
|
|
|
|
|
movsd
|
|
|
|
|
movsd
|
|
|
|
|
pop esi edi
|
|
|
|
|
@@:
|
|
|
|
|
add edi,4
|
|
|
|
|
loop .cycle3
|
|
|
|
|
.cycle3end:
|
|
|
|
|
|
|
|
|
|
;found max coord X
|
|
|
|
|
mov ecx,[ebx+Object.FigCount]
|
|
|
|
|
jecxz .cycle4end
|
|
|
|
|
mov edi,[ebx+Object.FigData]
|
|
|
|
|
;copy first min X
|
|
|
|
|
mov eax,[edi]
|
|
|
|
|
fld qword[eax+Figure.MinX]
|
|
|
|
|
fadd qword[eax+Figure.SizeX]
|
|
|
|
|
fstp qword[ebx+Object.SizeX]
|
|
|
|
|
dec ecx
|
|
|
|
|
jecxz .cycle4end
|
|
|
|
|
align 4
|
|
|
|
|
.cycle4:
|
|
|
|
|
add edi,4
|
|
|
|
|
mov eax,[edi]
|
|
|
|
|
or eax,eax
|
|
|
|
|
jz @f
|
|
|
|
|
cmp [eax+Figure.PoiCount],0
|
|
|
|
|
je @f
|
|
|
|
|
fld qword[eax+Figure.MinX]
|
|
|
|
|
fadd qword[eax+Figure.SizeX]
|
|
|
|
|
fcomp qword[ebx+Object.SizeX]
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
|
|
|
|
jbe @f
|
|
|
|
|
mov eax,[edi]
|
|
|
|
|
fld qword[eax+Figure.MinX]
|
|
|
|
|
fadd qword[eax+Figure.SizeX]
|
|
|
|
|
fstp qword[ebx+Object.SizeX]
|
|
|
|
|
@@:
|
|
|
|
|
loop .cycle4
|
|
|
|
|
.cycle4end:
|
|
|
|
|
|
|
|
|
|
;found max coord Y
|
|
|
|
|
mov ecx,[ebx+Object.FigCount]
|
|
|
|
|
jecxz .cycle5end
|
|
|
|
|
mov edi,[ebx+Object.FigData]
|
|
|
|
|
;copy first min Y
|
|
|
|
|
mov eax,[edi]
|
|
|
|
|
fld qword[eax+Figure.MinY]
|
|
|
|
|
fadd qword[eax+Figure.SizeY]
|
|
|
|
|
fstp qword[ebx+Object.SizeY]
|
|
|
|
|
dec ecx
|
|
|
|
|
jecxz .cycle5end
|
|
|
|
|
align 4
|
|
|
|
|
.cycle5:
|
|
|
|
|
add edi,4
|
|
|
|
|
mov eax,[edi]
|
|
|
|
|
or eax,eax
|
|
|
|
|
jz @f
|
|
|
|
|
cmp [eax+Figure.PoiCount],0
|
|
|
|
|
je @f
|
|
|
|
|
fld qword[eax+Figure.MinY]
|
|
|
|
|
fadd qword[eax+Figure.SizeY]
|
|
|
|
|
fcomp qword[ebx+Object.SizeY]
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
|
|
|
|
jbe @f
|
|
|
|
|
mov eax,[edi]
|
|
|
|
|
fld qword[eax+Figure.MinY]
|
|
|
|
|
fadd qword[eax+Figure.SizeY]
|
|
|
|
|
fstp qword[ebx+Object.SizeY]
|
|
|
|
|
@@:
|
|
|
|
|
loop .cycle5
|
|
|
|
|
.cycle5end:
|
|
|
|
|
|
|
|
|
|
;found size X
|
|
|
|
|
fld qword[ebx+Object.SizeX]
|
|
|
|
|
fsub qword[ebx+Object.MinX]
|
|
|
|
|
fstp qword[ebx+Object.SizeX]
|
|
|
|
|
;found size Y
|
|
|
|
|
fld qword[ebx+Object.SizeY]
|
|
|
|
|
fsub qword[ebx+Object.MinY]
|
|
|
|
|
fstp qword[ebx+Object.SizeY]
|
|
|
|
|
|
|
|
|
|
;*** Calculate scale ***
|
|
|
|
|
fld1
|
|
|
|
|
fstp qword[ebx+Object.WScale] ;set default scale
|
|
|
|
|
|
|
|
|
|
fld qword[ebx+Object.SizeX]
|
|
|
|
|
ftst
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
|
|
|
|
jne .els_0 ;if (SizeX == 0.0)
|
|
|
|
|
ffree st0
|
|
|
|
|
fincstp
|
|
|
|
|
jmp .els_1
|
|
|
|
|
.els_0: ;else if (SizeX != 0.0)
|
|
|
|
|
fild dword[buf_0.w]
|
|
|
|
|
fisub dword[graf_margin_left]
|
|
|
|
|
fisub dword[graf_margin_right]
|
|
|
|
|
fxch st1
|
|
|
|
|
fdivp
|
|
|
|
|
fstp qword[ebx+Object.WScale]
|
|
|
|
|
.els_1:
|
|
|
|
|
|
|
|
|
|
fld qword[ebx+Object.SizeY]
|
|
|
|
|
ftst
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
|
|
|
|
jne .els_2 ;if (SizeY == 0.0)
|
|
|
|
|
ffree st0
|
|
|
|
|
fincstp
|
|
|
|
|
jmp .els_3
|
|
|
|
|
.els_2: ;else if (SizeY != 0.0)
|
|
|
|
|
fild dword[buf_0.h]
|
|
|
|
|
fisub dword[graf_margin_top]
|
|
|
|
|
fisub dword[graf_margin_bot]
|
|
|
|
|
fxch st1
|
|
|
|
|
fdivp
|
|
|
|
|
fcom qword[ebx+Object.WScale]
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
|
|
|
|
jbe @f
|
|
|
|
|
ffree st0
|
|
|
|
|
fincstp
|
|
|
|
|
jmp .els_3
|
|
|
|
|
@@:
|
|
|
|
|
fstp qword[ebx+Object.WScale]
|
|
|
|
|
.els_3:
|
|
|
|
|
|
|
|
|
|
fld1
|
|
|
|
|
fstp qword[ebx+Figure.MScale]
|
|
|
|
|
mov dword[ebx+Figure.MCentrX],0
|
|
|
|
|
mov dword[ebx+Figure.MCentrY],0
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;input:
|
|
|
|
|
; esi - input description text
|
|
|
|
|
; pmem - pointer to memory for struct
|
|
|
|
|
; pfig - pointer to figure struct
|
|
|
|
|
;output:
|
|
|
|
|
; esi - output description text
|
|
|
|
|
align 4
|
|
|
|
|
proc FigureInit uses eax ebx ecx edx edi, pmem:dword, pfig:dword
|
|
|
|
|
mov ebx,[pmem]
|
|
|
|
|
mov [ebx+Figure.OType],'Fig'
|
|
|
|
|
mov edi,ebx
|
|
|
|
|
add edi,Figure.Caption
|
|
|
|
|
stdcall txt_load_line,32
|
|
|
|
|
|
|
|
|
|
xor eax,eax
|
|
|
|
|
mov [ebx+Figure.PoiCount],eax
|
|
|
|
|
mov [ebx+Figure.PoiData],eax
|
|
|
|
|
cmp byte[esi],'X'
|
|
|
|
|
jne .end0
|
|
|
|
|
stdcall get_max_points
|
|
|
|
|
mov [ebx+Figure.PoiCount],eax
|
|
|
|
|
or eax,eax
|
|
|
|
|
jz .end0
|
|
|
|
|
mov ecx,eax
|
|
|
|
|
imul eax,sizeof.Point
|
|
|
|
|
stdcall mem.Alloc,eax
|
|
|
|
|
mov [ebx+Figure.PoiData],eax
|
|
|
|
|
or eax,eax
|
|
|
|
|
jz .err_init
|
|
|
|
|
mov edi,eax
|
|
|
|
|
align 4
|
|
|
|
|
.cycle0:
|
|
|
|
|
stdcall PointInit,edi
|
|
|
|
|
or eax,eax
|
|
|
|
|
jz .cycle0end
|
|
|
|
|
add edi,sizeof.Point
|
|
|
|
|
loop .cycle0
|
|
|
|
|
.cycle0end:
|
|
|
|
|
or ecx,ecx
|
|
|
|
|
jz .end1
|
|
|
|
|
;㬥<EFBFBD><EFBFBD>蠥<EFBFBD> <EFBFBD><EFBFBD>ꥬ <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>뤥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>祪
|
|
|
|
|
sub [ebx+Figure.PoiCount],ecx
|
|
|
|
|
mov eax,[ebx+Figure.PoiCount]
|
|
|
|
|
imul eax,sizeof.Point
|
|
|
|
|
stdcall mem.ReAlloc,[ebx+Figure.PoiData],eax
|
|
|
|
|
mov [ebx+Figure.PoiData],eax
|
|
|
|
|
jmp .end1
|
|
|
|
|
.err_init:
|
|
|
|
|
notify_window_run txt_err_2
|
|
|
|
|
.end0:
|
|
|
|
|
;command
|
|
|
|
|
stdcall txt_next_line, 80
|
|
|
|
|
cmp byte[esi],13
|
|
|
|
|
jne @f
|
|
|
|
|
;if null line
|
|
|
|
|
inc esi
|
|
|
|
|
cmp byte[esi],10
|
|
|
|
|
jne .end2
|
|
|
|
|
inc esi
|
|
|
|
|
.end2:
|
|
|
|
|
mov dword[edi],(10 shl 8)+13 ;new line
|
|
|
|
|
@@:
|
|
|
|
|
stdcall add_object_in_list,1,1,ebx,[pfig]
|
|
|
|
|
jmp .end_f
|
|
|
|
|
.end1:
|
|
|
|
|
;coords
|
|
|
|
|
stdcall add_object_in_list,2,1,ebx,[pfig]
|
|
|
|
|
or eax,eax
|
|
|
|
|
jz .end_f
|
|
|
|
|
stdcall FigCalculateSizes,eax,1
|
|
|
|
|
.end_f:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;input:
|
|
|
|
|
; esi - pointer to file
|
|
|
|
|
;output:
|
|
|
|
|
; eax - max lines in file
|
|
|
|
|
align 4
|
|
|
|
|
proc get_max_lines uses esi
|
|
|
|
|
xor eax,eax
|
|
|
|
|
.cycle0:
|
|
|
|
|
cmp byte[esi],13
|
|
|
|
|
jne @f
|
|
|
|
|
inc eax
|
|
|
|
|
@@:
|
|
|
|
|
inc esi
|
|
|
|
|
cmp byte[esi],0
|
|
|
|
|
jne .cycle0
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;input:
|
|
|
|
|
; esi - pointer to file
|
|
|
|
|
;output:
|
|
|
|
|
; eax - max point coords in file
|
|
|
|
|
align 4
|
|
|
|
|
proc get_max_points uses esi
|
|
|
|
|
xor eax,eax
|
|
|
|
|
.cycle0:
|
|
|
|
|
cmp word[esi],' Y'
|
|
|
|
|
jne @f
|
|
|
|
|
inc eax
|
|
|
|
|
@@:
|
|
|
|
|
inc esi
|
|
|
|
|
cmp byte[esi+1],0
|
|
|
|
|
jne .cycle0
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;input:
|
|
|
|
|
; opt_calc - <EFBFBD> 0 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠡ 䨣<EFBFBD><EFBFBD><EFBFBD>,
|
|
|
|
|
; 1 - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ࠧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠡ 䨣<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
proc FigCalculateSizes uses eax ebx ecx edi esi, pfig:dword, opt_calc:dword
|
|
|
|
|
mov ebx,[pfig]
|
|
|
|
|
or ebx,ebx
|
|
|
|
|
jz .end_f
|
|
|
|
|
|
|
|
|
|
finit
|
|
|
|
|
bt dword[opt_calc],0
|
|
|
|
|
jnc .calc_scale
|
|
|
|
|
|
|
|
|
|
;*** Calculate sizes ***
|
|
|
|
|
mov esi,[ebx+Figure.PoiData]
|
|
|
|
|
or esi,esi
|
|
|
|
|
jz .end_f
|
|
|
|
|
|
|
|
|
|
lea esi,[esi+Point.CoordX]
|
|
|
|
|
lea edi,[ebx+Figure.MinX]
|
|
|
|
|
movsd
|
|
|
|
|
movsd ;Figure.MinX = Point[0].CoordX
|
|
|
|
|
sub esi,8
|
|
|
|
|
lea edi,[ebx+Figure.SizeX]
|
|
|
|
|
movsd
|
|
|
|
|
movsd ;Figure.SizeX = Point[0].CoordX
|
|
|
|
|
mov esi,[ebx+Figure.PoiData]
|
|
|
|
|
lea esi,[esi+Point.CoordY]
|
|
|
|
|
lea edi,[ebx+Figure.MinY]
|
|
|
|
|
movsd
|
|
|
|
|
movsd ;Figure.MinY = Point[0].CoordY
|
|
|
|
|
sub esi,8
|
|
|
|
|
lea edi,[ebx+Figure.SizeY]
|
|
|
|
|
movsd
|
|
|
|
|
movsd ;Figure.SizeY = Point[0].CoordY
|
|
|
|
|
|
|
|
|
|
;found min coord X
|
|
|
|
|
mov ecx,[ebx+Figure.PoiCount]
|
|
|
|
|
jecxz .cycle2end
|
|
|
|
|
mov edi,[ebx+Figure.PoiData]
|
|
|
|
|
align 4
|
|
|
|
|
.cycle2:
|
|
|
|
|
fld qword[edi+Point.CoordX]
|
|
|
|
|
fcomp qword[ebx+Figure.MinX]
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
|
|
|
|
ja @f
|
|
|
|
|
push edi esi
|
|
|
|
|
lea esi,[edi+Point.CoordX]
|
|
|
|
|
lea edi,[ebx+Figure.MinX]
|
|
|
|
|
movsd
|
|
|
|
|
movsd
|
|
|
|
|
pop esi edi
|
|
|
|
|
@@:
|
|
|
|
|
add edi,sizeof.Point
|
|
|
|
|
loop .cycle2
|
|
|
|
|
.cycle2end:
|
|
|
|
|
|
|
|
|
|
;found min coord Y
|
|
|
|
|
mov ecx,[ebx+Figure.PoiCount]
|
|
|
|
|
jecxz .cycle3end
|
|
|
|
|
mov edi,[ebx+Figure.PoiData]
|
|
|
|
|
align 4
|
|
|
|
|
.cycle3:
|
|
|
|
|
fld qword[edi+Point.CoordY]
|
|
|
|
|
fcomp qword[ebx+Figure.MinY]
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
|
|
|
|
ja @f
|
|
|
|
|
push edi esi
|
|
|
|
|
lea esi,[edi+Point.CoordY]
|
|
|
|
|
lea edi,[ebx+Figure.MinY]
|
|
|
|
|
movsd
|
|
|
|
|
movsd
|
|
|
|
|
pop esi edi
|
|
|
|
|
@@:
|
|
|
|
|
add edi,sizeof.Point
|
|
|
|
|
loop .cycle3
|
|
|
|
|
.cycle3end:
|
|
|
|
|
|
|
|
|
|
;found max coord X
|
|
|
|
|
mov ecx,[ebx+Figure.PoiCount]
|
|
|
|
|
jecxz .cycle4end
|
|
|
|
|
mov edi,[ebx+Figure.PoiData]
|
|
|
|
|
align 4
|
|
|
|
|
.cycle4:
|
|
|
|
|
fld qword[edi+Point.CoordX]
|
|
|
|
|
fcomp qword[ebx+Figure.SizeX]
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
|
|
|
|
jbe @f
|
|
|
|
|
push edi esi
|
|
|
|
|
lea esi,[edi+Point.CoordX]
|
|
|
|
|
lea edi,[ebx+Figure.SizeX]
|
|
|
|
|
movsd
|
|
|
|
|
movsd
|
|
|
|
|
pop esi edi
|
|
|
|
|
@@:
|
|
|
|
|
add edi,sizeof.Point
|
|
|
|
|
loop .cycle4
|
|
|
|
|
.cycle4end:
|
|
|
|
|
|
|
|
|
|
;found max coord Y
|
|
|
|
|
mov ecx,[ebx+Figure.PoiCount]
|
|
|
|
|
jecxz .cycle5end
|
|
|
|
|
mov edi,[ebx+Figure.PoiData]
|
|
|
|
|
align 4
|
|
|
|
|
.cycle5:
|
|
|
|
|
fld qword[edi+Point.CoordY]
|
|
|
|
|
fcomp qword[ebx+Figure.SizeY]
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
|
|
|
|
jbe @f
|
|
|
|
|
push edi esi
|
|
|
|
|
lea esi,[edi+Point.CoordY]
|
|
|
|
|
lea edi,[ebx+Figure.SizeY]
|
|
|
|
|
movsd
|
|
|
|
|
movsd
|
|
|
|
|
pop esi edi
|
|
|
|
|
@@:
|
|
|
|
|
add edi,sizeof.Point
|
|
|
|
|
loop .cycle5
|
|
|
|
|
.cycle5end:
|
|
|
|
|
|
|
|
|
|
;found size X
|
|
|
|
|
fld qword[ebx+Figure.SizeX]
|
|
|
|
|
fsub qword[ebx+Figure.MinX]
|
|
|
|
|
fstp qword[ebx+Figure.SizeX]
|
|
|
|
|
;found size Y
|
|
|
|
|
fld qword[ebx+Figure.SizeY]
|
|
|
|
|
fsub qword[ebx+Figure.MinY]
|
|
|
|
|
fstp qword[ebx+Figure.SizeY]
|
|
|
|
|
|
|
|
|
|
;*** Calculate scale ***
|
|
|
|
|
align 4
|
|
|
|
|
.calc_scale:
|
|
|
|
|
mov dword[ebx+Figure.MCentrX],0
|
|
|
|
|
mov dword[ebx+Figure.MCentrY],0
|
|
|
|
|
fld1
|
|
|
|
|
fst qword[ebx+Figure.MScale] ;???
|
|
|
|
|
fstp qword[ebx+Figure.WScale] ;set default scale
|
|
|
|
|
|
|
|
|
|
fld qword[ebx+Figure.SizeX]
|
|
|
|
|
ftst
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
|
|
|
|
jne .els_0 ;if (SizeX == 0.0)
|
|
|
|
|
ffree st0
|
|
|
|
|
fincstp
|
|
|
|
|
jmp .els_1
|
|
|
|
|
.els_0: ;else if (SizeX != 0.0)
|
|
|
|
|
fild dword[buf_0.w]
|
|
|
|
|
fisub dword[graf_margin_left]
|
|
|
|
|
fisub dword[graf_margin_right]
|
|
|
|
|
fxch st1
|
|
|
|
|
fdivp
|
|
|
|
|
fstp qword[ebx+Figure.WScale]
|
|
|
|
|
.els_1:
|
|
|
|
|
|
|
|
|
|
fld qword[ebx+Figure.SizeY]
|
|
|
|
|
ftst
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
|
|
|
|
jne .els_2 ;if (SizeY == 0.0)
|
|
|
|
|
ffree st0
|
|
|
|
|
fincstp
|
|
|
|
|
jmp .els_3
|
|
|
|
|
.els_2: ;else if (SizeY != 0.0)
|
|
|
|
|
fild dword[buf_0.h]
|
|
|
|
|
fisub dword[graf_margin_top]
|
|
|
|
|
fisub dword[graf_margin_bot]
|
|
|
|
|
fxch st1
|
|
|
|
|
fdivp
|
|
|
|
|
fcom qword[ebx+Figure.WScale]
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
|
|
|
|
jbe @f
|
|
|
|
|
ffree st0
|
|
|
|
|
fincstp
|
|
|
|
|
jmp .els_3
|
|
|
|
|
@@:
|
|
|
|
|
fstp qword[ebx+Figure.WScale]
|
|
|
|
|
.els_3:
|
|
|
|
|
|
|
|
|
|
.end_f:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;input:
|
|
|
|
|
; esi - input description text
|
|
|
|
|
; ppoi - pointer to point struct
|
|
|
|
|
;output:
|
|
|
|
|
; eax - 0 (if error init) or 1
|
|
|
|
|
; esi - output description text
|
|
|
|
|
align 4
|
|
|
|
|
proc PointInit uses ebx ecx edi, ppoi:dword
|
|
|
|
|
mov ecx,64 ;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>横<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
@@:
|
|
|
|
|
lodsb
|
|
|
|
|
cmp al,' '
|
|
|
|
|
jne @f
|
|
|
|
|
loop @b
|
|
|
|
|
@@:
|
|
|
|
|
dec esi
|
|
|
|
|
cmp byte[esi],'X'
|
|
|
|
|
jne .err_init
|
|
|
|
|
inc esi
|
|
|
|
|
stdcall conv_str_to_int, esi
|
|
|
|
|
mov ebx,[ppoi]
|
|
|
|
|
|
|
|
|
|
;Data_String <- esi
|
|
|
|
|
push esi
|
|
|
|
|
mov ecx,32
|
|
|
|
|
mov edi,esi
|
|
|
|
|
@@:
|
|
|
|
|
lodsb
|
|
|
|
|
or al,al
|
|
|
|
|
jz @f
|
|
|
|
|
cmp al,' '
|
|
|
|
|
je @f
|
|
|
|
|
cmp al,13
|
|
|
|
|
je @f
|
|
|
|
|
loop @b
|
|
|
|
|
@@:
|
|
|
|
|
mov esi,edi
|
|
|
|
|
sub ecx,32
|
|
|
|
|
neg ecx
|
|
|
|
|
mov edi,Data_String
|
|
|
|
|
rep movsb
|
|
|
|
|
mov byte[edi],0
|
|
|
|
|
pop esi
|
|
|
|
|
stdcall String_to_DoubleFloat
|
|
|
|
|
;Data_Double -> Point.CoordX
|
|
|
|
|
push esi
|
|
|
|
|
mov esi,Data_Double
|
|
|
|
|
lea edi,[ebx+Point.CoordX]
|
|
|
|
|
movsd
|
|
|
|
|
movsd
|
|
|
|
|
pop esi
|
|
|
|
|
|
|
|
|
|
push edi
|
|
|
|
|
mov al,'Y'
|
|
|
|
|
mov ecx,80
|
|
|
|
|
mov edi,esi
|
|
|
|
|
repne scasb
|
|
|
|
|
mov esi,edi
|
|
|
|
|
pop edi
|
|
|
|
|
;Data_String <- esi
|
|
|
|
|
push esi
|
|
|
|
|
mov ecx,32
|
|
|
|
|
mov edi,esi
|
|
|
|
|
@@:
|
|
|
|
|
lodsb
|
|
|
|
|
or al,al
|
|
|
|
|
jz @f
|
|
|
|
|
cmp al,' '
|
|
|
|
|
je @f
|
|
|
|
|
cmp al,13
|
|
|
|
|
je @f
|
|
|
|
|
loop @b
|
|
|
|
|
@@:
|
|
|
|
|
mov esi,edi
|
|
|
|
|
sub ecx,32
|
|
|
|
|
neg ecx
|
|
|
|
|
mov edi,Data_String
|
|
|
|
|
rep movsb
|
|
|
|
|
mov byte[edi],0
|
|
|
|
|
pop esi
|
|
|
|
|
stdcall String_to_DoubleFloat
|
|
|
|
|
;Data_Double -> Point.CoordY
|
|
|
|
|
push esi
|
|
|
|
|
mov esi,Data_Double
|
|
|
|
|
lea edi,[ebx+Point.CoordY]
|
|
|
|
|
movsd
|
|
|
|
|
movsd
|
|
|
|
|
pop esi
|
|
|
|
|
|
|
|
|
|
stdcall txt_next_line, 80
|
|
|
|
|
jmp @f
|
|
|
|
|
.err_init:
|
|
|
|
|
xor eax,eax
|
|
|
|
|
jmp .end_f
|
|
|
|
|
@@:
|
|
|
|
|
xor eax,eax
|
|
|
|
|
inc eax
|
|
|
|
|
.end_f:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;input:
|
|
|
|
|
; icon - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
; level - <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㧫<EFBFBD>
|
|
|
|
|
; buffer - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>塞<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
; pfig - 㪠<EFBFBD><EFBFBD>⥫<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 䨣<EFBFBD><EFBFBD><EFBFBD> (<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> த<EFBFBD>⥫<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ꥪ<EFBFBD><EFBFBD>)
|
|
|
|
|
;output:
|
|
|
|
|
; eax - object data pointer
|
|
|
|
|
align 4
|
|
|
|
|
proc add_object_in_list uses ebx, icon:dword,level:dword,buffer:dword, pfig:dword
|
|
|
|
|
mov ax,word[icon]
|
|
|
|
|
shl eax,16
|
|
|
|
|
mov ax,word[level]
|
|
|
|
|
|
|
|
|
|
stdcall [tl_node_add], tree1, eax, [buffer]
|
|
|
|
|
stdcall [tl_node_get_data],tree1
|
|
|
|
|
mov ebx,[pfig]
|
|
|
|
|
or ebx,ebx
|
|
|
|
|
jz @f
|
|
|
|
|
mov [ebx],eax
|
|
|
|
|
@@:
|
|
|
|
|
stdcall [tl_cur_next], tree1
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
proc clear_object_in_list uses eax, buffer:dword
|
|
|
|
|
mov eax,[buffer]
|
|
|
|
|
cmp dword[eax+Object.FigCount],0 ;or Figure.PoiCount
|
|
|
|
|
je .end_f
|
|
|
|
|
stdcall mem.Free,[eax+Object.FigData] ;or Figure.PoiData
|
|
|
|
|
.end_f:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;description:
|
|
|
|
|
; <EFBFBD>㭪<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ᮢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>࠭<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ꥪ<EFBFBD><EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
proc draw_obj2d, pobj:dword
|
|
|
|
|
locals
|
|
|
|
|
CentrX dd ?
|
|
|
|
|
CentrY dd ?
|
|
|
|
|
endl
|
|
|
|
|
pushad
|
|
|
|
|
mov ebx,[pobj]
|
|
|
|
|
stdcall [buf2d_clear], buf_0, [buf_0.color]
|
|
|
|
|
mov ecx,[ebx+Object.FigCount]
|
|
|
|
|
or ecx,ecx
|
|
|
|
|
jz .end_f
|
|
|
|
|
;;jecxz .end_f
|
|
|
|
|
mov edi,[ebx+Object.FigData]
|
|
|
|
|
finit
|
|
|
|
|
fld qword[ebx+Object.SizeY]
|
|
|
|
|
fmul qword[ebx+Object.WScale]
|
|
|
|
|
fmul qword[ebx+Object.MScale]
|
|
|
|
|
fchs
|
|
|
|
|
fistp dword[CentrY]
|
|
|
|
|
mov eax,[CentrY]
|
|
|
|
|
sub eax,[graf_margin_top]
|
|
|
|
|
sub eax,[graf_margin_bot]
|
|
|
|
|
add eax,[buf_0.h]
|
|
|
|
|
sar eax,1
|
|
|
|
|
add eax,[graf_margin_bot] ;_bot <EFBFBD> <EFBFBD><EFBFBD> _top - <EFBFBD> <EFBFBD><EFBFBD>裡 <EFBFBD> ⥬ <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. Y <EFBFBD><EFBFBD>ॢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
add eax,[ebx+Object.MCentrY]
|
|
|
|
|
mov [CentrY],eax
|
|
|
|
|
fld qword[ebx+Object.SizeX]
|
|
|
|
|
fmul qword[ebx+Object.WScale]
|
|
|
|
|
fmul qword[ebx+Object.MScale]
|
|
|
|
|
fchs
|
|
|
|
|
fistp dword[CentrX]
|
|
|
|
|
mov edx,[CentrX]
|
|
|
|
|
sub edx,[graf_margin_left]
|
|
|
|
|
sub edx,[graf_margin_right]
|
|
|
|
|
add edx,[buf_0.w]
|
|
|
|
|
sar edx,1
|
|
|
|
|
add edx,[graf_margin_left]
|
|
|
|
|
add edx,[ebx+Object.MCentrX]
|
|
|
|
|
mov [CentrX],edx
|
|
|
|
|
align 4
|
|
|
|
|
.cycle0:
|
|
|
|
|
stdcall draw_fig2d_litl, buf_0,ebx,[edi],0,edx,eax
|
|
|
|
|
add edi,4
|
|
|
|
|
loop .cycle0
|
|
|
|
|
stdcall [buf2d_flip_v], buf_0
|
|
|
|
|
|
|
|
|
|
bt dword[opt_draw],0
|
|
|
|
|
jnc .end_f
|
|
|
|
|
; draw min & sizes
|
|
|
|
|
mov word[NumberSymbolsAD],8
|
|
|
|
|
stdcall mem_copy, txt_buf,txt_size_x,20
|
|
|
|
|
fld qword[ebx+Object.SizeX]
|
|
|
|
|
fstp qword[Data_Double]
|
|
|
|
|
call DoubleFloat_to_String
|
|
|
|
|
call String_crop_0
|
|
|
|
|
stdcall str_cat,txt_buf,Data_String
|
|
|
|
|
stdcall str_cat,txt_buf,txt_n
|
|
|
|
|
stdcall str_cat,txt_buf,txt_size_y
|
|
|
|
|
fld qword[ebx+Object.SizeY]
|
|
|
|
|
fstp qword[Data_Double]
|
|
|
|
|
call DoubleFloat_to_String
|
|
|
|
|
call String_crop_0
|
|
|
|
|
stdcall str_cat,txt_buf,Data_String
|
|
|
|
|
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,23,0
|
|
|
|
|
|
|
|
|
|
fld qword[ebx+Object.MinX]
|
|
|
|
|
fstp qword[Data_Double]
|
|
|
|
|
stdcall mem_copy, txt_buf,txt_min_x,20
|
|
|
|
|
call DoubleFloat_to_String
|
|
|
|
|
call String_crop_0
|
|
|
|
|
stdcall str_cat,txt_buf,Data_String
|
|
|
|
|
stdcall str_cat,txt_buf,txt_n
|
|
|
|
|
stdcall str_cat,txt_buf,txt_min_y
|
|
|
|
|
fld qword[ebx+Object.MinY]
|
|
|
|
|
fstp qword[Data_Double]
|
|
|
|
|
call DoubleFloat_to_String
|
|
|
|
|
call String_crop_0
|
|
|
|
|
stdcall str_cat,txt_buf,Data_String
|
|
|
|
|
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,3,0
|
|
|
|
|
.end_f:
|
|
|
|
|
popad
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
proc draw_obj2d_png uses eax ebx ecx edi esi, pobj:dword
|
|
|
|
|
mov ebx,[pobj]
|
|
|
|
|
mov ecx,[ebx+Object.FigCount]
|
|
|
|
|
cmp dword[ebx+Object.FigCount],0
|
|
|
|
|
or ecx,ecx
|
|
|
|
|
jz .end_f
|
|
|
|
|
;;jecxz .end_f
|
|
|
|
|
mov edi,[ebx+Object.FigData]
|
|
|
|
|
stdcall [buf2d_delete], buf_png
|
|
|
|
|
finit
|
|
|
|
|
fld qword[ebx+Object.SizeY]
|
|
|
|
|
fmul qword[Scale1mm]
|
|
|
|
|
fiadd dword[graf_margin_top]
|
|
|
|
|
fiadd dword[graf_margin_bot]
|
|
|
|
|
fistp dword[buf_png.h]
|
|
|
|
|
fld qword[ebx+Object.SizeX]
|
|
|
|
|
fmul qword[Scale1mm]
|
|
|
|
|
fiadd dword[graf_margin_left]
|
|
|
|
|
fiadd dword[graf_margin_right]
|
|
|
|
|
fistp dword[buf_png.w]
|
|
|
|
|
stdcall [buf2d_create], buf_png
|
|
|
|
|
align 4
|
|
|
|
|
.cycle0:
|
|
|
|
|
stdcall draw_fig2d_litl, buf_png,ebx,[edi],Scale1mm,[graf_margin_left],[graf_margin_bot] ;_bot <EFBFBD> <EFBFBD><EFBFBD> _top - <EFBFBD> <EFBFBD><EFBFBD>裡 <EFBFBD> ⥬ <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. Y <EFBFBD><EFBFBD>ॢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
add edi,4
|
|
|
|
|
loop .cycle0
|
|
|
|
|
stdcall [buf2d_flip_v], buf_png
|
|
|
|
|
.end_f:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;input:
|
|
|
|
|
; pbuf - pointer to buffer 2d
|
|
|
|
|
;description:
|
|
|
|
|
; <EFBFBD>㭪<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ᮢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ꥪ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
proc draw_fig2d_litl, pbuf:dword, pobj:dword, pfig:dword, Scale:dword, CentrX:dword, CentrY:dword
|
|
|
|
|
locals
|
|
|
|
|
PervX dd 0 ;pervios point coord X
|
|
|
|
|
PervY dd 0 ;pervios point coord Y
|
|
|
|
|
GrafX dd ? ;active point coord X
|
|
|
|
|
GrafY dd ? ;active point coord Y
|
|
|
|
|
endl
|
|
|
|
|
pushad
|
|
|
|
|
mov ebx,[pfig]
|
|
|
|
|
test ebx,ebx
|
|
|
|
|
jz .end_f
|
|
|
|
|
mov ecx,[ebx+Figure.PoiCount]
|
|
|
|
|
;;jecxz .end_f
|
|
|
|
|
test ecx,ecx
|
|
|
|
|
jz .end_f
|
|
|
|
|
mov edi,[ebx+Figure.PoiData]
|
|
|
|
|
mov edx,[pobj]
|
|
|
|
|
|
|
|
|
|
fld1
|
|
|
|
|
mov eax,[Scale]
|
|
|
|
|
or eax,eax
|
|
|
|
|
jnz @f
|
|
|
|
|
lea eax,[edx+Object.MScale]
|
|
|
|
|
fmul qword[eax]
|
|
|
|
|
lea eax,[edx+Object.WScale]
|
|
|
|
|
@@:
|
|
|
|
|
fmul qword[eax]
|
|
|
|
|
align 4
|
|
|
|
|
.cycle0:
|
|
|
|
|
fld qword[edi+Point.CoordX]
|
|
|
|
|
fsub qword[edx+Object.MinX]
|
|
|
|
|
fmul st0,st1
|
|
|
|
|
fiadd dword[CentrX]
|
|
|
|
|
fistp dword[ebp-8]
|
|
|
|
|
fld qword[edi+Point.CoordY]
|
|
|
|
|
fsub qword[edx+Object.MinY]
|
|
|
|
|
fmul st0,st1
|
|
|
|
|
fiadd dword[CentrY]
|
|
|
|
|
fistp dword[ebp-4]
|
|
|
|
|
stdcall [buf2d_set_pixel], [pbuf], [GrafX],[GrafY], 0xff0000
|
|
|
|
|
cmp ecx,[ebx+Figure.PoiCount]
|
|
|
|
|
je @f
|
|
|
|
|
stdcall [buf2d_line_sm], [pbuf], [PervX],[PervY], [GrafX],[GrafY], 0x80
|
|
|
|
|
@@:
|
|
|
|
|
mov eax,[GrafX]
|
|
|
|
|
mov [PervX],eax
|
|
|
|
|
mov eax,[GrafY]
|
|
|
|
|
mov [PervY],eax
|
|
|
|
|
add edi,sizeof.Point
|
|
|
|
|
;;loop .cycle0
|
|
|
|
|
dec ecx
|
|
|
|
|
jnz .cycle0
|
|
|
|
|
ffree st0
|
|
|
|
|
fincstp
|
|
|
|
|
|
|
|
|
|
.end_f:
|
|
|
|
|
popad
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;description:
|
|
|
|
|
; <EFBFBD>㭪<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ᮢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>࠭<EFBFBD><EFBFBD><EFBFBD> 䨣<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
proc draw_fig2d, pfig:dword
|
|
|
|
|
locals
|
|
|
|
|
n dd 0
|
|
|
|
|
col_lin dd 0 ;梥<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 䨣<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
CentrX dd ?
|
|
|
|
|
CentrY dd ?
|
|
|
|
|
PervX dd 0 ;pervios point coord X
|
|
|
|
|
PervY dd 0 ;pervios point coord Y
|
|
|
|
|
GrafX dd ? ;active point coord X
|
|
|
|
|
GrafY dd ? ;active point coord Y
|
|
|
|
|
old_tl dd 0 ;old text coord X0
|
|
|
|
|
old_tt dd 0 ;old text coord Y0
|
|
|
|
|
old_tw dd 0 ;old text coord X1
|
|
|
|
|
old_th dd 0 ;old text coord Y1
|
|
|
|
|
new_tl dd 0 ;new text coord X0
|
|
|
|
|
;new_tt dd 0 ;new text coord Y0
|
|
|
|
|
new_tw dd 0 ;new text coord X1
|
|
|
|
|
;new_th dd 0 ;new text coord Y1
|
|
|
|
|
endl
|
|
|
|
|
pushad
|
|
|
|
|
stdcall [buf2d_clear], buf_0, [buf_0.color]
|
|
|
|
|
mov ebx,[pfig]
|
|
|
|
|
test ebx,ebx
|
|
|
|
|
jz .end_f
|
|
|
|
|
mov ecx,[ebx+Figure.PoiCount]
|
|
|
|
|
;;jecxz .end_f
|
|
|
|
|
test ecx,ecx
|
|
|
|
|
jz .end_f
|
|
|
|
|
mov edi,[ebx+Figure.PoiData]
|
|
|
|
|
finit
|
|
|
|
|
fld qword[ebx+Figure.SizeY]
|
|
|
|
|
fmul qword[ebx+Figure.WScale]
|
|
|
|
|
fmul qword[ebx+Figure.MScale]
|
|
|
|
|
fchs
|
|
|
|
|
fistp dword[CentrY]
|
|
|
|
|
mov eax,[CentrY]
|
|
|
|
|
sub eax,[graf_margin_top]
|
|
|
|
|
sub eax,[graf_margin_bot]
|
|
|
|
|
add eax,[buf_0.h]
|
|
|
|
|
sar eax,1
|
|
|
|
|
add eax,[graf_margin_bot]
|
|
|
|
|
add eax,[ebx+Figure.MCentrY]
|
|
|
|
|
mov [CentrY],eax
|
|
|
|
|
;CentrY = (-(Figure.SizeY * Figure.WScale) - graf_margin_top - graf_margin_bot + buf_0.h) / 2 + graf_margin_bot
|
|
|
|
|
fld qword[ebx+Figure.SizeX]
|
|
|
|
|
fmul qword[ebx+Figure.WScale]
|
|
|
|
|
fmul qword[ebx+Figure.MScale]
|
|
|
|
|
fchs
|
|
|
|
|
fistp dword[CentrX]
|
|
|
|
|
mov eax,[CentrX]
|
|
|
|
|
sub eax,[graf_margin_left]
|
|
|
|
|
sub eax,[graf_margin_right]
|
|
|
|
|
add eax,[buf_0.w]
|
|
|
|
|
sar eax,1
|
|
|
|
|
add eax,[graf_margin_left]
|
|
|
|
|
add eax,[ebx+Figure.MCentrX]
|
|
|
|
|
mov [CentrX],eax
|
|
|
|
|
;CentrX = (-(Figure.SizeX * Figure.WScale) - graf_margin_left - graf_margin_right + buf_0.w) / 2 + graf_margin_left
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
.cycle0:
|
|
|
|
|
fld qword[edi+Point.CoordX]
|
|
|
|
|
fsub qword[ebx+Figure.MinX]
|
|
|
|
|
fmul qword[ebx+Figure.WScale]
|
|
|
|
|
fmul qword[ebx+Figure.MScale]
|
|
|
|
|
fiadd dword[CentrX]
|
|
|
|
|
fistp dword[GrafX]
|
|
|
|
|
;GrafX = (Point.CoordX - Figure.MinX) * Figure.WScale + CentrX
|
|
|
|
|
fld qword[edi+Point.CoordY]
|
|
|
|
|
fsub qword[ebx+Figure.MinY]
|
|
|
|
|
fmul qword[ebx+Figure.WScale]
|
|
|
|
|
fmul qword[ebx+Figure.MScale]
|
|
|
|
|
fiadd dword[CentrY]
|
|
|
|
|
fisub dword[buf_0.h] ;invert coord Y
|
|
|
|
|
fchs
|
|
|
|
|
fistp dword[GrafY]
|
|
|
|
|
;GrafY = -((Point.CoordY - Figure.MinY) * Figure.WScale + CentrY - buf_0.h)
|
|
|
|
|
|
|
|
|
|
stdcall [buf2d_set_pixel], buf_0, [GrafX],[GrafY], 0xff0000
|
|
|
|
|
mov dword[col_lin],0x80
|
|
|
|
|
bt dword[edi+Point.Prop],PROP_BIT_SELECT
|
|
|
|
|
jnc @f
|
|
|
|
|
stdcall [buf2d_circle], buf_0, [GrafX],[GrafY], 3, 0xff0000
|
|
|
|
|
@@:
|
|
|
|
|
cmp ecx,[ebx+Figure.PoiCount]
|
|
|
|
|
je @f
|
|
|
|
|
stdcall [buf2d_line_sm], buf_0, [PervX],[PervY], [GrafX],[GrafY], [col_lin]
|
|
|
|
|
@@:
|
|
|
|
|
mov eax,[GrafX]
|
|
|
|
|
mov [PervX],eax
|
|
|
|
|
mov edx,[GrafY]
|
|
|
|
|
mov [PervY],edx
|
|
|
|
|
add edi,sizeof.Point
|
|
|
|
|
|
|
|
|
|
bt dword[opt_draw],0
|
|
|
|
|
jnc .end0
|
|
|
|
|
; draw number points
|
|
|
|
|
;mov eax,[GrafX]
|
|
|
|
|
;mov edx,[GrafY]
|
|
|
|
|
add eax,2
|
|
|
|
|
add edx,2
|
|
|
|
|
push eax edi
|
|
|
|
|
mov eax,[n]
|
|
|
|
|
mov edi,txt_buf
|
|
|
|
|
stdcall convert_int_to_str,20
|
|
|
|
|
pop edi eax
|
|
|
|
|
|
|
|
|
|
inc dword[n]
|
|
|
|
|
;calculate new text coords
|
|
|
|
|
mov [new_tl],eax
|
|
|
|
|
mov esi,eax
|
|
|
|
|
stdcall str_len,txt_buf
|
|
|
|
|
imul eax,[buf_1.w]
|
|
|
|
|
add eax,esi
|
|
|
|
|
mov [new_tw],eax
|
|
|
|
|
;rect compare coords
|
|
|
|
|
cmp [old_tl],eax
|
|
|
|
|
jg .no_comp
|
|
|
|
|
cmp [old_tw],esi
|
|
|
|
|
jl .no_comp
|
|
|
|
|
;calculate new text coord Y1
|
|
|
|
|
mov esi,edx
|
|
|
|
|
add esi,[font_h]
|
|
|
|
|
cmp [old_tt],esi
|
|
|
|
|
jg .no_comp
|
|
|
|
|
cmp [old_th],edx
|
|
|
|
|
;jl .no_comp
|
|
|
|
|
;jmp .end0
|
|
|
|
|
jge .end0
|
|
|
|
|
.no_comp:
|
|
|
|
|
mov eax,[new_tl]
|
|
|
|
|
mov [old_tl],eax
|
|
|
|
|
mov eax,[new_tw]
|
|
|
|
|
mov [old_tw],eax
|
|
|
|
|
mov [old_tt],edx
|
|
|
|
|
add edx,[font_h]
|
|
|
|
|
mov [old_th],edx
|
|
|
|
|
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,[old_tl],[old_tt],0x000000
|
|
|
|
|
.end0:
|
|
|
|
|
dec ecx
|
|
|
|
|
jnz .cycle0
|
|
|
|
|
|
|
|
|
|
stdcall sel_points_get_count,[pfig]
|
|
|
|
|
or eax,eax
|
|
|
|
|
jz .no_point
|
|
|
|
|
stdcall mem_copy, txt_buf,txt_poi_sel,txt_poi_sel.end-txt_poi_sel
|
|
|
|
|
mov edi,txt_buf+txt_poi_sel.end-txt_poi_sel
|
|
|
|
|
stdcall convert_int_to_str, 20
|
|
|
|
|
mov word[NumberSymbolsAD],8
|
|
|
|
|
cmp eax,1
|
|
|
|
|
jne @f
|
|
|
|
|
;<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>࠭<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>窠, <EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD>뢮<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>⠫쭮<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ଠ樨
|
|
|
|
|
stdcall sel_points_get_first,[pfig]
|
|
|
|
|
stdcall str_cat,txt_buf,txt_ls
|
|
|
|
|
fld qword[eax+Point.CoordX]
|
|
|
|
|
fstp qword[Data_Double]
|
|
|
|
|
call DoubleFloat_to_String
|
|
|
|
|
call String_crop_0
|
|
|
|
|
stdcall str_cat,txt_buf,Data_String
|
|
|
|
|
stdcall str_cat,txt_buf,txt_coma
|
|
|
|
|
fld qword[eax+Point.CoordY]
|
|
|
|
|
fstp qword[Data_Double]
|
|
|
|
|
call DoubleFloat_to_String
|
|
|
|
|
call String_crop_0
|
|
|
|
|
stdcall str_cat,txt_buf,Data_String
|
|
|
|
|
stdcall str_cat,txt_buf,txt_rs
|
|
|
|
|
jmp .end1
|
|
|
|
|
@@:
|
|
|
|
|
cmp eax,2
|
|
|
|
|
jne .end1
|
|
|
|
|
;<EFBFBD> <EFBFBD><EFBFBD><EFBFBD>࠭<EFBFBD> 2 <EFBFBD><EFBFBD>窨
|
|
|
|
|
stdcall sel_points_get_first,[pfig]
|
|
|
|
|
fld qword[eax+Point.CoordX]
|
|
|
|
|
fld qword[eax+Point.CoordY]
|
|
|
|
|
stdcall sel_points_get_last,[pfig]
|
|
|
|
|
fsub qword[eax+Point.CoordY]
|
|
|
|
|
fmul st0,st0
|
|
|
|
|
fxch st1
|
|
|
|
|
fsub qword[eax+Point.CoordX]
|
|
|
|
|
fmul st0,st0
|
|
|
|
|
faddp st1,st0
|
|
|
|
|
fsqrt
|
|
|
|
|
fstp qword[Data_Double]
|
|
|
|
|
call DoubleFloat_to_String
|
|
|
|
|
call String_crop_0
|
|
|
|
|
stdcall str_cat,txt_buf,txt_len
|
|
|
|
|
stdcall str_cat,txt_buf,Data_String
|
|
|
|
|
.end1:
|
|
|
|
|
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,3,0
|
|
|
|
|
jmp .end_f ;<EFBFBD><EFBFBD> <EFBFBD>뢮<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ଠ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD> ࠧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
.no_point:
|
|
|
|
|
|
|
|
|
|
bt dword[opt_draw],0
|
|
|
|
|
jnc .end_f
|
|
|
|
|
; draw min & sizes
|
|
|
|
|
mov word[NumberSymbolsAD],8
|
|
|
|
|
stdcall mem_copy, txt_buf,txt_size_x,20
|
|
|
|
|
fld qword[ebx+Figure.SizeX]
|
|
|
|
|
fstp qword[Data_Double]
|
|
|
|
|
call DoubleFloat_to_String
|
|
|
|
|
call String_crop_0
|
|
|
|
|
stdcall str_cat,txt_buf,Data_String
|
|
|
|
|
stdcall str_cat,txt_buf,txt_n
|
|
|
|
|
stdcall str_cat,txt_buf,txt_size_y
|
|
|
|
|
fld qword[ebx+Figure.SizeY]
|
|
|
|
|
fstp qword[Data_Double]
|
|
|
|
|
call DoubleFloat_to_String
|
|
|
|
|
call String_crop_0
|
|
|
|
|
stdcall str_cat,txt_buf,Data_String
|
|
|
|
|
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,23,0
|
|
|
|
|
|
|
|
|
|
fld qword[ebx+Figure.MinX]
|
|
|
|
|
fstp qword[Data_Double]
|
|
|
|
|
stdcall mem_copy, txt_buf,txt_min_x,20
|
|
|
|
|
call DoubleFloat_to_String
|
|
|
|
|
call String_crop_0
|
|
|
|
|
stdcall str_cat,txt_buf,Data_String
|
|
|
|
|
stdcall str_cat,txt_buf,txt_n
|
|
|
|
|
stdcall str_cat,txt_buf,txt_min_y
|
|
|
|
|
fld qword[ebx+Figure.MinY]
|
|
|
|
|
fstp qword[Data_Double]
|
|
|
|
|
call DoubleFloat_to_String
|
|
|
|
|
call String_crop_0
|
|
|
|
|
stdcall str_cat,txt_buf,Data_String
|
|
|
|
|
stdcall [buf2d_draw_text], buf_0, buf_1,txt_buf,3,3,0
|
|
|
|
|
.end_f:
|
|
|
|
|
popad
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;input:
|
|
|
|
|
; pnode - 㪠<EFBFBD><EFBFBD>⥫<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㧫<EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
proc get_object_data, pnode:dword
|
|
|
|
|
mov ecx,[pnode]
|
|
|
|
|
cmp [ecx+Object.OType],'Obj'
|
|
|
|
|
jne .end0
|
|
|
|
|
mov ecx,ObjData
|
|
|
|
|
jmp .end_f
|
|
|
|
|
.end0:
|
|
|
|
|
xor ecx,ecx
|
|
|
|
|
.end_f:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;input:
|
|
|
|
|
; pfig - pointer to figure
|
|
|
|
|
;output:
|
|
|
|
|
; eax - 㪠<EFBFBD><EFBFBD>⥫<EFBFBD> <EFBFBD><EFBFBD> த<EFBFBD>⥫<EFBFBD>᪨<EFBFBD> <EFBFBD><EFBFBD>ꥪ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD> 0 <EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
; ecx - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 䨣<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ꥪ<EFBFBD><EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
proc found_parent_obj uses ebx edx edi, pfig:dword
|
|
|
|
|
mov eax,ObjData
|
|
|
|
|
mov edx,[eax+Object.FigCount]
|
|
|
|
|
or edx,edx
|
|
|
|
|
jz .cycle1end
|
|
|
|
|
mov edi,[eax+Object.FigData]
|
|
|
|
|
xor ecx,ecx
|
|
|
|
|
.cycle1: ;横<EFBFBD> <EFBFBD><EFBFBD> 䨣<EFBFBD>ࠬ
|
|
|
|
|
mov ebx,[edi]
|
|
|
|
|
cmp ebx,[pfig]
|
|
|
|
|
je .end_f ;<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
add edi,4
|
|
|
|
|
inc ecx
|
|
|
|
|
dec edx
|
|
|
|
|
jnz .cycle1
|
|
|
|
|
.cycle1end:
|
|
|
|
|
xor eax,eax
|
|
|
|
|
.end_f:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;description:
|
|
|
|
|
; <EFBFBD><EFBFBD><EFBFBD>⠥<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ <EFBFBD>뤥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>祪
|
|
|
|
|
align 4
|
|
|
|
|
proc sel_points_get_count uses ebx ecx, pFig:dword
|
|
|
|
|
xor eax,eax
|
|
|
|
|
mov ebx,[pFig]
|
|
|
|
|
mov ecx,[ebx+Figure.PoiCount]
|
|
|
|
|
or ecx,ecx
|
|
|
|
|
jz .no_point
|
|
|
|
|
mov ebx,[ebx+Figure.PoiData]
|
|
|
|
|
.cycle0:
|
|
|
|
|
bt dword[ebx+Point.Prop],PROP_BIT_SELECT
|
|
|
|
|
jnc @f
|
|
|
|
|
inc eax
|
|
|
|
|
@@:
|
|
|
|
|
add ebx,sizeof.Point
|
|
|
|
|
loop .cycle0
|
|
|
|
|
.no_point:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;description:
|
|
|
|
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㪠<EFBFBD><EFBFBD>⥫<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>뤥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
;output:
|
|
|
|
|
; eax - 㪠<EFBFBD><EFBFBD>⥫<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> 0 <EFBFBD> <EFBFBD><EFBFBD> <EFBFBD>뤥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
proc sel_points_get_first uses ecx, pFig:dword
|
|
|
|
|
mov eax,[pFig]
|
|
|
|
|
mov ecx,[eax+Figure.PoiCount]
|
|
|
|
|
or ecx,ecx
|
|
|
|
|
jz .no_point
|
|
|
|
|
mov eax,[eax+Figure.PoiData]
|
|
|
|
|
.cycle0:
|
|
|
|
|
bt dword[eax+Point.Prop],PROP_BIT_SELECT
|
|
|
|
|
jc .end_f
|
|
|
|
|
add eax,sizeof.Point
|
|
|
|
|
loop .cycle0
|
|
|
|
|
.no_point:
|
|
|
|
|
xor eax,eax
|
|
|
|
|
.end_f:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;input:
|
|
|
|
|
; pObj - 㪠<EFBFBD><EFBFBD>⥫<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ꥪ<EFBFBD>
|
|
|
|
|
; FigN - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
;description:
|
|
|
|
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 䨣<EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>न<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>窨
|
|
|
|
|
align 4
|
|
|
|
|
proc figure_update_coords uses eax ecx edx, pObj:dword, FigN:dword
|
|
|
|
|
mov eax,[pObj]
|
|
|
|
|
mov ecx,[eax+Object.FigCount]
|
|
|
|
|
mov eax,[eax+Object.FigData]
|
|
|
|
|
mov edx,[FigN]
|
|
|
|
|
cmp ecx,edx
|
|
|
|
|
jle @f
|
|
|
|
|
stdcall FigCalculateSizes,[eax+4*edx],1
|
|
|
|
|
stdcall ObjCalculateScale,[pObj]
|
|
|
|
|
@@:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;description:
|
|
|
|
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㪠<EFBFBD><EFBFBD>⥫<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>뤥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
proc sel_points_get_last uses ebx ecx, pFig:dword
|
|
|
|
|
mov ebx,[pFig]
|
|
|
|
|
mov ecx,[ebx+Figure.PoiCount]
|
|
|
|
|
or ecx,ecx
|
|
|
|
|
jz .no_point
|
|
|
|
|
mov eax,ecx
|
|
|
|
|
dec eax
|
|
|
|
|
imul eax,sizeof.Point
|
|
|
|
|
add eax,[ebx+Figure.PoiData]
|
|
|
|
|
.cycle0:
|
|
|
|
|
bt dword[eax+Point.Prop],PROP_BIT_SELECT
|
|
|
|
|
jc .end_f
|
|
|
|
|
sub eax,sizeof.Point
|
|
|
|
|
loop .cycle0
|
|
|
|
|
.no_point:
|
|
|
|
|
xor eax,eax
|
|
|
|
|
.end_f:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;description:
|
|
|
|
|
; ᭨<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>뤥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD>祪
|
|
|
|
|
align 4
|
|
|
|
|
proc sel_points_clear uses ebx ecx, pFig:dword
|
|
|
|
|
mov ebx,[pFig]
|
|
|
|
|
mov ecx,[ebx+Figure.PoiCount]
|
|
|
|
|
or ecx,ecx
|
|
|
|
|
jz .no_point
|
|
|
|
|
mov ebx,[ebx+Figure.PoiData]
|
|
|
|
|
.cycle0:
|
|
|
|
|
btr dword[ebx+Point.Prop],PROP_BIT_SELECT
|
|
|
|
|
add ebx,sizeof.Point
|
|
|
|
|
loop .cycle0
|
|
|
|
|
.no_point:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;description:
|
|
|
|
|
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 㪠<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD>⢠<EFBFBD> <EFBFBD>뤥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>祪
|
|
|
|
|
align 4
|
|
|
|
|
proc sel_points_invert_bit uses eax ebx ecx, pFig:dword, iBit:dword
|
|
|
|
|
mov ecx,[iBit]
|
|
|
|
|
xor eax,eax
|
|
|
|
|
inc eax
|
|
|
|
|
shl eax,cl
|
|
|
|
|
mov ebx,[pFig]
|
|
|
|
|
mov ecx,[ebx+Figure.PoiCount]
|
|
|
|
|
or ecx,ecx
|
|
|
|
|
jz .no_point
|
|
|
|
|
mov ebx,[ebx+Figure.PoiData]
|
|
|
|
|
.cycle0:
|
|
|
|
|
bt dword[ebx+Point.Prop],PROP_BIT_SELECT
|
|
|
|
|
jnc @f
|
|
|
|
|
xor dword[ebx+Point.Prop],eax
|
|
|
|
|
@@:
|
|
|
|
|
add ebx,sizeof.Point
|
|
|
|
|
loop .cycle0
|
|
|
|
|
.no_point:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
2019-05-23 21:31:53 +02:00
|
|
|
|
;description:
|
|
|
|
|
; <EFBFBD><EFBFBD>⨬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 䨣<EFBFBD><EFBFBD><EFBFBD>, <EFBFBD>뤥<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>譨<EFBFBD> <EFBFBD><EFBFBD>窨 (1-<EFBFBD> <EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>窨 <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|
|
|
|
align 4
|
|
|
|
|
proc points_optimize uses eax ebx ecx, pFig:dword
|
|
|
|
|
mov ebx,[pFig]
|
|
|
|
|
mov ecx,[ebx+Figure.PoiCount]
|
|
|
|
|
cmp ecx,3
|
|
|
|
|
jl .no_point
|
|
|
|
|
sub ecx,2 ;<EFBFBD>⭨<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>窨 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
stdcall sel_points_clear,ebx
|
|
|
|
|
mov ebx,[ebx+Figure.PoiData]
|
|
|
|
|
finit
|
|
|
|
|
.cycle0:
|
|
|
|
|
;calc (x0-x1)/(x0-x2)
|
|
|
|
|
fld qword[ebx+Point.CoordX]
|
|
|
|
|
add ebx,sizeof.Point
|
|
|
|
|
fcom qword[ebx+Point.CoordX]
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
|
|
|
|
jne @f
|
|
|
|
|
fcomp qword[ebx+sizeof.Point+Point.CoordX]
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
|
|
|
|
jne .no_sel ;if( (x0==x1) && (x0!=x2) )
|
|
|
|
|
jmp .sel ;if( x0==x1==x2 )
|
|
|
|
|
@@:
|
|
|
|
|
fld st0
|
|
|
|
|
fsub qword[ebx+Point.CoordX]
|
|
|
|
|
fxch st1
|
|
|
|
|
fsub qword[ebx+sizeof.Point+Point.CoordX]
|
|
|
|
|
fdivp
|
|
|
|
|
|
|
|
|
|
;calc (y0-y1)/(y0-y2)
|
|
|
|
|
fld qword[ebx-sizeof.Point+Point.CoordY]
|
|
|
|
|
fcom qword[ebx+Point.CoordY]
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
|
|
|
|
jne @f
|
|
|
|
|
fcomp qword[ebx+sizeof.Point+Point.CoordY]
|
|
|
|
|
fstsw ax
|
|
|
|
|
ffree st0 ;free (x0-x1)/(x0-x2)
|
|
|
|
|
fincstp
|
|
|
|
|
sahf
|
|
|
|
|
jne .no_sel ;if( (y0==y1) && (y0!=y2) )
|
|
|
|
|
jmp .sel ;if( y0==y1==y2 )
|
|
|
|
|
@@:
|
|
|
|
|
fld st0
|
|
|
|
|
fsub qword[ebx+Point.CoordY]
|
|
|
|
|
fxch st1
|
|
|
|
|
fsub qword[ebx+sizeof.Point+Point.CoordY]
|
|
|
|
|
fdivp
|
|
|
|
|
|
|
|
|
|
fsubp
|
|
|
|
|
fabs
|
|
|
|
|
fcomp qword[opt_koef] ;if( abs((x0-x1)/(x0-x2)-(y0-y1)/(y0-y2)) > 0.02)
|
|
|
|
|
fstsw ax
|
|
|
|
|
sahf
|
|
|
|
|
jae .no_sel
|
|
|
|
|
.sel:
|
|
|
|
|
bts dword[ebx+Point.Prop],PROP_BIT_SELECT
|
|
|
|
|
.no_sel:
|
|
|
|
|
loop .cycle0
|
|
|
|
|
.no_point:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
2018-09-14 18:10:51 +02:00
|
|
|
|
;input:
|
|
|
|
|
; pPoi - 㪠<EFBFBD><EFBFBD>⥫<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>窨
|
|
|
|
|
align 4
|
|
|
|
|
proc point_move_up, pObj:dword,pFig:dword,idFig:dword,pPoi:dword
|
|
|
|
|
pushad
|
|
|
|
|
;<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>뫮<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>窨
|
|
|
|
|
mov eax,[pObj]
|
|
|
|
|
mov ecx,[idFig]
|
|
|
|
|
mov edx,[eax+Object.FigCount]
|
|
|
|
|
or edx,edx
|
|
|
|
|
jz .end_f
|
|
|
|
|
mov edi,[eax+Object.FigData]
|
|
|
|
|
|
|
|
|
|
;<EFBFBD><EFBFBD><EFBFBD>塞 <EFBFBD><EFBFBD>窨 <EFBFBD><EFBFBD><EFBFBD>⠬<EFBFBD>
|
|
|
|
|
mov ecx,sizeof.Point
|
|
|
|
|
mov esi,[pPoi]
|
|
|
|
|
sub esi,ecx
|
|
|
|
|
mov edi,PoiData
|
|
|
|
|
rep movsb ;p(-1) > p_s
|
|
|
|
|
mov ecx,sizeof.Point
|
|
|
|
|
mov edi,[pPoi]
|
|
|
|
|
sub edi,ecx
|
|
|
|
|
rep movsb ;p(0) > p(-1)
|
|
|
|
|
mov esi,PoiData
|
|
|
|
|
mov ecx,sizeof.Point
|
|
|
|
|
rep movsb ;p_s > p(0)
|
|
|
|
|
.end_f:
|
|
|
|
|
popad
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
proc mouse_left_d uses eax ebx
|
|
|
|
|
stdcall [tl_node_get_data],tree1
|
|
|
|
|
or eax,eax
|
|
|
|
|
jz .end_f
|
|
|
|
|
|
|
|
|
|
cmp [eax+Figure.OType],'Fig'
|
|
|
|
|
je @f
|
|
|
|
|
cmp [eax+Figure.OType],'Obj'
|
2019-05-23 21:31:53 +02:00
|
|
|
|
jne .end_f
|
2018-09-14 18:10:51 +02:00
|
|
|
|
mov eax,ObjData
|
|
|
|
|
@@:
|
|
|
|
|
call buf_get_mouse_coord
|
|
|
|
|
cmp eax,-1
|
|
|
|
|
je .end_f
|
|
|
|
|
mov [mouse_down_x],eax
|
|
|
|
|
mov [mouse_down_y],ebx
|
|
|
|
|
.end_f:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
proc mouse_left_u uses eax ebx ecx
|
|
|
|
|
stdcall [tl_node_get_data],tree1
|
|
|
|
|
or eax,eax
|
|
|
|
|
jz .end_f
|
|
|
|
|
|
|
|
|
|
cmp [eax+Figure.OType],'Fig'
|
|
|
|
|
je @f
|
|
|
|
|
cmp [eax+Figure.OType],'Obj'
|
2019-05-23 21:31:53 +02:00
|
|
|
|
jne .end_f
|
2018-09-14 18:10:51 +02:00
|
|
|
|
mov eax,ObjData
|
|
|
|
|
@@:
|
|
|
|
|
mov ecx,eax
|
|
|
|
|
|
|
|
|
|
call buf_get_mouse_coord
|
|
|
|
|
cmp eax,-1
|
|
|
|
|
je .end_f
|
|
|
|
|
sub eax,[mouse_down_x]
|
|
|
|
|
sub ebx,[mouse_down_y]
|
|
|
|
|
add [ecx+Figure.MCentrX],eax
|
|
|
|
|
sub [ecx+Figure.MCentrY],ebx
|
|
|
|
|
mov dword[offs_last_timer],0
|
|
|
|
|
.end_f:
|
|
|
|
|
ret
|
|
|
|
|
endp
|
|
|
|
|
|
|
|
|
|
;output:
|
|
|
|
|
; eax, ebx - <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
align 4
|
|
|
|
|
proc mouse_right_d uses ecx edx edi
|
|
|
|
|
locals
|
|
|
|
|
BufX dd ?
|
|
|
|
|
BufY dd ?
|
|
|
|
|
CentrX dd ?
|
|
|
|
|
CentrY dd ?
|
|
|
|
|
GrafX dd ? ;active point coord X
|
|
|
|
|
GrafY dd ? ;active point coord Y
|
|
|
|
|
endl
|
|
|
|
|
call buf_get_mouse_coord
|
|
|
|
|
cmp eax,-1
|
|
|
|
|
je .end_f
|
|
|
|
|
mov [BufX],eax
|
|
|
|
|
mov [BufY],ebx
|
|
|
|
|
|
|
|
|
|
;<EFBFBD><EFBFBD><EFBFBD>ᬠ<EFBFBD>ਢ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD>뤥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
stdcall [tl_node_get_data],tree1
|
|
|
|
|
or eax,eax
|
|
|
|
|
jz .end_f
|
|
|
|
|
|
|
|
|
|
cmp [eax+Figure.OType],'Fig'
|
|
|
|
|
jne .end_fblo
|
|
|
|
|
|
|
|
|
|
mov ecx,eax
|
|
|
|
|
mcall SF_KEYBOARD,SSF_GET_CONTROL_KEYS ;<EFBFBD><EFBFBD>ઠ Shift
|
|
|
|
|
bt eax,0
|
|
|
|
|
jc @f
|
|
|
|
|
bt eax,1
|
|
|
|
|
jc @f
|
|
|
|
|
;<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Shift
|
|
|
|
|
stdcall sel_points_clear,ecx
|
|
|
|
|
@@:
|
|
|
|
|
mov ebx,ecx
|
|
|
|
|
mov ecx,[ebx+Figure.PoiCount]
|
|
|
|
|
;;jecxz .end_f
|
|
|
|
|
test ecx,ecx
|
|
|
|
|
jz .end_f
|
|
|
|
|
|
|
|
|
|
mov edi,[ebx+Figure.PoiData]
|
|
|
|
|
finit
|
|
|
|
|
fld qword[ebx+Figure.SizeY]
|
|
|
|
|
fmul qword[ebx+Figure.WScale]
|
|
|
|
|
fmul qword[ebx+Figure.MScale]
|
|
|
|
|
fchs
|
|
|
|
|
fistp dword[CentrY]
|
|
|
|
|
mov eax,[CentrY]
|
|
|
|
|
sub eax,[graf_margin_top]
|
|
|
|
|
sub eax,[graf_margin_bot]
|
|
|
|
|
add eax,[buf_0.h]
|
|
|
|
|
sar eax,1
|
|
|
|
|
add eax,[graf_margin_bot]
|
|
|
|
|
add eax,[ebx+Figure.MCentrY]
|
|
|
|
|
mov [CentrY],eax
|
|
|
|
|
fld qword[ebx+Figure.SizeX]
|
|
|
|
|
fmul qword[ebx+Figure.WScale]
|
|
|
|
|
fmul qword[ebx+Figure.MScale]
|
|
|
|
|
fchs
|
|
|
|
|
fistp dword[CentrX]
|
|
|
|
|
mov eax,[CentrX]
|
|
|
|
|
sub eax,[graf_margin_left]
|
|
|
|
|
sub eax,[graf_margin_right]
|
|
|
|
|
add eax,[buf_0.w]
|
|
|
|
|
sar eax,1
|
|
|
|
|
add eax,[graf_margin_left]
|
|
|
|
|
add eax,[ebx+Figure.MCentrX]
|
|
|
|
|
mov [CentrX],eax
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
.cycle0:
|
|
|
|
|
fld qword[edi+Point.CoordX]
|
|
|
|
|
fsub qword[ebx+Figure.MinX]
|
|
|
|
|
fmul qword[ebx+Figure.WScale]
|
|
|
|
|
fmul qword[ebx+Figure.MScale]
|
|
|
|
|
fiadd dword[CentrX]
|
|
|
|
|
fistp dword[GrafX]
|
|
|
|
|
fld qword[edi+Point.CoordY]
|
|
|
|
|
fsub qword[ebx+Figure.MinY]
|
|
|
|
|
fmul qword[ebx+Figure.WScale]
|
|
|
|
|
fmul qword[ebx+Figure.MScale]
|
|
|
|
|
fiadd dword[CentrY]
|
|
|
|
|
fisub dword[buf_0.h] ;invert coord Y
|
|
|
|
|
fchs
|
|
|
|
|
fistp dword[GrafY]
|
|
|
|
|
|
|
|
|
|
mov eax,[GrafX]
|
|
|
|
|
sub eax,[BufX]
|
|
|
|
|
bt eax,31
|
|
|
|
|
jnc @f
|
|
|
|
|
neg eax
|
|
|
|
|
@@:
|
|
|
|
|
mov edx,[GrafY]
|
|
|
|
|
sub edx,[BufY]
|
|
|
|
|
bt edx,31
|
|
|
|
|
jnc @f
|
|
|
|
|
neg edx
|
|
|
|
|
@@:
|
|
|
|
|
add eax,edx
|
|
|
|
|
cmp eax,7 ;<EFBFBD>ਡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>⥫쭮<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ﭨ<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>窨
|
|
|
|
|
jg @f
|
|
|
|
|
;<EFBFBD>뤥<EFBFBD>塞 <EFBFBD><EFBFBD><EFBFBD> ᭨<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>뤥<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD> <EFBFBD><EFBFBD>祪
|
|
|
|
|
xor dword[edi+Point.Prop],(1 shl PROP_BIT_SELECT)
|
|
|
|
|
@@:
|
|
|
|
|
|
|
|
|
|
add edi,sizeof.Point
|
|
|
|
|
dec ecx
|
|
|
|
|
jnz .cycle0
|
|
|
|
|
|
|
|
|
|
mov dword[offs_last_timer],0
|
|
|
|
|
;jmp .end_f
|
|
|
|
|
.end_fblo:
|
|
|
|
|
|
|
|
|
|
.end_f:
|
|
|
|
|
ret
|
|
|
|
|
endp
|