Subversion Repositories Kolibri OS

Rev

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,,,0x00FFFFFF
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,,,dword[dtp.work]
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,,dword[dtp.grab_text],caption_text,caption_text.size
575
 
576
        mcall   8,,,0,[dtp.grab_button]
577
        mcall   4,,dword[dtp.grab_button_text],close_text,close_text.size
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,,,[dtp.frame]
593
        add     ecx,(wnd2.height-5)*65536
594
        mcall
595
        mcall   ,,
596
        add     ebx,(wnd2.width-5)*65536
597
        mcall
598
        mcall   ,,,dword[dtp.work]
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,,dword[dtp.grab_text],caption_text,caption_text.size
614
 
615
        mcall   8,,,0,[dtp.grab_button]
616
        mcall   4,,dword[dtp.grab_button_text],close_text,close_text.size
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,,,[edi+SKIN_PARAMS.colors_1.frame]
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   ,,,dword[dtp.work]
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,,,[edi+SKIN_PARAMS.colors.frame]
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   ,,,dword[dtp.work]
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 ?