Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
31 | halyavin | 1 | thread: |
2 | call draw_window |
||
3 | call main_loop |
||
4 | mov [status], ST_EXIT |
||
5 | mcall MF_EXIT |
||
6 | |||
7 | ;--------------------------------------------------------------------- |
||
8 | |||
9 | main_loop: |
||
10 | cmp [status], ST_PLAY |
||
11 | je @f |
||
12 | mcall MF_WAIT_EVENT |
||
13 | jmp .handle_event |
||
14 | @@: |
||
15 | call draw_progress_bar |
||
16 | mcall MF_WAIT_EVENT_TIMEOUT, 80 |
||
17 | .handle_event: |
||
18 | cmp eax, EV_REDRAW |
||
19 | je redraw |
||
20 | cmp eax, EV_BUTTON |
||
21 | je button |
||
22 | cmp eax, EV_KEY |
||
23 | je key |
||
24 | jmp main_loop |
||
25 | |||
26 | redraw: |
||
27 | call draw_window |
||
28 | jmp main_loop |
||
29 | |||
30 | key: |
||
31 | mcall MF_GETKEY |
||
32 | cmp [textbox_active], 1 |
||
33 | jne main_loop |
||
34 | cmp ah, 13 |
||
35 | je .enter |
||
36 | cmp ah, 8 |
||
37 | je .backspace |
||
38 | movzx ecx, [textbox_position] |
||
39 | cmp ecx, 47 |
||
40 | jae .enter |
||
41 | mov [textbox_string + ecx], ah |
||
42 | inc [textbox_position] |
||
43 | call textbox_draw |
||
44 | jmp main_loop |
||
45 | .enter: |
||
46 | mov [textbox_active], 0 |
||
47 | call textbox_draw |
||
48 | jmp main_loop |
||
49 | .backspace: |
||
50 | movzx ecx, [textbox_position] |
||
51 | test ecx, ecx |
||
52 | jz main_loop |
||
53 | mov [textbox_string + ecx], byte 0 |
||
54 | dec [textbox_position] |
||
55 | call textbox_draw |
||
56 | jmp main_loop |
||
57 | |||
58 | button: |
||
59 | mcall MF_GETBUTTON |
||
60 | cmp ah, 0x10 |
||
61 | je play_button |
||
62 | cmp ah, 0x11 |
||
63 | je stop_button |
||
64 | cmp ah, 0x12 |
||
65 | je decr_button |
||
66 | cmp ah, 0x13 |
||
67 | je incr_button |
||
68 | cmp ah, 0x14 |
||
69 | je volm_button |
||
70 | cmp ah, 0x15 |
||
71 | je volp_button |
||
72 | cmp ah, 0x20 |
||
73 | je activate_textbox |
||
74 | cmp ah, 0x30 |
||
75 | je progressbar_click |
||
76 | cmp ah, 1 |
||
77 | jne main_loop |
||
78 | |||
79 | ; mov [status], ST_STOP |
||
80 | ; mcall MF_DELAY, 40 |
||
81 | ret |
||
82 | |||
83 | play_button: |
||
84 | xor eax, eax |
||
85 | xchg al, [textbox_active] |
||
86 | cmp al, 0 |
||
87 | je @f |
||
88 | call textbox_draw |
||
89 | @@: |
||
90 | mov [status], ST_PLAY |
||
91 | jmp main_loop |
||
92 | stop_button: |
||
93 | mov [status], ST_STOP |
||
94 | jmp main_loop |
||
95 | |||
96 | decr_button: |
||
97 | ; mov [status], ST_STOP |
||
98 | ; @@: |
||
99 | ; mcall 5, 1 |
||
100 | ; cmp [status], ST_DONE |
||
101 | ; jne @b |
||
102 | ; movzx esi, [textbox_position] |
||
103 | ; add esi, textbox_string |
||
104 | ; @@: |
||
105 | ; cmp byte [esi], '/' |
||
106 | ; je @f |
||
107 | ; dec esi |
||
108 | ; jmp @b |
||
109 | ; @@: |
||
110 | ; mov byte [esi+1], 0 |
||
111 | ; mov [fileinfo.first_block], 0 |
||
112 | ; mov [fileinfo.dest], WAV_BUFFER1 |
||
113 | ; mcall 58, fileinfo |
||
114 | ; add ebx, WAV_BUFFER1 |
||
115 | ; mov esi, WAV_BUFFER1+8 |
||
116 | ; .next_file: |
||
117 | ; cmp ebx, esi |
||
118 | ; jbe .fin |
||
119 | ; cmp word [esi], "WA" |
||
120 | ; jne .next_file |
||
121 | ; cmp byte [esi+1], "V" |
||
122 | ; jne .next_file |
||
123 | ; .fin: |
||
124 | |||
125 | ;mov eax, [fileinfo.first_block] |
||
126 | ;cmp eax, 1000 |
||
127 | ;jnl @f |
||
128 | ;mov [fileinfo.first_block], 0 |
||
129 | ;jmp main_loop |
||
130 | ;@@: |
||
131 | ;sub [fileinfo.first_block], 1000 |
||
132 | ;jmp main_loop |
||
133 | |||
134 | incr_button: |
||
135 | ;add [fileinfo.first_block], 1000 |
||
136 | jmp main_loop |
||
137 | |||
138 | volm_button: |
||
139 | inc byte [volume] |
||
140 | and byte [volume], 0x1f |
||
141 | jz volp_button |
||
142 | or [volume], 0x10000000 |
||
143 | jmp _print_volume |
||
144 | ; jmp main_loop |
||
145 | |||
146 | volp_button: |
||
147 | dec byte [volume] |
||
148 | and byte [volume], 0x1f |
||
149 | jz volm_button |
||
150 | or [volume], 0x10000000 |
||
151 | ; jmp main_loop |
||
152 | |||
153 | _print_volume: |
||
154 | movzx eax, byte [volume] |
||
155 | neg eax |
||
156 | add eax, 31 |
||
157 | dps "Volume: " |
||
158 | dpd eax |
||
159 | newline |
||
160 | jmp main_loop |
||
161 | |||
162 | activate_textbox: |
||
163 | cmp [status], ST_DONE |
||
164 | jne main_loop |
||
165 | mov [textbox_active], 1 |
||
166 | call textbox_draw |
||
167 | jmp main_loop |
||
168 | |||
169 | progressbar_click: |
||
170 | ;print "click on progress bar" |
||
171 | cmp [status], ST_DONE |
||
172 | je main_loop |
||
173 | mcall MF_GETMOUSE, MS_COORDS_WINDOW |
||
174 | shr eax, 16 ; get mouse.x |
||
175 | sub eax, 7 |
||
176 | test eax, eax |
||
177 | jz @f |
||
178 | imul eax, [file_size] |
||
179 | mov ebx, 286 |
||
180 | cdq |
||
181 | div ebx |
||
182 | @@: |
||
183 | ;dps "block: " |
||
184 | ;dpd eax |
||
185 | ;newline |
||
186 | mov [fileinfo.first_block], eax |
||
187 | call draw_progress_bar |
||
188 | jmp main_loop |
||
189 | ret |
||
190 | |||
191 | ;--------------------------------------------------------------------- |
||
192 | |||
193 | PBAR_WIDTH = 286 |
||
194 | |||
195 | draw_window: |
||
196 | mcall MF_DRAWSTATUS, DS_BEGIN |
||
197 | |||
198 | mcall MF_WINDOW, <100,299>, <100,72>, 0x03404040 |
||
199 | |||
200 | ; create six buttons |
||
201 | mov edi, 6 |
||
202 | mpack ebx, 7, 45 |
||
203 | mpack ecx, 24, 13 |
||
204 | mov edx, 0x10 |
||
205 | mov esi, 0xA0A0A0 |
||
206 | @@: |
||
207 | mcall MF_BUTTON |
||
208 | add ebx, 48 shl 16 |
||
209 | inc edx |
||
210 | dec edi |
||
211 | jnz @b |
||
212 | |||
213 | mcall MF_TEXT, <8,8>, 0x10FFFFFF, header, header.size |
||
214 | |||
215 | mcall ,<13,28>, 0x404040, buttons_text, buttons_text.size |
||
216 | sub ebx, 0x00010001 |
||
217 | mov ecx, 0xFFFFFF |
||
218 | mcall |
||
219 | |||
220 | call draw_progress_bar |
||
221 | call textbox_draw |
||
222 | |||
223 | mcall MF_DRAWSTATUS, DS_END |
||
224 | ret |
||
225 | |||
226 | ;--------------------------------------------------------------------- |
||
227 | |||
228 | textbox_draw: |
||
229 | mcall MF_BUTTON, <7,285>, <55,10>, 0x60000020 |
||
230 | |||
231 | mov edx, 0x808080 |
||
232 | cmp [textbox_active], 1 |
||
233 | jne @f |
||
234 | mov edx, 0xA0A0A0 |
||
235 | @@: |
||
236 | mcall MF_BAR, <7,286>, <55,11> |
||
237 | |||
238 | movzx esi, [textbox_position] |
||
239 | mcall MF_TEXT, <10,56>, 0x404040, textbox_string |
||
240 | ret |
||
241 | |||
242 | ;--------------------------------------------------------------------- |
||
243 | |||
244 | draw_progress_bar: |
||
245 | pushad |
||
246 | |||
247 | imul eax, [fileinfo.first_block], PBAR_WIDTH |
||
248 | cdq |
||
249 | div [file_size] |
||
250 | |||
251 | push eax |
||
252 | mcall MF_BAR, <7,286>, <41,11>, 0x808080 |
||
253 | mcall MF_BUTTON, , , 0x60000030 |
||
254 | pop eax |
||
255 | |||
256 | mov bx, ax |
||
257 | mov edx, 0xA0A0A0 |
||
258 | mcall MF_BAR |
||
259 | |||
260 | popad |
||
261 | ret |
||
262 | |||
263 | ;--------------------------------------------------------------------- |
||
264 | |||
265 | sz header, "AC'97 WAV player - all PCM audio" |
||
266 | sz buttons_text, " Play Stop << >> Vol- Vol+" |
||
267 | |||
268 | textbox_active db 0 |
||
269 | textbox_position db textbox_string.size-1 |
||
270 | file_size dd 100><>41,11>7,286>10,56>55,11>7,286>55,10>7,285>13,28>8,8>100,72>100,299> |