MacOS环境-手写操作系统-42-Cls清屏

简介: MacOS环境-手写操作系统-42-Cls清屏

Cls

1.简介

上节 我们实现了控制台命令mem


它能显示当前可用内存


本节我们实现另一常用命令叫cls


该命令的作用是把控制台所以字符全部清空


2.代码

在实现该命令前 我们先实现一个辅助函数


我们判断控制台上输入的字符是否是一个合法命令 使用的是逐个字符匹配


例如判断是否输入了命令, “mem” 我们原来的做法是


if (cmdline[0] == 'm' && cmdline[1] == 'e' && cmdline[2] == 'm'

&& cmdline[3] == 0)

1

2

这种做法很不灵活 如果命令字符串含有多个字母 那么怎个if语句就得写得很长 这样的代码是很难维护的


所以 我们要实现一个函数strcmp 比较两个字符串

int strcmp(char *src, char *dest) {
    if (src == 0 || dest == 0) {
        return 0;
    }

    int i = 0;
    while (src[i] != 0 && dest[i] != 0) {
        if (src[i] != dest[i]) {
            return 0;
        }

        i++;
    }

    if (src[i] == 0 && dest[i] != 0) {
        return 0;
    }

    if (src[i] != 0 && dest[i] != 0) {
       return 0; 
    }

    return 1;
}

接下来我们要实现cls 命令

该命令的实现很简单 只要把控制台显示区域的所有像素点全部设置成黑色就可以了

代码如下

void console_task(struct SHEET *sheet, int memtotal) {

    struct TIMER *timer;
    struct TASK *task = task_now();
    int i, fifobuf[128], cursor_x = 16, cursor_c = COL8_000000;
    int cursor_y = 28;
    char  cmdline[30];
    int x = 0, y = 0;

    for(...) {
       ....
       else if (i == KEY_RETURN) {
                set_cursor(shtctl, sheet, cursor_x, cursor_y, COL8_000000);
                cmdline[cursor_x / 8 - 2] = 0;
                cursor_y = cons_newline(cursor_y, sheet); 
                if (strcmp(cmdline, "mem") == 1) {
                    char *s = intToHexStr(memtotal / (1024));
                    showString(shtctl,sheet,16,cursor_y,COL8_FFFFFF, "free ");
                    showString(shtctl,sheet,52,cursor_y, COL8_FFFFFF, s);
                    showString(shtctl, sheet, 126, cursor_y, COL8_FFFFFF, " KB");
                    cursor_y = cons_newline(cursor_y, sheet);
                } else if (strcmp(cmdline, "cls") == 1) {
                    for (y = 28; y < 28 + 128; y++)
                      for (x = 8; x < 8 + 240; x++) {
                          sheet->buf[x + y * sheet->bxsize] = COL8_000000;
                      }

                      sheet_refresh(shtctl, sheet, 8, 28, 8+240, 28+128);
                      cursor_y = 28;
                      showString(shtctl, sheet, 8, 28, COL8_FFFFFF, ">"); 
                }

                cursor_x = 16;
            }
       ....
    }
}

3.编译和运行

目录
相关文章
|
11月前
|
Dart 开发工具 Android开发
在macOS系统上配置Flutter环境的步骤
在macOS系统上配置Flutter环境的步骤
1496 159
|
存储 人工智能 编译器
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
879 11
【03】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-测试hello word效果-虚拟华为手机真机环境调试-为DevEco Studio编译器安装中文插件-测试写一个滑动块效果-介绍诸如ohos.ui等依赖库-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
10月前
|
Kubernetes Cloud Native 区块链
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
Arista cEOS 4.30.10M - 针对云原生环境设计的容器化网络操作系统
316 0
|
监控 Linux 云计算
Linux操作系统在云计算环境中的实践与优化###
【10月更文挑战第16天】 本文探讨了Linux操作系统在云计算环境中的应用实践,重点分析了其在稳定性、安全性和高效性方面的优势。通过具体案例,阐述了Linux如何支持虚拟化技术、实现资源高效分配以及与其他开源技术的无缝集成。文章还提供了针对Linux系统在云计算中的优化建议,包括内核参数调整、文件系统选择和性能监控工具的应用,旨在帮助读者更好地理解和应用Linux于云计算场景。 ###
442 3
|
存储 API C语言
MacOS环境-手写操作系统-46,47-C语言开发应用程序
MacOS环境-手写操作系统-46,47-C语言开发应用程序
167 1
|
编译器 API C语言
MacOS环境-手写操作系统-45-C语言开发应用程序
MacOS环境-手写操作系统-45-C语言开发应用程序
216 1
|
存储 C语言 iOS开发
MacOS环境-手写操作系统-48-让内核从错误中恢复
MacOS环境-手写操作系统-48-让内核从错误中恢复
185 0
|
小程序 iOS开发 MacOS
MacOS环境-手写操作系统-44-运行简单的程序
MacOS环境-手写操作系统-44-运行简单的程序
160 0
|
关系型数据库 MySQL 数据库
【Mac os系统】安装MySQL数据库
本文详细介绍了在Mac OS系统上安装MySQL数据库的步骤,包括下载、安装、配置环境变量、启动服务、授权设置以及解决常见问题,并提供了一些常用的MySQL命令。
1763 0
【Mac os系统】安装MySQL数据库

热门文章

最新文章

推荐镜像

更多