天天看點

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

繼續閱讀