Subversion Repositories Kolibri OS

Rev

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