6 增加更多的命令行窗口(harib23f)

命令行窗口最多只能打开两个,这太不方便了,要是能打开更多的窗口就好了。那我们写一个sht_cons[100]之类的不就行了吗?不过仔细想想看,这个sht_cons[]到底是用来干什么的呢?怎么想也想不通啊,特地定义这个变量保存了一个值,实际上却根本没有用到!

因此,我们干脆不用sht_cons[]了,如果顺利的话,命令行窗口将不再有数量的限制,只要内存空间足够,就可以想开多少开多少。

本次的bootpack.c节选

  1. void HariMain(void)
  2. {
  3. (中略)
  4. struct SHEET *sht_back, *sht_mouse; /*删掉了sht_cons[2]*/
  5. (中略)
  6. /* sht_cons */
  7. key_win = open_console(shtctl, memtotal);
  8. (中略)
  9. sheet_slide(sht_back, 0, 0);
  10. sheet_slide(key_win, 32, 4); /*这里!*/
  11. sheet_slide(sht_mouse, mx, my);
  12. sheet_updown(sht_back, 0);
  13. sheet_updown(key_win, 1); /*这里!*/
  14. sheet_updown(sht_mouse, 2);
  15. keywin_on(key_win);
  16. (中略)
  17. for (;;) {
  18. (中略)
  19. if (fifo32_status(&fifo) == 0) {
  20. (中略)
  21. } else {
  22. (中略)
  23. if (256 <= i && i <= 511) { /*键盘数据*/
  24. (中略)
  25. if (i == 256 + 0x3c && key_shift != 0) { /* Shift+F2 */
  26. /*自动将输入焦点切换到新打开的命令行窗口(这样比较方便吧?)*/
  27. /*从此开始*/ keywin_off(key_win);
  28. key_win = open_console(shtctl, memtotal);
  29. sheet_slide(key_win, 32, 4);
  30. /*到此结束*/ sheet_updown(key_win, shtctl->top);
  31. keywin_on(key_win);
  32. }
  33. (中略)
  34. } else if (512 <= i && i <= 767) { /*鼠标数据*/
  35. (中略)
  36. }
  37. }
  38. }
  39. }

程序写好了,之前的程序中我们是先向sht_cons[]赋值,然后再由sht_cons[]赋值给key_win,现在我们改成直接向key_win赋值了。

这样能不能行呢?改得太彻底了,笔者有点担心呢。不过这样也无济于事,还是“make run”一下试试看吧……哦哦,成功了!我们可以打开好多个命令行窗口了,运行多个应用程序也没问题哦,太棒了!

6 增加更多的命令行窗口(harib23f) - 图1 6 增加更多的命令行窗口(harib23f) - 图2
启动成功 打开3个命令行窗口

 

6 增加更多的命令行窗口(harib23f) - 图3

运行3个应用程序