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 );
}

【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
标题中的"EthernetIP-master.zip"压缩文档涉及工业自动化领域的以太网通信协议EtherNet/IP。该协议由罗克韦尔自动化公司基于TCP/IP技术架构开发,已广泛应用于ControlLogix系列控制设备。该压缩包内可能封装了协议实现代码、技术文档或测试工具等核心组件。 根据描述信息判断,该资源主要用于验证EtherNet/IP通信功能,可能包含测试用例、参数配置模板及故障诊断方案。标签系统通过多种拼写形式强化了协议主题标识,其中"swimo6q"字段需结合具体应用场景才能准确定义其技术含义。 从文件结构分析,该压缩包采用主分支命名规范,符合开源项目管理的基本特征。解压后预期可获取以下技术资料: 1. 项目说明文档:阐述开发目标、环境配置要求及授权条款 2. 核心算法源码:采用工业级编程语言实现的通信协议栈 3. 参数配置文件:预设网络地址、通信端口等连接参数 4. 自动化测试套件:包含协议一致性验证和性能基准测试 5. 技术参考手册:详细说明API接口规范与集成方法 6. 应用示范程序:展示设备数据交换的标准流程 7. 工程构建脚本:支持跨平台编译和部署流程 8. 法律声明文件:明确知识产权归属及使用限制 该测试平台可用于构建协议仿真环境,验证工业控制器与现场设备间的数据交互可靠性。在正式部署前开展此类测试,能够有效识别系统兼容性问题,提升工程实施质量。建议用户在解压文件后优先查阅许可协议,严格遵循技术文档的操作指引,同时需具备EtherNet/IP协议栈的基础知识以深入理解通信机制。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
本项目基于STM32单片机,设计并实现了一个温湿度及可燃气体浓度检测系统。该系统能够实时采集环境中的温度、湿度和可燃气体浓度,并通过OLED显示屏显示相关数据。系统还具备自动控制功能,当检测到环境参数超出设定阈值时,能够自动启动相应的电机进行散热、加湿或排气,以维持环境的安全和舒适。 主要功能 数据采集与显示: 使用DHT11传感器采集环境温度和湿度。 使用MQ4传感器采集可燃气体浓度。 通过OLED显示屏实时显示采集到的温湿度、可燃气体浓度以及设定的阈值。 自动控制: 当检测到温度超过设定值时,自动启动散热电机。 当检测到湿度低于设定值时,自动启动加湿电机。 当检测到可燃气体浓度超过设定值时,自动启动排气电机。 参数设置: 通过按键设置温度上限、湿度下限和可燃气体浓度上限。 硬件组成 STM32单片机 OLED显示屏 DHT11温湿度传感器 MQ4可燃气体传感器 散热电机、加湿电机、排气电机 按键模块 软件设计 本项目采用C语言编程,使用Keil5进行代码编写。程序代码中包含详细的中文注释,便于新手理解和学习。仿真部分使用Proteus软件进行,仿真演示视频使用的是Proteus8.9版本。 使用说明 下载与解压: 下载资源文件后,请先解压(建议解压到桌面上,文件路径太深会导致程序打开异常)。 程序打开: 解压后使用Keil5打开主程序文件。 仿真文件: 使用Proteus软件打开仿真文件进行仿真测试。 资料清单 主程序代码 仿真文件 相关软件包(如Keil5、Proteus等)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值