Subversion Repositories Kolibri OS

Rev

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