Subversion Repositories Kolibri OS

Rev

Rev 484 | 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'
485 heavyiron 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
 
71
    mov  eax,48                 ; get current colors
72
    mov  ebx,3
73
    mov  ecx,color_table
74
    mov  edx,4*10
485 heavyiron 75
    mcall
31 halyavin 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
485 heavyiron 98
    mcall
31 halyavin 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
485 heavyiron 114
    mcall
31 halyavin 115
    jmp  still
116
 
117
  button:                       ; button
205 heavyiron 118
    mov  al,17                  ; get id
485 heavyiron 119
    mcall
31 halyavin 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
485 heavyiron 145
    mcall
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
485 heavyiron 164
    mcall
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
485 heavyiron 205
    mcall
31 halyavin 206
  noid1:
207
 
208
    jmp  still
209
 
210
 
211
draw_cursor:
212
 
213
    pusha
214
    mov  eax,37
215
    mov  ebx,2
485 heavyiron 216
    mcall
31 halyavin 217
 
218
    cmp  eax,0
219
    jne  dc1
220
    popa
221
    ret
222
 
223
 dc1:
224
 
225
    mov  eax,37
226
    mov  ebx,1
485 heavyiron 227
    mcall
31 halyavin 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
485 heavyiron 356
    mcall
31 halyavin 357
    cmp  eax,2
358
    jne  read_done
484 diamond 359
;    mov  eax,2
485 heavyiron 360
    mcall
31 halyavin 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]
485 heavyiron 418
    mcall
31 halyavin 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]
485 heavyiron 424
    mcall
31 halyavin 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]
485 heavyiron 431
    mcall
31 halyavin 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]
485 heavyiron 449
    mcall
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
485 heavyiron 493
        mov     ebx,[edi+SKIN_BITMAPS._data]
51 mikedld 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
485 heavyiron 789
    mcall
31 halyavin 790
 
791
    mov  eax,48
792
    mov  ebx,3
793
    mov  ecx,app_colours
794
    mov  edx,10*4
485 heavyiron 795
    mcall
31 halyavin 796
 
797
    mov  eax,14
485 heavyiron 798
    mcall
31 halyavin 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
485 heavyiron 806
    mov  edi,title                ; WINDOW LABEL
807
    mcall
31 halyavin 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
485 heavyiron 826
    mcall
31 halyavin 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]
485 heavyiron 833
    mcall
31 halyavin 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
485 heavyiron 838
    mcall
31 halyavin 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
485 heavyiron 845
    mcall
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
485 heavyiron 850
    mcall
31 halyavin 851
 
51 mikedld 852
;   mov  eax,8                    ; APPLY BUTTON
853
    add  ebx,(flat_w+6+2)*65536-flat_w+apply_w
854
    inc  edx
485 heavyiron 855
    mcall
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
485 heavyiron 860
    mcall
51 mikedld 861
 
862
;   mov  eax,8                    ; APPLY SKIN BUTTON
863
    add  ebx,(load_w+6+2)*65536-load_w+apply_w
864
    inc  edx
485 heavyiron 865
    mcall
51 mikedld 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
485 heavyiron 872
    mcall
31 halyavin 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
485 heavyiron 877
    mcall
31 halyavin 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
485 heavyiron 883
;    mcall
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:
485 heavyiron 890
    mcall
31 halyavin 891
    pusha
892
    add  ebx,20*65536+20
893
    shr  edx,8
485 heavyiron 894
    mcall
31 halyavin 895
    add  ebx,20*65536+20
896
    shr  edx,8
485 heavyiron 897
    mcall
31 halyavin 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
485 heavyiron 912
    mcall
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
485 heavyiron 924
    mcall
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
485 heavyiron 954
    mcall
31 halyavin 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
485 heavyiron 1032
  title db '€‘’Ž‰Š€ ŽŠŽ',0
274 kaitz 1033
else if lang eq et
485 heavyiron 1034
  title db 'AKNA SEADED - VALI VÄRV JA VAJUTA OBJEKTILE',0
180 heavyiron 1035
else
485 heavyiron 1036
  title db 'WINDOWS SETTINGS - DEFINE COLOR AND CLICK ON TARGET',0
180 heavyiron 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 ?