Subversion Repositories Kolibri OS

Rev

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

  1.     use32
  2.     org     0x0
  3. ;-------------------------------------------------------------------------------
  4.     db      "MENUET01"
  5.     dd      1, main, __dataend, __memend, __stackend, 0, sys_path
  6. ;-------------------------------------------------------------------------------
  7.     include "../../../macros.inc"
  8.     include "../../../proc32.inc"
  9.     include "../../../dll.inc"
  10.         include "../../../KOSfuncs.inc"
  11.     include "../../../load_lib.mac"
  12.     ;include "../../../debug.inc"
  13.  
  14.     include "DATA.INC"
  15.     include "NAME.INC"
  16.  
  17.     @use_library         \
  18.             mem.Alloc,   \
  19.             mem.Free,    \
  20.             mem.ReAlloc, \
  21.             dll.Load
  22. ;================================================================================
  23. main:
  24. ; ==== Init ====
  25.     mcall   SF_SYSTEM, SSF_GET_ACTIVE_WINDOW
  26.     mov     [win.psid], eax
  27.  
  28.     mcall   SF_SET_EVENTS_MASK, EVM_REDRAW+EVM_BUTTON+EVM_MOUSE ;+EVM_DEKSTOP to update colors on skin change
  29.  
  30. ; ==== Load libs ====
  31.     load_libraries load_lib_start, load_lib_end
  32.  
  33. ; ==== Config LibINI ====
  34.     invoke  ini.get_int, ini_data.file_name, ini_data.settings_name, ini_data.location_name, 2
  35.     test    eax,eax
  36.         jz      exit
  37.     mov     [dock_items.location], eax
  38.     invoke  ini.get_int, ini_data.file_name, ini_data.settings_name, ini_data.fsize_name, 0
  39.     mov     [dock_items.fsize], eax
  40.     invoke  ini.get_int, ini_data.file_name, ini_data.settings_name, ini_data.ashow_name, 0
  41.     mov     [dock_items.ashow], eax
  42.  
  43.     invoke  ini.sections, ini_data.file_name, sections_callback
  44.  
  45. ; ==== Load colors ====
  46.     mcall   SF_STYLE_SETTINGS, SSF_GET_COLORS, color
  47.     or      dword[color.bg],    0x10000000
  48.     or      dword[color.frame], 0x10000000
  49.     or      dword[color.text],  0x80000000
  50.  
  51. ; ==== Config LibIMG ====
  52.     mov     dword[fi.p00], SSF_GET_INFO
  53.     mov     dword[fi.p16], buf_128
  54.     mov     dword[fi.p21], img_data.file_name
  55.  
  56.     mcall   SF_FILE, fi
  57.  
  58.     mov     edx, [buf_128 + 32]
  59.     imul    edx, 10
  60.  
  61.     stdcall mem.Alloc, edx
  62.     mov     [img_data.rgb_object], eax
  63.  
  64.     mov     dword[fi.p00], SSF_READ_FILE
  65.     mov     dword[fi.p12], edx
  66.     m2m     dword[fi.p16], dword[img_data.rgb_object]
  67.     mov     dword[fi.p21], img_data.file_name
  68.  
  69.     mcall   SF_FILE, fi
  70.  
  71.     cmp     ebx, 0xFFFFFFFF
  72.     je      @f
  73.  
  74.     stdcall dword[img.decode], dword[img_data.rgb_object], ebx, 0
  75.     mov     dword[img_data.object], eax
  76.  
  77.   ; === ALPHA ===
  78.     mov     edi, eax
  79.     add     edi, 8
  80.     mov     edi, [edi]
  81.     imul    edi, 128
  82.     sub     edi, 4
  83.  
  84.     add     eax, 24
  85.     mov     eax, [eax]
  86.  .setalpha:
  87.     mov     ebx, [eax + edi]
  88.     shr     ebx, 24
  89.     cmp     ebx, 0
  90.     jne     .nonalpha
  91.  
  92.     mov     ecx, [color.bg]
  93.     mov     [eax + edi], ecx
  94.  .nonalpha:
  95.     sub     edi, 4
  96.     cmp     edi, 0
  97.     jne     .setalpha
  98.  
  99.   ; === CONVERTING TO BGR
  100.     stdcall dword[img.toRGB], dword[img_data.object], dword[img_data.rgb_object]
  101.     stdcall dword[img.destroy], dword[img_data.object]
  102.  
  103. ; ==== Config window ====
  104.     mov     eax, dword[dock_items.location]
  105.     and     eax, 1b
  106.     cmp     eax, 0
  107.     je      .vert
  108.     jmp     .setshape
  109.  
  110.  .vert:
  111.     mov     byte[win.isvert], 1
  112.  
  113.  .setshape:
  114.     cmp     byte[win.isvert], 1
  115.     je      .vert_sp
  116.  
  117.  .horz_sp:
  118.     call    .HORZ_WIDTH
  119.     call    .HORZ_X
  120.     call    .HORZ_HEIGHT
  121.     cmp     dword[dock_items.location], 1
  122.     je      .settop
  123.  
  124.  .setbottom:
  125.     call    .HORZ_Y_BOTTOM
  126.     jmp     .SETDEF
  127.  
  128.  .settop:
  129.     call    .HORZ_Y_TOP
  130.     jmp     .SETDEF
  131.  
  132.  
  133.  .vert_sp:
  134.     call    .VERT_WIDTH
  135.     call    .VERT_HEIGHT
  136.     call    .VERT_Y
  137.     cmp     dword[dock_items.location], 2
  138.     je      .setleft
  139.  
  140.  .setright:
  141.     call    .VERT_X_RIGHT
  142.     jmp     .SETDEF
  143.  
  144.  .setleft:
  145.     call    .VERT_X_LEFT
  146.     jmp     .SETDEF
  147.  
  148. ;-------------------------------------------------------------------------------
  149.  .HORZ_WIDTH:
  150.     cmp     [dock_items.fsize], byte 1
  151.     je      @f
  152.     mov     eax, BUTTON_SIZE
  153.     mov     ebx, [dock_items.count]
  154.     imul    eax, ebx
  155.     add     eax, 24
  156.     dec     eax
  157.     jmp     .set_hw
  158.   @@:
  159.     mcall   SF_GET_SCREEN_SIZE
  160.     shr     eax, 16
  161.  .set_hw:
  162.     mov     [win.width_opn], eax
  163.     mov     [win.width_hdn], eax
  164.  
  165.     ret
  166.  
  167. ;-------------------------------------------------------------------------------
  168.  .HORZ_X:
  169.     mcall   SF_GET_SCREEN_SIZE
  170.     shr     eax, 17
  171.     mov     ecx, [win.width_opn]
  172.     shr     ecx, 1
  173.     sub     eax, ecx
  174.     mov     [win.x_opn], eax
  175.     mov     [win.x_hdn], eax
  176.  
  177.     ret
  178.  
  179. ;-------------------------------------------------------------------------------
  180.  .HORZ_HEIGHT:
  181.     mov     dword[win.height_hdn], 3
  182.     mov     dword[win.height_opn], BUTTON_SIZE
  183.  
  184.     ret
  185.  
  186. ;-------------------------------------------------------------------------------
  187.  .HORZ_Y_BOTTOM:
  188.     mcall   SF_GET_SCREEN_SIZE
  189.     and     eax, 0xFFFF
  190.     dec     eax
  191.     mov     [win.y_hdn], eax
  192.     sub     eax, 43
  193.     mov     [win.y_opn], eax
  194.  
  195.     ret
  196.  
  197.  .HORZ_Y_TOP:
  198.     mov     dword[win.y_opn], 0
  199.     mov     dword[win.y_hdn], 0
  200.  
  201.     ret
  202.  
  203. ;-------------------------------------------------------------------------------
  204.  .VERT_WIDTH:
  205.     mov     dword[win.width_opn], BUTTON_SIZE
  206.     mov     dword[win.width_hdn], 3
  207.  
  208.     ret
  209.  
  210. ;-------------------------------------------------------------------------------
  211.  .VERT_X_LEFT:
  212.     mov     dword[win.x_opn], 0
  213.     mov     dword[win.x_hdn], 0
  214.  
  215.     ret
  216.  
  217.  .VERT_X_RIGHT:
  218.     mcall   SF_GET_SCREEN_SIZE
  219.     and     eax, 0xFFFF0000
  220.     shr     eax, 16
  221.     mov     [win.x_hdn], eax
  222.     sub     eax, BUTTON_SIZE
  223.     mov     [win.x_opn], eax
  224.  
  225.     ret
  226.  
  227. ;-------------------------------------------------------------------------------
  228.  .VERT_HEIGHT:
  229.     cmp     [dock_items.fsize], byte 1
  230.     je      @f
  231.     mov     eax, BUTTON_SIZE
  232.     mov     ebx, [dock_items.count]
  233.     imul    eax, ebx
  234.     dec     eax
  235.     jmp     .set_vh
  236.   @@:
  237.     mcall   SF_GET_SCREEN_SIZE
  238.     and     eax, 0xFFFF
  239.  .set_vh:
  240.     mov     [win.height_opn], eax
  241.     mov     [win.height_hdn], eax
  242.  
  243.     ret
  244.  
  245. ;-------------------------------------------------------------------------------
  246.  .VERT_Y:
  247.     mcall   SF_GET_SCREEN_SIZE
  248.     and     eax, 0xFFFF
  249.     shr     eax, 1
  250.  
  251.     mov     esi, [win.height_opn]
  252.     shr     esi, 1
  253.     sub     eax, esi
  254.  
  255.     mov     [win.y_hdn], eax
  256.     mov     [win.y_opn], eax
  257.  
  258.     ret
  259.  
  260. ;-------------------------------------------------------------------------------
  261.  .SETDEF:
  262.     mov     eax, [win.width_hdn]
  263.     mov     [win.width], eax
  264.  
  265.     mov     eax, [win.x_hdn]
  266.     mov     [win.x], eax
  267.  
  268.     mov     eax, [win.height_hdn]
  269.     mov     [win.height], eax
  270.  
  271.     mov     eax, [win.y_hdn]
  272.     mov     [win.y], eax
  273.        
  274.     cmp     byte[dock_items.ashow],1
  275.     jne     .not_ashow
  276.  
  277.     mov     eax, [win.width_opn]
  278.     mov     [win.width], eax
  279.  
  280.     mov     eax, [win.x_opn]
  281.     mov     [win.x], eax
  282.  
  283.     mov     eax, [win.height_opn]
  284.     mov     [win.height], eax
  285.  
  286.     mov     eax, [win.y_opn]
  287.     mov     [win.y], eax
  288.  
  289.  .not_ashow:
  290.  
  291.  
  292. ;-------------------------------------------------------------------------------
  293. ; ==== START ====
  294.     mcall   SF_THREAD_INFO, win.procinfo, -1
  295.     mov     ecx, [win.procinfo + 30]
  296.     mcall   SF_SYSTEM, SSF_GET_THREAD_SLOT
  297.     and     eax, 0xFFFF
  298.     mov     [win.sid], eax
  299.  
  300.     call    main_loop
  301. ;-------------------------------------------------------------------------------
  302. exit:
  303.     stdcall mem.Free, [img_data.rgb_object]
  304.     mcall   SF_SYSTEM, SSF_TERMINATE_THREAD, [nwin.sid]
  305.     mcall   SF_TERMINATE_PROCESS
  306. ;-------------------------------------------------------------------------------
  307. align 4
  308. main_loop:
  309.     mcall   SF_WAIT_EVENT
  310.  
  311.     cmp     eax, EV_REDRAW
  312.     je      event_redraw
  313.  
  314.     cmp     eax, EV_BUTTON
  315.     je      event_button
  316.  
  317.     cmp     eax, EV_MOUSE
  318.     je      event_mouse
  319.  
  320.     jmp     main_loop
  321. ;-------------------------------------------------------------------------------
  322. event_redraw:
  323.     call    DRAW_WINDOW
  324.     jmp     main_loop
  325. ;-------------------------------------------------------------------------------
  326. DRAW_WINDOW:
  327.     mcall   SF_REDRAW, SSF_BEGIN_DRAW
  328.  
  329.     mov     esi, [color.bg]
  330.     or      esi, 0x01000000
  331.     mcall   SF_CREATE_WINDOW, <[win.x], [win.width]>, <[win.y], [win.height]>, [color.bg], , [color.frame]
  332.  
  333.     xor     edi, edi
  334.   @@:
  335.     cmp     edi, [dock_items.count]
  336.     je      @f
  337.  
  338.     push    edi
  339.     mov     eax, SF_DEFINE_BUTTON
  340.     mov     edx, 0x60000002
  341.     mov     esi, [color.bg]
  342.     imul    edi, BUTTON_SIZE
  343.     add     edi, 12
  344.     shl     edi, 16
  345.     add     edi, BUTTON_SIZE
  346.     cmp     byte[win.isvert], 1
  347.     je      .vert_btn
  348.     mcall   , edi, <0, BUTTON_SIZE>
  349.     jmp     .endbtn
  350.  .vert_btn:
  351.     sub     edi, 12 shl 16
  352.     mcall   , <0, BUTTON_SIZE>, edi
  353.  .endbtn:
  354.     pop     edi
  355.  
  356.     cmp     byte[dock_items.separator + edi], 1
  357.     jne     .end_separator
  358.  
  359.  .draw_separator:
  360.     push    ebx
  361.     push    ecx
  362.  
  363.     mov     eax, SF_DRAW_RECT
  364.     mov     ebx, edi
  365.     imul    ebx, BUTTON_SIZE
  366.     add     ebx, BUTTON_SIZE
  367.     add     ebx, 12-1
  368.     shl     ebx, 16
  369.     add     ebx, 2
  370.  
  371.     cmp     byte[win.isvert], 1
  372.     je      .vert_draw_sep
  373.     mcall   , , <4,  36>, [color.frame]
  374.     jmp     .end_inner_sep
  375.  .vert_draw_sep:
  376.     sub     ebx, 12 shl 16
  377.     mov     ecx, ebx
  378.     mcall   , <4, 36>, , [color.frame]
  379.  .end_inner_sep:
  380.     pop     ecx
  381.     pop     ebx
  382.  .end_separator:
  383.  
  384.     cmp     byte[win.isvert], 1
  385.     je      .vert_dig
  386.     mov     edx, ebx
  387.     and     edx, 0xFFFF0000
  388.     add     edx, 0x00060006
  389.     jmp     .digend
  390.  .vert_dig:
  391.     mov     edx, ecx
  392.     and     edx, 0xFFFF0000
  393.     shr     edx, 16
  394.     add     edx, 0x00060006
  395.  .digend:
  396.  
  397.     imul    ebx, edi, 4
  398.     add     ebx, dock_items.icon
  399.     mov     ebx, [ebx]
  400.     imul    ebx, ICON_SIZE_BGR
  401.     add     ebx, [img_data.rgb_object]
  402.  
  403.     mcall   SF_PUT_IMAGE, , <32, 32>
  404.  
  405.     inc     edi
  406.     jmp     @b
  407.   @@:
  408.  
  409.     mcall   SF_REDRAW, SSF_END_DRAW
  410.  
  411.     ret
  412. ;-------------------------------------------------------------------------------
  413. event_button:
  414.     mcall   SF_GET_BUTTON
  415.  
  416.         ;; it must not be possible to close dock
  417.     ;cmp     ah, 1
  418.     ;je     .button_close
  419.  
  420.     cmp     ah, 2
  421.     je      .button_dock
  422.  
  423.     jmp     @f
  424.  
  425.  ;.button_close:
  426.  ;   jmp     exit
  427.  
  428.  .button_dock:
  429.     mov     edi, [win.button_index]
  430.     imul    edi, 256
  431.  
  432.     mov     dword[fi.p00], SSF_START_APP
  433.  
  434.     mov     esi, edi
  435.     add     esi, dock_items.path
  436.     mov     dword[fi.p21], esi
  437.  
  438.     mov     esi, edi
  439.     add     esi, dock_items.param
  440.     mov     dword[fi.p08], esi
  441.  
  442.     mcall   SF_FILE, fi
  443.  
  444.     mov     ecx, eax
  445.     mcall   SF_SYSTEM, SSF_GET_THREAD_SLOT
  446.     and     eax, 0xFFFF
  447.     mov     [win.psid], eax
  448.  
  449.     jmp     wnd_hide
  450.  
  451.   @@:
  452.     jmp     main_loop
  453. ;-------------------------------------------------------------------------------
  454. event_mouse:
  455.   ; ==== IS MOUSE INNER ====
  456.     mcall   SF_MOUSE_GET, SSF_WINDOW_POSITION
  457.     mov     edi, eax
  458.     mov     esi, eax
  459.     shr     edi, 16
  460.     and     esi, 0xFFFF
  461.  
  462.     cmp     edi, 0
  463.     jl      wnd_hide
  464.     dec     edi
  465.     cmp     edi, [win.width]
  466.     jg      wnd_hide
  467.     cmp     esi, 0
  468.     jl      wnd_hide
  469.     dec     esi
  470.     cmp     esi, [win.height]
  471.     jg      wnd_hide
  472.  
  473.   ; ==== COUNT INDEX ====
  474.  
  475.     mov     eax, [dock_items.location]
  476.     and     eax, 1b
  477.     cmp     eax, 1
  478.     jne     .vert
  479.     mov     eax, edi
  480.     jmp     .nxt
  481.  
  482.  .vert:
  483.     mov     eax, esi
  484.     add     eax, 12
  485.  
  486.  .nxt:
  487.     sub     eax, 12
  488.     mov     edx, 0
  489.     mov     ebx, BUTTON_SIZE
  490.     div     ebx
  491.  
  492.     cmp     eax, [dock_items.count]
  493.     jge     .set0
  494.     jmp     .nxtcmp
  495.  
  496.  .set0:
  497.     mov     eax, 100
  498.  
  499.  .nxtcmp:
  500.     cmp     [win.button_index], eax
  501.     je      .nxt2
  502.  
  503.     push    dword[win.button_index]
  504.     pop     dword[win.prev_index]
  505.  
  506.     mov     [win.button_index], eax
  507.  
  508.  ; ==== DRAW SELECTION ====
  509.     call    DRAW_SELECTION
  510.  
  511.  .nxt2:
  512.     mov     eax, [win.button_index]
  513.     imul    eax, BUTTON_SIZE
  514.     cmp     byte[win.isvert], 1
  515.     je      .vert_name
  516.     add     eax, [win.x]
  517.     mov     [nwin.x], eax
  518.     mov     byte[nwin.change_shape], 1
  519.     mcall   SF_DRAW_RECT, <0, [win.width]>, <[win.height], 1>, [color.frame]
  520.     jmp     .vert_end
  521.  .vert_name:
  522.     add     eax, [win.y]
  523.     add     eax, 14
  524.     mov     [nwin.y], eax
  525.     mov     byte[nwin.change_shape], 1
  526.     mcall   SF_DRAW_RECT, <[win.width], 1>, <0, [win.height]>, [color.frame]
  527.  .vert_end:
  528.  
  529.  ; ==== OPEN/CLOSE WINDOW ====
  530.     cmp     byte[win.state], 1
  531.     je      main_loop
  532.  
  533.     mov     edx, esp
  534.     add     edx, 512
  535.     mcall   SF_CREATE_THREAD, 1, n_main
  536.  
  537.     mcall   SF_SYSTEM, SSF_GET_ACTIVE_WINDOW
  538.     mov     [win.psid], eax
  539.  
  540.     mcall   SF_SYSTEM, SSF_FOCUS_WINDOW, [win.sid]
  541.  
  542.     mov     byte[win.state], 1
  543.  
  544.     mov     eax, [win.width_opn]
  545.     mov     [win.width], eax
  546.  
  547.     mov     eax, [win.x_opn]
  548.     mov     [win.x], eax
  549.  
  550.     mov     eax, [win.height_opn]
  551.     mov     [win.height], eax
  552.  
  553.     mov     eax, [win.y_opn]
  554.     mov     [win.y], eax
  555.  
  556.  
  557.     cmp     byte[dock_items.ashow],1
  558.     je     .change_nothing
  559.     mcall   SF_CHANGE_WINDOW, [win.x], [win.y], [win.width], [win.height]
  560.  
  561.   .change_nothing:
  562.     call    DRAW_WINDOW
  563.     call    DRAW_SELECTION
  564.     jmp     main_loop
  565.  
  566. ;-------------------------------------------------------------------------------
  567. wnd_hide:
  568.     cmp     byte[win.state], 0
  569.     je      main_loop
  570.  
  571.     mov     byte[nwin.close], 1
  572.  
  573.     mcall   SF_SYSTEM, SSF_FOCUS_WINDOW, [win.psid]
  574.  
  575.     mov     byte[win.state], 0
  576.     mov     byte[win.button_index], -1
  577.  
  578.     cmp     byte[dock_items.ashow],1
  579.     je     .do_no_hide
  580.  
  581.     mov     eax, [win.width_hdn]
  582.     mov     [win.width], eax
  583.  
  584.     mov     eax, [win.x_hdn]
  585.     mov     [win.x], eax
  586.  
  587.     mov     eax, [win.height_hdn]
  588.     mov     [win.height], eax
  589.  
  590.     mov     eax, [win.y_hdn]
  591.     mov     [win.y], eax
  592.  
  593.     mcall   SF_CHANGE_WINDOW, [win.x], [win.y], [win.width], [win.height]
  594.  
  595.   .do_no_hide:
  596.     call    DRAW_WINDOW
  597.     jmp     main_loop
  598. ;-------------------------------------------------------------------------------
  599. DRAW_SELECTION:
  600.     mov     ebx, [win.prev_index]
  601.     imul    ebx, BUTTON_SIZE
  602.     add     ebx, 14
  603.     shl     ebx, 16
  604.     add     ebx, 40
  605.     mov     ecx, 0x00020028
  606.  
  607.     cmp     byte[win.isvert], 1
  608.     jne     @f
  609.     xchg    ebx, ecx
  610.     sub     ecx, 0x000C0000
  611.   @@:
  612.  
  613.     mcall   SF_DRAW_RECT, , , [color.bg]
  614.  
  615.     mov     edx, ebx
  616.     shr     ecx, 16
  617.     mov     dx, cx
  618.     add     edx, 0x00040004
  619.  
  620.     mov     ebx, [win.prev_index]
  621.     imul    ebx, 4
  622.     add     ebx, dock_items.icon
  623.     mov     ebx, [ebx]
  624.     imul    ebx, ICON_SIZE_BGR
  625.     add     ebx, [img_data.rgb_object]
  626.  
  627.     mcall   SF_PUT_IMAGE, , <32, 32>
  628.  
  629.     mov     ebx, [win.button_index]
  630.     imul    ebx, BUTTON_SIZE
  631.     add     ebx, 14
  632.     shl     ebx, 16
  633.     add     ebx, 40
  634.     mov     ecx, 0x00020028
  635.  
  636.     cmp     byte[win.isvert], 1
  637.     jne     @f
  638.     xchg    ebx, ecx
  639.     sub     ecx, 0x000C0000
  640.   @@:
  641.  
  642.     mcall   SF_DRAW_RECT, , , [color.bt]
  643.  
  644.     mov     edx, ebx
  645.     shr     ecx, 16
  646.     mov     dx, cx
  647.     add     edx, 0x00040004
  648.  
  649.     mov     ecx, [win.button_index]
  650.     imul    ecx, 4
  651.     add     ecx, dock_items.icon
  652.     mov     ecx, [ecx]
  653.     imul    ecx, ICON_SIZE_BGR
  654.     add     ecx, [img_data.rgb_object]
  655.  
  656.     mov     ebx, sel_img
  657.  
  658.     mov     edi, 0
  659.   @@:
  660.     mov     al, byte[ecx + 2]
  661.     shl     eax, 8
  662.     mov     al, byte[ecx + 1]
  663.     shl     eax, 8
  664.     mov     al, byte[ecx + 0]
  665.  
  666.     or      eax, 0x10000000
  667.     cmp     eax, [color.bg]
  668.     jne     .notbg
  669.     mov     eax, [color.bt]
  670.  .notbg:
  671.  
  672.     mov     byte[ebx + 0], al
  673.     shr     eax, 8
  674.     mov     byte[ebx + 1], al
  675.     shr     eax, 8
  676.     mov     byte[ebx + 2], al
  677.  
  678.     add     ebx, 3
  679.     add     ecx, 3
  680.  
  681.     add     edi, 3
  682.  
  683.     cmp     edi, 1024 * 3
  684.     jne     @b
  685.  
  686.     mcall   SF_PUT_IMAGE, sel_img, <32, 32>
  687.  
  688.     ret
  689. ;-------------------------------------------------------------------------------
  690. proc sections_callback, _file_name, _section_name
  691.     mov     eax, [_section_name]
  692.     cmp     byte[eax], '@'
  693.     jne     @f
  694.  
  695.     dec     dword[dock_items.count]
  696.     jmp     .endproc
  697.  
  698.   @@:
  699.     ; ==== GET NAME ====
  700.     mov     ebx, [dock_items.count]
  701.     imul    ebx, 16
  702.     add     ebx, dock_items.name
  703.  
  704.     mov     eax, [_section_name]
  705.  
  706.     mov     edi, 0
  707.   @@:
  708.     mov     cl, byte[eax]
  709.     mov     byte[ebx + edi], cl
  710.  
  711.     inc     eax
  712.     inc     edi
  713.     cmp     edi, 10
  714.     jne     @b
  715.  
  716.   ; ==== GET PATH ====
  717.     mov     ebx, [dock_items.count]
  718.     imul    ebx, 256
  719.     add     ebx, dock_items.path
  720.  
  721.     invoke  ini.get_str, [_file_name], [_section_name], ini_data.path_name, ebx, 256, 0
  722.  
  723.   ; === GET  PARAM ===
  724.     mov     ebx, [dock_items.count]
  725.     imul    ebx, 256
  726.     add     ebx, dock_items.param
  727.  
  728.     invoke  ini.get_str, [_file_name], [_section_name], ini_data.param_name, ebx, 256, 0
  729.  
  730.   ; ==== GET ICON ====
  731.     invoke  ini.get_int, [_file_name], [_section_name], ini_data.icon_name, 0
  732.  
  733.     mov     ebx, [dock_items.count]
  734.     imul    ebx, 4
  735.     mov     [dock_items.icon + ebx], eax
  736.  
  737.   ; ==== GET SEPARATOR ====
  738.     invoke  ini.get_int, [_file_name], [_section_name], ini_data.separator_name, 0
  739.  
  740.     mov     ebx, [dock_items.count]
  741.     mov     byte[dock_items.separator + ebx], al
  742.  
  743.   ; ====== END =======
  744.  .endproc:
  745.     mov     eax, 1
  746.     inc     dword[dock_items.count]
  747.     ret
  748. endp
  749. ;-------------------------------------------------------------------------------
  750.     include "MEMORY.INC"