Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3001 leency 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