Subversion Repositories Kolibri OS

Rev

Rev 532 | Rev 651 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
205 heavyiron 1
;
2
;    BACKGROUND SET  - Compile with fasm
3
;
4
  use32
5
  org     0x0
6
  db      'MENUET01'    ; 8 byte id
7
  dd      0x01          ; version
8
  dd      START         ; program start
9
  dd      I_END         ; image size
451 heavyiron 10
  dd      0x80000       ; reguired amount of memory
205 heavyiron 11
  dd      0x80000       ; stack pointer
12
  dd      I_Param,0
13
 
14
  include 'lang.inc'
485 heavyiron 15
  include '..\..\..\macros.inc'
532 diamond 16
purge mov       ; decrease kpack'ed size
205 heavyiron 17
 
18
START:
451 heavyiron 19
    mov  eax,48
20
    mov  ebx,3
21
    mov  ecx,sc
22
    mov  edx,sizeof.system_colors
23
    mcall
205 heavyiron 24
 
532 diamond 25
    cmp  dword [I_Param], 'BOOT'
26
    jz   OnBoot
27
 
205 heavyiron 28
    call draw_window
29
 
30
    call load_texture
31
    call draw_image
32
 
451 heavyiron 33
 
205 heavyiron 34
still:
35
 
36
    mov  eax,10                 ; wait here for event
485 heavyiron 37
    mcall
38
 
39
    dec  eax
205 heavyiron 40
    jz   red
485 heavyiron 41
    dec  eax
42
    jnz  button
205 heavyiron 43
 
44
  key:
485 heavyiron 45
    mov  al,2
46
    mcall
205 heavyiron 47
    jmp  still
48
 
49
  red:
50
    call draw_window
51
    jmp  still
52
 
53
  button:
485 heavyiron 54
    mov  al,17
55
    mcall
205 heavyiron 56
 
57
    shr  eax,8
58
 
532 diamond 59
    cmp  al,101                  ; tiled
205 heavyiron 60
    jne  no101
532 diamond 61
    mov  ecx,1
62
setbgrmode:
205 heavyiron 63
    mov  eax,15
64
    mov  ebx,4
485 heavyiron 65
    mcall
532 diamond 66
    dec  ebx
485 heavyiron 67
    mcall
205 heavyiron 68
    jmp  still
69
  no101:
70
 
532 diamond 71
    mov  ecx, 2
72
    cmp  al, 102
73
    jz   setbgrmode
205 heavyiron 74
  no102:
75
 
532 diamond 76
    cmp  al,1           ; end program
485 heavyiron 77
    jnz  no_end
205 heavyiron 78
    or   eax,-1
485 heavyiron 79
    mcall
80
  no_end:
205 heavyiron 81
 
532 diamond 82
    cmp  al,11
205 heavyiron 83
    jz   bg
532 diamond 84
    cmp  al,12
205 heavyiron 85
    jz   bg
532 diamond 86
    cmp  al,13
205 heavyiron 87
    jz   bg
88
 
532 diamond 89
    cmp  al,121
205 heavyiron 90
    jb   no_bg_select
532 diamond 91
    cmp  al,133
92
    ja   no_bg_select
93
    mov  eax,[arrays + (eax-121)*4]
205 heavyiron 94
    mov  [usearray],eax
95
    call load_texture
96
    call draw_image
97
    jmp  still
98
  no_bg_select:
99
 
532 diamond 100
    cmp  al,14+20
205 heavyiron 101
    jge  bg4
102
 
103
    jmp  bg2
104
 
105
 
532 diamond 106
OnBoot:
205 heavyiron 107
 
108
    call load_texture
109
 
110
    mov  eax,15
111
    mov  ebx,1
112
    mov  ecx,256
113
    mov  edx,256
485 heavyiron 114
    mcall
205 heavyiron 115
 
116
    mov  ebx,5
117
    mov  ecx,0x40000 ; <<< 0x40000 for blue, 0x40000+1 for red,
118
                       ; <<< 0x40000+2 for green background at boot
119
    mov  edx,0
120
    mov  esi,256*3*256
485 heavyiron 121
    mcall
205 heavyiron 122
 
532 diamond 123
    dec  ebx
205 heavyiron 124
    mov  ecx,2
485 heavyiron 125
    mcall
205 heavyiron 126
 
532 diamond 127
    dec  ebx
485 heavyiron 128
    mcall
205 heavyiron 129
 
130
    mov  eax,-1
485 heavyiron 131
    mcall
205 heavyiron 132
 
133
 
134
 
135
set_picture:
136
 
137
    mov  eax,image+99-3*16
138
    mov  ebx,0x40000+255*3+255*3*256
139
  newpix:
140
    mov  ecx,[eax]
141
    mov  [ebx],cx
142
    shr  ecx,16
143
    mov  [ebx+2],cl
144
    add  eax,3
145
    sub  ebx,3
146
    cmp  ebx,0x40002
147
    jge  newpix
148
 
149
    ret
150
 
151
 
152
load_texture:
153
 
154
    call  gentexture
155
    call  set_picture
156
 
157
    ret
158
 
159
 
160
; set background
161
 
162
bg:
163
 
164
    mov  edi,0x40000
165
 
532 diamond 166
    cmp  al,12
205 heavyiron 167
    jnz  bb1
532 diamond 168
    inc  edi
205 heavyiron 169
  bb1:
532 diamond 170
    cmp  al,13
205 heavyiron 171
    jnz  bb2
532 diamond 172
    inc  edi
205 heavyiron 173
  bb2:
174
 
175
    mov  eax,15
176
    mov  ebx,1
177
    mov  ecx,256
178
    mov  edx,256
485 heavyiron 179
    mcall
205 heavyiron 180
 
181
    mov  ebx,5
182
    mov  ecx,edi
183
    mov  edx,0
184
    mov  esi,256*256*3
485 heavyiron 185
    mcall
205 heavyiron 186
 
187
    mov  ebx,3
485 heavyiron 188
    mcall
205 heavyiron 189
 
190
    jmp  still
191
 
192
 
193
; colored background
194
 
195
bg2:
532 diamond 196
        mov     edi, eax
197
        mcall   15,4,1
198
        mcall   ,1,,1
199
        lea     ecx, [(edi-14)*3+fill]
200
        mcall   ,5,,0,3*1*1
201
        mcall   ,3
205 heavyiron 202
 
203
    jmp  still
204
 
205
 
206
; shaped background
207
 
208
bg4:
209
 
210
    shl  eax,3
532 diamond 211
    add  eax,shape - (14+20)*8
205 heavyiron 212
    mov  ecx,[eax+0]
213
    mov  edx,[eax+4]
214
 
215
    mov  eax,15
216
    mov  ebx,1
485 heavyiron 217
    mcall
205 heavyiron 218
 
219
    mov  ebx,3
485 heavyiron 220
    mcall
205 heavyiron 221
 
222
    jmp  still
223
 
224
 
225
; *********************************************
226
; ******* CELLULAR TEXTURE GENERATION *********
227
; **** by Cesare Castiglia (dixan/sk/mfx) *****
228
; ********* dixan@spinningkids.org   **********
229
; *********************************************
230
; * the algorythm is kinda simple. the color  *
231
; * component for every pixel is evaluated    *
232
; * according to the squared distance from    *
233
; * the closest point in 'ptarray'.           *
234
; *********************************************
235
 
236
gentexture:
237
 
532 diamond 238
  xor ecx,ecx        ; ycounter
239
  xor edi,edi        ; pixel counter
205 heavyiron 240
 
241
  mov ebp,[usearray]
242
 
243
 ylup:
532 diamond 244
    xor ebx,ebx
205 heavyiron 245
 
246
 xlup:
247
  push edi
532 diamond 248
  xor edi, edi
205 heavyiron 249
  mov esi, 512000000           ; abnormous initial value :)
250
 
251
 pixlup:
252
   push esi
253
   mov eax,ebx                 ; evaluate first distance
254
   sub eax, [ebp+edi]          ; x-x1
255
   call wrappit
256
   imul eax
257
   mov esi, eax                ; (x-x1)^2
258
   mov eax, ecx
259
   add edi,4
260
   sub eax, [ebp+edi]          ; y-y1
261
   call wrappit
262
   imul eax                    ; (y-y1)^2
263
   add eax,esi                 ; (x-x1)^2+(y-y1)^2
264
   pop esi
265
 
266
   cmp esi,eax
267
   jb  ok                      ; compare and take the smaller one
268
   mov esi,eax
269
 
270
  ok:
271
   add edi,4
272
   cmp [ebp+edi],dword 777
273
   jne pixlup
274
 
275
   mov eax,esi                 ; now evaluate color...
276
 
277
   mov edi,24            ; 50 = max shaded distance
278
   idiv edi
279
 
280
   pop edi
281
   mov [image+51+edi],eax
282
   add edi,3
283
 
284
  add ebx,1              ; bounce x loop
285
  cmp ebx,256            ; xsize
286
  jne xlup
287
 
288
  add ecx,1
289
  cmp ecx,256            ; ysize
290
  jne ylup
291
 
292
  ret
293
 
294
wrappit:
295
  cmp eax,0              ; this makes the texture wrap
296
  jg noabs
297
  neg eax
298
  noabs:
299
  cmp eax,128
300
  jb nowrap
301
  neg eax
302
  add eax,256
303
  nowrap:
304
  ret
305
 
306
; *********************************************
307
; ******* WINDOW DEFINITIONS AND DRAW *********
308
; *********************************************
309
 
310
 
311
draw_image:
312
 
313
    mov  eax,7
314
    mov  ebx,0x40000
315
    mov  ecx,256*65536+255
451 heavyiron 316
    mov  edx,14*65536+40;55
485 heavyiron 317
    mcall
205 heavyiron 318
 
319
    ret
320
 
321
 
451 heavyiron 322
y_add  equ  19 ; 30
205 heavyiron 323
y_s    equ  13
324
 
451 heavyiron 325
y_add2 equ  315 ;325
205 heavyiron 326
set    equ  0 ;15
327
 
328
draw_window:
329
 
330
    mov eax, 12                   ; tell os about draw
331
    mov ebx, 1
485 heavyiron 332
    mcall
205 heavyiron 333
 
451 heavyiron 334
    xor eax, eax                    ; define and draw window
205 heavyiron 335
    mov ebx, 220*65536+293
336
    mov ecx, 50*65536+408
451 heavyiron 337
    mov edx, [sc.work]
551 spraid 338
    or  edx, 0x34000000
485 heavyiron 339
    mov edi, title
340
    mcall
205 heavyiron 341
 
342
    call draw_image
343
 
344
    mov  eax,8                     ; Blue button
451 heavyiron 345
    mov  ebx,(set+190+27)*65536+17
205 heavyiron 346
    mov  ecx,y_add*65536+y_s
347
    mov  edx,11
451 heavyiron 348
    mov  esi,0x005555bb
485 heavyiron 349
    mcall
451 heavyiron 350
    ;mov  eax,8                     ; Red button
351
    mov  ebx,(set+208+27)*65536+17
205 heavyiron 352
    mov  edx,12
451 heavyiron 353
    mov  esi,0x00bb5555
485 heavyiron 354
    mcall
451 heavyiron 355
    ;mov  eax,8                     ; Green button
356
    mov  ebx,(set+253)*65536+17
205 heavyiron 357
    mov  edx,13
451 heavyiron 358
    mov  esi,0x0055bb55
485 heavyiron 359
    mcall
205 heavyiron 360
 
451 heavyiron 361
    ;mov  eax, 8                     ; tiled
362
    mov  ebx, 90*65536+63
205 heavyiron 363
    mov  ecx, y_add*65536+y_s
364
    mov  edx, 101
451 heavyiron 365
    mov  esi, [sc.work_button]
485 heavyiron 366
    mcall
205 heavyiron 367
 
451 heavyiron 368
    ;mov  eax, 8                     ; stretch
369
    mov  ebx, 154*65536+61
205 heavyiron 370
    mov  edx, 102
485 heavyiron 371
    mcall
205 heavyiron 372
 
451 heavyiron 373
    mov  eax, 4
374
    mov  ebx, 215*65536+5
375
    mov  ecx, [sc.work_text]
205 heavyiron 376
    mov  edx, apply_text
377
    mov  esi, apply_text.size
485 heavyiron 378
    mcall
205 heavyiron 379
 
451 heavyiron 380
    mov  ebx, 14*65536+301
205 heavyiron 381
    mov  edx, image_buttons_text
382
    mov  esi, image_buttons_text.size
485 heavyiron 383
    mcall
205 heavyiron 384
 
451 heavyiron 385
    mov  ebx, 14*65536+(y_add2+27)
205 heavyiron 386
    mov  edx, simple_text
387
    mov  esi, simple_text.size
485 heavyiron 388
    mcall
205 heavyiron 389
 
390
    mov  ecx, (y_add2)*65536+20
451 heavyiron 391
    mov  ebx, (13)*65536+25
205 heavyiron 392
    mov  edx, 121
451 heavyiron 393
    mov  esi, [sc.work_button]
205 heavyiron 394
    mov  edi, 9
395
    mov  eax, 8
396
  @@:
485 heavyiron 397
    mcall
205 heavyiron 398
    add  ebx, 29*65536
399
    inc  edx
400
    dec  edi
401
    jnz  @b
402
 
403
 
404
    mov  edx, 34+4
405
    mov  edi, 4
485 heavyiron 406
    ;mov  eax, 8
451 heavyiron 407
    mov  ebx, 13*65536+18
205 heavyiron 408
    mov  ecx, y_add*65536+y_s
409
  @@:
485 heavyiron 410
    mcall
205 heavyiron 411
    inc  edx
412
    add  ebx, 19*65536
413
    dec  edi
414
    jnz  @b
415
 
416
 
417
    ;-----------------------
485 heavyiron 418
    mov  eax,8
451 heavyiron 419
    mov  edx,14                            ; button number
420
    mov  ebx,(13)*65536+17                 ; button start x & size
205 heavyiron 421
    mov  ecx,(y_add2+40)*65536+14          ; button start y & size
422
 
423
  newcb:
424
    mov  esi,[(edx-14)*4+colors]
425
 
485 heavyiron 426
    mcall
205 heavyiron 427
 
428
    inc  edx
429
    add  ebx,20*65536
430
 
431
    cmp  edx,27
432
    jnz  newcb
433
    ;-----------------------
434
 
435
    mov  eax, 4
451 heavyiron 436
    mov  ebx, 94*65536+4+y_add
437
    mov  ecx, [sc.work_button_text]
205 heavyiron 438
    mov  edx, la2
439
    mov  esi, la2.size
485 heavyiron 440
    mcall
205 heavyiron 441
 
442
    mov  eax,12
443
    mov  ebx,2
485 heavyiron 444
    mcall
205 heavyiron 445
 
446
    ret
447
 
448
 
449
 
450
; DATA SECTION
451
 
451 heavyiron 452
if lang eq ru
485 heavyiron 453
    title db 'Генератор фона рабочего стола',0
451 heavyiron 454
else
485 heavyiron 455
    title db 'Background',0
451 heavyiron 456
end if
205 heavyiron 457
 
458
lsz apply_text,\
459
    ru, "Применить:",\
460
    en, "Apply:"
461
 
462
lsz image_buttons_text,\
463
    ru, "Выберите образец:",\
464
    en, "Select pattern:"
465
 
466
lsz simple_text,\
467
    ru, "Одноцветный фон:",\
468
    en, "Single-color background:"
469
 
470
lsz la2,\
451 heavyiron 471
    ru, "ЗАМОСТИТЬ  РАСТЯНУТЬ",\
472
    en, "  TILED     STRETCH"
205 heavyiron 473
 
474
 
475
xx   db    'x'
476
 
477
colors:
478
    dd  0x770000
479
    dd  0x007700
480
    dd  0x000077
481
    dd  0x777700
482
    dd  0x770077
483
    dd  0x007777
484
    dd  0x777777
485
    dd  0x335577
486
    dd  0x775533
487
    dd  0x773355
488
    dd  0x553377
485 heavyiron 489
    dd  0x111111
205 heavyiron 490
    dd  0xcccccc
491
 
485 heavyiron 492
fill:
493
    db  0x00,0x00,0x77
494
    db  0x00,0x77,0x00
495
    db  0x77,0x00,0x00
496
    db  0x00,0x77,0x77
497
    db  0x77,0x00,0x77
498
    db  0x77,0x77,0x00
499
    db  0x77,0x77,0x77
500
    db  0x77,0x55,0x33
501
    db  0x33,0x55,0x77
502
    db  0x55,0x33,0x77
503
    db  0x77,0x33,0x55
504
    db  0x11,0x11,0x11
505
    db  0xcc,0xcc,0xcc
205 heavyiron 506
 
507
shape:
508
 
509
    dd  1024,64
510
    dd  1024,32
511
    dd  2048,32
512
    dd  4096,32
513
 
514
    dd  512,16
515
    dd  1024,16
516
    dd  2048,16
517
    dd  4096,16
518
 
519
    dd  64,32
520
    dd  64,16
521
    dd  32,32
522
    dd  8,8
523
    dd  16,16
524
    dd  64,64
525
 
526
usearray dd ptarray
527
 
528
arrays dd ptarray,ptarray2,ptarray3,ptarray4,ptarray5,ptarray6
529
        dd ptarray7,ptarray8,ptarray9
530
 
531
ptarray:
532
 
533
    dd  150,50
534
    dd  120,30
535
    dd  44,180
536
    dd  50,66
537
    dd  27,6
538
    dd  95,212
539
    dd  128,177
540
    dd  201,212
541
    dd  172,201
542
    dd  250,100
543
    dd  24,221
544
    dd  11,123
545
    dd  248,32
546
    dd  34,21
547
    dd  777     ; <- end of array
548
 
549
ptarray2:
550
 
551
    dd  0,0,50,50,100,100,150,150,200,200,250,250
552
    dd  50,150,150,50,200,100,100,200
553
    dd  777
554
 
555
ptarray3:
556
 
557
    dd  55,150,150,55,200,105,105,200
558
    dd  30,30,220,220
559
    dd  777
560
 
561
ptarray4:
562
 
563
    dd  196,0,196,64,196,128,196,196
564
    dd  64,32,64,96,64,150,64,228
565
    dd  777
566
 
567
ptarray5:
568
 
569
    dd  196,0,196,64,196,128,196,196
570
    dd  64,0,64,64,64,128,64,196
571
    dd  777
572
 
573
ptarray6:
574
 
575
    dd  49,49,128,50,210,50
576
    dd  50,128,128,128,210,128
577
    dd  50,210,128,210,210,210
578
 
579
    dd  777
580
 
581
ptarray7:
582
 
583
    dd  0,0
584
    dd  196,196,64,64
585
    dd  128,0
586
    dd  0,128
587
    dd  64,64,196,64
588
    dd  196,196,64,196
589
    dd  128,128
590
 
591
    dd  777
592
 
593
ptarray8:
594
 
595
    dd  0, 128
596
    dd  0, 128
597
    dd  128, 0
598
    dd  0, 128
599
    dd  128, 0
600
    dd  0, 128
601
    dd  128, 0
602
    dd  0, 128
603
    dd  128, 0
604
    dd  128, 128
605
 
606
    dd  777
607
 
608
ptarray9:
609
 
610
 
611
     dd  0,248,64,128,128,64,196,48,160,160,94,224,240,96,5,5,777
612
 
613
 
460 diamond 614
I_END:
615
sc system_colors
616
 
205 heavyiron 617
I_Param:
618
 
619
image:
620