sz s_defname,'Untitled',0 ;----------------------------------------------------------------------------- func flush_cur_tab ;////////////////////////////////////////////////////////// ;----------------------------------------------------------------------------- ; EBP = TABITEM* ;----------------------------------------------------------------------------- push ecx esi edi mov esi,cur_tab mov edi,[tab_bar.Current.Ptr] mov ecx,sizeof.TABITEM/4 cld rep movsd pop edi esi ecx ret endf ;----------------------------------------------------------------------------- func set_cur_tab ;//////////////////////////////////////////////////////////// ;----------------------------------------------------------------------------- ; EBP = TABITEM* ;----------------------------------------------------------------------------- push ecx esi edi cmp [tab_bar.Current.Ptr],0 je @f call flush_cur_tab @@: mov esi,ebp mov edi,cur_tab mov ecx,sizeof.TABITEM/4 rep movsd mov [tab_bar.Current.Ptr],ebp call update_caption pop edi esi ecx ret endf ;----------------------------------------------------------------------------- func create_tab ;///////////////////////////////////////////////////////////// ;----------------------------------------------------------------------------- push eax ecx esi edi inc [tab_bar.Items.Count] imul ebx,[tab_bar.Items.Count],sizeof.TABITEM mov eax,[tab_bar.Items] mov ecx,eax call mem.ReAlloc mov [tab_bar.Items],eax sub ecx,eax sub [tab_bar.Current.Ptr],ecx lea ebp,[eax+ebx-sizeof.TABITEM] call set_cur_tab mov eax,1024 call mem.Alloc mov [cur_tab.Editor.Data],eax mov [cur_tab.Editor.Lines],1 mov [cur_tab.Editor.Columns],1 xor eax,eax mov [cur_tab.Editor.TopLeft.X],eax mov [cur_tab.Editor.TopLeft.Y],eax mov [cur_tab.Editor.Caret.X],eax mov [cur_tab.Editor.Caret.Y],eax mov [cur_tab.Editor.SelStart.X],eax mov [cur_tab.Editor.SelStart.Y],eax mov edi,[cur_tab.Editor.Data] add edi,4 mov ecx,10 mov [edi-4],ecx mov [edi+10],eax mov al,' ' cld rep stosb mov esi,s_defname mov edi,cur_tab.Editor.FilePath mov ecx,s_defname.size rep movsb mov [cur_tab.Editor.FileName],0 mov [f_info.length],0 mov [cur_tab.Editor.Modified],0 mov [cur_tab.Editor.AsmMode],0 call flush_cur_tab call update_caption call drawwindow mov ebp,cur_tab pop edi esi ecx eax ret endf ;----------------------------------------------------------------------------- func delete_tab ;///////////////////////////////////////////////////////////// ;----------------------------------------------------------------------------- ret endf ;----------------------------------------------------------------------------- func get_tab_size ;/////////////////////////////////////////////////////////// ;----------------------------------------------------------------------------- ; EBP = TABITEM* ;----------------------------------------------------------------------------- push eax cmp [tab_bar.Style],3 jae .lp1 lea eax,[ebp+TABITEM.Editor.FilePath] add eax,[ebp+TABITEM.Editor.FileName] call strlen imul ebx,eax,6 add ebx,9 jmp .lp2 .lp1: call get_max_tab_width mov ebx,eax .lp2: mov ecx,TBARH-1 pop eax ret endf ;----------------------------------------------------------------------------- func draw_tabctl ;//////////////////////////////////////////////////////////// ;----------------------------------------------------------------------------- mov ebx,[tab_bar.Bounds.Left-2] mov bx,word[tab_bar.Bounds.Right] sub bx,word[tab_bar.Bounds.Left] inc ebx mov ecx,[tab_bar.Bounds.Top-2] mov cx,word[tab_bar.Bounds.Bottom] sub cx,word[tab_bar.Bounds.Top] inc ecx mov edx,[cl_3d_normal] call draw_framerect mov al,[tab_bar.Style] dec al jz .tabs_on_top dec al jz .tabs_on_bottom dec al jz .tabs_on_left dec al jz .tabs_on_right ret .tabs_on_top: add ebx,1*65536-2 mov ecx,[tab_bar.Bounds.Top-2] xor cx,cx add ecx,1*65536+TBARH mcall 13 add ecx,(TBARH-2)*65536-(TBARH-3) mov edx,[cl_3d_inset] call draw_framerect ret .tabs_on_bottom: add ebx,1*65536-2 mov ecx,[tab_bar.Bounds.Bottom-2] xor cx,cx add ecx,-TBARH*65536+TBARH mcall 13 mov cx,1 mcall ,,,[sc.work] add ecx,-1*65536+2;-(TBARH-3) mov edx,[cl_3d_inset] call draw_framerect mov ecx,[tab_bar.Items.Count] mov ebp,[tab_bar.Items] mov esi,[tab_bar.Bounds.Left] inc esi mov edi,[tab_bar.Bounds.Bottom] add edi,-TBARH+1 @@: push ecx call get_tab_size rol ebx,16 mov bx,si rol ebx,16 rol ecx,16 mov cx,di rol ecx,16 mov edx,[cl_3d_inset] call draw_framerect cmp ebp,[tab_bar.Current.Ptr] jne .lp1 push ebx ecx add ebx,1*65536-2 dec ecx mcall 13,,,[sc.work] pop ecx ebx .lp1: pushad lea eax,[ebp+TABITEM.Editor.FilePath] add eax,[ebp+TABITEM.Editor.FileName] mov edx,eax call strlen mov esi,eax shr ecx,16 mov bx,cx add ebx,0x00050005 mcall 4,,0x00000000 popad movzx ebx,bx lea esi,[esi+ebx+1] add ebp,sizeof.TABITEM pop ecx dec ecx jnz @b ret .tabs_on_left: call get_max_tab_width mov ebx,[tab_bar.Bounds.Left-2] mov bx,ax add ebx,1*65536 add ecx,1*65536-2 push eax mcall 13 pop eax add eax,-2 shl eax,16 add ebx,eax mov bx,3 mov edx,[cl_3d_inset] call draw_framerect ret .tabs_on_right: call get_max_tab_width mov ebx,[tab_bar.Bounds.Right-2] mov bx,ax shl eax,16 sub ebx,eax add ecx,1*65536-2 mcall 13 add ebx,-1*65536 mov bx,3 mov edx,[cl_3d_inset] call draw_framerect ret endf func get_max_tab_width mov eax,100 ret endf func align_editor_in_tab m2m [cur_tab.Editor.Bounds.Left],[tab_bar.Bounds.Left] m2m [cur_tab.Editor.Bounds.Top],[tab_bar.Bounds.Top] m2m [cur_tab.Editor.Bounds.Right],[tab_bar.Bounds.Right] m2m [cur_tab.Editor.Bounds.Bottom],[tab_bar.Bounds.Bottom] inc [cur_tab.Editor.Bounds.Left] inc [cur_tab.Editor.Bounds.Top] dec [cur_tab.Editor.Bounds.Right] dec [cur_tab.Editor.Bounds.Bottom] mov al,[tab_bar.Style] dec al jz .tabs_on_top dec al jz .tabs_on_bottom dec al jz .tabs_on_left dec al jz .tabs_on_right ret .tabs_on_top: add [cur_tab.Editor.Bounds.Top],TBARH ret .tabs_on_bottom: sub [cur_tab.Editor.Bounds.Bottom],TBARH ret .tabs_on_left: call get_max_tab_width add [cur_tab.Editor.Bounds.Left],eax ret .tabs_on_right: call get_max_tab_width sub [cur_tab.Editor.Bounds.Right],eax ret endf