wonderer's program

everything will be better
posts - 19, comments - 6, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

翻译:把 Borland Turbo c 的源代码移植到GNU gcc

Posted on 2007-03-31 16:23 wonderer 阅读(1385) 评论(1)  编辑  收藏 所属分类: linux翻译

把 Borland Turbo c 的源代码移植到GNU gcc

内容
TurboC 的大概内容
TurboC为何而生??
其他方法(Alternate Approaches, 不知道是不是这样翻译)
TurboC的特点与不足
下载和安装TurboC
未来的计划
为什么要用这么可爱的logo呢?

TurboC的大概内容

TurboC是一个可连接的库同时也是一大堆C语言的头文件,是为了更容易地在GNU gcc,也就是在类Unix系统上,编译那些用原来在Turbo C编译器编译的MS-DOS系统的C语言的源文件,概括如下:
通过Turbo C的conio.x里的ncurses的实现
通过Turbo C的graphics.h里的Xlib的实现
一些其他的函数和为了方便的节省时间的特征
一种克服了Turbo C和GUN gcc的整型数据类型差异的方法
但不管怎么说,这也不是一个完美的解决方案,但是你会发现它还是有用的.你可以在它相关的早期的发展阶段找到graphics.h的帮助.
TurboC遵于GNU的LGPL协议(Lesser General Public License).

TurboC为何而生??

我写过很多基于MS-DOS的用Borland公司的Turbo C 2.0编译器编译的程序.当由于爱好的原因,我想把其中一些代码以自由软件的形式存在,我便想到了把这些代码发布在GPL下,是MS-DOS的代码,慢慢的把它们转换成类Unix系统的代码.很明显,预先直接的去转换(MS-DOS--> *nix)是一件很耗时的工作.而且渐渐的,我遇到了困难,因为发布一个别人无法理解其源代码的的软件并不是一件好事.而我最喜欢的发布开源的频道fleshmeat不"吃"MS-DOS,因此它很文雅的拒绝了我的MS-DOS项目.
很显然,现在的需要是更底层的,然后我就想到了我可以提供合适兼容的Turbo C的库和头文件,这样,把Turbo C的源码引到类Unix系统就会简单得多.也就是说,提供旧版本的MS-DOS的类Unix版本是一件相对容易很多的事情.但究竟这个容易去到哪儿,跟你要引进的程序的很多东西都有关.

其他方法(Alternate Approaches, 不知道是不是这样翻译)

对于conio.h的功能,你可以考虑使用pablo Vidal的UConio的库来代替.但是我没有使用过,所以无法说出其好长与不足,不过它肯定提供比TurboC提供一个少得多的Conio的功能的子集.而且它也会要求你更大范围的修改你的源代码.
Borland公司已经有了(或许会提供)一个Linux版本的C++编译器,这样的话,它的nature,价格和这个编译器的目标工作平台将是一个谜.一种假设(象Kylix)就是它将基于wine的,所以它只可以工作在x86的系统上面.但是,如果它包括了在TurboC上实现的库,那样,老实说,他提供了一种更简单的的方法来把你Turbo C的源代码引入到Linux上,但如果这样的话,它将会是非常庞大的.对我自己来说,尽管已经是一个很久的borland公司的用户了,但我还是非常希望用GNU gcc来编译我的程序.
对于graphics.h的功能,有一个Csaba Biegl, Michael Goffioul, and Hartmut Schirmer的GRX库.直到graphics.h的功能还有一点还没写完的时候,我才发现了这个库,因此我还没来得及很充分的测试它.它的目标是要成为一个多平台的2D图像库.它的官网没有宣传(甚至没有提到)与Turbo C的兼容性.然而,它只包括了非常少量的与Turbo C同名(当然还有相同功能)的功能.
当然,如果你只是感兴趣在类Unix系统上运行你的程序,同时也反对把其他程序引到类Unix系统上,那你也可以在linux版本的DOS emulators 下运行你已经存在的程序.DOS emulation使用了 dosemu 和 freedos ,在x86系统上工作得非常好,同时 bochs 和 freedos在非x86类Unix系统上工作的也不错(但可能有点慢).

TurboC的特点与不足

特点
TurboC 提供了Turbo C的conio.h头文件控制台的大部分功能,与相关的ncurses的功能一一对应.(当然,除了scanf之外的conio.h的功能都有提供)
TurboC提供了Turbo C的graphics.h头文件"BGI"的大部分功能.到目前为止(2002 06 08),除了临时缺乏stroked-font的支持,这些特点的实现已经完成的很彻底了.
TurboC提供了这些丢失的功能诸如strupr和strlwr的功能的很少的东西,
请确认可提供的方法的完整列表:

不足
请参考bugs和issues的完整列表.到目前为止,这个库文件只是我在特定的我写的Turbo C的程序所需要的那么完整,随着我引入的我以前的程序到类Unix 系统的多起来,TurboC的库大概才会愈来愈完整.到目前为止,本质上conio.h的支持已经完整了,除了显示文本外,graphics.h的支持也本质上完整了.
在已经引进的程序里,除非你使用了xterm,要不然文本控制台的窗口指挥逻辑上自动调好尺寸,并不会physically地去调整.如果你用了诸如KDE控制台之类的其他控制台,用户必须人为地去调整了.
Borland的Turbo C是16位的编译器,但是我目标的GNU gcc编译器是32位的,结果产生了整型的数据类型的差异.TurboC用宏的方法处理了(但愿)更普遍的情况.没有处理的情况会在编译的时候报错,用户必须手动去修改.在用户的页面会被详细介绍.
用基于诸如 getcha, cprintf或其他的控制台来混合基于流的功能(如 getchar, printf,其他),很可能会不工作.你也可以浏览usage page.

下载并安装TurboC
下载源代码
*Most-current development code (20040218) TurboC-dev.tar.gz
20020602 snapshot TurboC-20020602.tar.gz
20020419 snapshot TurboC-20020419.tar.gz
20020418 snapshot TurboC-20020418.tar.gz
20020323 snapshot TurboC-20020323.tar.gz
20020317 snapshot TurboC-20020317.tar.gz
20020312 snapshot TurboC-20020312.tar.gz

tarball里包括了一个教TurboC-source的文件夹,你可以简单的在这个目录下用make来编译库.但必须是GNU gcc或者用gmake(例如在FreeBSD或Mac下)来编译(提示,在FreeGSD下,你要编辑makefile和注释/反注释开头的若干行,你会很容易看到的),我已经检验了最近释出的snapshot(不是开发者的snapshot)并在以下系统测试了程序:
Linux Intel 'x86 (SuSE 8.0)
Linux PowerPC (SuSE 7.3)
FreeBSD (4.5)
(早期的TurboC的库好像在FreeBSD上工作的效果不怎么好,请升级到20020420的版本,并且在运行引入的程序的时候按照下面的步骤).最近释出的snapshot只在SuSE8.2上测试过.
把这个库(libTurboC.a and libTurboCu.a)放在你系统放库的地方--通常在 /usr/lib.把所有的头文件放到它应该放的地方--通常是 /usr/include.又或者,你也可以添加它们的链接到这些目录.又或者,把它们放到你喜欢的地方,然后在gcc里用参数 -L和-I来连接它们.
在我的系统,我是这么做的.
cd ~
tar -xzvf TurboC-dev.tar.gz
cd TurboC-source
... 编辑FreeBSD的makefile ...
make (or gmake)
su
ln -s *.h /usr/include
ln -s libTurboC.a /usr/lib
exit
你会发现(例如,在FreeBSD)如果你在你引入的程序力#include了TurboC的头文件,你的编译器会报错:标识符链接太深(symbolic links being "too deep").如果是这样的话,你可以把上边的ln命令的参数"-s"去掉.
另外,编译Makefile当然会假定X-window系统的头文件和库;如果这个假定是错的话,你就要你的编译器加上参数"-L"和/或者"-I"来调整.X-window系统必须编译全部的库,或者你要运行你的程序,如果你要用到graphics.h的功能.如果你不打算使用这些功能,你可以通过编辑Makefile和去掉编译器参数的"-DWITH_X"在没有X的系统上引入和编译你的程序.

未来的计划

嗯,很明显这种项目是没什么前途的,它的计划只不过是从一个古老的编译器里引入它的代码.然而,我还是会在我这个项目里根据需要增加一些特性的.我不会浪费精力去写一些没有在我Turbo C程序力出现过的功能的,但如果你自己已经写了而又告诉了我,我是很乐意加进去的(把荣辱加给你).
当然,很希望你能把TurboC的bug返回给我,(当然在这之前,去看看Buglist有没有这个问题),我会尽力去改正它们的.

为什么要用这么可爱的logo呢?

这是一幅姐妹在谈话的图片,画家Lynn Rothan的杰作.我试图表达的意思是,它表现了很相似的c编译器 Borland Turbo C和GUN gcc的关系.当然拉,lynn有他自己的意思.请参考他的网站.


评论

# re: 翻译:把 Borland Turbo c 的源代码移植到GNU gcc[未登录]  回复  更多评论   

2008-05-02 19:18 by haha
兄弟,这篇文章是你自己人工翻译,还是机器翻译的?

只有注册用户登录后才能发表评论。


网站导航: