orange's学习--第七章:l处理退格换行

当敲击回车键和退格键时,我们往TTY缓冲区中写入 “\n”和 “\b”,然后在out_char中做相应处理。

这些按键当做特殊的int值一直往下传递,传递到可以识别处理的函数再处理。

“\n”和 “\b”的处理仅仅是修改显示的显存位置的字符,修改当前字符指向的显存位置。

/*======================================================================*
               out_char
 *======================================================================*/
PUBLIC void out_char(CONSOLE* p_con, char ch)
{
    u8* p_vmem = (u8*)(V_MEM_BASE + p_con->cursor * 2);

    switch(ch) {
    case '\n':
        if (p_con->cursor < p_con->original_addr +
            p_con->v_mem_limit - SCREEN_WIDTH) {
            p_con->cursor = p_con->original_addr + SCREEN_WIDTH * 
                ((p_con->cursor - p_con->original_addr) /
                 SCREEN_WIDTH + 1);
        }
        break;
    case '\b':
        if (p_con->cursor > p_con->original_addr) {
            p_con->cursor--;
            *(p_vmem-2) = ' ';
            *(p_vmem-1) = DEFAULT_CHAR_COLOR;
        }
        break;

    default:
        if (p_con->cursor <
            p_con->original_addr + p_con->v_mem_limit - 1) {
            *p_vmem++ = ch;
            *p_vmem++ = DEFAULT_CHAR_COLOR;
            p_con->cursor++;
        }
        break;
    }

    while (p_con->cursor >= p_con->current_start_addr + SCREEN_SIZE) {
        scroll_screen(p_con, SCR_DN);
    }

    flush(p_con);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值