SymColour

#include "slick.sh"
#import "main.e"

int s_modtimeSymHighlight = -1;
int s_markertypeSymHighlight = -1;
int s_timerSymHighlight = 1;
_str s_searchString = '';
_str s_symTags[];
int s_keyColour:[];

int def_sym_highlight_delay = 500;


struct SymColour
{
   int m_ColourSymHighlight;
   int m_cRef;    // used for delayed color creation and selection.
   int m_rgb;
} s_symColour[];


_command void CycleSymHighlight() name_info(',')
{
   _str sym = cur_word(start_col);

   if (length(sym) != 0)
      {
      int i;
      boolean fAdd = true;
      for (i = 0; i < s_symTags._length() && fAdd; i++)
         {
         if (s_symTags[i] == sym)
            {
            fAdd = false;

            if (s_keyColour._indexin(sym))
               {
               int iColour = s_keyColour:[sym];

               s_symColour[iColour].m_cRef -= 1;

               iColour = (iColour + 1) % s_symColour._length();
               s_keyColour:[sym] = iColour;

               s_symColour[iColour].m_cRef += 1;

               EnsureColour(iColour);

               UpdateScreen(true /* update now */)
               }
            }
         }
      if (fAdd)
         {
         ToggleSymHighlight();
         }
      }
}


/* T O G G L E  S Y M  H I G H L I G H T */
/*----------------------------------------------------------------------------
	%%Function: ToggleSymHighlight
	%%Author: MarkSun
	%%Owner: MarkSun

   If the IP is on an identifier, either add it or remove it from the list
   of identifiers we're tracking for highlighting purposes.

----------------------------------------------------------------------------*/
_command void ToggleSymHighlight() name_info(',')
{
   int start_col;
   int i;
   _str sym = cur_word(start_col);
   
   if (length(sym) != 0)
      {
      boolean fAdd = true;
      for (i = 0; i < s_symTags._length();i++)
         {
         if (s_symTags[i] == sym)
            {
            fAdd = false;
            s_symTags._deleteel(i);
            break;
            }
         }
      if (fAdd)
         {
         int cTags = s_symTags._length();
         s_symTags[cTags] = sym;
         s_symTags._sort("D");
         if (s_symTags._length() != cTags + 1)
            {
            say("Failed to add tag: " :+ sym);
            }
         }
      if (s_symTags._length() > 0)
         {
         s_searchString = s_symTags[0];
         for (i = 1; i < s_symTags._length(); i++)
            {
            s_searchString :+= '|' :+ s_symTags[i];
            }
         }
      else
         {  
         s_searchString = '';
         _StreamMarkerRemoveType (p_window_id, s_markertypeSymHighlight);
         }         
      UpdateScreen(true /* update now */)
      
      if (!fAdd && s_keyColour._indexin(sym))
         {
         int index = s_keyColour:[sym];
         if (index < 0 || index > s_symColour._length())
            {
            say("bad index in keycolour for: " :+sym);
            }
         else
            {
            if (index > s_symColour._length())
               {
               say("bad index for symColour (index/sym): ":+index:+"/":+sym);
               }
            else if (s_symColour[index].m_cRef <= 0)
               {
               say("bad cRef in symColour when deleting: " :+ sym);
               }
            else
               {
               s_symColour[index].m_cRef -= 1;
               s_keyColour._deleteel(sym);
               }
            }
         }
      else if (!fAdd)
         {
         say("Failed to remove keycolour for: ":+sym);
         }
      
      }

}

static void _InitSymColour()
{
   s_symColour[0].m_ColourSymHighlight = -1;
   s_symColour[0].m_rgb = _rgb(0xff, 0xff, 0x00);
   s_symColour[0].m_cRef = 0;
   s_symColour[1].m_ColourSymHighlight = -1;
   s_symColour[1].m_rgb = _rgb(0x00, 0xff, 0xff);
   s_symColour[1].m_cRef = 0;
   s_symColour[2].m_ColourSymHighlight = -1;
   s_symColour[2].m_rgb = _rgb(0xff, 0x00, 0xff);
   s_symColour[2].m_cRef = 0;
   s_symColour[3].m_ColourSymHighlight = -1;
   s_symColour[3].m_rgb = _rgb(0xff, 0x00, 0x00);
   s_symColour[3].m_cRef = 0;
   s_symColour[4].m_ColourSymHighlight = -1;
   s_symColour[4].m_rgb = _rgb(0x00, 0xff, 0x00);
   s_symColour[4].m_cRef = 0;
   
   
}


_command void DbgDumpSymHighlight() name_info(',')
{
   int i;
   say ("--- SymHighlight dump: " :+ _time('L'));
   say ("search string:");
   say ("   " :+ s_searchString);
   say ("word list:");
   for (i = 0; i < s_symTags._length(); i++)
      {
      say ("   " :+ (i+1) :+ ": " :+ s_symTags[i]);
      }
   say ("Colours index for words:");
   for (i = 0; i < s_symTags._length(); i++)
      {
      if (s_keyColour._indexin(s_symTags[i]))
         {
         say ("   " :+ s_symTags[i] :+ ": " :+ s_keyColour:[s_symTags[i]] + 1);
         }
      else
         {
         say ("   " :+ s_symTags[i] :+ ": no current colour");
         }
      }
   say ("colour cRefs:");
   for (i = 0; i < s_symColour._length(); i++)
      {
      say ("   " :+ (i + 1) :+ ": " :+ s_symColour[i].m_cRef);
      }
   
   
   
   say ("--- End SymHighlight dump");

}


void DoClearAllSymHighlightStructs()
{
   int i;
   s_symTags._makeempty();
   s_searchString = '';
   for (i = 0; i < s_symColour._length(); i++)
      {
      if (s_symColour[i].m_cRef > 0)
         {
         s_symColour[i].m_cRef = 0;
         }
      }
   s_keyColour._makeempty();
}


/* C L E A R  A L L  S Y M  H I G H L I G H T */
/*----------------------------------------------------------------------------
	%%Function: ClearAllSymHighlight
	%%Author: MarkSun
	%%Owner: MarkSun

   Bring up a dialog listing all identifiers that we are currently highlighting.
   If you respond Yes, then clear the entire list.

----------------------------------------------------------------------------*/
_command void ClearAllSymHighlight() name_info(',')
{

   _str result;
   _str messageString = "Clear the following list?\n\n";
   int i;
   
   for (i = 0; i < s_symTags._length(); i++)
      {
      messageString :+= (i+1) :+ ": " :+ s_symTags[i] :+ "\n";
      }
   
   
   result=_message_box(messageString, '', MB_YESNO|MB_ICONQUESTION);
   if (result==IDYES) 
      {
      DoClearAllSymHighlightStructs();
      UpdateScreen(true);
      }
   
}


void _UpdateWindow()
{
   typeless p,m,ss,sf,sw,sr,sf2;
   _save_pos2(p);
   save_selection(m);
   save_search(ss, sf, sw, sr, sf2);
   _StreamMarkerRemoveType (p_window_id, s_markertypeSymHighlight);

   if (s_symTags._length() != 0)
      {
      _deselect();
      top();
//         if ( !search('(?:' :+ s_searchString :+ ')', '<U@WXC') )
         if ( !search(s_searchString, '<U@WXC') )
         {
         do
            {
            s = strip( get_text( match_length(), (int)_QROffset() ), 'T' );
            long offset_highlight = _QROffset();
            int length_Highlight = s._length();
            int pos_marker = _StreamMarkerAdd( p_window_id, offset_highlight, length_Highlight, true, 0, s_markertypeSymHighlight, '');
            _StreamMarkerSetTextColor(pos_marker, GetSymHighlightColour(s));
            }
         while (!repeat_search( '<U@WXC'));
         }
      }


   restore_search( ss, sf, sw, sr, sf2); 
   restore_selection(m);
   _restore_pos2(p);

   refresh();
}


/* U P D A T E  S C R E E N */
/*----------------------------------------------------------------------------
	%%Function: UpdateScreen
	%%Author: MarkSun
	%%Owner: MarkSun

   Goes through the current buffer and update the highlights based on current
   information.

----------------------------------------------------------------------------*/
static void UpdateScreen(boolean fNow)
{
   get_window_id( auto orig_view);
   activate_window (_mdi.p_child);

   if (s_modtimeSymHighlight != p_LastModified || fNow)
      {
      s_modtimeSymHighlight = p_LastModified;

      for_each_mdi_child('-UpdateWindow','');
      }
   activate_window(orig_view); 
}


/* S Y M  H I G H L I G H T  C A L L B A C K */
/*----------------------------------------------------------------------------
	%%Function: SymHighlightCallback
	%%Author: MarkSun
	%%Owner: MarkSun

	Callback to periodically ensure the current buffer has been updated.

----------------------------------------------------------------------------*/
void SymHighlightCallback()
{
   if ( !p_mdi_child || command_state())
      {
      return;
      }
   if (_idle_time_elapsed() < def_sym_highlight_delay)
      {
      return;
      }
   
   UpdateScreen(false /* update now */);
}


static void EnsureColour(int iColour)
{
   if (s_symColour[iColour].m_ColourSymHighlight == -1)
      {
      s_symColour[iColour].m_ColourSymHighlight = _AllocColor();
      _default_color(s_symColour[iColour].m_ColourSymHighlight, _rgb(0x00, 0x00, 0x00), s_symColour[iColour].m_rgb, 0);
      }
}

static int IGetNextSymColour()
{
   int i, iMac;
   int iTarget = 0, iTargetVal = s_symColour[0].m_cRef;
   
   iMac = s_symColour._length();
   
   if (iTargetVal != 0)
      {
      for (i = 1; i < iMac; i++)
         {
         if (s_symColour[i].m_cRef < iTargetVal)
            {
            iTargetVal = s_symColour[i].m_cRef;
            iTarget = i;
            if (iTargetVal == 0)
               break;
            }
         }
      }
   s_symColour[iTarget].m_cRef += 1;
   EnsureColour(iTarget);
   if (iTarget < 0 || iTarget >= iMac)
      {
      say ("Bad colour index returned in IGetNextSymColour: ":+iTarget);
      }
   return iTarget;
      
}


/* G E T  S Y M  H I G H L I G H T  C O L O U R */
/*----------------------------------------------------------------------------
	%%Function: GetSymHighlightColor
	%%Author: Setup the highlighting colour
	%%Owner: Setup the highlighting colour

	

----------------------------------------------------------------------------*/
static int GetSymHighlightColour(_str strKey)
{
   
   if (!s_keyColour._indexin(strKey))
      {
      s_keyColour:[strKey] = IGetNextSymColour();
      }
   else if (s_keyColour:[strKey] < 0 || s_keyColour:[strKey] >= s_symColour._length())
      {
      say ("index for '":+strKey:+"' out of range: ":+s_keyColour:[strKey]);
      s_keyColour:[strKey] = IGetNextSymColour();
      }
   else if (s_symColour[s_keyColour:[strKey]].m_cRef == 0)
      {
      say ("Hit recovery code in GetSymHighlightColour");
      s_keyColour:[strKey] = IGetNextSymColour();
      }
      
   
   return s_symColour[s_keyColour:[strKey]].m_ColourSymHighlight;   
}


/* D E F E R R E D  I N I T  S Y M  H I G H L I G H T */
/*----------------------------------------------------------------------------
	%%Function: DeferredInitSymHighlight
	%%Author: MarkSun
	%%Owner: MarkSun

   Start up our callback function.
   I do not know why deferring the init is good, I copied this from another
   macro.

----------------------------------------------------------------------------*/
static void DeferredInitSymHighlight()
{
   
   if ( !pos( "-mdihide", _editor_cmdline, 1, 'i' ) )
   {

      if ( s_markertypeSymHighlight < 0 )
         s_markertypeSymHighlight = _MarkerTypeAlloc();
      else
         _StreamMarkerRemoveAllType( s_markertypeSymHighlight );

      if ( s_timerSymHighlight >= 0 )
         _kill_timer( s_timerSymHighlight );

      _InitSymColour()
      DoClearAllSymHighlightStructs();
      s_timerSymHighlight = _set_timer( def_sym_highlight_delay, SymHighlightCallback );
   }
}


/* D E F I N I T */
/*----------------------------------------------------------------------------
	%%Function: definit
	%%Author: MarkSun
	%%Owner: MarkSun

	Initialize this module.

----------------------------------------------------------------------------*/
definit()
{
   s_modtimeSymHighlight = -1;
   
   if (arg(1) != 'L')
      {
      s_timerSymHighlight = -1;
      s_markertypeSymHighlight = -1;
      }
   
   _post_call( DeferredInitSymHighlight );
}

内容概要:本文全面介绍了数据流图(DFD)的概念、构成元素及其重要性。数据流图是从数据传递和加工的角度,以图形方式表达系统逻辑功能、数据流向和变换过程的工具。文章详细解释了数据流图的四个基本元素:数据流、加工、数据存储和外部实体,并通过实例说明了这些元素在实际场景中的应用。文中强调了数据流图在软件开发需求分析和业务流程优化中的关键作用,通过绘制顶层、中层和底层数据流图,逐步细化系统功能,确保数据流向和处理逻辑的清晰性。此外,文章还指出了常见绘制误区及解决方法,并以在线购物系统为例进行了实战分析,展示了从需求分析到数据流图绘制的全过程。 适合人群:软件工程师、业务分析师、系统设计师以及对系统分析与设计感兴趣的初学者。 使用场景及目标:①帮助开发团队在需求分析阶段清晰展示数据流动和处理过程,避免理解偏差;②辅助企业梳理和优化业务流程,识别效率低下的环节,提升运营效率;③为系统设计和开发提供详细的逻辑框架,确保各模块的功能明确,减少开发错误。 阅读建议:本文内容详实,涵盖了从理论到实践的各个方面。建议读者在学习过程中结合实际项目背景,逐步掌握数据流图的绘制技巧,并通过反复练习和优化,加深对系统分析与设计的理解。
资源下载链接为: https://pan.quark.cn/s/5c50e6120579 《CoffeeTime_0.99.rar:主板BIOS修改工具详述》 在计算机硬件领域,BIOS(基本输入输出系统)是计算机启动时最先加载的软件,它负责初始化硬件设备,并为操作系统提供基本的交互功能。不过,随着处理器技术的持续进步,部分主板可能无法原生支持更新的CPU型号。为解决这一问题,一些技术爱好者和专业人士会通过修改主板BIOS,也就是俗称的“魔改”,来提升其兼容性。本文将深入剖析名为“CoffeeTime_0.99.rar”的工具,它是一款专门用于主板BIOS修改,以实现对第6、7、8、9代英特尔CPU支持的工具。 我们先来看“CoffeeTime.exe”,这是该工具的主程序文件。通常情况下,它会配备一套直观易用的用户界面,方便用户对BIOS进行修改操作。不过,在使用该工具之前,用户必须具备一定的电脑硬件知识,因为一旦操作失误,就可能导致系统运行不稳定,甚至无法启动。对于初学者而言,谨慎操作至关重要,否则可能会造成不可挽回的损失。 “readme.txt”是软件包中常见的文档,一般会包含使用指南、注意事项以及开发者提供的其他重要信息。在使用CoffeeTime之前,用户务必要仔细阅读该文件,因为里面可能包含了如何正确运行程序、避免错误操作以及解压后具体步骤等关键内容。 “bin”和“data”是两个文件夹,它们可能包含了用于BIOS修改的各种二进制文件和数据。“bin”文件夹通常会包含特定版本的BIOS固件或用于修改的工具,而“data”文件夹则可能包含更新CPU微码、识别信息等必要的数据文件。在进行BIOS修改的过程中,这些文件会被程序调用,从而实现对原有BIOS的扩展或修正。 BIOS的修改过程一般包含以下步骤:首先,备份原始BIOS,这是在进行任何修改前的必要步骤,以便
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值