Subversion Repositories Kolibri OS

Rev

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