分类:
2008-05-24 21:43:49
jinix是小弟正在实现的一个c++
kernel,因为调试缘故,所以早早的把控制台部分调出来了,以便于后来的调试。代码使用c++写的,如果使用c写内核也很容易移植过去。转载请保留原 创:http://jinglexy.cublog.cn,mail & msn: jinglexy at yahoo dot com dot cn。这部分代码是在内存管理之前实现的,所以没有做到任意个数虚拟控制台(内核在编译时候确定个数),并且每个控制台显存地址固定起来了。如果要实现也 比较简单:启动时候初始化一个控制台,在MM初始化完后初始化其他控制台,每个控制台包含自己的显存缓冲区,切换控制台的时候将该缓冲区拷贝到显存中即 可。
文件:textio.h, textio.cpp, ostream.h, ostream.cpp
textio.h源文件如下:
39: void move_cursor(void);
64:
这个文件完成显存的一些字符操作,及显存页面切换,滚屏也很简单。没有加入posix兼容的一些特性,
还没有想好是否加在这里。rs232也会使用终端特性,所以考虑后期将字符设备驱动抽象成一个基类,
作为textio类的父类。有什么好的想法可以和我讨论:http://www.cppblog.com/jinglexy
ostream.h源文件:
38: int current_flags; /* 显示模式: 进制数, 对齐形式等 */
41: #define cout __vconsole[__cur_console]
49: extern int __cur_console;
32: void TextIO::move_cursor(void)
103: move_cursor();
201: move_cursor();
6: int __cur_console; /* 当前控制台 */
10: current_flags = dec;
41: if (current_flags & dec)
43: else if (current_flags & hex)
45: else if (current_flags & oct)
47: else if (current_flags & bin)
50: if (current_flags & hex && current_flags & showbase)
79: if (current_flags & dec)
81: else if (current_flags & hex)
83: else if (current_flags & oct)
85: else if (current_flags & bin)
88: if (current_flags & hex && current_flags & showbase)
103: current_flags = f;
111: /* set current console */
112: __cur_console = console;
117: /* move cursor */
118: cout.move_cursor();
127: /* set current console */
128: __cur_console = console;