我的学习之旅(19)console.h和console.c

本文深入探讨了屏幕向上翻动与向下翻动、插入与删除字符的基本原理及其实现细节,针对屏幕滚动与文本编辑场景进行优化,详细阐述了如何在内存中高效更新屏幕内容与光标位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*屏幕向上翻一行,等同于屏幕向下移动一行*/
static void screen_up(void)
{
    int i;
    unsigned char *src;
    unsigned char *dest;
    unsigned int len;
    /*是否需要整个屏幕向上翻一行*/
    if ( g_screen_top == 0 && g_screen_bottom == DISP_MAX_Y ) {      
        //刷新屏幕在显存中位置
        g_screen_origin += BYTES_FOR_ONE_LINE;
        g_screen_end += BYTES_FOR_ONE_LINE;
        /*刷新光标位置为换行*/
        g_position += BYTES_FOR_ONE_LINE; 
        if( g_screen_end > DISP_END_ADDR )  {/*如果屏幕在显存中位置超出了显存本身的范围*/
            /*将屏幕内容刷新到DISP_BASE_ADDR处*/
            src = (unsigned char *)g_screen_origin;
            dest = (unsigned char *)DISP_BASE_ADDR;
            len = (g_screen_end - g_screen_origin);
            for(i = 0; i < len; i++) {
                dest[i] = src[i];
            }
            /*刷新光标位置和屏幕起始和结束地址*/
            g_screen_end = DISP_BASE_ADDR + len;
            g_position = DISP_BASE_ADDR + (g_position - g_screen_origin);
            g_screen_origin = DISP_BASE_ADDR;
            
        }
        else {
            
        }
        set_screen_origin(1);
    }
    else { /*不支持*/

    }
}
/*屏幕向下翻一行*/
static void screen_down(void)
{
}
static void add_a_line(void)
{
    /*如果不是最底下的一行*/
    if( g_y + 1 < DISP_MAX_Y ) {
        g_y++;
        g_position += BYTES_FOR_ONE_LINE; 
        return;
    }
    /*否则就要刷新整个屏幕的数据*/
    screen_up();
}
//用空格字符填充被删除的字符
static void delete_char(void)
{
    if( g_x > 0 ) {
        g_position -= 2;
        g_x--;
        *(unsigned short *)g_position = ((DISP_FG_WHITE + DISP_BG_BLACK) << 8 )|(0x20);//0x20是空格字符
    }
    return;
}

error during build: 01:03:32.010 Error: Cannot find module '@dcloudio\uni-console\dist\mp.esm.js' 01:03:32.016 Require stack: 01:03:32.025 - D:\旅游管理系统\tourism-user\node_modules\@dcloudio\uni-cli-shared\dist\resolve.js 01:03:32.031 - D:\旅游管理系统\tourism-user\node_modules\@dcloudio\uni-cli-shared\dist\hbx\env.js 01:03:32.041 - D:\旅游管理系统\tourism-user\node_modules\@dcloudio\uni-cli-shared\dist\hbx\index.js 01:03:32.048 - D:\旅游管理系统\tourism-user\node_modules\@dcloudio\uni-cli-shared\dist\utils.js 01:03:32.061 - D:\旅游管理系统\tourism-user\node_modules\@dcloudio\uni-cli-shared\dist\mp\ast.js 01:03:32.067 - D:\旅游管理系统\tourism-user\node_modules\@dcloudio\uni-cli-shared\dist\mp\index.js 01:03:32.094 - D:\旅游管理系统\tourism-user\node_modules\@dcloudio\uni-cli-shared\dist\index.js 01:03:32.114 - D:\旅游管理系统\tourism-user\node_modules\@dcloudio\vite-plugin-uni\dist\config\index.js 01:03:32.129 - D:\旅游管理系统\tourism-user\node_modules\@dcloudio\vite-plugin-uni\dist\index.js 01:03:32.146 - D:\旅游管理系统\tourism-user\vite.config.js 01:03:32.152 - D:\HBuilderX.4.08.2024040127\HBuilderX\plugins\uniapp-cli-vite\node_modules\vite\dist\node\chunks\dep-934dbc7c.js 01:03:32.175 at Function.Module._resolveFilename (node:internal/modules/cjs/loader:956:15) 01:03:32.196 at Function.Module._resolveFilename (D:\HBuilderX.4.08.2024040127\HBuilderX\plugins\uniapp-cli-vite\node_modules\module-alias\index.js:49:29) 01:03:32.216 at Function.Module._resolveFilename (D:\旅游管理系统\tourism-user\node_modules\module-alias\index.js:49:29) 01:03:32.232 at Function.resolve (node:internal/modules/cjs/helpers:108:19) 01:03:32.248 at Object.resolveBuiltIn (D:\旅游管理系统\tourism-user\node_modules\@dcloudio\uni-cli-shared\dist\resolve.js:102:20) 01:03:32.264 at D:\旅游管理系统\tourism-user\node_modules\@dcloudio\uni-console\lib\uni.plugin.js:54:47 01:03:32.280 at Object.defineUniMainJsPlugin (D:\旅游管理系统\tourism-user\node_modules\@dcloudio\uni-cli-shared\dist\vite\plugins\mainJs.js:16:20) 01:03:32.286 at index (D:\旅游
最新发布
03-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值