Rev 529 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
31 | halyavin | 1 | ; |
51 | mikedld | 2 | ; UNIFORM WINDOW COLOURS & SKIN |
31 | halyavin | 3 | ; |
4 | ; Compile with FASM for Menuet |
||
5 | ; |
||
6 | ; < russian edition by Ivan Poddubny > |
||
51 | mikedld | 7 | ; < skin selection by Mike Semenyako > |
31 | halyavin | 8 | ; |
9 | |||
10 | ;****************************************************************************** |
||
11 | use32 |
||
12 | org 0 |
||
13 | db 'MENUET01' ; identifier |
||
14 | dd 1 ; header version |
||
15 | dd START ; start address |
||
16 | dd I_END ; file size |
||
51 | mikedld | 17 | dd 28000h ; memory |
484 | diamond | 18 | dd 10000h ; stack pointer |
528 | diamond | 19 | dd param,0 ; parameters, reserved |
31 | halyavin | 20 | |
179 | mikedld | 21 | include 'lang.inc' |
528 | diamond | 22 | include '..\..\..\macros.inc' |
484 | diamond | 23 | include 'kglobals.inc' |
24 | include 'unpacker.inc' |
||
31 | halyavin | 25 | ;****************************************************************************** |
26 | |||
27 | |||
51 | mikedld | 28 | struct SKIN_HEADER |
485 | heavyiron | 29 | ident dd ? |
30 | version dd ? |
||
31 | params dd ? |
||
32 | buttons dd ? |
||
33 | bitmaps dd ? |
||
51 | mikedld | 34 | ends |
31 | halyavin | 35 | |
51 | mikedld | 36 | struct SKIN_PARAMS |
485 | heavyiron | 37 | skin_height dd ? |
38 | margin.right dw ? |
||
39 | margin.left dw ? |
||
40 | margin.bottom dw ? |
||
41 | margin.top dw ? |
||
42 | colors.inner dd ? |
||
43 | colors.outer dd ? |
||
44 | colors.frame dd ? |
||
45 | colors_1.inner dd ? |
||
46 | colors_1.outer dd ? |
||
47 | colors_1.frame dd ? |
||
48 | dtp.size dd ? |
||
49 | dtp.data db 40 dup (?) |
||
51 | mikedld | 50 | ends |
51 | |||
52 | struct SKIN_BUTTONS |
||
485 | heavyiron | 53 | type dd ? |
54 | pos: |
||
55 | left dw ? |
||
56 | top dw ? |
||
57 | size: |
||
58 | width dw ? |
||
59 | height dw ? |
||
51 | mikedld | 60 | ends |
61 | |||
62 | struct SKIN_BITMAPS |
||
485 | heavyiron | 63 | kind dw ? |
64 | type dw ? |
||
65 | _data dd ? |
||
51 | mikedld | 66 | ends |
67 | |||
68 | |||
31 | halyavin | 69 | START: ; start of execution |
70 | mov eax,48 ; get current colors |
||
71 | mov ebx,3 |
||
72 | mov ecx,color_table |
||
73 | mov edx,4*10 |
||
485 | heavyiron | 74 | mcall |
31 | halyavin | 75 | |
528 | diamond | 76 | mov esi, param |
77 | cmp byte [esi], 0 |
||
78 | jnz has_param |
||
79 | |||
51 | mikedld | 80 | mov esi,default_skn |
81 | mov edi,fname |
||
82 | mov ecx,default_skn.size |
||
31 | halyavin | 83 | rep movsb |
528 | diamond | 84 | jmp @f |
85 | has_param: |
||
86 | mov ecx, 256/4 |
||
87 | mov edi, fname |
||
88 | rep movsd |
||
89 | @@: |
||
51 | mikedld | 90 | call load_skin_file |
31 | halyavin | 91 | |
179 | mikedld | 92 | ; mov esi, default_dtp |
93 | ; mov edi, fname |
||
94 | ; mov ecx, default_dtp.size |
||
95 | ; rep movsb |
||
31 | halyavin | 96 | |
97 | red: |
||
98 | call draw_window ; at first, draw the window |
||
99 | |||
100 | still: |
||
101 | |||
102 | mov eax,23 ; wait here for event |
||
103 | mov ebx,5 |
||
485 | heavyiron | 104 | mcall |
31 | halyavin | 105 | |
106 | dec eax ; redraw request ? |
||
107 | jz red |
||
108 | dec eax ; key in buffer ? |
||
109 | jz key |
||
110 | dec eax ; button in buffer ? |
||
111 | jz button |
||
112 | |||
113 | call draw_cursor |
||
114 | |||
115 | jmp still |
||
116 | |||
117 | |||
118 | key: ; key |
||
205 | heavyiron | 119 | mov al,2 ; just read it and ignore |
485 | heavyiron | 120 | mcall |
31 | halyavin | 121 | jmp still |
122 | |||
123 | button: ; button |
||
205 | heavyiron | 124 | mov al,17 ; get id |
485 | heavyiron | 125 | mcall |
31 | halyavin | 126 | |
51 | mikedld | 127 | cmp ah,11 ; read string |
128 | jne no_string |
||
129 | call read_string |
||
130 | jmp still |
||
131 | no_string: |
||
132 | |||
133 | cmp ah,12 ; load file |
||
134 | jne no_load |
||
135 | call load_file |
||
136 | call draw_window |
||
137 | jmp still |
||
138 | no_load: |
||
139 | |||
140 | cmp ah,13 ; save file |
||
141 | jne no_save |
||
142 | call save_file |
||
143 | jmp still |
||
144 | no_save: |
||
145 | |||
31 | halyavin | 146 | cmp ah,14 ; set 3d buttons |
147 | jne no_3d |
||
148 | mov eax,48 |
||
149 | mov ebx,1 |
||
150 | mov ecx,1 |
||
485 | heavyiron | 151 | mcall |
484 | diamond | 152 | jmp doapply |
31 | halyavin | 153 | no_3d: |
154 | |||
155 | cmp ah,15 ; set flat buttons |
||
156 | jne no_flat |
||
157 | mcall 48, 1, 0 |
||
484 | diamond | 158 | doapply: |
31 | halyavin | 159 | mcall 48, 0, 0 |
160 | jmp still |
||
161 | no_flat: |
||
162 | |||
51 | mikedld | 163 | cmp ah,16 ; apply |
31 | halyavin | 164 | jne no_apply |
51 | mikedld | 165 | apply_direct: |
31 | halyavin | 166 | mov eax,48 |
167 | mov ebx,2 |
||
168 | mov ecx,color_table |
||
169 | mov edx,10*4 |
||
485 | heavyiron | 170 | mcall |
484 | diamond | 171 | jmp doapply |
31 | halyavin | 172 | no_apply: |
173 | |||
51 | mikedld | 174 | cmp ah,17 ; load skin file |
175 | jne no_load_skin |
||
176 | call load_skin_file |
||
177 | call draw_window |
||
178 | jmp still |
||
179 | no_load_skin: |
||
180 | |||
181 | cmp ah,18 ; apply skin |
||
182 | jne no_apply_skin |
||
183 | cmp [skin_info.fname],0 |
||
184 | je no_apply_skin |
||
524 | diamond | 185 | mcall 48,8,skin_info.fname |
51 | mikedld | 186 | call draw_window |
187 | jmp still |
||
188 | no_apply_skin: |
||
189 | |||
31 | halyavin | 190 | cmp ah,31 |
191 | jb no_new_colour |
||
192 | cmp ah,41 |
||
193 | jg no_new_colour |
||
194 | shr eax,8 |
||
195 | sub eax,31 |
||
196 | shl eax,2 |
||
197 | mov ebx,[color] |
||
179 | mikedld | 198 | mov [eax+color_table],ebx |
199 | cmp dword[0x18000+SKIN_HEADER.ident],'SKIN' |
||
200 | jne @f |
||
201 | mov edi,[0x18000+SKIN_HEADER.params] |
||
202 | mov dword[edi+0x18000+SKIN_PARAMS.dtp.data+eax],ebx |
||
203 | call draw_skin |
||
204 | @@: call draw_colours |
||
31 | halyavin | 205 | jmp still |
206 | no_new_colour: |
||
207 | |||
205 | heavyiron | 208 | cmp ah,1 ; terminate |
209 | jnz noid1 |
||
210 | or eax,-1 |
||
485 | heavyiron | 211 | mcall |
31 | halyavin | 212 | noid1: |
213 | |||
214 | jmp still |
||
215 | |||
216 | |||
217 | draw_cursor: |
||
218 | |||
219 | pusha |
||
220 | mov eax,37 |
||
221 | mov ebx,2 |
||
485 | heavyiron | 222 | mcall |
31 | halyavin | 223 | |
224 | cmp eax,0 |
||
225 | jne dc1 |
||
226 | popa |
||
227 | ret |
||
228 | |||
229 | dc1: |
||
230 | |||
231 | mov eax,37 |
||
232 | mov ebx,1 |
||
485 | heavyiron | 233 | mcall |
31 | halyavin | 234 | |
235 | mov ebx,eax |
||
236 | shr ebx,16 |
||
237 | mov ecx,eax |
||
238 | and ecx,0xffff |
||
239 | |||
240 | cmp ecx,32 |
||
241 | jbe no_color |
||
242 | cmp ebx,32 |
||
243 | jbe no_color |
||
244 | |||
51 | mikedld | 245 | cmp ebx,266 ; CHANGE COLOR |
31 | halyavin | 246 | jb no_color |
51 | mikedld | 247 | cmp ebx,266+20*3 |
31 | halyavin | 248 | jg no_color |
249 | |||
250 | cmp ecx,30+128 |
||
251 | jge no_color |
||
252 | cmp ecx,30 |
||
253 | jb no_color |
||
254 | |||
51 | mikedld | 255 | sub ebx,266 |
31 | halyavin | 256 | mov eax,ebx |
257 | cdq |
||
258 | mov ebx,20 |
||
259 | div ebx |
||
260 | mov ebx,2 |
||
261 | sub ebx,eax |
||
262 | |||
263 | add ecx,-30 |
||
264 | not ecx |
||
265 | shl ecx,1 |
||
266 | |||
267 | mov byte [ebx+color],cl |
||
268 | call draw_color |
||
269 | |||
270 | popa |
||
271 | ret |
||
272 | |||
273 | no_color: |
||
274 | |||
275 | popa |
||
276 | ret |
||
277 | |||
278 | |||
279 | load_file: |
||
484 | diamond | 280 | xor eax, eax |
281 | mov ebx, read_info |
||
282 | mov dword [ebx], eax ; subfunction: read |
||
283 | mov dword [ebx+4], eax ; offset (low dword) |
||
284 | mov dword [ebx+8], eax ; offset (high dword) |
||
285 | mov dword [ebx+12], 40 ; read colors file: 4*10 bytes |
||
286 | mov dword [ebx+16], color_table ; address |
||
287 | mcall 70 |
||
288 | ret |
||
31 | halyavin | 289 | |
484 | diamond | 290 | load_skin_file: |
291 | xor eax, eax |
||
292 | mov ebx, read_info |
||
293 | mov dword [ebx], eax ; subfunction: read |
||
294 | mov dword [ebx+4], eax ; offset (low dword) |
||
295 | mov dword [ebx+8], eax ; offset (high dword) |
||
296 | mov dword [ebx+12], 32*1024 ; read: max 32 KBytes |
||
297 | mov dword [ebx+16], 0x10000 ; address |
||
298 | mcall 70 |
||
31 | halyavin | 299 | |
484 | diamond | 300 | mov esi, 0x10000 |
179 | mikedld | 301 | |
484 | diamond | 302 | cmp dword [esi], 'KPCK' |
303 | jnz notpacked |
||
304 | cmp dword [esi+4], 32*1024 ; max 32 KBytes |
||
305 | ja doret |
||
306 | push 0x20000 |
||
307 | push esi |
||
308 | call unpack |
||
309 | mov esi, 0x20000 |
||
310 | notpacked: |
||
31 | halyavin | 311 | |
484 | diamond | 312 | cmp dword[esi+SKIN_HEADER.ident],'SKIN' |
313 | jne doret |
||
51 | mikedld | 314 | |
484 | diamond | 315 | mov edi,0x18000 |
316 | mov ecx,0x8000/4 |
||
317 | rep movsd |
||
51 | mikedld | 318 | |
319 | mov esi,fname |
||
320 | mov edi,skin_info.fname |
||
321 | mov ecx,257 |
||
322 | rep movsb |
||
323 | |||
324 | mov ebp,0x18000 |
||
325 | mov esi,[ebp+SKIN_HEADER.params] |
||
326 | add esi,ebp |
||
327 | lea esi,[esi+SKIN_PARAMS.dtp.data] |
||
328 | mov edi,color_table |
||
329 | mov ecx,10 |
||
330 | rep movsd |
||
484 | diamond | 331 | doret: |
51 | mikedld | 332 | |
31 | halyavin | 333 | ret |
334 | |||
335 | |||
336 | save_file: |
||
484 | diamond | 337 | mov ebx, write_info |
338 | mov dword [ebx], 2 ; subfunction: write |
||
339 | and dword [ebx+4], 0 ; (reserved) |
||
340 | and dword [ebx+8], 0 ; (reserved) |
||
341 | mov dword [ebx+12], 10*4 ; bytes to write |
||
342 | mov dword [ebx+16], color_table ; address |
||
343 | mcall 70 |
||
344 | ret |
||
31 | halyavin | 345 | |
346 | read_string: |
||
347 | |||
348 | pusha |
||
349 | |||
350 | mov edi,fname |
||
351 | mov al,'_' |
||
51 | mikedld | 352 | mov ecx,87 |
31 | halyavin | 353 | cld |
354 | rep stosb |
||
355 | |||
356 | call print_text |
||
357 | |||
358 | mov edi,fname |
||
359 | |||
360 | f11: |
||
361 | mov eax,10 |
||
485 | heavyiron | 362 | mcall |
31 | halyavin | 363 | cmp eax,2 |
364 | jne read_done |
||
484 | diamond | 365 | ; mov eax,2 |
485 | heavyiron | 366 | mcall |
31 | halyavin | 367 | shr eax,8 |
368 | cmp eax,13 |
||
369 | je read_done |
||
370 | cmp eax,8 |
||
371 | jne nobsl |
||
372 | cmp edi,fname |
||
373 | je f11 |
||
374 | dec edi |
||
375 | mov [edi],byte '_' |
||
376 | call print_text |
||
377 | jmp f11 |
||
378 | nobsl: |
||
379 | mov [edi],al |
||
380 | |||
381 | call print_text |
||
382 | |||
383 | inc edi |
||
51 | mikedld | 384 | cmp edi, fname+87 |
31 | halyavin | 385 | jne f11 |
386 | |||
387 | read_done: |
||
388 | |||
484 | diamond | 389 | mov ecx, fname+88 |
31 | halyavin | 390 | sub ecx, edi |
391 | mov eax, 0 |
||
392 | cld |
||
393 | rep stosb |
||
394 | |||
395 | call print_text |
||
396 | |||
397 | popa |
||
398 | |||
399 | ret |
||
400 | |||
401 | |||
402 | print_text: |
||
403 | pushad |
||
404 | |||
51 | mikedld | 405 | mpack ebx,15,6*87+4 |
406 | mpack ecx,(30+18*10+2),11 |
||
407 | mcall 13,,,[w_work] |
||
31 | halyavin | 408 | |
51 | mikedld | 409 | mpack ebx,17,(30+18*10+4) |
410 | mcall 4,,[w_work_text],fname,87 |
||
31 | halyavin | 411 | |
412 | popad |
||
413 | ret |
||
414 | |||
415 | |||
416 | draw_color: |
||
417 | |||
418 | pusha |
||
419 | |||
420 | mov eax,13 |
||
51 | mikedld | 421 | mov ebx,266*65536+60 |
31 | halyavin | 422 | mov ecx,170*65536+30 |
423 | mov edx,[color] |
||
485 | heavyiron | 424 | mcall |
31 | halyavin | 425 | |
426 | ; mov eax,13 |
||
51 | mikedld | 427 | mov ebx,266*65536+60 |
31 | halyavin | 428 | mov ecx,200*65536+10 |
429 | mov edx,[w_work] |
||
485 | heavyiron | 430 | mcall |
31 | halyavin | 431 | |
432 | mov eax,47 |
||
433 | mov ebx,0+1*256+8*65536 |
||
434 | mov ecx,[color] |
||
51 | mikedld | 435 | mov edx,272*65536+201 |
31 | halyavin | 436 | mov esi,[w_work_text] |
485 | heavyiron | 437 | mcall |
31 | halyavin | 438 | |
439 | popa |
||
440 | |||
441 | ret |
||
442 | |||
443 | |||
444 | draw_colours: |
||
445 | |||
446 | pusha |
||
447 | |||
448 | mov esi,color_table |
||
449 | |||
450 | mov ebx,225*65536+32 |
||
51 | mikedld | 451 | mov ecx,32*65536+12 |
31 | halyavin | 452 | newcol: |
453 | mov eax,13 |
||
454 | mov edx,[esi] |
||
485 | heavyiron | 455 | mcall |
51 | mikedld | 456 | add ecx,18*65536 |
31 | halyavin | 457 | add esi,4 |
458 | cmp esi,color_table+4*9 |
||
459 | jbe newcol |
||
460 | |||
461 | popa |
||
462 | |||
463 | ret |
||
464 | |||
465 | |||
51 | mikedld | 466 | draw_framerect: ; ebx,ecx |
467 | push ebx ecx |
||
468 | add bx,[esp+6] |
||
469 | mov cx,[esp+2] |
||
470 | dec ebx |
||
471 | mcall 38 |
||
472 | add cx,[esp] |
||
473 | rol ecx,16 |
||
474 | add cx,[esp] |
||
475 | sub ecx,0x00010001 |
||
476 | mcall |
||
477 | mov ebx,[esp+4] |
||
478 | mov ecx,[esp] |
||
479 | mov bx,[esp+6] |
||
480 | add cx,[esp+2] |
||
481 | dec ecx |
||
482 | mcall |
||
483 | add bx,[esp+4] |
||
484 | rol ebx,16 |
||
485 | add bx,[esp+4] |
||
486 | sub ebx,0x00010001 |
||
487 | mcall |
||
488 | add esp,8 |
||
489 | ret |
||
31 | halyavin | 490 | |
51 | mikedld | 491 | find_bitmap: |
492 | mov edi,[ebp+SKIN_HEADER.bitmaps] |
||
493 | add edi,ebp |
||
494 | xor ebx,ebx |
||
495 | .lp1: cmp dword[edi],0 |
||
496 | je .lp2 |
||
497 | cmp dword[edi+0],eax |
||
498 | jne @f |
||
485 | heavyiron | 499 | mov ebx,[edi+SKIN_BITMAPS._data] |
51 | mikedld | 500 | add ebx,ebp |
501 | mov ecx,[ebx-2] |
||
502 | mov cx,[ebx+4] |
||
503 | add ebx,8 |
||
504 | .lp2: ret |
||
505 | @@: add edi,8 |
||
506 | jmp .lp1 |
||
507 | |||
179 | mikedld | 508 | dec_edx: |
509 | sub dl,4 |
||
510 | jnc @f |
||
511 | xor dl,dl |
||
512 | @@: sub dh,4 |
||
513 | jnc @f |
||
514 | xor dh,dh |
||
515 | @@: rol edx,16 |
||
516 | sub dl,4 |
||
517 | jnc @f |
||
518 | xor dl,dl |
||
519 | @@: rol edx,16 |
||
520 | ret |
||
521 | |||
522 | area: |
||
523 | .x = 345 |
||
524 | .y = 20 |
||
525 | .width = 206 |
||
526 | .height = 191 |
||
527 | |||
528 | wnd1: |
||
529 | .x = area.x+49 |
||
530 | .y = area.y+5 |
||
531 | .width = 150 |
||
532 | .height = 90 |
||
533 | wnd2: |
||
534 | .x = area.x+35 |
||
535 | .y = area.y+35 |
||
536 | .width = 150 |
||
537 | .height = 90 |
||
538 | wnd3: |
||
539 | .x = area.x+21 |
||
540 | .y = area.y+65 |
||
541 | .width = 150 |
||
542 | .height = 90 |
||
543 | wnd4: |
||
544 | .x = area.x+7 |
||
545 | .y = area.y+95 |
||
546 | .width = 150 |
||
547 | .height = 90 |
||
548 | |||
549 | virtual at edi+SKIN_PARAMS.dtp.data |
||
550 | dtp system_colors |
||
551 | end virtual |
||
552 | |||
51 | mikedld | 553 | draw_skin: |
205 | heavyiron | 554 | mcall 13, |
179 | mikedld | 555 | |
51 | mikedld | 556 | mov ebp,0x18000 |
557 | mov edi,[ebp+SKIN_HEADER.params] |
||
558 | add edi,ebp |
||
179 | mikedld | 559 | mpack ebx,wnd1.x,wnd1.width |
560 | mpack ecx,wnd1.y,wnd1.height |
||
561 | mov edx,[dtp.frame] |
||
562 | call draw_framerect |
||
563 | mcall 13, |
||
564 | |||
565 | mov eax,38 |
||
566 | mpack ebx,wnd1.x+1,wnd1.x+wnd1.width-2 |
||
567 | mpack ecx,wnd1.y+1,wnd1.y+1 |
||
568 | mov edx,[dtp.grab] |
||
569 | mov esi,20 |
||
570 | @@: mcall |
||
571 | call dec_edx |
||
572 | add ecx,0x00010001 |
||
573 | dec esi |
||
574 | jnz @b |
||
575 | |||
576 | mov edi,[ebp+SKIN_HEADER.params] |
||
577 | add edi,ebp |
||
578 | mcall 4, |
||
579 | |||
580 | mcall 8, |
||
581 | mcall 4, |
||
582 | |||
583 | ;---------------------------------------------------------------------- |
||
584 | |||
585 | mov edi,[ebp+SKIN_HEADER.params] |
||
586 | add edi,ebp |
||
587 | mpack ebx,wnd2.x,wnd2.width |
||
588 | mpack ecx,wnd2.y,wnd2.height |
||
589 | mov edx,[dtp.frame] |
||
590 | shr edx,1 |
||
591 | and edx,0x007F7F7F |
||
592 | call draw_framerect |
||
593 | mpack ebx,wnd2.x+4,wnd2.width-8 |
||
594 | mpack ecx,wnd2.y+4,wnd2.height-8 |
||
595 | call draw_framerect |
||
596 | mcall 13, |
||
597 | add ecx,(wnd2.height-5)*65536 |
||
598 | mcall |
||
599 | mcall , |
||
600 | add ebx,(wnd2.width-5)*65536 |
||
601 | mcall |
||
602 | mcall , |
||
603 | |||
604 | mov eax,38 |
||
605 | mpack ebx,wnd2.x+4,wnd2.x+wnd2.width-5 |
||
606 | mpack ecx,wnd2.y+4,wnd2.y+4 |
||
607 | mov edx,[dtp.grab] |
||
608 | mov esi,16 |
||
609 | @@: mcall |
||
610 | call dec_edx |
||
611 | add ecx,0x00010001 |
||
612 | dec esi |
||
613 | jnz @b |
||
614 | |||
615 | mov edi,[ebp+SKIN_HEADER.params] |
||
616 | add edi,ebp |
||
617 | mcall 4, |
||
618 | |||
619 | mcall 8, |
||
620 | mcall 4, |
||
621 | |||
622 | ;---------------------------------------------------------------------- |
||
623 | |||
624 | mov edi,[ebp+SKIN_HEADER.params] |
||
625 | add edi,ebp |
||
626 | mpack ebx,wnd3.x,wnd3.width |
||
627 | mpack ecx,wnd3.y,wnd3.height |
||
51 | mikedld | 628 | mov edx,[edi+SKIN_PARAMS.colors_1.outer] |
629 | call draw_framerect |
||
179 | mikedld | 630 | mpack ebx,wnd3.x+4,wnd3.width-8 |
631 | mpack ecx,wnd3.y+4,wnd3.height-8 |
||
51 | mikedld | 632 | mov edx,[edi+SKIN_PARAMS.colors_1.inner] |
633 | call draw_framerect |
||
179 | mikedld | 634 | mcall 13, |
635 | add ecx,(wnd3.height-5)*65536 |
||
51 | mikedld | 636 | mcall |
179 | mikedld | 637 | mcall , |
638 | add ebx,(wnd3.width-5)*65536 |
||
51 | mikedld | 639 | mcall |
179 | mikedld | 640 | mcall , |
51 | mikedld | 641 | |
642 | mov eax,0x00000001 ; left, inactive |
||
643 | call find_bitmap |
||
179 | mikedld | 644 | mcall 7,,, |
51 | mikedld | 645 | |
646 | pushd [ebx-8] |
||
647 | mov eax,0x00000003 ; base, inactive |
||
648 | call find_bitmap |
||
649 | pop edx |
||
179 | mikedld | 650 | mov esi,wnd3.x+wnd3.width-1 |
51 | mikedld | 651 | sub esi,edx |
652 | shl edx,16 |
||
179 | mikedld | 653 | add edx,wnd3.x*65536+wnd3.y |
51 | mikedld | 654 | mcall 7 |
655 | @@: rol edx,16 |
||
656 | add dx,[ebx-8] |
||
657 | cmp dx,si |
||
658 | ja @f |
||
659 | rol edx,16 |
||
660 | mcall 7 |
||
661 | jmp @b |
||
662 | @@: |
||
663 | |||
664 | mov eax,0x00000002 ; oper, inactive |
||
665 | call find_bitmap |
||
666 | mov edx,ecx |
||
667 | shr edx,16 |
||
668 | neg edx |
||
669 | shl edx,16 |
||
179 | mikedld | 670 | add edx,(wnd3.x+wnd3.width)*65536+wnd3.y |
51 | mikedld | 671 | mcall 7 |
672 | |||
673 | mov ebp,0x18000 |
||
674 | mov edi,[ebp+SKIN_HEADER.params] |
||
675 | add edi,ebp |
||
676 | mov eax,dword[edi+SKIN_PARAMS.margin.left-2] |
||
677 | mov ax,word[edi+SKIN_PARAMS.skin_height] |
||
678 | sub ax,[edi+SKIN_PARAMS.margin.bottom] |
||
679 | shr ax,1 |
||
680 | add ax,[edi+SKIN_PARAMS.margin.top] |
||
681 | add ax,-4 |
||
682 | push eax |
||
179 | mikedld | 683 | lea ebx,[eax+wnd3.x*65536+wnd3.y] |
684 | mcall 4,,dword[dtp.grab_text],caption_text,caption_text.size |
||
51 | mikedld | 685 | |
686 | ;--------------------------------------------------------- |
||
687 | |||
688 | mov edi,[ebp+SKIN_HEADER.params] |
||
689 | add edi,ebp |
||
179 | mikedld | 690 | mpack ebx,wnd4.x,wnd4.width |
691 | mpack ecx,wnd4.y,wnd4.height |
||
51 | mikedld | 692 | mov edx,[edi+SKIN_PARAMS.colors.outer] |
693 | call draw_framerect |
||
179 | mikedld | 694 | mpack ebx,wnd4.x+4,wnd4.width-8 |
695 | mpack ecx,wnd4.y+4,wnd4.height-8 |
||
51 | mikedld | 696 | mov edx,[edi+SKIN_PARAMS.colors.inner] |
697 | call draw_framerect |
||
179 | mikedld | 698 | mcall 13, |
699 | add ecx,(wnd4.height-5)*65536 |
||
51 | mikedld | 700 | mcall |
179 | mikedld | 701 | mcall , |
702 | add ebx,(wnd4.width-5)*65536 |
||
51 | mikedld | 703 | mcall |
179 | mikedld | 704 | mcall , |
51 | mikedld | 705 | |
706 | mov eax,0x00010001 ; left, inactive |
||
707 | call find_bitmap |
||
179 | mikedld | 708 | mcall 7,,, |
51 | mikedld | 709 | |
710 | pushd [ebx-8] |
||
711 | mov eax,0x00010003 ; base, inactive |
||
712 | call find_bitmap |
||
713 | pop edx |
||
179 | mikedld | 714 | mov esi,wnd4.x+wnd4.width-1 |
51 | mikedld | 715 | sub esi,edx |
716 | shl edx,16 |
||
179 | mikedld | 717 | add edx,wnd4.x*65536+wnd4.y |
51 | mikedld | 718 | mcall 7 |
719 | @@: rol edx,16 |
||
720 | add dx,[ebx-8] |
||
721 | cmp dx,si |
||
722 | ja @f |
||
723 | rol edx,16 |
||
724 | mcall 7 |
||
725 | jmp @b |
||
726 | @@: |
||
727 | |||
728 | mov eax,0x00010002 ; oper, inactive |
||
729 | call find_bitmap |
||
730 | mov edx,ecx |
||
731 | shr edx,16 |
||
732 | neg edx |
||
733 | shl edx,16 |
||
179 | mikedld | 734 | add edx,(wnd4.x+wnd4.width)*65536+wnd4.y |
51 | mikedld | 735 | mcall 7 |
736 | |||
737 | mov ebp,0x18000 |
||
738 | mov edi,[ebp+SKIN_HEADER.params] |
||
739 | add edi,ebp |
||
740 | pop eax |
||
179 | mikedld | 741 | lea ebx,[eax+wnd4.x*65536+wnd4.y] |
742 | mcall 4,,dword[dtp.grab_text],caption_text,caption_text.size |
||
51 | mikedld | 743 | |
744 | ;---------------------------------------------------------------------- |
||
745 | |||
746 | mov edi,[ebp+SKIN_HEADER.buttons] |
||
747 | add edi,ebp |
||
748 | .lp1: cmp dword[edi],0 |
||
749 | je .lp2 |
||
750 | mov ebx,dword[edi+SKIN_BUTTONS.left-2] |
||
751 | mov bx,[edi+SKIN_BUTTONS.width] |
||
752 | mov ecx,dword[edi+SKIN_BUTTONS.top-2] |
||
753 | mov cx,[edi+SKIN_BUTTONS.height] |
||
179 | mikedld | 754 | add ebx,(wnd4.x+wnd4.width)*65536 |
755 | add ecx,wnd4.y*65536 |
||
51 | mikedld | 756 | dec ebx |
757 | dec ecx |
||
758 | mcall 8,,,0x40000000 |
||
759 | add edi,12 |
||
760 | jmp .lp1 |
||
179 | mikedld | 761 | .lp2: |
51 | mikedld | 762 | |
179 | mikedld | 763 | mov edi,[ebp+SKIN_HEADER.params] |
764 | add edi,ebp |
||
765 | mpack ebx,wnd4.x+10,wnd4.y+10 |
||
766 | add bx,word[edi+SKIN_PARAMS.skin_height] |
||
767 | mcall 4,,[dtp.work_text],window_text,window_text.size |
||
768 | |||
769 | mov ecx,[edi+SKIN_PARAMS.skin_height] |
||
770 | shl ecx,16 |
||
771 | add ecx,(wnd4.y+8)*65536+10 |
||
772 | mcall 13, |
||
773 | (wnd4.x+window_text.size*6+20)>,,[dtp.work_graph] |
||
774 | |||
775 | add ecx,25*65536+8 |
||
776 | mcall 8, |
||
777 | button_text.size*6+11>,,0,[dtp.work_button] |
||
778 | |||
779 | shr ecx,16 |
||
780 | mov bx,cx |
||
781 | add ebx,0x00060006 |
||
782 | mcall 4,,[dtp.work_button_text],button_text,button_text.size |
||
783 | |||
784 | ret |
||
785 | |||
31 | halyavin | 786 | ; ********************************************* |
787 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
||
788 | ; ********************************************* |
||
789 | |||
790 | |||
791 | draw_window: |
||
792 | |||
793 | mov eax,12 ; function 12:tell os about windowdraw |
||
794 | mov ebx,1 ; 1, start of draw |
||
485 | heavyiron | 795 | mcall |
31 | halyavin | 796 | |
797 | mov eax,48 |
||
798 | mov ebx,3 |
||
799 | mov ecx,app_colours |
||
800 | mov edx,10*4 |
||
485 | heavyiron | 801 | mcall |
31 | halyavin | 802 | |
803 | mov eax,14 |
||
485 | heavyiron | 804 | mcall |
31 | halyavin | 805 | |
180 | heavyiron | 806 | ; DRAW WINDOW |
31 | halyavin | 807 | mov eax,0 ; function 0 : define and draw window |
51 | mikedld | 808 | mov ebx,110*65536+555 ; [x start] *65536 + [x size] |
809 | mov ecx,50*65536+255 ; [y start] *65536 + [y size] |
||
31 | halyavin | 810 | mov edx,[w_work] ; color of work area RRGGBB,8->color |
551 | spraid | 811 | or edx,0x14000000 |
485 | heavyiron | 812 | mov edi,title ; WINDOW LABEL |
813 | mcall |
||
31 | halyavin | 814 | |
815 | if lang eq ru |
||
51 | mikedld | 816 | load_w = (5*2+6*9) |
817 | save_w = (5*2+6*9) |
||
818 | flat_w = (5*2+6*7) |
||
819 | apply_w = (5*2+6*9) |
||
820 | else |
||
821 | load_w = (5*2+6*6) |
||
822 | save_w = (5*2+6*6) |
||
823 | flat_w = (5*2+6*4) |
||
824 | apply_w = (5*2+6*7) |
||
825 | end if |
||
826 | |||
180 | heavyiron | 827 | mov eax,8 ; FILENAME BUTTON |
51 | mikedld | 828 | mov ebx,5*65536+545 |
829 | mov ecx,212*65536+10 |
||
830 | mov edx,0x4000000B |
||
180 | heavyiron | 831 | mov esi,[w_grab_button] ; button color RRGGBB |
485 | heavyiron | 832 | mcall |
31 | halyavin | 833 | |
51 | mikedld | 834 | ; mov eax,8 ; LOAD BUTTON |
835 | mov ebx,15*65536+load_w |
||
836 | mov ecx,(30+18*11)*65536+14 |
||
31 | halyavin | 837 | mov edx,12 |
51 | mikedld | 838 | mov esi,[w_work_button] |
485 | heavyiron | 839 | mcall |
31 | halyavin | 840 | |
51 | mikedld | 841 | ; mov eax,8 ; SAVE BUTTON |
842 | add ebx,(load_w+2)*65536-load_w+save_w |
||
31 | halyavin | 843 | inc edx |
485 | heavyiron | 844 | mcall |
31 | halyavin | 845 | |
846 | ; mov eax,8 ; 3D |
||
179 | mikedld | 847 | ; mov ebx,15*65536+35 |
848 | ; mov ecx,(30+18*12)*65536+14 |
||
51 | mikedld | 849 | mov ebx,(340-t1.size*6-13)*65536+(5*2+6*4) |
31 | halyavin | 850 | inc edx |
485 | heavyiron | 851 | mcall |
179 | mikedld | 852 | |
31 | halyavin | 853 | ; mov eax,8 ; FLAT |
51 | mikedld | 854 | add ebx,(5*2+6*4+2)*65536-(5*2+6*4)+flat_w |
31 | halyavin | 855 | inc edx |
485 | heavyiron | 856 | mcall |
31 | halyavin | 857 | |
51 | mikedld | 858 | ; mov eax,8 ; APPLY BUTTON |
859 | add ebx,(flat_w+6+2)*65536-flat_w+apply_w |
||
860 | inc edx |
||
485 | heavyiron | 861 | mcall |
31 | halyavin | 862 | |
51 | mikedld | 863 | ; mov eax,8 ; LOAD SKIN BUTTON |
864 | mov ebx,(336+(555-335)/2-t2.size*6/2)*65536+load_w |
||
865 | inc edx |
||
485 | heavyiron | 866 | mcall |
51 | mikedld | 867 | |
868 | ; mov eax,8 ; APPLY SKIN BUTTON |
||
869 | add ebx,(load_w+6+2)*65536-load_w+apply_w |
||
870 | inc edx |
||
485 | heavyiron | 871 | mcall |
51 | mikedld | 872 | |
31 | halyavin | 873 | mov eax, 4 |
51 | mikedld | 874 | mov ebx, (339-t1.size*6-12)*65536+(30+18*11+4) |
31 | halyavin | 875 | mov ecx, [w_work_button_text] |
876 | mov edx, t1 |
||
877 | mov esi, t1.size |
||
485 | heavyiron | 878 | mcall |
31 | halyavin | 879 | |
51 | mikedld | 880 | mov ebx,(336+(555-335)/2-t2.size*6/2)*65536+(30+18*11+4) |
881 | mov edx,t2 |
||
882 | mov esi,t2.size |
||
485 | heavyiron | 883 | mcall |
31 | halyavin | 884 | |
179 | mikedld | 885 | ; mov eax, 4 |
886 | ; mov ebx, 277*65536+(30+18*12+4) |
||
887 | ; mov edx, t2 |
||
888 | ; mov esi, t2.size |
||
485 | heavyiron | 889 | ; mcall |
51 | mikedld | 890 | |
31 | halyavin | 891 | mov eax,38 ; R G B COLOR GLIDES |
51 | mikedld | 892 | mov ebx,266*65536+285 |
31 | halyavin | 893 | mov ecx,30*65536+30 |
894 | mov edx,0xff0000 |
||
895 | .newl: |
||
485 | heavyiron | 896 | mcall |
31 | halyavin | 897 | pusha |
898 | add ebx,20*65536+20 |
||
899 | shr edx,8 |
||
485 | heavyiron | 900 | mcall |
31 | halyavin | 901 | add ebx,20*65536+20 |
902 | shr edx,8 |
||
485 | heavyiron | 903 | mcall |
31 | halyavin | 904 | popa |
905 | sub edx,0x020000 |
||
906 | add ecx,0x00010001 |
||
907 | cmp ecx,158*65536+158 |
||
908 | jnz .newl |
||
909 | |||
910 | call draw_color |
||
911 | |||
912 | mov edx,31 ; BUTTON ROW |
||
913 | mov ebx,15*65536+200 |
||
51 | mikedld | 914 | mov ecx,30*65536+14 |
31 | halyavin | 915 | mov esi,[w_work_button] |
916 | newb: |
||
917 | mov eax,8 |
||
485 | heavyiron | 918 | mcall |
51 | mikedld | 919 | add ecx,18*65536 |
31 | halyavin | 920 | inc edx |
921 | cmp edx,40 |
||
922 | jbe newb |
||
923 | |||
51 | mikedld | 924 | mov ebx,15*65536+34 ; ROW OF TEXTS |
31 | halyavin | 925 | mov ecx,[w_work_button_text] |
926 | mov edx,text |
||
927 | mov esi,32 |
||
928 | newline: |
||
929 | mov eax,4 |
||
485 | heavyiron | 930 | mcall |
51 | mikedld | 931 | add ebx,18 |
31 | halyavin | 932 | add edx,32 |
933 | cmp [edx],byte 'x' |
||
934 | jne newline |
||
935 | |||
936 | call draw_colours |
||
937 | |||
51 | mikedld | 938 | mcall 13,<5,546>,<212,11>,[w_work] |
939 | mcall 13,<337,7>,<2,250>,[w_frame] |
||
940 | shr edx,1 |
||
941 | and edx,0x007F7F7F |
||
942 | mcall 38,<336,336>,<20,250> |
||
943 | add ebx,0x00080008 |
||
944 | mcall |
||
945 | sub ebx,0x00040004 |
||
946 | mcall ,,<0,255> |
||
947 | mcall ,<5,550>,<211,211> |
||
948 | add ecx,0x000C000C |
||
949 | mcall |
||
950 | |||
31 | halyavin | 951 | call print_text |
952 | |||
51 | mikedld | 953 | cmp dword[0x18000+SKIN_HEADER.ident],'SKIN' |
954 | jne @f |
||
955 | call draw_skin |
||
956 | @@: |
||
957 | |||
31 | halyavin | 958 | mov eax,12 ; function 12:tell os about windowdraw |
959 | mov ebx,2 ; 2, end of draw |
||
485 | heavyiron | 960 | mcall |
31 | halyavin | 961 | |
962 | ret |
||
963 | |||
964 | |||
965 | ; DATA AREA |
||
966 | |||
967 | lsz text,\ |
||
968 | ru, ' €ŒŠ€ ŽŠ€ ',\ |
||
969 | ru, ' Ž‹Ž‘€ ‡€ƒŽ‹Ž‚Š€ ',\ |
||
970 | ru, ' ŠŽŠ€ € Ž‹Ž‘… ‡€ƒŽ‹Ž‚Š€ ',\ |
||
971 | ru, ' ’…Š‘’ € ŠŽŠ… € ‡€ƒŽ‹Ž‚Š… ',\ |
||
972 | ru, ' ’…Š‘’ ‡€ƒŽ‹Ž‚ŽŠ€ ',\ |
||
973 | ru, ' €Ž—€Ÿ Ž‹€‘’œ ',\ |
||
974 | ru, ' ŠŽŠ€ ‚ €Ž—…‰ Ž‹€‘’ˆ ',\ |
||
975 | ru, ' ’…Š‘’ € ŠŽŠ… ',\ |
||
976 | ru, ' ’…Š‘’ ‚ €Ž—…‰ Ž‹€‘’ˆ ',\ |
||
977 | ru, ' ƒ€”ˆŠ€ ‚ €Ž—…‰ Ž‹€‘’ˆ ',\ |
||
978 | ru, ' ',\ |
||
51 | mikedld | 979 | ru, ' ‡€ƒ“‡ˆ’œ ‘Ž•€ˆ’œ ',\ |
31 | halyavin | 980 | ru, 'x',\ |
981 | en, ' WINDOW FRAME ',\ |
||
982 | en, ' WINDOW GRAB BAR ',\ |
||
983 | en, ' WINDOW GRAB BUTTON ',\ |
||
984 | en, ' WINDOW GRAB BUTTON TEXT ',\ |
||
985 | en, ' WINDOW GRAB TITLE ',\ |
||
986 | en, ' WINDOW WORK AREA ',\ |
||
987 | en, ' WINDOW WORK AREA BUTTON ',\ |
||
988 | en, ' WINDOW WORK AREA BUTTON TEXT ',\ |
||
989 | en, ' WINDOW WORK AREA TEXT ',\ |
||
990 | en, ' WINDOW WORK AREA GRAPH ',\ |
||
991 | en, ' ',\ |
||
51 | mikedld | 992 | en, ' LOAD SAVE ',\ |
274 | kaitz | 993 | en, 'x',\ |
994 | et, ' AKNA RAAM ',\ |
||
995 | et, ' AKNA HAARAMISE RIBA ',\ |
||
996 | et, ' AKNA HAARAMISE NUPP ',\ |
||
997 | et, ' AKNA HAARAMISE NUPU TEKST ',\ |
||
998 | et, ' AKNA HAARAMISE PEALKIRI ',\ |
||
999 | et, ' AKNA TÖÖPIIRKOND ',\ |
||
1000 | et, ' AKNA TÖÖPIIRKONNA NUPP ',\ |
||
1001 | et, ' AKNA TÖÖPIIRKONNA NUPPU TEKST ',\ |
||
1002 | et, ' AKNA TÖÖPIIRKONNA TEKST ',\ |
||
1003 | et, ' AKNA TÖÖPIIRKONNA GRAAFIKA ',\ |
||
1004 | et, ' ',\ |
||
1005 | et, ' LAADI SALVESTA ',\ |
||
1006 | et, 'x' |
||
31 | halyavin | 1007 | |
51 | mikedld | 1008 | lsz t1,\ |
1009 | ru, ' 3D ‹Ž‘Šˆ… ˆŒ…ˆ’œ ',\ |
||
274 | kaitz | 1010 | en, ' 3D FLAT APPLY ',\ |
1011 | et, ' 3D LAME KINNITA ' |
||
51 | mikedld | 1012 | |
31 | halyavin | 1013 | lsz t2,\ |
51 | mikedld | 1014 | ru, ' ‡€ƒ“‡ˆ’œ ˆŒ…ˆ’œ ',\ |
1015 | en, ' LOAD APPLY ',\ |
||
274 | kaitz | 1016 | et, ' LAADI KINNITA ' |
31 | halyavin | 1017 | |
179 | mikedld | 1018 | lsz caption_text,\ |
51 | mikedld | 1019 | ru, '‡ £®«®¢®ª',\ |
274 | kaitz | 1020 | en, 'Caption',\ |
1021 | et, 'Pealkiri' |
||
31 | halyavin | 1022 | |
179 | mikedld | 1023 | sz close_text,'x' |
1024 | |||
1025 | lsz window_text,\ |
||
1026 | ru, '’¥ªáâ ¢ ®ª¥',\ |
||
274 | kaitz | 1027 | en, 'Window text',\ |
1028 | et, 'Akna tekst' |
||
179 | mikedld | 1029 | |
1030 | lsz button_text,\ |
||
1031 | ru, '’¥ªáâ ª®¯ª¥',\ |
||
274 | kaitz | 1032 | en, 'Button text',\ |
1033 | et, 'Nupu tekst' |
||
179 | mikedld | 1034 | |
529 | spraid | 1035 | sz default_skn, '/sys/DEFAULT.SKN',0 |
31 | halyavin | 1036 | |
180 | heavyiron | 1037 | if lang eq ru |
485 | heavyiron | 1038 | title db '€‘’Ž‰Š€ ŽŠŽ',0 |
274 | kaitz | 1039 | else if lang eq et |
485 | heavyiron | 1040 | title db 'AKNA SEADED - VALI VÄRV JA VAJUTA OBJEKTILE',0 |
180 | heavyiron | 1041 | else |
485 | heavyiron | 1042 | title db 'WINDOWS SETTINGS - DEFINE COLOR AND CLICK ON TARGET',0 |
180 | heavyiron | 1043 | end if |
1044 | |||
1045 | |||
31 | halyavin | 1046 | color dd 0 |
1047 | |||
484 | diamond | 1048 | IncludeIGlobals |
1049 | |||
31 | halyavin | 1050 | I_END: |
1051 | |||
484 | diamond | 1052 | IncludeUGlobals |
1053 | |||
31 | halyavin | 1054 | read_info: |
1055 | .mode dd ? ; read |
||
1056 | .start_block dd ? ; first block |
||
1057 | .blocks dd ? ; 512 bytes |
||
1058 | .address dd ? |
||
1059 | .workarea dd ? |
||
1060 | fname rb 256+1 ; filename (+1 - for zero at the end) |
||
1061 | |||
1062 | virtual at read_info |
||
1063 | write_info: |
||
1064 | .mode dd ? |
||
1065 | rd 1 |
||
1066 | .bytes2write dd ? |
||
1067 | .address dd ? |
||
1068 | .workarea dd ? |
||
1069 | end virtual |
||
1070 | |||
51 | mikedld | 1071 | skin_info: |
1072 | .fname rb 256+1 |
||
1073 | |||
528 | diamond | 1074 | param rb 257 |
1075 | |||
1076 | align 4 |
||
31 | halyavin | 1077 | app_colours: |
1078 | |||
1079 | w_frame dd ? |
||
1080 | w_grab dd ? |
||
1081 | w_grab_button dd ? |
||
1082 | w_grab_button_text dd ? |
||
1083 | w_grab_text dd ? |
||
1084 | w_work dd ? |
||
1085 | w_work_button dd ? |
||
1086 | w_work_button_text dd ? |
||
1087 | w_work_text dd ? |
||
1088 | w_work_graph dd ? |
||
1089 | |||
1090 | color_table: |
||
1091 | times 10 dd ?211,211>5,550>0,255>20,250>336,336>2,250>337,7>212,11>5,546> |