在 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 编译器。

在 FreeDOS 1.3 RC4 上安装 OpenWatcom

在 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 语言编写一个简单的测试程序

使用 C 语言编写一个简单的测试程序

在你使用 OpenWatcom 编译前,你将需要设置 DOS 的 ​​环境变量​​,以便 OpenWatcom 可以找到它的支持文件。OpenWatcom C 编译器软件包中包含了一个为你做这件事的设置 ​​批处理文件​​:​​\DEVEL\OW\OWSETENV.BAT​​。运行这个批处理文件可以自动为你的 OpenWatcom 设置环境变量。

在你的开发环境准备好后,你可以使用 OpenWatcom 编译器来编译这个 “Hello world” 程序。我已经将我的 C 源文件文件保存为 ​​TEST.C​​ ,因此,我可以输入 ​​WCL TEST.C​​ 来编译和连接该程序为一个名称为 ​​TEST.EXE​​ 的 DOS 可执行文件。在 OpenWatcom 的输出信息中,你将看到 ​​WCL​​ 实际上调用 OpenWatcom C 编译器(​​WCC​​)来编译,并调用 OpenWatcom 链接器(​​WLINK​​)来执行 对象/目标object

使用 OpenWatcom 编译测试文件

使用 OpenWatcom 编译测试文件

OpenWatcom 会打印一些无关的输出信息,这可能会使发现错误和警告变得困难。为了告诉编译器来抑制这些大量的额外信息,请在编译时使用 ​​/Q​​(“Quiet”)选项:

使用 OpenWatcom 编译

使用 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)

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2018-12-26 09:00:07

VirtualBoxFreeDOSLinux

2022-07-20 21:03:05

FreeDOS文本编辑器

2021-11-10 14:33:08

FreeDOSLinux

2021-07-10 11:20:44

FreeDOS归档文件

2021-11-29 14:26:53

FreeDOSLinux

2010-01-18 17:14:50

C++语言

2021-12-24 11:25:37

FreeDOS批处理文件Linux

2021-11-18 15:54:17

FreeDOSLinux

2020-11-24 09:52:22

MQTT

2010-01-11 09:40:02

C++语言

2015-09-16 15:11:58

C#异步编程

2021-07-04 19:48:07

LinuxFreeDOS复制文件

2022-05-17 09:33:52

FreeDOS听音乐Linux

2021-03-20 22:00:00

FreeDOS开源

2021-11-26 15:07:53

FreeDOSLinux

2021-11-24 15:20:04

FreeDOSLinux

2021-06-16 12:57:27

FreeDOS

2010-03-11 15:39:01

Python编程语言

2014-08-01 15:16:05

SwiftC语言

2012-03-05 10:19:23

微软Hadoop编程
点赞
收藏

51CTO技术栈公众号