Subversion Repositories Kolibri OS

Rev

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