Subversion Repositories Kolibri OS

Rev

Rev 1555 | Rev 1577 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1535 IgorA 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 sys_path
11
 
12
include '../../../macros.inc'
13
include '../../../proc32.inc'
14
include '../../../develop/libraries/box_lib/load_lib.mac'
15
include 'mem.inc'
16
include 'dll.inc'
17
 
18
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, dll.Load
19
 
20
;флаги, для функции обрезания буфера
21
BUF2D_OPT_CROP_TOP equ 1 ;обрезка сверху
22
BUF2D_OPT_CROP_LEFT equ 2 ;обрезка слева
23
BUF2D_OPT_CROP_BOTTOM equ 4 ;обрезка снизу
24
BUF2D_OPT_CROP_RIGHT equ 8 ;обрезка справа
25
BUF2D_BIT_OPT_CROP_TOP equ 0
26
BUF2D_BIT_OPT_CROP_LEFT equ 1
27
BUF2D_BIT_OPT_CROP_BOTTOM equ 2
28
BUF2D_BIT_OPT_CROP_RIGHT equ 3
29
 
30
BUF_STRUCT_SIZE equ 21
31
buf2d_data equ dword[edi] ;данные буфера изображения
32
buf2d_w equ dword[edi+8] ;ширина буфера
33
buf2d_h equ dword[edi+12] ;высота буфера
1538 IgorA 34
buf2d_l equ word[edi+4] ;отступ слева
1535 IgorA 35
buf2d_t equ word[edi+6] ;отступ сверху
36
buf2d_size_lt equ dword[edi+4] ;отступ слева и справа для буфера
37
buf2d_color equ dword[edi+16] ;цвет фона буфера
38
buf2d_bits equ byte[edi+20] ;количество бит в 1-й точке изображения
39
 
40
struct FileInfoBlock
41
	Function dd ?
42
	Position dd ?
43
	Flags	 dd ?
44
	Count	 dd ?
45
	Buffer	 dd ?
46
		db ?
47
	FileName dd ?
48
ends
49
 
1552 IgorA 50
displ_w dd ? ;ширина поля
51
displ_h dd ? ;высота поля
52
displ_bytes dd ? ;размер 1-го файла с изображением
1573 IgorA 53
offs_shadow_x dd ? ;сдвиг теней по оси 'x'
54
offs_shadow_y dd ? ;сдвиг теней по оси 'y'
1552 IgorA 55
 
1535 IgorA 56
IMAGE_FONT_SIZE equ 128*144*3
57
 
1538 IgorA 58
BUT1_T equ 10 ;отступ сверху
59
BUT1_L equ 15 ;отступ слева
60
BUT1_W equ 50 ;ширина
61
BUT1_H equ 20 ;высота
62
BUT1_NEXT_TOP equ (BUT1_T+BUT1_H)*65536
63
 
1573 IgorA 64
 
1555 IgorA 65
FILE_NAME_MAX equ 20 ;максимальная длинна имени файла (без папок, относительно текущей)
66
;значения имен по умолчанию
1573 IgorA 67
ini_def_decorat_file db 'curici.png',0
1555 IgorA 68
ini_def_unit_file db 'wolf.png',0
69
;имена файлов
1573 IgorA 70
fn_icon0 rb FILE_NAME_MAX ;имя файла с декорациями
1555 IgorA 71
fn_icon1 rb FILE_NAME_MAX ;имя файла с волком и зайцем
1535 IgorA 72
fn_icon2 db 'eggs.png',0 ;имя файла с яйцами
73
fn_icon3 db 'chi.png',0 ;имя файла с циплятами
74
fn_font db 'font8x9.bmp',0
75
 
1552 IgorA 76
ini_name db 'nu_pogod.ini',0
77
ini_sec_files db 'Files',0
1573 IgorA 78
key_file_decorat db 'file_decorat',0
1555 IgorA 79
key_file_unit db 'file_unit',0
1552 IgorA 80
key_displ_w db 'displ_w',0
81
key_displ_h db 'displ_h',0
1573 IgorA 82
key_shadow_x db 'offs_shadow_x',0
83
key_shadow_y db 'offs_shadow_y',0
1555 IgorA 84
 
1552 IgorA 85
ini_sec_color db 'Colors',0
1573 IgorA 86
;ключи для считывания цветов из *.ini файла
87
key_color_fon db 'background',0
88
key_color_shadows db 'shadows',0
89
key_color_egg db 'objects',0
90
key_color_chick db 'lost',0
91
key_color_decorat: db 'dec'
92
	.ind: db '?',0
1552 IgorA 93
key_color_unit db 'unit',0
94
 
1538 IgorA 95
;цвета в игре
1573 IgorA 96
color_fon dd ? ;цвет фона
97
color_shadows dd ? ;цвет теней
98
color_wolf dd ? ;цвет волка и зайца
99
color_egg dd ? ;цвет яйца
100
color_chick dd ? ;цвет ципленка
101
color_decorat dd ?,?,? ;цвета декораций (курицы, перила, ...)
102
 
1538 IgorA 103
;цвета интерфейса
104
color_but_sm dd 0x808080 ;цвет маленьких кнопок
1552 IgorA 105
color_but_te dd 0xffffff ;цвет текста на кнопках
1535 IgorA 106
 
107
macro load_image_file path,buf,size { ;макрос для загрузки изображений
1552 IgorA 108
	copy_path path,sys_path,file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
109
 
1535 IgorA 110
	stdcall mem.Alloc, dword size ;выделяем память для изображения
111
	mov [buf],eax
112
 
113
	mov eax,70 ;70-я функция работа с файлами
114
	mov [run_file_70.Function], 0
115
	mov [run_file_70.Position], 0
116
	mov [run_file_70.Flags], 0
117
	mov [run_file_70.Count], dword size
118
	m2m [run_file_70.Buffer], [buf]
119
	mov byte[run_file_70+20], 0
120
	mov [run_file_70.FileName], file_name
121
	mov ebx,run_file_70
122
	int 0x40 ;загружаем файл изображения
123
	cmp ebx,0xffffffff
124
	je @f
125
		;определяем вид изображения и переводим его во временный буфер image_data
126
		stdcall dword[img_decode], dword[buf],ebx,0
127
		mov dword[image_data],eax
128
		;преобразуем изображение к формату rgb
129
		stdcall dword[img_to_rgb2], dword[image_data],dword[buf]
130
		;удаляем временный буфер image_data
131
		stdcall dword[img_destroy], dword[image_data]
132
	@@:
133
}
134
 
135
;данные игры
136
bit_zaac equ 2 ;бит зайца
137
val_zaac equ 4 ;цифра отвечающая за бит зайца
138
bit_mig equ 3 ;бит мигания
139
val_mig equ 8 ;цифра отвечающая за бит мигания
140
mask_lot_lu    equ 1b ;маска для левого верхнего лотка
141
mask_lot_ld    equ 100000b ;маска для левого нижнего лотка
142
mask_lot_ru    equ 10000000000b ;маска для правого верхнего лотка
143
mask_lot_rd    equ 1000000000000000b ;маска для правого нижнего лотка
144
mask_clear_all equ 11111011111011110111101111011110b ;маска для очистки падающих яиц и прибежавших циплят
1573 IgorA 145
mask_move_eggs equ 11111111111111111111b ;маска движущихся яиц
1535 IgorA 146
mask_fail_eggs equ 100001000010000100000b ;маска падающих яиц
147
mask_chi_left  equ 11111000000000000000000000b ;маска левых циплят
148
mask_chi_right equ 11111000000000000000000000000000b ;маска правых циплят
149
mask_chi_cr_l  equ 1000000000000000000000b ;маска для создания левого
150
mask_chi_cr_r  equ 1000000000000000000000000000b ;маска для создания правого
151
bit_chi_left  equ 21 ;1-й бит который отвечает за бегущего слева
152
bit_chi_right equ 27 ;1-й бит который отвечает за бегущего права
1538 IgorA 153
val_zaac_time_y equ 5 ;колличество тактов, которое обязательно должен провисеть заяц
154
val_zaac_time_n equ 7 ;колличество тактов, которое обязательно должен быть спрятанным заяц
1535 IgorA 155
 
1552 IgorA 156
txt_game_a db 'Игра А',0
157
txt_game_b db 'Игра Б',0
158
 
1573 IgorA 159
zaac_status db 0 ;число тактов, которое заяц не должен менять свое положение
1535 IgorA 160
pos_wolf db 0 ;позиция волка 0-й бит слева/справа, 1-й бит сверху/вниз
161
;rb 1
162
pos_eggs dd 0 ;позиции расположения яиц и циплят
163
eggs_count dw 0 ;колличество пойманых яиц
164
game_text db 'Игра _',13
165
some_text db '0'
166
	rb 8 ;текст с числом пойманных яиц
167
count_last db 0 ;счетчик пропущенных яиц
168
game_spd dd 0 ;задержка игры
169
 
170
;для генерации случайных чисел
171
rand_x dd 0
172
 
173
align 4
174
rand_next:
175
;x(k+1) = (a*x(k)+c) mod m
176
; a=22695477, c=1, m=2^32
177
push eax
178
	mov eax,dword[rand_x]
179
	imul eax,22695477
180
	inc eax
181
	mov dword[rand_x],eax
182
pop eax
183
	ret
184
 
185
;создаем прозрачные буфера по 8 бит (трафареты), для рисования
186
;где buf - буфер на основе которого будет создан трафарет
187
;фоновый цвет буфера должен быть 0xffffff, иначе не произойдет обрезка
188
;по фоновому цвету и трафарет будет занимат ьмного места в памяти
189
align 4
190
proc CreateTrapharetBuffer, buf:dword, img_data:dword
1552 IgorA 191
	push eax edi
1535 IgorA 192
	mov edi,dword[buf]
1552 IgorA 193
 
194
	;заполнение данных буфера
195
	mov buf2d_size_lt,0
196
	mov eax,dword[displ_w]
197
	mov buf2d_w,eax
198
	mov eax,dword[displ_h]
199
	mov buf2d_h,eax
200
	mov buf2d_color,0xffffff
201
	mov buf2d_bits,24
202
 
1535 IgorA 203
	stdcall [buf2d_create_f_img], edi,[img_data] ;создаем буфер
204
	stdcall [buf2d_conv_24_to_8], edi,1 ;делаем буфер прозрачности 8бит
1538 IgorA 205
	;обрезаем лишние края буфера, для более быстрого рисования
206
	stdcall [buf2d_crop_color], edi,buf2d_color,BUF2D_OPT_CROP_TOP+BUF2D_OPT_CROP_BOTTOM+BUF2D_OPT_CROP_RIGHT+BUF2D_OPT_CROP_LEFT
1552 IgorA 207
	pop edi eax
1535 IgorA 208
	ret
209
endp
210
 
211
align 4
212
InitBackgroundBuffer: ;создание фонового изображения
213
	pushad
214
	mov edi,buf_fon
215
	mov eax,[color_fon]
216
	mov buf2d_color,eax
217
	stdcall [buf2d_clear], edi,eax
218
	mov esi,edi
219
 
220
	xor eax,eax
1573 IgorA 221
	cld
222
	cmp dword[offs_shadow_x],0
223
	jne @f
224
	cmp dword[offs_shadow_y],0
225
	jne @f
226
		jmp .end_shadows
227
	@@:
228
		mov edi,buf_decor
229
		xor ebx,ebx
230
		mov ecx,3
231
		@@:
232
			mov ax,buf2d_t
233
			add eax,[offs_shadow_y]
234
			mov bx,buf2d_l
235
			add ebx,[offs_shadow_x]
236
			stdcall [buf2d_bit_blt_alpha], esi, ebx,eax, edi,[color_shadows] ;рисуем тени декораций
237
			add edi,BUF_STRUCT_SIZE
238
			loop @b
239
	.end_shadows:
1535 IgorA 240
 
1552 IgorA 241
	mov edi,buf_decor
1573 IgorA 242
	mov ebx,color_decorat
243
	mov ecx,3
244
	@@:
245
		mov ax,buf2d_t
246
		stdcall [buf2d_bit_blt_alpha], esi, 0,eax, edi,[ebx] ;рисуем декорации
247
		add edi,BUF_STRUCT_SIZE
248
		add ebx,4
249
		loop @b
1535 IgorA 250
	popad
251
	ret
252
 
253
;рисует картинку в буфере buf из массива буферов buf_img с индексом ind
254
;т. е. buf <- buf_img[ind]
255
align 4
256
proc DrawArrayImg, buf:dword, buf_img:dword, ind:dword, color:dword
257
	pushad
258
		mov edi,dword[ind]
259
		imul edi,BUF_STRUCT_SIZE
260
		add edi,dword[buf_img]
261
 
262
		mov esi,dword[buf]
263
		xor eax,eax
264
		mov ax,buf2d_t
265
		xor ebx,ebx
266
		mov bx,buf2d_l
267
		stdcall [buf2d_bit_blt_alpha], esi, ebx,eax, edi,[color]
268
	popad
269
	ret
270
endp
271
 
272
align 4
273
DrawZaac: ;рисование зайца
274
	push eax
275
	bt word[pos_wolf],bit_zaac
276
	jae .end_mig
277
 
278
	stdcall DrawArrayImg, buf_displ,buf_wolf,6,[color_wolf] ;рисуем тело зайца
279
	mov eax,dword[pos_eggs]
280
	and eax,mask_chi_right+mask_chi_left
281
	cmp eax,0
282
	je .end_mig ;если нет бегающих циплят, то заяц рукой не машет
283
	bt word[pos_wolf],bit_mig
284
	jc @f
285
		stdcall DrawArrayImg, buf_displ,buf_wolf,7,[color_wolf] ;рисуем руку зайца вверху
286
		jmp .end_mig
287
	@@:
288
		stdcall DrawArrayImg, buf_displ,buf_wolf,8,[color_wolf] ;рисуем руку зайца внизу
289
	.end_mig:
290
	pop eax
291
	ret
292
 
293
align 4
294
DrawWolf: ;рисует волка с корзинами
295
	bt word[pos_wolf],0
296
	jc @f
297
		stdcall DrawArrayImg, buf_displ,buf_wolf,0,[color_wolf]
298
		bt word[pos_wolf],1
299
		jc .corz_ldn
300
			stdcall DrawArrayImg, buf_displ,buf_wolf,1,[color_wolf]
301
			jmp .corz_lend
302
		.corz_ldn:
303
			stdcall DrawArrayImg, buf_displ,buf_wolf,2,[color_wolf]
304
		.corz_lend:
305
		jmp .wolf_b
306
	@@:
307
		stdcall DrawArrayImg, buf_displ,buf_wolf,3,[color_wolf]
308
		bt word[pos_wolf],1
309
		jc .corz_rdn
310
			stdcall DrawArrayImg, buf_displ,buf_wolf,4,[color_wolf]
311
			jmp .corz_rend
312
		.corz_rdn:
313
			stdcall DrawArrayImg, buf_displ,buf_wolf,5,[color_wolf]
314
		.corz_rend:
315
	.wolf_b:
316
	ret
317
 
318
align 4
319
DrawEggs: ;рисует яйца
320
	pushad
321
	cld
322
 
323
	mov eax,dword[pos_eggs]
324
	xor ebx,ebx
325
	mov ecx,20 ;цикл для рисования котящихся яиц
326
	@@:
327
		bt eax,ebx
328
		jae .draw_egg
329
			stdcall DrawArrayImg, buf_displ,buf_egg,ebx,[color_egg]
330
		.draw_egg:
331
		inc ebx
332
		loop @b
333
 
334
	;mov eax,dword[pos_eggs]
335
	and eax,mask_chi_left
336
	cmp eax,0
337
	je @f
338
		stdcall DrawArrayImg, buf_displ,buf_egg,20,[color_egg] ;разбитое яйцо слева
339
	@@:
340
	mov eax,dword[pos_eggs]
341
	and eax,mask_chi_right
342
	cmp eax,0
343
	je @f
344
		stdcall DrawArrayImg, buf_displ,buf_egg,21,[color_egg] ;разбитое яйцо справа
345
	@@:
346
 
347
	mov eax,dword[pos_eggs]
348
	xor edx,edx
349
	mov ebx,bit_chi_left
350
	mov ecx,5 ;цикл для рисования левых циплят
351
	@@:
352
		bt eax,ebx
353
		jae .draw_chick_l
354
			stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick]
355
		.draw_chick_l:
356
		inc ebx
357
		inc edx
358
		loop @b
359
	mov ebx,bit_chi_right
360
	mov ecx,5 ;цикл для рисования правых циплят
361
	@@:
362
		bt eax,ebx
363
		jae .draw_chick_r
364
			stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick]
365
		.draw_chick_r:
366
		inc ebx
367
		inc edx
368
		loop @b
369
 
370
	xor eax,eax
371
	mov al,byte[count_last]
372
	mov ecx,eax ;цикл для рисования штрафных очков
373
	shr ecx,1
374
	mov edx,10 ;индекс начала штрафных иконок в буфере buf_chi
375
	cmp ecx,0
376
	je .no_unit_last
377
	@@:
378
		stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick]
379
		inc edx
380
		loop @b
381
	.no_unit_last:
382
 
383
	bt ax,0 ;проверяем мигающее не четное очко
384
	jae @f
385
		bt word[pos_wolf],bit_mig
386
		jc @f
387
			stdcall DrawArrayImg, buf_displ,buf_chi,edx,[color_chick] ;мигающее штрафное очко
388
	@@:
389
 
390
	popad
391
	ret
392
 
393
align 4
394
CountEggsInc: ;увеличиваем счетчик яиц на 1
395
	push eax edi
396
		xor eax,eax
397
		inc word[eggs_count] ;увеличиваем счетчик яиц
398
		cmp word[eggs_count],200 ;бонусные очки
399
		je @f
400
		cmp word[eggs_count],500 ;бонусные очки
401
		je @f
402
			jmp .no_bonus
403
		@@:
404
			mov byte[count_last],0
405
		.no_bonus:
406
 
407
		mov ax,word[eggs_count]
408
		mov edi,some_text
409
		call convert_to_str ;обновляем текстовую строку
410
		and ax,0xf ;через каждые 16 яиц уменьшаем время
411
		cmp ax,0
412
		jne @f
413
			cmp dword[game_spd],15 ;минимальная задержка
414
			jle @f
415
				dec dword[game_spd]
416
		@@:
417
	pop edi eax
418
	ret
419
 
420
;input:
421
; eax - маска, указывающая с какой строны упало яйцо
422
align 4
423
CountLastInc: ;начисление штрафных очков
424
	inc byte[count_last] ;половинао штрафного очка
425
	bt word[pos_wolf],bit_zaac
426
	jc @f
427
		inc byte[count_last] ;если нет зайца то еще 1-на половина штрафного очка
428
	@@:
429
	cmp byte[count_last],6
430
	jle @f
431
		mov byte[count_last],6 ;ставим ограничени на число штрафных очков
432
	@@:
433
	or dword[pos_eggs],eax ;создаем бегущего ципленка
434
	ret
435
 
436
align 4
437
MoveEggs:
438
	pushad
439
	xor byte[pos_wolf],val_mig ;бит для мигания
440
 
441
	cmp byte[count_last],6 ;максимальное число штрафных очков
442
	je .end_fun
443
 
444
	rol dword[pos_eggs],1
445
	mov ecx,dword[pos_eggs]
446
	and ecx,mask_fail_eggs
447
	cmp ecx,0
448
	je .no_fail ;нет падающих яиц
449
		;начисление яиц попавших в корзину
450
		;или начисление штрафных очков
451
		xor ebx,ebx
452
		mov bl,byte[pos_wolf] ;берем параметры (позицию) волка
453
		and bl,3 ;на всякий случай
454
 
455
		bt ecx,5 ;проверяем верхнее левое перило
456
		jae .perilo_lu
457
			cmp bx,0 ;проверяем наличие корзины
458
			jne @f
459
				call CountEggsInc
460
				jmp .perilo_lu
461
			@@:
462
				mov eax,mask_chi_cr_l
463
				call CountLastInc
464
			.perilo_lu:
465
		bt ecx,10 ;проверяем нижнее левое перило
466
		jae .perilo_ld
467
			cmp bx,2 ;проверяем наличие корзины
468
			jne @f
469
				call CountEggsInc
470
				jmp .perilo_ld
471
			@@:
472
				mov eax,mask_chi_cr_l
473
				call CountLastInc
474
		.perilo_ld:
475
		bt ecx,15 ;проверяем верхнее правое перило
476
		jae .perilo_ru
477
			cmp bx,1 ;проверяем наличие корзины
478
			jne @f
479
				call CountEggsInc
480
				jmp .perilo_ru
481
			@@:
482
				mov eax,mask_chi_cr_r
483
				call CountLastInc
484
		.perilo_ru:
485
		bt ecx,20 ;проверяем нижнее правое перило
486
		jae .perilo_rd
487
			cmp bx,3 ;проверяем наличие корзины
488
			jne @f
489
				call CountEggsInc
490
				jmp .perilo_rd
491
			@@:
492
				mov eax,mask_chi_cr_r
493
				call CountLastInc
494
		.perilo_rd:
495
	.no_fail:
496
 
497
	and dword[pos_eggs],mask_clear_all ;очистка упавших яиц и добежавших курей
498
 
499
	call rand_next
1538 IgorA 500
	cmp byte[zaac_status],0
501
	jle @f
502
		dec byte[zaac_status]
503
		jmp .no_zaac_move ;заяц пока не двигается
504
	@@:
505
 
506
	bt dword[rand_x],6 ;заяц от фонаря меняет статус
1535 IgorA 507
	jc @f
508
		xor byte[pos_wolf],val_zaac ;высовываем/засовываем зайца
1538 IgorA 509
		bt word[pos_wolf],val_zaac
510
		jc .zaac_n
511
			mov byte[zaac_status],val_zaac_time_y ;ставим минимальное время для смены статуса
512
			jmp @f
513
		.zaac_n:
514
			mov byte[zaac_status],val_zaac_time_n ;ставим минимальное время для смены статуса
1535 IgorA 515
	@@:
1538 IgorA 516
	.no_zaac_move:
1535 IgorA 517
 
518
	;создание новых яиц
1573 IgorA 519
	cmp word[eggs_count],5 ;первые 5 яиц катятся по 1-му
520
	jge @f
521
		mov ecx,dword[pos_eggs]
522
		and ecx,mask_move_eggs
523
		;cmp ecx,0
524
		jnz .end_creat
525
	@@:
526
 
1535 IgorA 527
	bt dword[rand_x],4 ;проверяем будем ли создавать новое яйцо
528
	jc .end_creat
529
	bt dword[rand_x],5 ;проверяем с какой стороны будем создавать новое яйцо
530
	jc .creat_r
531
		bt dword[rand_x],7
532
		jc @f
533
			or dword[pos_eggs],mask_lot_lu
534
			jmp .end_creat
535
		@@:
536
			or dword[pos_eggs],mask_lot_ld
537
			jmp .end_creat
538
	.creat_r:
539
		bt dword[rand_x],7
540
		jc @f
541
			or dword[pos_eggs],mask_lot_ru
542
			jmp .end_creat
543
		@@:
544
			or dword[pos_eggs],mask_lot_rd
545
			;jmp .end_creat
546
	.end_creat:
547
 
548
	.end_fun:
549
	popad
550
	ret
551
 
552
align 4
553
proc InitGame, b:dword ;первоначальные настройки игры
554
	mov word[eggs_count],0 ;колличество пойманых яиц
555
	mov byte[some_text],'0'
556
	mov byte[some_text+1],0 ;текст с числом пойманных яиц
557
	mov byte[count_last],0
558
	mov dword[pos_eggs],0
1538 IgorA 559
	mov byte[zaac_status],0
1535 IgorA 560
 
561
	cmp dword[b],0
562
	jne @f
563
		mov byte[game_text+5],'А'
564
		mov dword[game_spd],65 ;задержка игры
565
		jmp .end_init
566
	@@:
567
		mov byte[game_text+5],'Б'
568
		mov dword[game_spd],35 ;задержка игры
569
	.end_init:
570
 
571
	push eax ebx
572
		mcall 26,9
573
		mov dword[rand_x],eax ;заполняем 1-е случайное число
574
	pop ebx eax
575
 
576
	ret
577
endp
578
 
579
align 4
1552 IgorA 580
proc LoadArrayBuffer, f_name:dword, buf_start:dword, count:dword
581
	pushad
582
	mov edx,dword[displ_bytes]
583
	mov ecx,edx
584
	imul ecx,dword[count]
585
	mov eax,dword[f_name]
586
	load_image_file eax,image_data_gray,ecx
587
		mov edx,dword[displ_bytes]
588
		mov eax,[image_data_gray]
589
		mov edi,dword[buf_start]
590
		mov ecx,dword[count]
591
		cld
592
		@@: ;считываем 3 буфера с декорациями
593
			stdcall CreateTrapharetBuffer,edi,eax
594
			add eax,edx
595
			add edi,BUF_STRUCT_SIZE
596
			loop @b
597
	stdcall mem.Free,[image_data_gray] ;освобождаем память
598
	popad
599
	ret
600
endp
601
 
602
align 4
1535 IgorA 603
start:
604
	load_libraries l_libs_start,load_lib_end
605
 
606
	;проверка на сколько удачно загузилась наша либа
607
	mov	ebp,lib0
608
	cmp	dword [ebp+ll_struc_size-4],0
609
	jz	@f
610
		mcall -1 ;exit not correct
611
	@@:
612
	mov	ebp,lib1
613
	cmp	dword [ebp+ll_struc_size-4],0
614
	jz	@f
615
		mcall -1 ;exit not correct
616
	@@:
617
 
618
	mcall 40,0x27
619
	mcall 48,3,sc,sizeof.system_colors ;получаем системные цвета
620
 
1552 IgorA 621
	;работа с файлом настроек
622
	copy_path ini_name,sys_path,file_name,0x0
623
	stdcall dword[ini_get_int],file_name,ini_sec_files,key_displ_w,210
624
	mov	dword[displ_w],eax
625
	stdcall dword[ini_get_int],file_name,ini_sec_files,key_displ_h,140
626
	mov	dword[displ_h],eax
1573 IgorA 627
	stdcall dword[ini_get_str],file_name,ini_sec_files,key_file_decorat,fn_icon0,FILE_NAME_MAX,ini_def_decorat_file
628
	stdcall dword[ini_get_str],file_name,ini_sec_files,key_file_unit,fn_icon1,FILE_NAME_MAX,ini_def_unit_file
629
	stdcall dword[ini_get_int],file_name,ini_sec_files,key_shadow_x,2
630
	mov	dword[offs_shadow_x],eax
631
	stdcall dword[ini_get_int],file_name,ini_sec_files,key_shadow_y,2
632
	mov	dword[offs_shadow_y],eax
633
 
634
	stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_fon,0xffffff
635
	mov	dword[color_fon],eax
636
	stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_shadows,0xd0d0d0
637
	mov	dword[color_shadows],eax
1552 IgorA 638
	stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_unit,0
639
	mov	dword[color_wolf],eax
1573 IgorA 640
	stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_egg,0x404080
641
	mov	dword[color_egg],eax
642
	stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_chick,0x00d0d0
643
	mov	dword[color_chick],eax
1535 IgorA 644
 
1573 IgorA 645
	mov ebx,color_decorat
646
	mov byte[key_color_decorat.ind],'0'
647
	mov ecx,3
648
	cld
649
	@@:
650
		stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_decorat,0x000080
651
		mov dword[ebx],eax
652
		add ebx,4
653
		inc byte[key_color_decorat.ind]
654
		loop @b
1555 IgorA 655
 
1552 IgorA 656
	mov edx,dword[displ_w]
657
	imul edx,dword[displ_h]
658
	lea edx,[edx+edx*2]
659
	mov dword[displ_bytes],edx ;вычисляем размер игрового поля
1535 IgorA 660
 
1552 IgorA 661
	stdcall LoadArrayBuffer, fn_icon0, buf_decor,3 ;считываем 3 буфера с декорациями
662
	stdcall LoadArrayBuffer, fn_icon1, buf_wolf,9 ;считываем 9 буферов с волком и зайцем
663
	stdcall LoadArrayBuffer, fn_icon2, buf_egg,22 ;считываем 22 буферов с яйцами
664
	stdcall LoadArrayBuffer, fn_icon3, buf_chi,13 ;считываем 13 буферов с циплятами
1535 IgorA 665
 
666
	load_image_file fn_font, image_data_gray,IMAGE_FONT_SIZE
667
	stdcall [buf2d_create_f_img], buf_font,[image_data_gray] ;создаем буфер
668
	stdcall mem.Free,[image_data_gray] ;освобождаем память
669
 
670
	stdcall [buf2d_conv_24_to_8], buf_font,1 ;делаем буфер прозрачности 8 бит
671
	stdcall [buf2d_convert_text_matrix], buf_font
672
 
673
;проверка занимаемого буфером места
674
;mov edi,buf_wolf
675
;add edi,BUF_STRUCT_SIZE ;переходим на буфер корзины
676
;stdcall [buf2d_clear],edi,0x808080 ;заливаем его серым цветом
677
 
1552 IgorA 678
	mov ebx,dword[displ_w]
679
	mov edx,dword[displ_h]
680
 
681
	mov edi,buf_displ
682
	mov buf2d_w,ebx
683
	mov buf2d_h,edx
1535 IgorA 684
	stdcall [buf2d_create], buf_displ ;создаем буфер для вывода на экран
1552 IgorA 685
 
686
	mov edi,buf_fon
687
	mov buf2d_w,ebx
688
	mov buf2d_h,edx
689
	stdcall [buf2d_create], buf_fon ;создаем буфер с фоновыми декорациями
690
 
1535 IgorA 691
	call InitBackgroundBuffer ;заполняем буфер с фоновыми декорациями
692
	stdcall InitGame,0
693
	mcall 26,9
694
	mov [last_time],ebx
695
 
696
 
697
 
698
align 4
699
red_win:
700
	call draw_window
701
 
702
align 4
703
still: ;главный цикл
704
	mcall 26,9
705
	mov ebx,[last_time]
706
	add ebx,dword[game_spd] ;delay
707
	sub ebx,eax
708
	cmp ebx,dword[game_spd] ;delay
709
	ja it_is_time_now
710
	test ebx,ebx
711
	jz it_is_time_now
712
	mcall 23
713
 
714
	cmp eax,0
715
	je it_is_time_now
716
 
717
	;mcall 10
718
 
719
	cmp al,0x1 ;изменилось положение окна
720
	jz red_win
721
	cmp al,0x2
722
	jz key
723
	cmp al,0x3
724
	jz button
725
 
726
	jmp still
727
 
728
align 4
729
it_is_time_now:
730
	mcall 26,9
731
	mov [last_time],eax
732
 
733
	;...здесь идут действия, вызываемые каждые delay сотых долей секунд...
734
	call MoveEggs
735
	call draw_display
736
	jmp still
737
 
738
align 4
739
key:
740
	push eax ebx
741
	mcall 2
742
 
743
	cmp ah,176 ;Left
744
	jne @f
745
		and byte[pos_wolf],0xfe
746
	@@:
747
	cmp ah,179 ;Right
748
	jne @f
749
		or byte[pos_wolf],1
750
	@@:
751
	cmp ah,178 ;Up
752
	jne @f
753
		and byte[pos_wolf],0xff-2
754
	@@:
755
	cmp ah,177 ;Down
756
	jne @f
757
		or byte[pos_wolf],2
758
	@@:
759
 
760
	cmp ah,97 ;a
761
	jne @f
762
		and byte[pos_wolf],0xff-3 ;00
763
	@@:
764
	cmp ah,122 ;z
765
	jne @f
766
		and byte[pos_wolf],0xff-1
767
		or byte[pos_wolf],2 ;10
768
	@@:
769
	cmp ah,39 ;'
770
	jne @f
771
		and byte[pos_wolf],0xff-2
772
		or byte[pos_wolf],1 ;01
773
	@@:
774
	cmp ah,47 ;/
775
	jne @f
776
		or byte[pos_wolf],3 ;11
777
	@@:
778
 
779
	pop ebx eax
780
	jmp still
781
 
782
 
783
align 4
784
draw_window:
785
	pushad
786
	mcall 12,1
787
 
788
	xor eax,eax
1538 IgorA 789
	mov ebx,20*65536+480
790
	mov ecx,20*65536+270
1535 IgorA 791
	mov edx,[sc.work]
792
	;or edx,0x33000000
793
	or edx,0x73000000
794
	mov edi,hed
795
	mcall ;создание окна
796
 
797
	mcall 9,procinfo,-1
798
	mov edi,buf_displ
799
	mov eax,dword[procinfo.client_box.width]
1552 IgorA 800
	cmp eax,dword[displ_w]
1535 IgorA 801
	jle @f
1552 IgorA 802
		sub eax,dword[displ_w]
1535 IgorA 803
		shr eax,1
804
		mov buf2d_l,ax ;выправниваем буфер по центру окна
805
	@@:
806
 
807
	call draw_display
808
 
809
	mov eax,13 ;рисование прямоугольника
810
	mov edx,[sc.work]
811
	xor esi,esi
812
	mov si,buf2d_l
1552 IgorA 813
	add esi,dword[displ_w]
1535 IgorA 814
	mov ebx,dword[procinfo.client_box.width]
815
	inc ebx
816
	cmp esi,ebx
817
	jge @f
818
		sub ebx,esi
819
		rol ebx,16
820
		mov bx,si
821
		rol ebx,16
822
		mov ecx,dword[procinfo.client_box.height]
823
		inc ecx
824
		int 0x40 ;рисование правого бокового поля
825
		jmp .draw_s
826
	@@:
827
		mov esi,dword[procinfo.client_box.width] ;когда по ширине не влазит
828
		inc esi
829
	.draw_s:
830
 
1538 IgorA 831
	; *** рисование кнопок ***
832
push esi
833
	mov eax,8
834
	xor ebx,ebx
835
	mov bx,buf2d_l
836
	add ebx,buf2d_w
837
	add ebx,BUT1_L
838
	shl ebx,16
839
	mov bx,BUT1_W
840
	mov ecx,BUT1_T*65536+BUT1_H
841
	mov edx,5
842
	;or edx,0x40000000
843
	mov esi,dword[color_but_sm]
844
	int 0x40
845
 
846
	inc edx
847
	add ecx,BUT1_NEXT_TOP
848
	int 0x40
849
pop esi
850
 
1552 IgorA 851
	mov eax,4 ;аЁбRў -Ё? в?Єбв 
852
	mov bx,BUT1_H
853
	add ebx,3*65536;+3
854
	mov ecx,dword[color_but_te]
855
	or  ecx,0x80000000
856
	mov edx,txt_game_a
857
	int 0x40
858
 
859
	ror ebx,16
860
	add ebx,BUT1_NEXT_TOP
861
	ror ebx,16
862
	mov edx,txt_game_b
863
	int 0x40
864
 
1538 IgorA 865
	; *** восстановление параметров ***
866
	mov eax,13 ;рисование прямоугольника
867
	mov edx,[sc.work]
868
 
1535 IgorA 869
	mov ebx,esi
870
	mov ecx,dword[procinfo.client_box.height]
871
	inc ecx
1552 IgorA 872
	mov esi,dword[displ_h]
1535 IgorA 873
	cmp esi,ebx
874
	jge @f
875
		sub ecx,esi
876
		rol ecx,16
877
		mov cx,si
878
		rol ecx,16
879
		int 0x40 ;рисование нижнего поля
880
	@@:
881
 
882
	xor ebx,ebx
883
	mov bx,buf2d_l
1552 IgorA 884
	mov ecx,dword[displ_h]
1535 IgorA 885
	int 0x40 ;рисование левого бокового поля
886
 
887
	mcall 12,2
888
	popad
889
	ret
890
 
891
align 4
892
draw_display:
893
 
1552 IgorA 894
	stdcall mem_copy, dword[buf_fon],dword[buf_displ],315*210*3;dword[displ_bytes] ;копирование изображения из фонового буфера
895
	call DrawZaac ;рисуем зайца
1535 IgorA 896
	call DrawWolf ;рисуем волка
1552 IgorA 897
	call DrawEggs ;рисуем яйца
1535 IgorA 898
 
1552 IgorA 899
push eax
900
	mov eax,dword[displ_w]
901
	shr eax,1
1573 IgorA 902
	stdcall [buf2d_draw_text], buf_displ, buf_font,game_text,eax,[offs_shadow_x],[color_wolf] ;рисуем строку с текстом
1552 IgorA 903
pop eax
1535 IgorA 904
	stdcall [buf2d_draw], buf_displ
905
	ret
906
 
907
align 4
908
button:
909
	mcall 17 ;получить код нажатой кнопки
1573 IgorA 910
 
1538 IgorA 911
	cmp ah,5
912
	jne @f
913
		stdcall InitGame,0
914
	@@:
915
	cmp ah,6
916
	jne @f
917
		stdcall InitGame,1
1573 IgorA 918
	@@:
1535 IgorA 919
	cmp ah,1
920
	jne still
921
.exit:
922
	stdcall [buf2d_delete],buf_fon ;удаляем буфер
923
	stdcall [buf2d_delete],buf_displ ;удаляем буфер
924
 
925
	stdcall [buf2d_delete],buf_font
926
 
927
	cld
1552 IgorA 928
	mov ecx,3
929
	mov edi,buf_decor
930
	@@: ;удаляем 3 буфера
931
		stdcall [buf2d_delete],edi
932
		add edi,BUF_STRUCT_SIZE
933
		loop @b
1535 IgorA 934
	mov ecx,9
935
	mov edi,buf_wolf
936
	@@: ;удаляем 9 буферов с волком и зайцем
937
		stdcall [buf2d_delete],edi
938
		add edi,BUF_STRUCT_SIZE
939
		loop @b
940
	mov ecx,13
941
	mov edi,buf_chi
942
	@@: ;удаляем 13 буферов
943
		stdcall [buf2d_delete],edi
944
		add edi,BUF_STRUCT_SIZE
945
		loop @b
946
	mov ecx,22
947
	mov edi,buf_egg
948
	@@: ;удаляем 22 буфера
949
		stdcall [buf2d_delete],edi
950
		add edi,BUF_STRUCT_SIZE
951
		loop @b
952
 
953
	mcall -1 ;выход из программы
954
 
955
head_f_i:
956
head_f_l  db 'Системная ошибка',0
957
 
958
system_dir0 db '/sys/lib/'
959
name_buf2d db 'buf2d.obj',0
960
err_message_found_lib0 db 'Не удалось найти библиотеку buf2d.obj',0
961
err_message_import0 db 'Ошибка при импорте библиотеки buf2d.obj',0
962
 
963
system_dir1 db '/sys/lib/'
964
name_libimg db 'libimg.obj',0
965
err_message_found_lib1 db 'Не удалось найти библиотеку libimg.obj',0
966
err_message_import1 db 'Ошибка при импорте библиотеки libimg.obj',0
967
 
1552 IgorA 968
system_dir2 db '/sys/lib/'
969
libini_name db 'libini.obj',0
970
err_message_found_lib2 db 'Не удалось найти библиотеку libini.obj',0
971
err_message_import2 db 'Ошибка при импорте библиотеки libini.obj',0
972
 
1535 IgorA 973
;library structures
974
l_libs_start:
975
	lib0 l_libs name_buf2d,  sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, import_buf2d_lib, err_message_import0, head_f_i
976
	lib1 l_libs name_libimg, sys_path, file_name, system_dir1, err_message_found_lib1, head_f_l, import_libimg, err_message_import1, head_f_i
1552 IgorA 977
	lib2 l_libs libini_name, sys_path, file_name, system_dir2, err_message_found_lib2, head_f_l, libini_import, err_message_import2, head_f_i
1535 IgorA 978
load_lib_end:
979
 
980
align 4
981
proc mem_copy, source:dword, destination:dword, len:dword
982
  push ecx esi edi
983
    cld
984
    mov esi, dword[source]
985
    mov edi, dword[destination]
986
    mov ecx, dword[len]
987
    rep movsb
988
  pop edi esi ecx
989
  ret
990
endp
991
 
992
align 4
993
convert_to_str:
994
	pushad
995
	;mov eax,dword[value]
996
	;mov edi,dword[text]
997
	mov dword[edi+1],0
998
	cld
999
	call .str
1000
	popad
1001
	ret
1002
 
1003
 
1004
align 4
1005
.str:
1006
  mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число
1007
    ;преревод числа в ASCII строку взодные данные ecx=система счисленя edi адрес куда записывать, будем строку, причем конец переменной
1008
  cmp eax,ecx  ;сравнить если в eax меньше чем в ecx то перейти на @@-1 т.е. на pop eax
1009
  jb @f
1010
  xor edx,edx  ;очистить edx
1011
  div ecx      ;разделить - остаток в edx
1012
  push edx     ;положить в стек
1013
  ;dec edi             ;смещение необходимое для записи с конца строки
1014
  call .str;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx
1015
  pop eax
1016
  @@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная))
1017
  ;sbb al,$69  ;- честно данная инструкция меня заставляет задуматься т.е. я не знаю как это работает
1018
  ;das        ;после данной команды как бы происходит уменьшение al на 66h  (в книге написано другое)
1019
  or al,0x30  ;данная команда короче  чем две выше
1020
  stosb       ;записать элемент из регистра al в ячеку памяти es:edi
1021
  ret	      ;вернуться чень интересный ход т.к. пока в стеке храниться кол-во вызовов то столько раз мы и будем вызываться
1022
 
1023
 
1024
last_time dd ?
1025
image_data dd 0 ;память для преобразования картинки функциями libimg
1026
image_data_gray dd 0 ;память с временными серыми изображениями в формате 24-bit, из которых будут создаваться трафареты
1027
 
1028
run_file_70 FileInfoBlock
1573 IgorA 1029
hed db 'Nu pogodi 20.08.10',0 ;подпись окна
1535 IgorA 1030
sc system_colors  ;системные цвета
1031
 
1032
align 4
1033
buf_font: ;буфер со шрифтом
1034
	dd 0 ;указатель на буфер изображения
1035
	dw 25 ;+4 left
1036
	dw 25 ;+6 top
1037
	dd 128 ;+8 w
1038
	dd 144 ;+12 h
1039
	dd 0 ;+16 color
1040
	db 24 ;+20 bit in pixel
1041
 
1042
align 4
1552 IgorA 1043
buf_displ:
1535 IgorA 1044
	dd 0 ;указатель на буфер изображения
1552 IgorA 1045
	dw 25,0
1046
	dd ? ;+8 w
1047
	dd ? ;+12 h
1048
	dd 0 ;+16 color
1535 IgorA 1049
	db 24 ;+20 bit in pixel
1552 IgorA 1050
 
1535 IgorA 1051
align 4
1552 IgorA 1052
buf_fon: ;фоновый буфер
1535 IgorA 1053
	dd 0 ;указатель на буфер изображения
1054
	dw 0 ;+4 left
1055
	dw 0 ;+6 top
1552 IgorA 1056
	dd ? ;+8 w
1057
	dd ? ;+12 h
1535 IgorA 1058
	dd 0xffffff ;+16 color
1059
	db 24 ;+20 bit in pixel
1060
 
1061
align 4
1552 IgorA 1062
buf_decor: ;буфера с декорациями: домиками и рейками; с курицами; с растениями
1063
	rb 3*BUF_STRUCT_SIZE
1535 IgorA 1064
 
1065
align 4
1066
buf_wolf:
1067
	rb 9*BUF_STRUCT_SIZE
1068
 
1069
align 4
1070
buf_egg:
1071
	rb 22*BUF_STRUCT_SIZE
1072
 
1073
align 4
1074
buf_chi:
1075
	rb 13*BUF_STRUCT_SIZE
1076
 
1552 IgorA 1077
 
1078
 
1535 IgorA 1079
align 4
1552 IgorA 1080
libini_import:
1081
	dd alib_init0
1082
	ini_get_str   dd aini_get_str
1083
	ini_get_int   dd aini_get_int
1084
	ini_get_color dd aini_get_color
1085
dd 0,0
1086
	alib_init0     db 'lib_init',0
1087
	aini_get_str   db 'ini_get_str',0
1088
	aini_get_int   db 'ini_get_int',0
1089
	aini_get_color db 'ini_get_color',0
1090
 
1091
align 4
1535 IgorA 1092
import_libimg:
1093
  dd alib_init1
1094
  img_is_img  dd aimg_is_img
1095
  img_info    dd aimg_info
1096
  img_from_file dd aimg_from_file
1097
  img_to_file dd aimg_to_file
1098
  img_from_rgb dd aimg_from_rgb
1099
  img_to_rgb  dd aimg_to_rgb
1100
  img_to_rgb2 dd aimg_to_rgb2
1101
  img_decode  dd aimg_decode
1102
  img_encode  dd aimg_encode
1103
  img_create  dd aimg_create
1104
  img_destroy dd aimg_destroy
1105
  img_destroy_layer dd aimg_destroy_layer
1106
  img_count   dd aimg_count
1107
  img_lock_bits dd aimg_lock_bits
1108
  img_unlock_bits dd aimg_unlock_bits
1109
  img_flip    dd aimg_flip
1110
  img_flip_layer dd aimg_flip_layer
1111
  img_rotate  dd aimg_rotate
1112
  img_rotate_layer dd aimg_rotate_layer
1113
  img_draw    dd aimg_draw
1114
 
1115
  dd 0,0
1116
  alib_init1   db 'lib_init',0
1117
  aimg_is_img  db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
1118
  aimg_info    db 'img_info',0
1119
  aimg_from_file db 'img_from_file',0
1120
  aimg_to_file db 'img_to_file',0
1121
  aimg_from_rgb db 'img_from_rgb',0
1122
  aimg_to_rgb  db 'img_to_rgb',0 ;преобразование изображения в данные RGB
1123
  aimg_to_rgb2 db 'img_to_rgb2',0
1124
  aimg_decode  db 'img_decode',0 ;автоматически определяет формат графических данных
1125
  aimg_encode  db 'img_encode',0
1126
  aimg_create  db 'img_create',0
1127
  aimg_destroy db 'img_destroy',0
1128
  aimg_destroy_layer db 'img_destroy_layer',0
1129
  aimg_count   db 'img_count',0
1130
  aimg_lock_bits db 'img_lock_bits',0
1131
  aimg_unlock_bits db 'img_unlock_bits',0
1132
  aimg_flip    db 'img_flip',0
1133
  aimg_flip_layer db 'img_flip_layer',0
1134
  aimg_rotate  db 'img_rotate',0
1135
  aimg_rotate_layer db 'img_rotate_layer',0
1136
  aimg_draw    db 'img_draw',0
1137
 
1138
align 4
1139
import_buf2d_lib:
1140
	dd sz_lib_init
1141
	buf2d_create dd sz_buf2d_create
1142
	buf2d_create_f_img dd sz_buf2d_create_f_img
1143
	buf2d_clear dd sz_buf2d_clear
1144
	buf2d_draw dd sz_buf2d_draw
1145
	buf2d_delete dd sz_buf2d_delete
1146
	buf2d_line dd sz_buf2d_line
1147
	buf2d_circle dd sz_buf2d_circle
1148
	buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
1149
	buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
1150
	buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
1151
	buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
1152
	buf2d_bit_blt dd sz_buf2d_bit_blt
1153
	buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
1154
	buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
1155
	buf2d_cruve_bezier dd sz_buf2d_cruve_bezier
1156
	buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
1157
	buf2d_draw_text dd sz_buf2d_draw_text
1158
	buf2d_crop_color dd sz_buf2d_crop_color
1159
	buf2d_offset_h dd sz_buf2d_offset_h
1160
	dd 0,0
1161
	sz_lib_init db 'lib_init',0
1162
	sz_buf2d_create db 'buf2d_create',0
1163
	sz_buf2d_create_f_img db 'buf2d_create_f_img',0
1164
	sz_buf2d_clear db 'buf2d_clear',0
1165
	sz_buf2d_draw db 'buf2d_draw',0
1166
	sz_buf2d_delete db 'buf2d_delete',0
1167
	sz_buf2d_line db 'buf2d_line',0
1168
	sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности
1169
	sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
1170
	sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
1171
	sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
1172
	sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
1173
	sz_buf2d_bit_blt db 'buf2d_bit_blt',0
1174
	sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
1175
	sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
1176
	sz_buf2d_cruve_bezier db 'buf2d_cruve_bezier',0
1177
	sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
1178
	sz_buf2d_draw_text db 'buf2d_draw_text',0
1179
	sz_buf2d_crop_color db 'buf2d_crop_color',0
1180
	sz_buf2d_offset_h db 'buf2d_offset_h',0
1181
 
1182
i_end:
1183
	rb 1024
1184
	align 16
1185
	procinfo process_information
1186
stacktop:
1187
	sys_path rb 4096
1188
	file_name:
1189
		rb 4096
1190
	plugin_path:
1191
		rb 4096
1192
	openfile_path:
1193
		rb 4096
1194
	filename_area:
1195
		rb 256
1196
mem: