Subversion Repositories Kolibri OS

Rev

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