Subversion Repositories Kolibri OS

Rev

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