Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
31 halyavin 1
;******************************************************************************
2211 mario79 2
;   MAIN MENU
3
;******************************************************************************
2618 mario79 4
; last update:  17/04/2012
5
; changed by:   Marat Zakiyanov aka Mario79, aka Mario
6
; changes:      Support for boot parameters.
7
;------------------------------------------------------------------------------
2488 mario79 8
; last update:  22/03/2012
9
; changed by:   Marat Zakiyanov aka Mario79, aka Mario
10
; changes:      Global optimization! The program uses
11
;               only 32 KB of memory instead of 128 kb is now.
12
;------------------------------------------------------------------------------
2211 mario79 13
; last update:  19/09/2011
14
; changed by:   Marat Zakiyanov aka Mario79, aka Mario
15
; changes:      Checking for program exist to memory
16
;               Added processing of keys: left and right arrow
2488 mario79 17
;------------------------------------------------------------------------------
31 halyavin 18
;   MAIN MENU by lisovin@26.ru
19
;   Some parts of code rewritten by Ivan Poddubny 
20
;
21
;   Compile with FASM for Menuet
22
;******************************************************************************
23
  BTN_HEIGHT  = 22
7786 leency 24
  BTN_WIDTH   = 140
2836 leency 25
  TXT_Y       = (BTN_HEIGHT)/2-4
31 halyavin 26
 
2211 mario79 27
  PANEL_HEIGHT	= 20
28
  MENU_BOTTON_X_POS	= 10
2618 mario79 29
  MENU_BOTTON_X_SIZE	= 50
2488 mario79 30
;------------------------------------------------------------------------------
2211 mario79 31
	use32
32
	org 0x0
2488 mario79 33
 
2211 mario79 34
	db 'MENUET01'	; 8 byte id
35
	dd 0x01		; header version
36
	dd START	; start of code
2488 mario79 37
	dd IM_END	; size of image
38
	dd mem_end	; memory for app
39
	dd stack_area	; esp
2618 mario79 40
	dd bootparam	; boot parameters
2488 mario79 41
	dd 0x0		; path
42
;------------------------------------------------------------------------------
2618 mario79 43
include "..\..\..\macros.inc"
7786 leency 44
include "..\..\..\gui_patterns.inc"
3013 dunkaist 45
;include "../../../debug.inc"             ; debug macros
2488 mario79 46
;------------------------------------------------------------------------------
47
align 4
2618 mario79 48
conversion_ASCII_to_HEX:
49
	xor	ebx,ebx
50
	cld
51
	lodsd
52
	mov	ecx,4
53
;--------------------------------------
54
align 4
55
.loop:
56
	cmp	al,0x60	; check for ABCDEF
57
	ja	@f
58
	sub	al,0x30 ; 0-9
59
	jmp	.store
60
;--------------------------------------
61
align 4
62
@@:
63
	sub	al,0x57 ; A-F
64
;--------------------------------------
65
align 4
66
.store:
67
	and	al,0xf
68
	rol	ebx,4
69
	add	bl,al
70
	ror	eax,8
71
	dec	ecx
72
	jnz	.loop
73
 
74
	ret
75
;------------------------------------------------------------------------------
76
align 4
97 mario79 77
START:		       ; start of execution
2488 mario79 78
	mcall	68,11
2618 mario79 79
 
80
	mov	esi,bootparam
81
	cmp	[esi],byte 0
82
	je	.no_boot_parameters
83
; boot params - hex
84
; db '9999'	; +0	Menu button X
85
; db '9999'	; +4	Menu button X size
86
; db '9999'	; +8	Menu button Y
87
; db '9999'	; +12	Menu button Y size
88
; db '9999'	; +16	Panel height
89
; db '1000'	; +20	Panel attachment
90
 
91
;	mov	edx,bootparam
92
;	call	debug_outstr
93
;	newline
94
 
95
	call	conversion_ASCII_to_HEX
96
	mov	[menu_button_x.start],ebx
97
 
98
;	dps	"menu_button_x.start: "
99
;	dpd	ebx
100
;	newline
101
 
102
	call	conversion_ASCII_to_HEX
103
	mov	[menu_button_x.size],ebx
104
 
105
;	dps	"menu_button_x.size: "
106
;	dpd	ebx
107
;	newline
108
 
109
	call	conversion_ASCII_to_HEX
110
	mov	[menu_button_y.start],ebx
111
 
112
;	dps	"menu_button_y.start: "
113
;	dpd	ebx
114
;	newline
115
 
116
	call	conversion_ASCII_to_HEX
117
	mov	[menu_button_y.size],ebx
118
 
119
;	dps	"menu_button_y.size: "
120
;	dpd	ebx
121
;	newline
122
 
123
	call	conversion_ASCII_to_HEX
124
	mov	[panel_height],ebx
125
 
126
;	dps	"panel_height: "
127
;	dpd	ebx
128
;	newline
129
 
130
	call	conversion_ASCII_to_HEX
131
	mov	[panel_attachment],ebx
132
 
133
;	dps	"panel_attachment: "
134
;	dpd	ebx
135
;	newline
136
;--------------------------------------
137
align 4
138
.no_boot_parameters:
2211 mario79 139
	call	program_exist
140
	mcall	14
141
	mov	[screen_size],eax
142
 
143
	mcall	48,3,sc,sizeof.system_colors	; load system colors
2488 mario79 144
 
145
; get size of file MENU.DAT
146
	mcall	70,fileinfo
147
	test	eax,eax
2211 mario79 148
	jnz	close
2488 mario79 149
; get memory for MENU.DAT
150
	mov	ecx,[procinfo+32]
151
	mov	[fileinfo.size],ecx
152
	mcall	68,12
153
	mov	[fileinfo.return],eax
154
	mcall	68
155
	mov	[menu_data],eax
156
; load MENU.DAT
157
	mov	[fileinfo],dword 0
158
	mcall	70,fileinfo
159
	test	eax,eax
160
	jnz	close
161
 
2211 mario79 162
	test	ebx,ebx	   ; length = 0 ?
163
	jz	close
164
	mov	ecx,ebx
2488 mario79 165
	mov	edi,[fileinfo.return]	;mem_end
166
;--------------------------------------
167
align 4
2211 mario79 168
newsearch:
169
	mov	al,'#'
170
	cld
171
	repne	scasb
172
	test	ecx,ecx	   ; if not found
173
	jz	close
174
	call	get_number
175
	test	ebx,ebx
176
	jnz	.number
177
	cmp	al,'#'
178
	je	search_end
2488 mario79 179
;--------------------------------------
180
align 4
2211 mario79 181
.number:
182
	shl	ebx,4
2488 mario79 183
	add	ebx,[menu_data]     ; pointer to process table
2211 mario79 184
	mov	[ebx],edi
185
	inc	[processes]
186
	jmp	newsearch
2488 mario79 187
;--------------------------------------
188
align 4
2211 mario79 189
search_end:
190
	mov	[end_pointer],edi
191
	mov	ebx,[processes]
192
	dec	ebx
193
	shl	ebx,4
2488 mario79 194
	add	ebx,[menu_data]
195
;--------------------------------------
196
align 4
2211 mario79 197
newprocess:
198
	xor	edx,edx
199
	mov	ecx,edi
200
	sub	ecx,[ebx]
201
	mov	al,10
2488 mario79 202
;--------------------------------------
203
align 4
2211 mario79 204
newsearch1:
205
	std
206
	repne	scasb
207
	test	ecx,ecx
208
	je	endprocess
209
	cmp	[edi],byte 13
210
	jne	newsearch1
211
	inc	edx
212
	jmp	newsearch1
2488 mario79 213
;--------------------------------------
214
align 4
2211 mario79 215
endprocess:
216
	mov	esi,ebx
217
	add	esi,4
218
	dec	edx
219
	mov	[esi],dl
2488 mario79 220
	cmp	ebx,[menu_data]
2211 mario79 221
	jbe	search_end1
222
	sub	ebx,16
223
	jmp	newprocess
2488 mario79 224
;--------------------------------------
225
align 4
2211 mario79 226
search_end1:
227
	mcall	14
2618 mario79 228
	cmp	[panel_attachment],byte 1
229
	je	@f
230
	xor	ax,ax
231
	jmp	.store
232
;--------------------------------------
233
align 4
234
@@:
</