Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何实现终端滚动?_C_Ubuntu_Scroll_Kernel_Qemu - Fatal编程技术网

C 如何实现终端滚动?

C 如何实现终端滚动?,c,ubuntu,scroll,kernel,qemu,C,Ubuntu,Scroll,Kernel,Qemu,我目前正在为内核实现特性。终端滚动是我想添加的功能,但不确定如何添加。它当前只能保存25行,并在添加任何新行时覆盖数据 这是我目前拥有的代码: void terminal_scroll(){ for(int i = 0; i < VGA_HEIGHT; i++){ for (int m = 0; m < VGA_WIDTH; m++){ terminal_buffer[i * VGA_WIDTH + m] = terminal_buffer[(i

我目前正在为内核实现特性。终端滚动是我想添加的功能,但不确定如何添加。它当前只能保存25行,并在添加任何新行时覆盖数据

这是我目前拥有的代码:

void terminal_scroll(){
   for(int i = 0; i < VGA_HEIGHT; i++){
      for (int m = 0; m < VGA_WIDTH; m++){
         terminal_buffer[i * VGA_WIDTH + m] = terminal_buffer[(i + 1) * VGA_WIDTH + m];
    }
  }
}
void terminal_scroll(){
对于(int i=0;i
使用容纳25行以上的2D缓冲区会更容易。与其物理移动数据,不如将其用作环形缓冲区。你需要一些变量来告诉你最早的一行,存储了多少行,以及视口中当前的顶行。哦,我误解了这个问题,以为你想滚动终端历史记录。也许我的算法不适合,但在我看来,你似乎会尝试向上滚动屏幕底部下面的那一行。无论如何,如果终端缓冲区是按连续的行组织的,我怀疑使用
memmove()
或其他方法,这种事情更容易、更快。