Open newclea opened 3 months ago
PUBLIC void findmodel(CONSOLE *p_con) { // 搜索并标红 u8 *p = (u8 *)(V_MEM_BASE + p_con->original_addr * 2); // 起始位置 u8 *p_vmem = (u8 *)(V_MEM_BASE + p_con->cursor * 2); // 当前显示地址的pos while (p < ESC_start_pos) {//搜索范围:从开头到开始ESC的位置。 int same = 1; int len = p_vmem - ESC_start_pos; for(int i = 0; i < len; i += 2) { if (*(p + i) != *(ESC_start_pos + i)) { same = 0; break; } } if (same) {//能匹配上,则从当前位置开始,把能匹配上的位置标红,同时向前推进指针 for (int i = 0; i < len; i += 2, p = p + 2) { if (*p != '\t') { *(p + 1) = DEFAULT_REDCHAR_COLOR; } } } else {//匹配不上,则指针向前推进,继续检查匹配情况。 p = p + 2; } } }
首先感谢你的分享,让我有了自己的思路。 在这里标注一个可能出现的bug(虽然不确定会不会有这样的样例) 上面这段代码,当进入搜索模式后直接按回车会无限循环,无法再退出,可以参考以下修改
u8 *p_vmem = (u8 *)(V_MEM_BASE + p_con->cursor * 2); // 当前显示地址的pos int len = p_vmem - ESC_start_pos; while (p < ESC_start_pos && len > 0) {//搜索范围:从开头到开始ESC的位置。 int same = 1; for(int i = 0; i < len; i += 2) {
非常感谢你的建议,确实是我考虑不周,已修改。祝学业顺利!
首先感谢你的分享,让我有了自己的思路。 在这里标注一个可能出现的bug(虽然不确定会不会有这样的样例) 上面这段代码,当进入搜索模式后直接按回车会无限循环,无法再退出,可以参考以下修改