vector library by IgorA
git-svn-id: svn://kolibrios.org@3001 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
f38be8547b
commit
83bfd951f0
|
@ -0,0 +1,313 @@
|
|||
use32
|
||||
org 0x0
|
||||
db 'MENUET01' ;èäåíòèô. èñïîëíÿåìîãî ôàéëà âñåãäà 8 áàéò
|
||||
dd 0x1
|
||||
dd start
|
||||
dd i_end ; ðàçìåð ïðèëîæåíèÿ
|
||||
dd mem
|
||||
dd stacktop
|
||||
dd 0x0
|
||||
dd cur_dir_path
|
||||
|
||||
include 'macros.inc'
|
||||
include 'vectors.inc' ;vectors functions constant
|
||||
include 'load_lib.mac'
|
||||
|
||||
@use_library
|
||||
|
||||
delt_angl dd 0.15708 ;óãîë ïîâîðîòà ïðè íàæàòèè êóðñîðîâ
|
||||
delt_size dd 0.05 ;øàã èçìåíåíèÿ ìàñøòàáà
|
||||
scale_min dd 0.05 ;ìèíèìàëüíûé ìàñøòàá
|
||||
delt_x dd 10.0 ;ïåðåäâèæåíèå ïî îñè x
|
||||
delt_y equ delt_x
|
||||
|
||||
arr0c:
|
||||
.x dd 200.0
|
||||
.y dd 150.0
|
||||
.a dd 0.0 ;angle
|
||||
.s dd 0.35 ;scale
|
||||
arr1v:
|
||||
dw 12+VECT_PARAM_PROP_L+VECT_PARAM_COLOR ;òóëîâèùå
|
||||
dd 0xffd040
|
||||
dd VECT_CONT_BEZIER
|
||||
dd 6.0,128.0, 41.0,113.0, 175.0,94.0, 211.0,78.0
|
||||
dd 263.0,48.0, 300.0,29.0, 345.0,30.0, 383.0,52.0
|
||||
dd 415.0,85.0, 443.0,100.0, 476.0,112.0, 519.0,135.0
|
||||
dw 32+VECT_PARAM_PROP_L
|
||||
dd VECT_CONT_BEZIER
|
||||
dd 6.0,128.0, 48.0,127.0, 119.0,116.0, 202.0,114.0
|
||||
dd 233.0,127.0, 274.0,185.0, 300.0,211.0, 351.0,243.0
|
||||
dd 386.0,271.0, 398.0,292.0, 429.0,328.0, 507.0,384.0
|
||||
dd 517.0,401.0, 534.0,402.0, 545.0,388.0, 568.0,386.0
|
||||
dd 587.0,370.0, 612.0,393.0, 660.0,409.0, 712.0,447.0
|
||||
dd 711.0,422.0, 764.0,438.0, 837.0,481.0, 853.0,480.0
|
||||
dd 838.0,470.0, 860.0,466.0, 836.0,451.0, 851.0,447.0
|
||||
dd 796.0,412.0, 743.0,361.0, 719.0,335.0, 677.0,290.0
|
||||
|
||||
dw 23+VECT_PARAM_PROP_L ;êðûëüÿ
|
||||
dd VECT_CONT_BEZIER
|
||||
dd 437.0,130.0, 519.0,135.0, 591.0,139.0, 616.0,150.0
|
||||
dd 697.0,163.0, 776.0,183.0, 849.0,230.0, 811.0,245.0
|
||||
dd 808.0,265.0, 771.0,258.0, 769.0,281.0, 729.0,277.0
|
||||
dd 718.0,296.0, 679.0,284.0, 665.0,294.0, 642.0,290.0
|
||||
dd 636.0,304.0, 609.0,296.0, 596.0,306.0, 574.0,301.0
|
||||
dd 541.0,299.0, 514.0,302.0, 495.0,299.0
|
||||
dw 16+VECT_PARAM_PROP_L
|
||||
dd VECT_CONT_BEZIER
|
||||
dd 484.0,116.0, 514.0,110.0, 564.0,82.0, 618.0,63.0
|
||||
dd 712.0,25.0, 774.0,25.0, 796.0,39.0, 778.0,51.0
|
||||
dd 779.0,64.0, 754.0,78.0, 745.0,97.0, 720.0,113.0
|
||||
dd 713.0,132.0, 688.0,146.0, 683.0,153.0, 668.0,158.0
|
||||
|
||||
dw 7+VECT_PARAM_PROP_L+VECT_PARAM_COLOR ;ãëàç
|
||||
dd 0x0
|
||||
dd VECT_CONT_BEZIER
|
||||
dd 292.0,88.0, 278.0,78.0, 262.0,86.0, 261.0,101.0
|
||||
dd 274.0,110.0, 291.0,105.0, 292.0,88.0, 778.0,51.0
|
||||
dw 0
|
||||
|
||||
align 4
|
||||
start:
|
||||
mov ecx,sc
|
||||
mov edx,sizeof.system_colors
|
||||
mcall 48,3
|
||||
mcall 40,0x27
|
||||
|
||||
sys_load_library vectors_name, cur_dir_path, library_path, system_path, \
|
||||
err_message_found_lib, head_f_l, vectors_lib_import, err_message_import, head_f_i
|
||||
|
||||
push 5*65536+40
|
||||
push 500*65536+350
|
||||
push 0xffffd0 ;öâåò ôîíà
|
||||
push word 24*256+1
|
||||
call [vect_buf_create]
|
||||
|
||||
push word 1
|
||||
call [vect_buf_set_active] ;óñòàíàâëèâàåì ðåæèì ðèñîâàíèÿ â 1-é áóôåð
|
||||
|
||||
red_win:
|
||||
call draw_window
|
||||
|
||||
still:
|
||||
mcall 10
|
||||
|
||||
cmp al,0x1 ;èçì. ïîëîæåíèå îêíà
|
||||
jz red_win
|
||||
cmp al,0x2
|
||||
jz key
|
||||
cmp al,0x3
|
||||
jz button
|
||||
jmp still
|
||||
|
||||
draw_window:
|
||||
mcall 12,1
|
||||
|
||||
xor eax,eax
|
||||
mov ebx,10*65536+520
|
||||
mov ecx,10*65536+430
|
||||
mov edx,0xffffff;[sc.work]
|
||||
or edx,0x33000000
|
||||
mov edi,hed
|
||||
mcall
|
||||
|
||||
mov eax,4
|
||||
mov ebx,5*65536+5
|
||||
mov ecx,0x808000
|
||||
or ecx,0x80000000
|
||||
mov edx,txtInfo1
|
||||
int 0x40
|
||||
mov ebx,5*65536+20
|
||||
mov edx,txtInfo2
|
||||
int 0x40
|
||||
|
||||
call draw_vect_image
|
||||
|
||||
mcall 12,2
|
||||
ret
|
||||
|
||||
draw_vect_image:
|
||||
push word 1
|
||||
call [vect_buf_clear] ;÷èñòèì 1-é áóôåð
|
||||
|
||||
push dword 0x808000
|
||||
push dword arr1v
|
||||
push dword arr0c
|
||||
call [vect_draw_cont]
|
||||
|
||||
push word 1
|
||||
call [vect_buf_draw] ;âûâîäèì 1-é áóôåð íà ýêðàí
|
||||
ret
|
||||
|
||||
button:
|
||||
; mcall 17 ;ïîëó÷èòü êîä íàæàòîé êíîïêè
|
||||
; cmp ah,1
|
||||
; jne still
|
||||
.exit:
|
||||
push word 1
|
||||
call [vect_buf_delete] ;óäàëÿåì 1-é áóôåð
|
||||
mcall -1 ;âûõîä èç ïðîãðàììû
|
||||
|
||||
key:
|
||||
mcall 2
|
||||
|
||||
cmp ah,27 ;Esc
|
||||
je button.exit
|
||||
|
||||
cmp ah,176 ;Left
|
||||
jne @f
|
||||
call Image_RotLeft
|
||||
call draw_vect_image
|
||||
@@:
|
||||
cmp ah,179 ;Right
|
||||
jne @f
|
||||
call Image_RotRight
|
||||
call draw_vect_image
|
||||
@@:
|
||||
cmp ah,178 ;Up
|
||||
jne @f
|
||||
fld dword[arr0c.s]
|
||||
fadd dword[delt_size]
|
||||
fstp dword[arr0c.s]
|
||||
call draw_vect_image
|
||||
@@:
|
||||
cmp ah,177 ;Down
|
||||
jne @f
|
||||
call ScaleDec
|
||||
call draw_vect_image
|
||||
@@:
|
||||
cmp ah,119 ;w
|
||||
jne @f
|
||||
call Image_MoveUp
|
||||
call draw_vect_image
|
||||
@@:
|
||||
cmp ah,115 ;s
|
||||
jne @f
|
||||
call Image_MoveDown
|
||||
call draw_vect_image
|
||||
@@:
|
||||
cmp ah,100 ;d
|
||||
jne @f
|
||||
call Image_MoveRight
|
||||
call draw_vect_image
|
||||
@@:
|
||||
cmp ah,97 ;a
|
||||
jne @f
|
||||
call Image_MoveLeft
|
||||
call draw_vect_image
|
||||
@@:
|
||||
|
||||
jmp still
|
||||
|
||||
;d
|
||||
Image_MoveRight:
|
||||
fld dword[arr0c.x]
|
||||
fadd dword[delt_x]
|
||||
fstp dword[arr0c.x]
|
||||
ret
|
||||
|
||||
;a
|
||||
Image_MoveLeft:
|
||||
fld dword[arr0c.x]
|
||||
fsub dword[delt_x]
|
||||
fstp dword[arr0c.x]
|
||||
ret
|
||||
|
||||
;w
|
||||
Image_MoveUp:
|
||||
fld dword[arr0c.y]
|
||||
fsub dword[delt_y]
|
||||
fstp dword[arr0c.y]
|
||||
ret
|
||||
|
||||
;s
|
||||
Image_MoveDown:
|
||||
fld dword[arr0c.y]
|
||||
fadd dword[delt_y]
|
||||
fstp dword[arr0c.y]
|
||||
ret
|
||||
|
||||
Image_RotLeft:
|
||||
mov bl,1
|
||||
fld dword[arr0c.a]
|
||||
fsub dword[delt_angl]
|
||||
fstp dword[arr0c.a]
|
||||
ret
|
||||
|
||||
Image_RotRight:
|
||||
mov bl,1
|
||||
fld dword[arr0c.a]
|
||||
fadd dword[delt_angl]
|
||||
fstp dword[arr0c.a]
|
||||
ret
|
||||
|
||||
ScaleDec:
|
||||
push ax
|
||||
finit
|
||||
fld dword[arr0c.s]
|
||||
fsub dword[delt_size]
|
||||
|
||||
fcom dword[scale_min]
|
||||
fstsw ax
|
||||
sahf
|
||||
jbe @f
|
||||
fstp dword[arr0c.s]
|
||||
@@:
|
||||
pop ax
|
||||
ret
|
||||
|
||||
o_dan dd ?
|
||||
hed db 'Drawing vector image',0
|
||||
txtInfo1 db 'Šãàá®àë: [',27,'], [',26,'] - ¯®¢®à®â; [',24,'], [',25,'] - à §¬¥à',0
|
||||
txtInfo2 db 'Š®¯ª¨: [a], [d] - ¢«¥¢®, ¢¯à ¢®; [w], [s] - ¢¢¥àå, ¢¨§',0
|
||||
sc system_colors
|
||||
|
||||
;--------------------------------------------------
|
||||
align 4
|
||||
vectors_lib_import:
|
||||
vect_buf_create dd av_buf_create
|
||||
vect_buf_set_active dd av_buf_set_active
|
||||
vect_buf_clear dd av_buf_clear
|
||||
vect_buf_draw dd av_draw_buf
|
||||
vect_buf_delete dd av_buf_delete
|
||||
vect_line dd av_line
|
||||
vect_c_bezier dd av_c_bezier
|
||||
vect_conv_cont dd av_conv_cont
|
||||
vect_draw_cont dd av_draw_cont
|
||||
vect_opred2i dd av_opred2i
|
||||
vect_line_len4i dd av_line_len4i
|
||||
vect_o_len dd av_o_len
|
||||
vect_o_ang dd av_o_ang
|
||||
|
||||
dd 0,0
|
||||
av_buf_create db 'vect_buf_create',0
|
||||
av_buf_set_active db 'vect_buf_set_active',0
|
||||
av_buf_clear db 'vect_buf_clear',0
|
||||
av_draw_buf db 'vect_buf_draw',0
|
||||
av_buf_delete db 'vect_buf_delete',0
|
||||
av_line db 'vect_line',0
|
||||
av_c_bezier db 'vect_c_bezier',0
|
||||
av_conv_cont db 'vect_conv_cont',0
|
||||
av_draw_cont db 'vect_draw_cont',0
|
||||
av_opred2i db 'vect_opred2i',0
|
||||
av_line_len4i db 'vect_line_len4i',0
|
||||
av_o_len db 'vect_o_len',0
|
||||
av_o_ang db 'vect_o_ang',0
|
||||
|
||||
;--------------------------------------------------
|
||||
system_path db '/sys/lib/'
|
||||
vectors_name db 'vectors.obj',0
|
||||
err_message_found_lib db 'Sorry I cannot load library vectors.obj',0
|
||||
head_f_i:
|
||||
head_f_l db 'System error',0
|
||||
err_message_import db 'Error on load import library vectors.obj',0
|
||||
;--------------------------------------------------
|
||||
|
||||
i_end: ;êîíåö êîäà
|
||||
rb 1024
|
||||
stacktop:
|
||||
cur_dir_path:
|
||||
rb 4096
|
||||
library_path:
|
||||
rb 4096
|
||||
mem:
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue