Subversion Repositories Kolibri OS

Rev

Rev 460 | Rev 532 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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
  10.   dd      0x80000       ; reguired amount of memory
  11.   dd      0x80000       ; stack pointer
  12.   dd      I_Param,0
  13.  
  14.   include 'lang.inc'
  15.   include '..\..\..\macros.inc'
  16.  
  17. START:
  18.     mov  eax,48
  19.     mov  ebx,3
  20.     mov  ecx,sc
  21.     mov  edx,sizeof.system_colors
  22.     mcall
  23.  
  24.     call check_parameters
  25.     call draw_window
  26.  
  27.     call load_texture
  28.     call draw_image
  29.  
  30.  
  31. still:
  32.  
  33.     mov  eax,10                 ; wait here for event
  34.     mcall
  35.  
  36.     dec  eax
  37.     jz   red
  38.     dec  eax
  39.     jnz  button
  40.  
  41.   key:
  42.     mov  al,2
  43.     mcall
  44.     jmp  still
  45.  
  46.   red:
  47.     call draw_window
  48.     jmp  still
  49.  
  50.   button:
  51.     mov  al,17
  52.     mcall
  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
  61.     mcall
  62.     mov  eax,15
  63.     mov  ebx,3
  64.     mcall
  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
  73.     mcall
  74.     mov  eax,15
  75.     mov  ebx,3
  76.     mcall
  77.     jmp  still
  78.   no102:
  79.  
  80.     cmp  eax,1           ; end program
  81.     jnz  no_end
  82.     or   eax,-1
  83.     mcall
  84.   no_end:
  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
  126.     mcall
  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
  134.     mcall
  135.  
  136.     mov  eax,15
  137.     mov  ebx,4
  138.     mov  ecx,2
  139.     mcall
  140.  
  141.     mov  eax,15
  142.     mov  ebx,3
  143.     mcall
  144.  
  145.     mov  eax,-1
  146.     mcall
  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
  194.     mcall
  195.  
  196.     mov  eax,15
  197.     mov  ebx,5
  198.     mov  ecx,edi
  199.     mov  edx,0
  200.     mov  esi,256*256*3
  201.     mcall
  202.  
  203.     mov  eax,15
  204.     mov  ebx,3
  205.     mcall
  206.  
  207.     jmp  still
  208.  
  209.  
  210. ; colored background
  211.  
  212. bg2:
  213.  
  214.     push eax
  215.  
  216.     mcall 15,4,1
  217.  
  218.     mov  eax,15
  219.     mov  ebx,1
  220.     mov  ecx,1
  221.     mov  edx,1
  222.     mcall
  223.  
  224.     pop  eax
  225.     sub  eax,14
  226.     imul eax,3
  227.  
  228.     mov  ecx,fill
  229.     add  ecx,eax
  230.  
  231.     mov  eax,15
  232.     mov  ebx,5
  233.     xor  edx,edx
  234.     mov  esi,3*1*1
  235.     mcall
  236.  
  237.     mov  eax,15
  238.     mov  ebx,3
  239.     mcall
  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
  256.     mcall
  257.  
  258.     mov  eax,15
  259.     mov  ebx,3
  260.     mcall
  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
  356.     mov  edx,14*65536+40;55
  357.     mcall
  358.  
  359.     ret
  360.  
  361.  
  362. y_add equ  19 ; 30
  363. y_s   equ  13
  364.  
  365. y_add2 equ  315 ;325
  366. set   equ  0 ;15
  367.  
  368. draw_window:
  369.  
  370.     mov eax, 12                   ; tell os about draw
  371.     mov ebx, 1
  372.     mcall
  373.  
  374.     xor eax, eax                    ; define and draw window
  375.     mov ebx, 220*65536+293
  376.     mov ecx, 50*65536+408
  377.     mov edx, [sc.work]
  378.     or  edx, 0x33000000
  379.     mov edi, title
  380.     mcall
  381.  
  382.     call draw_image
  383.  
  384.     mov  eax,8                     ; Blue button
  385.     mov  ebx,(set+190+27)*65536+17
  386.     mov  ecx,y_add*65536+y_s
  387.     mov  edx,11
  388.     mov  esi,0x005555bb
  389.     mcall
  390.     ;mov  eax,8                     ; Red button
  391.     mov  ebx,(set+208+27)*65536+17
  392.     mov  edx,12
  393.     mov  esi,0x00bb5555
  394.     mcall
  395.     ;mov  eax,8                     ; Green button
  396.     mov  ebx,(set+253)*65536+17
  397.     mov  edx,13
  398.     mov  esi,0x0055bb55
  399.     mcall
  400.  
  401.     ;mov  eax, 8                     ; tiled
  402.     mov  ebx, 90*65536+63
  403.     mov  ecx, y_add*65536+y_s
  404.     mov  edx, 101
  405.     mov  esi, [sc.work_button]
  406.     mcall
  407.  
  408.     ;mov  eax, 8                     ; stretch
  409.     mov  ebx, 154*65536+61
  410.     mov  edx, 102
  411.     mcall
  412.  
  413.     mov  eax, 4
  414.     mov  ebx, 215*65536+5
  415.     mov  ecx, [sc.work_text]
  416.     mov  edx, apply_text
  417.     mov  esi, apply_text.size
  418.     mcall
  419.  
  420.     mov  ebx, 14*65536+301
  421.     mov  edx, image_buttons_text
  422.     mov  esi, image_buttons_text.size
  423.     mcall
  424.  
  425.     mov  ebx, 14*65536+(y_add2+27)
  426.     mov  edx, simple_text
  427.     mov  esi, simple_text.size
  428.     mcall
  429.  
  430.     mov  ecx, (y_add2)*65536+20
  431.     mov  ebx, (13)*65536+25
  432.     mov  edx, 121
  433.     mov  esi, [sc.work_button]
  434.     mov  edi, 9
  435.     mov  eax, 8
  436.   @@:
  437.     mcall
  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
  446.     ;mov  eax, 8
  447.     mov  ebx, 13*65536+18
  448.     mov  ecx, y_add*65536+y_s
  449.   @@:
  450.     mcall
  451.     inc  edx
  452.     add  ebx, 19*65536
  453.     dec  edi
  454.     jnz  @b
  455.  
  456.  
  457.     ;-----------------------
  458.     mov  eax,8
  459.     mov  edx,14                            ; button number
  460.     mov  ebx,(13)*65536+17                 ; button start x & size
  461.     mov  ecx,(y_add2+40)*65536+14          ; button start y & size
  462.  
  463.   newcb:
  464.     mov  esi,[(edx-14)*4+colors]
  465.  
  466.     mcall
  467.  
  468.     inc  edx
  469.     add  ebx,20*65536
  470.  
  471.     cmp  edx,27
  472.     jnz  newcb
  473.     ;-----------------------
  474.  
  475.     mov  eax, 4
  476.     mov  ebx, 94*65536+4+y_add
  477.     mov  ecx, [sc.work_button_text]
  478.     mov  edx, la2
  479.     mov  esi, la2.size
  480.     mcall
  481.  
  482.     mov  eax,12
  483.     mov  ebx,2
  484.     mcall
  485.  
  486.     ret
  487.  
  488.  
  489.  
  490. ; DATA SECTION
  491.  
  492. if lang eq ru
  493.     title db 'Генератор фона рабочего стола',0
  494. else
  495.     title db 'Background',0
  496. end if
  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,\
  511.     ru, "ЗАМОСТИТЬ  РАСТЯНУТЬ",\
  512.     en, "  TILED     STRETCH"
  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
  529.     dd  0x111111
  530.     dd  0xcccccc
  531.  
  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
  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.  
  654. I_END:
  655. sc system_colors
  656.  
  657. I_Param:
  658.  
  659. image:
  660.  
  661.