Subversion Repositories Kolibri OS

Rev

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

  1.     use32
  2.     org     0
  3.     db      'MENUET01'
  4.     dd      1, @entry, @end, @memory, @stack, @params, 0
  5.  
  6.     include "../../macros.inc"
  7.     include "../../proc32.inc"
  8.     include "../../dll.inc"
  9.  
  10.  macro cmpe a, b, c  {
  11.     cmp     a, b
  12.     je      c        }
  13.  
  14.  macro cmpl a, b, c  {
  15.     cmp     a, b
  16.     jl      c        }
  17.  
  18.  macro cmpne a, b, c {
  19.     cmp     a, b
  20.     jne     c        }
  21.  
  22.  macro cmple a, b, c {
  23.     cmp     a, b
  24.     jle     c        }
  25.  
  26.  macro cmpge a, b, c {
  27.     cmp     a, b
  28.     jge     c        }
  29.  
  30.  LINEH      equ 12
  31.  ICONS      equ 11
  32.  
  33. ;=====================================================================
  34.  
  35.  @entry:
  36.  
  37.     mcall   40, 101b
  38.  
  39.  ;----------------------------
  40.  
  41.   ;; CHECK FOR PARAMS
  42.     cmpne   [@params], byte 0, parse
  43.     mov     eax, @params
  44.     mov     ebx, sz_std
  45.   @@:
  46.     mov     cl, [ebx]
  47.     mov     [eax], cl
  48.     inc     eax
  49.     inc     ebx
  50.     cmpne   [ebx - 1], byte 0, @b
  51.  
  52.   ;; TEXT
  53.  
  54.  parse:
  55.     mov     [text.lines], dword 1
  56.     mov     [text.max_len], dword 1
  57.  
  58.     mov     eax, @params
  59.     mov     ebx, text.buffer
  60.     mov     edx, 0
  61.     mov     esi, 0
  62.  
  63.     cmpne   [eax], byte "'", @f
  64.     mov     dl, "'"
  65.     mov     eax, @params + 1
  66.     jmp     .text
  67.  
  68.   @@:
  69.     cmpne   [eax], byte '"', .text
  70.     mov     dl, '"'
  71.     mov     eax, @params + 1
  72.  
  73.   .text:
  74.     cmpe    [eax], dl, .text.end
  75.     cmpe    [eax], byte 0, .text.end
  76.     mov     cl, [eax]
  77.  
  78.     cmpe    cl, "\", .char
  79.     cmpne   cl, 10, .copy
  80.     cmple   esi, dword [text.max_len], @f
  81.     mov     [text.max_len], esi
  82.   @@:
  83.     mov     esi, 0
  84.     mov     cl, 0
  85.     inc     dword [text.lines]
  86.     jmp     .copy
  87.  
  88.   .char:
  89.     cmpe    [eax + 1], byte "n", .newline
  90.     cmpe    [eax + 1], dl, .quote
  91.     jmp     .copy
  92.  
  93.   .newline:
  94.     cmple   esi, dword [text.max_len], @f
  95.     mov     [text.max_len], esi
  96.   @@:
  97.     mov     esi, 0
  98.     mov     cl, 0
  99.     inc     dword [text.lines]
  100.     inc     eax
  101.     jmp     .copy
  102.  
  103.   .quote:
  104.     mov     cl, dl
  105.     inc     eax
  106.  
  107.   .copy:
  108.     mov     [ebx], cl
  109.     inc     eax
  110.     inc     ebx
  111.     inc     esi
  112.     jmp     .text
  113.   .text.end:
  114.  
  115.     cmple   esi, dword [text.max_len], @f
  116.     mov     [text.max_len], esi
  117.   @@:
  118.  
  119.     mov     [ebx], byte 0
  120.  
  121.     cmpge   [text.max_len], dword 25, @f
  122.     mov     [text.max_len], dword 25
  123.   @@:
  124.  
  125.  ;; PARAMS
  126.  
  127.   .params:
  128.     cmpe    [eax], byte 0, .params.end
  129.     cmpe    [eax], byte "d", .set_atcl
  130.     cmpe    [eax], byte "t", .set_title
  131.     mov     ebx, 1
  132.     cmpe    [eax], byte "A", .set_icon
  133.     inc     ebx
  134.     cmpe    [eax], byte "E", .set_icon
  135.     inc     ebx
  136.     cmpe    [eax], byte "W", .set_icon
  137.     inc     ebx
  138.     cmpe    [eax], byte "O", .set_icon
  139.     inc     ebx
  140.     cmpe    [eax], byte "N", .set_icon
  141.     inc     ebx
  142.     cmpe    [eax], byte "I", .set_icon
  143.     inc     ebx
  144.     cmpe    [eax], byte "F", .set_icon
  145.     inc     ebx
  146.     cmpe    [eax], byte "C", .set_icon
  147.     inc     ebx
  148.     cmpe    [eax], byte "M", .set_icon
  149.     inc     ebx
  150.     cmpe    [eax], byte "D", .set_icon
  151.     inc     ebx
  152.     cmpe    [eax], byte "S", .set_icon
  153.  
  154.     jmp     .next_char
  155.  
  156.   .set_atcl:
  157.     mov     [params.atcl], byte 1
  158.     jmp     .next_char
  159.  
  160.   .set_title:
  161.     mov     [params.title], byte 1
  162.     jmp     .next_char
  163.  
  164.   .set_icon:
  165.     mov     [params.icon], ebx
  166.  
  167.   .next_char:
  168.     inc     eax
  169.     jmp     .params
  170.  
  171.   .params.end:
  172.  
  173.  ;----------------------------
  174.  
  175.     mcall   68, 11
  176.     stdcall dll.Load, @imports
  177.  
  178.     mov     dword [fi + 00], 5
  179.     mov     dword [fi + 16], buffer
  180.     mov     dword [fi + 21], sz_ifile
  181.     mcall   70, fi
  182.  
  183.     mov     edx, dword [buffer + 32]
  184.     shl     edx, 2
  185.     stdcall mem.Alloc, edx
  186.     mov     [img_data.rgb_obj], eax
  187.  
  188.     mov     dword [fi + 00], 0
  189.     mov     dword [fi + 12], edx
  190.     m2m     dword [fi + 16], [img_data.rgb_obj]
  191.     mov     dword [fi + 21], sz_ifile
  192.     mcall   70, fi
  193.  
  194.     stdcall dword [img.decode], dword [img_data.rgb_obj], ebx, 0
  195.     mov     dword [img_data.obj], eax
  196.  
  197.  ;; alpha
  198.     add     eax, 24
  199.     mov     eax, [eax] ;; eax - data [argb]
  200.  
  201.     mov     ecx, 24 * 24 * ICONS
  202.  alpha:
  203.     mov     ebx, [eax]
  204.     shr     ebx, 24
  205.     cmpne   bl, 0x00, @f
  206.     mov     [eax], dword 0x222222
  207.  
  208.   @@:
  209.     add     eax, 4
  210.     loop    alpha
  211.  
  212.  ;; end alpha
  213.  
  214.     stdcall dword [img.to_rgb], dword [img_data.obj], dword [img_data.rgb_obj]
  215.     stdcall dword [img.destroy], dword [img_data.obj]
  216.  
  217.  ;----------------------------
  218.  
  219.     mov     [text.offset], LINEH
  220.  
  221.     mov     eax, [text.lines]
  222.     add     eax, 2
  223.     imul    eax, LINEH
  224.     mov     [window.height], eax
  225.  
  226.     mov     eax, [text.max_len]
  227.     imul    eax, 6
  228.     add     eax, LINEH * 2
  229.     cmpe    [params.icon], dword 0, @f
  230.     add     eax, 24 + LINEH
  231.     add     [text.offset], 24 + LINEH
  232.   @@:
  233.     mov     [window.width], eax
  234.  
  235.     mcall   14
  236.     mov     ebx, eax
  237.     and     ebx, 0xFFFF
  238.     mov     [scr.height], ebx
  239.     shr     eax, 16
  240.     mov     [scr.width], eax
  241.     sub     eax, [window.width]
  242.     sub     eax, LINEH
  243.     mov     [window.x], eax
  244.  
  245.  ;; CALC WINDOW.Y
  246.  
  247.     mcall   68, 22, sz_shname, 256 + 512, 4 + 1 ;OPEN_ALWAYS and WRITE
  248.     add     eax, 512
  249.     mov     [shm], eax
  250.  
  251.  s_search:
  252.     mov     eax, [shm]
  253.  
  254.     mov     ebx, 0
  255.     mov     ecx, [text.lines]
  256.     add     ecx, 3
  257.  
  258.     push    eax ebx
  259.  
  260.     mov     eax, [scr.height]
  261.     mov     edx, 0
  262.     mov     ebx, LINEH
  263.     div     ebx
  264.     mov     edx, eax
  265.     add     edx, [shm]
  266.     sub     edx, ecx
  267.     inc     edx
  268.  
  269.     pop     ebx eax
  270.  
  271.  s_area:
  272.     cmpe    [eax], byte 1, .is_1
  273.  
  274.   .is_0:
  275.     inc     ebx
  276.     cmpe    ebx, ecx, s_ok
  277.     jmp     .next
  278.  
  279.   .is_1:
  280.     mov     ebx, 0
  281.  
  282.   .next:
  283.     inc     eax
  284.     cmple   eax, edx, s_area
  285.  
  286.     mcall   5, 10
  287.     jmp     s_search
  288.  
  289.  s_ok:
  290.     sub     eax, ecx
  291.     inc     eax
  292.     mov     [shm.our], eax
  293.  
  294.     mov     edx, eax
  295.     sub     edx, [shm]
  296.     inc     edx
  297.     imul    edx, LINEH
  298.     mov     [window.y], edx
  299.  
  300.     push    eax ebx
  301.     mcall   48, 5
  302.     shr     ebx, 16
  303.     add     [window.y], ebx
  304.     pop     ebx eax
  305.  
  306.   @@:
  307.     mov     [eax], byte 1
  308.     inc     eax
  309.     loop    @b
  310.  
  311.  ;----------------------------
  312.  
  313.     mov     eax, 60
  314.     imul    eax, [text.lines]
  315.     mov     [timer], eax
  316.  
  317.     mov     [timer.step], dword 1
  318.     cmpne   [params.atcl], byte 1, @f
  319.     mov     [timer.step], dword 0
  320.   @@:
  321.  
  322.  ;----------------------------
  323.  
  324.  update:
  325.     mcall   23, 10
  326.     cmpe    al, EV_REDRAW, redraw
  327.     cmpe    al, EV_BUTTON, exit
  328.  
  329.     mov     eax, [timer.step]
  330.     sub     [timer], eax
  331.     cmpne   [timer], dword 0, update
  332.  
  333.  ;----------------------------
  334.  
  335.  exit:
  336.     mov     eax, [shm.our]
  337.     mov     ecx, [text.lines]
  338.     add     ecx, 3
  339.   @@:
  340.     mov     [eax], byte 0
  341.     inc     eax
  342.     loop    @b
  343.  
  344.     mcall   68, 23, sz_shname
  345.  
  346.     mcall   -1
  347.  
  348.  ;----------------------------
  349.  
  350.  redraw:
  351.     call    draw_window
  352.     call    draw_text
  353.  
  354.     jmp     update
  355.  
  356.  ;----------------------------
  357.  
  358.  draw_window:
  359.     dec     dword [window.width]
  360.     dec     dword [window.height]
  361.     mcall   0, <[window.x], [window.width]>, <[window.y], [window.height]>, 0x61000000
  362.     inc     dword [window.width]
  363.     inc     dword [window.height]
  364.  
  365.     and     ebx, 0xFFFF
  366.     and     ecx, 0xFFFF
  367.     inc     ebx
  368.     inc     ecx
  369.     mcall   8, , , 0x61000001
  370.  
  371.     mov     eax, 13
  372.     mov     ebx, [window.width]
  373.     mov     edx, 0x222222
  374.     cmpe    [first_draw], byte 1, .draw_full
  375.     mov     [first_draw], byte 1
  376.     mov     esi, [window.height]
  377.     mov     ecx, LINEH
  378.   @@:
  379.     mcall
  380.     add     ecx, LINEH shl 16
  381.     sub     esi, LINEH
  382.     push    eax ebx
  383.     mcall   5, 1
  384.     pop     ebx eax
  385.     cmpne   esi, 0, @b
  386.   .draw_full:
  387.     mcall
  388.  
  389.     mcall   , , 1, 0x121212
  390.  
  391.     mov     ecx, [window.height]
  392.     dec     ecx
  393.     shl     ecx, 16
  394.     inc     ecx
  395.     mcall
  396.  
  397.     mcall   , 1, [window.width]
  398.  
  399.     mov     ebx, [window.width]
  400.     dec     ebx
  401.     shl     ebx, 16
  402.     inc     ebx
  403.     mcall
  404.  
  405.     mcall   1, 1, 1
  406.     mov     ebx, [window.width]
  407.     sub     ebx, 2
  408.     mcall
  409.     mov     ecx, [window.height]
  410.     sub     ecx, 2
  411.     mcall
  412.     mov     ebx, 1
  413.     mcall
  414.  
  415.  ;-----
  416.  
  417.     mov     ecx, [scr.width]
  418.     inc     ecx
  419.  
  420.     mov     eax, 35
  421.     mov     ebx, ecx
  422.     imul    ebx, [window.y]
  423.     add     ebx, [window.x]
  424.     dec     ebx
  425.     mcall
  426.     push    eax
  427.  
  428.     mov     eax, 35
  429.     add     ebx, [window.width]
  430.     add     ebx, 2
  431.     mcall
  432.     push    eax
  433.  
  434.     mov     eax, 35
  435.     mov     edx, ecx
  436.     mov     esi, [window.height]
  437.     dec     esi
  438.     imul    edx, esi
  439.     add     ebx, edx
  440.     mcall
  441.     push    eax
  442.  
  443.     mov     eax, 35
  444.     sub     ebx, [window.width]
  445.     sub     ebx, 2
  446.     mcall
  447.     push    eax
  448.  
  449.  ;-----
  450.  
  451.     mov     eax, 1
  452.  
  453.     pop     edx
  454.     mov     ecx, [window.height]
  455.     dec     ecx
  456.     mcall   , 0
  457.  
  458.     pop     edx
  459.     mov     ebx, [window.width]
  460.     dec     ebx
  461.     mcall
  462.  
  463.     pop     edx
  464.     mcall   , , 0
  465.  
  466.     pop     edx
  467.     mcall   , 0
  468.  
  469.  ;-----
  470.  
  471.     cmpe    [params.icon], dword 0, @f
  472.  
  473.     mov     ebx, [params.icon]
  474.     dec     ebx
  475.     imul    ebx, 24 * 24 * 3
  476.     add     ebx, [img_data.rgb_obj]
  477.  
  478.     mov     edx, [window.height]
  479.     shr     edx, 1
  480.     sub     edx, 12
  481.     add     edx, LINEH shl 16
  482.  
  483.     mcall   7, , <24, 24>
  484.  
  485.   @@:
  486.  
  487.     ret
  488.  
  489.  ;----------------------------
  490.  
  491.  draw_text:
  492.     mov     esi, [text.lines]
  493.  
  494.     mov     eax, 4
  495.     mov     ebx, [text.offset]
  496.     shl     ebx, 16
  497.     add     ebx, LINEH + (LINEH - 6) / 2
  498.     mov     edx, text.buffer
  499.  
  500.   .draw_lines:
  501.     mov     ecx, 0x80111111
  502.  
  503.     add     ebx, 0x00010000
  504.     dec     ebx
  505.     mcall
  506.     add     ebx, 2
  507.     mcall
  508.     sub     ebx, 0x00020000
  509.     mcall
  510.     sub     ebx, 2
  511.     mcall
  512.  
  513.     add     ebx, 0x00010001
  514.     mov     ecx, 0x80D0D0D0
  515.     mcall
  516.  
  517.     add     ebx, LINEH
  518.     dec     esi
  519.     cmpe    esi, 0, .draw_lines.end
  520.  
  521.     inc     edx
  522.   @@:
  523.     cmpe    [edx], byte 0, @f
  524.     inc     edx
  525.     jmp     @b
  526.   @@:
  527.     inc     edx
  528.     jmp     .draw_lines
  529.  
  530.   .draw_lines.end:
  531.  
  532.     cmpne   [params.title], byte 1, @f
  533.     mov     edx, text.buffer
  534.     mov     ecx, 0x80111111
  535.     and     ebx, 0xFFFF0000
  536.     add     ebx, 1 shl 16 + LINEH + (LINEH - 6) / 2
  537.     mcall
  538.  
  539.     mov     ecx, 0x80FFFFFF
  540.     sub     ebx, 0x00010000
  541.     mcall
  542.   @@:
  543.  
  544.     ret
  545.  ;----------------------------
  546.  
  547.  @imports:
  548.     library img, "libimg.obj"
  549.     import  img, img.init,    "lib_init",     \
  550.                  img.to_rgb,  "img_to_rgb2",  \
  551.                  img.decode,  "img_decode",   \
  552.                  img.destroy, "img_destroy"
  553.  
  554.  ;----------------------------
  555.  
  556.  sz_ifile   db "/sys/notify3.png", 0
  557.  sz_shname  db "notify-mem-v01", 0
  558.  sz_std     db "'NOTIFY 3\n",                 \
  559.                 "d - disable auto-closing\n", \
  560.                 "t - title\n",                \
  561.                 "A - application\n",          \
  562.                 "E - error\n",                \
  563.                 "W - warning\n",              \
  564.                 "O - ok\n",                   \
  565.                 "N - network\n",              \
  566.                 "I - info\n",                 \
  567.                 "F - folder\n",               \
  568.                 "C - component\n",            \
  569.                 "M - mail\n",                 \
  570.                 "D - download\n",             \
  571.                 "S - audio player",           \
  572.                 "' -td", 0
  573.  
  574.  ;----------------------------
  575.  
  576.  @end:
  577.  
  578. ;=====================================================================
  579.  
  580.  window:
  581.   .x        rd 1
  582.   .y        rd 1
  583.   .width    rd 1
  584.   .height   rd 1
  585.  
  586.  scr:
  587.   .width    rd 1
  588.   .height   rd 1
  589.  
  590.  text:
  591.   .buffer   rb 256
  592.   .lines    rd 1
  593.   .max_len  rd 1
  594.   .offset   rd 1
  595.  
  596.  params:
  597.   .atcl     rb 1
  598.   .title    rb 1
  599.   .icon     rd 1
  600.  
  601.  img_data:
  602.   .rgb_obj  rd 1
  603.   .obj      rd 1
  604.  
  605.  timer:
  606.   .value    rd 1
  607.   .step     rd 1
  608.  
  609.  shm:
  610.   .addr     rd 1
  611.   .our      rd 1
  612.  
  613.  fi         rb 26
  614.  buffer     rb 1024
  615.  first_draw rb 1
  616.  
  617. ;=====================================================================
  618.             rb 2048
  619.  @stack:
  620.  @params    rb 256
  621.  
  622.  @memory:
  623.