Subversion Repositories Kolibri OS

Rev

Rev 532 | Rev 651 | 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. purge mov       ; decrease kpack'ed size
  17.  
  18. START:
  19.     mov  eax,48
  20.     mov  ebx,3
  21.     mov  ecx,sc
  22.     mov  edx,sizeof.system_colors
  23.     mcall
  24.  
  25.     cmp  dword [I_Param], 'BOOT'
  26.     jz   OnBoot
  27.  
  28.     call draw_window
  29.  
  30.     call load_texture
  31.     call draw_image
  32.  
  33.  
  34. still:
  35.  
  36.     mov  eax,10                 ; wait here for event
  37.     mcall
  38.  
  39.     dec  eax
  40.     jz   red
  41.     dec  eax
  42.     jnz  button
  43.  
  44.   key:
  45.     mov  al,2
  46.     mcall
  47.     jmp  still
  48.  
  49.   red:
  50.     call draw_window
  51.     jmp  still
  52.  
  53.   button:
  54.     mov  al,17
  55.     mcall
  56.  
  57.     shr  eax,8
  58.  
  59.     cmp  al,101                  ; tiled
  60.     jne  no101
  61.     mov  ecx,1
  62. setbgrmode:
  63.     mov  eax,15
  64.     mov  ebx,4
  65.     mcall
  66.     dec  ebx
  67.     mcall
  68.     jmp  still
  69.   no101:
  70.  
  71.     mov  ecx, 2
  72.     cmp  al, 102
  73.     jz   setbgrmode
  74.   no102:
  75.  
  76.     cmp  al,1           ; end program
  77.     jnz  no_end
  78.     or   eax,-1
  79.     mcall
  80.   no_end:
  81.  
  82.     cmp  al,11
  83.     jz   bg
  84.     cmp  al,12
  85.     jz   bg
  86.     cmp  al,13
  87.     jz   bg
  88.  
  89.     cmp  al,121
  90.     jb   no_bg_select
  91.     cmp  al,133
  92.     ja   no_bg_select
  93.     mov  eax,[arrays + (eax-121)*4]
  94.     mov  [usearray],eax
  95.     call load_texture
  96.     call draw_image
  97.     jmp  still
  98.   no_bg_select:
  99.  
  100.     cmp  al,14+20
  101.     jge  bg4
  102.  
  103.     jmp  bg2
  104.  
  105.  
  106. OnBoot:
  107.  
  108.     call load_texture
  109.  
  110.     mov  eax,15
  111.     mov  ebx,1
  112.     mov  ecx,256
  113.     mov  edx,256
  114.     mcall
  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
  121.     mcall
  122.  
  123.     dec  ebx
  124.     mov  ecx,2
  125.     mcall
  126.  
  127.     dec  ebx
  128.     mcall
  129.  
  130.     mov  eax,-1
  131.     mcall
  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.  
  166.     cmp  al,12
  167.     jnz  bb1
  168.     inc  edi
  169.   bb1:
  170.     cmp  al,13
  171.     jnz  bb2
  172.     inc  edi
  173.   bb2:
  174.  
  175.     mov  eax,15
  176.     mov  ebx,1
  177.     mov  ecx,256
  178.     mov  edx,256
  179.     mcall
  180.  
  181.     mov  ebx,5
  182.     mov  ecx,edi
  183.     mov  edx,0
  184.     mov  esi,256*256*3
  185.     mcall
  186.  
  187.     mov  ebx,3
  188.     mcall
  189.  
  190.     jmp  still
  191.  
  192.  
  193. ; colored background
  194.  
  195. bg2:
  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
  202.  
  203.     jmp  still
  204.  
  205.  
  206. ; shaped background
  207.  
  208. bg4:
  209.  
  210.     shl  eax,3
  211.     add  eax,shape - (14+20)*8
  212.     mov  ecx,[eax+0]
  213.     mov  edx,[eax+4]
  214.  
  215.     mov  eax,15
  216.     mov  ebx,1
  217.     mcall
  218.  
  219.     mov  ebx,3
  220.     mcall
  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.  
  238.   xor ecx,ecx        ; ycounter
  239.   xor edi,edi        ; pixel counter
  240.  
  241.   mov ebp,[usearray]
  242.  
  243.  ylup:
  244.     xor ebx,ebx
  245.  
  246.  xlup:
  247.   push edi
  248.   xor edi, edi
  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
  316.     mov  edx,14*65536+40;55
  317.     mcall
  318.  
  319.     ret
  320.  
  321.  
  322. y_add equ  19 ; 30
  323. y_s   equ  13
  324.  
  325. y_add2 equ  315 ;325
  326. set   equ  0 ;15
  327.  
  328. draw_window:
  329.  
  330.     mov eax, 12                   ; tell os about draw
  331.     mov ebx, 1
  332.     mcall
  333.  
  334.     xor eax, eax                    ; define and draw window
  335.     mov ebx, 220*65536+293
  336.     mov ecx, 50*65536+408
  337.     mov edx, [sc.work]
  338.     or  edx, 0x34000000
  339.     mov edi, title
  340.     mcall
  341.  
  342.     call draw_image
  343.  
  344.     mov  eax,8                     ; Blue button
  345.     mov  ebx,(set+190+27)*65536+17
  346.     mov  ecx,y_add*65536+y_s
  347.     mov  edx,11
  348.     mov  esi,0x005555bb
  349.     mcall
  350.     ;mov  eax,8                     ; Red button
  351.     mov  ebx,(set+208+27)*65536+17
  352.     mov  edx,12
  353.     mov  esi,0x00bb5555
  354.     mcall
  355.     ;mov  eax,8                     ; Green button
  356.     mov  ebx,(set+253)*65536+17
  357.     mov  edx,13
  358.     mov  esi,0x0055bb55
  359.     mcall
  360.  
  361.     ;mov  eax, 8                     ; tiled
  362.     mov  ebx, 90*65536+63
  363.     mov  ecx, y_add*65536+y_s
  364.     mov  edx, 101
  365.     mov  esi, [sc.work_button]
  366.     mcall
  367.  
  368.     ;mov  eax, 8                     ; stretch
  369.     mov  ebx, 154*65536+61
  370.     mov  edx, 102
  371.     mcall
  372.  
  373.     mov  eax, 4
  374.     mov  ebx, 215*65536+5
  375.     mov  ecx, [sc.work_text]
  376.     mov  edx, apply_text
  377.     mov  esi, apply_text.size
  378.     mcall
  379.  
  380.     mov  ebx, 14*65536+301
  381.     mov  edx, image_buttons_text
  382.     mov  esi, image_buttons_text.size
  383.     mcall
  384.  
  385.     mov  ebx, 14*65536+(y_add2+27)
  386.     mov  edx, simple_text
  387.     mov  esi, simple_text.size
  388.     mcall
  389.  
  390.     mov  ecx, (y_add2)*65536+20
  391.     mov  ebx, (13)*65536+25
  392.     mov  edx, 121
  393.     mov  esi, [sc.work_button]
  394.     mov  edi, 9
  395.     mov  eax, 8
  396.   @@:
  397.     mcall
  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
  406.     ;mov  eax, 8
  407.     mov  ebx, 13*65536+18
  408.     mov  ecx, y_add*65536+y_s
  409.   @@:
  410.     mcall
  411.     inc  edx
  412.     add  ebx, 19*65536
  413.     dec  edi
  414.     jnz  @b
  415.  
  416.  
  417.     ;-----------------------
  418.     mov  eax,8
  419.     mov  edx,14                            ; button number
  420.     mov  ebx,(13)*65536+17                 ; button start x & size
  421.     mov  ecx,(y_add2+40)*65536+14          ; button start y & size
  422.  
  423.   newcb:
  424.     mov  esi,[(edx-14)*4+colors]
  425.  
  426.     mcall
  427.  
  428.     inc  edx
  429.     add  ebx,20*65536
  430.  
  431.     cmp  edx,27
  432.     jnz  newcb
  433.     ;-----------------------
  434.  
  435.     mov  eax, 4
  436.     mov  ebx, 94*65536+4+y_add
  437.     mov  ecx, [sc.work_button_text]
  438.     mov  edx, la2
  439.     mov  esi, la2.size
  440.     mcall
  441.  
  442.     mov  eax,12
  443.     mov  ebx,2
  444.     mcall
  445.  
  446.     ret
  447.  
  448.  
  449.  
  450. ; DATA SECTION
  451.  
  452. if lang eq ru
  453.     title db 'Генератор фона рабочего стола',0
  454. else
  455.     title db 'Background',0
  456. end if
  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,\
  471.     ru, "ЗАМОСТИТЬ  РАСТЯНУТЬ",\
  472.     en, "  TILED     STRETCH"
  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
  489.     dd  0x111111
  490.     dd  0xcccccc
  491.  
  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
  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.  
  614. I_END:
  615. sc system_colors
  616.  
  617. I_Param:
  618.  
  619. image:
  620.  
  621.