;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                                   ;
;    MENUBAR for KolibriOS  - Compile with fasm     ;
;                                                   ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;------------------------------------------------------------------------------	
; last update:  31/03/2012
; changed by:   Marat Zakiyanov aka Mario79, aka Mario
; changes:      The program uses only 20 Kb memory is now.
;               Code optimizing and refactoring.
;------------------------------------------------------------------------------
	use32
	org 0x0
	db 'MENUET01'	; 8 byte id
	dd 0x01		; header version
	dd START	; program start
	dd IM_END	;I_END	    ; program image size
	dd I_END	;0xA000	    ; reguired amount of memory - 10 Kb
	dd stack_top	;0xA000	    ; esp
	dd 0x0		; boot parameters
	dd 0x0		; path
;------------------------------------------------------------------------------	
include 'lang.inc'
include '..\..\..\macros.inc'
include 'MOI.INC'	;�᪫���� ����������

caps_lock_check fix 0

time_bgr_color = 0x66cc

width		dd  305
buttons 	dd    1  ;  0 no frames  ; 1 frames
soften_up	dd    1  ;  0 no         ; 1 yes
soften_down	dd    0  ;  0 no         ; 1 yes
minimize_left	dd    1
minimize_right	dd    1
icons_position	dd    95
menu_enable	dd    1
setup_enable	dd    0
graph_text	dd    1
soften_middle	dd    1  ;  0 no         ; 1 yes
icons		dd    1  ;  0 defaults   ; 1 activate

PANEL_HEIGHT = 18
;------------------------------------------------------------------------------	
align 4
handle_key:
	mcall	18, 7
	mov	[active_process],eax

	mcall	2
	cmp	al, 2
	jnz	begin_1.ret

	mov	ebx, exec_fileinfo
	shr	eax, 8
	cmp	al, 0
	je	prod

	mov	[key_r],al
	sub	[key_r],2
	cmp	al, 2
	jz	alter

	cmp	al, 3
	jz	alter

	cmp	al, 4
	jz	alter

	cmp	al, 5
	jz	alter

	cmp	al, 6
	jz	alter

	cmp	al, 7
	jz	alter

	cmp	al, 8
	jz	alter
;--------------------------------------
align 4
prod:
if caps_lock_check
	cmp	al,58
	jne	@f

	pusha
	mcall	26,2,9
	mov	ebx,eax
	mov	eax,2
	call	draw_window ;;;???
	popa
	ret
@@:
end if
	cmp	al, 15
	jz	alt_tab_pressed

	cmp	al, 88
	jz	start_end_application

	cmp	al, 91
	jz	start_menu_application

	cmp	al, 92
	jz	start_menu_application

	cmp	al, 62
	jz	kill_active_application

;	cmp	al, 71
;	jz	page_list_next

;	cmp	al, 72
;	jz	page_list_prev

	cmp	al, 69
	jz	start_mousemul_application

	cmp	[current_alt_tab_app], -1
	jz	@f

	test	ah, 0x30
	jz	alt_tab_released
;--------------------------------------
align 4
@@:
; this is hotkey Ctrl+Shift ;or LShift+RShift
	jmp	karu
;	mov	ebx, setup_exec
;	test	ah, 001100b
;	jz	change_sys_lang
;------------------------------------------------------------------------------	
align 4
change_key_lang:
	mov	dword [ebx+8], chlang
	mcall	70
;--------------------------------------
align 4
begin_1:
	mov	ecx,[active_process]
	mcall	18, 3
	mcall	5, 25
;--------------------------------------
align 4
.ret:
	ret
;------------------------------------------------------------------------------	
;align 4
;change_sys_lang:
;    	mov	   dword [ebx+8], syslang
;        mcall   70
;        jmp     begin_1
;------------------------------------------------------------------------------	
align 4
start_end_application:
	mov	dword [ebx+21],end_name
	mcall	70
	ret
;------------------------------------------------------------------------------	
align 4
start_mousemul_application:
	mov	dword [ebx+21],mousemul_name
	mcall	70
	ret
;------------------------------------------------------------------------------	
align 4
kill_active_application:
	mcall	72,1,3,1
	jmp	begin_1.ret
;------------------------------------------------------------------------------	
align 4
start_menu_application:
	mov	[draw_window_1], 1
	mov	dword [ebx+21], menu_name
	mcall	70
	jmp	begin_1.ret
;------------------------------------------------------------------------------	
;align 4
;page_list_next:
;	cmp	[page_list],15
;	je	@f
;
;	inc	[page_list]
;	mov	[draw_window_1],1
;@@:
;	jmp  begin_1.ret
;------------------------------------------------------------------------------	
;align 4
;page_list_prev:
;	cmp	[page_list],0
;	je	@f
;
;	dec	[page_list]
;	mov	[draw_window_1],1
;@@:
;	jmp  begin_1.ret
;------------------------------------------------------------------------------	
align 4
alt_tab_pressed:
; handle Alt+Tab and Alt+Shift+Tab
	mov	ebp, eax
	cmp	[current_alt_tab_app], -1
	jnz	has_alt_tab_app
; ������塞 ⠡���� �ਫ������, ��������� ��४��祭��
	xor	edx, edx
	mov	ebx, procinfo_window_tabs	;0x8000 ; WTF???!!!
	mov	ecx, 1
.fill:
	inc	ecx
	mcall	9
	call	need_window_tab
	jz	@f

	cmp	edx, 256
	jz	@f

	mov	[alt_tab_list+edx*8], ecx
	movzx	esi, word [ebx+4]
	mov	[alt_tab_list+edx*8+4], esi
	inc	edx
;--------------------------------------
align 4
@@:
	cmp	ecx,eax
	jb	.fill

	mov	[alt_tab_list_size], edx
	test	edx, edx
	jz	begin_1.ret

	mcall	66,4,0,0	; ����� ������ ���᪠��� ��� �ࠢ����� ������
	test	eax, eax
	jnz	begin_1.ret

	xor	edx, edx
	mov	eax, [alt_tab_list+4]
	xor	ecx, ecx
	inc	ecx
;--------------------------------------
align 4
.findmax:
	cmp	[alt_tab_list+ecx*8+4], eax
	jb	@f

	mov	edx, ecx
	mov	eax, [alt_tab_list+ecx*8+4]
;--------------------------------------
align 4
@@:
	inc	ecx
	cmp	ecx, [alt_tab_list_size]
	jb	.findmax

	mov	[current_alt_tab_app], edx
;--------------------------------------
align 4
has_alt_tab_app:
	mov	eax, [current_alt_tab_app]
	mov	edx, [alt_tab_list+eax*8+4]	; slot
	xor	ecx, ecx
	or	eax, -1
	test	ebp, 300h
	jz	.notshift

	or	esi, -1
;--------------------------------------
align 4
.loop1:
	cmp	[alt_tab_list+ecx*8+4], edx
	jbe	@f

	cmp	[alt_tab_list+ecx*8+4], esi
	jae	@f

	mov	eax, ecx
	mov	esi, [alt_tab_list+ecx*8+4]
;--------------------------------------
align 4
@@:
	inc	ecx
	cmp	ecx, [alt_tab_list_size]
	jb	.loop1

	cmp	eax, -1
	jnz	.found

	xor	edx, edx
	xor	ecx, ecx
	jmp	.loop1
;--------------------------------------
align 4
.notshift:
	xor	esi, esi
;--------------------------------------
align 4
.loop2:
	cmp	[alt_tab_list+ecx*8+4], edx
	jae	@f

	cmp	[alt_tab_list+ecx*8+4], esi
	jbe	@f

	mov	eax, ecx
	mov	esi, [alt_tab_list+ecx*8+4]
;--------------------------------------
align 4
@@:
	inc	ecx
	cmp	ecx, [alt_tab_list_size]
	jb	.loop2

	cmp	eax, -1
	jnz	.found

	or	edx, -1
	xor	ecx, ecx
	jmp	.loop2
;--------------------------------------
align 4
.found:
	mov	[current_alt_tab_app], eax
	push	eax
	xor	edx, edx
	div	[max_applications]
	mov	[page_list], eax
	mov	[draw_window_1], 1
	mov	edi, app_list
	push	edi
	mov	ecx, 20
	or	eax, -1
	rep	stosd
	pop	edi
	pop	ecx
	sub	ecx, edx
;--------------------------------------
align 4
@@:
	cmp	ecx, [alt_tab_list_size]
	jae	redraw_window_tabs

	mov	eax, [alt_tab_list+ecx*8]
	stosd
	inc	ecx
	jmp	@b
;--------------------------------------
align 4
alt_tab_released:
	mcall	66,5,0,0	; 㦥 �������, 墠�� :)
	or	eax, -1
	xchg	eax, [current_alt_tab_app]
	mov	ecx, [alt_tab_list+eax*8]
	mcall	18,3
	jmp	redraw_window_tabs
;------------------------------------------------------------------------------	
align 4
active_process	dd 0

;  .exit: mcall -1


START:
	mcall	66,4,0,2	; LShift+RShift
	mcall	66,,,11h	; Ctrl+Shift
	mcall	66,,88,110h	; Alt+Ctrl+F12
	mcall	66,,91,0h 	; LWin
	mcall	66,,92 		; RWin
;	mcall	66,,91,100h	; Alt+LWin
;	mcall	66,,92		; Alt+RWin
	mcall	66,,62,100h	; Alt+F4
;	mcall	66,,71		; Alt+Home
;	mcall	66,,72		; Alt+Up
	mcall	66,,15		; Alt+Tab
	mcall	66,,2		; Alt+1
	mcall	66,,3		; Alt+2
	mcall	66,,4		; Alt+3
	mcall	66,,5		; Alt+4
	mcall	66,,6		; Alt+5
	mcall	66,,7		; Alt+6
	mcall	66,,8		; Alt+7
	mcall	66,,,101h 	; Alt+Shift+Tab
	mcall	66,,69		; Alt+Shift+NumLock

if caps_lock_check
	xor	edx,edx
	mcall	66,4,58
end if
	mcall	18,8,1
	test	eax,eax
	jne	@f
	mcall	18,8,2
;--------------------------------------
align 4
@@:
	mcall	70,dat_fileinfo

	mov	edi,width
	mov	esi,I_END
	xor	eax,eax
;--------------------------------------
align 4
new_number:
	cmp	[esi],byte ';'
	je	number_ready

	imul	eax,10
	movzx	ebx,byte [esi]
	sub	ebx,'0'
	add	eax,ebx
	inc	esi
	jmp	new_number
;--------------------------------------
align 4
number_ready:
	stosd
	xor	eax,eax
	inc	esi
	cmp	[esi],byte 'x'
	jne	new_number

	mcall	14
	mov	[screen_size],eax

	mov	ecx,eax
;eax = [xsize]*65536 + [ysize], ���
	shr	ecx,16
	and	eax,0xFFFF
	lea	edx,[eax-PANEL_HEIGHT-1]

	mcall	48,6

	mcall	9,process_info_buffer,-1
	mov	ecx,[process_info_buffer+30]
	mcall	18,21
	mov	[this_slot],eax
	mov	[max_slot],255

	call	set_variables
;--------------------------------------
align 4
start_after_minimize:
	call	draw_window
	call	draw_info
	call	draw_running_applications

	mcall	23,30
	call	load_ini
	call	fir_lng
;------------------------------------------------------------------------------
align 4
still:
	call	draw_info
	call	draw_running_applications

	mcall	18,7	; check if active window changed
	cmp	eax, [last_active_window]
	jz	@f
; need_window_tab:
; in: ebx->process info
; out: ZF set <=> do not draw
	mov	ebx,[last_active_window]
	mov	[prev_active_window], ebx
	mov	[last_active_window], eax

	mov	ecx, eax
	mcall	9,process_info_buffer

	call	need_window_tab
	jnz	.need_repaint

	mcall	9,process_info_buffer,[prev_active_window]
	call	need_window_tab
	jz	@f
;--------------------------------------
align 4
.need_repaint:
	mov	dword [active_window_changed], 1
;--------------------------------------
align 4
@@:
	mcall	23,20
	cmp	eax,1		; redraw ?
	jz	red

	cmp	eax,3		; button ?
	jz	button

	call	handle_key
	cmp	dword [active_window_changed], 0
	jnz	red_active

	jmp	still
;------------------------------------------------------------------------------	
align 4
red_active:
red:
	mov	dword [active_window_changed], 0

	mcall	14
	movzx	ecx,ax
	mov	edx,eax
	shr	edx,16
	cmp	[screen_size.height],ax
	jne	@f

	rol	eax,16
	cmp	[screen_size.width],ax
	je	.lp1
	rol	eax,16
@@:
	mov	[screen_size],eax
	sub	ecx,PANEL_HEIGHT
	mcall	67,0,,,PANEL_HEIGHT
;--------------------------------------
align 4
.lp1:
	call	draw_window
	call	draw_info
	jmp	still
;------------------------------------------------------------------------------	
align 4
button:
	mcall	17
	test	eax,0xfffffe00	; is it close button? (signal from @panel)
	jz	still		; if so - wait for another event, because @panel shouldn't be closed

	cmp	al, 0
	jnz	right_mouse

	cmp	ah,50
	jb	no_activate
	cmp	ah,70
	jg	no_activate

	movzx	ecx,byte ah
	sub	ecx,52
	shl	ecx,2

	mov	ecx,[app_list+ecx]
	mcall	18,3,

;	mcall	55,eax,,,activatemusic
	jmp	still
;------------------------------------------------------------------------------	
align 4
right_mouse:
	cmp	ah,50
	jb	still

	cmp	ah,70
	jg	still

	movzx	ecx,byte ah
	sub	ecx,52

	cmp	ecx, [app_tab_count]
	jge	still

	shl	ecx,2
	mcall	37,0
	mov	ebx, eax
	shr	eax, 16
	mov	[x_coord], ax
	and	ebx, 0xFFFF
	mov	[y_coord], bx

	mov	ecx,[app_list+ecx]	; ecx->selected app.slot
	mov	[n_slot], ecx
	mcall	9,procinfo_for_detect

	mcall	51,1,context_menu_start,ctx_menu_stack

	mov	[ctx_menu_PID], eax
	jmp	still
;------------------------------------------------------------------------------	
align 4
no_activate:
	cmp	ah,101 	  ; minimize to left
	je	left_button

	cmp	ah,102 	  ; minimize to right
	je	right_button

	cmp	ah, 103
	je	clean_desktop		    ; minimize all windows

	cmp	ah, 104
	je	restore_desktop	    ; restore minimized windows

	cmp	ah, 105
	je	swap_minimized_desktop     ; minimize normal windows, and restore minimized windows

	cmp	ah,byte 1	  ; start/terminate menu
	jnz	noselect

	call	menu_handler

	jmp	still
;--------------------------------------
align 4	
noselect:
	mov	ebx, exec_fileinfo
	cmp	ah,byte 2	       ; start calendar
	jnz	noid15  ;noclock

	mov	dword [ebx+21], calendar_name
	mcall	70
	jmp	still
;--------------------------------------
align 4	
noid15:
	cmp	ah,16
	jne	noid16

	mov	ebx, setup_exec
	mov	dword [ebx+8], chlang
	mcall	70
	jmp	still
;--------------------------------------
align 4	
noid16:
;	cmp	ah,17
;	jne	noid17
;
;	mov	ebx, setup_exec
;	mov	dword [ebx+8], syslang
;	mcall	70
;	jmp	still
;--------------------------------------
;align 4	
;  noid17:
	cmp	ah,18
	jne	noid18

	mov	dword [ebx+21], sysmeter_name
	mcall	70
	jmp	still
;--------------------------------------
align 4	
noid18:
	cmp	ah,19
	jne	noid19

	mcall	18,8,2
	mcall	15,3
	jmp	red
;--------------------------------------
align 4	
noid19:
	cmp	ah,20		   ; start system setup
	jnz	noid20

	mov	ebx, setup_exec
	and	dword [ebx+8], 0
	mcall	70
	jmp	still
;--------------------------------------
align 4	
noid20:
	cmp	ah,21
	jnz	noid21

	cmp	[page_list], 99
	jnc	still
	inc	[page_list]
	jmp	red
;--------------------------------------
align 4	
noid21:
	cmp	ah,22
	jnz	still

	cmp	[page_list],0
	je	still

	dec	[page_list]
	jmp	red
;------------------------------------------------------------------------------	
align 4
restore_desktop:
	mcall	9,process_info_buffer,-1
	mov	[max_slot], eax
	mov	ecx, 2
	mov	edx, 2
;--------------------------------------
align 4	
@@:
	mcall	18, 22
	inc	edx
	cmp	edx, [max_slot]
	jbe	@b
	jmp	still
;------------------------------------------------------------------------------	
align 4
swap_minimized_desktop:
	xor	esi, esi
	inc	esi
	jmp	min_swap_desktop
;------------------------------------------------------------------------------	
align 4
clean_desktop:
	xor	esi,esi
;--------------------------------------
align 4	
min_swap_desktop:		   ; input esi 0 - min, <>0 swap
	mov	ecx, 2		   ; ��砫�� ����� ᫮� �����
	mov	ebx, process_info_buffer
;--------------------------------------
align 4
.loop1:
	cmp	ecx, [this_slot]
	je	.loop1xx

	mcall	9
	mov	[max_slot], eax
	mov	dx, word [process_info_buffer+50]
	cmp	dx, 9		    ; �஢�ઠ ᢮����� �� ����� ᫮�
	jz	.loop1xx

	mov	edx, dword [ebx+10]
	cmp	dl, '@'
	je	.loop1xx

	cmp	dword [ebx+10], 'ICON'
	jnz	@f

	cmp	[ebx+42], dword 51
	jnz	@f

	cmp	[ebx+46], dword 51
	jz	.loop1xx
;--------------------------------------
align 4
@@:
	cmp	[ebx+10], dword '    '
	jz	.loop1xx

	pushad
	mov	  edx, ecx
	xor	  ecx, ecx
	or     esi, esi
	jz     @f

	movzx  eax, byte [process_info_buffer+70]
	and	  eax, 2	      ; mask minimize
	jz     @f

	mov	  ecx, 2	      ; restore
;--------------------------------------
align 4
@@:
	mcall	18, 22
	popad
;--------------------------------------
align 4
.loop1xx:
	inc	ecx
	cmp	ecx, [max_slot]
	jbe	.loop1
	jmp	still
;------------------------------------------------------------------------------	
align 4
draw_running_applications:
	pusha

	cmp	[icons],1
	jne	dr_ret

	call	calculate_applications

	cmp	edi,[running_applications]
	jne	noret
	popa
	ret
;--------------------------------------
align 4
noret:
	call	draw_window
	mov	[running_applications],edi
	call	redraw_window_tabs
;--------------------------------------
align 4
dr_ret:
	popa
	ret
;------------------------------------------------------------------------------	
align 4
need_window_tab:
; in: ebx->process info
; out: ZF set <=> do not draw
	cmp	byte [ebx+10], '@'
	jz	.nodraw
; do not draw undefined (zero-sized) windows
	cmp	dword [ebx+42], 0
	jnz	@f
	cmp	dword [ebx+46], 0
	jz	.nodraw
;--------------------------------------
align 4
@@:
; do not draw OpenDialog windows
	push	edi
	mov	edi, dword [ebx+10]
	or	edi, 0x20202020
	cmp	edi, 'open'
	jne	@f

	mov	edi, dword [ebx+14]
	or	edi, 0x20202020
	cmp	dword [ebx+14], 'dial'
	jne	@f

	pop	edi
	jmp	.nodraw
;--------------------------------------
align 4
@@:
	pop	edi
	cmp	dword [ebx+10], 'ICON'
	jnz	@f

	cmp	[ebx+42], dword 51
	jnz	@f

	cmp	[ebx+46], dword 51
	jz	.nodraw
;--------------------------------------
align 4
@@:
	cmp	[ebx+10], dword '    '
;--------------------------------------
align 4
.nodraw:
	ret
;------------------------------------------------------------------------------	
align 4
redraw_window_tabs:
	xor	edi, edi
	mov	[contrast], 0

	push	ebp
	mcall	18,7
	mov	ebp,eax
;--------------------------------------
align 4
.loop:
	mov	ecx,[app_list+edi*4]
	cmp	ecx,-1
	jz	.done

	push	ecx
	mcall	9,procinfo_window_tabs	;0x8000	; WTF???!!!

	imul	ebx, edi, 6*10*10000h
	add	ebx, 12*10*10000h + 7*10000h + 54

	mcall	13,,<3,14>,0x383838

	sub	ebx, 10000h + 53
	mcall	,,<4,12>

	sub	ebx, 10000h
	mcall	,,<5,10>

	add	ebx, 56*10000h
	mcall	,,<4,12>

	add	ebx, 10000h
	mcall	,,<5,10>

	mov	edx, [wcolor]	; barsuk
	pop	ecx
	cmp	ebp, ecx	; ecx=active slot number
	jnz	@f

	mov	edx, [system_colours.work_button]
;--------------------------------------
align 4
@@:
	mov	esi, [current_alt_tab_app]
	cmp	esi, -1
	jz	@f

	cmp	ecx, [alt_tab_list+esi*8]
	jnz	@f

	mov	edx, 0xFF8000
;--------------------------------------
align 4
@@:
	sub	ebx, 55*10000h - 53
	mcall	,,<4,12>
	
	sub	ebx, 10000h + 53
	mcall	,,<5,10>

	add	ebx, 55*10000h
	mcall

	sub	ebx, 51*10000h - 6
	mov	edx, procinfo_window_tabs+10	;0x8000+10		; WTF???!!!
	mcall	4,,[system_colours.work_button_text],,11
;--------------------------------------
align 4
.nodraw:
	inc	edi
	cmp	edi, [max_applications]
	jb	.loop
;--------------------------------------
align 4
.done:
	pop	ebp
	ret
;------------------------------------------------------------------------------	
align 4
calculate_applications:
	mov	eax,[max_applications]
	mul	[page_list]
	test	eax,eax
	je	@f

	inc	eax
;--------------------------------------
align 4
@@:
	mov	[draw_start_position],eax

	mov	edi,app_list
	mov	ecx,20
	mov	eax,-1
	cld
	rep	stosd

	mov	edi,0
	mov	ecx,2
;--------------------------------------
align 4
cnewpr:
	mcall	9,procinfo_window_tabs	;0x8000	; WTF???!!!

	call	need_window_tab
	jz	cnorpl

	sub	[draw_start_position], 1
	jg	cnorpl

	mov	[app_list+edi*4],ecx
	inc	edi
;--------------------------------------
align 4
cnorpl:
	inc	ecx
	cmp	eax,ecx
	jge	cnewpr

	mov	[app_tab_count], edi
	ret
;------------------------------------------------------------------------------	
align 4
draw_application_buttons:
	pusha

	cmp	[icons],1
	jne	da_ret

	mcall	14
	shr	eax,16

	sub	eax, 281
	jnc	._01
	xor	eax, eax
;--------------------------------------
align 4
._01:
	mov	bl, 60
	div	bl
	xor	ah, ah		       ; eax - ������⢮ 㬥������ ���⮢
	mov	[max_applications], eax
	mov	edi,1
;--------------------------------------
align 4
nb:
	mov	ebx,edi
	shl	ebx,16
	imul	ebx,6*10	     ;13
	add	ebx,75*65536+10*6-1 ; << Alver 25.08.2007 >> 15*65536+10*6-1  ;13
	mov	edx,edi
	add	edx,51
	cmp	[buttons],1
	je	bufr

	or	edx,0x60000000
;--------------------------------------
align 4
bufr:
	mov	esi,[wcolor]
	sub	ebx,11 shl 16
	mcall	8,,<1,17>

	inc	edi
	cmp	edi,[max_applications]
	jbe	nb
;--------------------------------------
align 4
da_ret:
	popa
	ret
;------------------------------------------------------------------------------	
align 4
menu_handler:
	mov	ebx, exec_fileinfo
	mov	[ebx+21],dword menu_name
	mcall	70
	ret
;------------------------------------------------------------------------------	
align 4
draw_small_right:
	pusha
	mcall	12,1

	xor	eax,eax
	mov	edx,[wcolor]
	mov	esi,edx
	mov	edi,edx
	or	edx, 0x01000000
	mcall

	xor	ecx,ecx
	mov	cx,[b_size_y]
	mcall	8,<0,9>,,1,[wcolor]

	mov	ebx,2*65536+16
	cmp	[graph_text],1
	jne	nos3

	mov	ebx,2*65536+7
;--------------------------------------
align 4
nos3:
	mov	ecx,[wcolor]
	add	ecx,0x303030
	mcall	4,,,hidetext,1

	mcall	12,2
	popa
	ret
;------------------------------------------------------------------------------	
align 4
draw_small_left:
	pusha
	mcall	12,1

	xor	eax,eax
	mov	edx,[wcolor]
	mov	esi,edx
	mov	edi,edx
	or	edx, 0x01000000
	mcall

	cmp	[graph_text],1
	je	nos4

	mcall	8,<0,9>,<0,12>,2,[wcolor]

	mov	ecx,[wcolor]
	add	ecx,0x303030
	mcall	4,<2,4>,,hidetext+2,1
;--------------------------------------
align 4
nos4:
	mov	ecx,13*65536+25
	cmp	[graph_text],1
	jne	nos6

	xor	ecx,ecx
	mov	cx,word [b_size_y]
;--------------------------------------
align 4
nos6:
	mcall	8,<0,9>,,1,[wcolor]

	mov	ebx,3*65536+22
	cmp	[graph_text],1
	jne	nos7

	mov	ebx,3*65536+7
;--------------------------------------
align 4
nos7:
	mov	ecx,[wcolor]
	add	ecx,0x303030
	mcall	4,,,hidetext+1,1

	mcall	12,2
	popa
	ret
;------------------------------------------------------------------------------	
align 4
right_button:
	mov	[small_draw],dword draw_small_right

	mcall	14

	shr	eax, 16
	mov	ebx, eax
	mov	ecx, -1
	mov	edx, 9
	sub	ebx, edx
	mov	esi, -1
	mcall	67

	call	draw_small_right
	jmp	small_wait
;------------------------------------------------------------------------------	
align 4
left_button:
	mov	[small_draw],dword draw_small_left

	xor	ebx,ebx
	mcall	67,,-1,9,-1

	call	draw_small_left
;--------------------------------------
align 4
small_wait:
	mcall	10
	cmp	eax,1
	jne	no_win

	call	[small_draw]
	jmp	small_wait
;--------------------------------------
align 4
no_win:
	cmp	eax,2
	jne	no_key

	call	handle_key
	jmp	small_wait
;--------------------------------------
align 4
no_key:
	mcall	17
	cmp	ah,1
	jne	no_full

	mcall	14	; get screen max x & max y

	mov	edx, eax
	shr	edx, 16
	xor	ebx, ebx
	mcall	67,,-1,,-1 ; x0 y0 xs ys

	jmp	still
;--------------------------------------
align 4
no_full:
	call	menu_handler
	jmp	small_wait
;------------------------------------------------------------------------------	
align 4
set_variables:
	pusha
	mov	[b_size_y],dword 38
	cmp	[graph_text],1
	jne	noy2

	mov	[b_size_y],dword 18
;--------------------------------------
align 4
noy2:
	mov	[button_frames],0x0
	cmp	[buttons],0
	jne	no_frames

	mov	[button_frames],0x40000000
;--------------------------------------
align 4
no_frames:
	mcall	48,1,1	; 3d button look

	mov	eax,0x40404040   ; dividers for processes
	mov	edi,pros
	mov	ecx,10
	cld
	rep	stosd

	popa
	ret
;------------------------------------------------------------------------------	
align 4
; eax = number (1 or 2)
; ebx = language id
draw_flag:
	pusha
; eax = 2 BIG
; eax = 1 small
	mov	edx,ebx

	mov	ebx,[maxx]
	and	eax,1
	imul	eax,17  ;17
	sub	ebx,eax
	sub	ebx,76 ;79 ;28

	pushad
;	dec	ebx
	sub	ebx,2
	shl	ebx, 16
	add	ebx, 15 ;25
	xor	edx,edx
	mcall	13,,<4,13>

	add	ebx,1 shl 16
	sub	ebx,2
	mov	ecx, 5 shl 16+11
	cmp	[type_lang],1
	je	label_1

	mov	edx,0xff ;[wcolor]
	jmp	label_2
;--------------------------------------
align 4
label_1:
	mov	edx,0x7700
;--------------------------------------
align 4
label_2:
	mcall
	popad

	shl	ebx,16
	add	ebx,7	;24

	mov	ecx,[bte] ; color

if caps_lock_check
; make flag_text 'enfigerufretua' or 'ENFIGERUFRETUA' depending on CapsLock state.
	call	flag_text_setup
end if
	dec	edx
	shl	edx,1
	add	edx,flag_text
	mcall	4,,,,2

	mov	ebx,[maxx]
	sub	ebx,48
	shl	ebx,16
	mov	bx,34
	xor	edx,edx
	mcall	13,,<3,14>

	add	ebx,1 shl 16
	sub	ebx,2
	mov	ecx,4 shl 16+12
	mov	edx,time_bgr_color
    mcall

    popa
    ret
;------------------------------------------------------------------------------	
align 4
if caps_lock_check
flag_text_setup:
	pusha
	mcall	66,3
	mov	edi, flag_text
	mov	esi, flag_text_caps_off
	test	eax, 0x40
	jz	@f
	
	add	esi, 14
;--------------------------------------
align 4
@@:
	mov	ecx, 14
	rep	movsb
	
	popa
	ret

flag_text_caps_off db 'enfigerufretua' 
db 'ENFIGERUFRETUA'
end if
;------------------------------------------------------------------------------	
; ***************************************************
; ********* WINDOW DEFINITIONS AND DRAW *************
; ***************************************************
align 4
draw_window:
	pusha
	mov	[running_applications],-1
	mov	[checks],-1
	mcall	12,1

	mcall	48,3,system_colours,10*4

	mov	eax, [system_colours+4*6]
	sub	eax, 0x101010
	mov	[wcolor], eax

	mcall	14	; get screen max x & max y

	cmp	[width],0
	je	no_def_width

	and	eax,0xffff
	mov	ebx,[width]
	shl	ebx,16
	add	eax,ebx
;--------------------------------------
align 4
no_def_width:
	mov	ebx,eax
	mov	[screenxy],ebx
	shr	ebx,16
	sub	ax,38
	shl	eax,16
	mov	ecx,eax
	add	ecx,0*65536+38
	cmp	[graph_text],1
	jne	no_text_1
	mov	cx,PANEL_HEIGHT
	add	ecx,20*65536
;--------------------------------------
align 4
no_text_1:
	xor	eax,eax 		    ; DEFINE AND DRAW WINDOW
	mov 	edx, [wcolor]
	or	edx, 0x01000000 ; do not draw the window
	mov	esi, [wcolor]
	or	esi, 0x01000000 ; unmovable window
	mov 	edi, [wcolor]
	mov	[panel_x_pos], ebx
	mov	[panel_y_pos], ecx	 ; ���� �� ⠪.
	mcall

	movzx	ebx,word [screenxy+2]
	mov	ecx,0*65536+0
	mov	edx,[wcolor]
	add	edx,0x161616
;--------------------------------------
align 4
newline_:			; debug.inc has macros with the same name
	sub	edx,0x040404
	mov	eax,38
	cmp	[soften_up],1
	jne	no_su

	and	edx,0x00FFFFFF
	mcall
;--------------------------------------
align 4
no_su:
	pusha
	cmp	[soften_down],1
	jne	no_sd

	sub	edx,0x141414
	mov	edi,[b_size_y]
	shl	edi,16
	add	edi,[b_size_y]
	add	ecx,edi
	sub	ecx,3*65536+3
	and	edx,0x00FFFFFF
	mcall
;--------------------------------------
align 4
no_sd:
	popa

	add	ecx,1*65536+1
	cmp	cx,5
	jb	newline_

	cmp	[soften_middle],1
	jne	no_sm

	movzx	ebx,word [screenxy+2]
	mov	ecx,5*65536+5
	mov	esi,stripe
	mov	edx,[wcolor]
;--------------------------------------
align 4
newline3:
	add	edx,[esi]
	add	esi,4

	and	edx,0x00FFFFFF
	mcall	38
	add	ecx,1*65536+1
	cmp	cx,15
	jb	newline3
;--------------------------------------
align 4
no_sm:
	cmp	[minimize_left],1
	jne	no_mleft

	mov	ecx,1 *65536
	add	ecx,[b_size_y]
	dec	ecx
	mov	edx,101
	add	edx,[button_frames]
	mcall	8,<0,9>,,,[wcolor]	; ABS LEFT

	mov	ebx,2*65536+17
	cmp	[graph_text],1
	jne	no_y1

	mov	bx,7
;--------------------------------------
align 4
no_y1:
	mov	ecx,[wcolor]
	add	ecx,0x303030
	mcall	4,,,hidetext,1	; HIDE TEXT
;--------------------------------------
align 4
no_mleft:
	movzx	eax,word [screenxy+2]
	mov	[maxx],eax
	cmp	[minimize_right],1
	jne	no_mright
	mov	eax,[maxx]
	sub	eax,77
	shl	eax,16
	mov	ebx,eax
	add	ebx,67

	mov	ecx,1 *65536
	add	ecx,[b_size_y]
	dec	ecx
	add	ebx,68*65536
	mov	bx,9
	mov	edx,102
	add	edx,[button_frames]
	mcall	8,,,,[wcolor]	; ABS RIGHT

	mov	edx,hidetext+1
	mov	eax,4
	mov	ebx,[maxx]
	sub	ebx,6
	shl	ebx,16
	mov	bx,17
	cmp	[graph_text],1
	jne	no_y2

	mov	bx,7
;--------------------------------------
align 4
no_y2:
	mov	ecx,[wcolor]
	add	ecx,0x303030
	mov	esi,1
	mcall
;--------------------------------------
align 4
no_mright:
	call	draw_menuet_icon
;	call	draw_program_icons
	mov	[ptime],0
	call	draw_info
	call	draw_application_buttons

	mcall	12,2
	popa
	ret
;------------------------------------------------------------------------------	
align 4
dr_button_clean:
	mcall	8,,<3,13>
	ret
;------------------------------------------------------------------------------	
align 4
draw_menuet_icon:
	pusha
; Inserted code for drawing buttons 103, 104, 105 (Clean, Restore, Exchange windows)
	mov	esi, dword [system_colours+24]    ; drawing buttons
	and	esi, 0x00ffffff
	mov	edx, 103
	mov	ebx, 67*65536+13
	call	dr_button_clean
	
	inc	edx
	mov	ebx, 86*65536+13
	call	dr_button_clean
	
	inc	edx
	mov	ebx, 105*65536+13
	call	dr_button_clean
	
	mov	ecx, dword [system_colours+28]
	and	ecx, 0x00ffffff
	mcall	4,<71,6>,,page_clean_but,1

	inc	edx
	mcall	,<90,6>

	inc	edx
	mcall	,<109,6>

	cmp	[menu_enable],1
	jne	no_menu

	mov	ebx, 10*65536 + 47
	cmp	[minimize_left], 0
	jne	@f

	sub	ebx, 10*65536
;--------------------------------------
align 4
@@:
	mov	ecx, 1*65536
	add	ecx, [b_size_y]
	dec	ecx
	mov	edx, 0x20d1ff01
	add	edx, [button_frames]
	mcall	8,,,,[wcolor]	; M BUTTON

;	cmp	[graph_text], 1
;	jne	no_mtext

	push	ebx
	mcall	13,<12,44>,<1,17>,0x383838

	mcall	,<56,1>,<2,15>

	mcall	,<57,1>,<4,11>

	mcall	,<58,1>,<6,7>

	mcall	,<13,43>,<2,15>,0x7700

	mcall	,<56,1>,<4,11>

	mcall	,<57,1>,<6,7>
	pop	ebx

	mov	bx,  7
	add	ebx, 8*65536

	mcall	4,,0x10ffffff,m_text,4

	popa
	ret
;--------------------------------------
;align 4
;no_mtext:
;	mov	eax,[wcolor]
;	mov	[m_icon+4],eax
;; load & display menuet.bmp
;	mcall	70,m_bmp_fileinfo

;	mov	eax,40
;	mov	ebx,0
;	mov	edi,image+53
;--------------------------------------
;align 4
;new_m_pix:
;	cmp	byte [edi], 10
;	jb	nopix

;	cmp	byte [edi+1], 10
;	jb	nopix

;	cmp	byte [edi+2], 10
;	jb	nopix

;	pusha
;	cmp	[minimize_left],0
;	jne	no_m_s2

;	sub	ebx,10
;--------------------------------------
;align 4
;no_m_s2:
;	mov	edx,[edi+1]
;	mov	ecx,eax
;	add	ebx,12
;	mcall	1	; point - WTF???!!!

;	popa
;--------------------------------------
;align 4
;nopix:
;	add	edi,3
;	add	ebx,1
;	cmp	ebx,40
;	jnz	new_m_pix

;	mov	ebx,0
;	dec	eax
;	jnz	new_m_pix
;--------------------------------------
align 4
no_menu:
	popa
	ret
;------------------------------------------------------------------------------	
;align 4
;draw_program_icons:
;	pusha

;	cmp	[icons],0
;	jne	dp_ret

;	mov	edi,1
;	push	edi
;--------------------------------------
;align 4
;new_icon_file:
;	pusha
;	mov	edx,[esp+32]
;	add	edx,10

;	push	edx
;	mov	ecx,1*65536
;	add	ecx,[b_size_y]
;	dec	ecx
;	mov	eax,edi
;	dec	eax
;	imul	eax,40
;	mov	ebx,eax
;	add	ebx,[icons_position]
;	shl	ebx,16
;	mov	bx,39
;	pop	edx

;	add	edx,[button_frames]
;	or	edx, 0x20000000
;	mcall	8,,,,[wcolor]
;	popa

;	mov	ecx,[esp]
;	add	ecx,48
;	mov	[iconf+6],cl

;	mcall	70,iconf_fileinfo

;	mov	eax,0
;	mov	ebx,32
;	mov	edi,image+51+32*33*3
;--------------------------------------
;align 4
;np2: 			    ; new pixel of file
;	mov	edx,[edi]
;	and	edx,0xffffff

;	cmp	eax,3		; Y draw limits
;	jb	nopix2

;	cmp	eax,36
;	jg	nopix2

;	cmp	ebx,38		; X draw limits
;	jg	nopix2

;	cmp	ebx,2
;	jb	nopix2

;	cmp	edx,0
;	jz	nopix2

;	cmp	[graph_text],1
;	jne	no_icon_text

;	pusha
;	mov	ebx,[esp+32]
;	dec	ebx
;	imul	ebx,40
;	add	ebx,8
;	add	ebx,[icons_position]
;	shl	ebx,16
;	mov	bx,7

;	mov	edx,[esp+32]
;	dec	edx
;	imul	edx,4
;	add	edx,mi_text
;	mcall	4,,0xffffff,,4
;	popa
;	jmp  nopix2
;--------------------------------------
;align 4
;no_icon_text:
;	mov	esi,[esp]
;	pusha
	
;	push	edx
;	mov	ecx,eax
;	add	ecx,2
;	mov	eax,esi
;	dec	eax
;	imul	eax,40
;	add	ebx,eax
;	add	ebx,3
;	add	ebx,[icons_position]
;	pop	edx

;	mcall	1	; WTF???!!!
;	popa
;--------------------------------------
;align 4
;nopix2:
;	sub	edi,3
;	dec	ebx
;	jnz	np2

;	mov	ebx,32
;	add	eax,1
;	cmp	eax,32
;	jnz	np2

;	add	dword [esp],1
;	mov	edi,[esp]
;	cmp	dword [esp],4
;	jbe	new_icon_file

;	add	esp,4

;	mov	ebx,40
;	imul	ebx,3
;	add	ebx,[icons_position]
;	add	ebx,10
;	shl	ebx,16
;	mov	bx,23
;	mcall	4,,[wcolor],gpl,3
;--------------------------------------
;align 4
;dp_ret:
;	popa
;	ret
;------------------------------------------------------------------------------	
align 4
draw_info:    ; draw cpu usage, time, date
    pusha
	cmp	[setup_enable],1
	jne	no_setup

	cmp	[minimize_right],0
	jne	no_m_r
	add	[maxx],10
;--------------------------------------
align 4
no_m_r:
	mov	eax,3
	mcall
	cmp	eax,[ptime]
	jz	_ret

	mov	[ptime],eax

   	call	draw_cpu_usage

	mov	eax,[maxx]   ; blink sec
	sub	eax,33
	shl	eax,16
	mov	ebx,eax
	add	ebx,9
	mcall	3

	cmp	[graph_text],1
	jne	no_y4

	sub	bx,2
;--------------------------------------
align 4
no_y4:
	mov	ecx,eax
	shr	ecx,16
	and	ecx,1
	mov	edx,[bte]
	sub	edx,time_bgr_color;[wcolor]
	imul	ecx,edx
	add	ecx,time_bgr_color;[wcolor]

	mcall	4,,,sec,1

	mcall	26,2,9

	mov	edx,eax
	mcall	3

	and	eax,0xffff
	add	edx,eax
	cmp	edx,[checks]
	je	_ret

	mov	[checks],edx

	mov	ebx,[maxx]
	sub	ebx,48 ;;94 ;;74
	shl	ebx,16
	add	ebx,33 ;;84 ;;64

	mov	ecx,3 *65536
	add	ecx,[b_size_y]
	sub	cx,5
	mcall	8,,,0x40000002,[wcolor]	; time/date button

	and	edx,0xffff
	add	edx,[button_frames]
	mcall

	mov	ebx,[maxx]
	sub	ebx,77 ;80
	shl	ebx,16
	add	ebx,14

	mcall	,,<4,12>,0x60000010,[wcolor]	;button 16

	sub	ebx,17 shl 16
	inc	edx		    ;button 17

	add	ebx,33 shl 16
	mov	bx,8
	inc	edx		    ;button 18
	mcall

	sub	ebx,30 shl 16
	mov	bx,10
	inc	edx		    ;button 19
	mcall

	sub	ebx,14 shl 16
	inc	edx		    ;button 20
	mcall

	sub	ebx,12 shl 16
	mov	bx,8
	mov	ecx,6 shl 16+10
	inc	edx	    ;button 21
	mcall

	sub	ebx,24 shl 16
	inc	edx	    ;button 22
	mcall

	mcall	26,2,9

	mov	ebx,eax

	mov	eax,2
	mov	[type_lang],al
   	call	draw_flag

	mcall	18,8,1

	mov	[sound_flag],al

	mov	ebx,[maxx]
	sub	ebx,92 ;109 ;112 ;28
	shl	ebx,16
	mov	bx,12
	xor	edx,edx
	mcall	13,,<4,13>

	add	ebx,1 shl 16
	sub	bx,2
	mcall	,,<5,11>,0xcc

	add	ebx,1 shl 16
	mov	bx,5
	mcall	,,<8,5>,0xdddd00

	add	ebx,5 shl 16
	mov	bx,1
	mcall	,,<7,7>

	add	ebx,1 shl 16
	mcall	,,<6,9>

	add	ebx,1 shl 16
	mcall	,,<5,11>

	cmp	[sound_flag],0
	je	dalshe

	sub	ebx,8 shl 16
	ror	ebx,16
	mov	cx,bx
	rol	ebx,16
	mov	bx,cx
	add	bx,8
	mcall	38,,<5,15>,0xff0000

	add	ebx,1 shl 16
	inc	bx
	mcall

	rol	ecx,16
	mcall

	sub	ebx,1 shl 16
	dec	bx
	mcall
;--------------------------------------
align 4
dalshe:
	mov	ebx,[maxx]
	sub	ebx,106;123
	shl	ebx,16
	mov	bx,12
	xor	edx,edx
	mcall	13,,<4,13>

	add	ebx,1 shl 16
	sub	bx,2
	mcall	,,<5,11>,0xffcc00

	mov	ebx,[maxx]
	sub	ebx,104;121
	shl	ebx,16
	mov	bx,7

	mcall	4,,0x10000000,file_sys,1

	add	ebx,1 shl 16
	mcall

	mov	ebx,[maxx]
	sub	ebx,117;134
	shl	ebx,16
	mov	bx,9
	xor	edx,edx
	mcall	13,,<6,11>

	sub	ebx,24 shl 16 ; 18 shl 16
	mcall

	add	ebx,25 shl 16 ; 19 shl 16
	sub	bx,2
	mcall	,,<7,9>,0xffffff

	sub	ebx,24 shl 16
	mcall

	mov	ebx,[maxx]
	sub	ebx, 139
	shl	ebx,16
	mov	bx,8
	mcall	4,,,page_a1,5

	add	ebx,1 shl 16
	mcall

	mov	edx,[maxx]
	sub	edx,130
	shl	edx,16
	mov	dx,7
	mcall	47,0x20000,[page_list],,0xffffff

	mcall	3	; get time

	movzx	ebx,al
	shr	eax,8
	movzx	ecx,al
	shr	eax,8
	movzx	edx,al
; ebx ecx edx h m s
	push	ebx
	push	ecx

	mov	eax,[maxx]
	sub	eax,32
	shl	eax,16
	mov	ebx,eax
	add	ebx,9

	mov	ecx,[bte]

	cmp	[graph_text],1
	jne	no_y3

	sub	bx,2
;--------------------------------------
align 4
no_y3:
	mov	edx,[esp]	       ; __:_X
	and	edx,15
	add	ebx,10*65536
	add	edx,text
	mcall	4,,0xffffff,,1

	pop	edx			; __:X_
	shr	edx,4
	and	edx,15
	sub	ebx,6*65536
	add	edx,text
	mcall	

	mov	edx,[esp]	       ; _X:__
	and	edx,15
	sub	ebx,11*65536
	add	edx,text
	mcall

	pop	edx			; X_:__
	shr	edx,4
	and	edx,15
	sub	ebx,6*65536
	add	edx,text
	mcall

   	call	draw_cpu_usage
;--------------------------------------
align 4
_ret:
	cmp	[minimize_right],0
	jne	no_m_r2

	sub	[maxx],10
;--------------------------------------
align 4
no_m_r2:
no_setup:
	popa
	ret
;------------------------------------------------------------------------------	
align 4
draw_cpu_usage:
	pushad
	mov	[ysi],30
	cmp	[graph_text],1
	jne	@f

	mov	[ysi],12
;--------------------------------------
align 4
@@:
	mcall	18,5	; TSC / SEC

	shr	eax,20
	push	eax
	mcall	18,4	; IDLE / SEC

	shr	eax,20
	xor	edx,edx
	imul	eax,[ysi]
	cdq
	pop	ebx
	inc	ebx
	div	ebx
	cmp	eax,[ysi]
	jng	no_bug

	mov	eax,[ysi]
;--------------------------------------
align 4
no_bug:
	push	eax

	mov	ebx,[maxx]
	sub	ebx,60
	shl	ebx,16
	add	ebx,8
	mov	ecx,5 shl 16
	add	ecx,[ysi]
	mcall	13,,,0xdd2222

	pop	eax
	mov	ecx,5 shl 16
	add	ecx,eax
	mov	eax,13
	mcall	13,,,0x44aa44

	popad
	ret
;------------------------------------------------------------------------------	
align 4
include 'ctx_menu.asm'
;------------------------------------------------------------------------------	
align 4
; DATA
stripe:
	dd -0x010101
	dd -0x010101
	dd -0x020202
	dd -0x010101
	dd -0x000000

	dd 0x000000
	dd 0x010101
	dd 0x020202
	dd 0x010101
	dd 0x010101

m_icon:
	dd 0x0
	dd 0x808080
	dd 0x000000
	dd 0x000000
	dd 0xffffff


lsz m_text,\
  ru, "����",\
  en, "MENU",\
  et, "MEN--"

mi_text		db 'WAVETETRBGRDGPL '

flag_text	db 'EnFiGeRuFrEtUa'

type_lang	db 0

sound_flag	db 0
button_frames	dd 0x0

checks		dd -1
hidetext	db 0x11,0x10,0x1e

turn_text	db  '><'
gpl		db  'GPL'

chlang	db 'LANG',0
;syslang db 'SLAN',0

contrast	db 0

running_applications	dd 0x100
max_applications	dd 11

current_alt_tab_app	dd -1

page_list		dd 0
draw_start_position	dd 0
draw_window_1	db 0

b_size_y:	dd 0x0
ysi		dd 0
small_draw	dd 0x0

ptime		dd 0x0
maxx		dd 0x0
text		db '0123456789'

page_a1		db '<   >'
page_clean_but	db 25,24,18

bte	dd 0xccddee

wcolor	dd 0x506070

sec	db ': '
pros	db '                                                  '
	db '                                                  '

screenxy    dd	0x0
stcount     dd	0x0

setup_exec:
		dd 7
		dd 0
.cmdline	dd 0
		dd 0
		dd 0
		db '/sys/'
file_sys	db 'SETUP',0

exec_fileinfo:
	dd 7
	dd 0
	dd 0
	dd 0
	dd 0
	db 0
.name	dd 0

end_name	db '/sys/END',0
menu_name	db '/sys/@MENU',0
calendar_name	db '/sys/CALENDAR',0
sysmeter_name	db '/sys/GMON',0
mousemul_name	db '/sys/MOUSEMUL',0

dat_fileinfo:
	dd 0
	dd 0
	dd 0
	dd 1024
	dd I_END
	db '/sys/PANEL.DAT',0

;m_bmp_fileinfo:
;	dd 0
;	dd 0
;	dd 0
;	dd 8192
;	dd image
;	db '/sys/MENUET.BMP',0

;iconf_fileinfo:
;	dd 0
;	dd 0
;	dd 0
;	dd 8192
;	dd image
;	db '/sys/'
;iconf	db 'MBAR_IX.BMP',0

this_slot	dd 0	      ; Slot of this process
max_slot	dd 255
;------------------------------------------------------------------------------	
IM_END:
;------------------------------------------------------------------------------	
align 4
last_active_window	rd 1
prev_active_window	rd 1
active_window_changed	rd 1
app_tab_count		rd 1

alt_tab_list_size	rd 1

panel_x_pos	rd	1
panel_y_pos	rd	1

screen_size:
.height	rw 1
.width	rw 1
;------------------------------------------------------------------------------	
align 4
system_colours	system_colors ; rd 10
;------------------------------------------------------------------------------	
align 4
app_list	rd 50
;------------------------------------------------------------------------------	
align 4
alt_tab_list	rd 256*2
;------------------------------------------------------------------------------	
align 4
process_info_buffer:
	rb 1024
;------------------------------------------------------------------------------	
align 4
procinfo_for_detect:
	rb 1024
;------------------------------------------------------------------------------	
align 4
procinfo_window_tabs:
	rb 1024
;-----------------------------------------------------------------------------
align 4
tictable:
	rd 256
;------------------------------------------------------------------------------	
align 4
	rb 256
detect_stack:
;------------------------------------------------------------------------------	
align 4
	rb 256
ctx_menu_stack:
;------------------------------------------------------------------------------
align 4
	rb 0x1000
stack_top:
;------------------------------------------------------------------------------	
;align 4
;image:
;------------------------------------------------------------------------------	
I_END: