Subversion Repositories Kolibri OS

Rev

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