分类: C/C++
2010-09-09 22:20:33
可以关注
里面将有 一笔苍穹 的最新文章。
Open Watcom,前身是Watcom C/C++,现在一个免费开源的编译环境。早在DOS时代,Watcom C/C++就以在DOS下能够产生最好的最佳化而闻名于世,当时不论是Borland C/C++还是Visual C/C++,它们产生的最佳化都比Watcom C/C++差上一截。再加上与当时DOS扩展器中的翘楚DOS/4GW联手,使员在DOS可以轻松地完成32位保护模式:32位的字长,4G的内存寻址能力,更全面的硬件访问…… 这一切将Watcom C/C++打造成一把利器,当时很多商业游戏都使用它来编码,DOS时代的玩家可能还记得,许多游戏在运行之前都会先加载"DOS/4GW"这个扩展,然后才进入游戏本身,这就是Watcom + DOS/4GW的产物。总之,Watcom C/C++在专业的C/C++员以及系统员 心中是第一名牌的开发工具。不过到了上世纪90年代中叶四大编译器厂商大混战中(分别是Borland C/C++, Watcom C/C++, Visual C/C++, Symantec C/C++),Microsoft凭借自身又是操作系统厂商的优势对其它三家进行打压,比如说封装一套MFC,和Watcom及Symantec签订授权 条约后却只提供了一个低版本的MFC,自己的Visual C/C++捆绑的MFC使用高版本,这一来就势必造成不公,结果令Watcom及Symantec败北,Watcom也被Sybase收购。关于这段历 史,有兴趣的朋友可以去下载李维的《Borland 传奇》做更详细的了解。
到后来,Watcom C/C++作为一个开源自由项目出现在世人眼前,也就是我打算跟你介绍的Open Watcom(以下简称OW)。现在的OW可以生成Win32、OS/2、Linux、DOS等平台下的执行,编译速度和后端优化效果依然是那么夺目。好了,言归正传,首先下载一份OW的安装,你可以在本站的共享资源区里找到它,当前版本是1.6。下载之后,执行安装, 首先得同意它的授权协议,然后决定安装路径,然后选择安装模式,初学者可以直接选Full installation,即完整安装。当然也可以选择Selective installation,进行有选择的安装。这里假设你选择的是Selective installation,"Next"之后出现一个定制对话框,第一项是问你是否需要16位的DOS编译器,点击后面的按钮会让你选择要用的编译模式, 比如Small啊Large啊什么的,编译模式决定你的能使用的段 及数据段的大小和寻址方式,这个概念在这里就不再详细介绍了,不明白的可以到网上去查查;第二行是32位编译器的选项,基于寄存器的调用方式和基于栈的调 用方式,建议都勾上;第三行是目标操作系统,也就是你想让编译器能针对哪些平台生成执行文件,可选项有DOS、Windows 3.x、OS/2、Windows NT/9X/32s、Linux、Novell Netware,如果你要写DOS,勾上第一项,若还要写Windows勾第四项…… 接下来的主机系统,也就是你想在哪些平台上运行OW的编译器,有DOS、Windows 3.1、OS/2、Windows NT/9X,一般来说勾上最后那项就可以了;最后是工具和组件,有C++编译器组件、实例和运行时启动源,视个人情况选择吧。选择好了之后,可以开始安装了,没选全也没关系,安装好了之后再运行安装可以再增减安装项目。
接 下来,让我们来建立第一个OW工程,从开始菜单中打开OW的“IDE”,选择“File”->“New Project”,在弹出的对话框里指定工程名和路径,点击“打开”按钮,在接下来的对话框中选择目标环境和最后生成文件的类型,目标环境就是你打算在什 么系统下执行你写的, 这里以DOS为例,你会看到DOS - 32-bit字样的单选框,当然如果你安装时选择了16位编译器的话,就应该还有DOS - 16-bit单选框,假设你选择的是DOS - 32-bit,在Image type下会出现很多选项,这是一些DOS下的扩展器,建议选择“DOS/4GW Executable”或“DOS32/A LE Executable”,点击“OK”,即创建了一个工程。
在工程文件面板上单击右键,在弹出菜单中选择“New
Source”(或直接按键盘上的Insert键),跳出"Add
files"对话框,此时可以往工程里添加源文件了,找到你要的源文件,点击“Add”将其添加到工程里,添加完毕之后点击“Close”关闭对话框,现
在工程文件面板中会多出你刚才添加的那些文件,要修改其中的某个文件,可以双击该文件的文件名,你会发现此时该文件是被记事本打开的,因为OW没有自带编
辑器,所以默认是用系统记事本打开的,你也可以换成你习惯的编辑器,比如DEV-CPP或Visual C/C++,
方法是选择“File”->“Set text
editor”,再弹出的对话框中点击“Browse”,然后找到你要用的编辑器,就OK了。也许OW没有自己的文本编辑器算是个缺陷,但反过来想你可以
使用自己觉得顺手习惯的文本编辑器,也不是什么坏事。在记事本或你指定的编辑器中修改好你的之后,保存,再切换到OW的IDE中来,选择“Target”->“Make”或直接按F4键,就可以编译你的了,编译过程中有任何错误会在下方的“IDE Log”框里显示,不过由于没有自带的文本编辑器,所以你双击某行错误信息并不会直接跳到出错的行,而仅仅是打开源文件,这个时候你得记下出错信息最前面小括号里的行号,然后到编辑器里转到相应的行,找出你的错误来。下面给出一个示例:
/* A example for Open Watcom By DongKai */
#include <stdio.h> /* 包含printf()的声明 */
#include <stdlib.h> /* 包含system()的声明 */
#include <conio.h> /* 包含getch()的声明 */
int main()
{
system("cls"); /* 这一句不是必须的,加上它是为了清除DOS/4GW加载时的一些信息 */
printf("Hello world!\n");
getch();
return 0;
}
在 编译的时候有些你可能要注意的:源文件最后得专门留下一个空行,否则编译器会有一个警告,这和GCC很像;OW的库函数接口许多和Borland C/C++的很像,所以大部分的TC或BC库函数都能在OW下使用,而且OW提供了那些函数的强化版本,比如防止溢出版和宽字符版。如果你英文不错的 话,OW自带的大量文档都是很好的资料,值得一看。
这一篇就到这儿了,我会抽时间接着写下一篇,感谢捧场。转载的请务必给明出处:0101部落
董凯
太感谢了,我回去好好看看 watcom 在硬件操作上和用汇编和一样吗? C该怎么操作硬件,有C的一套方法,比如用指针对内存访问,out/inport对端口访问,int386x对中断,asm内嵌汇编……watcom是32位的,而tc是16位的呀,在变量定义的操作上,和硬件操作上应该是不同的吧?[em13][em13][em13]
STLport 是什么东西,在open watcom C++里如果STLport 呢? 大体上是差不多的,就说中断吧,TC上一个软中断可能是这样产生的int86(0x10, regin, regout),而OW上则是int386(),从这里可以看出,他们的接口很相似,象DJGPP则是_dmpi_int_(),感觉上差的比较远了./* Svga64k.bgi 测试文件 */
#include "graphics.h"
#include "Svga256.h"
#include "stdio.h"
#include "fcntl.h"
#include "malloc.h"
#include "io.h"
int huge Return_SVGA256(void)
{
return(SVGA320x200x256); /* 返回各种分辨率的对应编号 0~6 宏定义参见 Svga256.h */
}
int main(void)
{
int width, height, i=DETECT, j=0, x0, y0, fp;
unsigned char fix, *buffer, pix24b[4];
DacPalette256 dac256;
installuserdriver("Svga256", Return_SVGA256); /* 对于svga256必需执行该函数以安装BGI驱动 */
initgraph(&i, &j, ""); /* 执行TC默认的BGI初始化函数 */
if((fp = open("xy_256.bmp", O_RDONLY | O_BINARY)) == -1)
{
puts("Can't find file ""xy_256.bmp"".");
return 1;
}
lseek(fp, 18, SEEK_SET);
read(fp, &width, 4);
read(fp, &height, 4);
fix = (width % 4) ? (4 - width % 4) : 0;
x0 = (320 - width) / 2;
y0 = (200 - height) / 2;
lseek(fp, 54, SEEK_SET);
for(i = 0; i < 256; i++) /* 按照该图片的DAC色表设置色彩寄存器 */
{
read(fp, pix24b, 4); /* 读取DAC分量信息 */
/* 设置调色板 */
dac256 = pix24b[2] >> 2;
dac256 = pix24b[1] >> 2;
dac256 = pix24b[0] >> 2;
}
setvgapalette256(&dac256); /* 应用调色板, 定义参见 Svga256.h */
buffer = (unsigned char *)malloc(width);
for(j = height - 1; j >= 0; j--)
{
read(fp, buffer, width);
lseek(fp, fix, SEEK_CUR);
for(i = 0; i < width; i++)
putpixel(x0+i, y0+j, buffer
chulia200020012010-09-09 22:43:15
open watcom 如何使用allegro图形包? http://www.cn-dos.net/forum/viewthread.php?tid=21427&sid=R86vFC 1. 正确配置watcom c的环境(路径和环境变量等等) 2. 正确配置djgpp的环境allegro的底层汇编代码要用dj的汇编器搞定(不过放心,最终生成的库格式是watcom的)。 3. 进 allegro 目录,敲 "fix -watcom -crlf",这个相当于 *nix 下的 configure 角本,会针对编译器和平台调整一些代码和宏定义。 4. make it 5.修改makefile的错误. wcl386 -w1 -zq -fr=nul -bt=dos4g -5s -s -I. -I.\\include -fo=obj\\watcom\\asmdef .obj -fe=obj\\watcom\\asmdef.exe src\\i386\\asmdef.c 是错的,应该是: wcl386 -w1 -zq -fr=nul -bt=dos4g -5s -s -I