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