Turbo - みる会図書館


検索対象: 月刊 C MAGAZINE 1991年2月号
48件見つかりました。

1. 月刊 C MAGAZINE 1991年2月号

ーボーランドジャパン lnformation from Compiler Makers Q c 十のほかに c 言語も使いた いのですが , Turbo C と Turbo C 十十の両方を購入しなければなら ないのですか ? Turbo C 十十は , C 言語として使う場合は Tur C 2.0 と同じなのですか ? A Turbo C 十十には , C 十十コン パイラとしての機能と C コンパイラ としての機能の両方が含まれてい ますのて、 , Turbo C を購入する必 要はありません。 TurboC は , フ ロッヒ。ーベースてプログラミング する場合に適しています。 TurboC 十十は , C コンパイラと しての機能も拡張されています。 # p 「 agma 指令て、は , コンパイルオ プションをソースコード中に記述 することがて、きるようになりまし た。このため , 関数ごとにスタッ クチェックの有無を指定したり , スタックフレームの生成を制御す ることがて、きます。また , 起動時 関数や終了時関数を指定すること がて、きるようにもなりました。 言語仕様としては , seg 修飾子 によるセグメントボインタをはじ め loadds, saveregs などの便利 な修飾子が追加されています。 の他 , -S オプションによるアセン プリコード出力は , C のソースコー ドがコメントとして含まれるよう になりました。 TurbO C 十十と TurbO C 十十 Professiona にはどこが違うのです A Turbo シリーズには , 統合環境 型のデバッガやプロファイラを含 150 CMAGAZINE 1991 2 Q む Turbo Debugger&T001s とい う製品があります。 Professional と呼ばれる製品は , Turbo C 十十と Turbo Debug ger & T001S をバンドリングしたも のて、す。 Turbo C 十十に含まれる 統合開発環境 ( IDE ) にもソースレ ベルデバッガが組み込まれていま すが , Turbo Debugger て、はアセン プラレベルのデバッグや強力なプ レークポイント機能のほか , リモ ートデバッグ , 仮想 86 デバッグ , 80286 のプロテクトモードを利用し た省メモリデバッグなどがサポー トされており , 高度なデバッグを 行うことがて、きます。 Turbo Debugger&Tools には コマンドライン版のアセンプラ (Turbo Assembler) も含まれてお り , 厳しい条件が求められるモジ ュールの開発や , コマンドライン コンパイラや IDE からインラインア センプラを使うために使用てきま す。 urbo C 十十は , C 十十トラン ドを確認てきます 0Turbo Debug パイラが生成するアセンプリコー ー S オプションを指定すれば , コン ん。コマンドラインコンパイラて、 グラムを生成することはありませ すから , 中間コードとして C のプロ 生成するネイテイプコンパイラて Turbo C 十十は直接コードを A ンパイルできますか ? Ver. 1 . 2 で書かれたプログラムをコ 多いようですが , Turb0 C 十十は のバージョン 1.2 に対応したものが 市販の C + + の解説書は , C 十十 スレータの機能をもっていますか ? ger & T001S を使えば , プログラム の動作を詳しく調べることがて、き ます。 TurboC 十十は , AT&T C 十十 の Ver. 2.0 に準拠しています。 Ver. 1.2 のストリームを使ったプログラ ムは , OLDSTRMx. LIB をリンク することて、コンパイルて、きますが , Ver. 2.0 て、追加された予約語や旧 式の構文を使っているものは正し くコンパイルて、きない場合があり ますか ? ログラムは , Turb0 C 十十でも使え Q ます。 Turbo C Ver. 2.0 で作ったプ mode は , つねにテキスト画面の初 換えなければなりません。 text 使っている場合は , textkanji に置き 示かを選択するために textmode を また , 漢字表示かグラフ文字表 る必要があります。 的にファンクションキーを消去す ムて、は , pc98fkeyoff を使って明示 ことを前提に作成されたプログラ ファンクションキーが消去される なければなりません otextmode< ている場合は , その部分を修正し このため , gettextinfo を使用し トは廃止されています。 ト , 簡易グラフィックスのサポー れました。 40 桁モード , 裏テキス 拡張アトリビュートがサポートさ ノ、イレゾリューションモード , ・テキスト関数 とおりて、す。 とがて、きます。おもな違いは次の の修正て、再コンパイルして使うこ ソースコードがあれば , 若干 A 期化を行います。 textatt 「や text colo 「の引数は , 従来のようにテキ スト VRAM 上の値そのものてはあ りません。このため , 引数として シンポルて、なく直接数値を指定し ているプログラムは修正の必要が あります。 textreverse や textblink など一部の関数は , 旧形式ライプ ラリ (OLDBIOSx. LIB) て、のみサポ ートされます。新たに作成するプ ログラムて、は , 将来のために texta 権 を使うようにしてください ・グラフィックス ハイレゾリューションモードが サポートされました。従来の PC98. BGI, PC98GRCG. BGI, PC98EGC. BGI はひとつのファイル Turbo C 十十 ともにリンクし直してください 生する場合は , OLDBIOSx. LIB と イプラリ関数の未定義工ラーが発 ラムをリンクしているときに , ラ Turbo C Ver. 2.0 用のプログ ています。 (OLDBIOSx. LIB) て、サポートされ 関数などが , 旧形式ライプラリ 一部の日本語処理関数 , テキスト び標準ライプラリから削除された xxx 関数やミュージック関数 , およ Turbo C 2.0 における bios98 ・ OS 関数 , ミュージック関数 ます。 ぎる場合に 0 を返すようになってい ます。 imagesize は , 範囲が大きす ードに関する定義は削除されてい IBM-PC 用の BGI ドライバや色コ はソースコードの修正が必要てす。 EGC ドライバを指定している場合 て明示的に PC98GRCG, PC98 め , initgraph や registerbgidriver ( PC98. BGI ) に統合されているた

2. 月刊 C MAGAZINE 1991年2月号

モードにも対応することにした。見栄えの 話をするならば , 明らかにノーマルモード よりもハイレゾリューションモードのほう が優れている。また , 実用性の面からも , ハイレゾリューションモードのテキスト 31 行表示に関しては , 一度に確認て、きる情報 量が増えるという点て、有利て、ある。モード 内部構造はノーマルモードとにているし , 幅広い機種のサポートは決してユーザの不 利益にはならないて、あろうから , 対応を決 定した。実際には , ノーマルモードとハイ レゾリューションモードとの非互換性は , Turbo C 十十だけて、なく , Turb0 Debug ger, Turbo profiler の移植担当者を最後ま て、悩ませることにもなったが , それだけの 価値があったと信じている。 工テイタ 統合環境のエデイタは , 移植担当者が苦 労した点のひとって、ある。従来の Turbo シリ ーズのエデイタて、は , 一度にひとつのファ イルだけしか編集て、きず , MS-DOS のメイ ンメモリからエディットバッフアを確保す るだけて、サイズも 64K バイトに制限されてい た。また , 日本語版て、はスクロール速度が 遅いなどの不満も聞かれた。 TurboC 十十て、は , これらの点がすべて 改善されている。 Turbo C 十十のエデイタ は , 合計 8M バイトまて、の複数のファイルを 編集することがて、きる。また , キャッシュ 機能が組み込まれており , どんなに大きな ファイルて、も ( オープンするときに時間がか かるだけて、 ) 任意の場所へ瞬時に移動するこ とがて、きる。このキャッシュ機能のために ファイルの内容が単純にメモリ上に存在す るわけて、はないため , 漢字 ( 2 バイト系文字 ) の取り扱いに苦労したようて、ある ( 残念なが ら , NEC 独自の 2 バイト系半角文字には対応 てきなかった ) 。 また , 画面のスクロールなどの表示速度 に関しても基本的な見直しを行い , 大幅に 改善された。 60 CMAGAZINE 1991 2 日本語化において , もうひとつ追加され たのが , 文字列検索において全角 , 半角文 字を同一視する機能て、ある。プログラム中 のコメントに出てくる英文を全角て、記述し たり , 半角て、記述したりしてしまうことが ある。このとき , いちいち両方の検索文字 列て、検索を行わなければならないのは不便 て、ある。もちろん , どちらかに統一して記 述しておけばよいのだが , 他人が記述した プログラムを参照したりする場合もあるだ ろうから , そうした場合には便利て、あろう。 また , TurboC 十十に組み込まれているプ ロジェクト機能には , Projectnotes という プログラム開発上のコメントを記述するウ こて、利用 インドウも用意されているが , することもて、きる。ただし , この機能て、同 一視て、きるのは英数字のみて、ある。 一般に , Turbo C 十十の内蔵工デイタを 始めとする IBM ー PC 系のエデイタは , 日本 のエデイタのように画面の右端て、折り返す 機能をもたないため , 日本語文章の編集に は向いていないが , プログラムをコーディ ングするには十分実用的になったといえる て、あろう。むしろ , キャッシュ機能 , オー バーラッブマルチウインドウ , マウスのサ ポートなどを考慮すれば , プログラム開発 においては , ほかのエデイタを上回ってい るといっても過言て、はないだろう。 拡張メモリの対応 NEC が , グラフィックス VRAM と EMSAZ ージを同じ領域に割り当ててしまったのは , ソフトウェア開発者の苦労のタネを増やし たようなものて、ある。たとえば , Turbo C 十十 の統合環境のように , EMS を扱うアプリケ ーションから , BGI のようなグラフィックス を扱うプログラムをデバッグするときなど は , ややこしい問題を招く。 一時は , 対応を諦めたほうがよいのて、は ないかという意見も出たが , 実際にこの形 式の EMS ドライバを使っているユーザも少 なくないようなのて、 , 結局対応することに したにれもまた , 移植担当者を悩ませた ) 。 プロテクトモード用の拡張メモリについ ても同様て、ある。 IBM-PC 版て、は , プロテ クトモード用の拡張メモリを使うために XMS ドライバが使われているが , PC ー 9801 用の XMS ドライバとは HMA という拡張メモリ の最初の 64K バイトの領域だけをサポートし ているサプセットがほとんどて、ある。 しかし , TurboC 十十が使用するのは EMB という拡張メモリ全体を指すプロックて、あ したがって , そのままて、は Turbo C 十十か ら使うことがて、きない。しかし , フルセッ トの XMS ドライバがないからといってプロ テクトモード用の拡張メモリが使えないと いうのて、は意味がない 統合環境は , 当然機種に依存するものだ から , PCー9801 版 Turbo C 十十て、は XMS ド ライバを使わずに共通アドレスの [ 0000 : 0401 ] を参照することて、拡張メモリの大き さを取得するようにし , INTI 価を使ってプ ロテクトモード用メモリの転送を行ってい る。なお , 共通アドレスの値は , 一部の EPSON マシンて、は設定されていないことがあるよ うて、 , この値を設定するためのツールもサ ポートすることになった。 こて、問題になるのが , コマンドライン コンパイラて、ある。 TurboCVer. 2.0 のコ マンドラインコンパイラが機種依存してい る点については , 多くのユーザの方から批 判を受けたし , 私たちとしても余計な機種 依存性は排除したいと考えていた。しかし , ー Qe オプション (EMS メモリの利用 ) やー Qx オ プション ( プロテクトモード用拡張メモリの 利用 ) を PC ー 9801 専用にしてしまうと , 他機 種て、これらのオプションを使えない なってしまう。コマンドラインコンパイラ の一 Qe オプションは NEC ー EMS に対応してい るが , NEC-EMS 独自のファンクションて、 工ラーが発生しても無視する ( この場合は NEC-EMS て、ないとみなす ) 。ー Qx オプショ ンを使うためには , XMS ドライバが必須と なっている。

3. 月刊 C MAGAZINE 1991年2月号

ング添削 プログラ 更関数て、す。これは 4096 色中の任意の色を パレットに割り付けるものてす。かなり短 いファイルて、すが , いろいろと問題点があ るようて、す。 1. 前回の教訓でも説明したように , ヘッ ダファイルの中に関数定義を埋め込む のはよくない 2. Tur 用の color16 関数と , Quick 用の p 引 16 関数は , 基本的に同じ動作をする 関数だが , 処理系によって名前が違っ たり , ヘッダファイル名が異なること は混乱のもとになる 以上の 2 点を考慮すると , やるべきことは わかりますね。まず , 関数名を統一します。 , こては Turbo 用の C010r16 を使用しましよ う ( どちらて、もよいのてすが ) 。ヘッダファ イルの名前も統一し , C010r16. h" としま す。 ヘッダファイルて関数定義を避けるため に ( 実現部はひとつの関数呼び出しと短い場 合もありますし ) , ここてはマクロを使いま さて , 問題は処理系によって動作を変え なければいけないことてす。幸いなことに Turbo-t は , TURBOC というマクロが あらかじめ定義されています。この識別子 名が定義されていれば Turbo , そうて、なけれ ば Quick て、あるという条件コンパイルを行え ばよいことになります。 以上をふまえて , 作成したのが List 4 ( c 。 1 。 r16. h ) てす。 松林さんの colo 「 16. h(Turbo 用 ) List 1 : / * Turbo C C010r16. h 16 colors possible out 4096 colors Y. Matsubayashi * / 2 : 3 : c 引 0r16 ( C010r , red, green, blue) 4 : int C010r , red, green, blue;/* 1 tO 15 per each parameter * / setrgbpalette(color, red, green, blue) : 6 : 松林さんの pa Ⅱ 6. h(Quick 用 ) List 1 : / * Pa116. h for MS_C Compiler * / 2 : 3 : pa116(int C010r , int red, int green, int blue) -remappalette(color, (long) red + (Iong)green*0x100 + (long ) い ue * 0X1000 の : 作成した colo 「 16. h(Turbo, Quick 共用 ) List 2 : 3 : 4 : 6 : 7 : / * R G B にそれぞれ 0 ~ 1 5 を指定した色をパレット c に割り当てます * / 8 : 9 : #if defined(--TURBOC__) #define co 地 r16 ( c , R, G, B) \ setrgbpalette((c), 12 : #else #define co 地 r16 ( c , R, G, B) \ -remappa lette ( (c) , 15 : #endif 1991 年 2 月号 By Y. Matsubayashi & 柴田望洋 メニュープログラム【 C マガセミナールーム】 インクルードファイル col 0r16. h (B)) ( long ) R + ( long ) G * 0X100 + (long ) B * 0X10000 ) などのマクロは小文字になっています となりますね。 が , この違いを教えてください』 まとめて処理する という内容て、す。 今回も co 16 は小文字を使っています。 松林さんのプログラムは , 1 画面に 10 個の これは , ひとことて、いえば「慣習」だからて メニューを表示し , 3 画面まて、切り換えるよ す ( ? ) 。たとえば標準て、提供されるライプ うになっています。 ラリてある putc などは関数て、はなく , マク ロて、供給されることが多いようて、す。ヘッ さて , グラフィカルなメニューなのて , 処理系に依存する部分は , 条件コンパ メニュー項目は , 縦に並んだ ( カッコよい立 ダファイルをのぞいてみてください。結構 イルをうまく利用する。また , それら 体的な ) 矩形枠の中に表示されます。影をつ いろいろなものが関数て、はなく , マクロて は見た目が悪いため ( ? ) , なるべくへ ける処理をする部分が List 5 の箇所てす。さ 実現されていることに驚くと思います。 ッダファイル中で実現する。 て , 10 個の矩形の 4 辺に影をつけるのて、 , 10 『うまく設計されたマクロは関数と同じ感 回のループを 4 回行っています。都合 40 回の 覚で使用できる』から , このようなマクロ TurboC も Quick< も C010r16. h" をイ ループを行うことになります。ムダてある ンクルードすることにより , 同じ機能のマ は小文字て書くのて、す。 ことがわかりますね。 このことを逆に考えると , クロ ( coIor16 ) を使用することがてきるよう List 6 のようにしたほうが 10 回のループて になりましたね。 すみ , すっきりとします。 マクロといえば , 香川県三豊郡の鰆目正 志さんから質問がきています。 List 6 を眺めると , b に毎回 60 を加えるこ とがムダてあるとわかります。もうひとく 「昨年の 10 月号で「定数マクロは必す大 ふうすれば , もう少し効率よくなりますね。 文字で書く」べきと書いているのに , cls プログラミング添削 135 関数形式 ( 引数つきの ) マクロは関数と 同じ感覚で呼び出せるようにうまく設 計せよ。

4. 月刊 C MAGAZINE 1991年2月号

0 B 0 R 風 1990 年 0TURBO C は、 進化の第 2 ステップへと踏み出した。 TURBO C から C 十十ヘーーー。 話題のオフジェクト指向プロクラミンク ( 00P ) 言語 C 十十 & C コンバイラ、ボーランドからいよいよ新登場。 TURBO C+* SION 19 , 500 円 ( 11 月 1 日 ~ ) C 十十は、 90 年代の主流となるオプジェクト指向プロ レイを意識する必要はほとんどありません。 TURBO C 2.0 ・登録ューザー様にはアッフデートのご案内を クラミングを、自然な形で C 言語に取り入れた言語 ・拡張されたさまざまな機能 です 8TURBO C 十十は、 " TURBO " の速度と使 お送りいたします。まだ登録の済んて、いない方は、お フログラムの中て、のコンパイルオフションの記述、 いやすさを C 十十 (AT&T C 十十 Ver. 2.0 に準拠 ) て 早めに登録カードをご返送ください 大規模な静的データの確保、多くのファイルを一度 にコンパイルするための応答ファイルのサポートなど、 実現しました。もちろん、 ANSI 準拠の C コンパイラ ※製品の価格には、消費税は含まれていません としての機能も備えており、既存の資産をムダに 細かい部分て、も数多くの点が改良されました。 ・充実したユーティリティ群 することはありません。 関数毎にサンフ。ルフログラムを備えたヘルフュー * プログラムによっては、再コンバイルしなけれはならない場合があります ティリティ、自己スワッフや応答ファイルの自動生成 ■ Programmer's PIatform 統合環境が大きく改善されました。オー ノヾ - ーラッフマ をサポートした MAKE ユーティリティなど、フログラム ルチウインドウをサポートした環境は、アプリケーション 開発に必要なユーティリテイも揃っています。 開発に必要な編集・コンヾイル・リンク・テ六ッグ機能を ■ハイレゾルーションモードに対応 備えており、マウス操作も可能てす。ェテタは、複数ファ 統合開発環境のハイレゾモードての動作、 31 行モー イルを同時にオープンすることがて、き、編集するファイル ト : BGI やテキストライフラリのハイレソードをサポー の大きさはテンスク容量にのみ制限されます。キャッ ト。また、 TURBO DEBUGGER & TOOLS もバ シュ機能による高速処理て、大規模なフログラム開 ジョン 2.01 ※※としてハイレゾモードに対応しました。 発にも対応て、き、分割コンパイルのサポートも万全 ※※ TURBO DEBUGGER & TOOLS 2 0 の登録ユーザ様には、新 Ve 「 201 をお送りします て、す。トランスファ機能ては、 TURBO ASSEMBLER ETURBO C 十十 1.0 の動作環境 や TURBO DEBUGGER なとの外部プログラムを簡単 機種 : PC -9801 シリーズ、 PC -286 シリーズ ( ハイレゾ に呼び出すことがて、きます。 TURBO ASSEMBLER の モード対応、 LT は除く ) / メモリ : 640KB 以上 / MS - ェラーメッセージは、統合環境にも取り込めます。 DOS : バージョン 2.11 以上 / マウス : バスマウス ■ VROOMM 新発売記念キャンペーン実施 / V ROOM M ( Virtual Runt ime ObJ ect-Oriente d ・キャンペーン期間中 ( 11 月末 ~ ' 91 年 3 月末 ) に Memory Manager) は、ボ、一ランドの進化したオー 限り、特別価格て、の販売を実施いたします。 バーレイマネージャて、す。オーバーレイ化されたコード 39 , 800 円→ 29 , 800 円 TURBO C 十十 1.0 は、必要なとき自動的に、しかも効率よくオー ノヾーーレイ TURBO C 十十 Professiona ト・・ 59 , 800 円→ 49 800 円 バッフアに呼び出されます。フログラマは、オー ※ AII Borland ProductS are trademarks 0 「 registered trademarks Of Borland lnternational ,lnc @Borland lnternational, C. ※その他、商品名は一般に各社の商標です ・製品に関するお問い合せは、総販売元株マイクロソフトウェアアソシェイツ TEL. 03-3486-1411 までお願いします く資料請求番号 F04 〉 雑誌 14325 ー 2 凸版印刷 printed in Japan T 4 91 1 4 5 2 5 0 2 9 8 6 C ソフトパンク 新発売 TURBO c + + PROFESSIONAL 日 TURBO.CHARGEDC* + FROM THE IEADERIN 0 引 ECT ・ 0 印 OG 盟損 G TURBO ( + + E55 ℃ [ TURBO C + + PROFESSIONÅL 株式会社ボーランドジャパン 〒 107 東京都港区南青山 7-8 ー 1 小田急南青山ヒル TEL. 03-3486-148 代 日 0 を一 A N 0

5. 月刊 C MAGAZINE 1991年2月号

せたこと , バックスペースを正しく処理す るためにはサイズが大きくなりそうだとい うこと , いずれにしろバックスペース以外 の特殊キーには対応て、きないことなどの理 由によるものて、ある。 textcu 「 S0「関数は , IBM-PC 版て、 setcur sortype がサポートされたため , 削除した。 textblink, text 「 everse, textunder, textver tic についても , textattr て、代用てきるた め , 削除した。逆に , シフト JIS コードに相 当するコードを , 漢字て、なくグラフ文字と して扱うための textkanji 関数がサポートされ Object::ZER0 膚ファイル語集 sorting else if ( sortArg sorting 索行億 ] ンバイル国デバッグプロジェクトオプションウインドウ田へルプ lns ectin sortedDirector TESTDIR. CPP Directory: :byDat ソー AF 1 A : 「いⅢ sortB ◆ Directory: :bySiz 0bject: :nameOf() const Object::isA() const Object: :hashValue() const ds:84A2 * i n I i ne* * i n 1 i ne* * i n i ne* ↓ 〃ボディコメント この時 で 〃終わり Object: : isEqual(const Object near&) const * Object: : isSortabIe() const A73C:14EC Object: : isAssociation() const A73C : 14F5 Object: :forEach(void(near*)(0bject near&, vo る ) 序 Object: :firstThat(int(near*)(const 0bject n : lastThat(int(near*)(const Object ne 亭すで 0bject: class Dire class Directory Container: : initlterator() const *inl ine* Director sortedDir { u b 1 i c : 132 : 6 し oca い 0 F i 1 e name 新ヘルプ TCLASSS. LIB TESTDIR. CPP FILEDATA. CPP ・ DIRECTRY. CPP Fig. 1 八イレソモードの画面 virtual virtual virtual 69 : 1 い一 r い ( 、い ) r し ( ) enum sortOrder byName' byDat% bySize ; Directory( char * , sortOrder ) ; classType Char hashValueType gettextinfo は , 裏テキストのサポートがな くなったことて、 ,text info 構造体が変更され ている。具体的には , 拡張アトリビュート 対応のために , 属性に関するふたつのメン バが unsigned short になった以外は , IBM -PC 版と同じて、ある。 Turbo C Ver. 2.0 に おいて gettextinfo を使っていたプログラム は , この点を修正しなくてはならない テキスト関数のための色シンポル ( T xxx の形式のもの ) は , グラフィックスと同じ形 式 (BLACK, BLUE など ) に改められた。本 来 , IBM ー PC 版て、はテキストのシンポルが 色の名前て、あり , グラフィックス用の色シ ンポルのほうが CGA xxx, EGA xxx とい う形式だったのだが , PC ー 9801 て、はテキスト 属性において , 0X20 が青 , 0xE0 が白などと 変則的な形態てあるため , Turbo CVer. 2.0 てはテキスト用のシンポルを T BLACK, T BLUE などという名前に割り当てたわけ てある。また , textattr の引数は , テキスト VRAM 上て、表現される値そのものを与える ようになっていた しかし , 「色」を表すために , その対象に よってシンポル名を変えなければならない というのはわずらわしいものだし , オプジ ェクト指向の精神にも反する。従来との互 換性についても考慮したが , 将来のことも 考えて変更することにした。このため , textatt 「 に直接数値を与えているようなプログラム 0 CMAGAZINE 1991 2 は , Turbo C 十十ては正常に動作しなくな 62 る ( シンポル T xxx は , 互換性のために定義 されている ) 。 なお , FMR 用 Turbo C 十十て、は , BROWN が , 実際に見える色と合わせるために , DAR KYELLOW と変更されている (BROWN も 互換性のために定義されている ) 。 PC ー 9801 版て、もそのように変更することを検討した のだが , 拡張アトリビュートて、表示される 「暗い黄色」の色がまさに "BROWN" だっ たのて、 , そのままになった。 拡張アトリビュートの対応て、 , IBM-PC 版 TurboC 十十用に書かれたプログラムを 移植することも比較的容易になった ( もちろ ん , TurboC 十十のライプラリ関数を使っ てプログラミングされている場合の話て、あ る ) 。 なお , 標準関数からなくなった関数も , 従来との互換性を保っため旧形式ライプラ リて、サポートされている。通常のプログラ ミングにおいては , ソースコードを再コン パイルする程度て、動作するようになるだろ フ。 グラフィックス関数 ()G I) ューションモードに対応した。 BGI は , もと 当然 , グラフィックス関数もハイレゾリ もと機種ごとのグラフィックスドライバを ロードする形式になっているため , ハイレ ゾリューションモードをサポートするため に不自然な仕様の変更は必要ない むしろ , 問題となるのは , これまてグラ フィックス LSI ごとに分かれていた 3 つのド ライバだ。 BGI ファイルは , 実行形式にリン クすることもて、きるが , すべてのドライバ をリンクしたうえに , 新たにハイレゾリュ ーションモード用のドライバをリンクする ことになると , メモリの負担が重くなりす ぎる。そこて、 , ノーマルモード , ハイレゾ リューションモードのそれぞれについて , ひとつの BGI ファイルにまとめることにし た。 もともと , 同系列の機種用のグラフィッ クス関数をサポートするわけだから , ・同じ ようなルーチンもあり , 全体的に見直した 結果 , 従来のものよりも小さいドライバに なった ただし , サイズ縮小のおもな理由は , Turbo C Ver. 2.0 の BGI て、は , 内蔵フォント用の 文字バッフアを 256 文字分もっていたのに対 し , Turbo C 十十の BGI て、は英数字の 96 文 字分だけを用意したためて、ある。これは , グラフィックス画面にカナ文字やグラフ文 字を描画する速度よりも , BGI のサイズを縮 0

6. 月刊 C MAGAZINE 1991年2月号

ソースファイルしか受け付けず , それをオ プシェクトファイルへコンノヾイルするだけ て、ある。リンクをするためには BAT ファイ ルを作らなければならなかった。ドキュメ ンテーションは , そういったことすべてを プログラマが自分て、考え出すものと想定し ている。あるサプディレクトリに he110. cpp 用の makefile が隠れていて , それを見ると Turbo C や MetaWare の High C を使うとき のリンク方法がわかる。 lntek は独自のプリプロセッサを提供して いるが , それは ANSI 適合て、はない。文字列 化演算子ソ〃を実装していないのて、 , 一部 の C コンパイラて、は C の assert マクロのコー ルが動作しない。 Glockenspiel の ccxx と違 って , cplus て、は別のプリプロセッサを使え ない。しかし lntek は cplus のソースと ma kefile を全面的に提供しているのて、 , この点 を修正することはて、きる。 問題がもうひとつある。 C て、は main() か らのリターンが exit( ) をコールしたことと同 じ効果になる。 C 十十ては , そのとき , static のディストラクタが起動される。 Turbo C とともに lntek C 十十を使うと , ディストラ クタのコールが暗黙裡に行われるが , ほか の C コンパイラを使うとそうはならない TurboC 用には , lntek はライプラリ中に exit( ) の新バージョンを提供している。 lntek または Turbo のプログラムをリンクするとき は , lntek のライプラリを Turbo のライプラ リよりも前に書き , lntek バージョンの exit ( ) がリンクされるようにする。 Watcom などそのほかの C コンパイラに関 しては , exit( ) は lntek ないし Watcom のプ ログラムが必要とするそのほかの C 関数と同 じ C ライプラリモジュールの中にある。そこ て、 lntek は exitcpp( ) という新しい関数を提 供して , exit( ) の代わりに使うようにしてい る。 main ( ) 関数は以下のように書かなけれ 54 CMAGAZINE 1991 2 int main( ) ばならない exitcpp(E 刈 T SUCCESS) ; そして lntek は libc. h と stream. h の中て、次の ものを提供して , #define exit exitcpp exitcpp( ) を exit() としてコールて、きるよう にしている。困ったことに , exit( ) のプロト タイプは , これらのヘッダて、はなく , stdlib. h( ときには process. h ) にある。さらに , exit cpp( ) のプロトタイプはどこにも見出せな いのて、 , それを ( 直接または exit ( ) として ) コ ールしているプログラムをコンパイルする とエラーになる。 関連のヘッダを全部手直しするのに , か なりの時間を要した。 lntek に敬意を払って EckeI-Sacks suite のテストプログラム集て、は , 明示的なコー ル文を main( ) の最後に書いた exit(EXlT SUCCESS) しかし , 私は , return EXIT SUCCESS のほうが好きて、ある。これて、 $return missing from function main(main 関数からの返し 値がない ) 〃というワーニングを防ぐことが て、きる。あのテストプログラム集からも , 近いうちに exit( ) コールを取り除こうと思っ ている。 exitcpp( ) を使うと , それが exit( ) に define されている場合ても , 悪い副作用が生じる。 Watcom C て、は , exit( ) は stdout のようなオ ープンファイルをクローズする。 stdout が画 面の場合は何も起きないが , stdout がファイ ルにリダイレクトされているときは実際に ファイルクローズが実行される。そこて、 , Intek/Watcom という組み合わせを使用する ときは ,Watcom の exit( ) を使ってファイル をクローズするか , または exitcpp( ) をコー ルして static ディストラクタを起動するかの どちらかとなり , 両方はてきない このトランスレータは厄介者だと私はず っと思っていたが , とにかく , テストを続 け , 最後には 3 つのテスト用プログラムがす べて動作するようになった。インストール を調整すれば , この製品はより口バストに なる。 Turbo C と併用すると , lntek は最高 速の cfront システムて、ある。 Borland lnternational Turbo C ザ Ve 第 1 = , Borland の Turbo C 十十 Ver. 1.0 は , AT &T 2.0 への準拠度が高く , しかも cfront< はないコンパイラて、ある。 この処理系は C 十十コンパイラおよび ANSI C コンパイラの両方として使える。べーシッ クパッケージには統合開発環境 ( IDE ) , リン カ , ライプラリアン , そして make が入って プロフェッショナルノヾッケーシには , ア センプラとデバッガとプロファイラが加わ る。これらのツール類のテストは行わなか った べーシックパッケージは 8 枚の 360K バイト フロッヒ。ーに入っている。ドキュメンテー ションは計 4 冊 ( インストールガイド , ュー ザーズガイド , プログラマズリファレンス , ライプラリリファレンス ) て、 , いずれもペー ノヾーノヾックて、ある。 IDE はそれまて、の Turbo の環境より改善さ れている。それは , マルチプルオーノヾラッ ヒ。ングウインドウ ( 複数多重ウインドウ ) , マウス , オンラインヘルプ , 依存性自動チ ェックを伴うマルチファイルのプロジェク トマネジャといった機能がある。これらの 機能のすべてはテストしなかったが , 使っ てみて , て、きは良好て、あった。 コマンドライン版のコンパイラは , . cpp, . c, . asm' . obj' そして . lib ファイルを 受け付ける。これら以外の拡張子は C のファ イルとみなされるが , 強制的に C 十十ファイ ルとしてコンパイルさせるオプションもあ C 十十のライプラリには , iostreams およ び streams とともに , 集合 , リスト , ツリー といった一連のコンテナクラスがある。 れらのクラスは generic. h マクロを使う static

7. 月刊 C MAGAZINE 1991年2月号

また , コマンドラインコンパイラ自身が グラフィックスを使うわけて、はないのて、 , -Qe オプションについてはほとんど問題は生 じないて、あろうが , 注意しなければならな こともある。 -Qe オプションはデフォルト て、オンになっているのて、 , EMS ドライバが ある場合 , コマンドラインコンパイラは EMS メモリを利用しようとする。べースセグメ ントが B000 の EMS ドライバて、は , NEKO. COM のようなグラフィックスをアクセスす る常駐プログラムを使っていると , コマン ドラインコンパイラが正常に動作しない この場合は , ー Qe ーを指定するか , あるいは NEKO.COM などを解放しなくてはならない コンバイラ 通常の日本語化対応 ( シフト JIS のレヾイト 目が 5CH の場合の対応 ) を行うことはもちろ んて、あるが , ANSIC 規格て、のワイド文字や マルチバイトをどうサポートするかについ ても検討した。 たとえば , 日本語処理関数などは , Mi crosoft C が標準的な関数群を決定したとい えるだろう。 Turbo C 十十て、も , Microsoft C の日本語処理関数に準拠した関数群を備え ている (Microsoft CVer. 6.0 て、の拡張は含 まれない ) 。しかし , 残念ながら , ワイド文 字やマルチバイト文字に関しては Microsoft C て、は対応されていない。実際 , これらの規 格が日本語の取り扱いに関してどの程度の 影響力をもつか疑問視する向きもあるよう だが , それはそれて、妥当かもしれないが , IBM-PC 版 Turbo C 十十て、は , ワイド文字 を通常文字と同一に扱うという「対応」をし ている以上 , 日本語化に際してまったく無 視することもて、きなかった。 結論を述べると , ワイド文字定数のみ特 殊処理を行い , そのほかに関しては通常文 字と同じように扱うということになった 日本語版 Turbo C 十十て、は , ワイド文字定 数 ( L ' 字 ' など ) はシフト JIS コードを表し , 型 は unsigned short となる。ただし , wchar t は char 型に等しく , ワイド文字列は char 型 の配列 ( 通常の文字列と同じ ) という IBM ー PC 版と同じ仕様になっている。 このような変則的な対応になってしまっ た理由としては ,wchar t の定義をなんらか の形て、コンパイラから stdlib. h などのヘッダ ファイルに知らせなければならないことや , それにともなうマルチバイト文字のライプ ラリの修正などに関して決定的な仕様が見 っからず , 今回は見送りとなったものて、あ る。しかしながら , L' 字 ' などは可読性の面 を向上させるなどのメリットもあり , 仕様 としても妥当ということて、 , 今回はこの形 式のみサポートすることになった。 これは , TurboC 十十ての独自仕様と考 えたほうがよいて、あろう。ほかの形式て、ワ イド文字をサポートするということはあま り考えられないが , ワイド文字は , シフト JIS コードて、なく , JIS コードになることも 考えられる。 しかし , ソースコードを Turbo C 十十て、 のみコンパイルすることがわかっていれば , この形式のワイド文字は便利に使うことが て、きるて、あろう。たとえば , jst 「 ch 「関数にお いて第 2 引数に漢字コードを指定する場合 , 従来のようにいちいち 16 進て、指定すること は , わずらわしく , また可読性もよくなか った。日本語版 Turbo C 十十て、は , jst 「 ch 「 ( " 文字列 " , L' 列 ,) ; のように記述することが 00 0 十 Turbo C Ver. 2.0 て、は , 裏テキストをサ ポートするための textbank, 属性ごとの textblink, textreverse, textunder, textvertical, カーソルのための textcu 「 SO 「な どが用意されていた。また , textmode は , 40 桁モード ( PC ー 8001 のグラフィックスに相 当する ) や簡易グラフィックスにも対応して いた。これらの関数を使ったプログラムは , 多かれ少なかれ問題の生じることがあった。 textbank て、裏テキストを選択した場合 , 文字列を出力する場合は間題ないのだが , かな漢字変換フロントプロセッサ ( FEP ) を起 動すると , 強制的に表画面に切り換えられ てしまう。これはライプラリの間題という よりも , FEP を使う場合の原理的な問題だ カま , つい ことを忘れてプログラミ て、きる。 ライプラリ関数 テキスト関数 考えなければならなかった。 い。また , 従来の関数群を整理することも 当然テキスト関数も対応しなければならな や拡張アトリビュートに対応したのだから , 統合環境がハイレゾリューションモード ングすることもあるだろうし , あまり実用 性がある関数て、はなかった。また , ノ、イレ・ ゾリューションモードの 31 行モードて、は裏 テキストは存在しない このことは , 40 桁モードや簡易グラフィ ックスに関しても同様て、 , こうしたあまり 使われない関数をサポートするためにテキ スト関数のサイズに影響を与えていること には不満を感じることもあった。このため , Turbo C 十十て、は , テキストのモードを通 常アトリビュートと拡張アトリビュ そしてノーマルモードとハイレゾリューシ ョンモードにおける 20 , 25 , 31 行だけをサ ポートすることにした。また , 各関数につ いても細かい改善を加えた。 たとえば , cgets はウインドウの中だけて、 文字入力をて、きるようになり , gotoxy は全 角文字の右側に位置しても左側に補正され なくなった。 kbhit は , ungetch て、ブッシュ バックされた文字があるかどうかを判別す る ( この判別は IBM-PC 版 Turbo C 十十て、は 行われないのて、注意されたい ) 。 逆に , cgets に関しては , これまて、のよう にタブ文字を入力したり , 複数行にわたる 場合はバックスペースて、正しく戻ることが てきなくなった。仕様の改悪といわれそう て、あるが , これは IBM ー PC 版の動作に合わ 特集 C + + レポート 61

8. 月刊 C MAGAZINE 1991年2月号

小したほうがよいだろうという判断による , ノ、イレゾリューションモー ものだ。また , ド用の BGI て、は , 内蔵フォント用のバッファ をもっていない。したがって , ドライバの 大きさはノーマルモードより小さくなって いる。ハイレゾリューションモードて、文字 バッフアを用意するとなると , 5 ~ 10K バイ ト程度のバッフアが必要となるうえにれは BGI ファイルそのものの大きさに反映され る ) , 後述の KCG アクセスモードを変更する ことて、 , 高速に描画することがて、きるため て、ある。 新しい BGI においては , 漢字 ( ハイレゾリ ューションモードにおいては半角文字も同 じ ) をグラフィックスに描画する速度が遅く なっている。これは , 従来は漢字フォント を読み込む際に KCG アクセスモードをドッ トアクセスにしていたのをやめたためて、あ ドットアクセスモードを使うと高速に文 字フォントを読み込むことがて、きるが , 逆 に , テキスト上に漢字が表示されている場 合 , 一時的にグラフ文字として表示されて しまうため , 画面がちらっくことがあった。 た , ハイレゾリューションモードて、は , KCG アクセスをドットアクセスにすると , テキスト画面がまったく表示されなくなっ てしまう。 新しい BGI て、は , BGI が KCG アクセスモ ードを変更することはなく , 高速に描画し たい場合は , ( 画面がちらっくこととトレー ドオフて、 ) ューザが自分自身て、 KCG アクセス モードを変更することになっている。具体 的には , pc98c 「 t 関数を使って , pc98c 「 t(0x1 b, 1 ) ; とする ( コードアクセスに戻すには , pc98c 「 t(0x1b, 0 ) ; とする ) 。 ストロークフォントに関しての細かい改 良点としては , フォントが 255 文字サポート された点が挙げられる。これまて、は , 0x7f まて、の文字がサポートされていたが , これ に加え , 0xff まての文字コードに対するフォ ントがサポートされた。このストロークフ オントは , IBM ー PC の文字に対応しており , 00 0 十っ Turbo C 十十のライプラリ関数は , 一部 の通信 BIOS 関数を除いては直接 BIOS を呼 び出しているだけて、ある。また , 呼び出し 形式も簡素化されている。キーポード BIOS を例にとると , TurboCVer. 2.0 て、は , 構 造体 KEYINFO を定義してから呼び出さな ければならなかったものが , Turbo C 十十 て、は , 直接コマンド値を与えるだけて、よい ようになる (List 1 参照 ) 。 BIOS 関数の中て、 , 通信関数だけは特別な 形て、サポートされる。 PC ー 9801 の通信 BIOS は , RSDRV. SYS を組み込んだ場合 ( または 連文節変換以前の MS ー DOS ) と , そうて、ない 場合て、動作が異なり , このため , 従来の BIOS 関数て、は RSDRV. SYS を組み込まない場合 の BIOS のアドレスを見つけるために BIOS -ROM 内を検索していた。しかし , この方 法て、は新機種が出た場合に正しく対応て、き るかどうかの不安が残るし ( 実際 , 問題があ った機種もあった ) , 仕様として美しくな い したがって , Turbo C 十十て、は RSDRV. SYS が組み込まれていない場合の通信 BIOS(pc98com … x) のほかに , 標準通信ポー トについては独自の関数 ( pc98com... ) を用意 することにした。 pc98com... x は , RSDRV. SYS が組み込まれている場合には正常に機 こうした場合て、も pc98com. 能しないが , 関数が使える。ただし , 拡張ポートについ ては pc98com … x のみて、サポートされる。 通信関数は , 通信に必要な基本的関数を て、の問題があった。 るものがあるなど , 使い勝手や透過性の面 部て、 BIOS 呼び出し以外の処理が行われてい しなければならなかったり , BIOS 関数の内 ぞれの BIOS を呼び出すたびに構造体を定義 て、あるが , こうした問題のほかにも , それ 造体の定義が奇数個の char て、行われたため ものがあるという点て、あった。これは , 構 定してコンパイルすると正常に動作しない 点だったのが , ワードアラインメントを指 従来の BIOS 関数て、 , もっとも大きな問題 て、ある。 とも大きな変更が加えられたのが BIOS 関数 TurboC 十十のライプラリ関数て、 , もっ 田 OS 関数 込む必要がある。 て ) insta Ⅱ use 「 d 「ⅳ e 「て、ドライバを新規に組み C 十十に付属している BGI ドライバを用意し の BGI を使うためには , (IBM-PC 版 Turb0 PC ー 9801 用の Turbo C 十十て、 IBM-PC 用 いからて、ある。 なっていないため , 実質的な意味をもたな IBM-PC 用のドライバは自動検出の対象と IBM ー PC て、動作させることもて、きるのだが , ドライバを用意すれば , 同じプログラムを 義も削除された。 BGI て、は , グラフィックス ics. h に残されていた IBM-PC 用のシンポル定 このほか , Turb0 C Ver. 2.0 て、は graph ギリシャ文字や罫線文字が含まれている。 List キーホード引 OS 呼び出し形式の例 bios98key (&kinf) : kinf. cmmd KEYINFO kinf; void func(void) #include く bios98. h 〉 TurbO C Ver. 2.0 の場合 Turbo C 十十の場合 #include く pc98. h > void func(void) unsigned COde; ニ pc98key(0) : COde 特集 c + + レポート 63

9. 月刊 C MAGAZINE 1991年2月号

000 + っ LIB とリネームするか , コマンドラインやプ この内容は , 統合環境や THELP から参照さ 万 E 編集 S 検素 R 実行 c 工り D デ南グ P カラ 1 外 TCALC. C ProjEt F : フルメニューオン break; ロジェクトの一部として明示的に指定しな れるヘルプ画面から直接工デイタにペース 花け」 T い第 / 料 5 ) 文字列入力の改良 C: コンパイラ T : トランスフア . while い 5t00 ) ; ければならない トすることがて、きる。 忱メイク .. TCDISPLY ( / 1 レ 23 ) . 張アトリビュート対 L : リンカー TCDIS B : テ′、ツガ . vO 司ー 0 い nt a 「 8. C を日「 い ] D: ティレクトリ . ハンドブックは , 従来 HELPME!. DOC に ト司 t ( ) : / ・ H ョい」 re setup ・ / ⅲ ( 1 , 1. 83. text—he ( i n は 0 引 0 「 t 3 b ー 0 ( ) : 己載されていた内容を製本したものて、ある。 チ t ら 0 ー 0 「 ( し旧ー TE ) : これは , サポートセンターに寄せられるさ Fil•3 LO : 3 い c•n ・自 LC 工 TCD ISPLY. C まざまな質問を HELPME!. DOC にまとめて T ロ丘 0 瓦↑第れ D. C FI ・朝い境の設定 いたら 1800 行にも及んて、しまったためてあ オンラインヘルプが充実しているとはい Fig. 3 メニュー項目を日本語て表示 る。これだけの内容になると , 製本しなけ え , 製本された形て、のマニュアルがおろそ ファンクションのエラーを無視するという れば参照しづらいと思われたため , 急遽作 かになってよいということはない 0Turbo C 形にしたが , プロテクトモード用拡張メモ 成することにした ( このため , 写植印字て、は Ver. 2.0 のマニュアルは , 2 分冊て、 , 1 冊が リは PC ー 9801 の共通ェリアを参照するか , ないのて , ご了承いただきたい ) 。 600 ~ 800 ページにもおよぶため , 「使いにく XMS ドライバを利用するか , 悩んだあげ い」という批判も受けた。 Turbo C 十十て く , XMS ドライバを使うオーバレイマネ は , マニュアルは 5 分冊とし (IBM-PC 版て、は ジャ (OVERLAY. LIB) をデフォルトとして 4 分冊 ) , PC ー 9801 版て、は , このほかに一般的 用意したうえて、 , INT1fh を使ってプロテク な質間と回答をまとめたハンドブックを提 ドモード用メモリを利用するオーバレイマ TurboC 十十は , オリジナルから開発環 供することにした。 ネージャ ( OVLY98. LIB ) を用意することに 境としてのさまざまな機能を備えており , IBM-PC 版のマニュアルと異なるのは , また , これらの改良により , より快適て、信 リファレンスガイドを 2 冊に分けた点て、あ 統合環境もコマンドラインコンパイラも , 頼性の高いプログラミング環境が提供され る。 Turbo C Ver. 2.0 のころから , 機種依 オーバーレイが指定されると OVERLAY. たといえるて、あろう。しかしながら , この 存関数とそうて、ない関数は別冊にしてほし LIB を探しにいくため , PC ー 9801 のプロテク 環境をどのように生かすかはユーザ次第て、 いという要望が多く , 今回はこれに応えた トモード用メモリをオーバレイ領域として ある。優れたアプリケーションの開発に寄 形となった。また , ほとんどすべての関数 使うためには , OVLY98. LIB を OVERLAY. 与てきれば , 関係者として幸いてある。 にサンプルプログラムが掲載されているが , ' 90 年 10 月号特集への補足 わトウ H 、い 0 1 一 1 一口 E: 工テイタ . fke ソロ」 5 「 1 : マウス .. 0 : い ke リ電 x まま 1 Project: TCALC LirPS CCKie tgta 7 守 5 を物幻 兮る丕 34 ー 939 373 74 84 343 7 ま 93 マニュイル 最後に 0 本誌 ' 90 年 10 月号の特集内容について気に イルを再オープンしますから大きなファイ 割り当てることもできますし , トランスフ ルでは時間がかかるかもしれませんが , ク なる記載がありましたので , 誌面の一部を ァ機能を使えば , 統合環境を終了すること お借りして気がついた点について補足なら ローズする直前の状態に戻ります。 なく再定義することもできます。 びに訂正させていただきたいと思います。 71 ページの最後で「編集機能そのものは 72 ページでは , 「デバッガは Tu 「 C と比 70 ページの最後から次のページにかけて Turbo C のまま」とありますが , そのあとで べて大した改良はなされていない」とありま 「編集中のファイルは必ずスクリーンのどこ 要求項目としてあげられているカット & ペ すが , プレークポイントには条件式やバス かに表示されている」とありますが , Turb0 ースト機能はサポートされていますし , 正 カウントを設定できるようになっています。 規表現による検索もできるようになりまし C 十十のマルチウインドウは当然大きさや配 75 ページの最後にある , C 十十をサポート た。 置を変更することができますから , ほかの する環境については , すでに発売されてい ウインドウを隠してしまうことができます。 キーストロークマクロに関しては , 編集 る Turb0 Debugger&T001s がオプジェクト指 中にダイレクトに定義することはできませ 「隠れたウインドウ」ではありませんが ,GRPH 向プログラミングのデバッグ環境をサポー ー 0 を押せばクローズしたウインドウのリス んが , TEMC(Turbo Editor Macro Compiler) トしています。 ( 大野元久 ) を使って複数の処理をひとつのキー操作に トも表示されます。これを選択するとファ 特集 c + + レポート 65

10. 月刊 C MAGAZINE 1991年2月号

C フログラマのための TOUCH コマンド (touch. c) LiSt するとカレントディレクトリに指定ファイ ルがない場合 , 指定したディレクトリを検 索します。たとえば set OBJTOUCH=A:%OBJD 旧 または set OBJTOUCH=A:%OBJD 旧 \ のように設定すると , カレントディレクト リの次にディレクトリ A:YOBJDIR を検索し ます (OBJTOUCH て、指定するディレクトリ は漢字のディレクトリ名に対応していませ TOUCH コマンドは現在の時刻に書き換え ますが ,OBJTOUCH ューティリティは 1980 年 1 月 1 日 0 時 0 分 0 秒に書き換えます。 ファイル属性の 取得 / 設定 DOS コマンドて、は ATTRIB コマンドて、リ ードオンリ属性とアーカイプ属性を変更す ることがてきますが , そのほかの属性は変 更てきません。しかし , DOS ファンクショ ン 43h(TabIe 5 ) を使えば隠し属性とシステ ム属性も変更てきるようになります。 MS-C 5.1 て、は属性の取得と設定を行う dos getfileatt 「関数 (Table 6 ) dos setfileattr 関数 (Table 7 ) の関数が用意されていますが TurboC 2.0 にはないようて、す ( 筆者の見落としかもしれ ませんが ) 。そこて getfileatt 「関数 (Table 8 , List 4 ) setfileattr 関数 (Table 9 , List 5 ) のふたつの関数を作成してみました。 これらの関数を使用してファイルの属性 を表示するサンプルプログラムを List 6 (dspatr. c) に , また , ファイルの属性を変更 するサンプルプログラムを List 7(chgatr. c) に示します。 DSPATR の使用法は DSPATR くファイル 1 > [ ... くファイル n > ] て , 表示属性は以下のようになっています。 ・書き込み不可属性 ・・隠し属性 1 : TOUCH コマント・サンフ・ル・フ・ロク・ラム 3 : ファイル名 : touch. c 5 : 6 : 使用法 : touch くファイル 1 > [.. くファイル n > ] 7 : 8 : 9 : setfiletime 関数が必要 * * * * * 11 : コンハ・イル・スイッチ 13 : MS-C 5. 1 Sma 1 1 Model 14 : 15 : cl /J /W3 /Zdl touch. c XMSCXYlibYsetargv. 0bj / 1 ink sl ibcr + libh/st: 0X2800 / cp : 0X1000 / noe 18 : Turbo C 2.0 Small Model 20 : tcc -w touch. c %TC%YI ibYwildargs. obj 22 : * / 23 : 24 : #include く stdio. h> 25 : #include く dos. h> 26 : 27 : int main( int, char 28 : #ifdef TURBOC_ 29 : #include く io. h 〉 30 : 31 : #define dosdate_t date 32 : #define dostime_t t i me 33 : #def ine _dos_getdate getdate 34 : #define _dos-gettime gettime 35 : 36 : int setfiletime(char *,struct ftime * ) : 37 : #else int setfiletime(char *,unsigned. unsigned); 38 : 39 : #endif 40 : int main( argc, argv 41 : 42 : int argc; 43 : char *argv[]; 44 : { struct dosdate_t sdate; 46 : struct dostime_t St i me : 47 : #ifdef _TURBOC_ struct ftime ftime; 49 : #e I se 50 : uns igned udate ; uns igned utime; 52 : #endif 53 : if ( argc ← 1 ) { 54 : fprintf( stderr, return( 1 ) : 56 : -dos-getdate( &sdate ) : -dos-gettime( &stime ) : 60 : #ifdef __TURBOC_ ft i me. ft_year = sdate. da_year ft i me. ft_month = sdate. da_mon : 63 : ft i me. ft_day = sdate. da_day; ft i 田 e. ft_hour stime. ti_hour; ftime. ft_min St i me. t i m ー n : ftime. ft-tsec = stime. ti-sec / 2 : 67 : #else ( ( sdate. year - 1980 ) くく 9 ( sdate. month くく 5 ) \ udate sdate. day; 0 / * 現在の日付 / * 現在の時刻 / * 更新日付 / 時刻 / * 更新日付 / * 更新時刻 . touch くファイル 1 > [.. くファイル n > ] \ n usage - 1980 : 新 MS ー DOS プログラミング入門 87