3 对回车键的支持(harib15c)

既然大家精神振奋,那就让我们一鼓作气继续前进吧。

现在的命令行窗口里面,按下回车键是完全没有反应的,我们得让它对回车键进行响应才行。具体应该如何响应呢?暂且只要简单地换个行就好了。实际上,这里应该对输入的字符进行判断,然后执行相应的命令才对,不过一上来就搞这个也太难了点,笔者的讲解会跟不上的,因此我们还是先不管什么命令了,全部直接忽略掉吧。

■■■■■

我们先修改一下HariMain,使其在按下回车键时向命令行窗口发送10+256这个值。之所以用10,是因为用于控制换行的ASCII码就是10,我们在这里照搬一下而已。当然,如果你喜欢用别的值,也是完全没有问题的哦。

本次的bootpack.c节选

  1. void HariMain(void)
  2. {
  3. (中略)
  4. for (;;) {
  5. (中略)
  6. if (fifo32_status(&fifo) == 0) {
  7. (中略)
  8. } else {
  9. (中略)
  10. if (256 <= i && i <= 511) { /*键盘数据*/
  11. (中略)
  12. /*从此开始*/ if (i == 256 + 0x1c) { /*回车键*/
  13. if (key_to != 0) { /*发送至命令行窗口*/
  14. fifo32_put(&task_cons->fifo, 10 + 256);
  15. }
  16. /*到此结束*/ }
  17. (中略)
  18. } else if (512 <= i && i <= 767) { /*鼠标数据*/
  19. (中略)
  20. } else if (i <= 1) { /*光标用定时器*/
  21. (中略)
  22. }
  23. }
  24. }
  25. }

然后我们还要修改用来接收数据的console_task。之前我们已经有了一个cursor_x变量,按照这个样子再创建一个cursor_y变量,当按下回车键时,将cursor_y加1就可以了。

本次的bootpack.c节选

  1. void console_task(struct SHEET *sheet)
  2. {
  3. struct TIMER *timer;
  4. struct TASK *task = task_now();
  5. int i, fifobuf[128], cursor_x = 16, cursor_y = 28, cursor_c = -1; /*这里!*/
  6. (中略)
  7. for (;;) {
  8. io_cli();
  9. if (fifo32_status(&task->fifo) == 0) {
  10. (中略)
  11. } else {
  12. i = fifo32_get(&task->fifo);
  13. io_sti();
  14. (中略)
  15. if (256 <= i && i <= 511) { /*键盘数据(通过任务A)*/
  16. if (i == 8 + 256) {
  17. /*退格键*/
  18. (中略)
  19. /*从此开始*/ } else if (i == 10 + 256) {
  20. /*回车键*/
  21. if (cursor_y < 28 + 112) {
  22. /*用空格将光标擦除*/
  23. putfonts8_asc_sht(sheet, cursor_x, cursor_y, COL8_FFFFFF, COL8_000000, " ", 1);
  24. cursor_y += 16;
  25. /*显示提示符*/
  26. putfonts8_asc_sht(sheet, 8, cursor_y, COL8_FFFFFF, COL8_000000, ">", 1);
  27. cursor_x = 16;
  28. /*到此结束*/ }
  29. } else {
  30. /*一般字符*/
  31. (中略)
  32. }
  33. }
  34. /*重新显示光标*/
  35. if (cursor_c >= 0) {
  36. /*这里! */ boxfill8(sheet->buf, sheet->bxsize, cursor_c, cursor_x, cursor_y, cursor_x + 7, cursor_y + 15);
  37. }
  38. sheet_refresh(sheet, cursor_x, cursor_y, cursor_x + 8, cursor_y + 16); /*这里!*/
  39. }
  40. }
  41. }

好,改成这样差不多了,到底能不能成功呢?我们还是照常“make run”一下。

3 对回车键的支持(harib15c) - 图1

换行成功了哦!

我们又成功了,耶!