Subversion Repositories Kolibri OS

Rev

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