如何在 FreeDOS 上用 C 语言编程

在 FreeDOS 上用 C 语言编程与在 Linux 上用 C 语言编程非常相似。
64 位读者喜欢这篇文章。
Woman sitting in front of her computer

Ray Smith

当我第一次开始使用 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 时选择“完整安装,包括应用程序和游戏”,您可以自动安装它。 如果您选择安装“纯 DOS 系统”,则需要稍后使用 FDIMPLES 包管理器安装 OpenWatcom C 编译器。

installing OpenWatcom

opensource.com

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 仅支持十六种文本颜色和八种背景颜色。 您可以使用值 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 编辑器,因为它提供了语法高亮显示,使查看程序源代码中的关键字、字符串和变量更容易。

writing a simple C program

在使用 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) 执行对象链接阶段

compiling with OpenWatcom

OpenWatcom 打印一些无关的输出,这可能会使您难以发现错误或警告。 要告诉编译器抑制大多数这些额外的消息,请在编译时使用 /Q(“安静”)选项

compiling with OpenWatcom

如果在编译 C 源文件时没有看到任何错误消息,您现在可以运行您的 DOS 程序了。 这个 “Hello world” 示例是 TEST.EXE。 在 DOS 命令行中输入 TEST 以运行新程序,您应该会看到非常漂亮的输出

running the test program

C 是一种非常高效的编程语言,非常适合在像 DOS 这样的资源受限的系统上编写程序。 通过在 DOS 上用 C 语言编程,您可以做更多的事情。 如果您是 C 语言的新手,您可以通过在 FreeDOS 网站上阅读我们的自定进度的电子书《Writing FreeDOS Programs in C》以及 FreeDOS YouTube 频道上的配套 “how-to” 视频系列来学习 C 语言。

接下来阅读

开始使用 FreeDOS

它看起来像复古计算,但它是一个现代操作系统,您可以用来完成工作。

为什么 FreeDOS 有 16 种颜色

为什么文本只以这种有限的调色板出现,以及为什么 FreeDOS 使用这些颜色和色调,而不是其他颜色? 答案,就像技术领域的许多事物一样,是...

标签
photo of Jim Hall
Jim Hall 是一位开源软件倡导者和开发人员,以其在 GNOME 中的可用性测试以及作为 FreeDOS 的创始人兼项目协调员而闻名。

1 条评论

如果您喜欢这篇文章并且是 C 编程新手,您可能会对去年我录制的 “C 编程” YouTube 系列感兴趣。 您可以在 FreeDOS 网站的 “书籍” 下找到它,标题为 “Writing FreeDOS programs in C”
https://www.freedos.org/books/cprogramming/

并且如果您已经有 C 编程经验,您可能会喜欢观看此视频,其中演示了几个常见的编程错误
https://www.youtube.com/watch?v=dUM_AJ8VEl0

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.