回ロ 特集日本版断 c 几十十 [ 70 の全貌 トが必要だったて、しようか ? 逆に PM 対応 のソフトウェアを作成するのに , MS-C V er. 6.0 だけて、作成可能だったて、しようか ? OS / 2 コマンドプロンプト用のプログラムを 作成するためには , os / 2 に対応した実行コ ードさえコンパイラが生成て、きれば問題は なかったし , PM 対応のプログラムを作成す るためには , 別途開発キットを購入する必 要があったのて、す。つまり以前の MS ー c は o S / 2 対応とうたいながら , os / 2 の片面しか サポートされていなかったのて、す。 ては MS ー C7 に付属している開発キットに は , 何が入っているのか疑問に思われるて、 しよう。 Windows はマイクロソフト社の言 葉を借りると , 「機種依存しない高度なグラ トアップ (SETUP. EXE) を使わずに DOS 版 フィカル環境を提供するシステム」て、す。し (CSETUP. EXE) を使ってインストールして たがって , MS ー DOS のシステムコールのよ いるならば , Windows 関連のファイルはイ うな数々の機能が Windows て、はダイナミッ 本特集 PartI の「英語版との違い」て、 , 紹介 ンストールされていないのて、注意が必要て、 クリンクライプラリというインタフェイス す。そのような場合には , Windows 版セッ したとおり , 流通している Windows の違い て、提供されています (KERNEL. EXE など ) 。 トアップて Windows 関連ファイルのみを指 によって付属している開発キットが英語版 SDK には , それらインタフェイス (API) の 定してインストールしてやります。インス と日本語版て、は異なっています。さらに 仕様書や , ヘッダ , Windows 用に変更した トールが完了していれば , MS ー C7 と同じグ すて、に市販されている SDK と差別化するた ランタイムライプラリ , デノヾッグッールが ループに登録されます。 めか , マイクロソフト社の戦略なのかは不 付属しているのて、す。 こて、は読者がわかりやすいようにグル 明て、すが , MS ー C7 付属の開発キットは , 部付属していないものがある市販品のサプ ープを分けてみました。ファイル構成は , Fig. 28 のようになります。 SDK は非常に大 セットになっています ( 便宜上 MS ー C7 に付属 するサプセット版を SSDK とします ) 。それ 量のディスクを消費するのて、 , ディスクの インストレーションは , MS-C7 をインス 以外は製品版の SDK と同じて、す。もっと正 空き容量に自信のないユーザは注意しなが トールした段階て、 , すて、にインストールさ 確に記するならば , ツール類は SDK よりも らインストールを進めていく必要がありま れているはずてすが , もし Windows 版セッ よいものが付属しています。 す。 Fig. 29 ダイアログエテイタ ファイル旧編集旧配置 ( A ) オプション 0 ) ヘルプ ( H ) ABOUTBOX 日 e Ⅵについて Fig. 28 Windows SDK のティレクトリ構成 INCLUDE—COMMDLG. H,CUSTCNTL. H, DDE. H, DLGS. H, DRIVINIT. H, windev IME. H,OLE. H, PRINT. H,SHELLAPI.H,WINDOWS. H, WINNLS. H COMMDLG. L 旧 ,OLECLI. L 旧 ,OLESVR. L 旧 ,SHELL. L 旧 ATRMI 1 1 1 . FNT, DLGEDIT. EXE, FONTEDIT. EXE, HC30. EXE, BIN HC31. EXE, HEAPWALK.EXE,IMAGEDIT. EXE, MRBC. EXE, SHED. EXE,SPY. EXE,WINSTUB. EXE,ZOOMIN. EXE, HC31. ERR, DLGEDIT. HLP,HC. BAT,HOOK. DLL,SHED. HLP,WINHELP. HLP, EDITHLP. HLP, FONTEDIT. HLP,IMAGEDIT. HLP,QWIN. HLP 製品版 Windows SD K との違い インストレーション Fig. 30 イメージェテイタ ヘルプ ( H ) ま位置 : サ 1 て : 、回ロ fi ねⅥについて M に「 08 升れ do 日Ⅵ Mic 「 80 升 Foundation 0 ー 1.0 / ソト”力 / ディカラ - サ ) アルスグトン 薹望■■ 左 - 右 反転 日本版 Mic 「 0S0 代 C/C 十十 Ver. 7.0 の全貌 73 特集
国ロ . 14 リモートデバッグ Fig 1 筆者が実験を試みた環境は , DOS / V マシ ンて、英語版 , PC ー 9801 て、日本語版の組み合 わせて、したが , ホストを PC ー 9801 , ターゲッ トを DOS / V て、はうまく接続て、きるのに , 逆 のパターンを行ったとき , トランスポート レイヤー (Transport) か , 実行モデル (Nat ive) を TOOLS. INI て、指定をするとハングア ップしたりしてうまく接続て、きませんて、し た。しかし , 上記 2 点を TOOLS. INI て、設定 しないて , CodeView 上て、設定 ( 起動時にダ イアログて、設定が可能 ) すると接続がて、きま 、 0 なお , 公式には英語版と日本語版の接続 はサポートされていません。 Fig. 1 5 プロファイラのティレクトリ構成 引 N PREP. EXE, PROFILE. EXE, PLIST. EXE, PWBPROF. MXT, FCOUNT. BAT, FCOVER. BAT, FSAMPLE. BAT, FTIME. BAT, LCOUNT. BAT, LCOVER. BAT, LTIME. BAT, LSAMPLE. BAT, PROFILEW. EXE,VTD. 386,WlNDEBUG.386 , C\./WIN. DLL FCOUNTW. BAT, FCOVERW. BAT, FTIMEW. BAT, LCOUNTW. BAT, LCOVERW. BAT, LTIMEW. BAT, NEW-VARS. BAT, NEW-CONF. SYS TOOLS. PRE HELP—PROFILER. HLP DOS—JABBER. TXT, QSORT. C, QSORT. MAK, QSORT. EXE, QSORT. PBT, QSORT. PCF, C WINDOWS—JABBER. TXT, QSORTW. C, QSOR れⅣ . MAK, QSORTW. EXE, QSORTW DEF, QSORT 込 /. H, QSO 日ハⅣ . RC, QSOR ハⅣ . PBT JABBER. TXT, QSORT. BAS, QSORT. MAK, QSORT. EXE, QSORT. PBT, QSORT. PCF DOS—JABBER. TXT, QSORT. FOR, QSORT. EXE, QSORT.. MAK, QSORT. PBT, QSORT. PCF PROFILER. XLM DOS—PARSE. C, PARSE. EXE, PARSE. MAK TA B PACKING. LST, PROFILER. TXT profiler SAMPLES DOS BAS ℃ FORTRAN プロファイラ プロファイラはユーザが作成したプログ ラムの各種計測を行い , プログラムの最適 化を側面から支援するツールて、す。プロフ アイラは , MS-C7 から付属するようになっ た国内初のツールて、すが , BorlandC 十十に 付属していたターボ、プロファイラのほうが , 日本のユーザにはお馴染みかもしれません。 アメリカて、はプロファイラ単体て、も販売し ていたのて , 一部のユーザはご存知だと思 います。プロファイラを利用するためには , まずインストレーションしなくてはなりま 58 C MAGAZINE 1992 12 TabIe 5 プロファイルする項目 項目 タイミング カウント ガべレッジ サンプリング 内容 関数の実行回数や実行に要した時間の計測 関数の実行回数やループの繰り返し回数の計測 どの関数を実行したか報告 この機能は , ほかと異なり , 計測は行わない プロファイラが一定時間で割り込みをかけ , その 時点での実行関数 ( 行 ) を報告
ln 川 a ⅱ行 om 膈町ⅱ計 Ma れ門 MEMORY SERVER MS-C/C 十十 7.0 マイクロソフト 今回は , Microsoft C/C 十十 7.0 に添付される MEMORY SERE VR についてご紹介します。 MEMORY SE 日 VER の機能について Microsoft C/C 十十 Developm ent System for Windows & MS -DOS Version 7. OA ( 以下 MS-C 7 ) に同梱される MEMORY SERV ER は , MS-C 7 の動作に必要かっ有 効なデバイスドライバ / ユーティ リティて構成されています ( TabIe 1 ) 。 以下に , その中からおもなデバ イスドライバ / ューティリティを抜 粋して説明します。 VMM386. SYS DPMI ホストの提供 VMM386. SYS は , MS-C 7 の 動作環境として要求される DPMI (DOS Protected Mode lnterface) 規格バージョン 0.9 に対応したプロ テクトモードインタフェイスを提 供する DPMI ホストとして動作しま す。 DPMI て、は , 従来 DOS 工クステン ダが提供していたマシンインディ べンデントな部分て、ある割り込み がらみの処理をもファンクション として提供し , DOS 工クステンダ の負担を軽減します。また , DPM I ホスト側からみた場合にはメモリ 資源などのすべての資源を DPMI ホストが管理しているために , DP MI クライアント ( この場合は , DO S 工クステンダが DPMI クライアン トとなる ) 側からの不正なオペレー ションによるシステム破壊を極力 抑え , システムを保護することが 可能となります。 MS-Windows 3.0 対応 VMM386. SYS は , VMM386. V XD (Windows 用仮想ドライバ ) の 提供により Windows 環境 ( 386 工ン ハンスドモード ) にも対応していま す。これにより , MS-DOS 環境と Windows DOS 互換 BOX 環境との 違いを意識する必要がありません。 どちらの環境て、も区別することな く ,MS-C 7 を使用することが可能 て、す。 TabIe 1 MEMORY SERVER 構成ファイル ファイル名 VMM386. SYS DCIO. EXE ー 0S10. EXE LUMB. SYS LUMB ℃ OM BEX ℃ OM MSTAT. EXE INSTALL.EXE VMM386. VXD 説明 ディスクキャッシュドライバ 32 ビット DP Ⅶ対応メモリマネージャ テパイスドライバ用 UMB ローダ RAM ティスクドライバ Windows VxD モジュール インストーラ メモリステータス表示 UMB BUFFERS 拡張 TSR 用 UMB ローダ また , Windows を使用するの に , 特別な設定 (SYSTEM. INI へ の登録などの ) は必要ありません。 VMM386. SYS が Windows 起動 時に自動的に VMM386. VXD を口 ーディングし , Windows 環境に対 応します。 マルチメモリサーバ MS-C 7 が要求する環境は , DP MI だけてはありません。コンパイ ラそのほかのユーティリティを高 速かっ快適に使用するためには , XMS (eXtended Memory Specif ication) /EM S (Expanded Memo ry Specification) 管理下のメモリ が要求されます。 VMM386. SYS は , 特別な指定 なし <XMS/EMS/VCPI/DPMI 環境を同時に提供します。さらに UMB (Upper Memory Block) が 利用て、きる場合には VMM386. SY S 自身が積極的に UMB を利用する ことて , メインメモリのフリーエ リアを拡大します。 また , XMS/EMS/VCPI/DPM I の各メモリ管理規格ごとにメモリ 配分を指定する必要はありません。 VMM386. SYS が共通のメモリプ ールより自動的にメモリを配分し 統合管理します。 EMS の高速化 MS ー DOS 環境下て、は , EMS 対応 のアプリケーションおよびユーテ イリティ / システムプログラムが多 いために , EMS ファンクションの スヒ。ードが使い勝手に大きな影響 を与えます。 VMM386. SYS は , と くに EMS ファンクションの高速化 を行い , MS-DOS 環境下の EMS 対 応プログラムの高速化を図ってい ます。 DCIO. EXE ディスクアクセスの高速化 MS-C 7 は動作環境として , 大容 量のハードディスクを要求します。 とくに ,MS-C 7 が提供するクラス ライプラリ / インクルードファイル など大量のファイルを扱う必要が あるため , ハードディスクのスヒ。 ードがコンパイル時間に大きな影 響を与えます。 DCIO. EXE は , ディスクキャッ シュ機能を提供し , ハ ードディス クのアクセス回数を減らすことて ードディスクの高速化を行いま す。 FAT データのロック ハードディスクの大容量化がす すむと , それにともなって FAT (F ile Allocation Table : ファイルの 管理用領域 ) のサイズも大きくなっ てきます。 FAT は , ファイルアク セスのたびに参照されるため FAT データのアクセススピードを上げ ることてディスクアクセスの高速 化を図ることがてきます。 DCIO. EXE て、は , 一度アクセス された FAT 領域のデータの掃き出 しを禁止し , キャッシュバッファ に保持することにより FAT アクセ スの高速化を実現します。 複数のメモリ管理規格に対応 DCIO. EXE は , 複数のメモリ管 理規格に対応しています。オプシ ョンによって EMS/XMS/BMS(B ank Memory Speci fication) メモ リ管理規格て提供されるメモリか ら使用するメモリを選択すること がてきます。 9S10. EXE 高速なテンボラリディスク 158 C MAGAZINE 1992 12
このようにして , 漢字識別子を含んだフ にしてみましよう。つまり”″は引用符 対応コンパイラは LSIC-86 Ver. 3.30 試 の終わりではなく感〃という文字として扱 食版て , MS-DOS が動作するすべてのマシ ァイル DETAB. KID から実行ファイル DET ンて使用てきると思います。提供ファイル AB. EXE が作れました。 うのです。 【調査】あなたがこれまでに書いたプログ をひとつのディレクトリに展開した後 , M KI 0 の構造 ラムを調べて , プログラムを必要以上に複 AKE を実行すれば , そのディレクトリに実 雑にしている if 文や switch 文がないカべま 行ファイル KID. EXE がてきます。 しよう。 漢字識別子の入ったサンプルソースが DE 付録ディスク中の kid. c をのぞいてみてく 【実践】あなたがこれから書こうとしてい TAB. KID というファイル名て提供ファイル るプログラムの状態遷移図を描いてみまし に含まれているのて , kid. c は , KID. EXE のソースファイルてあ り , そこては文字列の処理 , 漢字の処理 , A> KID く DETAB. KID > DETAB. C と実行してみてください。 DETAB ℃に漢字 コメントの処理を行っています。けれども 今プログラム 識別子が変換された C のソースファイルが作 不思議なことに , for 文や while 文は kid. c 中 成されます。 DETAB. KID はタブを 4 スペー にはひとつも登場しません。その代わりに スに変換するプログラムて、す。 DETAB ℃が act て始まる異様な配列がえんえんと続きま 今月のプログラムは , C て漢字の識別子を 使えるようにするツール , KID ( キッド ) てす。 てきたら , す。いったいこのプログラムてはどんな実 験をしているのてしようか。 漢字の識別子を使用てきるシステムとし A> LCC DETAB ℃ ては , 「日本語 C システム JJ 」を中村靖彦さん てコンパイルがてき , DETAB. EXE がてき 実は KID て私が行ったのは「状態遷移だけ を使ってプログラムを書く」という実験なの が本誌 ' 92 年 5 月号て書いていらっしゃいま ます。あるいは , MAKE を使って , てす。一言ていえば , プログラムの動作を した。 JJ のほうは単に漢字の識別子が使え A> MAKE DETAB. EXE 次のように考えるのてす。 るだけてはなく , プログラム全体を日本語 と実行してもかまいません。 DETAB. EXE を使うには , タブを含んだファイル TABF ・何か入力をもらう 化し , またプログラムの解説とプログラム ・現在の状態と入力に対応したアクショ 自身をうまく融合させようという試みてし ILE を用意して , ンを起こす A> DETAB く TABFILE > SPCFILE ・現在の状態と入力から次の状態に遷移 とやると , SPCFILE に出力が格納されま 今月のプログラムは JJ のような大掛かり なものてはなく , 単に漢字の識別子を含ん する す。 だ C のソースを実際の C コンパイラて処理て 漢字の識別子を使って List 5 を書く きる形に変換しようというフィルタてす。 たとえば , List 6 を KID に与えると , List 7 のように変換されます。わけのわからない 名前が登場しますが , よく見てみると頭に 下線 ( ) がついているのて , 確かに C の識別 子としては正しいものてあることがわかり List 7 はコンパイルてきる C のソースなの てす。下線の後に続く文字列は 16 進文字列 て , 漢字コードをそのまま 16 進表示したも のてす。 JJ てはこの文字列に圧縮をかけて 短くなるように工夫していました。日本語 が使える C に関心のある方は 5 月号をご参照 ください。 漢字識別子変換フィルタ KID のソースプロ グラムは本誌付録のディスクに含まれてい ます。 LiSt 1 : #include く stdio. h> 2 : 3 : void main(void); 4 : 5 : #define はい 1 6 : #define いいえ 0 7 : 8 : void main(void) int 入力文字 , 引用符の中である = いいえ : 10 : 11 : while ( ( 入力文字 = getchar()) ! ニ EOF) { 12 : if ( 引用符の中である ) { 14 : if ( 入力文字 = ' \ ” ' ) { 15 : putchar(' }n' ) : 引用符の中である = いいえ : 17 : else { 19 : putchar( 入力文字 ) : 20 : 22 : 23 : 24 : 25 : else { if ( 入力文字 = ' \ " ' ) 引用符の中である = はい : プログラミングの工ッセンス 119
に面、 ' ⅱ譱 M 朝 MS-C 7 の中には , 動作時にテン 度になってしまい , メインメモリ ボラリディスク ( 環境変数 TMP て のフリーエリアが少なくなってし 決定される ) に , テンボラリファイ まいます。 ル ( 一時的な作業ファイル ) を作成 これは , DPMI ホストがストリー するプログラムがあります。 ムバッファ ( プロテクトモードて、動 とくに , コンパイラはコンパイ 作するアプリケーションが MS ー DO ルの中間結果をテンボラリディス S ファンクションを実行するときの クにファイルとして書き出すため データ受け渡し領域 ) を既定値て、 に , テンボラリディスクのアクセ 16K バイト確保してしまうためて ス速度が速ければ , コンパイル時 す。 間は短くて済みます。 UMB が確保て、きる場合には , V IOSIO. EXE は , RAM を外部記 MM386. SYS は , 自動的にストリ 憶装置に見立てて動作する RAM ームバッフアを UMB 上に確保しま ディスクを提供します。 ードデ す。この時のメインメモリ常駐量 イスクなどと違い , 機械的な動作 は約 8K バイトてす。 CONFIG. SY がまったくないため , アクセスス S<Fig. 1 のようにして VMM386. ピードは RAM のアクセス時間だけ SYS を組み込んて、ください になります。 また , ストリームバッフアのサ テンボラリディスクを IOSIO. EX イズを小さく指定することても , ままて、は , メモリを消費しただけ は , RAM ディスクのように環境変 E て、提供された高速な RAM ディス メインメモリ常駐量を減らすこと なの <MS-C 7 自身が RAM ディス 数の指定は不要てす。組み込んだ クに設定することにより , MS-C 7 がて、きます。たとえば , ストリー クを使用てきるように設定を行う だけてハードディスクのアクセス のコンパイル時間を短縮すること ムバッフアのサイズを 4K バイトと 必要があります。 を高速化します。ただし , キャッ がてきます。 する場合は , Fig. 2 のようにしま 具体的には , 環境変数 TMP に R シュバッフアの容量が少ない場合 複数のメモリ管理規格に対応 す。ただし , ストリームバッファ AMi•イスクのドライプ名を設定し は効果がてにくくなるため , 100M のサイズはあまり小さくすると , IOSIO. EXE は , 複数のメモリ管 てやる必要があります 0AUTOEX バイト以上の大容量ハードディス 理規格に対応しています。オプシ データの受け渡し回数が増えるた クては 2048K バイト以上のキャッシ EC. BAT に記述されている ョンによって EMS/XMS/BMS(B めに , プロテクトモードからのフ SET TMP=X : ュバッフアを確保する必要があり ank Memory Specification) メモ ァイルアクセス速度が遅くなるの の x: を RAM ディスクに割り当て ます。 リ管理規格て提供されるメモリか て注意が必要てす。 られたドライプ名に変更するだけ ら , 使用するメモリを選択するこ さらに , UMB (/U) とストリーム てす。これて , MS-C 7 が使用する 【問い合わせ先】 とがてきます。 バッフアのサイズ指定 ( / S ) を併用 テンボラリファイルは , すべて RA して使用することもて、きます (Fig. M ディスク上に作成されるため , 効果的な使用方法 3 ) 。拡張 ROM 空間がネットワーク MEMORY SERVER(IOS-PRO- コンパイル時間などを短縮するこ MS ) について , 詳しいお問い合 ポードなどて使用されているとき とがてきます。ただし , RAMi-•ィ など , UMB をあまり広く確保てき わせは , 株式会社アイ・オー・デ スクの容量は最低ても 1024K バイ VMM386. SYS ない場合にはこういった指定が必 ータ機器までお願いいたします。 ト以上にしないと , コンパイル中 VMM386. SYS は , オプション指 要となります。 に容量不足によりテンボラリファ 定なして組み込んだ場合 , DPMI/ イルが作成てきなくなってしまう 本社サポートセンター 2S10. EXE VCPI/XMS/EMS が有効になりま のて注意が必要てす。 Tel: ( 0762 ) 60-3366 す。このままても MS-C 7 を使う環 IOSIO. EXE は , 単に組み込んだ 東京サポートセンター DCIO. EXE だけては , システムに RAM ディス 境は整いますが , VMM386. SYS の TeII ( 03 ) 3254-0301 クが 1 台追加されるだけてす。この メインメモリ常駐量が 24K バイト程 DCIO. EXE ディスクキャッシュ Fig. 1 UMB を確保する DEVICE : VMM386. SYS /U Fig. 2 ストリームバッフアサイズを制限する DEVICE : VMM386. SYS /S=4 Fig. 3 / I-J , / S の併用 ( UMB 上に 4K バイト確保 ) DEVICE : VMM386. SYS /U / S ニ 4 lnformation from CompiIer Makers 159
かご存じて、しようか。ご存じない方のため るためのツールて、す。 Windows3.0 用と 3.1 にいいますと , STUB ( スタブと発音 ) プロ 用のふたつが付属しています。 グラムが動作して , 「このプログラムを実行 リソースコンパイラ ツールの取り扱い方法は , Windows ヘル するには , MS-Windows が必要てす」と表示 リソースファイルをコンパイルするため プファイルにて提供されています。また AP されるのて、す。つまり , プログラマが独自 のツールて、す。 Windows3.1 対応版が用意さ I のリファレンスは , アドバイザ (QuickHe に STUB プログラムを作成すれば , Wind0 れていました。 lp ) ファイルにて提供されています。 TabIe ws と DOS の両方て、動作するプログラムを作 ズームインユーティリティ (Fig. 35 ) 9 が提供されるヘルプファイル一覧て、す。 ることがて、きるのて、す。 SETUP. EXE など 画面の一部を拡大するためのツールて、す。 アイコンなどを作成したりする場合に利用 がその例て、す。 こて、の本題は STUB の話をすることて、 します。サポートする色数は 16 色て、す。 はないのて、 , 元の話に戻します。 Windows ヘルプ 本来このツールは , 本特集 Part2 て、紹介し もし , Windows プログラムを DOS プロン 本来はここに書くものて、はないのて、すが , なくてはならないものなのて、すが , プログ プトから動かせるとしたらどうて、しよう。 Windows3.1 のヘルプに対応した WINHEL ラムの性格上 SSDK といっしょに紹介するこ おもしろそうだと思いませんか。 WX サーバ P. EXE が Windowsi•イレクトリにコヒ。ーさ 、 0 を使うとそれが可能になるのて、す。ただし れます。 読者の方々は , Windows のプログラムを DOS プロンプトといっても Windows 工ンハ DOS プロンプトて、動かすとどのようになる Fig. 36 Windows プログラムは MS ー DOS 上では起動しない 37 WX サーバで起動した Windows プログラム Fig. プロクラムマネーシャ ⅷ Microsoft VXServer ヘルプ WX サーバ F> T 日 このプログラムの実行には , 「 1i0 「。 3)ft Ⅲ面 ows が必要です . 当時計新第 フ 設定 ( S ) メモ帳 呼 - X 平 0 物れ↓ : き 時計 the co 池に aDOS ー Wm 0 物 $ 総 nWSe Ⅳ orW/HELPfot m 面 朝物 .0 扣 5 刊 ー朝 Ⅳⅸ面面 0 1 ー tSpot Editor 、 server 7.0 ANSWERS) DETAILS 0 ◆ 39 QuickWin 機能を利用すれば List 31 も Windows プログラムに変身 Fig. Fig. 38 何の変哲もない MS ー DOS プログラム「万年カレンダ LIST31 Stdin/Stdout/Stderr 1 ーっー . 宀亠う》マー 4 1 亠亠っマ 7 41 ・ 金 2 9 金 2 9 r,J 月 - 木 18 馬四 7 木ー 8 馬四 水 7 了了水 7 凵 1 終終 1 火 6 に ー火 6 ファイル旧集旧状態に ) ウイントワ ( W ) ヘルブⅢ ) 入力 ( 終了はマ ) ” 19 入力 ( 終了は ) ” 12 1 2 年 12 月 日月火水木金土 1 2 3 4 5 6 7 8 9 11 12 ー 3 川馬肥 17 18 19 21 四 24 円田 凶 31 入力 ( 終了はマ ) 〉増 新ー驫ー望第 入 1-4 -- 76 C MAGAZINE 1992 12
List 14 名称て、 , プログラムサイズを縮小するテク ノロジを指します。 仮想実行コードなんかを使ってしまった ら , X86CPU て、は動作て、きなくなってしま うのてはないかと思われるてしよう。事実 , p ー code だけて、はプログラムは動作しませ ん。実際の動作には p ー code インタブリタが 必要になります。こんどは p-code インタブ リタはどのようにやって手に入れればよい のかが気になると思いますが , その心配も ありません。 p-code インタブリタは , p-co de を使っているプログラムにくつついてい るからて、す。つまり , p ー code 生成オプショ ン ( ー Oq ) を指定してコンパイル / リンクする と , リンカが Makep-code ユーティリティ (MPC. EXE) を呼び出します。 MPC. EXE は , プログラムに p-code イン タブリタを組み込んて、くれるのて、す。した がって , ューザは p ー code か否かを意識する 必要もありませんし , 作成されたプログラ ムは , ふだん見ているプログラムと外観上 は何の変化もないわけて、す。 実際に p ー code が使われているマイクロソ フト社の製品もありますが , 皆さんはそれ が何かわかりますか ? それだけ見分けが つかないのて、す。ちなみに EXCEL や WOR KS に p ー code が使われているようて、す。 これだけの説明て、はよいことずくめの p ー code になりそうなのて、 , 少し注意も書いて おきます。 p-code は , 数個のアセンプラ命 令をひとつにまとめた命令て、す。たとえば , List 15 のようなプログラムを MS ー C7 は Lis t 16 のようなアセンプラブログラムとして生 成します。これが p ー code になると List 17 て、 す。 ADD AX, BX のコードが AddW などと なってしまうのて、 , プログラマは名前つけ 規約を知っておかないとデバッグが厄介に なります。 p ー code の名前つけ規約は公開さ れており , マニュアルにも掲載されている のて、 , それらを見て理解するしかないて、し よう。なお先の例にあげた AddW は , Wor d 型の加算 ( ADD ) を行います。 52 C M AGAZIN E 1992 12 0. 4 1 」「 0 4 「し 4 4 A . っ 0 つ 9 0 8 A , 1 00 0 1 《 A 1 人 1 よ 1 人 00 ・ 1 ・ 1 0. 0. 背 . CD ^ 0 、 0 0 0 = 13 3 和晒Ⅷ 4 Ⅷ 5 切 6 1 人 1 ー - 5 れ四 88882 冊冊鼬 = 冊 a 記 aa 記 5 扣冊 . 調冊 8 鵝朏 8g882 冊 ・ー 4 ・ 1 ・ 1 1 よ ・ 1 ・ 1 N 1 人、ー - ・ 1 1 人・ 1 ・ 1 ・ 1 1 0 ャし . し 0 ・ 1 すしー 1 0 0 , し 0 , し 0 0 0 00 -4 - -0 CD 1 ー 8 9 0 、 10 な 00 4 :. 0 6 叮ー 8 9 01 ・りムっ 0 4 一、 0 叮ー 8 01 り 0 00 4 : レれ 0 叮ー 8 9 01 ・ワ 0 っ 0 -4 ・ 8 0 、 1 戸 0 【 0 -. 0 ′ 0 ロ》一 0 - ト CO 6 6 6 6 6 6 6 6 6 ロー叮ー叮ーローワ・ワー 0 ーー叮ーー 8 8 8 8 8 8 8 8 8 8 9 9 9 0 》 9 9 9 9 9 0 0 、よ 1 よ List サンプルソース List 1 : void main(void) : 2 : 3 : void main (void) register int i = 0 , J 5 : 6 : 7 : 8 : = 10 , k = 20 : List 1 5 のアセンプルリスト 0 加 0 -18 0 00 , 1 00 3 -4 -0 6 7 8 9 0
ーソフトウコ 第 35 回ノヾソコン再起動を を切り換えて利用できます。もちろん再 NS / T に最近流行の CPU アクセラレータを トのサンプルをそのままコピーして利用 起動先が MS ー DOS の場合ですが , HSB は 載せることは可能か ? と思い立ちケース できます。 ②皿 + ー + 匯などのホットキー 両ファイルを拡張子別に管理できるので , を開けてみたところ , なんと 386SL はハンダ ファイルを格納したディレクトリと拡張 づけされているので , 取り換えるのは多少 でリセットできます。ホットキーが阻害 子を指定するだけで , 再起動時の CON 日 以上の勇気がいるということが判明しまし されていなければ , ハングからの再起動 G. SYS, AUTOEXEC. BAT を切り換えら た。がっくりしてケースを閉め , 電源を入れ も素早く行えます。 れます。 ③仮想 86 機能を利用した EMS ドライバと共 ・・おや , メモリチェックにいか ⑥ HDD 起動←→ FDD 起動がメモリスイッチ このときはさすがに青ざめ 存できます。印 MEM. SYS 下の EMS ドライ ない ! ! サー に関係なく切り換えられます。切り換え ました。けっきよく , 拡張メモリあたりが バでも OK です。 先は MS ー DOS である必要はありません。 ④ UMB に 2.6K バイトほどの空きがあれば U うまく初期化できなかったらしく , この辺 ⑦ハイレゾ , PC ー 9801 シリーズ , H98 シリー を入れ直して万事ことなきを得ましたが , MB に常駐します。 ズ , MS-DOSVer. 3.1 以上 ( 5.0 も可 ) に対 。その後業 一時はどうなることやらと・・ ⑤複数の CON 日 G. SYS , AUTOEXEC. BAT 者に聞いたところ , SX ならできないことも ないが , SL は難しいとのこと。 387 でも入れ 「 ZMAND 」 Fig. 1 てお茶を濁そうかなと思う今日この頃です。 「 HSB 」 作者一さん (NFTY ー / e PAGO 2 ⅱ 1 , PC—VAN PCG72848 ) ファイル名 : HSB29EXE.LZH, HSB29SRC. LZH ネット : 上記ネットほか HSB は *High Speed Boot controller" の 略称です CHot StandBy" と読んだ人がいた ので念のため。メインフレーム派にはこの ほうがピンとくるかもしれません ) 。皆さん は , あまり頻繁には行いたくないとは思い つつ , 1 日 1 回くらい ( ことによると何度も ) マシンのリセットスイッチに手を伸ばして いるのではないでしようか ? あるいはリ セットコマンド (DOS 5.0 なら CHEGV. EXE など ) を利用していたとしても , リセット→ メモリチェック→ハードチェック→やっと 旧 L , という手順をいちいち踏まれるのはち ょっとイラつきますよね。 HSB では , いろ いろなチェックはすでにしてあるものとし て , 旧 L だけをして高速起動をかけます。 H SB の特徴は次の 8 点です。 ①組み込みが簡単。 CONFIG. SYS に 1, 2 行書 くだけです。ほとんどの場合ドキュメン 4 : 1 減速 8 : 5 減速 6 : 1 加速 2 : 5 加速 0 : 画面切僣 : 色七 > 3 : 色切替く 5 : 自勦←ト、、 : 方向切替 + : 表示切替 : 停止 Q : 終了 高分解度画面 中央く一周囲 囀カモード 速度 0 3 色 0 5 . 2 「 nakimaus 」 Fig 40 C MAGAZINE 1992 12
' 92 年 12 月号特別付録 ( 5 ク 1.2M バイト 8 セ という自動解凍圧縮ファイルて、す。 た 0WindowsVer. 2. x 用に作られたソース クタ / トラック MS-DOS フォーマット ) に も収録されていますのて , MS-C/C 十十の PASCAL 拡張日本語プログラム は , 次のプログラムが収録されています。 クラスライプラリを使ったプログラムとの 「 TAMAGO 」 ①付録ディスクの説明 違いが , わかるかと思います。 ( テキストファイル ) ( 株 ) マルテックスは日本語プログラム「 T README 1992 年『 C MAGAZINE 』 ②ファイルアクセス監視・保護「 GUARD 」 AMAGOI. 2 」をリリースし , パソコン通信 総目次 YGUA RD くディレクトリ > などにフリーソフトとしてアップロードを ③ PASCAL 拡張日本語プログラム 行い , マニュアルのみ有償て、ユーザに配布 今回て、 3 回目となりました℃ MAGAZI 「 TAMAGO 」 するサービスを開始しました。付録ディス NE 』総目次て、す。 ' 92 年 1 月号 ~ ' 92 年 12 月号 YTAMAGO くディレクトリ > クなどてよく見かけるサンプル版プログラ の目次を MOKUJI. TXT というテキストフ ④顔面神経衰弱ゲーム「 Face Match 」 ムとは異なり , プログラムを実行するラえ ァイルて、収録しました。本誌付録ディスク ての機能制限はありません。配布ファイル YFACE くディレクトリ > 収録の READ. ME 参照ューティリティ , ある ⑤天体シミュレーション「 Nplanet 」 には簡易マニュアルやサンプルがあります いはご使用のエデイタ , ワープロソフトな くディレクトリ > のて、 , 十分お楽しみいただけると思います。 YPLANET どてご利用ください。 ⑥ 1992 年℃ MAGAZINE 』総目次 顔面神経衰弱ゲーム 本誌掲載プログラム MOKUJI. TXT ( テキストファイル ) 「 Face Match 」 ⑦本誌掲載プログラム ' 92 年 6 月号て、「 Logomotion 」 , ' 92 年 7 月号 YCMAGA くディレクトリ > にある C 十十プログラマの成長 EVOL ⑧ READ. ME 参照ユーティリティ て TWAKATAKA 」 , ' 92 年 8 月号て、「 S ー Pr 。 1 TOKUSYU : 日本語版 Microsoft C/C 十十 ( 実行ファイル ) og 」 , ' 92 年 9 月号て「 Ofin 」 , ' 92 年 11 月号て、 README. EXE : 実践アルゴリズム戦略 STRATE 付録ディスクの説明 (README) に , 解凍 「 Winvader 」と , さすがに 10 月号は特集との に実践 C プログラミング入門 STEPC 方法など , さらに詳しい説明が収録してあ 連携て、付録ディスクを作成した関係上収録 ; 新 MS-DOS 入門 MSDOS ります。必ずご一読ください しませんてしたが , 本誌付録ディスクに欠 ESSEN CE : プログラミングの工ッセンス README はテキストファイル形式てす。 かせない Satou 氏に 12 月号て、も何か収録させ : C 十十入門講座 Try The C 十十 TRYCPP 本誌付録ディスク収録の READ. ME 参照ュ ていただけませんかという編集部の要望に : 恥ずかしながらドジりました DOJ I ーティリティ , MS-DOS の TYPE コマン 応えていただいたのが , この顔面神経衰弱 BOHYOH : プログラミング道場 ド , あるいはご使用のエデイタ , ワープロ ゲーム「 Face Match 」てす。 Windows 上の : ANSI C ー more ANSI ソフトて読むことがて、きます。 : X68k 活用講座 コンヒ。ュータと対戦する神経衰弱ゲームて、 X68K : あつばれご意見番 すが , カードがトランプて、はなく , つり目・ APPARE , ファイルアクセス監視・保護 : C マガ電脳クラブ たれ目・ロ目・〇目の 4 種類と一文字・ヘの PUZZLE 「 GLJARD 」 字・ V の字・〇の字の 4 種類のロを組み合わ : 迷走プログラミング N IWA せた 16 種類の顔面カードて、行うものて、す。 コンヒ。ュータウイルスということばも TV INFO : インフォメーション ニュースや新聞などて、も扱われるようにな カードの絵がシンプルなのがゲームを難し READ.ME 参照 り , パソコンユーザは自衛手段を構ずる必 くさせているようて、す。 ユーティリティ 要が生じています。そうしたなか本誌ても 天体シミュレーション ' 92 年 10 月号て「 CHKCOM 」や「 TRUSH 」を ' 92 年 5 月号「新 MS-DOS70 ログラミング 「 NpIanet 」 紹介・収録しました。自衛手段を考えるう 入門」て紹介した READ. ME 参照ューティリ ' 90 年 6 月号特集て、解説したプラネタリウム えてなるべく選択肢を多くする意味合いも ティ ( テキストファイルを画面上て、読むプロ プログラム ( 著作権者 : 岡坂史紀氏 ( 株 ) シン こめて ' 92 年 11 月号フリーソフトウェア最新 グラム ) の実行ファイル ( README. EXE ) を レポートて、紹介した「 GUARD 」を著作権者 ー ) を今回の特集との関連て , Satou README と同じルートディレクトリに収録 フォニ 氏が MS ー C / C 十十のクラスライプラリを使 ( Libra 氏 ) の協力を得て収録しました。 しました。付録ディスクをセットしたドラ 用して , 全体を書き直したプログラムて、す。 イプにカレントを移し READMEO て、 REA 収録したファイルは , ( 株 ) シンフォニーの了解を得て収録しまし *GUARD*GUARD21C. EXE DME ファイルが画面に表示されます。 ディスク内容のお知らせ 175
ータに対応するオフセット値て、す。 ウインドウ関数が WM COMMA ND メッセージを受け取ったときに LParam の下位ワードが 0 てあれば メニューコマンドかアクセラレー タて、あることを示します ( アクセラ レータのときは上位ワードが 1 にな ります ) 。この場合は , CM FIRS T に WParam の値を加算してディ スパッチ関数を呼び出します。 FIRST WM COMMAND メッセージて、 のダイアログボックスのコントロ ールに対応するオフセット値て、す。 ウインドウ関数が WM COMMA ND メッセージを受け取ったときに LParam の下位ワードが 0 て、なけれ ばコントロール ID て、あることを示 します。コントロールのためのオ プジェクトが用意されていれば , 自分にコントロール ID が送られる 前に , 先にそのコントロールに通 知メッセージが送られます ()F F IRST 参照 )。そうて、なければ , ID FIRST に WParam の値を加算し てディスパッチ関数を呼び出しま す。 NF FIRST EDIT, BUTTON, LISTBO X, COMBOBOX などのコントロ ールに WM COMMAND とともに 送られる通知コード ()N xxx, B N xxx, LBN xxx, CBN xxx) と , スクロールノヾーのメッセーシ ()M VSCROLL/WM HSCRO (L) とともに送られる通知コード ()B xxx ) のために用意されていま す。ダイアログボックスやウイン ドウに張りつけられたコントロー ルオプジェクトがあるときにかぎ り , このメッセージが送られます。 . 1 Q ObjectWindows を使って作 成したプログラムを実行すると , Fig. 1 のようなメッセージが表示さ れることがあります。この数値は , どんなエラーを意味しているので しようか。 A 0bjectWindows の = ラー 0 ー ドは , OWLDEFS. H て、定義されて いる EM xxxx シンポルに相当しま す。それぞれの値と意味は Table 1 のとおりて、す。 Q Windows のために , PC ー 9801 に拡張グラフィックスポードを搭 載しているのですが , Turbo Deb ugger f0 「 Windows がうまく動作 しません。何か方法はないでしょ A pc ー 9801 用の Turbo l)ebugg erforWindows 3.0 は , デフォル トてはノーマルモードと ( PC98 仕様 のレ、イレゾリューションモードを サポートしています。これ以外の グラフィックスモードに対応する ためには , ビデオポードに対応し た専用の DLL を使わなければなり Fig ObjectWindows のエラーコード E 0 「「 eceived e 「「 0 「 COde ー 5 ません。 BorIand C 十十 3.0 て、は , るフォントのうち大きさを調べて ルトて、は Windows に登録されてい や Resource Workshop は , デフォ A Turbo c 十十 for Windows ることはできませんか。 ントが見づらいのですが , 変更す るダイアログボックスの文字フォ Resource WO 「 kshop で表示され Turbo C 十十 fo 「 Windows や Windows をお使いいただけます。 オポードて、 Turbo Debugger for していただければ , これらのビデ ル名を TDVIDEO. DLL とリネーム れています。必要な DLL のファイ じ BIN ディレクトリの中に展開さ ます。これらは , TDW. EXE と同 UPERLAT. DLL) が用意されてい 社製の SuperLattice2 用の DLL (S DLL (GA10241. DLL) とサヒ。工ンス I/O DATA 社製の GA ー 1024i 用の もっともふさわしいものを選択す るようになっています。このとき , フォントの大きさだけが選択の基 準になるため , 大きく表示しなけ れば読みづらいフォントが選択さ れてしまうことがあります。ダイ アログボックスて、表示する文字フ オントは , BINi•ィレクトリにあ る SETFONT. EXE ユーティリテ ィを使って変更することがて、きま す。詳細は , README の「 SETF ONT ユーティリティ」 (Borland C 十十 3.0 て、は 4.16 , Turbo C 十十 for Ⅵ lindows て、は 4.11 ) の項目を 参照してください ※本誌 ' 92 年 9 月号の本コーナーに 掲載された EMS クラスのプログラ ムに誤りがありました。メンバ関 数 T far& EmsMem < T> : : op erator [ ] (long index) の関数本 体の定義の最初に index * = sizeof (T) ・ を挿入してください。ご迷惑をおか けしたことをお詫び申し上げます。 TabIe 1 OWLDEFS. H で定義されている EM xxxx シンボル シンホル定数 EM INVALIDCHILD EM INVALIDCLIENT EM INVALIDMAINWINDOW EM INVALIDMODULE EM INVALIDWINDOW EM OUTOFMEMORY ー 1 ー 2 ー 3 ー 4 ー 5 ー 6 意味 ウインドウの子が無効 M 団のクライアントウインドウが作成できなかった メインウインドウが作成できなかった モジュールオプジェクトが設定されなかった ウインドウの作成に失敗した メモリが不足している lnformation from CompiIer Makers 171