Subversion Repositories Kolibri OS

Rev

Rev 3105 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2815 IgorA 1
use32
8271 IgorA 2
	org 0
2815 IgorA 3
	db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
8271 IgorA 4
	dd 1,start,i_end,mem,stacktop,0,cur_dir_path
2815 IgorA 5
 
6
include '../../../../../macros.inc'
7
include '../../../../../proc32.inc'
8271 IgorA 8
include '../../../../../KOSfuncs.inc'
9
include '../../../../../load_lib.mac'
3105 IgorA 10
include '../../../../../dll.inc'
2815 IgorA 11
 
8271 IgorA 12
@use_library mem.Alloc,mem.Free,mem.ReAlloc, 0 ;dll.Load
2815 IgorA 13
 
14
struct FileInfoBlock
15
	Function dd ?
16
	Position dd ?
17
	Flags	 dd ?
18
	Count	 dd ?
19
	Buffer	 dd ?
20
		db ?
21
	FileName dd ?
22
ends
23
 
24
max_open_file_size equ 64*1024 ;64 Kb
25
 
26
align 4
27
open_file_vox dd 0 ;указатель на область для открытия файлов
28
run_file_70 FileInfoBlock
29
f_name db 'vaz2106.vox',0
30
 
31
vox_offs_tree_table equ 4
32
 
33
;поворот объекта на 90 градусов
34
;x0y0 - x1y0
35
;x1y0 - x1y1
36
;x0y1 - x0y0
37
;x1y1 - x0y1
38
align 4
39
proc vox_obj_rot_z uses eax ebx ecx, v_obj:dword
40
	mov ebx,[v_obj]
41
	add ebx,vox_offs_tree_table
42
	mov ecx,2
43
	cld
44
	@@:
45
		mov eax,dword[ebx]
46
		mov byte[ebx+1],al
47
		mov byte[ebx+3],ah
48
		shr eax,16
49
		mov byte[ebx],al
50
		mov byte[ebx+2],ah
51
		add ebx,4
52
		loop @b
53
	ret
54
endp
55
 
56
 
57
 
58
align 4
59
start:
8271 IgorA 60
	load_library name_buf2d, library_path, system_path, import_buf2d_lib
2815 IgorA 61
	cmp eax,-1
62
	jz button.exit
63
 
8271 IgorA 64
	mcall SF_SET_EVENTS_MASK,0x27
2815 IgorA 65
	stdcall [buf2d_create], buf_0 ;создаем буфер
66
	stdcall [buf2d_create], buf_z
67
 
68
	stdcall mem.Alloc,max_open_file_size
69
	mov dword[open_file_vox],eax
70
 
8271 IgorA 71
	copy_path f_name,[32],file_name,0
2815 IgorA 72
 
73
	mov eax,70 ;70-я функция работа с файлами
74
	mov [run_file_70.Function], 0
75
	mov [run_file_70.Position], 0
76
	mov [run_file_70.Flags], 0
77
	mov dword[run_file_70.Count], max_open_file_size
78
	m2m [run_file_70.Buffer], [open_file_vox]
79
	mov byte[run_file_70+20], 0
80
	mov dword[run_file_70.FileName], file_name
81
	mov ebx,run_file_70
82
	int 0x40 ;загружаем воксельный объект
83
 
84
	stdcall [buf2d_vox_obj_draw_1g], buf_0, buf_z, [open_file_vox], 0,0, 7
85
	stdcall vox_obj_rot_z, [open_file_vox]
86
	stdcall [buf2d_vox_obj_draw_1g], buf_0, buf_z, [open_file_vox], 128,0, 7
87
	stdcall vox_obj_rot_z, [open_file_vox]
88
	stdcall [buf2d_vox_obj_draw_1g], buf_0, buf_z, [open_file_vox], 0,128, 7
89
	stdcall vox_obj_rot_z, [open_file_vox]
90
	stdcall [buf2d_vox_obj_draw_1g], buf_0, buf_z, [open_file_vox], 128,128, 7
91
 
92
align 4
93
red_win:
94
	call draw_window
95
 
96
align 4
97
still:
8271 IgorA 98
	mcall SF_WAIT_EVENT
2815 IgorA 99
	cmp al,1 ;изменилось положение окна
100
	jz red_win
101
	cmp al,2
102
	jz key
103
	cmp al,3
104
	jz button
105
	jmp still
106
 
107
align 4
108
draw_window:
109
	pushad
8271 IgorA 110
	mcall SF_REDRAW,SSF_BEGIN_DRAW
2815 IgorA 111
 
112
	mov edx,0x33000000
8271 IgorA 113
	mcall SF_CREATE_WINDOW,(50 shl 16)+330,(30 shl 16)+295,,,caption
2815 IgorA 114
 
115
	stdcall [buf2d_draw], buf_0
116
 
8271 IgorA 117
	mcall SF_REDRAW,SSF_END_DRAW
2815 IgorA 118
	popad
119
	ret
120
 
121
align 4
122
key:
8271 IgorA 123
	mcall SF_GET_KEY
2815 IgorA 124
 
125
	cmp ah,27 ;Esc
126
	je button.exit
127
 
128
	jmp still
129
 
130
align 4
131
button:
8271 IgorA 132
	mcall SF_GET_BUTTON
2815 IgorA 133
	cmp ah,1
134
	jne still
135
.exit:
136
	stdcall [buf2d_delete],buf_0 ;удаляем буфер
137
	stdcall [buf2d_delete],buf_z
138
	stdcall mem.Free,[open_file_vox]
8271 IgorA 139
	mcall SF_TERMINATE_PROCESS
2815 IgorA 140
 
141
caption db 'Test buf2d library, [Esc] - exit',0
142
 
143
;--------------------------------------------------
144
align 4
145
import_buf2d_lib:
146
	dd sz_lib_init
147
	buf2d_create dd sz_buf2d_create
148
	buf2d_clear dd sz_buf2d_clear
149
	buf2d_draw dd sz_buf2d_draw
150
	buf2d_delete dd sz_buf2d_delete
151
 
152
	;воксельные функции:
153
	;buf2d_vox_brush_create dd sz_buf2d_vox_brush_create
154
	;buf2d_vox_brush_delete dd sz_buf2d_vox_brush_delete
155
	buf2d_vox_obj_draw_1g dd sz_buf2d_vox_obj_draw_1g
156
	;buf2d_vox_obj_get_img_w_3g dd sz_buf2d_vox_obj_get_img_w_3g
157
	;buf2d_vox_obj_get_img_h_3g dd sz_buf2d_vox_obj_get_img_h_3g
158
	;buf2d_vox_obj_draw_3g dd sz_buf2d_vox_obj_draw_3g
159
	;buf2d_vox_obj_draw_3g_scaled dd sz_buf2d_vox_obj_draw_3g_scaled
160
	;buf2d_vox_obj_draw_3g_shadows dd sz_buf2d_vox_obj_draw_3g_shadows
161
	;buf2d_vox_obj_draw_pl dd sz_buf2d_vox_obj_draw_pl
162
	;buf2d_vox_obj_draw_pl_scaled dd sz_buf2d_vox_obj_draw_pl_scaled
163
 
164
	dd 0,0
165
	sz_lib_init db 'lib_init',0
166
	sz_buf2d_create db 'buf2d_create',0
167
	sz_buf2d_clear db 'buf2d_clear',0
168
	sz_buf2d_draw db 'buf2d_draw',0
169
	sz_buf2d_delete db 'buf2d_delete',0
170
 
171
	;воксельные функции:
172
	;sz_buf2d_vox_brush_create db 'buf2d_vox_brush_create',0
173
	;sz_buf2d_vox_brush_delete db 'buf2d_vox_brush_delete',0
174
	sz_buf2d_vox_obj_draw_1g db 'buf2d_vox_obj_draw_1g',0
175
	;sz_buf2d_vox_obj_get_img_w_3g db 'buf2d_vox_obj_get_img_w_3g',0
176
	;sz_buf2d_vox_obj_get_img_h_3g db 'buf2d_vox_obj_get_img_h_3g',0
177
	;sz_buf2d_vox_obj_draw_3g db 'buf2d_vox_obj_draw_3g',0
178
	;sz_buf2d_vox_obj_draw_3g_scaled db 'buf2d_vox_obj_draw_3g_scaled',0
179
	;sz_buf2d_vox_obj_draw_3g_shadows db 'buf2d_vox_obj_draw_3g_shadows',0
180
	;sz_buf2d_vox_obj_draw_pl db 'buf2d_vox_obj_draw_pl',0
181
	;sz_buf2d_vox_obj_draw_pl_scaled db 'buf2d_vox_obj_draw_pl_scaled',0
182
 
183
align 4
184
buf_0:
185
	dd 0 ;указатель на буфер изображения
186
	dw 20 ;+4 left
187
	dw 5 ;+6 top
188
	dd 256 ;+8 w
189
	dd 256 ;+12 h
190
	dd 0xffffff ;+16 color
191
	db 24 ;+20 bit in pixel
192
 
193
align 4
194
buf_z:
195
	dd 0 ;указатель на буфер изображения
196
	dw 20 ;+4 left
197
	dw 5 ;+6 top
198
	dd 256 ;+8 w
199
	dd 256 ;+12 h
200
	dd 0 ;+16 color
201
	db 32 ;+20 bit in pixel
202
 
203
;--------------------------------------------------
204
system_path db '/sys/lib/'
8271 IgorA 205
name_buf2d db 'buf2d.obj',0
2815 IgorA 206
;--------------------------------------------------
207
 
8271 IgorA 208
align 16
2815 IgorA 209
i_end: ;конец кода
8271 IgorA 210
file_name:
211
	rb 4096
2815 IgorA 212
cur_dir_path:
213
	rb 4096
214
library_path:
215
	rb 4096
8271 IgorA 216
	rb 1024
217
stacktop:
2815 IgorA 218
mem:
219