Subversion Repositories Kolibri OS

Rev

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