Subversion Repositories Kolibri OS

Rev

Rev 1092 | 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      mem           ; reguired amount of memory
  11.   dd      mem           ; 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,image + 0 ; <<< +0 for blue, +1 for red,
  118.                        ; <<< +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. ; set background
  135.  
  136. bg:
  137.  
  138.     mov  edi,image
  139.  
  140.     cmp  al,12
  141.     jb   bb1
  142.     inc  edi
  143.   bb1:
  144.     cmp  al,13
  145.     jb   bb2
  146.     inc  edi
  147.   bb2:
  148.  
  149.     mov  eax,15
  150.     mov  ebx,1
  151.     mov  ecx,256
  152.     mov  edx,256
  153.     mcall
  154.  
  155.     mov  ebx,5
  156.     mov  ecx,edi
  157.     mov  edx,0
  158.     mov  esi,256*256*3
  159.     mcall
  160.  
  161.     mov  ebx,3
  162.     mcall
  163.  
  164.     jmp  still
  165.  
  166.  
  167. ; colored background
  168.  
  169. bg2:
  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
  176.  
  177.     jmp  still
  178.  
  179.  
  180. ; shaped background
  181.  
  182. bg4:
  183.  
  184.     shl  eax,3
  185.     add  eax,shape - (14+20)*8
  186.     mov  ecx,[eax+0]
  187.     mov  edx,[eax+4]
  188.  
  189.     mov  eax,15
  190.     mov  ebx,1
  191.     mcall
  192.  
  193.     mov  ebx,3
  194.     mcall
  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.  
  210. load_texture:
  211. gentexture:
  212.  
  213.   xor ecx,ecx        ; ycounter
  214.   xor edi,edi        ; pixel counter
  215.  
  216.   mov ebp,[usearray]
  217.  
  218.  ylup:
  219.     xor ebx,ebx
  220.  
  221.  xlup:
  222.   push edi
  223.   xor edi, edi
  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
  256.    mov [image+edi],eax
  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
  289.     mov  ebx,image
  290.     mov  ecx,256*65536+255
  291.     mov  edx,14*65536+40;55
  292.     mcall
  293.  
  294.     ret
  295.  
  296.  
  297. y_add  equ  19 ; 30
  298. y_s    equ  13
  299.  
  300. y_add2 equ  315 ;325
  301. set    equ  0 ;15
  302.  
  303. draw_window:
  304.  
  305.     mov eax, 12                   ; tell os about draw
  306.     mov ebx, 1
  307.     mcall
  308.  
  309.     xor eax, eax                    ; define and draw window
  310.     mov ebx, 220*65536+293
  311.     mov ecx, 50*65536+408
  312.     mov edx, [sc.work]
  313.     or  edx, 0x34000000
  314.     mov edi, title
  315.     mcall
  316.  
  317.     call draw_image
  318.  
  319.     mov  eax,8                     ; Blue button
  320.     mov  ebx,(set+190+27)*65536+17
  321.     mov  ecx,y_add*65536+y_s
  322.     mov  edx,11
  323.     mov  esi,0x005555bb
  324.     mcall
  325.     ;mov  eax,8                     ; Red button
  326.     mov  ebx,(set+208+27)*65536+17
  327.     mov  edx,12
  328.     mov  esi,0x00bb5555
  329.     mcall
  330.     ;mov  eax,8                     ; Green button
  331.     mov  ebx,(set+253)*65536+17
  332.     mov  edx,13
  333.     mov  esi,0x0055bb55
  334.     mcall
  335.  
  336.     ;mov  eax, 8                     ; tiled
  337.     mov  ebx, 90*65536+63
  338.     mov  ecx, y_add*65536+y_s
  339.     mov  edx, 101
  340.     mov  esi, [sc.work_button]
  341.     mcall
  342.  
  343.     ;mov  eax, 8                     ; stretch
  344.     mov  ebx, 154*65536+61
  345.     mov  edx, 102
  346.     mcall
  347.  
  348.     mov  eax, 4
  349.     mov  ebx, 215*65536+5
  350.     mov  ecx, [sc.work_text]
  351.     mov  edx, apply_text
  352.     mov  esi, apply_text.size
  353.     mcall
  354.  
  355.     mov  ebx, 14*65536+301
  356.     mov  edx, image_buttons_text
  357.     mov  esi, image_buttons_text.size
  358.     mcall
  359.  
  360.     mov  ebx, 14*65536+(y_add2+27)
  361.     mov  edx, simple_text
  362.     mov  esi, simple_text.size
  363.     mcall
  364.  
  365.     mov  ecx, (y_add2)*65536+20
  366.     mov  ebx, (13)*65536+25
  367.     mov  edx, 121
  368.     mov  esi, [sc.work_button]
  369.     mov  edi, 9
  370.     mov  eax, 8
  371.   @@:
  372.     mcall
  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
  381.     ;mov  eax, 8
  382.     mov  ebx, 13*65536+18
  383.     mov  ecx, y_add*65536+y_s
  384.   @@:
  385.     mcall
  386.     inc  edx
  387.     add  ebx, 19*65536
  388.     dec  edi
  389.     jnz  @b
  390.  
  391.  
  392.     ;-----------------------
  393.     mov  eax,8
  394.     mov  edx,14                            ; button number
  395.     mov  ebx,(13)*65536+17                 ; button start x & size
  396.     mov  ecx,(y_add2+40)*65536+14          ; button start y & size
  397.  
  398.   newcb:
  399.     mov  esi,[(edx-14)*4+colors]
  400.  
  401.     mcall
  402.  
  403.     inc  edx
  404.     add  ebx,20*65536
  405.  
  406.     cmp  edx,27
  407.     jnz  newcb
  408.     ;-----------------------
  409.  
  410.     mov  eax, 4
  411.     mov  ebx, 94*65536+4+y_add
  412.     mov  ecx, [sc.work_button_text]
  413.     mov  edx, la2
  414.     mov  esi, la2.size
  415.     mcall
  416.  
  417.     mov  eax,12
  418.     mov  ebx,2
  419.     mcall
  420.  
  421.     ret
  422.  
  423.  
  424.  
  425. ; DATA SECTION
  426.  
  427. if lang eq ru
  428.     title db 'ƒ¥­¥à â®à ä®­  à ¡®ç¥£® á⮫ ',0
  429. else
  430.     title db 'Background',0
  431. end if
  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,\
  446.     ru, "‡€ŒŽ‘’ˆ’œ  €‘’Ÿ“’œ",\
  447.     en, "  TILED     STRETCH"
  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
  464.     dd  0x111111
  465.     dd  0xcccccc
  466.  
  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
  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.  
  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
  522.     dd  777     ; <- end of array
  523.  
  524. ptarray2:
  525.  
  526.     dd  255,255,205,205,155,155,105,105,55,55,5,5
  527.     dd  205,105,105,205,55,155,155,55
  528.     dd  777
  529.  
  530. ptarray3:
  531.  
  532.     dd  200,105,105,200,55,150,150,55
  533.     dd  225,225,35,35
  534.     dd  777
  535.  
  536. ptarray4:
  537.  
  538.     dd  59,255,59,191,59,127,59,59
  539.     dd  191,223,191,159,191,105,191,27
  540.     dd  777
  541.  
  542. ptarray5:
  543.  
  544.     dd  59,255,59,191,59,127,59,59
  545.     dd  191,255,191,191,191,127,191,59
  546.     dd  777
  547.  
  548. ptarray6:
  549.  
  550.     dd  206,206,127,205,45,205
  551.     dd  205,127,127,127,45,127
  552.     dd  205,45,127,45,45,45
  553.  
  554.     dd  777
  555.  
  556. ptarray7:
  557.  
  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
  565.  
  566.     dd  777
  567.  
  568. ptarray8:
  569.  
  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
  580.  
  581.     dd  777
  582.  
  583. ptarray9:
  584.  
  585.  
  586.      dd  255,7,191,127,127,191,59,207,95,95,161,31,15,159,250,250,777
  587.  
  588.  
  589. I_END:
  590. sc system_colors
  591.  
  592. I_Param:
  593.  
  594. image:
  595.         rb      256*256*3 + 4
  596.  
  597. align 100h
  598. rb 100h ; it is enough for stack in this program
  599. mem:
  600.