Subversion Repositories Kolibri OS

Rev

Rev 3645 | 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
;------------------------------------------------------------------------------
5888 pathoswith 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.
2529 mario79 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
5888 pathoswith 19
	dd 0x01 	; header version
2529 mario79 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
5888 pathoswith 82
	jnz	still		; окно настроек уже создано
2529 mario79 83
	mcall	51,1,sthread,sthread_stack_top
84
	or	[params],2
85
	jmp	still
86
;------------------------------------------------------------------------------
87
align 4
1747 mario79 88
key:
5888 pathoswith 89
	mcall			; eax = 2
2529 mario79 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
5888 pathoswith 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
5888 pathoswith 128
	mov	[lx1],10	 ; for "draw line"
2529 mario79 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
@@:
5888 pathoswith 165
	mov	dword [delay],1 ;25 - old value
2529 mario79 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:
5888 pathoswith 175
	mov	[stringpos],16
2529 mario79 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:
5888 pathoswith 238
	add	[stringpos],16
2529 mario79 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:
5888 pathoswith 249
	mov	ebx,[stringlen]
250
	shl	ebx,19
2529 mario79 251
	mov	bx,[stringpos]
5888 pathoswith 252
	mov	edx,[stringstart]
253
	add	edx,[stringlen]
254
	dec	edx
255
	mcall	4,,0x104ba010,,1
2529 mario79 256
	inc	dword [stringlen]
257
	cmp	[edi],byte ' '
258
	je	drawssasm
259
	jmp	tstill
260
;------------------------------------------------------------------------------
261
align 4
262
draw_line:
263
	movzx	esi,[x_max]
264
	movzx	edi,[y_max]
1747 mario79 265
 
2529 mario79 266
	mov	eax,[addx1]
267
	add	[lx1],eax
268
	mov	eax,[addy1]
269
	add	[ly1],eax
1747 mario79 270
 
2529 mario79 271
	mov	eax,[addx2]
272
	add	[lx2],eax
273
	mov	eax,[addy2]
274
	add	[ly2],eax
3645 fedesco 275
 
2529 mario79 276
	cmp	[lx1],1
277
	jge	dl1
278
	mov	[addx1],1
279
;--------------------------------------
3645 fedesco 280
align 4
2529 mario79 281
dl1:
282
	cmp	[lx2],1
283
	jge	dl2
1747 mario79 284
 
2529 mario79 285
	mov	[addx2],1
286
;--------------------------------------
3645 fedesco 287
align 4
2529 mario79 288
dl2:
289
	cmp	[lx1],esi
290
	jbe	dl3
291
 
292
	mov	[addx1],0xffffffff
293
;--------------------------------------
3645 fedesco 294
align 4
2529 mario79 295
dl3:
296
	cmp	[lx2],esi
297
	jbe	dl4
298
 
299
	mov	[addx2],0xffffffff
300
;--------------------------------------
3645 fedesco 301
align 4
2529 mario79 302
dl4:
303
	cmp	[ly1],1
304
	jge	dl5
305
	mov	[addy1],1
306
;--------------------------------------
3645 fedesco 307
align 4
2529 mario79 308
dl5:
309
	cmp	[ly2],2
310
	jge	dl6
311
 
312
	mov	[addy2],1
313
;--------------------------------------
3645 fedesco 314
align 4
2529 mario79 315
dl6:
316
	cmp	[ly1],edi
317
	jbe	dl7
318
 
319
	mov	[addy1],-1
320
;--------------------------------------
3645 fedesco 321
align 4
2529 mario79 322
dl7:
323
	cmp	[ly2],edi
324
	jbe	dl8
325
 
326
	mov	[addy2],-1
327
;--------------------------------------
3645 fedesco 328
align 4
2529 mario79 329
dl8:
330
	mov	eax,[lx2]
331
	cmp	[lx1],eax
332
	jz	dnol
3645 fedesco 333
 
2529 mario79 334
	mov	bx,word [lx1]
335
	shl	ebx,16
336
	mov	bx,word [lx2]
337
 
338
	mov	cx,word [ly1]
339
	shl	ecx,16
340
	mov	cx,word [ly2]
3645 fedesco 341
 
2529 mario79 342
	mov	edx,[lcolor]
343
	and	edx,0xffffff
344
	mcall	38
345
;--------------------------------------
3645 fedesco 346
align 4
2529 mario79 347
dnol:
348
	add	[lcolor],0x010201
349
	ret
350
;------------------------------------------------------------------------------
351
align 4
352
sthread:		; start of execution
1747 mario79 353
     call sdraw_window
2529 mario79 354
;--------------------------------------
3645 fedesco 355
align 4
1747 mario79 356
sstill:
2529 mario79 357
	mcall	10	; wait here for event
358
	dec	eax	; redraw request ?
359
	je	sthread
1747 mario79 360
 
2529 mario79 361
	dec	eax	; key in buffer ?
362
	jne	sbutton
1747 mario79 363
 
2529 mario79 364
	mcall	2
365
	jmp	snoclose	;sstill
366
;------------------------------------------------------------------------------
367
align 4
368
sbutton:		; button
369
	mcall	17	; get id
1747 mario79 370
 
2529 mario79 371
	cmp	ah,1	; button id=1 ?
372
	jne	snoclose
1747 mario79 373
 
2529 mario79 374
	and	[params],not 2
375
	mov	eax,-1	; close this program
376
	mcall
377
;--------------------------------------
3645 fedesco 378
align 4
2529 mario79 379
snoclose:
380
	cmp	ah,7
381
	jne	nosetfl
1747 mario79 382
 
2529 mario79 383
	xor	[params],1
384
	call	drawflag
385
	call	drawtype
386
	call	drawtime
387
	jmp	sstill
388
;--------------------------------------
3645 fedesco 389
align 4
2529 mario79 390
nosetfl:
391
	test	[params],1
392
	jnz	sstill
1747 mario79 393
 
2529 mario79 394
	cmp	ah,2
395
	jne	notypedown
1747 mario79 396
 
2529 mario79 397
	mov	eax,[type]
398
	test	eax,eax
399
	je	sstill
400
 
401
	sub	eax,12
402
	jmp	typeupdn
403
;--------------------------------------
404
align 4
405
notypedown:
406
	cmp	ah,3
407
	jne	notypeup
408
 
409
	mov	eax,[type]
410
	cmp	eax,24
411
	jae	sstill
412
 
413
	add	eax,12
414
	jmp	typeupdn
415
;--------------------------------------
416
align 4
417
notypeup:
418
	cmp	ah,4
419
	jne	notimedown
420
 
421
	mov	al,[time]
422
	cmp	al,1
423
	jbe	sstill
424
 
425
	dec	eax
426
;	das
427
	jmp	timeupdn
428
;--------------------------------------
429
align 4
430
notimedown:
431
	cmp	ah,5
432
	jne	notimeup
433
 
434
	mov	al,[time]
435
	cmp	al,59	; 0x59
436
	jae	sstill
437
 
438
	inc	eax
439
;	daa
440
	jmp	timeupdn
441
;--------------------------------------
442
align 4
443
notimeup:
444
	cmp	ah,6
445
	jne	noshow
446
 
447
	mcall	5,10
448
	call	create_ss
449
;--------------------------------------
450
align 4
451
noshow:
452
	jmp	sstill
453
;--------------------------------------
454
align 4
455
timeupdn:
456
	mov	[time],al
457
	call	drawtime
458
	jmp	sstill
459
;--------------------------------------
460
align 4
461
typeupdn:
462
	mov	[type],eax
463
	call	drawtype
464
	jmp	sstill
465
;------------------------------------------------------------------------------
1747 mario79 466
;   *********************************************
467
;   *******  WINDOW DEFINITIONS AND DRAW ********
468
;   *********************************************
2529 mario79 469
align 4
1747 mario79 470
sdraw_window:
2529 mario79 471
	mcall	12,1
1747 mario79 472
 
5888 pathoswith 473
	xor	eax,eax 	; function 0 : define and draw window
2529 mario79 474
	xor	esi,esi
475
	mcall	,<100,215>,<100,70>,0x13400088,,title
1747 mario79 476
 
2529 mario79 477
	mcall	8,<47,10>,<31,10>,2,0x702050
3645 fedesco 478
 
2529 mario79 479
	push	ebx
480
	add	ebx,13*65536
481
	mov	edi,ebx
482
	inc	edx
483
	mcall
484
	pop	ebx
3645 fedesco 485
 
2529 mario79 486
	add	ecx,15*65536
487
	inc	edx
488
	mcall
1747 mario79 489
 
2529 mario79 490
	mov	ebx,edi
491
	inc	edx
492
	mcall
1747 mario79 493
 
2529 mario79 494
	inc	edx
495
	mcall	,<160,40>,<28,14>
1747 mario79 496
 
2529 mario79 497
	mcall	4,<15,33>,0x80ffffff,setuptext	; write text to window
1747 mario79 498
 
2529 mario79 499
	add	ebx,15
500
	add	edx,10
501
	mcall
1747 mario79 502
 
2529 mario79 503
	mcall	,<169,32>,,buttext
1747 mario79 504
 
2529 mario79 505
	call	drawtype
506
	call	drawtime
507
	call	drawflag
1747 mario79 508
 
2529 mario79 509
	mcall	12,2
510
	ret
511
;------------------------------------------------------------------------------
512
align 4
1747 mario79 513
drawtype:
2529 mario79 514
	mov	edx,0xffffff
515
	test	[params], 1
516
	jz	noblue
1747 mario79 517
 
2529 mario79 518
	mov	edx,0x4e00e7
519
;--------------------------------------
520
align 4
521
noblue:
522
	mcall	13,<80,75>,<30,12>
523
	xor	ecx,ecx
524
	mov	edx,typetext
525
	add	edx,[type]
526
	mcall	4,<82,32>,,,12
527
	ret
528
;------------------------------------------------------------------------------
529
align 4
1747 mario79 530
drawtime:
2529 mario79 531
	mov	edx,0xffffff
532
	test	[params], 1
533
	jz	noblue1
1747 mario79 534
 
2529 mario79 535
	mov	edx,0x4e00e7
536
;--------------------------------------
537
align 4
538
noblue1:
539
	mcall	13,<80,15>,<45,12>
540
	xor	esi,esi
541
	movzx	ecx,byte [time]
542
	mcall	47,0x00020000,,<82,47>
543
	ret
544
;------------------------------------------------------------------------------
545
align 4
1747 mario79 546
drawflag:
2529 mario79 547
	mcall	8,,,0x80000007	; before we need delete button
548
; otherwise, a few hours later the application will spend all buttons of system
549
	mcall	,<150,10>,<45,10>,7,0xe0e0e0	; then create button
3645 fedesco 550
 
2529 mario79 551
	mov	edx,flag
552
	bt	dword [params],0
553
	jc	setf
1747 mario79 554
 
2529 mario79 555
	inc	edx
556
;--------------------------------------
557
align 4
558
setf:
559
	xor	ecx,ecx
560
	mcall	4,<153,47>,,,1
561
	ret
562
;------------------------------------------------------------------------------
5888 pathoswith 563
align 4 	; DATA AREA
2529 mario79 564
type	dd 12
565
delay	dd 100
566
lx1	dd 10
567
lx2	dd 40
568
ly1	dd 50
569
ly2	dd 100
570
addx1	dd 1
571
addx2	dd 1
572
addy1	dd 1
573
addy2	dd 1
574
stringlen	dd 1
575
stringstart	dd 0
1747 mario79 576
 
5888 pathoswith 577
stringpos	dw 16
578
time		db 15	; время до запуска заставки в минутах
579
params		db 0	;if bit 0 set-ssaver works if bit 1 set-setup works
1747 mario79 580
 
581
fileinfo:
2529 mario79 582
	dd 0
583
	dd 0
584
	dd 0
585
.size:	dd 0
5888 pathoswith 586
.point: dd 0
2529 mario79 587
	db '/sys/macros.inc',0
5888 pathoswith 588
 
589
buttext 	db 'SHOW',0
590
flag		db 'V '
591
title		db 'SCREENSAVER SETUP',0
592
setuptext	db 'TYPE: < >',0
593
		db 'TIME: < >     MINUTES    NEVER',0
594
typetext	db 'BLACK SCREENCOLOR LINES ASSEMBLER   '
595
;-------------------------------
596
IM_END: 	; UNINITIALIZED DATA
597
top_right_corner	rd 1
2529 mario79 598
align 4
599
lcolor	dd ?
600
x_max	dw ?	; размеры экрана
601
y_max	dw ?
2535 mario79 602
I_Param:
2529 mario79 603
fileinfo_buffer:
604
	rb 40
5888 pathoswith 605
;-------------------------------
2529 mario79 606
	rb 512
607
sthread_stack_top:
608
	rb 512
609
thread_stack_top:
610
	rb 512
611
stack_top:
612
I_END: