6 增加更多的命令行窗口(harib23f)
命令行窗口最多只能打开两个,这太不方便了,要是能打开更多的窗口就好了。那我们写一个sht_cons[100]之类的不就行了吗?不过仔细想想看,这个sht_cons[]到底是用来干什么的呢?怎么想也想不通啊,特地定义这个变量保存了一个值,实际上却根本没有用到!
因此,我们干脆不用sht_cons[]了,如果顺利的话,命令行窗口将不再有数量的限制,只要内存空间足够,就可以想开多少开多少。
本次的bootpack.c节选
void HariMain(void)
{
(中略)
struct SHEET *sht_back, *sht_mouse; /*删掉了sht_cons[2]*/
(中略)
/* sht_cons */
key_win = open_console(shtctl, memtotal);
(中略)
sheet_slide(sht_back, 0, 0);
sheet_slide(key_win, 32, 4); /*这里!*/
sheet_slide(sht_mouse, mx, my);
sheet_updown(sht_back, 0);
sheet_updown(key_win, 1); /*这里!*/
sheet_updown(sht_mouse, 2);
keywin_on(key_win);
(中略)
for (;;) {
(中略)
if (fifo32_status(&fifo) == 0) {
(中略)
} else {
(中略)
if (256 <= i && i <= 511) { /*键盘数据*/
(中略)
if (i == 256 + 0x3c && key_shift != 0) { /* Shift+F2 */
/*自动将输入焦点切换到新打开的命令行窗口(这样比较方便吧?)*/
/*从此开始*/ keywin_off(key_win);
key_win = open_console(shtctl, memtotal);
sheet_slide(key_win, 32, 4);
/*到此结束*/ sheet_updown(key_win, shtctl->top);
keywin_on(key_win);
}
(中略)
} else if (512 <= i && i <= 767) { /*鼠标数据*/
(中略)
}
}
}
}
程序写好了,之前的程序中我们是先向sht_cons[]赋值,然后再由sht_cons[]赋值给key_win,现在我们改成直接向key_win赋值了。
这样能不能行呢?改得太彻底了,笔者有点担心呢。不过这样也无济于事,还是“make run”一下试试看吧……哦哦,成功了!我们可以打开好多个命令行窗口了,运行多个应用程序也没问题哦,太棒了!
![]() | ![]() | |
启动成功 | 打开3个命令行窗口 |
运行3个应用程序