kolibrios-fun/programs/develop/libraries/vector/trunk/example_logo.asm

314 lines
6.8 KiB
NASM
Raw Normal View History

use32
org 0x0
db 'MENUET01' ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 8 <20><><EFBFBD><EFBFBD>
dd 0x1
dd start
dd i_end ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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 ;<3B><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
delt_size dd 0.05 ;<3B><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
scale_min dd 0.05 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
delt_x dd 10.0 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> 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 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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 ;<3B><><EFBFBD><EFBFBD>
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 ;<3B><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
push word 24*256+1
call [vect_buf_create]
push word 1
call [vect_buf_set_active] ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 1-<2D> <20><><EFBFBD><EFBFBD><EFBFBD>
red_win:
call draw_window
still:
mcall 10
cmp al,0x1 ;<3B><><EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
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] ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1-<2D> <20><><EFBFBD><EFBFBD><EFBFBD>
push dword 0x808000
push dword arr1v
push dword arr0c
call [vect_draw_cont]
push word 1
call [vect_buf_draw] ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1-<2D> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>
ret
button:
; mcall 17 ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; cmp ah,1
; jne still
.exit:
push word 1
call [vect_buf_delete] ;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1-<2D> <20><><EFBFBD><EFBFBD><EFBFBD>
mcall -1 ;<3B><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [',27,'], [',26,'] - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; [',24,'], [',25,'] - ࠧ<><E0A0A7><EFBFBD>',0
txtInfo2 db '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: [a], [d] - <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD>; [w], [s] - <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD>',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: ;<3B><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
rb 1024
stacktop:
cur_dir_path:
rb 4096
library_path:
rb 4096
mem: