當我第一次開始使用 DOS 時,我喜歡 DOS 自帶的 BASIC 來編寫游戲和其它一些有趣的程序。很長時間后,我才學習 C 編程語言。
我馬上愛上了使用 C 語言做開發!它是一種簡單易懂的編程語言,在編寫有用的程序時,這給予我很大的靈活性。實際上,很多 FreeDOS 的核心實用程序都是使用 C 語言和匯編語言編寫的。
因此,FreeDOS 的 1.3 RC4 包含一個 C 語言可能并不出人意料,此外還有其它編程語言的編譯器。FreeDOS 的 1.3 RC4 LiveCD 包含兩個 C 編譯器:Bruce's C 編譯器(一個簡單的 C 編譯器)和 OpenWatcom C 編譯器 。在 Bonus CD 上,你也可以找到 DJGPP(一款基于 GNU 的 GCC 的 32 位 C 編譯器)和 GCC 的 IA-16 移植(需要 386 或更好的 CPU 來編譯,但是,生成的程序可以在低端系統上運行)。
在 FreeDOS 上使用 C 語言編程與在 linux 上使用 C 語言編程非常類似,但是有兩個例外:
- 你需要知道你使用了多少內存。 Linux 允許程序使用很多內存,但是 FreeDOS 有很多限制。DOS 程序只使用四種 ??內存模式??(大、中、緊湊和小)中的其中一種,具體取決于它們需要多少內存。
- 你可以直接訪問控制臺終端。 在 Linux 上,你可以創建 文本模式 的程序,使用一個諸如 ncurses 之類的庫來繪制終端屏幕。但是,DOS 允許程序訪問控制臺終端和視頻硬件。這為編寫更有趣的程序提供了極大的靈活性。
我喜歡在 GCC 的 IA-16 移植或 OpenWatcom 中編寫我的 C 程序,具體取決于我正在編寫的是哪種程序。OpenWatcom C 編譯器更容易安裝,因為它只是個單一的軟件包。這就是為什么我們在 FreeDOS 的 LiveCD 中提供 OpenWatcom 的原因, 在你安裝 FreeDOS 的 1.3 RC4 時,如果你選擇 “完全的安裝(包括安裝應用程序和游戲)Full installation including Applications and games”,那么你也自動地安裝 OpenWatcom。如果你選擇安裝 “純 DOS 系統Plain DOS system”,那么,你將需要使用 FDIMPLES 軟件包管理器來安裝 OpenWatcom C 編譯器。
在 FreeDOS 1.3 RC4 上安裝 OpenWatcom
在 DOS 上使用 C 語言編程
你可以在 ??OpenWatcom 項目網站?? 找到文檔和庫指南,以學習 OpenWatcom C 編譯器所提供的獨特的關于 DOS 的 C 語言編程庫。簡單描述幾個最有用的函數:
來自 ??conio.h?
? 頭文件:
- ?
?int getch(void)?
?:從鍵盤上獲取一個按下的單個按鍵 - ?
?int getche(void)?
?:從鍵盤上獲取一個按下的單個按鍵,并回顯該按鍵
來自 ??graph.h?
? 頭文件:
- ?
?_settextcolor(short color)?
?:設置打印文本時的顏色 - ?
?_setbkcolor(short color)?
?:設置打印文本時的背景顏色 - ?
?_settextposition(short y, short x)?
?:移動光標到行 ??y?
? 和 列 ??x?
? - ?
?_outtext(char _FAR *string)?
?:從當前光標位置開始,直接將一串字符打印到屏幕
DOS 只支持 ??16 種文本顏色?? 和 8 種背景顏色。你可以使用值 0(黑色)到 15(亮白色)來具體指定文本顏色,以及使用值 0(黑色)到 7(白色)來具體指定背景顏色:
- ?
?0?
?:黑色 - ?
?1?
?:藍色 - ?
?2?
?:綠色 - ?
?3?
?:品藍色 - ?
?4?
?:紅色 - ?
?5?
?:品紅色 - ?
?6?
?:棕色 - ?
?7?
?:白色 - ?
?8?
?:亮黑色 - ?
?9?
?:亮藍色 - ?
?10?
?:亮綠色 - ?
?11?
?:亮品藍色 - ?
?12?
?:亮紅色 - ?
?13?
?:亮品紅色 - ?
?14?
?:黃色 - ?
?15?
?:亮白色
一個花哨的 “Hello world” 程序
很多新開發者學習編寫的第一個程序是為用戶打印 “Hello world” 。我們可以使用 DOS 的 ??conio?
? 和 ??graphics?
? 庫來制作一個更有趣的程序,并使用彩虹般的顏色打印 “Hello world” 。
在這個實例中,我們將遍歷每種文本顏色,從 0(黑色)到 15(亮白色)。隨著我們打印每一行,我們都將為下一行縮進一個空格。在我們完成后,我們將等待用戶按下任意按鍵,然后,我們將重置屏幕并退出。
你可以使用任何文本編輯器來編寫你的 C 源文件代碼。我喜歡使用一些與眾不同的編輯器,如 ??FreeDOS Edit?? 和 ??Freemacs??,但是,我最近一直在使用 ??FED editor?? ,因為它提供 語法高亮 功能,使其很容易在我的程序源文件代碼中看到關鍵字、字符串(LCCT 譯注:C 語言中沒有字符串)、變量。
使用 C 語言編寫一個簡單的測試程序
在你使用 OpenWatcom 編譯前,你將需要設置 DOS 的 ??環境變量??,以便 OpenWatcom 可以找到它的支持文件。OpenWatcom C 編譯器軟件包中包含了一個為你做這件事的設置 ??批處理文件??:??DEVELOWOWSETENV.BAT?
?。運行這個批處理文件可以自動為你的 OpenWatcom 設置環境變量。
在你的開發環境準備好后,你可以使用 OpenWatcom 編譯器來編譯這個 “Hello world” 程序。我已經將我的 C 源文件文件保存為 ??TEST.C?
? ,因此,我可以輸入 ??WCL TEST.C?
? 來編譯和連接該程序為一個名稱為 ??TEST.EXE?
? 的 DOS 可執行文件。在 OpenWatcom 的輸出信息中,你將看到 ??WCL?
? 實際上調用 OpenWatcom C 編譯器(??WCC?
?)來編譯,并調用 OpenWatcom 鏈接器(??WLINK?
?)來執行 對象/目標object
使用 OpenWatcom 編譯測試文件
OpenWatcom 會打印一些無關的輸出信息,這可能會使發現錯誤和警告變得困難。為了告訴編譯器來抑制這些大量的額外信息,請在編譯時使用 ??/Q?
?(“Quiet”)選項:
使用 OpenWatcom 編譯
在編譯 C 源文件文件時,如果你沒有看到任何錯誤信息,那么你現在就可以運行你的 DOS 程序了。這個 “Hello World” 示例的程序名稱是 ??TEST.EXE?
? 。在 DOS 命令行中輸入 ??TEST?
? 來運行新的程序,你應該會看到這個非常漂亮的輸出:
運行測試程序
C 語言是一種非常高效的編程語言,在像 DOS 之類的資源有限的系統上進行編程也可以很好的工作。在 DOS 上,你可以使用 C 語言來做更多的事。如果你是 C 語言的初學者,那么,你可以跟隨我們在 FreeDOS 網站上的 《??使用 C 語言編寫 FreeDOS 程序??》 的自學電子書,以及在 ??FreeDOS YouTube 頻道?? 上的配套的 入門指南how-to
(題圖:MJ:Legacy sci-fi computer programming::1.7 celestial::1 edison bulb::1 satellite imagery::1 wooden::1 in high resolution, very detailed, 8k)