Subversion Repositories Kolibri OS

Rev

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

  1. ;-----------------------------------------------------------------------------
  2. func drawwindow ;///// DRAW WINDOW ///////////////////////////////////////////
  3. ;-----------------------------------------------------------------------------
  4.  
  5.         cmp     [just_from_popup],1
  6.         jne     @f
  7.         ret
  8.     @@:
  9.  
  10.         mcall   48,3,sc,sizeof.system_colors
  11.         call    calc_3d_colors
  12.  
  13.         test    [options],OPTS_LINENUMS
  14.         jnz     @f
  15.         mov     eax,2+LCHGW
  16.         jmp     .lp1
  17.     @@: mov     edi,p_info+100
  18.         mov     eax,[lines]
  19.         mov     ecx,10
  20.         call    uint2str
  21.         lea     eax,[edi-p_info-100]
  22.         cmp     eax,3
  23.         jae     @f
  24.         mov     eax,3
  25.     @@: imul    eax,6
  26.         add     eax,2+4+LCHGW
  27.   .lp1: mov     [left_ofs],eax
  28.  
  29.         mcall   12,1
  30.  
  31.         push    [color_tbl+4*5]
  32.         pop     [sc.work]
  33.  
  34.         mov     edx,[sc.work]
  35.         add     edx,0x33000000
  36.         mov     ebx,[mainwnd_pos.x-2]
  37.         mov     bx,word[mainwnd_pos.w]
  38.         mov     ecx,[mainwnd_pos.y-2]
  39.         mov     cx,word[mainwnd_pos.h]
  40.         mcall   0,,,,,s_title
  41.  
  42.         mcall   9,p_info,-1
  43.         mov     esi,p_info.box.left
  44.         mov     edi,mainwnd_pos
  45.         mov     ecx,4
  46.         cld
  47.         rep     movsd
  48.  
  49. ;       mcall   9,p_info,-1
  50.         cmp     [p_info.client_box.height],LINEH
  51.         jl      .exit.2
  52.  
  53.         mov     [top_ofs],ATOPH;+1
  54.  
  55.         mov     eax,[p_info.client_box.width]
  56.         sub     eax,SCRLW+1
  57.         sub     eax,[left_ofs]
  58.         cdq
  59.         mov     ebx,6
  60.         div     ebx
  61.         mov     [columns.scr],eax
  62.  
  63.         mov     eax,[p_info.client_box.height] ; calculate buttons position
  64.         add     eax,-STATH;*3-2-2
  65.         sub     eax,[bot_dlg_height]
  66.         mov     [bot_ofs],eax
  67.  
  68.         call    draw_bottom_dialog
  69.  
  70.         mov     [do_not_draw],1 ; do_not_draw = true
  71.  
  72.         mov     ebx,eax
  73.         sub     ebx,[top_ofs]
  74.         sub     ebx,SCRLW*3+AMINS+5
  75.         js      .no_draw
  76.  
  77.         dec     [do_not_draw]    ; do_not_draw = false
  78.         sub     eax,SCRLW+3
  79.         sub     eax,[top_ofs]
  80.         cdq
  81.         mov     ebx,LINEH
  82.         div     ebx
  83.         mov     [lines.scr],eax
  84.  
  85.         mov     ebx,[p_info.client_box.width]
  86.         mov     ecx,[top_ofs-2]
  87.         mov     cx,word[top_ofs]
  88.         sub     ecx,1*65536+1
  89.         mcall   38,,,[cl_3d_inset];[sc.work_text]
  90.         mov     ecx,[p_info.client_box.height]
  91.         sub     ecx,STATH+1
  92.         push    cx
  93.         shl     ecx,16
  94.         pop     cx
  95.         mcall
  96.  
  97.         inc     [top_ofs]
  98.  
  99.         call    draw_main_menu
  100.  
  101.         jmp     .exit
  102.  
  103.   .no_draw:
  104.         mov     [top_ofs],2
  105.         mov     eax,[p_info.client_box.height]
  106.         inc     eax
  107.         mov     [bot_ofs],eax
  108.         sub     eax,2
  109.         push    eax
  110.         add     eax,-2-SCRLW
  111.         cdq
  112.         mov     ebx,LINEH
  113.         idiv    ebx
  114.         mov     [lines.scr],eax
  115.         pop     eax
  116.  
  117.         mov     ebx,[p_info.client_box.height]
  118.         sub     ebx,SCRLW*3+AMINS+2
  119.         jns     @f
  120.  
  121.         inc     [do_not_draw]
  122.  
  123.         dec     eax
  124.         cdq
  125.         mov     ebx,LINEH
  126.         idiv    ebx
  127.         mov     [lines.scr],eax
  128.  
  129.         mov     eax,[p_info.client_box.width]
  130.         cdq
  131.         mov     ebx,6
  132.         idiv    ebx
  133.         mov     [columns.scr],eax
  134.     @@:
  135.  
  136.   .exit:
  137.         call    draw_file
  138.   .exit.2:
  139.         mcall   12,2
  140.         ret
  141. endf
  142.  
  143. ;-----------------------------------------------------------------------------
  144. func draw_bottom_dialog ;/////////////////////////////////////////////////////
  145. ;-----------------------------------------------------------------------------
  146.         cmp     [bot_dlg_height],0
  147.         je      .exit
  148.         pushad
  149.         mov     ebx,[p_info.client_box.width]
  150.         mov     ecx,[bot_ofs]
  151.         dec     ecx
  152.         push    cx
  153.         shl     ecx,16
  154.         pop     cx
  155.         mcall   38,,,[cl_3d_inset]
  156.         mov     ecx,[bot_ofs-2]
  157.         mov     cx,word[bot_dlg_height]
  158.         dec     ecx
  159.         mov     ebx,[p_info.client_box.width]
  160.         inc     ebx
  161.         mcall   13,,,[cl_3d_normal]
  162.         mov     al,1
  163.         call    [bot_dlg_handler]
  164.         popad
  165.  
  166.   .exit:
  167.         ret
  168. endf
  169.  
  170. mi_sel   dd ?
  171. mi_cur   dd -1
  172.  
  173. ;-----------------------------------------------------------------------------
  174. func draw_main_menu ;/////////////////////////////////////////////////////////
  175. ;-----------------------------------------------------------------------------
  176.         mov     ebx,[p_info.client_box.width]
  177.         inc     ebx
  178.         mcall   13,,ATOPH-1,[cl_3d_normal]
  179.  
  180.         mov     edx,main_menu
  181.         mov     ebx,9*65536+ATOPH/2-4
  182.         mov     ecx,[sc.work_text]
  183.         mov     [mi_sel],0
  184.         mov     edi,[mi_cur]
  185.     @@: inc     [mi_sel]
  186.         cmp     [mi_sel],main_menu.cnt_item
  187.         ja      .exit
  188.         cmp     edi,[mi_sel]
  189.         jne     .lp1
  190.         pushad
  191.         push    edx
  192.         mcall   13,[edx+0],[edx+4],[cl_3d_pushed]
  193.         mov     edx,[esp]
  194.         mov     bx,[edx+2]
  195.         mcall   38,,,[cl_3d_inset]
  196.         pop     edx
  197.         movzx   eax,word[edx]
  198.         add     ebx,eax
  199.         shl     eax,16
  200.         add     ebx,eax
  201.         mcall   38,,,[cl_3d_inset]
  202.         popad
  203.   .lp1: add     edx,8+1
  204.         movzx   esi,byte[edx-1]
  205.         mcall   4
  206.         add     edx,esi
  207.         add     esi,2
  208.         imul    esi,6*65536
  209.         add     ebx,esi
  210.         jmp     @b
  211.  
  212.   .exit:
  213.         ret
  214. endf
  215.  
  216. ;-----------------------------------------------------------------------------
  217. func draw_file.ex ;///////////////////////////////////////////////////////////
  218. ;-----------------------------------------------------------------------------
  219. ; Input:
  220. ;  EAX = start line
  221. ;  EBX = end line
  222. ;-----------------------------------------------------------------------------
  223.         cmp     [p_info.client_box.height],LINEH
  224.         jge     @f
  225.         ret
  226.     @@:
  227.         call    init_sel_vars
  228.         call    check_bottom_right
  229.  
  230.         pushad
  231.  
  232.         cmp     [lines.scr],0
  233.         jle     draw_file.exit
  234.  
  235.         cmp     eax,ebx
  236.         jle     @f
  237.         xchg    eax,ebx
  238.     @@: cmp     eax,[top_line]
  239.         jge     @f
  240.         mov     eax,[top_line]
  241.     @@: mov     ecx,[top_line]
  242.         add     ecx,[lines.scr]
  243.         cmp     ebx,ecx
  244.         jl      @f
  245.         dec     ecx
  246.         mov     ebx,ecx
  247.     @@: cmp     eax,ebx
  248.         jg      draw_file.exit
  249.  
  250.         mov     ecx,eax
  251.         push    eax
  252.         call    get_line_offset
  253.  
  254.   .start:
  255.         mov     ecx,ebx
  256.         sub     ecx,eax
  257.         inc     ecx
  258.  
  259.         mov     ebx,[top_ofs]
  260.         add     ebx,[left_ofs-2]
  261.         sub     eax,[top_line]
  262.         imul    eax,LINEH
  263.         add     ebx,eax
  264.  
  265.         imul    ebp,[left_col],6*65536
  266.         or      [draw_blines],-1
  267.  
  268.         jmp     draw_file.next_line
  269. endf
  270.  
  271. ;-----------------------------------------------------------------------------
  272. func draw_file ;//////////////////////////////////////////////////////////////
  273. ;-----------------------------------------------------------------------------
  274.         cmp     [p_info.client_box.height],LINEH
  275.         jge     @f
  276.         ret
  277.     @@:
  278.         call    init_sel_vars
  279.         call    check_bottom_right
  280.  
  281.         pushad
  282.  
  283.         mov     ebx,[top_ofs]
  284.         add     ebx,[left_ofs-2]
  285.  
  286.         mov     ecx,[top_line]
  287.         push    ecx
  288.         call    get_line_offset
  289.  
  290.   .start:
  291.         add     esp,4
  292.         mov     ecx,[lines.scr]
  293.         or      ecx,ecx
  294.         jle     .exit
  295.         add     esp,-4
  296.  
  297.         imul    ebp,[left_col],6*65536
  298.         mov     eax,[lines.scr]
  299.         sub     eax,[lines]
  300.         mov     [draw_blines],eax
  301.  
  302.   .next_line:
  303.  
  304.         push    ecx ebx
  305.  
  306.         mov     ecx,ebx
  307.         shl     ecx,16
  308.         mov     cl,LINEH
  309.         mov     ebx,[p_info.client_box.width]
  310.         add     ebx,-SCRLW
  311.         add     ebx,[left_ofs-2]
  312.         sub     ebx,[left_ofs]
  313.         add     ebx,-1*65536+1
  314.  
  315.   ; selection (text background)
  316.         mov     [in_sel],0
  317.         mov     edx,[color_tbl+4*5]
  318.         mov     eax,[esp+4*2]
  319.         cmp     eax,[sel.begin.y]
  320.         jl      .lp6
  321.         je      .lp1
  322.         cmp     eax,[sel.end.y]
  323.         jg      .lp6
  324.         je      .lp3
  325.         jmp     .lp6.2
  326.   .lp1: mov     eax,[sel.begin.y]
  327.         cmp     eax,[sel.end.y]
  328.         je      .lp5
  329.   .lp2: mov     eax,[sel.begin.x]
  330.         sub     eax,[left_col]
  331.         jle     .lp6.2
  332.         cmp     eax,[columns.scr]
  333.         jge     .lp6
  334.         imul    eax,6
  335.         pushad
  336.         sub     bx,ax
  337.         rol     ebx,16
  338.         mov     bx,ax
  339.         add     ebx,[left_ofs];OLEFT-1
  340.         dec     ebx
  341.         rol     ebx,16
  342.         mov     edx,[color_tbl+4*7]
  343.         mcall   13
  344.         popad
  345. ;       inc     eax
  346.         mov     bx,ax
  347.         mov     [in_sel],2
  348.         jmp     .lp6
  349.   .lp3: mov     eax,[sel.begin.y]
  350.         cmp     eax,[sel.end.y]
  351.         je      .lp5
  352.   .lp4: mov     eax,[sel.end.x]
  353.         sub     eax,[left_col]
  354.         jle     .lp6
  355.         cmp     eax,[columns.scr]
  356.         jg      .lp6.2
  357.         imul    eax,6
  358.         pushad
  359.         sub     bx,ax
  360.         rol     ebx,16
  361.         add     eax,[left_ofs];OLEFT-1
  362.         dec     eax
  363.         mov     bx,ax
  364.         rol     ebx,16
  365. ;       inc     ebx
  366.         mcall   13
  367.         popad
  368.         mov     edx,[color_tbl+4*7]
  369.         mov     bx,ax
  370.         mov     [in_sel],3
  371.         jmp     .lp6
  372.   .lp5: mov     eax,[left_col]
  373.         cmp     eax,[sel.begin.x]
  374.         jge     .lp4
  375.         add     eax,[columns.scr]
  376.         cmp     eax,[sel.end.x]
  377.         jl      .lp2
  378.         mov     eax,[sel.begin.x]
  379.         cmp     eax,[sel.end.x]
  380.         je      .lp6
  381.         sub     eax,[left_col]
  382.         imul    eax,6
  383.         pushad
  384.         mov     ebx,[sel.end.x]
  385.         sub     ebx,[sel.begin.x]
  386. ;       inc     ebx
  387.         imul    ebx,6
  388.         sal     ebx,16
  389.         dec     eax
  390.         add     eax,[left_ofs]
  391.         mov     bx,ax
  392.         rol     ebx,16
  393.         mov     edx,[color_tbl+4*7]
  394.         mcall   13
  395.         movzx   eax,bx
  396.         sar     ebx,16
  397.         add     eax,ebx
  398.         mov     ebx,eax
  399.         sal     ebx,16
  400.         sub     ax,[esp+4*4]
  401.         neg     ax
  402.         add     ax,word[left_ofs]
  403.         mov     bx,ax
  404.         mov     edx,[color_tbl+4*5]
  405.         mcall   13
  406.         popad
  407.         mov     bx,ax
  408.         mov     [in_sel],4
  409.         jmp     .lp6
  410.  
  411.   .lp6.2:
  412.         mov     edx,[color_tbl+4*7]
  413.         inc     [in_sel]
  414.   .lp6:
  415.         mcall   13
  416.  
  417.         lodsd
  418.  
  419.         pushad
  420.         mov     edx,[color_tbl+4*5]
  421.         test    eax,0x00010000
  422.         jz      @f
  423.         mov     edx,[color_tbl+4*8]
  424.         test    eax,0x00020000
  425.         jz      @f
  426.         mov     edx,[color_tbl+4*9]
  427.     @@: mov     ebx,[left_ofs]
  428.         add     ebx,-4
  429.         shl     ebx,16
  430.         mov     bx,LCHGW
  431.         mcall   13
  432.         popad
  433.  
  434.  
  435.         xor     ecx,ecx
  436.         and     eax,0x0000FFFF
  437.         mov     [cur_line_len],eax
  438.  
  439.         or      eax,eax
  440.         ja      .next_block
  441.         add     esp,4*2
  442.         jmp     .draw_cursor
  443.  
  444.   .next_block:
  445.  
  446.         push    esi ecx
  447.         call    get_next_part
  448.         pop     ebx
  449.  
  450.         push    ecx
  451.         mov     ecx,eax
  452.  
  453.         push    esi ebx
  454.         mov     eax,ebx
  455.         sub     ebx,[left_col]
  456.         cmp     ebx,[columns.scr]
  457.         jge     .skip_t
  458.         add     ebx,esi
  459.         jle     .skip_t
  460.         mov     ebx,[esp+8+4*2] ;// 4*2=esi+ebx
  461.         sub     eax,[left_col]
  462.         jge     .qqq
  463.         sub     edx,eax
  464.         add     esi,eax
  465. ;       mov     eax,OLEFT*65536
  466.         xor     eax,eax
  467.         jmp     .qqq2
  468.   .qqq:
  469. ;       inc     eax
  470.         imul    eax,6*65536
  471.   .qqq2:
  472.         and     ebx,0x0000FFFF
  473.         add     eax,[left_ofs-2];OLEFT*65536
  474.         add     ebx,eax
  475.  
  476.         mov     eax,[esp]   ; ebx
  477.         add     eax,[esp+4] ; esi
  478.         sub     eax,[left_col]
  479.         sub     eax,[columns.scr]
  480.         jle     .qweqwe
  481.         sub     esi,eax
  482.   .qweqwe:
  483.  
  484.         mov     al,[in_sel]
  485.         cmp     al,0
  486.         je      .draw_t
  487.         dec     al
  488.         jz      .ya4
  489.   .nt1: dec     al
  490.         jnz     .nt2
  491.         mov     eax,[esp]
  492.         cmp     eax,[sel.begin.x]
  493.         jge     .ya4
  494.         add     eax,[esp+4]
  495.         cmp     eax,[sel.begin.x]
  496.         jl      .draw_t
  497. ;---[ selection crosses block from the right ]-(-
  498.   .ya1: mov     eax,esi
  499.         mov     esi,[sel.begin.x]
  500.         sub     esi,[esp]
  501.         pushad
  502.         mov     ecx,[left_col]
  503.         sub     ecx,[esp+4*8]
  504.         jle     @f
  505.         sub     esi,ecx
  506.         sub     [esp+4],ecx
  507.     @@: sub     eax,esi
  508.         add     edx,esi
  509.         imul    esi,6
  510.         rol     ebx,16
  511.         add     bx,si
  512.         rol     ebx,16
  513.         mov     esi,eax
  514.         mov     ecx,[color_tbl+4*6]
  515.         mcall   4
  516.         popad
  517.         jmp     .draw_t
  518. ;----------------------------------------------)-
  519.   .nt2: dec     al
  520.         jnz     .nt3
  521.         mov     eax,[esp]
  522.         cmp     eax,[sel.end.x]
  523.         jge     .draw_t
  524.         add     eax,[esp+4]
  525.         cmp     eax,[sel.end.x]
  526.         jl      .ya4
  527. ;---[ selection crosses block from the left ]--(-
  528.   .ya2: mov     eax,[sel.end.x]
  529.         sub     eax,[esp]
  530.         push    ebx
  531.         mov     ebx,[esp+4]
  532.         sub     ebx,[left_col]
  533.         jge     .ya2.1
  534.         add     eax,ebx
  535.   .ya2.1:
  536.         pop     ebx
  537.         pushad
  538.         mov     esi,eax
  539.         mov     ecx,[color_tbl+4*6]
  540.         mcall   4
  541.         popad
  542.         sub     esi,eax
  543.         add     edx,eax
  544.         imul    eax,6*65536
  545.         add     ebx,eax
  546.         jmp     .draw_t
  547. ;----------------------------------------------)-
  548.   .nt3: mov     eax,[esp]
  549.         cmp     eax,[sel.end.x]
  550.         jge     .draw_t
  551.         cmp     eax,[sel.begin.x]
  552.         jge     @f
  553.         add     eax,[esp+4]
  554.         cmp     eax,[sel.begin.x]
  555.         jl      .draw_t
  556.         cmp     eax,[sel.end.x]
  557.         jl      .ya1
  558. ;---[ selection inside block ]-----------------(-
  559.         mov     eax,esi
  560.         mov     esi,[sel.begin.x]
  561.         sub     esi,[esp]
  562.         push    eax
  563.         mov     eax,[esp+4]
  564.         sub     eax,[left_col]
  565.         jge     .nt3.1
  566.         add     esi,eax
  567.   .nt3.1:
  568.         pop     eax
  569.         sub     eax,esi
  570.         pushad
  571.         add     edx,esi
  572.         imul    esi,6*65536
  573.         add     ebx,esi
  574.         mov     esi,[sel.end.x]
  575.         sub     esi,[sel.begin.x]
  576.         mov     ecx,[color_tbl+4*6]
  577.         sub     eax,esi
  578.         push    eax
  579.         mcall   4
  580.         add     edx,esi
  581.         imul    esi,6*65536
  582.         add     ebx,esi
  583.         pop     esi
  584.         mov     ecx,[esp+4*6]
  585.         mcall   4
  586.         popad
  587.         jmp     .draw_t
  588. ;----------------------------------------------)-
  589.     @@: add     eax,esi
  590.         dec     eax
  591.         cmp     eax,[sel.end.x]
  592.         jge     .ya2
  593. ;---[ block inside selection ]-----------------(-
  594.   .ya4: mov     ecx,[color_tbl+4*6]
  595. ;----------------------------------------------)-
  596.  
  597.   .draw_t:
  598.         mcall   4;[esp+8]
  599.   .skip_t:
  600.         pop     eax eax ; ebx esi
  601.         imul    eax,6
  602.         add     [esp+4*2+2],ax
  603.         pop     ecx esi
  604.         cmp     ecx,[cur_line_len];LINE_WIDTH
  605.         jl      .next_block
  606.  
  607.         pop     ebx ecx
  608.         and     ebx,0x0000FFFF
  609.         add     ebx,[left_ofs-2]
  610.         add     ebx,LINEH
  611.         add     esi,[cur_line_len];LINE_WIDTH
  612.         inc     dword[esp]
  613.         dec     ecx
  614.         jg      .next_line
  615.  
  616. ;------------------------------------------------
  617.   .draw_cursor:
  618.  
  619. ;------------------------------------------------
  620.         mov     ebx,[left_ofs]
  621.         cmp     ebx,2+LCHGW
  622.         je      .no_gutter
  623.         add     esp,-4*8*2
  624.         sub     ebx,3+LCHGW
  625.         mov     ecx,[top_ofs]
  626.         dec     ecx
  627.         shl     ecx,16
  628.         add     ecx,[bot_ofs]
  629.         sub     ecx,[top_ofs]
  630.         sub     ecx,SCRLW
  631.         mcall   13,,,[cl_3d_normal]
  632.  
  633.         push    bx
  634.         shl     ebx,16
  635.         pop     bx
  636.         add     ecx,[top_ofs]
  637.         dec     ecx
  638.         mcall   38,,,[cl_3d_inset]
  639.  
  640.         mov     ebx,[left_ofs]
  641.         add     ebx,-3-LCHGW
  642.         shl     ebx,16
  643.         add     ebx,[top_ofs]
  644.         mov     edi,[sc.work_text]
  645.         mov     ecx,[top_line]
  646.         inc     ecx
  647.         mov     edx,p_info+100
  648.     @@: pushad
  649.         push    eax edx edi
  650.         mov     eax,ecx
  651.         mov     ecx,10
  652.         mov     edi,edx
  653.         call    uint2str
  654.         mov     esi,edi
  655.         pop     edi edx eax
  656.         sub     esi,edx
  657.         imul    eax,esi,6*65536
  658.         sub     ebx,eax
  659.         mcall   4,,edi
  660.         popad
  661.         add     ebx,LINEH
  662.         inc     ecx
  663.         cmp     ecx,[lines]
  664.         jg      @f
  665.         mov     esi,ecx
  666.         sub     esi,[top_line]
  667.         cmp     esi,[lines.scr]
  668.         jbe     @b
  669.     @@: add     esp,4*8*2
  670.  
  671.   .no_gutter:
  672. ;------------------------------------------------
  673.  
  674.         mov     ebx,[draw_blines]
  675.         or      ebx,ebx
  676.         js      @f
  677.         imul    ebx,LINEH
  678.         mov     ecx,[esp-8]
  679.         shl     ecx,16
  680.         mov     cx,bx
  681.         mov     ebx,[p_info.client_box.width]
  682.         add     ebx,[left_ofs-2]
  683.         sub     ebx,[left_ofs]
  684.         add     ebx,-1*65536-SCRLW+1 ; <OLEFT-1,LINE_WIDTH*6+2>
  685.         mcall   13,,,[color_tbl+4*5]
  686.     @@:
  687.  
  688.         add     esp,4
  689.         cmp     [bot_mode],0
  690.         jne     @f
  691.         mov     ebx,[pos.x]
  692.         sub     ebx,[left_col]
  693.         js      @f
  694.         cmp     ebx,[columns.scr]
  695.         ja      @f
  696.         imul    ebx,6
  697.         add     ebx,[left_ofs]
  698.         dec     ebx
  699.         push    bx
  700.         shl     ebx,16
  701.         pop     bx
  702.         mov     eax,[pos.y]
  703.         sub     eax,[top_line]
  704.         js      @f
  705.         cmp     eax,[lines.scr]
  706.         jge     @f
  707.         imul    eax,LINEH
  708.         add     eax,[top_ofs]
  709. ;       inc     eax
  710.         mov     esi,eax
  711.         shl     esi,16
  712.         add     eax,LINEH-2
  713.         mov     si,ax
  714.         mov     ecx,2
  715.         cmp     [ins_mode],0
  716.         jne     .lp8
  717.         add     cl,4
  718.   .lp8: push    ecx
  719.         mcall   38,,esi,0x01000000
  720.         add     ebx,0x00010001
  721.         pop     ecx
  722.         loop    .lp8
  723.     @@:
  724. ;------------------------------------------------
  725.         cmp     [do_not_draw],2
  726.         je      .exit
  727.  
  728. ;        mov     ebx,[p_info.x_size]
  729. ;        shl     ebx,16
  730. ;        add     ebx,(-SCRLW-5+2)*65536+SCRLW-2
  731. ;        mov     ecx,[top_ofs-2]
  732. ;        mov     cx,SCRLW-1
  733. ;        mcall   8,,,'UP',[sc.work_button]
  734. ;!!!!!!!!!!!!!!!!!!
  735.         mov     ebx,[p_info.client_box.width]
  736.         shl     ebx,16
  737.         add     ebx,(-SCRLW)*65536+SCRLW
  738.         mov     ecx,[top_ofs-2]
  739.         mov     cx,SCRLW
  740.         sub     ecx,0x00020000
  741.         mcall   8,,,'UP' or 0x40000000
  742.         pushad
  743.         sar     ebx,16
  744.         sar     ecx,16
  745.         push    ebx ecx SCRLW SCRLW
  746.         call    draw_3d_panel
  747.         popad
  748.         mov     eax,8
  749. ;!!!!!!!!!!!!!!!!!!
  750.  
  751.         pushad
  752.         push    0x18
  753.         shr     ecx,16
  754.         mov     bx,cx
  755.         add     ebx,(SCRLW/2-2)*65536+SCRLW/2-3
  756.         mcall   4,,[sc.work_text],esp,1
  757.         add     esp,4
  758.         popad
  759.  
  760. ;        mov     ecx,[bot_ofs]
  761. ;        shl     ecx,16
  762. ;        add     ecx,(-SCRLW*2-1)*65536+SCRLW-1
  763. ;        mcall   ,,,'DN'
  764. ;!!!!!!!!!!!!!!!!!!
  765.         mov     ecx,[bot_ofs]
  766.         shl     ecx,16
  767.         add     ecx,(-SCRLW*2-1)*65536+SCRLW
  768.         mcall   ,,,'DN' or 0x40000000
  769.         pushad
  770.         sar     ebx,16
  771.         sar     ecx,16
  772.         push    ebx ecx SCRLW SCRLW
  773.         call    draw_3d_panel
  774.         popad
  775.         mov     eax,8
  776. ;!!!!!!!!!!!!!!!!!!
  777.  
  778.         pushad
  779.         push    0x19
  780.         shr     ecx,16
  781.         mov     bx,cx
  782.         add     ebx,(SCRLW/2-2)*65536+SCRLW/2-3
  783.         mcall   4,,[sc.work_text],esp,1
  784.         add     esp,4
  785.         popad
  786. ;        sub     ebx,1*65536-2
  787.  
  788.         push    ebx
  789.         mov     eax,[lines]
  790.         mov     ebx,[lines.scr]
  791.         mov     ecx,[top_line]
  792.         mov     edx,[bot_ofs]
  793.         sub     edx,[top_ofs]
  794.         add     edx,-SCRLW*3+1
  795.         call    get_scroll_vars
  796.         mov     [vscrl_top],eax
  797.         mov     [vscrl_size],ebx
  798.         pop     ebx
  799.  
  800.         mov     ecx,eax
  801.         add     ecx,[top_ofs]
  802.         add     ecx,SCRLW-1
  803. ;        shl     ecx,16
  804. ;        mov     cx,word[vscrl_size]
  805.  
  806. ;       mcall   13,,,[sc.work_button]
  807. ;!!!!!!!!!!!!!!!!!!
  808.         pushad
  809.         sar     ebx,16
  810. ;        rol     ecx,16
  811. ;        movsx   eax,cx
  812. ;        sar     ecx,16
  813.         push    ebx ecx SCRLW [vscrl_size]
  814.         dec     dword[esp]
  815.         call    draw_3d_panel
  816.         popad
  817.         mov     eax,13
  818. ;!!!!!!!!!!!!!!!!!!
  819.         inc     ebx
  820.  
  821.         mov     ecx,[top_ofs-2]
  822.         mov     cx,word[vscrl_top]
  823.         add     ecx,(SCRLW-1)*65536
  824.         mov     edx,[sc.work];[color_tbl+4*5]
  825.         or      cx,cx
  826.         jle     @f
  827.         mcall   13
  828.     @@:
  829.         mov     ecx,[top_ofs]
  830.         add     ecx,[vscrl_top]
  831.         add     ecx,[vscrl_size]
  832.         add     ecx,SCRLW-1
  833.         mov     di,cx
  834.         shl     ecx,16
  835.         mov     cx,word[bot_ofs]
  836.         sub     cx,di
  837.         sub     cx,SCRLW*2+1
  838.         jle     @f
  839.         mcall
  840.     @@:
  841. ;-----------------------
  842. ;        mov     eax,ebx
  843. ;        shr     eax,16
  844. ;        add     bx,ax
  845. ;        mov     ecx,[top_ofs-2]
  846. ;        mov     cx,word[top_ofs]
  847. ;        add     ecx,SCRLW*65536+SCRLW
  848. ;        mcall   38,,,[sc.work_graph];[sc.work_text]
  849. ;        mov     ecx,[bot_ofs-2]
  850. ;        mov     cx,word[bot_ofs]
  851. ;        sub     ecx,(SCRLW*2+2)*65536+(SCRLW*2+2)
  852. ;        mcall
  853.         rol     ebx,16
  854.         push    bx
  855.         rol     ebx,16
  856.         pop     bx
  857.         mov     ecx,[top_ofs-2]
  858.         mov     cx,word[bot_ofs]
  859.         add     ecx,(SCRLW-1)*65536-SCRLW*2-2
  860.         mcall   38,,,[cl_3d_inset]
  861. ;------------------------------------------------
  862. ;        mov     ebx,5*65536+SCRLW-1
  863. ;        mov     ecx,[bot_ofs]
  864. ;        shl     ecx,16
  865. ;        add     ecx,(-SCRLW)*65536+SCRLW-2
  866. ;        mcall   8,,,'LT',[sc.work_button]
  867. ;!!!!!!!!!!!!!!!!!!
  868.         mov     ebx,SCRLW
  869.         mov     ecx,[bot_ofs]
  870.         shl     ecx,16
  871.         add     ecx,(-SCRLW-1)*65536+SCRLW
  872.         mcall   8,,,'LT' or 0x40000000
  873.         pushad
  874.         sar     ebx,16
  875.         sar     ecx,16
  876.         push    ebx ecx SCRLW SCRLW
  877.         call    draw_3d_panel
  878.         popad
  879. ;!!!!!!!!!!!!!!!!!!
  880.  
  881.         pushad
  882.         push    0x1B
  883.         shr     ecx,16
  884.         mov     bx,cx
  885.         add     ebx,(SCRLW/2-2)*65536+SCRLW/2-3
  886.         mcall   4,,[sc.work_text],esp,1
  887.         add     esp,4
  888.         popad
  889.  
  890. ;        mov     ebx,[p_info.x_size]
  891. ;        shl     ebx,16
  892. ;        add     ebx,(-SCRLW*2-5)*65536+SCRLW
  893. ;        mcall   ,,,'RT'
  894. ;!!!!!!!!!!!!!!!!!!
  895.         mov     ebx,[p_info.client_box.width]
  896.         shl     ebx,16
  897.         add     ebx,(-SCRLW*2)*65536+SCRLW
  898.         mcall   8,,,'RT' or 0x40000000
  899.         pushad
  900.         sar     ebx,16
  901.         sar     ecx,16
  902.         push    ebx ecx SCRLW SCRLW
  903.         call    draw_3d_panel
  904.         popad
  905. ;!!!!!!!!!!!!!!!!!!
  906.  
  907.         pushad
  908.         push    0x1A
  909.         shr     ecx,16
  910.         mov     bx,cx
  911.         add     ebx,(SCRLW/2-2)*65536+SCRLW/2-3
  912.         mcall   4,,[sc.work_text],esp,1
  913.         add     esp,4
  914.         popad
  915. ;       inc     ecx
  916.  
  917.         push    ecx
  918.         mov     eax,[columns]
  919.         mov     ebx,[columns.scr]
  920.         mov     ecx,[left_col]
  921.         mov     edx,[p_info.client_box.width]
  922.         add     edx,-(SCRLW*3)
  923.         call    get_scroll_vars
  924.         mov     [hscrl_top],eax
  925.         mov     [hscrl_size],ebx
  926.         pop     ecx
  927.  
  928.         mov     ebx,eax
  929.         add     ebx,1+SCRLW
  930.         shl     ebx,16
  931.         mov     bx,word[hscrl_size]
  932.  
  933. ;        mcall   13,,,[sc.work_button]
  934. ;!!!!!!!!!!!!!!!!!!
  935.         pushad
  936.         sar     ecx,16
  937.         rol     ebx,16
  938.         movsx   eax,bx
  939.         sar     ebx,16
  940.         dec     ebx
  941.         push    eax ecx ebx SCRLW
  942.         call    draw_3d_panel
  943.         popad
  944. ;!!!!!!!!!!!!!!!!!!
  945.  
  946.         mov     ebx,(1+SCRLW)*65536
  947.         mov     bx,word[hscrl_top]
  948.         mcall   13,,,[sc.work];[color_tbl+4*5]
  949.         mov     ebx,1+SCRLW
  950.         add     ebx,[hscrl_top]
  951.         add     ebx,[hscrl_size]
  952.         mov     di,bx
  953.         shl     ebx,16
  954.         mov     bx,word[p_info.client_box.width]
  955.         sub     bx,di
  956.         sub     bx,SCRLW*2
  957.         jle     @f
  958.         mcall
  959.     @@:
  960. ;        mov     eax,ebx
  961. ;        shr     eax,16
  962. ;        add     bx,ax
  963. ;        mov     ecx,[bot_ofs-2]
  964. ;        mov     cx,word[bot_ofs]
  965. ;        sub     ecx,SCRLW*65536+2
  966. ;        mcall   38,<OLEFT+SCRLW-1,OLEFT+SCRLW-1>,,[sc.work_graph];[sc.work_text]
  967. ;        mov     ebx,[p_info.x_size-2]
  968. ;        mov     bx,word[p_info.x_size]
  969. ;        sub     ebx,(SCRLW*2+6)*65536+(SCRLW*2+6)
  970. ;        mcall
  971.         mov     ebx,[p_info.client_box.width]
  972. ;       add     ebx,5*65536-5
  973.         mov     ecx,[bot_ofs-2]
  974.         mov     cx,word[bot_ofs]
  975.         sub     ecx,(SCRLW+1)*65536+(SCRLW+1)
  976.         mcall   38,,,[cl_3d_inset]
  977. ;------------------------------------------------
  978.   .exit:
  979.         popad
  980.         ret
  981. endf
  982.  
  983. ;-----------------------------------------------------------------------------
  984. func get_next_part ;//////////////////////////////////////////////////////////
  985. ;-----------------------------------------------------------------------------
  986. ; Input:
  987. ;  ECX = current letter
  988. ;  ESI = string
  989. ; Output:
  990. ;  ECX = color
  991. ;  EDX = string
  992. ;  ESI = length
  993. ;-----------------------------------------------------------------------------
  994.         cmp     [asm_mode],0
  995.         je      .plain.text
  996.         xor     ebx,ebx
  997.         mov     edx,ecx
  998.         add     esi,ecx
  999.         mov     edi,symbols
  1000.         mov     al,[esi]
  1001.         cmp     al,';'
  1002.         je      .comment
  1003.         mov     ecx,symbols.size
  1004.         repne   scasb
  1005.         je      .symbol
  1006.         cmp     al,'$'
  1007.         jne     @f
  1008.         mov     edi,symbols
  1009.         mov     al,[esi+1]
  1010.         mov     ecx,symbols.size
  1011.         repne   scasb
  1012.         je      .not_symbol
  1013.         jmp     .number
  1014.     @@: cmp     al,'0'
  1015.         jb      @f
  1016.         cmp     al,'9'
  1017.         jbe     .number
  1018.     @@: cmp     al,"'"
  1019.         je      .string
  1020.         cmp     al,'"'
  1021.         je      .string
  1022.   .not_symbol:
  1023.         inc     ebx
  1024.         inc     edx
  1025.         cmp     edx,[cur_line_len];LINE_WIDTH
  1026.         jge     @f
  1027.         mov     edi,symbols
  1028.         mov     al,[esi+ebx]
  1029.         cmp     al,';'
  1030.         je      @f
  1031.         mov     ecx,symbols.size
  1032.         repne   scasb
  1033.         jne     .not_symbol
  1034.     @@: mov     ecx,edx
  1035.         mov     edx,esi
  1036.         mov     esi,ebx
  1037.         mov     eax,[color_tbl+4*0]
  1038.         ret
  1039.   .symbol:
  1040.         inc     ebx
  1041.         inc     edx
  1042.         cmp     edx,[cur_line_len];LINE_WIDTH
  1043.         jge     @f
  1044.         mov     edi,symbols
  1045.         mov     al,[esi+ebx]
  1046.         mov     ecx,symbols.size
  1047.         repne   scasb
  1048.         je      .symbol
  1049.     @@: mov     ecx,edx
  1050.         mov     edx,esi
  1051.         mov     esi,ebx
  1052.         mov     eax,[color_tbl+4*4]
  1053.         ret
  1054.   .comment:
  1055.         neg     edx
  1056.         add     edx,[cur_line_len];LINE_WIDTH
  1057.         xchg    edx,esi
  1058.         mov     ecx,[cur_line_len];LINE_WIDTH
  1059.         mov     eax,[color_tbl+4*3]
  1060.         ret
  1061.   .number:
  1062.         inc     ebx
  1063.         inc     edx
  1064.         cmp     edx,[cur_line_len];LINE_WIDTH
  1065.         jge     @f
  1066.         mov     edi,symbols
  1067.         mov     al,[esi+ebx]
  1068.         cmp     al,';'
  1069.         je      @f
  1070.         mov     ecx,symbols.size
  1071.         repne   scasb
  1072.         jne     .number
  1073.     @@: mov     ecx,edx
  1074.         mov     edx,esi
  1075.         mov     esi,ebx
  1076.         mov     eax,[color_tbl+4*1]
  1077.         ret
  1078.   .string:
  1079.         inc     ebx
  1080.         inc     edx
  1081.         cmp     edx,[cur_line_len];LINE_WIDTH
  1082.         jge     @f
  1083.         cmp     [esi+ebx],al
  1084.         jne     .string
  1085.         inc     ebx
  1086.         inc     edx
  1087.     @@:
  1088.         mov     ecx,edx
  1089.         mov     edx,esi
  1090.         mov     esi,ebx
  1091.         mov     eax,[color_tbl+4*2]
  1092.         ret
  1093.   .plain.text:
  1094.         mov     edx,[cur_line_len];LINE_WIDTH
  1095.         xchg    edx,esi
  1096.         mov     ecx,[cur_line_len];LINE_WIDTH
  1097.         mov     eax,[color_tbl+4*0]
  1098.         ret
  1099. endf
  1100.  
  1101. ;-----------------------------------------------------------------------------
  1102. func writepos ;///// WRITE POSITION //////////////////////////////////////////
  1103. ;-----------------------------------------------------------------------------
  1104.         cmp     [do_not_draw],1  ; return if drawing is not permitted
  1105.         jae     .exit
  1106.         pusha
  1107.  
  1108. ;       mcall   9,p_info,-1
  1109.  
  1110.         mov     ecx,[p_info.client_box.height-2]
  1111.         mov     cx,word[p_info.client_box.height]
  1112.         sub     ecx,STATH*65536
  1113. ;        mpack   ebx,6*13,6*13
  1114. ;        add     ebx,[left_ofs-2]
  1115. ;        add     ebx,[left_ofs]
  1116.         mcall   38,<6*13,6*13>,,[cl_3d_inset]
  1117.  
  1118.         pushad
  1119. ;       sub     ebx,(6*13+1)*65536-1
  1120. ;       sub     ebx,[left_ofs]
  1121.         mov     cx,STATH+1
  1122.         mcall   13,<0,6*13>,,[cl_3d_normal]
  1123.         mcall   ,<6*13+1,6*(s_modified.size+2)-1>
  1124.         mov     ebx,(6*(s_modified.size+15)+1)*65536
  1125.         mov     bx,word[p_info.client_box.width]
  1126.         sub     bx,6*(s_modified.size+15)
  1127.         mcall
  1128.         popad
  1129.  
  1130.         add     ebx,6*(s_modified.size+2)*65536+6*(s_modified.size+2)
  1131.         mcall
  1132.  
  1133.         and     ecx,0x0000FFFF
  1134.         push    ecx
  1135.  
  1136.         mov     eax,[pos.y]
  1137.         inc     eax
  1138.         mov     ecx,10
  1139.         mov     edi,p_info+0x100;htext2.pos1
  1140.         cld
  1141.         call    uint2str
  1142.         mov     al,','
  1143.         stosb
  1144.         mov     eax,[pos.x]
  1145.         inc     eax
  1146.         call    uint2str
  1147.  
  1148.         pop     ebx
  1149.  
  1150.         lea     esi,[edi-p_info-0x100]
  1151.         lea     edi,[esi*3]
  1152.         shl     edi,16
  1153.  
  1154. ;       add     ebx,[left_ofs-2]
  1155.         add     ebx,(1+6*6+3)*65536-STATH/2-3
  1156.         sub     ebx,edi
  1157.         mcall   4,,[sc.work_text],p_info+0x100
  1158.  
  1159.         cmp     [modified],0
  1160.         je      @f
  1161.         and     ebx,0x0000FFFF
  1162. ;       add     ebx,[left_ofs-2]
  1163.         add     ebx,(1+12*6+12+1)*65536
  1164.         mcall   ,,,s_modified,s_modified.size
  1165.  
  1166.     @@: cmp     [s_status],0
  1167.         je      @f
  1168.         and     ebx,0x0000FFFF
  1169.         add     ebx,6*(s_modified.size+16)*65536
  1170.         or      ecx, 80000000h
  1171.         mcall   ,,,[s_status]
  1172.  
  1173.     @@: popa
  1174.  
  1175.   .exit:
  1176.         ret
  1177. endf
  1178.  
  1179. ;-----------------------------------------------------------------------------
  1180. func print_text ;/////////////////////////////////////////////////////////////
  1181. ;-----------------------------------------------------------------------------
  1182.         pusha
  1183. ;        mov     ebx,(LBTNW+5+2)*65536
  1184.         mov     bx,word[p_info.box.width]
  1185. ;        sub     bx,LBTNW+RBTNW+10+3
  1186.         mov     ecx,[ya-2]
  1187. ;        mov     cx,ABTNH+1
  1188.         mcall   13,,,[sc.work]
  1189. ;        mov     ebx,(LBTNW+5+2+4)*65536+ABTNH/2-3
  1190.         add     ebx,[ya]
  1191.         mov     eax,[p_info.box.width]
  1192. ;        sub     eax,LBTNW+RBTNW+10+8
  1193.         push    eax
  1194.         cdq
  1195.         mov     ecx,6
  1196.         div     ecx
  1197.         cmp     eax,PATHL
  1198.         jbe     @f
  1199.         mov     eax,PATHL
  1200.     @@: mov     esi,eax
  1201.         mcall   4,,[color_tbl+0],[addr]
  1202.  
  1203.         mov     eax,[ya]
  1204.         mov     ebx,eax
  1205. ;        add     eax,ABTNH/2-6
  1206.         shl     eax,16
  1207.         add     eax,ebx
  1208. ;        add     eax,ABTNH/2-6+11
  1209.         mov     ecx,eax
  1210.         imul    eax,[temp],6
  1211.         pop     ebx
  1212.         cmp     eax,ebx
  1213.         jae     @f
  1214. ;        add     eax,LBTNW+5+2+4
  1215.         mov     ebx,eax
  1216.         shl     eax,16
  1217.         add     ebx,eax
  1218.         mcall   38,,,[color_tbl+0]
  1219.  
  1220.     @@: popa
  1221.         ret
  1222. endf
  1223.  
  1224. func draw_framerect ; ebx,ecx
  1225.         push    ebx ecx
  1226.  
  1227.         add     bx,[esp+6]
  1228.         mov     cx,[esp+2]
  1229.         dec     ebx
  1230.         mcall   38,,,[cl_3d_inset]
  1231.         add     cx,[esp]
  1232.         rol     ecx,16
  1233.         add     cx,[esp]
  1234.         sub     ecx,0x00010001
  1235.         mcall
  1236.  
  1237.         mov     ebx,[esp+4]
  1238.         mov     ecx,[esp]
  1239.         mov     bx,[esp+6]
  1240.         add     cx,[esp+2]
  1241.         dec     ecx
  1242.         mcall
  1243.         add     bx,[esp+4]
  1244.         rol     ebx,16
  1245.         add     bx,[esp+4]
  1246.         sub     ebx,0x00010001
  1247.         mcall
  1248.  
  1249.         add     esp,8
  1250.         ret
  1251. endf