Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
31 halyavin 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;                                                   ;
2619 mario79 3
;   TASK PANEL for KolibriOS  - Compile with fasm   ;
31 halyavin 4
;                                                   ;
5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2619 mario79 6
;------------------------------------------------------------------------------
7
; version:	2.0
8
; last update:  17/04/2012
9
; changed by:   Marat Zakiyanov aka Mario79, aka Mario
10
; changes:      New logic of switching windows (turnoff/restore)
11
;               New logic of button "clear desktop".
12
;               Win+D (restore/clear desktop), Win+R (start RUN application).
13
;               Using the library LibINI to set the parameters.
14
;               New style of panel. Start application Menu with boot options.
15
;               two versions of the location of the panel -
16
;               the bottom of the desktop and on top of the desktop.
17
;------------------------------------------------------------------------------
2532 mario79 18
; last update:  31/03/2012
19
; changed by:   Marat Zakiyanov aka Mario79, aka Mario
20
; changes:      The program uses only 20 Kb memory is now.
21
;               Code optimizing and refactoring.
22
;------------------------------------------------------------------------------
23
	use32
24
	org 0x0
25
	db 'MENUET01'	; 8 byte id
26
	dd 0x01		; header version
27
	dd START	; program start
2619 mario79 28
	dd IM_END	; program image size
29
	dd I_END	; reguired amount of memory - 10 Kb
30
	dd stack_top	; esp
2532 mario79 31
	dd 0x0		; boot parameters
2619 mario79 32
	dd path		; application pach
33
;------------------------------------------------------------------------------
31 halyavin 34
include 'lang.inc'
2619 mario79 35
include '../../../macros.inc'
36
include '../../../proc32.inc'
37
;include 'debug.inc'
2532 mario79 38
include 'MOI.INC'	;раскладки клавиатуры
2619 mario79 39
include '../../../develop/libraries/box_lib/load_lib.mac'
40
        @use_library    ;use load lib macros
41
;------------------------------------------------------------------------------
42
caps_lock_check fix 1
43
;------------------------------------------------------------------------------
1440 diamond 44
time_bgr_color = 0x66cc
2619 mario79 45
;PANEL_HEIGHT = 18
46
ML_SIZE = 10
47
MR_SIZE = 10
48
MENU_SIZE = 50
49
CLD_SIZE = 20
50
TAB_SIZE = 60
51
TRAY_SIZE = 140
1440 diamond 52
 
2619 mario79 53
CLOCK_SIZE = 40
54
CPU_USAGE_SIZE = 10
55
CHLANG_SIZE = 20
56
PAGE_LIST_SIZE = 36
57
;------------------------------------------------------------------------------
2532 mario79 58
align 4
93 diamond 59
handle_key:
2619 mario79 60
	mcall	18,7
2532 mario79 61
	mov	[active_process],eax
31 halyavin 62
 
2532 mario79 63
	mcall	2
2619 mario79 64
 
65
;	dps	"panel key: "
66
;	dph	eax
67
;	newline
68
 
601 Rus 69
	cmp	al, 2
70
	jnz	begin_1.ret
2532 mario79 71
 
601 Rus 72
	mov	ebx, exec_fileinfo
73
	shr	eax, 8
870 barsuk 74
	cmp	al, 0
75
	je	prod
2532 mario79 76
 
870 barsuk 77
	mov	[key_r],al
78
	sub	[key_r],2
79
	cmp	al, 2
80
	jz	alter
2532 mario79 81
 
870 barsuk 82
	cmp	al, 3
83
	jz	alter
2532 mario79 84
 
870 barsuk 85
	cmp	al, 4
86
	jz	alter
2532 mario79 87
 
870 barsuk 88
	cmp	al, 5
89
	jz	alter
2532 mario79 90
 
870 barsuk 91
	cmp	al, 6
92
	jz	alter
2532 mario79 93
 
870 barsuk 94
	cmp	al, 7
95
	jz	alter
2532 mario79 96
 
870 barsuk 97
	cmp	al, 8
98
	jz	alter
2532 mario79 99
;--------------------------------------
2619 mario79 100
;align 4
101
;prod:
2532 mario79 102
if caps_lock_check
2619 mario79 103
	cmp	al,58	;CAPS LOCK DOWN
2532 mario79 104
	jne	@f
105
 
106
	pusha
107
	mcall	26,2,9
108
	mov	ebx,eax
109
	mov	eax,2
2619 mario79 110
;	call	draw_window ;;;???
111
	mov	[draw_flag_certainly],1
112
   	call	draw_flag	; language
2532 mario79 113
	popa
114
	ret
115
@@:
116
end if
2619 mario79 117
	cmp	al, 15	; Alt+Tab DOWN
601 Rus 118
	jz	alt_tab_pressed
2532 mario79 119
 
2619 mario79 120
	cmp	al, 88	; Ctrl+Alt+F12
601 Rus 121
	jz	start_end_application
2532 mario79 122
 
2619 mario79 123
 
124
 
125
	cmp	al, 91	; RWin DOWN
126
	jz	set_win_key_flag
2532 mario79 127
 
2619 mario79 128
	cmp	al, 92	; LWin DOWN
129
	jz	set_win_key_flag
130
 
131
 
132
	cmp	al, 219	; RWin UP
133
	jz	cut_win_key_flag	;start_menu_application
2532 mario79 134
 
2619 mario79 135
	cmp	al, 220	; LWin UP
136
	jz	cut_win_key_flag	;start_menu_application
137
 
138
 
139
	cmp	al, 62	; Alt+F4
601 Rus 140
	jz	kill_active_application
2532 mario79 141
 
1421 diamond 142
;	cmp	al, 71
143
;	jz	page_list_next
2532 mario79 144
 
1421 diamond 145
;	cmp	al, 72
146
;	jz	page_list_prev
2532 mario79 147
 
2619 mario79 148
	cmp	al, 69	; Alt+Shift+NumLock
1421 diamond 149
	jz	start_mousemul_application
2619 mario79 150
 
151
	cmp	al, 19	; Win+R
152
	jz	start_run_application
1920 Albom 153
 
2619 mario79 154
	cmp	al, 32	; Win+D
155
	jz	minimize_all_windows
156
;--------------------------------------
157
align 4
158
prod:
159
;	cmp	eax,0x20000
160
;	je	start_menu_application
161
 
162
;	cmp	eax,0x40000
163
;	je	start_menu_application
164
 
601 Rus 165
	cmp	[current_alt_tab_app], -1
166
	jz	@f
2532 mario79 167
 
2619 mario79 168
	test	ah, 0x30	; Alt+Tab UP
601 Rus 169
	jz	alt_tab_released
2532 mario79 170
;--------------------------------------
171
align 4
443 diamond 172
@@:
304 diamond 173
; this is hotkey Ctrl+Shift ;or LShift+RShift
2532 mario79 174
	jmp	karu
175
;	mov	ebx, setup_exec
176
;	test	ah, 001100b
177
;	jz	change_sys_lang
2619 mario79 178
;------------------------------------------------------------------------------
2532 mario79 179
align 4
2619 mario79 180
set_win_key_flag:
181
	mov	[win_key_flag],1
182
	ret
183
;------------------------------------------------------------------------------
184
align 4
185
cut_win_key_flag:
186
	xor	eax,eax
187
	mov	[win_key_flag],al
188
	xchg	[start_menu_flag],al
189
	test	al,al
190
	jz	start_menu_application
191
	ret
192
;------------------------------------------------------------------------------
193
align 4
304 diamond 194
change_key_lang:
601 Rus 195
	mov	dword [ebx+8], chlang
196
	mcall	70
2532 mario79 197
;--------------------------------------
198
align 4
31 halyavin 199
begin_1:
2532 mario79 200
	mov	ecx,[active_process]
201
	mcall	18, 3
202
	mcall	5, 25
203
;--------------------------------------
204
align 4
93 diamond 205
.ret:
601 Rus 206
	ret
2619 mario79 207
;------------------------------------------------------------------------------
2532 mario79 208
;align 4
304 diamond 209
;change_sys_lang:
2532 mario79 210
;    	mov	   dword [ebx+8], syslang
304 diamond 211
;        mcall   70
212
;        jmp     begin_1
2619 mario79 213
;------------------------------------------------------------------------------
2532 mario79 214
align 4
215
start_end_application:
216
	mov	dword [ebx+21],end_name
601 Rus 217
	mcall	70
1421 diamond 218
	ret
2619 mario79 219
;------------------------------------------------------------------------------
2532 mario79 220
align 4
221
start_mousemul_application:
222
	mov	dword [ebx+21],mousemul_name
1421 diamond 223
	mcall	70
224
	ret
2619 mario79 225
;------------------------------------------------------------------------------
2532 mario79 226
align 4
227
kill_active_application:
228
	mcall	72,1,3,1
229
	jmp	begin_1.ret
2619 mario79 230
;------------------------------------------------------------------------------
231
 
2532 mario79 232
align 4
233
start_menu_application:
601 Rus 234
	mov	[draw_window_1], 1
2619 mario79 235
	call	menu_handler
236
	jmp	begin_1.ret
237
;------------------------------------------------------------------------------
238
align 4
239
start_run_application:
240
	cmp	[win_key_flag],1
241
	je	@f
242
	ret
243
@@:
244
	mov	[start_menu_flag],1
245
	mov	[draw_window_1], 1
246
	mov	dword [ebx+21], run_name
601 Rus 247
	mcall	70
2532 mario79 248
	jmp	begin_1.ret
2619 mario79 249
;------------------------------------------------------------------------------
250
align 4
251
minimize_all_windows:
252
	cmp	[win_key_flag],1
253
	je	@f
254
	ret
255
@@:
256
	mov	[start_menu_flag],1
257
	call	clean_desktop
258
	ret
259
;------------------------------------------------------------------------------
2532 mario79 260
;align 4
1421 diamond 261
;page_list_next:
2532 mario79 262
;	cmp	[page_list],15
263
;	je	@f
1421 diamond 264
;
2532 mario79 265
;	inc	[page_list]
266
;	mov	[draw_window_1],1
267
;@@:
268
;	jmp  begin_1.ret
2619 mario79 269
;------------------------------------------------------------------------------
2532 mario79 270
;align 4
1421 diamond 271
;page_list_prev:
2532 mario79 272
;	cmp	[page_list],0
273
;	je	@f
274
;
275
;	dec	[page_list]
276
;	mov	[draw_window_1],1
277
;@@:
278
;	jmp  begin_1.ret
2619 mario79 279
;------------------------------------------------------------------------------
2532 mario79 280
align 4
443 diamond 281
alt_tab_pressed:
282
; handle Alt+Tab and Alt+Shift+Tab
601 Rus 283
	mov	ebp, eax
284
	cmp	[current_alt_tab_app], -1
285
	jnz	has_alt_tab_app
443 diamond 286
; заполняем таблицу приложений, подлежащих переключению
601 Rus 287
	xor	edx, edx
2619 mario79 288
	mov	ebx, procinfo_window_tabs
601 Rus 289
	mov	ecx, 1
443 diamond 290
.fill:
601 Rus 291
	inc	ecx
2532 mario79 292
	mcall	9
601 Rus 293
	call	need_window_tab
294
	jz	@f
2532 mario79 295
 
601 Rus 296
	cmp	edx, 256
297
	jz	@f
2532 mario79 298
 
601 Rus 299
	mov	[alt_tab_list+edx*8], ecx
300
	movzx	esi, word [ebx+4]
301
	mov	[alt_tab_list+edx*8+4], esi
302
	inc	edx
2532 mario79 303
;--------------------------------------
304
align 4
443 diamond 305
@@:
2532 mario79 306
	cmp	ecx,eax
601 Rus 307
	jb	.fill
2532 mario79 308
 
601 Rus 309
	mov	[alt_tab_list_size], edx
310
	test	edx, edx
311
	jz	begin_1.ret
2532 mario79 312
 
601 Rus 313
	mcall	66,4,0,0	; ловим момент отпускания всех управляющих клавиш
314
	test	eax, eax
315
	jnz	begin_1.ret
2532 mario79 316
 
601 Rus 317
	xor	edx, edx
318
	mov	eax, [alt_tab_list+4]
319
	xor	ecx, ecx
320
	inc	ecx
2532 mario79 321
;--------------------------------------
322
align 4
443 diamond 323
.findmax:
601 Rus 324
	cmp	[alt_tab_list+ecx*8+4], eax
325
	jb	@f
2532 mario79 326
 
601 Rus 327
	mov	edx, ecx
328
	mov	eax, [alt_tab_list+ecx*8+4]
2532 mario79 329
;--------------------------------------
330
align 4
443 diamond 331
@@:
601 Rus 332
	inc	ecx
333
	cmp	ecx, [alt_tab_list_size]
334
	jb	.findmax
2532 mario79 335
 
601 Rus 336
	mov	[current_alt_tab_app], edx
2532 mario79 337
;--------------------------------------
338
align 4
443 diamond 339
has_alt_tab_app:
601 Rus 340
	mov	eax, [current_alt_tab_app]
341
	mov	edx, [alt_tab_list+eax*8+4]	; slot
342
	xor	ecx, ecx
343
	or	eax, -1
344
	test	ebp, 300h
345
	jz	.notshift
2532 mario79 346
 
601 Rus 347
	or	esi, -1
2532 mario79 348
;--------------------------------------
349
align 4
443 diamond 350
.loop1:
601 Rus 351
	cmp	[alt_tab_list+ecx*8+4], edx
352
	jbe	@f
2532 mario79 353
 
601 Rus 354
	cmp	[alt_tab_list+ecx*8+4], esi
355
	jae	@f
2532 mario79 356
 
601 Rus 357
	mov	eax, ecx
358
	mov	esi, [alt_tab_list+ecx*8+4]
2532 mario79 359
;--------------------------------------
360
align 4
443 diamond 361
@@:
601 Rus 362
	inc	ecx
363
	cmp	ecx, [alt_tab_list_size]
364
	jb	.loop1
2532 mario79 365
 
601 Rus 366
	cmp	eax, -1
367
	jnz	.found
2532 mario79 368
 
601 Rus 369
	xor	edx, edx
370
	xor	ecx, ecx
371
	jmp	.loop1
2532 mario79 372
;--------------------------------------
373
align 4
443 diamond 374
.notshift:
601 Rus 375
	xor	esi, esi
2532 mario79 376
;--------------------------------------
377
align 4
443 diamond 378
.loop2:
601 Rus 379
	cmp	[alt_tab_list+ecx*8+4], edx
380
	jae	@f
2532 mario79 381
 
601 Rus 382
	cmp	[alt_tab_list+ecx*8+4], esi
383
	jbe	@f
2532 mario79 384
 
601 Rus 385
	mov	eax, ecx
386
	mov	esi, [alt_tab_list+ecx*8+4]
2532 mario79 387
;--------------------------------------
388
align 4
443 diamond 389
@@:
601 Rus 390
	inc	ecx
391
	cmp	ecx, [alt_tab_list_size]
392
	jb	.loop2
2532 mario79 393
 
601 Rus 394
	cmp	eax, -1
395
	jnz	.found
2532 mario79 396
 
601 Rus 397
	or	edx, -1
398
	xor	ecx, ecx
399
	jmp	.loop2
2532 mario79 400
;--------------------------------------
401
align 4
443 diamond 402
.found:
601 Rus 403
	mov	[current_alt_tab_app], eax
404
	push	eax
405
	xor	edx, edx
406
	div	[max_applications]
407
	mov	[page_list], eax
408
	mov	[draw_window_1], 1
409
	mov	edi, app_list
410
	push	edi
411
	mov	ecx, 20
412
	or	eax, -1
413
	rep	stosd
414
	pop	edi
415
	pop	ecx
416
	sub	ecx, edx
2532 mario79 417
;--------------------------------------
418
align 4
443 diamond 419
@@:
601 Rus 420
	cmp	ecx, [alt_tab_list_size]
421
	jae	redraw_window_tabs
2532 mario79 422
 
601 Rus 423
	mov	eax, [alt_tab_list+ecx*8]
424
	stosd
425
	inc	ecx
426
	jmp	@b
2532 mario79 427
;--------------------------------------
428
align 4
443 diamond 429
alt_tab_released:
601 Rus 430
	mcall	66,5,0,0	; уже поймали, хватит :)
2619 mario79 431
 
601 Rus 432
	or	eax, -1
433
	xchg	eax, [current_alt_tab_app]
434
	mov	ecx, [alt_tab_list+eax*8]
2532 mario79 435
	mcall	18,3
2619 mario79 436
 
601 Rus 437
	jmp	redraw_window_tabs
2619 mario79 438
;------------------------------------------------------------------------------
2532 mario79 439
align 4
601 Rus 440
active_process	dd 0
31 halyavin 441
 
2619 mario79 442
exit:
443
	mcall -1
444
;------------------------------------------------------------------------------
445
START:
446
	mcall	68,11
447
	mcall	66,1,1
448
 
449
	mcall	9,process_info_buffer,-1
450
	mov	ecx,[ebx+30]	; PID
451
	mcall	18,21
452
	mov	[my_active_slot],eax	; WINDOW SLOT
453
 
454
 
455
load_libraries l_libs_start,end_l_libs
31 halyavin 456
 
2619 mario79 457
	test	eax,eax
458
	jnz	exit
31 halyavin 459
 
2619 mario79 460
	call	Get_ini
461
 
462
	mcall	48,1,[button_style]
463
 
2532 mario79 464
	mcall	66,4,0,2	; LShift+RShift
465
	mcall	66,,,11h	; Ctrl+Shift
466
	mcall	66,,88,110h	; Alt+Ctrl+F12
2619 mario79 467
	mcall	66,,91,0h 	; RWin DOWN
468
	mcall	66,,92 		; LWin DOWN
469
	mcall	66,,219 	; RWin UP
470
	mcall	66,,220		; LWin UP
471
 
472
;	mcall	66,,147,0h 	; Win+R UP
473
	mcall	66,,19,0h 	; Win+R DOWN
474
 
475
;	mcall	66,,23,0h 	; Win+I DOWN
476
 
477
	mcall	66,,32,0h 	; Win+D DOWN
478
;	mcall	66,,160,0h 	; Win+D UP
479
 
480
 
2532 mario79 481
;	mcall	66,,91,100h	; Alt+LWin
482
;	mcall	66,,92		; Alt+RWin
483
	mcall	66,,62,100h	; Alt+F4
484
;	mcall	66,,71		; Alt+Home
485
;	mcall	66,,72		; Alt+Up
486
	mcall	66,,15		; Alt+Tab
487
	mcall	66,,2		; Alt+1
488
	mcall	66,,3		; Alt+2
489
	mcall	66,,4		; Alt+3
490
	mcall	66,,5		; Alt+4
491
	mcall	66,,6		; Alt+5
492
	mcall	66,,7		; Alt+6
493
	mcall	66,,8		; Alt+7
494
	mcall	66,,,101h 	; Alt+Shift+Tab
495
	mcall	66,,69		; Alt+Shift+NumLock
870 barsuk 496
 
2532 mario79 497
if caps_lock_check
498
	xor	edx,edx
499
	mcall	66,4,58
500
end if
601 Rus 501
	mcall	14
502
	mov	[screen_size],eax
31 halyavin 503
 
2619 mario79 504
 
601 Rus 505
	mov	ecx,eax
870 barsuk 506
;eax = [xsize]*65536 + [ysize], где
2532 mario79 507
	shr	ecx,16
508
	and	eax,0xFFFF
2619 mario79 509
 
510
	cmp	[place_attachment],1
511
	je	@f
512
	ror	eax,16
513
	add	eax,[height]
514
	rol	eax,16
515
	mov	edx,eax
516
	jmp	.selected
517
;--------------------------------------
518
align 4
519
@@:
520
	sub	eax,[height]
521
	lea	edx,[eax-1]
522
;--------------------------------------
523
align 4
524
.selected:
601 Rus 525
	mcall	48,6
51 mikedld 526
 
2532 mario79 527
	mcall	9,process_info_buffer,-1
528
	mov	ecx,[process_info_buffer+30]
529
	mcall	18,21
530
	mov	[this_slot],eax
531
	mov	[max_slot],255
532
;--------------------------------------
533
align 4
31 halyavin 534
start_after_minimize:
2532 mario79 535
	call	draw_window
2619 mario79 536
;	call	draw_tray
2532 mario79 537
	call	draw_running_applications
31 halyavin 538
 
2532 mario79 539
	mcall	23,30
540
	call	load_ini
541
	call	fir_lng
542
;------------------------------------------------------------------------------
543
align 4
31 halyavin 544
still:
2619 mario79 545
;	call	draw_tray
546
	call	draw_time
547
   	call	draw_cpu_usage
2532 mario79 548
	call	draw_running_applications
31 halyavin 549
 
2532 mario79 550
	mcall	18,7	; check if active window changed
870 barsuk 551
	cmp	eax, [last_active_window]
552
	jz	@f
553
; need_window_tab:
554
; in: ebx->process info
555
; out: ZF set <=> do not draw
2532 mario79 556
	mov	ebx,[last_active_window]
870 barsuk 557
	mov	[prev_active_window], ebx
558
	mov	[last_active_window], eax
559
 
560
	mov	ecx, eax
2532 mario79 561
	mcall	9,process_info_buffer
870 barsuk 562
 
563
	call	need_window_tab
564
	jnz	.need_repaint
565
 
2532 mario79 566
	mcall	9,process_info_buffer,[prev_active_window]
870 barsuk 567
	call	need_window_tab
568
	jz	@f
2532 mario79 569
;--------------------------------------
570
align 4
870 barsuk 571
.need_repaint:
572
	mov	dword [active_window_changed], 1
2532 mario79 573
;--------------------------------------
574
align 4
870 barsuk 575
@@:
2532 mario79 576
	mcall	23,20
2619 mario79 577
 
578
	push	eax
579
	mcall	18,7
580
	cmp	[my_active_slot],eax
581
	je	@f
582
	mov	[current_active_slot],eax
583
@@:
584
	pop	eax
585
 
2532 mario79 586
	cmp	eax,1		; redraw ?
587
	jz	red
870 barsuk 588
 
2619 mario79 589
	cmp	eax,2
590
	jnz	@f
591
	call	handle_key
592
	jmp	.key
593
@@:
2532 mario79 594
	cmp	eax,3		; button ?
595
	jz	button
31 halyavin 596
 
2619 mario79 597
;	call	handle_key
598
.key:
2532 mario79 599
	cmp	dword [active_window_changed], 0
600
	jnz	red_active
870 barsuk 601
 
2619 mario79 602
   	call	draw_flag	; language
601 Rus 603
	jmp	still
2619 mario79 604
;------------------------------------------------------------------------------
2532 mario79 605
align 4
606
red_active:
607
red:
870 barsuk 608
	mov	dword [active_window_changed], 0
609
 
601 Rus 610
	mcall	14
611
	movzx	ecx,ax
612
	mov	edx,eax
613
	shr	edx,16
614
	cmp	[screen_size.height],ax
615
	jne	@f
2532 mario79 616
 
601 Rus 617
	rol	eax,16
618
	cmp	[screen_size.width],ax
619
	je	.lp1
620
	rol	eax,16
2532 mario79 621
@@:
622
	mov	[screen_size],eax
2619 mario79 623
	sub	ecx,[height]
624
	mcall	67,0,,,[height]
2532 mario79 625
;--------------------------------------
626
align 4
627
.lp1:
628
	call	draw_window
2619 mario79 629
;	call	draw_tray
2532 mario79 630
	jmp	still
2619 mario79 631
;------------------------------------------------------------------------------
2532 mario79 632
align 4
633
button:
634
	mcall	17
635
	test	eax,0xfffffe00	; is it close button? (signal from @panel)
636
	jz	still		; if so - wait for another event, because @panel shouldn't be closed
51 mikedld 637
 
2532 mario79 638
	cmp	al, 0
639
	jnz	right_mouse
870 barsuk 640
 
2532 mario79 641
	cmp	ah,50
642
	jb	no_activate
643
	cmp	ah,70
644
	jg	no_activate
31 halyavin 645
 
2532 mario79 646
	movzx	ecx,byte ah
647
	sub	ecx,52
648
	shl	ecx,2
870 barsuk 649
 
2532 mario79 650
	mov	ecx,[app_list+ecx]
2619 mario79 651
 
652
	mcall	9,process_info_buffer
653
 
654
	test	[ebx+70],dword 10b	; window is minimized to panel
655
	jnz	@f
656
 
657
	cmp	ecx,[current_active_slot]
658
	je	.turn_off
659
@@:
2532 mario79 660
	mcall	18,3,
2619 mario79 661
	jmp	.task_switching
662
;--------------------------------------
2532 mario79 663
align 4
2619 mario79 664
.turn_off:
665
	mov	edx,ecx
666
	mcall	18,22,0
667
.task_switching:
668
	mcall	68,1
669
	jmp	still
670
;------------------------------------------------------------------------------
671
align 4
2532 mario79 672
right_mouse:
673
	cmp	ah,50
674
	jb	still
31 halyavin 675
 
2532 mario79 676
	cmp	ah,70
677
	jg	still
870 barsuk 678
 
2532 mario79 679
	movzx	ecx,byte ah
680
	sub	ecx,52
870 barsuk 681
 
2532 mario79 682
	cmp	ecx, [app_tab_count]
683
	jge	still
870 barsuk 684
 
2532 mario79 685
	shl	ecx,2
686
	mcall	37,0
687
	mov	ebx, eax
688
	shr	eax, 16
689
	mov	[x_coord], ax
690
	and	ebx, 0xFFFF
691
	mov	[y_coord], bx
870 barsuk 692
 
2532 mario79 693
	mov	ecx,[app_list+ecx]	; ecx->selected app.slot
694
	mov	[n_slot], ecx
695
	mcall	9,procinfo_for_detect
870 barsuk 696
 
2532 mario79 697
	mcall	51,1,context_menu_start,ctx_menu_stack
870 barsuk 698
 
699
	mov	[ctx_menu_PID], eax
2532 mario79 700
	jmp	still
2619 mario79 701
;------------------------------------------------------------------------------
2532 mario79 702
align 4
703
no_activate:
704
	cmp	ah,101 	  ; minimize to left
705
	je	left_button
870 barsuk 706
 
2532 mario79 707
	cmp	ah,102 	  ; minimize to right
708
	je	right_button
870 barsuk 709
 
2532 mario79 710
	cmp	ah, 103
2619 mario79 711
	je	clean_desktop_1		    ; minimize all windows
870 barsuk 712
 
2619 mario79 713
;	cmp	ah, 104
714
;	je	restore_desktop	    ; restore minimized windows
31 halyavin 715
 
2619 mario79 716
;	cmp	ah, 105
717
;	je	swap_minimized_desktop     ; minimize normal windows, and restore minimized windows
31 halyavin 718
 
2532 mario79 719
	cmp	ah,byte 1	  ; start/terminate menu
720
	jnz	noselect
31 halyavin 721
 
2532 mario79 722
	call	menu_handler
31 halyavin 723
 
2532 mario79 724
	jmp	still
725
;--------------------------------------
2619 mario79 726
align 4
727
clean_desktop_1:
728
 
729
 
730
	call	clean_desktop
731
 
732
 
733
	jmp	still
734
;--------------------------------------
2532 mario79 735
align 4
736
noselect:
737
	mov	ebx, exec_fileinfo
738
	cmp	ah,byte 2	       ; start calendar
739
	jnz	noid15  ;noclock
633 diamond 740
 
601 Rus 741
	mov	dword [ebx+21], calendar_name
2532 mario79 742
	mcall	70
743
	jmp	still
744
;--------------------------------------
745
align 4
746
noid15:
747
	cmp	ah,16
748
	jne	noid16
31 halyavin 749
 
2619 mario79 750
;	mov	ebx, setup_exec
751
;	mov	dword [ebx+8], chlang
752
;	mcall	70
753
	call	karu
754
   	call	draw_flag	; language
2532 mario79 755
	jmp	still
756
;--------------------------------------
757
align 4
758
noid16:
759
;	cmp	ah,17
760
;	jne	noid17
304 diamond 761
;
2532 mario79 762
;	mov	ebx, setup_exec
763
;	mov	dword [ebx+8], syslang
764
;	mcall	70
765
;	jmp	still
766
;--------------------------------------
767
;align 4
304 diamond 768
;  noid17:
2532 mario79 769
	cmp	ah,18
770
	jne	noid18
771
 
601 Rus 772
	mov	dword [ebx+21], sysmeter_name
2532 mario79 773
	mcall	70
774
	jmp	still
775
;--------------------------------------
776
align 4
777
noid18:
2619 mario79 778
;	cmp	ah,19	; speaker
779
;	jne	noid19
31 halyavin 780
 
2619 mario79 781
;	mcall	18,8,2
782
;	mcall	15,3
783
;	jmp	red
2532 mario79 784
;--------------------------------------
2619 mario79 785
;align 4
786
;noid19:
787
;	cmp	ah,20		   ; start system setup
788
;	jnz	noid20
789
;
790
;	mov	ebx, setup_exec
791
;	and	dword [ebx+8], 0
792
;	mcall	70
793
;	jmp	still
2532 mario79 794
;--------------------------------------
2619 mario79 795
;align 4
796
;noid20:
2532 mario79 797
	cmp	ah,21
798
	jnz	noid21
31 halyavin 799
 
2532 mario79 800
	cmp	[page_list], 99
801
	jnc	still
802
	inc	[page_list]
803
	jmp	red
804
;--------------------------------------
805
align 4
806
noid21:
807
	cmp	ah,22
808
	jnz	still
31 halyavin 809
 
2532 mario79 810
	cmp	[page_list],0
811
	je	still
31 halyavin 812
 
2532 mario79 813
	dec	[page_list]
814
	jmp	red
2619 mario79 815
;------------------------------------------------------------------------------
2532 mario79 816
align 4
633 diamond 817
restore_desktop:
2532 mario79 818
	mcall	9,process_info_buffer,-1
819
	mov	[max_slot], eax
820
	mov	ecx, 2
821
	mov	edx, 2
822
;--------------------------------------
823
align 4
633 diamond 824
@@:
2532 mario79 825
	mcall	18, 22
826
	inc	edx
827
	cmp	edx, [max_slot]
828
	jbe	@b
2619 mario79 829
;	jmp	still
830
	ret
831
;------------------------------------------------------------------------------
832
;align 4
833
;swap_minimized_desktop:
834
;	xor	esi, esi
835
;	inc	esi
836
;	jmp	min_swap_desktop
837
;------------------------------------------------------------------------------
2532 mario79 838
align 4
633 diamond 839
clean_desktop:
2619 mario79 840
	mov	[clean_desktop_minimize],0
841
;	xor	esi,esi
2532 mario79 842
;--------------------------------------
2619 mario79 843
;align 4
844
;min_swap_desktop:		   ; input esi 0 - min, <>0 swap
2532 mario79 845
	mov	ecx, 2		   ; Начальный номер слота процесса
846
	mov	ebx, process_info_buffer
847
;--------------------------------------
848
align 4
633 diamond 849
.loop1:
2532 mario79 850
	cmp	ecx, [this_slot]
851
	je	.loop1xx
633 diamond 852
 
2532 mario79 853
	mcall	9
854
	mov	[max_slot], eax
855
	mov	dx, word [process_info_buffer+50]
856
	cmp	dx, 9		    ; Проверка свободен ли данный слот
857
	jz	.loop1xx
633 diamond 858
 
2532 mario79 859
	mov	edx, dword [ebx+10]
860
	cmp	dl, '@'
861
	je	.loop1xx
31 halyavin 862
 
2532 mario79 863
	cmp	dword [ebx+10], 'ICON'
864
	jnz	@f
31 halyavin 865
 
2532 mario79 866
	cmp	[ebx+42], dword 51
867
	jnz	@f
31 halyavin 868
 
2532 mario79 869
	cmp	[ebx+46], dword 51
870
	jz	.loop1xx
871
;--------------------------------------
872
align 4
873
@@:
874
	cmp	[ebx+10], dword '    '
875
	jz	.loop1xx
31 halyavin 876
 
2619 mario79 877
	pusha
878
	mov	edx, ecx
879
	xor	ecx, ecx
880
;	or	esi, esi
881
;	jz	@f
31 halyavin 882
 
2619 mario79 883
	movzx	eax, byte [process_info_buffer+70]
884
	and	eax, 2	      ; mask minimize
885
	jnz	@f
31 halyavin 886
 
2619 mario79 887
	mov	[clean_desktop_minimize],1
888
;	mov	ecx, 2	      ; restore
889
	mcall	18, 22
2532 mario79 890
;--------------------------------------
891
align 4
892
@@:
2619 mario79 893
	popa
2532 mario79 894
;--------------------------------------
895
align 4
896
.loop1xx:
897
	inc	ecx
898
	cmp	ecx, [max_slot]
899
	jbe	.loop1
2619 mario79 900
 
901
	cmp	[clean_desktop_minimize],1
902
	je	@f
903
	call	restore_desktop
443 diamond 904
@@:
601 Rus 905
	ret
2619 mario79 906
;	jmp	still
907
;------------------------------------------------------------------------------
2532 mario79 908
align 4
2619 mario79 909
conversion_HEX_to_ASCII:
910
	ror	eax,12
911
	mov	ecx,4
2532 mario79 912
;--------------------------------------
913
align 4
443 diamond 914
.loop:
2619 mario79 915
	mov	bl,al
916
	rol	eax,4
917
	and	bl,0xf
918
	cmp	bl,0xA	; check for ABCDEF
919
	jae	@f
31 halyavin 920
 
2619 mario79 921
	add	bl,0x30	; 0-9
922
	jmp	.store
2532 mario79 923
;--------------------------------------
924
align 4
443 diamond 925
@@:
2619 mario79 926
	add	bl,0x57 ; A-F
2532 mario79 927
;--------------------------------------
928
align 4
2619 mario79 929
.store:
930
;	dps	"param_store: "
931
	mov	[edi],bl
601 Rus 932
	inc	edi
2619 mario79 933
	dec	ecx
934
	jnz	.loop
601 Rus 935
	ret
2619 mario79 936
;------------------------------------------------------------------------------
2532 mario79 937
align 4
2619 mario79 938
menu_handler:
939
	mov	edi,bootparam
940
 
941
	mov	eax,[menu_button_x.start]
942
	call	conversion_HEX_to_ASCII
31 halyavin 943
 
2619 mario79 944
	mov	eax,[menu_button_x.size]
945
	call	conversion_HEX_to_ASCII
946
 
947
	mov	eax,[menu_button_y.start]
948
	call	conversion_HEX_to_ASCII
949
 
950
	mov	eax,[menu_button_y.size]
951
	call	conversion_HEX_to_ASCII
952
 
953
	mov	eax,[height]
954
	call	conversion_HEX_to_ASCII
955
 
956
	mov	eax,[place_attachment]
957
	call	conversion_HEX_to_ASCII
958
 
959
	xor	eax,eax	; terminator for boot parameters string
960
	stosd
961
 
601 Rus 962
	mov	ebx, exec_fileinfo
2532 mario79 963
	mov	[ebx+21],dword menu_name
2619 mario79 964
	mov	[ebx+8],dword bootparam
2532 mario79 965
	mcall	70
2619 mario79 966
	mov	[ebx+8],dword 0
601 Rus 967
	ret
2619 mario79 968
;------------------------------------------------------------------------------
2532 mario79 969
align 4
31 halyavin 970
draw_small_right:
2532 mario79 971
	pusha
972
	mcall	12,1
31 halyavin 973
 
2532 mario79 974
	xor	eax,eax
975
	mov	edx,[wcolor]
976
	mov	esi,edx
977
	mov	edi,edx
978
	or	edx, 0x01000000
979
	mcall
31 halyavin 980
 
2532 mario79 981
	xor	ecx,ecx
2619 mario79 982
	mov	cx,[height]
2532 mario79 983
	mcall	8,<0,9>,,1,[wcolor]
31 halyavin 984
 
2619 mario79 985
	mov	ebx,2*65536	;+6
986
	mov	bx,[height]
987
	shr	bx,1
988
	sub	bx,3
2532 mario79 989
	mov	ecx,[wcolor]
990
	add	ecx,0x303030
991
	mcall	4,,,hidetext,1
31 halyavin 992
 
2532 mario79 993
	mcall	12,2
994
	popa
995
	ret
2619 mario79 996
;------------------------------------------------------------------------------
2532 mario79 997
align 4
31 halyavin 998
draw_small_left:
2532 mario79 999
	pusha
1000
	mcall	12,1
31 halyavin 1001
 
2532 mario79 1002
	xor	eax,eax
1003
	mov	edx,[wcolor]
1004
	mov	esi,edx
1005
	mov	edi,edx
1006
	or	edx, 0x01000000
1007
	mcall
31 halyavin 1008
 
2532 mario79 1009
	xor	ecx,ecx
2619 mario79 1010
	mov	cx,[height]
2532 mario79 1011
	mcall	8,<0,9>,,1,[wcolor]
31 halyavin 1012
 
2619 mario79 1013
	mov	ebx,3*65536	;+6
1014
	mov	bx,[height]
1015
	shr	bx,1
1016
	sub	bx,3
2532 mario79 1017
	mov	ecx,[wcolor]
1018
	add	ecx,0x303030
1019
	mcall	4,,,hidetext+1,1
31 halyavin 1020
 
2532 mario79 1021
	mcall	12,2
1022
	popa
1023
	ret
2619 mario79 1024
;------------------------------------------------------------------------------
2532 mario79 1025
align 4
31 halyavin 1026
right_button:
2532 mario79 1027
	mov	[small_draw],dword draw_small_right
31 halyavin 1028
 
2532 mario79 1029
	mcall	14
31 halyavin 1030
 
2532 mario79 1031
	shr	eax, 16
1032
	mov	ebx, eax
1033
	mov	ecx, -1
1034
	mov	edx, 9
1035
	sub	ebx, edx
1036
	mov	esi, -1
1037
	mcall	67
31 halyavin 1038
 
2532 mario79 1039
	call	draw_small_right
1040
	jmp	small_wait
2619 mario79 1041
;------------------------------------------------------------------------------
2532 mario79 1042
align 4
31 halyavin 1043
left_button:
2532 mario79 1044
	mov	[small_draw],dword draw_small_left
31 halyavin 1045
 
2532 mario79 1046
	xor	ebx,ebx
1047
	mcall	67,,-1,9,-1
31 halyavin 1048
 
2532 mario79 1049
	call	draw_small_left
1050
;--------------------------------------
1051
align 4
1052
small_wait:
1053
	mcall	10
1054
	cmp	eax,1
1055
	jne	no_win
31 halyavin 1056
 
2532 mario79 1057
	call	[small_draw]
1058
	jmp	small_wait
1059
;--------------------------------------
1060
align 4
1061
no_win:
1062
	cmp	eax,2
1063
	jne	no_key
31 halyavin 1064
 
2532 mario79 1065
	call	handle_key
1066
	jmp	small_wait
1067
;--------------------------------------
1068
align 4
93 diamond 1069
no_key:
2532 mario79 1070
	mcall	17
1071
	cmp	ah,1
1072
	jne	no_full
31 halyavin 1073
 
2532 mario79 1074
	mcall	14	; get screen max x & max y
31 halyavin 1075
 
2532 mario79 1076
	mov	edx, eax
1077
	shr	edx, 16
1078
	xor	ebx, ebx
1079
	mcall	67,,-1,,-1 ; x0 y0 xs ys
31 halyavin 1080
 
2532 mario79 1081
	jmp	still
1082
;--------------------------------------
1083
align 4
1084
no_full:
1085
	call	menu_handler
1086
	jmp	small_wait
2619 mario79 1087
;------------------------------------------------------------------------------
2532 mario79 1088
;align 4
2619 mario79 1089
;set_variables:
2532 mario79 1090
;	pusha
2619 mario79 1091
;	mov	[button_frames],0x0
1092
;	cmp	[buttons],0
1093
;	jne	no_frames
31 halyavin 1094
 
2619 mario79 1095
;	mov	[button_frames],0x40000000
2532 mario79 1096
;--------------------------------------
1097
;align 4
2619 mario79 1098
;no_frames:
1099
;	mcall	48,1,1	; 3d button look
2532 mario79 1100
;	popa
1101
;	ret
2619 mario79 1102
;------------------------------------------------------------------------------
1103
include 'libini.inc'
1104
;------------------------------------------------------------------------------
1105
include 'dll.inc'
1106
;------------------------------------------------------------------------------
1107
include 'drawappl.inc'
1108
;------------------------------------------------------------------------------
1109
include 'drawbutt.inc'
1110
;------------------------------------------------------------------------------
1111
include 'drawwind.inc'
1112
;------------------------------------------------------------------------------
1113
include 'drawtray.inc'
1114
;------------------------------------------------------------------------------
601 Rus 1115
include 'ctx_menu.asm'
2619 mario79 1116
;------------------------------------------------------------------------------
1117
include 'i_data.inc'
1118
;------------------------------------------------------------------------------
2532 mario79 1119
IM_END:
1120
;------------------------------------------------------------------------------
2619 mario79 1121
include 'u_data.inc'
1122
;------------------------------------------------------------------------------
1123
I_END:
1124
;------------------------------------------------------------------------------