Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
2529 mario79 1
;------------------------------------------------------------------------------
2
;   @SS - screensaver
3
;------------------------------------------------------------------------------
4
; last update:  30/03/2012
5
; changed by:   Marat Zakiyanov aka Mario79, aka Mario
6
; changes:      The program uses only 4 Kb memory is now.
7
;               Code refactoring. Using transparent cursor.
8
;               Fix bug - using lots of buttons from f.8.
9
;---------------------------------------------------------------------
1747 mario79 10
;   SCREENSAVER APPLICATION by lisovin@26.ru
11
;
12
;   Compile with FASM for Menuet
13
;
2529 mario79 14
;------------------------------------------------------------------------------
15
	use32
16
	org 0x0
1747 mario79 17
 
2529 mario79 18
	db 'MENUET01'	; 8 byte id
19
	dd 0x01		; header version
20
	dd START	; start of code
21
	dd IM_END	; size of image
22
	dd I_END	; memory for app
23
	dd stack_top	; esp
2535 mario79 24
	dd I_Param	; boot parameters
2529 mario79 25
	dd 0x0		; path
26
;------------------------------------------------------------------------------
27
include 'lang.inc'
28
include '..\..\..\macros.inc'
1747 mario79 29
;include   'debug.inc'
2529 mario79 30
;------------------------------------------------------------------------------
31
align 4
1747 mario79 32
START:
2529 mario79 33
	mcall	68,11
34
	mcall	40,110010b
2535 mario79 35
; boot parameters
36
	cmp	[I_Param],dword 'ZERO'
37
	jne	@f
38
	mov	[type],dword 0
39
;--------------------------------------
3645 fedesco 40
align 4
2535 mario79 41
@@:
42
	cmp	[I_Param],dword 'ASSM'
43
	jne	bgr_changed
44
	mov	[type],dword 24
2529 mario79 45
;------------------------------------------------------------------------------
46
align 4
1747 mario79 47
bgr_changed:
48
 
2529 mario79 49
	mcall	14
50
	mov	[y_max],ax
51
	shr	eax,16
52
	mov	[x_max],ax
53
	shl	eax,16
54
	mov	[top_right_corner],eax
55
;------------------------------------------------------------------------------
56
align 4
1747 mario79 57
still:
2529 mario79 58
	movzx	ebx,[time]
59
	imul	ebx,60*100
60
	mcall	23		; ждём события в течение [time] минут
61
	test	eax,eax
62
	jz	create_ss_thread
63
 
64
	cmp	al,2		; key in buffer?
65
	jz	key
66
 
67
	cmp	al,5		; background redraw?
68
	jz	bgr_changed
1747 mario79 69
; mouse event
2529 mario79 70
	mcall	37,2		; проверим кнопки
71
	and	al,3
72
	cmp	al,3		; нажаты обе кнопки мыши?
73
	jnz	still
74
 
75
	mcall	37,0		; проверим координаты
76
	cmp	[top_right_corner],eax
77
	jnz	still
78
;------------------------------------------------------------------------------
79
align 4
1747 mario79 80
create_setup:
2529 mario79 81
	test	[params],2
82
	jnz	still           ; окно настроек уже создано
83
	mcall	51,1,sthread,sthread_stack_top
84
	or	[params],2
85
	jmp	still
86
;------------------------------------------------------------------------------
87
align 4
1747 mario79 88
key:
2529 mario79 89
	mcall                   ; eax = 2
90
	jmp	still
91
;------------------------------------------------------------------------------
92
align 4
1747 mario79 93
create_ss_thread:
2529 mario79 94
	test	[params],3
95
	jnz	still
96
	call	create_ss
97
	jmp	still
98
;------------------------------------------------------------------------------
99
align 4
1747 mario79 100
create_ss:
2529 mario79 101
	mcall	51,1,thread,thread_stack_top
102
	or	[params],1
103
	ret
104
;------------------------------------------------------------------------------
105
align 4
106
thread:
107
	mcall	40,100010b
108
;set_new_cursor_skin - transparent cursor
109
	mcall	68,12,32*32*4	; get memory for own cursor area
1747 mario79 110
 
2529 mario79 111
	push	eax
112
	mov	ecx,eax
113
	mcall	37,4,,2		; load own cursor
1747 mario79 114
 
2529 mario79 115
	mov	ecx,eax
116
	mcall	37,5		; set own cursor
1747 mario79 117
 
2529 mario79 118
	pop	ecx
119
	mcall	68,13	; free own cursor area
1747 mario79 120
 
2529 mario79 121
	cmp	[type],dword 0
122
	je	drawsswin
1747 mario79 123
 
2529 mario79 124
	cmp	[type],dword 24
125
	je	asminit
1747 mario79 126
 
2529 mario79 127
	mov	dword [delay],1
128
	mov	[lx1],10         ; for "draw line"
129
	mov	[lx2],40
130
	mov	[ly1],50
131
	mov	[ly2],100
132
	mov	[addx1],1
133
	mov	[addx2],1
134
	mov	[addy1],1
135
	mov	[addy2],1
136
	jmp	drawsswin
137
;--------------------------------------
3645 fedesco 138
align 4
2529 mario79 139
asminit:	; for "assembler" - assembler sources demo
140
; get size of file
141
	mov	[fileinfo],dword 5
142
	mov	[fileinfo.point],dword fileinfo_buffer
143
	mcall	70,fileinfo
144
	test	eax,eax
145
	jnz	.no_file
146
; get memory for file
147
	mov	ecx,[fileinfo_buffer+32]
148
	mov	[fileinfo.size],ecx
149
	mcall	68,12
150
	mov	[fileinfo.point],eax
151
; load file
152
	mov	[fileinfo],dword 0
153
	mcall	70,fileinfo
154
	test	eax,eax
155
	jz	@f
156
	mcall	68,13,[fileinfo.point]
157
;--------------------------------------
3645 fedesco 158
align 4
2529 mario79 159
.no_file:
160
	mov	[type],dword 0
161
	jmp	drawsswin
162
;--------------------------------------
3645 fedesco 163
align 4
2529 mario79 164
@@:
165
	mov	dword [delay],1	;25 - old value
166
;--------------------------------------
3645 fedesco 167
align 4
2529 mario79 168
asminit1:
169
	mov	eax,[fileinfo.point]
170
	mov	[stringstart],eax
171
	mov	dword [stringlen],1
172
;--------------------------------------
3645 fedesco 173
align 4
2529 mario79 174
newpage:
175
	mov	word [stringpos],10
176
;--------------------------------------
3645 fedesco 177
align 4
2529 mario79 178
drawsswin:
179
	xor	eax,eax
180
	movzx	ebx,[x_max]
181
	movzx	ecx,[y_max]
182
	inc	ebx
183
	inc	ecx
184
	mcall	,,,0x01000000
1747 mario79 185
 
2529 mario79 186
	xor	edx,edx
187
	mcall	13
188
;--------------------------------------
3645 fedesco 189
align 4
2529 mario79 190
tstill:
191
	mcall	23,[delay]
192
	test	eax,eax
193
	jnz	thr_end
1747 mario79 194
 
2529 mario79 195
	cmp	[type],dword 0
196
	je	tstill
1747 mario79 197
 
2529 mario79 198
	cmp	[type],dword 24
199
	je	drawssasm
1747 mario79 200
 
2529 mario79 201
	call	draw_line
202
	jmp	tstill
203
;--------------------------------------
3645 fedesco 204
align 4
2529 mario79 205
thr_end:
206
	cmp	[type],dword 24
207
	jne	@f
208
	mcall	68,13,[fileinfo.point]
209
;--------------------------------------
3645 fedesco 210
align 4
2529 mario79 211
@@:
212
	and	[params], not 1
213
	or	eax,-1
214
	mcall
215
;------------------------------------------------------------------------------
216
align 4
217
drawssasm:
218
	mov	edi,[stringstart]
219
	add	edi,[stringlen]
220
	dec	edi
1747 mario79 221
 
2529 mario79 222
	mov	eax,edi
223
	sub	eax,[fileinfo.point]
1747 mario79 224
 
2529 mario79 225
	cmp	eax,[fileinfo.size]
226
	ja	asminit1
1747 mario79 227
 
2529 mario79 228
	cmp	word [edi],0x0a0d
229
	je	addstring
1747 mario79 230
 
2529 mario79 231
	cmp	byte [edi],0x0a
232
	jne	noaddstring
1747 mario79 233
 
2529 mario79 234
	dec	edi
235
;--------------------------------------
3645 fedesco 236
align 4
2529 mario79 237
addstring:
238
	add	word [stringpos],10
239
	add	edi,2
240
	mov	[stringstart],edi
241
	mov	dword [stringlen],1
242
	mov	ax,[stringpos]
243
	cmp	ax,[y_max]
244
	jb	tstill
245
	jmp	newpage
246
;--------------------------------------
3645 fedesco 247
align 4
2529 mario79 248
noaddstring:
249
	mov	ebx,10*65536
250
	mov	bx,[stringpos]
251
	mcall	4,,0x104ba010,[stringstart],[stringlen]
252
	inc	dword [stringlen]
253
	cmp	[edi],byte ' '
254
	je	drawssasm
255
	jmp	tstill
256
;------------------------------------------------------------------------------
257
align 4
258
draw_line:
259
	movzx	esi,[x_max]
260
	movzx	edi,[y_max]
1747 mario79 261
 
2529 mario79 262
	mov	eax,[addx1]
263
	add	[lx1],eax
264
	mov	eax,[addy1]
265
	add	[ly1],eax
1747 mario79 266
 
2529 mario79 267
	mov	eax,[addx2]
268
	add	[lx2],eax
269
	mov	eax,[addy2]
270
	add	[ly2],eax
3645 fedesco 271
 
2529 mario79 272
	cmp	[lx1],1
273
	jge	dl1
274
	mov	[addx1],1
275
;--------------------------------------
3645 fedesco 276
align 4
2529 mario79 277
dl1:
278
	cmp	[lx2],1
279
	jge	dl2
1747 mario79 280
 
2529 mario79 281
	mov	[addx2],1
282
;--------------------------------------
3645 fedesco 283
align 4
2529 mario79 284
dl2:
285
	cmp	[lx1],esi
286
	jbe	dl3
287
 
288
	mov	[addx1],0xffffffff
289
;--------------------------------------
3645 fedesco 290
align 4
2529 mario79 291
dl3:
292
	cmp	[lx2],esi
293
	jbe	dl4
294
 
295
	mov	[addx2],0xffffffff
296
;--------------------------------------
3645 fedesco 297
align 4
2529 mario79 298
dl4:
299
	cmp	[ly1],1
300
	jge	dl5
301
	mov	[addy1],1
302
;--------------------------------------
3645 fedesco 303
align 4
2529 mario79 304
dl5:
305
	cmp	[ly2],2
306
	jge	dl6
307
 
308
	mov	[addy2],1
309
;--------------------------------------
3645 fedesco 310
align 4
2529 mario79 311
dl6:
312
	cmp	[ly1],edi
313
	jbe	dl7
314
 
315
	mov	[addy1],-1
316
;--------------------------------------
3645 fedesco 317
align 4
2529 mario79 318
dl7:
319
	cmp	[ly2],edi
320
	jbe	dl8
321
 
322
	mov	[addy2],-1
323
;--------------------------------------
3645 fedesco 324
align 4
2529 mario79 325
dl8:
326
	mov	eax,[lx2]
327
	cmp	[lx1],eax
328
	jz	dnol
3645 fedesco 329
 
2529 mario79 330
	mov	bx,word [lx1]
331
	shl	ebx,16
332
	mov	bx,word [lx2]
333
 
334
	mov	cx,word [ly1]
335
	shl	ecx,16
336
	mov	cx,word [ly2]
3645 fedesco 337
 
2529 mario79 338
	mov	edx,[lcolor]
339
	and	edx,0xffffff
340
	mcall	38
341
;--------------------------------------
3645 fedesco 342
align 4
2529 mario79 343
dnol:
344
	add	[lcolor],0x010201
345
	ret
346
;------------------------------------------------------------------------------
347
align 4
348
sthread:		; start of execution
1747 mario79 349
     call sdraw_window
2529 mario79 350
;--------------------------------------
3645 fedesco 351
align 4
1747 mario79 352
sstill:
2529 mario79 353
	mcall	10	; wait here for event
354
	dec	eax	; redraw request ?
355
	je	sthread
1747 mario79 356
 
2529 mario79 357
	dec	eax	; key in buffer ?
358
	jne	sbutton
1747 mario79 359
 
2529 mario79 360
	mcall	2
361
	jmp	snoclose	;sstill
362
;------------------------------------------------------------------------------
363
align 4
364
sbutton:		; button
365
	mcall	17	; get id
1747 mario79 366
 
2529 mario79 367
	cmp	ah,1	; button id=1 ?
368
	jne	snoclose
1747 mario79 369
 
2529 mario79 370
	and	[params],not 2
371
	mov	eax,-1	; close this program
372
	mcall
373
;--------------------------------------
3645 fedesco 374
align 4
2529 mario79 375
snoclose:
376
	cmp	ah,7
377
	jne	nosetfl
1747 mario79 378
 
2529 mario79 379
	xor	[params],1
380
	call	drawflag
381
	call	drawtype
382
	call	drawtime
383
	jmp	sstill
384
;--------------------------------------
3645 fedesco 385
align 4
2529 mario79 386
nosetfl:
387
	test	[params],1
388
	jnz	sstill
1747 mario79 389
 
2529 mario79 390
	cmp	ah,2
391
	jne	notypedown
1747 mario79 392
 
2529 mario79 393
	mov	eax,[type]
394
	test	eax,eax
395
	je	sstill
396
 
397
	sub	eax,12
398
	jmp	typeupdn
399
;--------------------------------------
400
align 4
401
notypedown:
402
	cmp	ah,3
403
	jne	notypeup
404
 
405
	mov	eax,[type]
406
	cmp	eax,24
407
	jae	sstill
408
 
409
	add	eax,12
410
	jmp	typeupdn
411
;--------------------------------------
412
align 4
413
notypeup:
414
	cmp	ah,4
415
	jne	notimedown
416
 
417
	mov	al,[time]
418
	cmp	al,1
419
	jbe	sstill
420
 
421
	dec	eax
422
;	das
423
	jmp	timeupdn
424
;--------------------------------------
425
align 4
426
notimedown:
427
	cmp	ah,5
428
	jne	notimeup
429
 
430
	mov	al,[time]
431
	cmp	al,59	; 0x59
432
	jae	sstill
433
 
434
	inc	eax
435
;	daa
436
	jmp	timeupdn
437
;--------------------------------------
438
align 4
439
notimeup:
440
	cmp	ah,6
441
	jne	noshow
442
 
443
	mcall	5,10
444
	call	create_ss
445
;--------------------------------------
446
align 4
447
noshow:
448
	jmp	sstill
449
;--------------------------------------
450
align 4
451
timeupdn:
452
	mov	[time],al
453
	call	drawtime
454
	jmp	sstill
455
;--------------------------------------
456
align 4
457
typeupdn:
458
	mov	[type],eax
459
	call	drawtype
460
	jmp	sstill
461
;------------------------------------------------------------------------------
1747 mario79 462
;   *********************************************
463
;   *******  WINDOW DEFINITIONS AND DRAW ********
464
;   *********************************************
2529 mario79 465
align 4
1747 mario79 466
sdraw_window:
2529 mario79 467
	mcall	12,1
1747 mario79 468
 
2529 mario79 469
	xor	eax,eax		; function 0 : define and draw window
470
	xor	esi,esi
471
	mcall	,<100,215>,<100,70>,0x13400088,,title
1747 mario79 472
 
2529 mario79 473
	mcall	8,<47,10>,<31,10>,2,0x702050
3645 fedesco 474
 
2529 mario79 475
	push	ebx
476
	add	ebx,13*65536
477
	mov	edi,ebx
478
	inc	edx
479
	mcall
480
	pop	ebx
3645 fedesco 481
 
2529 mario79 482
	add	ecx,15*65536
483
	inc	edx
484
	mcall
1747 mario79 485
 
2529 mario79 486
	mov	ebx,edi
487
	inc	edx
488
	mcall
1747 mario79 489
 
2529 mario79 490
	inc	edx
491
	mcall	,<160,40>,<28,14>
1747 mario79 492
 
2529 mario79 493
	mcall	4,<15,33>,0x80ffffff,setuptext	; write text to window
1747 mario79 494
 
2529 mario79 495
	add	ebx,15
496
	add	edx,10
497
	mcall
1747 mario79 498
 
2529 mario79 499
	mcall	,<169,32>,,buttext
1747 mario79 500
 
2529 mario79 501
	call	drawtype
502
	call	drawtime
503
	call	drawflag
1747 mario79 504
 
2529 mario79 505
	mcall	12,2
506
	ret
507
;------------------------------------------------------------------------------
508
align 4
1747 mario79 509
drawtype:
2529 mario79 510
	mov	edx,0xffffff
511
	test	[params], 1
512
	jz	noblue
1747 mario79 513
 
2529 mario79 514
	mov	edx,0x4e00e7
515
;--------------------------------------
516
align 4
517
noblue:
518
	mcall	13,<80,75>,<30,12>
519
	xor	ecx,ecx
520
	mov	edx,typetext
521
	add	edx,[type]
522
	mcall	4,<82,32>,,,12
523
	ret
524
;------------------------------------------------------------------------------
525
align 4
1747 mario79 526
drawtime:
2529 mario79 527
	mov	edx,0xffffff
528
	test	[params], 1
529
	jz	noblue1
1747 mario79 530
 
2529 mario79 531
	mov	edx,0x4e00e7
532
;--------------------------------------
533
align 4
534
noblue1:
535
	mcall	13,<80,15>,<45,12>
536
	xor	esi,esi
537
	movzx	ecx,byte [time]
538
	mcall	47,0x00020000,,<82,47>
539
	ret
540
;------------------------------------------------------------------------------
541
align 4
1747 mario79 542
drawflag:
2529 mario79 543
	mcall	8,,,0x80000007	; before we need delete button
544
; otherwise, a few hours later the application will spend all buttons of system
545
	mcall	,<150,10>,<45,10>,7,0xe0e0e0	; then create button
3645 fedesco 546
 
2529 mario79 547
	mov	edx,flag
548
	bt	dword [params],0
549
	jc	setf
1747 mario79 550
 
2529 mario79 551
	inc	edx
552
;--------------------------------------
553
align 4
554
setf:
555
	xor	ecx,ecx
556
	mcall	4,<153,47>,,,1
557
	ret
558
;------------------------------------------------------------------------------
559
align 4
1747 mario79 560
; DATA AREA
2529 mario79 561
buttext		db 'SHOW',0
562
flag		db 'V '
563
title		db 'SCREENSAVER SETUP',0
564
setuptext	db 'TYPE: < >',0
565
		db 'TIME: < >     MINUTES    NEVER',0
566
typetext	db 'BLACK SCREENCOLOR LINES ASSEMBLER   '
567
type	dd 12
568
time	db 15	; время до запуска заставки в минутах
569
delay	dd 100
1747 mario79 570
 
2529 mario79 571
lx1	dd 10
572
lx2	dd 40
1747 mario79 573
 
2529 mario79 574
ly1	dd 50
575
ly2	dd 100
1747 mario79 576
 
2529 mario79 577
addx1	dd 1
578
addx2	dd 1
1747 mario79 579
 
2529 mario79 580
addy1	dd 1
581
addy2	dd 1
1747 mario79 582
 
2529 mario79 583
stringlen	dd 1
584
stringstart	dd 0
585
stringpos	dw 10
1747 mario79 586
 
2529 mario79 587
params	db 0	;if bit 0 set-ssaver works if bit 1 set-setup works
1747 mario79 588
 
589
fileinfo:
2529 mario79 590
	dd 0
591
	dd 0
592
	dd 0
593
.size:	dd 0
594
.point:	dd 0
595
	db '/sys/macros.inc',0
596
;------------------------------------------------------------------------------
597
align 4
598
IM_END:
1747 mario79 599
; UNINITIALIZED DATA:
600
 
2529 mario79 601
lcolor	dd ?
602
x_max	dw ?	; размеры экрана
603
y_max	dw ?
1747 mario79 604
 
2529 mario79 605
top_right_corner	rd 1
606
;------------------------------------------------------------------------------
607
align 4
2535 mario79 608
I_Param:
2529 mario79 609
fileinfo_buffer:
610
	rb 40
611
;------------------------------------------------------------------------------
612
align 4
613
	rb 512
614
sthread_stack_top:
615
;------------------------------------------------------------------------------
616
align 4
617
	rb 512
618
thread_stack_top:
619
;------------------------------------------------------------------------------
620
align 4
621
	rb 512
622
stack_top:
623
I_END:
624
;------------------------------------------------------------------------------