翻譯:把 Borland Turbo c 的源代碼移植到GNU gcc

把 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有他自己的意思.請參考他的網站.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章