Linux中國

在 FreeDOS 上如何使用 C 語言編程

在 FreeDOS 上使用 C 語言編程與在 Linux 上使用 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 語言編程非常類似,但是有兩個例外:

  1. 你需要知道你使用了多少內存。 Linux 允許程序使用很多內存,但是 FreeDOS 有很多限制。DOS 程序只使用四種 內存模式(大、中、緊湊和小)中的其中一種,具體取決於它們需要多少內存。
  2. 你可以直接訪問控制台終端。 在 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 編譯器。

![安裝 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 的 coniographics 庫來製作一個更有趣的程序,並使用彩虹般的顏色列印 「Hello world」 。

在這個實例中,我們將遍歷每種文本顏色,從 0(黑色)到 15(亮白色)。隨著我們列印每一行,我們都將為下一行縮進一個空格。在我們完成後,我們將等待用戶按下任意按鍵,然後,我們將重置屏幕並退出。

你可以使用任何文本編輯器來編寫你的 C 源文件代碼。我喜歡使用一些與眾不同的編輯器,如 FreeDOS EditFreemacs,但是,我最近一直在使用 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)來執行 對象/目標 object 鏈接階段:

![使用 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 頻道 上的配套的 入門指南 how-to 系列視頻,來自主學習 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

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國