Subversion Repositories Kolibri OS

Rev

Rev 205 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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