国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java開發系統內核:實現回車鍵的處理

2019-11-06 06:49:56
字體:
來源:轉載
供稿:網友

更詳細的講解和代碼調試演示過程,請參看視頻 linux kernel Hacker, 從零構建自己的內核

在為我們的系統開發應用程序前,還需要完成最后一點掃尾工作,那就是處理回車鍵。要啟動應用程序,一種常用辦法是,在命令行控制臺中,鍵入要運行的程序名字,點擊回車,然后系統把應用程序加載起來,因此,響應回車鍵按下消息是系統必不可少的功能。

本節代碼完成后,我們的系統運行效果如下:

這里寫圖片描述

當我們把輸入焦點轉移到控制臺,然后按下回車,控制臺會啟動新的一行,此時如果點擊字母按鈕,那么字母會出現在新起的一行,同時光標會在新啟的一行閃爍。

系統能夠響應回車鍵的話,我們就可以實現從控制臺啟動應用程序,我們先看看本節的實現代碼,主要實現都在write_vga_desktop.c中:

#define KEY_RETURN 0x1Cvoid console_task(struct SHEET *sheet) { struct TIMER *timer; struct TASK *task = task_now(); int i, fifobuf[128], cursor_x = 16, cursor_c = COL8_000000; int cursor_y = 28; .... for(;;) { .... else if (i == KEY_RETURN) { if (cursor_y < 28 + 112) { set_cursor(shtctl, sheet, cursor_x, cursor_y, COL8_000000); cursor_y += 16; cursor_x = 16; showString(shtctl, sheet, 8, cursor_y, COL8_FFFFFF, ">"); } } else if (i == 0x0e && cursor_x > 8) { set_cursor(shtctl, sheet, cursor_x, cursor_y, COL8_000000); cursor_x -= 8; set_cursor(shtctl, sheet, cursor_x, cursor_y, COL8_000000); } else { char c = transferScanCode(i); if (cursor_x < 240 && c!=0 ) { set_cursor(shtctl, sheet, cursor_x, cursor_y,COL8_000000); char s[2] = {c, 0}; showString(shtctl, sheet, cursor_x, cursor_y, COL8_FFFFFF, s); cursor_x += 8; } } if (cursor_c >= 0) { set_cursor(shtctl, sheet, cursor_x, cursor_y, cursor_c); } .... }}void set_cursor(struct SHTCTL *shtctl, struct SHEET *sheet, int cursor_x, int cursor_y ,int cursor_c) { boxfill8(sheet->buf, sheet->bxsize, cursor_c, cursor_x, cursor_y, cursor_x + 7, cursor_y + 15); sheet_refresh(shtctl, sheet, cursor_x, cursor_y, cursor_x+8, cursor_y + 46);}

我們對代碼做的改動有,先定義回車鍵掃描碼的數值0x1C, 當回車鍵按下后,主進程會把掃描碼發送給控制臺進程的主函數,在控制臺進程主函數中,一旦接受到回車鍵消息時,把cursor_y的值加上16,也就是一個字符的高度,cursor_y將作為新的顯示縱坐標,我們原來顯示字符時,縱坐標都是寫死的,為28,現在我們把縱坐標改為可變動的情況,一旦受到回車鍵,系統便知道需要在新的一行顯示信息,于是我們讓控制臺進程在窗口中另起一行,也就是將輸入坐標向下移動16個字符的距離,然后無論是字符還是光標,他們的顯示都在新坐標下進行。

set_cursor用來繪制光標,原先光標的縱坐標是定死為28的,現在我們把縱坐標當做一個參數來處理,每次窗口想要繪制光標時,需要把光標所在的縱坐標傳入。有了上面代碼后,我們每次在命令行窗口中點擊回車鍵時,命令行窗口會新起一行,字符和光標都會在新一行中顯示。

更詳細的代碼講解和調試請參看視頻。

更多技術信息,包括操作系統,編譯器,面試算法,機器學習,人工智能,請關照我的公眾號: 這里寫圖片描述


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新野县| 霸州市| 合山市| 土默特右旗| 南丰县| 南木林县| 渭南市| 峨山| 吉木萨尔县| 新沂市| 罗江县| 布尔津县| 阿巴嘎旗| 浦县| 海丰县| 钟山县| 全州县| 图木舒克市| 敦化市| 诸暨市| 门源| 临澧县| 常山县| 屯昌县| 宁晋县| 天峨县| 正阳县| 盐源县| 江阴市| 靖州| 清河县| 楚雄市| 恩施市| 赣榆县| 兰坪| 军事| 克东县| 南城县| 农安县| 英山县| 临潭县|