Subversion Repositories Kolibri OS

Rev

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