Subversion Repositories Kolibri OS

Rev

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