在 FreeDOS 上如何使用 C 語言編程
當我第一次開始使用 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 時,如果你選擇 「 完全的安裝(包括安裝應用程序和遊戲) 」,那麼你也自動地安裝 OpenWatcom。如果你選擇安裝 「 純 DOS 系統 」,那麼,你將需要使用 FDIMPLES 軟體包管理器來安裝 OpenWatcom C 編譯器。
![安裝 OpenWatcom](/data/attachment/album/202304/20/153110kzhje7k76aoisi6i.png "Installing OpenWatcom on FreeDOS 1.3 RC4")
在 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 程序](/data/attachment/album/202304/20/153110v2m28mkiinrmmntr.png "Writing a simple test program in 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
)來執行 對象/目標 鏈接階段:
![使用 OpenWatcom 編譯](/data/attachment/album/202304/20/153110fnswgbll31tmlnmg.png "Compiling the test program with OpenWatcom")
使用 OpenWatcom 編譯測試文件
OpenWatcom 會列印一些無關的輸出信息,這可能會使發現錯誤和警告變得困難。為了告訴編譯器來抑制這些大量的額外信息,請在編譯時使用 /Q
(「Quiet」)選項:
![使用 OpenWatcom 編譯](/data/attachment/album/202304/20/153111a60sjj5jc0cjs01c.png "Use the /Q ("Quiet") option to make OpenWatcom print less output")
在編譯 C 源文件文件時,如果你沒有看到任何錯誤信息,那麼你現在就可以運行你的 DOS 程序了。這個 「Hello World」 示例的程序名稱是 TEST.EXE
。在 DOS 命令行中輸入 TEST
來運行新的程序,你應該會看到這個非常漂亮的輸出:
![運行測試程序](/data/attachment/album/202304/20/153111c4hiwfbhbyhzyi4h.png "You can create beautiful programs in C")
C 語言是一種非常高效的編程語言,在像 DOS 之類的資源有限的系統上進行編程也可以很好的工作。在 DOS 上,你可以使用 C 語言來做更多的事。如果你是 C 語言的初學者,那麼,你可以跟隨我們在 FreeDOS 網站上的 《使用 C 語言編寫 FreeDOS 程序》 的自學電子書,以及在 FreeDOS YouTube 頻道 上的配套的 入門指南 系列視頻,來自主學習 C 語言。
(題圖:MJ:Legacy sci-fi computer programming::1.7 celestial::1 edison bulb::1 satellite imagery::1 wooden::1 in high resolution, very detailed, 8k)
via: https://opensource.com/article/21/6/program-c-freedos
作者:Jim Hall 選題:lujun9972 譯者:robsean 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive