Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. use32
  2.   org 0x0
  3.   db 'MENUET01' ;èäåíòèô. èñïîëíÿåìîãî ôàéëà âñåãäà 8 áàéò
  4.   dd 0x1
  5.   dd start
  6.   dd i_end ; ðàçìåð ïðèëîæåíèÿ
  7.   dd mem
  8.   dd stacktop
  9.   dd 0x0
  10.   dd cur_dir_path
  11.  
  12. include 'macros.inc'
  13. include 'vectors.inc' ;vectors functions constant
  14. include 'load_lib.mac'
  15.  
  16. @use_library
  17.  
  18. delt_angl dd 0.15708 ;óãîë ïîâîðîòà ïðè íàæàòèè êóðñîðîâ
  19. delt_size dd 0.05 ;øàã èçìåíåíèÿ ìàñøòàáà
  20. scale_min dd 0.05 ;ìèíèìàëüíûé ìàñøòàá
  21. delt_x dd 10.0 ;ïåðåäâèæåíèå ïî îñè x
  22. delt_y equ delt_x
  23.  
  24. arr0c:
  25.   .x dd 200.0
  26.   .y dd 150.0
  27.   .a dd 0.0 ;angle
  28.   .s dd 0.35 ;scale
  29. arr1v:
  30.   dw 12+VECT_PARAM_PROP_L+VECT_PARAM_COLOR ;òóëîâèùå
  31.   dd 0xffd040
  32.   dd VECT_CONT_BEZIER
  33.   dd 6.0,128.0, 41.0,113.0, 175.0,94.0, 211.0,78.0
  34.   dd 263.0,48.0, 300.0,29.0, 345.0,30.0, 383.0,52.0
  35.   dd 415.0,85.0, 443.0,100.0, 476.0,112.0, 519.0,135.0
  36.   dw 32+VECT_PARAM_PROP_L
  37.   dd VECT_CONT_BEZIER
  38.   dd 6.0,128.0, 48.0,127.0, 119.0,116.0, 202.0,114.0
  39.   dd 233.0,127.0, 274.0,185.0, 300.0,211.0, 351.0,243.0
  40.   dd 386.0,271.0, 398.0,292.0, 429.0,328.0, 507.0,384.0
  41.   dd 517.0,401.0, 534.0,402.0, 545.0,388.0, 568.0,386.0
  42.   dd 587.0,370.0, 612.0,393.0, 660.0,409.0, 712.0,447.0
  43.   dd 711.0,422.0, 764.0,438.0, 837.0,481.0, 853.0,480.0
  44.   dd 838.0,470.0, 860.0,466.0, 836.0,451.0, 851.0,447.0
  45.   dd 796.0,412.0, 743.0,361.0, 719.0,335.0, 677.0,290.0
  46.  
  47.   dw 23+VECT_PARAM_PROP_L ;êðûëüÿ
  48.   dd VECT_CONT_BEZIER
  49.   dd 437.0,130.0, 519.0,135.0, 591.0,139.0, 616.0,150.0
  50.   dd 697.0,163.0, 776.0,183.0, 849.0,230.0, 811.0,245.0
  51.   dd 808.0,265.0, 771.0,258.0, 769.0,281.0, 729.0,277.0
  52.   dd 718.0,296.0, 679.0,284.0, 665.0,294.0, 642.0,290.0
  53.   dd 636.0,304.0, 609.0,296.0, 596.0,306.0, 574.0,301.0
  54.   dd 541.0,299.0, 514.0,302.0, 495.0,299.0
  55.   dw 16+VECT_PARAM_PROP_L
  56.   dd VECT_CONT_BEZIER
  57.   dd 484.0,116.0, 514.0,110.0, 564.0,82.0, 618.0,63.0
  58.   dd 712.0,25.0, 774.0,25.0, 796.0,39.0, 778.0,51.0
  59.   dd 779.0,64.0, 754.0,78.0, 745.0,97.0, 720.0,113.0
  60.   dd 713.0,132.0, 688.0,146.0, 683.0,153.0, 668.0,158.0
  61.  
  62.   dw 7+VECT_PARAM_PROP_L+VECT_PARAM_COLOR ;ãëàç
  63.   dd 0x0
  64.   dd VECT_CONT_BEZIER
  65.   dd 292.0,88.0, 278.0,78.0, 262.0,86.0, 261.0,101.0
  66.   dd 274.0,110.0, 291.0,105.0, 292.0,88.0, 778.0,51.0
  67.   dw 0
  68.  
  69. align 4
  70. start:
  71.   mov ecx,sc
  72.   mov edx,sizeof.system_colors
  73.   mcall 48,3
  74.   mcall 40,0x27
  75.  
  76.   sys_load_library vectors_name, cur_dir_path, library_path, system_path, \
  77.     err_message_found_lib, head_f_l, vectors_lib_import, err_message_import, head_f_i
  78.  
  79.   push 5*65536+40
  80.   push 500*65536+350
  81.   push 0xffffd0 ;öâåò ôîíà
  82.   push word 24*256+1
  83.   call [vect_buf_create]
  84.  
  85.   push word 1
  86.   call [vect_buf_set_active] ;óñòàíàâëèâàåì ðåæèì ðèñîâàíèÿ â 1-é áóôåð
  87.  
  88. red_win:
  89.   call draw_window
  90.  
  91. still:
  92.   mcall 10
  93.  
  94.   cmp al,0x1 ;èçì. ïîëîæåíèå îêíà
  95.   jz red_win
  96.   cmp al,0x2
  97.   jz key
  98.   cmp al,0x3
  99.   jz button
  100.   jmp still
  101.  
  102. draw_window:
  103.   mcall 12,1
  104.  
  105.   xor eax,eax
  106.   mov ebx,10*65536+520
  107.   mov ecx,10*65536+430
  108.   mov edx,0xffffff;[sc.work]
  109.   or  edx,0x33000000
  110.   mov edi,hed
  111.   mcall
  112.  
  113.   mov eax,4
  114.   mov ebx,5*65536+5
  115.   mov ecx,0x808000
  116.   or  ecx,0x80000000
  117.   mov edx,txtInfo1
  118.   int 0x40
  119.   mov ebx,5*65536+20
  120.   mov edx,txtInfo2
  121.   int 0x40
  122.  
  123.   call draw_vect_image
  124.  
  125.   mcall 12,2
  126.   ret
  127.  
  128. draw_vect_image:
  129.   push word 1
  130.   call [vect_buf_clear] ;÷èñòèì 1-é áóôåð
  131.  
  132.   push dword 0x808000
  133.   push dword arr1v
  134.   push dword arr0c
  135.   call [vect_draw_cont]
  136.  
  137.   push word 1
  138.   call [vect_buf_draw] ;âûâîäèì 1-é áóôåð íà ýêðàí
  139.   ret
  140.  
  141. button:
  142. ;  mcall 17 ;ïîëó÷èòü êîä íàæàòîé êíîïêè
  143. ;  cmp ah,1
  144. ;  jne still
  145. .exit:
  146.   push word 1
  147.   call [vect_buf_delete] ;óäàëÿåì 1-é áóôåð
  148.   mcall -1 ;âûõîä èç ïðîãðàììû
  149.  
  150. key:
  151.   mcall 2
  152.  
  153.   cmp ah,27 ;Esc
  154.   je button.exit
  155.  
  156.   cmp ah,176 ;Left
  157.   jne @f
  158.     call Image_RotLeft
  159.     call draw_vect_image
  160.   @@:
  161.   cmp ah,179 ;Right
  162.   jne @f
  163.     call Image_RotRight
  164.     call draw_vect_image
  165.   @@:
  166.   cmp ah,178 ;Up
  167.   jne @f
  168.     fld dword[arr0c.s]
  169.     fadd dword[delt_size]
  170.     fstp dword[arr0c.s]
  171.     call draw_vect_image
  172.   @@:
  173.   cmp ah,177 ;Down
  174.   jne @f
  175.     call ScaleDec
  176.     call draw_vect_image
  177.   @@:
  178.   cmp ah,119 ;w
  179.   jne @f
  180.     call Image_MoveUp
  181.     call draw_vect_image
  182.   @@:
  183.   cmp ah,115 ;s
  184.   jne @f
  185.     call Image_MoveDown
  186.     call draw_vect_image
  187.   @@:
  188.   cmp ah,100 ;d
  189.   jne @f
  190.     call Image_MoveRight
  191.     call draw_vect_image
  192.   @@:
  193.   cmp ah,97 ;a
  194.   jne @f
  195.     call Image_MoveLeft
  196.     call draw_vect_image
  197.   @@:
  198.  
  199.   jmp still
  200.  
  201. ;d
  202. Image_MoveRight:
  203.   fld dword[arr0c.x]
  204.   fadd dword[delt_x]
  205.   fstp dword[arr0c.x]
  206.   ret
  207.  
  208. ;a
  209. Image_MoveLeft:
  210.   fld dword[arr0c.x]
  211.   fsub dword[delt_x]
  212.   fstp dword[arr0c.x]
  213.   ret
  214.  
  215. ;w
  216. Image_MoveUp:
  217.   fld dword[arr0c.y]
  218.   fsub dword[delt_y]
  219.   fstp dword[arr0c.y]
  220.   ret
  221.  
  222. ;s
  223. Image_MoveDown:
  224.   fld dword[arr0c.y]
  225.   fadd dword[delt_y]
  226.   fstp dword[arr0c.y]
  227.   ret
  228.  
  229. Image_RotLeft:
  230.   mov bl,1
  231.   fld dword[arr0c.a]
  232.   fsub dword[delt_angl]
  233.   fstp dword[arr0c.a]
  234.   ret
  235.  
  236. Image_RotRight:
  237.   mov bl,1
  238.   fld dword[arr0c.a]
  239.   fadd dword[delt_angl]
  240.   fstp dword[arr0c.a]
  241.   ret
  242.  
  243. ScaleDec:
  244.   push ax
  245.     finit
  246.     fld dword[arr0c.s]
  247.     fsub dword[delt_size]
  248.  
  249.     fcom dword[scale_min]
  250.     fstsw ax
  251.     sahf
  252.     jbe @f
  253.       fstp dword[arr0c.s]
  254.     @@:
  255.   pop ax
  256. ret
  257.  
  258. o_dan dd ?
  259. hed db 'Drawing vector image',0
  260. txtInfo1 db 'Šãàá®àë: [',27,'], [',26,'] - ¯®¢®à®â; [',24,'], [',25,'] - à §¬¥à',0
  261. txtInfo2 db 'Š­®¯ª¨: [a], [d] - ¢«¥¢®, ¢¯à ¢®; [w], [s] - ¢¢¥àå, ¢­¨§',0
  262. sc system_colors
  263.  
  264. ;--------------------------------------------------
  265. align 4
  266. vectors_lib_import:
  267.   vect_buf_create dd av_buf_create
  268.   vect_buf_set_active dd av_buf_set_active
  269.   vect_buf_clear dd av_buf_clear
  270.   vect_buf_draw dd av_draw_buf
  271.   vect_buf_delete dd av_buf_delete
  272.   vect_line dd av_line
  273.   vect_c_bezier dd av_c_bezier
  274.   vect_conv_cont dd av_conv_cont
  275.   vect_draw_cont dd av_draw_cont
  276.   vect_opred2i dd av_opred2i
  277.   vect_line_len4i dd av_line_len4i
  278.   vect_o_len dd av_o_len
  279.   vect_o_ang dd av_o_ang
  280.  
  281.   dd 0,0
  282.   av_buf_create db 'vect_buf_create',0
  283.   av_buf_set_active db 'vect_buf_set_active',0
  284.   av_buf_clear db 'vect_buf_clear',0
  285.   av_draw_buf db 'vect_buf_draw',0
  286.   av_buf_delete db 'vect_buf_delete',0
  287.   av_line db 'vect_line',0
  288.   av_c_bezier db 'vect_c_bezier',0
  289.   av_conv_cont db 'vect_conv_cont',0
  290.   av_draw_cont db 'vect_draw_cont',0
  291.   av_opred2i db 'vect_opred2i',0
  292.   av_line_len4i db 'vect_line_len4i',0
  293.   av_o_len db 'vect_o_len',0
  294.   av_o_ang db 'vect_o_ang',0
  295.  
  296. ;--------------------------------------------------
  297. system_path db '/sys/lib/'
  298. vectors_name db 'vectors.obj',0
  299. err_message_found_lib db 'Sorry I cannot load library vectors.obj',0
  300. head_f_i:
  301. head_f_l db 'System error',0
  302. err_message_import db 'Error on load import library vectors.obj',0
  303. ;--------------------------------------------------
  304.  
  305. i_end: ;êîíåö êîäà
  306.   rb 1024
  307. stacktop:
  308.   cur_dir_path:
  309.     rb 4096
  310.   library_path:
  311.     rb 4096
  312. mem:
  313.  
  314.