Turbo C++ 4.0 for DOS へようこそ ================================ この README ファイルには,Turbo C++ についての重要な情報が記載されています。 このファイルを最後まで読んで,Turbo C++,関連のプログラム,およびマニュアル についての最新の情報を確認してください。 このファイルの内容 ------------------ 1. お問い合わせについて 2. インストール 3. Turbo C++ 4.0 の機能 4. 重要な注意事項 5. マニュアルの訂正・追加事項 ※ この README ファイル,その他のオンラインドキュメントにおいて "Alt" と表記 されている箇所は PC-9800 では "GRPH" キーを示します。 1. お問い合わせについて ------------------------  Turbo C++ の使用中に問題が発生した場合は,このファイル,HELPME.TXT や DOC ディレクトリのその他のファイル,オンラインヘルプ,および Turbo C++ の マニュアルをお読みください。それでも問題が解決しない場合は,以下の方法で ご質問していただくことができます。なお,プログラミング技法については,お答 えいたしかねますのであらかじめご了承ください。  サポートセンターに寄せられたご質問については,他のユーザーの方々の参考と するため,断わりなく雑誌,その他のメディアで公開させていただくことがありま す。お送りいただいたリストやディスクなどで公開できないものについては,その 旨を明示しておいてください。なお,お送りいただいたリスト,ディスクについて は原則として返却いたしません。 1.1 文書,電話,ファクシミリによるお問い合わせ ■技術的な質問のご連絡先 〒151 東京都渋谷区笹塚 1-64-8 笹塚サウスビル ボーランド株式会社 テクニカルサポートセンター 電話: 03-5350-9353 FAX: 03-5350-9360 ■製品の不備,出荷等に関してのご連絡先 〒151 東京都渋谷区笹塚 1-64-8 笹塚サウスビル ボーランド株式会社 インフォメーションセンター 電話: 03-5350-9380 FAX: 03-5350-9369 営業時間 祝祭休日を除く月〜金曜 10:00 - 12:00, 13:00 - 17:00  ご連絡の際には,以下の事項をお知らせいただきますようお願い致します。 ■シリアル番号,ユーザー ID 番号  ユーザー ID 番号とは,ユーザー登録をされた方に発行される ID 番号です。シ リアル番号とユーザー ID 番号のいずれもご連絡いただけない場合,ご回答いたし かねる場合がございます。 ■ご使用のハードウェア環境 ・機種名 ・実装メモリ,周辺機器など ・DOS のバージョン ・常駐プログラム,デバイスドライバ (EMS ドライバ,かな漢字変換の種類など) 1.2 パソコン通信によるお問い合わせ  パソコン通信(商用ネットワーク)によるサポート窓口としまして,下記2種類の 窓口を設けておりますので営業時間にご連絡いただけないような場合にご利用くだ さい。 ニフティ株式会社: Nifty-Serve Borland フォーラム (FBORLAND) 日経 BP 社: 日経 MIX borland 会議 1.3 お問い合わせいただく際のご注意 ご質問の前に,必ず次の点についてご確認をお願い致します。 ・統合開発環境(TC.EXE),THELP.COM などで操作上の問題が見つかった場合は,組 み込まれているかな漢字変換フロントプロセッサ (NECAI,ATOK,VJE など) や, 他のデバイスドライバ,常駐プログラムを取り外して再度実行してください。 それでも問題が発生する場合は,「デバイスドライバ/常駐プログラムがない状 態で発生する」旨をご報告ください。問題が発生しなくなった場合は,いずれか のデバイスドライバか常駐プログラムが原因と考えられます。1つずつ組み込ん でみて,どのデバイスドライバが問題かを調べることができます。プログラムが 不正なメモリにアクセスしているような不具合を持っている場合,統合環境や他 のツールにも影響を及ぼすことがあります。リセット直後のプログラムを実行し ない状態やよくデバッグされたプログラムでも問題が再現するかどうかを確認し てください。特殊な拡張ボードや周辺機器を使用している場合は,それを外して 試してみてください。可能であれば他機種における実行結果もご報告ください。 サポートセンターでは,ご報告いただいた問題を再現する必要があります。どの ような状況で問題が発生するかを詳細にご報告いただかなければなりません。ま た,問題を再現させるための最低限必要な条件を確認してください。デバイスド ライバや常駐プログラムが数多く組み込まれた状況や,自作プログラム,特殊な デバイスドライバなどを組み込まれている場合は,サポートセンターでは対応で きませんので,あらかじめご了承ください。 ・作成したプログラムを実行,デバッグする場合は,すべての警告メッセージの表  示を有効にしてプログラムを構築してみてください。プログラムにポインタ操作  などの誤りがある場合は,システムや統合開発環境の動作が不安定になることが  あります。プログラムをお送りいただく場合は,問題が再現する数10行程度の  簡潔なもので確認してからご連絡ください。長いプログラムをお送りいただいて  もご回答できない場合がございます。お送りいただいたディスク等は,原則とし  て返却いたしません。 ・個々のプログラミング技法についてのお問い合わせはご遠慮いただく場合がござ  います。HELPME.TXT やその他のドキュメントファイル,およびマニュアルにも  プログラミングについての解説がございますので参考にしてください。 2. インストール --------------- インストールの詳細については,INSTALL.TXT をご覧ください。 [ インストール時に展開されないファイル ] 以下のファイルは,インストーラでは展開されません。これらのファイルは,必要 に応じて UNPAK.EXE ユーティリティを使って展開できます。 BGIUTILS.PAK - グラフィックスユーティリティ PC-9800 シリーズ用のグラフィックスユーティリティです。 詳しくは,BGIUTILS.DOC をお読みください。 FEPCTRL.PAK - かな漢字変換制御ライブラリ かな漢字変換を制御するためのライブラリ関数です。 詳しくは,README.FEP をお読みください。 EXTMEM.PAK - EPSON PC 用拡張メモリ初期化ユーティリティ EPSON の一部の機種で発生する不具合を回避するためのユーティリティです。 詳しくは,EXTMEM.DOC をお読みください。 CD-ROM 版では,これらのファイルは INSTALL ディレクトリに格納されています。 フロッピー版では,これらのファイルはマスターディスクの1枚目に格納されてい ます。 ファイルを展開するためには,UNPAK x pakfile [direc] とします。たとえば, FEPCTRL.PAK を C:\TC4\EXAMPLES\FEPCTRL に展開するためには,あらかじめ C:\TC4\EXAMPLES ディレクトリに FEPCTRL サブディレクトリを作成しておき, UNPAK x FEPCTRL C:\TC4\EXAMPLES\FEPCTRL としてください。 3. Turbo C++ 4.0 の機能 ----------------------- DPMI ---- TC.EXE,TCC.EXE,CPP.EXE,TD.EXE,MAKE.EXE,および TLINK.EXE は,すべて DPMI をホストとするようになっています。 重要! これらのプログラムを実行するには,最低 2.5MB のプロテクトメモリ が必要です。 上記の各ツールを実行するときの注意および制限事項は次のとおりです。 ・NEC MS-DOS 5.0A の DPMI.EXE は使用可能なプロテクトメモリが 2MB に制限 されているため動作しません。 ・NEC MS-DOS 6.2 で使用する場合は EMM386.EXE に /DPMI オプションを付けて ください。 ・NEC MS-DOS 6.2 の DPMI.EXE を常駐させている場合に,各ツールが正常に動 作しない場合があります。この場合は,DPMI.EXE を使わないようにしてくだ さい。 ・VCPI (Virtual Control Program Interface) または DPMI (Dos Protect Mode Interface) または XMS (eXteneded Memory Specification) 規格に準拠せず に,仮想 86 モードやプロテクトモードを使用するアプリケーションと DPMI ホストのプログラムは同時に使用できません。 NEC MS-DOS 3.3D/5.0A や PC-9800 シリーズの Windows に付属の EMM386.EXE がこれに該当します。 ・アイ・オー・データ機器の Memory Server で DPMI オプションを有効にして いる場合,あるいは Memory Server II で DPMI32 を常駐させている場合に, DPMI ホストのユーティリティが正しく動作しない場合があります。この場合 は,DPMI を使わないようにしてください。 ・Borland C++ 3.1 や Paradox 4.0 for DOS に付属している DPMI16BI.OVL は Turbo C++ 4.0 では使用できません。DOS の PATH 環境変数に古いバージョン の DPMI16BI.OVL が含まれているディレクトリが指定されていると DPMI ホス トのツールは正常に動作しませんので注意が必要です。 ・Borland C++ 3.1 に含まれていた,常駐の DPMI ホストプログラム DPMIRES.EXE は Turbo C++ 4.0 では無くなりました。 ・Windows 3.1 の DOS プロンプトで実行する場合には,あらかじめ PIF エディ タを使って適当な .PIF ファイル(通常は DOSPRMPT.PIF)を編集し,DOS ボッ クス用の XMS メモリ(最大)の設定を変更しておく必要があります。デフォル トでは XMS メモリの最大は 1024 KBとなっているので,これを少なくとも 2500 以上にするか,-1 (アプリケーションが要求するだけの XMS メモリを与 える)にします。 - .PIF ファイルの変更方法 - 1) PIF エディタを起動する 2) [ファイル(F)|開く(O)...] を選択し dosprmpt.pif を開く 3) "必要なXMS メモリ:" の項目の "最大 [1024 ]Kバイトまで(I)" の 1024 を -1 に 変更 4) [ファイル(F)|上書き保存(S)] で設定内容を保存 注意: ここで設定すべきなのは "最大" 値であり,"必要" 値ではありません。 "必要" の設定では余分なメモリを XMS に設定するだけで,DPMI サー ビスがなく,そのために "必要" 設定ボックスの総設定は無効になりま す。 [ DPMIMEM 環境変数 ] 環境変数により各ツールが使用するプロテクトメモリ量を設定することができま す。 ・DPMI ホストの各ツールが使うプロテクトメモリ容量を上限を指定するには,環 境変数 DPMIMEM にその値を設定しておきます。 set DPMIMEM=MAXMEM 3000 たとえば,上のように指定したあとに TC.EXE を実行すると IDE は 3MB のメモ リを確保します。MAXMEM の後に必要なキロバイト数を指定してください。IDE の場合は,2500 以上の値を指定してください。 コンパイラ ---------- ・ANSI C++ の例外処理,C における構造化例外処理,C と C++ の例外処理の 混在をサポートしています。 ・大規模な最適化と高速なコンパイル時間。 ・ANSI C++ の最新機能をサポート: - new [] 演算子と delete [] 演算子のサポート - 文字列クラス - 実行時型情報(RTTI) - 新しいスタイルのキャスト dynamic_cast, static_cast, const_cast, reinterpret_cast - 3つの文字型 char, signed char, unsigned char リンカ ------ ・リンカのデバッグ情報の許容量が旧バージョンより増大。 統合開発環境(IDE) ----------------- ・プロテクトモードで動作し,大規模なアプリケーションが作成可能。 ・マクロ(TEML)により自由にカスタマイズ可能なエディタを搭載。 ・ソースコードレベルのデバッグが可能な内蔵デバッガ。 ・構文カラーハイライト: IDE のエディタで,C/C++ の構文に従ったカラーハイライト表示が行なわれま す。Options|Environment|Colors|Edit Window の選択項目をご覧ください。 このオプションは,Options|Environment|Editor|Syntax Highlighting で 使用するかどうかを指定できます。 ・386 コード生成: 生成コードのオプションに 386 命令の出力が追加されました。 コマンドラインでは -3,IDE では Options|Compiler|Advanced Code Generation|80386 を使います。生成された 386 コードのデバッグもサポー トしています。 ・Register ウィンドウは 32ビットレジスタをサポート。 ・Borland PowerPack for DOS16 (別売) との組み合せにより,16 ビットプロテク トモード上で動作するアプリケーションの開発が可能となります。 Turbo Debugger -------------- ・C/C++ の例外処理をサポート ・セッションの状態を保存 ・大規模アプリケーションをサポートするためにラージモデルで構築 ・2台のマシンを使ったリモートデバッグ機能 ドキュメント ------------ この製品には,理解を助けたり,Turbo C++ 4.0 の新しい機能を使うために,印刷 されたマニュアルとオンラインヘルプが含まれています。 C++ 言語とプログラミングの情報: プログラマーズガイド ライブラリリファレンス (別売) DOS リファレンス (別売) オンラインヘルプ MAKE および TLINK: ユーザーズガイド オンラインヘルプ キーボードの割り当てと TEMC に関する情報: オンラインテキストファイル UTILS.TXT オンラインヘルプ IDE, 組み込みデバッガ,コンパイルオプションについての情報: ユーザーズガイド オンラインヘルプ Turbo Debugger の使い方について: オンラインテキストファイル TD_RDME.TXT と TD_HELP.TXT オンラインヘルプ オンラインヘルプを使うときは,パスが Turbo C++ 4.0 の BIN サブディレクト リに設定されているかどうか確認してください。 4. 重要な注意事項 ----------------- [ 再配布可能なファイル ] このパッケージに含まれている Borland のライセンス規定に明示された条件に 従って,以下のファイルを作成したプログラムと共に再配布することができます。 ATT.BGI BGIOBJ.EXE BOLD.CHR CGA.BGI DOSVGA.BGI EGAVGA.BGI EURO.CHR GOTH.CHR HERC.BGI IBM8514.BGI LCOM.CHR LITT.CHR LOCALE.BLL PC3270.BGI PC98.BGI PC98HI.BGI SANS.CHR SCRI.CHR SIMP.CHR TRIP.CHR TSCR.CHR [ マウスドライバ ] ・DOS/V の IDE/TD でマウスを使用するには,マウスドライバが必要です。DOS に 付属のマウスドライバを使用してください。なお,PC-9800 シリーズで使 用する場合はマウスドライバは必要ありません。 [ DOS/V の画面モードと IAS ] ・起動時の画面モードが英語モードの場合 IDE その他のツールの動作の保証は いたしかねます。また,マニュアルおよびオンラインドキュメントの中に英語 モード時の動作についての記述がありますが,英語モード時の動作の保証をす るわけではありません。 ・V-TEXT ドライバを組み込んで使用されている場合,IDE その他のツールの動 作の保証はいたしかねます。 ・DOS プログラムは IAS 準拠($IAS.SYS を組み込んで使用するもの)のかな漢字 変換(FEP) をサポートしています。 ・TC,TD の File|DOS shell 実行時に CHEV コマンドで,起動時と異なる環境 に変更したまま IDE に戻った場合,正常動作できなくなります。IDE に戻る 時は必ずもとの環境に戻してください。 ・dosviasshifton() 関数などで DOS/V IAS のシフト表示オン/オフを行なうよ うなプログラムを IDE や TD などでトレースした場合,ステータスラインの 表示が乱れることがあります。この場合,IAS シフト表示オンの状態で IDE 等を起動するようにしてください。 4.1 IDE ------- ・以下の機能を選択してもデフォルトでは動作しません: Help|Active file の Turbo Vision API と DPMI Options|Application|DPMI App Options|Linker|DPMI settings Options|Linker|Libraries|Turbo Vision (システムメニュー)|Import Librarian ...など これらは Borland PowerPack for DOS16(別売) を使用時のみ有効となります。 Borland PowerPack for DOS16 がインストールされていない環境では,これら の項目を設定しても何の意味も持ちません。Borland PowerPack for DOS16 に ついての詳細は弊社カスタマーサポートセンターまでお問い合わせください。 ・トランスファ項目のコマンドラインで指定するトランスファマクロの $MEM マクロは,Borland C++ 3.1 との互換性のために残されています。Turbo C++ 4.0 では常に使用可能な全メモリをアプリケーションに与えるため,意味を もちません。 ・旧バージョンのコンフィギュレーションファイル (*.TC, *.CFG など) が残っ ていた場合,IDE が正常に動作しません。古いコンフィギュレーションファイ ルは必ず削除してください。 ・IDE のメイクの判断は,タイムスタンプの日付と時刻を元にしています。した がって,コンパイルオプションやメモリモデルを変更した場合などは,再構築 (Compile|Build all) する必要があります。 ・エディタの構文カラーハイライト機能はファイルの拡張子が以下のものに対し てのみ機能します。 .CPP .C .H これによって,通常のDOCファイルや .MAP ファイルを開いたときにカラーハ イライト機能により画面が派手な色になることが回避されます。 ・DOS/V: 日本語モードでは Options|Environment|Preferences|Screen Size の 43/50 lines モードを指定しても,画面サイズは変わりません。再起動す ると 25 lines モードに戻ります。 ・DOS/V: Options/Environment/Startup/System mode について このオプションでモードを JP もしくは US に指定すると,起動時のモードに は関係無く,指定したモードに強制的に移行し,IDE が動作します。ただし, 起動時のモードが英語モードかつ System mode が JP に指定されていた場合 は,起動時に「ERROR: Can't set Japanese screen mode.」と表示され,英語 モード画面で起動します。 ・DOS/V: グラフィックモードで描画するプログラムを実行した場合,IDE に戻っ た時点で描画内容は消去されます。ユーザ画面(Alt-F5) および Output Window はグラフィックス描画時は機能しません。このようなプログラムのデバッグに は Turbo Debugger を利用してください。-vg オプションを指定することで, グラフィックスを扱うプログラムのユーザ画面を正しく再現することができま す。 ・File|Print を実行すると,アクティブウィンドウの内容は DOS プリンタハ ンドラに送られますが,プリンタデバイスが組み込まれていない DOS の場合 は,あらかじめプリンタデバイスを組み込んでおく必要があります。 ・行番号情報をマップファイルに出力するには Options|Compiler|Advanced code generation|Line numbers debug info Options|Linker|Settings|Include source line numbers の両方のチェックボックスをオンにしたうえで, Options|Linker|settings|Map file で任意の出力を選択してください。 ・DOS の IDE では,コンパイル中はマウスカーソルの表示をオフにして,コン パイル時間の短縮を図っています。 ・IDE のマウスカーソルは,キーボード操作によって消去されます。マウスを移 動すれば再表示されます。 ・ディレクトリにプロジェクトファイルが1つだけ存在する場合に,引数なしで TC を起動するとそのプロジェクトファイルをオープンします。この動作を回 避するには,ダミーのプロジェクトファイルをそのディレクトリに作成してお くか,そのプロジェクトファイルを削除してください。 ・統合環境,コマンドラインコンパイラ,各種のツールは日本語のファイル名に 対応していません。 ・統合環境のエディタは,2バイト系半角文字はサポートしていません。 [ IDE の組み込みデバッガについて ] ・throw 呼び出しをステップ実行するかトレース実行するとき,アプリケーショ ンは適切な catch 関数で停止する代わりにブレークポイントにたどり着くか, プログラムが終了するまで実行します。catch 関数をデバッグしたい場合は, そこにブレークポイントを設定してください。 ・カーソル位置まで実行(F4) は,実行したいソース行と実行位置が指している 行が同じ時は何もしません。このため,繰返し文で実行を繰り返すために F4 を使っても,何も起きません。この代わりに,ループの中の行にブレークポイ ントを設定し,ループの中を繰り返すために CTRL-F9 (Run|Run)を使ってく ださい。一回,ループを終了するとブレークポイントは解除できます。 ・組み込みデバッガは,標準出力へのエスケープシーケンスが分断された場合な どデバッグが正しく行なえない場合があります。このときは,スタンドアロン の Turbo Debugger を使ってください。 ・マウスを使うアプリケーションをデバッグするときは,最良の結果を得るため に Options|Debugger|Display swapping を Always に設定してください。 ・IDE でデバッグしているとき(トレース・ステップ実行中)は File|Dos shell およびトランスファ機能は使用できません。 [ NEC のマウスドライバについて ] ・NEC の MS-DOS 付属のマイクロソフトマウスドライバ(MOUSE.COM)に不具合が あり,組み込んでいる場合は以下の問題が発生します。 - 拡張アトリビュートに対応していないため,IDE を拡張アトリビュートモー ドで使用した場合,場所によってマウスカーソルが背景色と同色となり見え なくなります。 - ハイレゾリューションモードでは 25 行目までしかマウスカーソルが移動で きません。 これらの問題を回避するには, MOUSE.COM は使用せずに,IDE の内蔵マウスド ライバを使用してください。 4.2 Turbo Debugger ------------------ ・PC-9800: Turbo Debugger で VRAM に直接書き込みを行なうようなプログラム を実行した場合,ユーザ画面には書き込んだキャラクタは表示されません。 ・DOS/V: IBM PC-DOS 6.x/V の SETUPV で,IAS のシフト状態を 26 行目に表示 する設定にしておき,シフト状態を表示したまま Turbo Debugger を起動する と,デバッガ終了後に 24 行目までしか使えなくなります。 [ Turbo Debugger とコンフィギュレーションファイル ] ・新しい Turbo Debugger を使って,コンフィギュレーションファイル (TDCONFIG.TD)を生成すると,以前のバージョンの Turbo Debugger を正しく 起動できなくなります。以前のバージョンの Turbo Debugger を使う場合は, 異なるバージョンのコンフィグレーションファイルを削除しておいてください。 ・使用可能メモリなど環境が変わった場合は,プログラムに対するセッションス テートファイル(.TRx)を削除してください。セッションステートファイルには, ブレークポイントなどの絶対アドレス情報が含まれているため,ロードアドレ スが変更されると正しい意味を持たなくなります。 4.3 コンパイラ -------------- ・コンパイラはデフォルトで 80286 の命令セットを使ったコードを生成します。 作成されたプログラムが 8086/80186 マシンで実行される可能性のある場合は, コンパイラが使用する命令セットを変更してください( Options|Compiler| Advanced code generation の Instruction Set )。 ・Turbo C++ 4.0 では例外処理のサポートのため,デフォルトでサポートライブ ラリがリンクされます。その結果,使用可能 DATA,BSS セグメント量は Borland C++ 3.1/Turbo C++ 1.01 よりも少なくなっています。このため,古 いバージョンのコンパイラでは正常に動作していたプログラムでも Turbo C++ 4.0 では実行時に "Abnormal program termination" と表示されることがあり ます。この場合は,できるだけ static 変数などを減らして DATA,BSS セグ メントの消費量を抑えるか,または NOEHxx.LIB をリンクするようにしてくだ さい。NOEHxx ライブラリについての説明は,このファイルの 4.3 「ライブラ リ」 の項目に記載されています。 ・インラインアセンブリと割り込み インラインアセンブリコードが割り込み呼び出しを含む場合,コンパイラは呼 び出しによって変更されるどのレジスタも保存しません。必要ならば,割り込 み呼び出しを使うインラインアセンブリコードの中に,レジスタの保存と復帰 のためのコードを記述しなければなりません。 4.4 MAKE -------- ・TLINK.EXE や他のツールが,makefile から実行されたときに“メモリ不足” エラーを発生するときは,MAKE.EXE のかわりに MAKER.EXE を使ってください。 この場合の MAKER.EXE には,-S オプションまたは,.SWAP ディレクティブを 使用すると効果的です。 ・MAKE は,Borland C++ 3.1 以前のようにファイルリストマクロの2つの組み 合わせの間にスペースを挿入しません。以下に示した makefile の例は,これ を示しています。この makefile のあるディレクトリで MAKE を実行すると, 次のように表示されます。 ALLOBJS1 = one onetwo two ALLOBJS2 = one one two two makefile: OBJS1 = \ one \ one OBJS2 = \ two \ two ALLOBJS1 = $(OBJS1)$(OBJS2) ALLOBJS2 = $(OBJS1) $(OBJS2) ..: @@echo ALLOBJS1 = $(ALLOBJS1) @@echo ALLOBJS2 = $(ALLOBJS2) 4.5 サンプルプログラム ---------------------- ・.PRJ ファイルのあるサンプルプログラムをコンパイルする場合,Turbo C++ をインストールするときにデフォルトのディレクトリ構成を使わなかったとき は,.PRJ ファイルを実際のディレクトリ構成に合わせて変更しなければなり ません。統合環境の中から Options|Directory を選択して,ディレクトリを 設定してください。 4.6 ライブラリ -------------- ・TINY モデルでは,使用可能なメモリの制限によりグラフィックス関数をサポー トしていません。 ・DOS/V: コンソール入出力ライブラリは,画面モード 73h (C8025E) の拡張属 性(属性バイト1,2)をサポートしていません。各関数はモード 03h と同じ作 用をします。 ・DOS/V: gettext/puttext 関数は疑似ビデオバッファが存在しないモード(グラ フィックスモード)ではエラーを返します。 [ BIOS 関数を使用するとき ] Turbo C++ 4.0 では,ひとつのライブラリが PC-9800 と DOS/V に対応していま すが,関数名は同じものが使われます。どちらの機種で実行するのかをコンパイ ラに知らせるために, BIOS 関数を使う場合は #include よりも前に 以下のように定義する必要があります。 PC-9800 : #define _BIOS_NECPC DOS/V : #define _BIOS_IBMPC [ 機種別のオーバーレイマネージャ ] 標準で提供されるオーバーレイマネージャ (VROOMM) はプロテクトモード用のメ モリを使う場合は,XMS ドライバを必要とします。しかし,PC-9800 シリーズの みあるいは DOS/V マシンでのみ動作させることがわかっている場合は,OVLYNEC. LIB あるいは OVLYIBM.LIB を使用すれば XMS ドライバがなくてもプロテクトモー ド用のメモリをスワップ領域として使用することができます。それぞれのファイ ルはライブラリディレクトリ(\LIB)にインストールされています。 OVERLAY.LIB 非機種依存版(EMS/XMS のみ対応) OVLYIBM.LIB IBM-PC BIOS 拡張メモリ版(EMS/XMS/IBMBIOS 対応) OVLYNEC.LIB NEC PC-9800 シリーズ BIOS 拡張メモリ版(EMS/XMS/NECBIOS 対応) [ 機種別のコンソールIOライブラリ ] コンソールIO関数を使用した場合,通常では PC-9800 と DOS/V の両方のライブ ラリがリンクされます。これは,同じ .EXE ファイルで両方の環境で動作すると いう利点をもつ反面,生成される実行形式ファイルのサイズが若干大きくなって しまうという欠点があります。これを避けるには CONIONEC.LIB か CONIOIBM.LIB をリンクするようにしてください。PC-9800,DOS/V いずれか専用のライブラリの みが組み込まれます。CONIOxxx.LIB は,標準ランタイムライブラリよりも前にリ ンクしなければなりません。 例) tcc -c hello.cpp tlink c0s.obj hello.obj, hello.exe,, conionec.lib cs.lib [ STARTUP ルーチン(C?0.OBJ,C0F?.OBJ0)の再構築 ] TC4\LIB\STARTUP ディレクトリにはスタートアップルーチンを再構築するための ファイルが収められています。BUILD_C0.BAT をパラメータなしで実行すると使 用方法が表示されます。なお,再構築には Borland Turbo Assembler 4.0J (別売) が必要です。 [ オープン可能なファイル数の変更 ] ランタイムライブラリを1ヶ所変更することにより,DOS プログラムで同時に オープンできるファイルの数を増やすことができます。 まず,INCLUDE ディレクトリの _NFILE.H の _NFILE_ の #define を次のよう に変更します。 #define _NFILE_ n n は,オープンしたいファイルの数です。CONFIG.SYS ファイルの FILES の指 定は,この数に等しいか大きくなければなりません。 次に,LIB\16BIT ディレクトリで,FILES.C と FILES2.C をコンパイルします。 TCC -c -m files.c files2.c は,使用するメモリモデルです。 これでできたオブジェクトを,ユーザプログラムに直接リンクします。たとえば 次のようにします。 TCC myfile.c files.obj files2.obj この変更をすべてのモジュールに適用する場合は,上の操作で作成した FILES. OBJ と FILES2.OBJ を使用するライブラリに追加します。LIB ディレクトリから 次のコマンドを実行します。 TLIB c +-files.obj +-files2.obj は,FILES.C と FILES2.C をコンパイルしたときに使ったメモリモデル と同じものを指定します。 [ 浮動小数点フォーマット ] 浮動小数点フォーマットは,scanf や atof などのあるランタイムライブラリ関 数で浮動小数点値を操作するときに使われる情報の集まりです。 このセクションでは,Floating point formats not linked: abnormal program termination というエラーが発生する理由と,解決方法を説明します。 まず,現在この問題を修正する計画はありません。なぜなら,これは不具合では ないためです。これは,浮動小数点フォーマット(約 1K のオーバーヘッド)を必 要のないときにリンクするのを避けるためです。この機能のトレードオフとして, プログラマーは限定された特定の形式で浮動小数点を使うプログラムにおいては, 必要に応じて明示的に浮動小数点フォーマットをリンクしなければなりません。 このエラーが発生する理由はいくつかあるので,以下の潜在的な原因のリストを 調べて,問題を取り除く方法を見つけてください。ここにリストされた内容は, もっとも頻度の高い理由から並べて書かれています。 1. 原因: 浮動小数演算を使わない設定にしている。Option|Compiler| Advanced code generation... の Floating Point で None を選択 している。 対策: Floating Point の設定を None 以外にする。 2. 原因: コンパイラが過度に最適化しているか,限定的で特定の形式で浮動 小数値を操作するプログラムであり,浮動小数点フォーマットが必 要になっている。あるあいまいな条件において,コンパイラは scanf での浮動小数値を無視します(たとえば,浮動小数値を構造体の配列 要素に読み込むような場合など)。 対策: 次の行をソースプログラムに記述してください。 extern _floatconvert; #pragma extref _floatconvert 3. 原因: scanf に指定する変数式でアドレス演算子 & を忘れている。たとえ ば,float foo; scanf("%f", foo); 対策: & 演算子を必要な位置に正しく記述する。たとえば,上の例は次の ように修正します。 float foo; scanf("%f", &foo); [ NOEHxx ライブラリ ] 目的: NOEHxx ライブラリは,ランタイムライブラリから例外処理を必要としないユー ザに対して,例外処理コードのオーバーヘッドを取り除きます。 使い方: NOEHxx ライブラリは,標準ランタイムライブラリよりも前にリンクしなけれ ばなりません。コマンドラインツールでは,TCC のコマンドラインか TLINK に渡すライブラリの先頭に適当な NOEHxx ライブラリを指定することで実現で きます。 IDE では,Project|Add item を使ってプロジェクトに適切なライブラリを追 加してください。NOEHxx ライブラリが,他の標準ライブラリよりも前にある ことを確認してください。 ライブラリは何をするか: NOEHxx ライブラリは,例外処理に関するコンパイラのヘルパ関数を適当な値 を返すダミー関数に置き換えます。これらはまた,operator new の例外前の 動作をメモリ不足をあらわす NULL を返すものに戻します。setjmp/longjmp は,例外を発生しないバージョンに置き換えられます。 制約: Turbo C++ 4.0 のいくつかの機能は,例外処理を必要としています。これには, 文字列クラス,BIDS コンテナクラス,RTTI が含まれます。 [ BGI - グラフィックスライブラリ ] BGI(Borland Graphics Interface) はグラフィックスライブラリ関数を実行する ために実行環境に応じて必要な実行時ライブラリファイル(*.BGI)を自動的に呼 び出します。以下に各 BGI ファイルと対応する環境を示します。 ファイル名 対応環境 --------------------------------------------------------- PC98.BGI PC-9800 ノーマルモード PC98HI.BGI PC-9800 ハイレゾモード DOSVGA.BGI DOS/V VGA ATT.BGI DOS/V 英語モード (ATT400 video card 用) CGA.BGI DOS/V 英語モード (CGA 用) EGAVGA.BGI DOS/V 英語モード (EGA, VGA 用) HERC.BGI DOS/V 英語モード (Hercules video card 用) IBM8514.BGI DOS/V 英語モード (IBM 8514 video card 用) PC3270.BGI DOS/V 英語モード (PC3270 video card 用) ※ DOS/V 日本語モード時に各種グラフィックスアダプタ専用高解像度モードを 使用するためのドライバは用意されていません。 ・DOS/V: DOSVGA.BGI のデフォルトの画面モードは DOSVGA16LO (=72H) です。 ・DOS/V: restorecrtmode,closegraph 関数を実行すると,(もし組み込まれてい れば)IAS の表示状態,カーソルの状態,画面モードは直前のテキストモード時 の設定となります。したがって,例えば restorecrtmode でテキストモードに移 行した際に,IAS の状態を変更した場合は,closegraph を実行すると,initgraph を呼び出す直前のモードではなく,setgraphmode を呼び出す直前のモードに戻 ります。 4.7 その他 ---------- ・EPSON の一部の機種 (PC-386 など) では,拡張メモリの容量を表わす 0000:0401 の1バイトの内容が正しく設定されないことがあります。この場合, プロテクトメモリを使うプログラムが正常に動作しません。この場合は,EXTMEM .COM ユーティリティを使ってワークエリアを設定しなければなりません (単 にこのユーティリティを実行するだけです)。こうした機種では,AUTOEXEC.BAT などに EXTMEM を記述しておく方がよいでしょう。これは,VROOMM のスワッ プ領域としてプロテクトメモリを指定し,OVLYNEC.LIB を使用した場合も同様 です。ただし,他にプロテクトモード用のメモリを使うようなアプリケーショ ンが存在する場合は,EXTMEM を使用してはいけません。EXTMEM ユーティリテ ィはマスターディスクの1枚目の EXTMEM.PAK に収められています。 ・DPMI ホストのアプリケーション,プロテクトメモリを使うプログラム,また は浮動小数点演算例外を扱うユーザプログラムを EPSON のマシンで動かすと きは,ディップスイッチ 3-8 を ON にしてアドバンストモードにしてくださ い。このスイッチが OFF (ノーマルモード) になっている場合は,正常に動作 しません。 ・THELP.COM で,ヘルプ画面の内容をエディタにペーストする場合,ウィンドウ の 中で使われている特殊文字 (矢印記号など) は,正常にペーストできない ことがあります。 ・マニュアルのサンプルプログラムとヘルプで表示されるプログラムに差異があ る場合は,ヘルプで表示されるものの方が新しいとお考えください。 [ 旧バージョンからの移行 ] ・Turbo Vision 1.0 などの古いクラスライブラリを使いたいときは,Turbo C++ 4.0 で再コンパイルする必要があります。このような場合には CLASSLIB の ソースコードとともにそれらを残しておいてください。 ・このバージョンで作成される実行ファイルに,Borland C++ 3.1/Turbo C++ 1.01 以前で作成されたオブジェクトファイルやライブラリを使う場合には特に注意 してください。古いオブジェクトやライブラリをリンクする場合には,潜在的 な問題がいくつかあります。まず,Turbo C++ 4.0 より前のスタックフレーム を例外にしたがって後戻りしようとすると,例外処理は動作しません(デスト ラクタは呼ばれません)。詳しくは,『ユーザーズガイド』の「例外処理・実行 時型情報オプション」の説明をご覧ください。 ・その他,旧バージョンからの移行については,Paradox Engine に関するもの も含めて DOC\COMPAT.TXT を参照してください。 クラスライブラリの変更点 ------------------------ Turbo C++ 4.0 では,C++ のテンプレートを使って実現されたクラスライブラリ のバージョンだけがサポートされます。 “オブジェクトベース”のクラスライブラリのインクルードファイルは,\TC4\ INCLUDE\CLASSLIB\OBSOLETE サブディレクトリの中に提供されます。オブジェク トベースのライブラリファイルは提供されませんが,\TC4\SOURCE\CLASSLIB メ イクファイルを使って構築することはできます(コメントを参照してください)。 TSArray と TSArrayIterator クラスがクラスライブラリに追加されました。こ れらは,TSArrayAsVector と TSArrayAsVectorIterator のエリアスです。 ディクショナリを除く直接(ポインタを使わない)コンテナのための Flush と Delete メンバー関数は,もはや delete 引数をとりません(この引数は,直接コ ンテナがコンテナ要素のコピーを持っているために無視されます)。 例: TMArrayAsVector arr(10); arr.Flush(); // 正しい arr.Flush(1); // 誤り - 文法エラーになります arr.Detach(index); // 正しい arr.Detach(index,1); // 誤り - 文法エラーになります TMIArrayAsVector arr1(10); arr1.Flush(); // 正しい arr1.Flush(1); // 正しい arr1.Detach(index); // 正しい arr1.Detach(index,1); // 正しい バッグとセットコンテナのメンバー関数 FindMember は,Find という名前にな りました。引数は同じです。 アソシエイションコンテナに,DeleteElements というメンバー関数が用意され ました: void DeleteElements() ディクショナリは,削除すべきオブジェクトを決定するアソシエイションを含み ます。そして,その場合は持っているアソシエイションのそれぞれの DeleteElements を呼び出します。TMDictionaryAsHashTable テンプレート(およ び,ここから派生したすべてのテンプレート)の Detach と Flush メンバー関数 は,以下のように変更されました: int Detach( const T &t, DeleteType dt = DefDelete ) void Flush( DeleteType dt = DefDelete ) ディクショナリのテンプレートの直接バージョンに対するこれらの変更は,間接 コンテナがオブジェクトオーナーシップをどのように扱うかに似せることができ ます。例を示します: TDIAssociation assoc( 3, new int(4) ); // アソシエイションの作成 TDictionaryAsHashTable dict; // ディクショナリの作成 dict.Add( assoc ); // アソシエイションをディクショナリにコピー dict.OwnsElements(); //ディクショナリにオブジェクトを削除すべきと指示 dict.Flush(); //最初の行で new 生成された int を削除 すべてのリストと双方向リストコンテナは,DetachAtHead メンバー関数を持ち ます。 この関数は,一致するかどうかを検索せずにリストの先頭から項目を取 り除きます。構文は, int DetachAtHead() // 直接リスト int DetachAtHead( int del = 0 ) 間接リスト 例: TMListImplist; //MyObject を持つリストの作成 list.Add(MyObject()); //MyObject の生成とリストへの追加 list.Add(MyObject()); //MyObject の生成とリストへの追加 list.DetachAtHead(); //リストの先頭から MyObject を削除 オブジェクトストリームの変更 ---------------------------- 以前,Turbo Vision で使われていたオブジェクトストリームの実装がクラスラ イブラリに移されました。ここで,ストリームのメカニズムにいくつかの変更が 施されました。しかし,これらは既存のクラスライブラリのコードに対しては透 過です。ストリームの詳細については,『プログラマーズガイド』をご覧くださ い。 ヘッダファイル OBJSTRM.H は,ストリームオブジェクトを簡単に作成するため のいくつかのマクロを定義しています。詳細は,ヘッダファイルをご覧ください。 ストリームオブジェクトには2つの種類があります: - 常駐型オブジェクト。ストリーム出力はできるが,入力して再構築される ことはありません。 - ダイナミックオブジェクト。ストリーム入力して再構築されます。 常駐型オブジェクトは静的オブジェクトを含み,メインウィンドウのようにアプ リケーションを実行するときには存在します。これらのオブジェクトは,ポイン タではなく参照を使ってストリーム出力しなければなりません。 一方,ダイナミックオブジェクトはポインタを使ってストリーム出力しなければ なりません。これによって,ストリーム入力から再構築することができます。 常駐型オブジェクトは,常駐型オブジェクトへのポインタをストリーム出力する すべてのオブジェクトより前にストリーム出力しなければなりません。そうしな いと,ストリーム入力によって重複するオブジェクトが構築されてしまいます。 ストリームオブジェクトが入力されるとき,Streamer::Read はデータフィールド がすべて初期化されていることを保証しなければなりません。これは,ストリー ムコンストラクタは,データフィールドを初期化しないためです。ストリーム入 力されなかったどのデータメンバーも意味を持つ値に設定しなければなりません。 基本クラスのデータや現在のオブジェクトへ戻すポインタを持つオブジェクトへ のポインタがストリーム入力される前に,メンバーを初期化しなければならない ことに注意してください。Streamer::Read では仮想関数が使えます。 C/C++ 言語の変更点 ------------------ ANSI C++ 委員会に提案された最新の変更によって,コンパイラの評価で多くの 変更点があります。この変更点には,3つの char 型の区別,テンプレートの拡 張,戻り型の違う仮想関数のサポートをはじめ,以下の内容が拡張されています。 これらの変更に関する完全な詳細やプログラムにどのような影響があるかという ことは,『プログラマーズガイド』や『ライブラリリファレンス』(別売)をご覧 ください。 wchar_t は,C++ プログラムにおける基本的な(組み込み済みの)型です。C プロ グラムでは,stddef.h 中で typedef を使って定義されています。オンラインヘ ルプを参照してください。 列挙型の演算子オーバーロードがサポートされています。 ランタイムライブラリは,ANSI C++ の文字列(string)クラスをサポートしてい ます。すでに string という名前のクラスを使っている場合は,Turbo C++ 4.0 ではリネームしなければなりません。 さらに,ANSI C++ 委員会の仕様として new および new[] 演算子が例外(xalloc) を発生します。旧バージョンの動作に合わせたい場合は,set_new_handler(0) を使います。(注意: ただし,set_new_handler(0) は ObjectWindows や string クラスを使っているときは,動作しません。) 配列は,演算子 new[]() を使って確保され,delete[]() を使って削除されます。 『プログラマーズガイド』の第3章に例が掲載されています。 Turbo C++ 4.0 は,ANSI C++ の実行時型情報(RTTI) を実現しています。クラス Type_info の詳細のために,『ライブラリリファレンス』(別売)の "C++ ランタ イムサポート" をご覧ください。RTTI と演算子 typeid は,『プログラマーズ ガイド』の3章に記載されています。 Turbo C++ 4.0 は,C++ と C のもとですべての例外処理の実装を提供していま す。C の例外は,C または C++ のコードで扱えます。C++ の例外は,C++ のコー ドでのみ扱えます。C++ の例外は,Library Reference の "C++ ランタイムサ ポート"に書かれています。例外処理の使い方については,『プログラマーズガ イド』の第4章をご覧ください。 Turbo C++ 4.0 は,ANSI C++ の新しいスタイルのキャストをサポートしていま す。実装と使用例については,『プログラマーズガイド』の第3章をご覧くださ い。 Borland C++ 3.1 のプログラムを Turbo C++ 4.0 用に変換する --------------------------------------------------------- Borland C++ 3.1 のコードを Turbo C++ 4.0 でコンパイルし正しく実行させる ためには,Turbo C++ 4.0 のインクルードファイルを使っていてエラーが発生し た場合は,3つの char 型を反映させるようにコードを変更します。そうでなけ れば,Borland C++ 3.1 のインクルードファイルを使って -K2 オプションを使 うことができます。このオプションは,2つの char 型のみを提供します(-K2 オプションは,旧バージョンとの互換性のために用意されています)。また,ク ラスの配列のためには new[]() や delete[]() 構文を使ってください。 5. マニュアルの訂正・追加事項 ------------------------------ ANSI C++ が printf と cout を共存できるように決定したため,stdiostream は冗 長なものとなりました。 ライブラリリファレンスの string メンバー関数 find_first_of と find_last_of の定義は正しくありません。見つかった文字の位置が戻り値になります。引数 pos は検索を始める文字列の位置を指定します。 ライブラリリファレンスの string メンバー関数 compare の2番目の定義は,正し くありません。正しい関数の構文は,次のとおりです。 int _RTLENTRY compare(const string _FAR &s, size_t orig, size_t n = NPOS); 2番目の引数は,比較を始める位置を指定し,3番目の引数は比較する文字数を指 定します。 string クラスによる TRegexp クラスの使い方の説明については,オンラインヘル プをご覧ください。 *********************************************************** 以下は Turbo C++ ユーザーズガイド 付録C に記載されていないエラーメッセー ジの説明です。 1) コンパイラエラー DPMI programs must use the large memory model ----------------------------------------------- DPMI プログラムはラージメモリモデルを使用しなければならない DPMI プログラムは,ラージメモリモデル以外は使用できません。 'identifier' requires run-time initialization/finalization ------------------------------------------------------------ identifier には実行時の初期化/終了処理が必要 このエラーは,テンプレートクラスの静的データメンバーとして宣言されている グローバル変数が,非定数初期値で初期化されている場合に発生します。 また,テンプレートクラスの静的データメンバーとして宣言されているグローバル 変数の型が,コンストラクタまたはデストラクタを伴うクラスである場合にも 発生します。 Recursive template function: 'class' instantiated 'class' ----------------------------------------------------------- テンプレート関数の再帰: class が class をインスタンス化している たとえば次のような,テンプレート関数の再帰インスタンスが見つかりました。 template void f(t x) { f((T*)0) // 再帰するテンプレート関数 !! } void main() { f(0); } コンパイラは,再帰的なインスタンス化の各ネストに対してエラーメッセージを 出します。通常は,そこで再帰が発生しているのは明らかです。テンプレートの 再帰を修正するには,依存関係を変更するか,たとえば次のような,再帰を終了 させる特殊バージョンを記述する必要があります。 void f(int **) { } 2) リンカエラー New Executable header overflowed 64K -------------------------------------- 実行形式ファイルヘッダーが 64K を超えている ヘッダーファイルが 64K を超えています。このメッセージが出た場合は, 常駐名テーブルがヘッダーのサイズを増大させたために,この制限を超えて いないか調べてください。 32-bit processing not supported in overlays --------------------------------------------- オーバーレイでは 32 ビット処理はサポートされていない リンカコマンドラインで,/o(オーバーレイ)と /3(32 ビット処理)の オプションの無効な組み合わせが指定されました。 Relocation offset overflow ---------------------------- リロケーションオフセットのオーバーフロー リロケーション(セグメントフィックスアップ)オフセットが DOS の制限値 である 64K を超えました。 このエラーは 32 ビットのオブジェクトモジュール だけに発生します。 Relocation table overflow --------------------------- リロケーションテーブルのオーバーフロー DOS の標準リロケーションテーブルよりも多くの基本フィックスアップが,リンク されるファイルに含まれています (基本フィックスアップは,ほとんど far 関数 によって作成されます)。 このエラーは 32 ビットのオブジェクトモジュールだけに発生します。 Segment alignment factor too small ------------------------------------ セグメント境界設定係数が小さすぎる Segment Alignment オプション,あるいは /A オプションで設定されるセグメント 境界設定係数が小さすぎるため,.EXE ファイルのセグメントのファイルアドレス を表現することができません。 DPMI アプリケーションをリンクする場合にだけ発生するエラーです。 Segment too large for segment table ------------------------------------- セグメントテーブルにはセグメントが大きすぎる セグメントが 64K を超えており,実行形式ファイルで表示できないことを意味 します。 DPMI アプリケーションで使用する実行形式ファイルの書式では,64K を超える セグメントがサポートされていないため,DPMI アプリケーションをリンクする 場合にだけこのエラーが発生することがあります。 Invalid entry point offset ---------------------------- 不当なエントリポイントオフセット このエラーは,32 ビットレコードをもつモジュールをリンクする場合にだけ 発生します。 プログラムの開始エントリポイントオフセットが DOS の制限値 64K を超えて いることを意味します。 Segment 'segment' relocation data exceeds 64K ----------------------------------------------- セグメント segment のリローケーションデータが 64K を超えている 16 ビット DPMI プログラムでは,セグメントごとのリロケーションデータは 64K までに制限されます。この制限を超えることはあまりありませんが,特定の モジュールで,コードセグメントに非常に大きなジャンプテーブルや仮想テーブル がある場合などには,制限を超えることもあります。 このエラーが出た場合は,該当するコードモジュールを2つに分割するなどして, セグメントごとのリローケーションデータの総量が 64K を超えないようにして ください。 Unknown Optimization ---------------------- 認識できない最適化 未定義の最適化オプションが指定されています。 3) リンカ警告 Overlays ignored in new executable image ------------------------------------------ 新規実行形式イメージでオーバーレイが無視されている /o オプションをオンにして DPMI プログラムをリンクしようとすると このエラーが発生します。 DPMI の実行形式ファイルはオーバーレイできないので,破棄可能なコード セグメントの使用に切り換える必要があります。 Stack size is less than 1400h. It has been reset to 1400h ----------------------------------------------------------- スタックサイズが 1400h 未満なので 1400h に設定し直した Windows 3.1 では,アプリケーションのスタックサイズとして 1400h 以上 必要です。自動データセグメント(ADS)が約 64K のときにスタックが 1400h 未満であると,ADS はリンク時ではなくロード時にオーバーフローします。 DPMI アプリケーションではこの対策として TLINK でスタックサイズを 1400h 以上にします。 /*************************** README 終わり ***********************************/