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: |
||