把 Borland Turbo c 的源代碼移植到GNU gcc
內(nèi)容
TurboC 的大概內(nèi)容
TurboC為何而生??
其他方法(Alternate Approaches, 不知道是不是這樣翻譯)
TurboC的特點與不足
下載和安裝TurboC
未來的計劃
為什么要用這么可愛的logo呢?
TurboC的大概內(nèi)容
TurboC是一個可連接的庫同時也是一大堆C語言的頭文件,是為了更容易地在GNU gcc,也就是在類Unix系統(tǒng)上,編譯那些用原來在Turbo C編譯器編譯的MS-DOS系統(tǒng)的C語言的源文件,概括如下:
通過Turbo C的conio.x里的ncurses的實現(xiàn)
通過Turbo C的graphics.h里的Xlib的實現(xiàn)
一些其他的函數(shù)和為了方便的節(jié)省時間的特征
一種克服了Turbo C和GUN gcc的整型數(shù)據(jù)類型差異的方法
但不管怎么說,這也不是一個完美的解決方案,但是你會發(fā)現(xiàn)它還是有用的.你可以在它相關(guān)的早期的發(fā)展階段找到graphics.h的幫助.
TurboC遵于GNU的LGPL協(xié)議(Lesser General Public License).
TurboC為何而生??
我寫過很多基于MS-DOS的用Borland公司的Turbo C 2.0編譯器編譯的程序.當(dāng)由于愛好的原因,我想把其中一些代碼以自由軟件的形式存在,我便想到了把這些代碼發(fā)布在GPL下,是MS-DOS的代碼,慢慢的把它們轉(zhuǎn)換成類Unix系統(tǒng)的代碼.很明顯,預(yù)先直接的去轉(zhuǎn)換(MS-DOS--> *nix)是一件很耗時的工作.而且漸漸的,我遇到了困難,因為發(fā)布一個別人無法理解其源代碼的的軟件并不是一件好事.而我最喜歡的發(fā)布開源的頻道fleshmeat不"吃"MS-DOS,因此它很文雅的拒絕了我的MS-DOS項目.
很顯然,現(xiàn)在的需要是更底層的,然后我就想到了我可以提供合適兼容的Turbo C的庫和頭文件,這樣,把Turbo C的源碼引到類Unix系統(tǒng)就會簡單得多.也就是說,提供舊版本的MS-DOS的類Unix版本是一件相對容易很多的事情.但究竟這個容易去到哪兒,跟你要引進(jìn)的程序的很多東西都有關(guān).
其他方法(Alternate Approaches, 不知道是不是這樣翻譯)
對于conio.h的功能,你可以考慮使用pablo Vidal的UConio的庫來代替.但是我沒有使用過,所以無法說出其好長與不足,不過它肯定提供比TurboC提供一個少得多的Conio的功能的子集.而且它也會要求你更大范圍的修改你的源代碼.
Borland公司已經(jīng)有了(或許會提供)一個Linux版本的C++編譯器,這樣的話,它的nature,價格和這個編譯器的目標(biāo)工作平臺將是一個謎.一種假設(shè)(象Kylix)就是它將基于wine的,所以它只可以工作在x86的系統(tǒng)上面.但是,如果它包括了在TurboC上實現(xiàn)的庫,那樣,老實說,他提供了一種更簡單的的方法來把你Turbo C的源代碼引入到Linux上,但如果這樣的話,它將會是非常龐大的.對我自己來說,盡管已經(jīng)是一個很久的borland公司的用戶了,但我還是非常希望用GNU gcc來編譯我的程序.
對于graphics.h的功能,有一個Csaba Biegl, Michael Goffioul, and Hartmut Schirmer的GRX庫.直到graphics.h的功能還有一點還沒寫完的時候,我才發(fā)現(xiàn)了這個庫,因此我還沒來得及很充分的測試它.它的目標(biāo)是要成為一個多平臺的2D圖像庫.它的官網(wǎng)沒有宣傳(甚至沒有提到)與Turbo C的兼容性.然而,它只包括了非常少量的與Turbo C同名(當(dāng)然還有相同功能)的功能.
當(dāng)然,如果你只是感興趣在類Unix系統(tǒng)上運行你的程序,同時也反對把其他程序引到類Unix系統(tǒng)上,那你也可以在linux版本的DOS emulators 下運行你已經(jīng)存在的程序.DOS emulation使用了 dosemu 和 freedos ,在x86系統(tǒng)上工作得非常好,同時 bochs 和 freedos在非x86類Unix系統(tǒng)上工作的也不錯(但可能有點慢).
TurboC的特點與不足
特點
TurboC 提供了Turbo C的conio.h頭文件控制臺的大部分功能,與相關(guān)的ncurses的功能一一對應(yīng).(當(dāng)然,除了scanf之外的conio.h的功能都有提供)
TurboC提供了Turbo C的graphics.h頭文件"BGI"的大部分功能.到目前為止(2002 06 08),除了臨時缺乏stroked-font的支持,這些特點的實現(xiàn)已經(jīng)完成的很徹底了.
TurboC提供了這些丟失的功能諸如strupr和strlwr的功能的很少的東西,
請確認(rèn)可提供的方法的完整列表:
不足
請參考bugs和issues的完整列表.到目前為止,這個庫文件只是我在特定的我寫的Turbo C的程序所需要的那么完整,隨著我引入的我以前的程序到類Unix 系統(tǒng)的多起來,TurboC的庫大概才會愈來愈完整.到目前為止,本質(zhì)上conio.h的支持已經(jīng)完整了,除了顯示文本外,graphics.h的支持也本質(zhì)上完整了.
在已經(jīng)引進(jìn)的程序里,除非你使用了xterm,要不然文本控制臺的窗口指揮邏輯上自動調(diào)好尺寸,并不會physically地去調(diào)整.如果你用了諸如KDE控制臺之類的其他控制臺,用戶必須人為地去調(diào)整了.
Borland的Turbo C是16位的編譯器,但是我目標(biāo)的GNU gcc編譯器是32位的,結(jié)果產(chǎn)生了整型的數(shù)據(jù)類型的差異.TurboC用宏的方法處理了(但愿)更普遍的情況.沒有處理的情況會在編譯的時候報錯,用戶必須手動去修改.在用戶的頁面會被詳細(xì)介紹.
用基于諸如 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和注釋/反注釋開頭的若干行,你會很容易看到的),我已經(jīng)檢驗了最近釋出的snapshot(不是開發(fā)者的snapshot)并在以下系統(tǒng)測試了程序:
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)放在你系統(tǒng)放庫的地方--通常在 /usr/lib.把所有的頭文件放到它應(yīng)該放的地方--通常是 /usr/include.又或者,你也可以添加它們的鏈接到這些目錄.又或者,把它們放到你喜歡的地方,然后在gcc里用參數(shù) -L和-I來連接它們.
在我的系統(tǒng),我是這么做的.
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
你會發(fā)現(xiàn)(例如,在FreeBSD)如果你在你引入的程序力#include了TurboC的頭文件,你的編譯器會報錯:標(biāo)識符鏈接太深(symbolic links being "too deep").如果是這樣的話,你可以把上邊的ln命令的參數(shù)"-s"去掉.
另外,編譯Makefile當(dāng)然會假定X-window系統(tǒng)的頭文件和庫;如果這個假定是錯的話,你就要你的編譯器加上參數(shù)"-L"和/或者"-I"來調(diào)整.X-window系統(tǒng)必須編譯全部的庫,或者你要運行你的程序,如果你要用到graphics.h的功能.如果你不打算使用這些功能,你可以通過編輯Makefile和去掉編譯器參數(shù)的"-DWITH_X"在沒有X的系統(tǒng)上引入和編譯你的程序.
未來的計劃
嗯,很明顯這種項目是沒什么前途的,它的計劃只不過是從一個古老的編譯器里引入它的代碼.然而,我還是會在我這個項目里根據(jù)需要增加一些特性的.我不會浪費精力去寫一些沒有在我Turbo C程序力出現(xiàn)過的功能的,但如果你自己已經(jīng)寫了而又告訴了我,我是很樂意加進(jìn)去的(把榮辱加給你).
當(dāng)然,很希望你能把TurboC的bug返回給我,(當(dāng)然在這之前,去看看Buglist有沒有這個問題),我會盡力去改正它們的.
為什么要用這么可愛的logo呢?
這是一幅姐妹在談話的圖片,畫家Lynn Rothan的杰作.我試圖表達(dá)的意思是,它表現(xiàn)了很相似的c編譯器 Borland Turbo C和GUN gcc的關(guān)系.當(dāng)然拉,lynn有他自己的意思.請參考他的網(wǎng)站.