Subversion Repositories Kolibri OS

Rev

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