List 5 GrpData. circlel GrpData. circlel. GrpData. circlel. paIette=PaIette; GrpData. circlel. cirtype=Cirtype. BOOOOH - BFFFFH ノーマ丿レモードの機種 COOOOH - CFFFFH COOOOH - C7FFFH C8000H - CFFFFH BOOOOH - BFFFFH COOOOH - CFFFFH COOOOH - C7FFFH C8000H - CFFFFH BOOOOH ー BFFFFH 194 : 196 : 197 : 198 : 199 : 2 圓 : 201 : 202 : 203 : 204 : 205 : 206 : 207 : 208 : 209 : 210 : 211 : 212 : 213 : 214 : 215 : 216 : 217 : 幻 8 : 219 : return( (*(GL->FUNC[14])) ((unsigned long) ( int far *)&GrpData) Flag. Palette, Cirtype. Dummy, し inepattern, Pattern, int func 20a(Reserved, 0p, Cx. Cy. R. Startx. Starty. Endx, Endy, Extpattern, Fi llflag, Fi 日 c 引 0 「 ) 220 : 221 : 222 : 223 : 224 : 225 : 226 : 227 : 228 : 229 : 230 : 231 : 232 : 233 : 234 : 235 : 236 : 237 : 238 : 239 : 240 : 241 : 242 : 243 : } 244 : 245 : / * NO. 20 / 1 円の描画 . タイルバターンを使用しない * / unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned long i nt int int int int int int int Char ー ong unsigned Char unsigned unsigned unsigned unsigned unsigned unsigned Char Char int int Char long Reserved; 0p; Cx: Cy : R : Startx: Starty: Endx; Endy; 日 ag : Palette; Cirtype; Dummy : い nepattern; Pattern; Extpa ttern : F i Ⅱロ ag : F i Ⅱ col or : / * 予約パラメータ / * ラスタオペレーション番号 / ネ x 座標 / * y 座標 / * 半径 / * 点画フラグ / * 線の色を決めるパレット番号 / * 線の福 / * 塗りつぶしフラグ . reserved=Reserved; GrpData. circlel. flag=FIag; GrpData. circlel. r=R; GrpData. ci 「 c 1. cy=Cy; GrpData. circlel. op=0p; GrpData. circlel. fillflag=Fillflag; / * 塗りつふしカラーパレット番号事 / GrpData. circlel. fillcolor=Fillcolor; return( (*(GL->PUNC[20])) ((unsigned long) ( int far *)&GrpData) ) : [ 表 6 ] 機種とページの関数表 日本語 MS-DOS Ver. 3 . 3 B まず最初に ,MS-DOS Ver. 3.3 と 3.3B に ついて基本的な違いを明確にしておこう。 日本電気が提供している MS-DOS のバー ジョンは , マイクロソフトや IBM が出荷し ている MS-DOS のバージョンと同期をとっ ているわけて、はない もちろんエプソンが 出荷している MS-DOS とも同期がとられて いるわけて、はない。つまり , このバージョ ンは日本電気によって独自につけられてい るバージョンと理解したほうが正しいとい える。そのなかて、 Ver. 3.3 は , 3.3 , 3.3A と 3.3B というノヾージョンに分かれている。し たがって , Ver. 3.3 には 3 つのバ、一ジョンが 存在することになる。さらに正確に説明す ると , Ver. 3.3 には内部バージョンという公 表されていないバージョンが存在している。 そのため , 厳密にいえば Ver. 3.3 といっても 正確に識別て、きないのが現状て、ある。 日本電気の説明によると , Ver. 3.3 は 16 ビ ット CPU ューザが対象て、あり , Ver. 3.3A は 386CPU ューザが対象だとしている。そし て , Ver. 3.3B は Ver. 3.3A の機能が更新さ れたバージョンとしている。たしかに , 386 マシンユーザには , 更新のニュースが届け られているが , 16 ビットユーザにはそのニ ュースが届いていないという事実がある。 Ver. 3.3 はこうした特異なバージョンて、あ 0 CMAGAZINE 19 3 るという理解を前提に , 実際にどの機能が RL, RA, ES, LS, RS 使用機種 X L2 機能の違いに絞って説明する。 更新されたかを , Ver. 3.3 と Ver. 3.3B との 八イレゾリューションの機種 RL, XL2 /F, / D , / U の指定 省路または /F=BOOO /F=COOO /F=COOO/D /F=OOOO/U 省路または /F=BOOOO /F=COOOO/U /F=COOOO/D 省路または /F=COOOO /F=BOOOO ページフレーム アド レス 物理 ページ 4 4 2 2 2 2 4 4 0 4 辛見に追加された コマンド / ドライノヾ 1 . EMM386. SYS ◆ このドライバは 386 または 386SXCPU 使用 時に , 640K バイト以上のメモリを仮想 8086 モードに割りあて , EMS メモリとして使用 可能にするドライバて、ある。メガソフトか ら市販されている MEMORY-PR0386 によ く似た製品と考えればよい。対象機種は , XL, RA, RL, LS, ES て、 , エプソンの 386 , 386 V て、も使用可能て、ある。 DEVICE=EMM386. SYS [/P= xxx] [/F=XXX] [/D I/U] P は , 拡張メモリに割り当てるべージ数を 指定する。 1 ページは , 16K バイト単位て、あ る。 F は , 使用するべージフレームのアドレ スを指定する。 D または U のオプションはど ちらかを指定することて、 , 実装されていな い拡張 ROM のアドレスに設定て、きる。詳し くは , 表 6 , 表 7 を参考にしてもらいたい 2. PATCH コマンド このコマンドにより , 指定されたファイ ルの内容を 16 進て、変更て、きるようになった MS-DOS Ver. 2.11 から動くことが確認て・ ジョンを問うことはなく , 簡単に動作する。 いえる。このコマンドは , MS-DOS のバー FILEEDIT コマンドのほうが使いやすいと が , 比較すると , 圧倒的にエプソン製の -DOS にもサポートされるようになった。だ なかったが , Ver. 3.3B から日本電気製の MS (FILEEDIT コマンド ) にしか提供されてい 今まて、は , この機能はエプソン製の MS ー DOS 1 . CUSTOM . EXE 、 0 ◆機能強化されたコマンド 2. USKCGM . EXE れた。 定て、きるデバイスにフォント指定が追加さ の作成機能をもっているが , そのときに指 このコマンドは , CONFIG. SYS ファイル 80
PM プロクラミング入門 開 木村利幸 , 山本勝義 , 千葉哲也 株シンフォニ 各メーカーからの OS / 2 Ver. 1 . 1 の出荷か始ま り , いよいよプレゼンテーションマネージャ上で のプログラミングが現実の話題として感じられる ようになってきました。しかし , PM の開発環境 にふれたことのある方 , さらに実際にプログラミ ングをしてみた方は , まだまだ少ないのか現状で はないかと思います。そこで今回は , 基本的な A 円 を使った簡単なサンプルプログラムを用いて PM アプリケーションの開発環境 , およびその開発の 実際について解説したいと思います。 環境について Fig. 1 サンプルプログラム実行画面 実際のコーディングのプロトタイプについ とがもっとも有効な手段だと思われます。 形式ファイル作成まて、の手順を把握するこ 使用するためには , コーディングから実行 ません ) 。 SDK に含まれるツールを効率よく SDK は 0S/2 とは別個に購入しなければなり 知られていないと思われます ( ちなみに になりますが , 一般的にその内容や機能は ェアデベロップメントキット (SDK) が必要 は各メーカーから供給される OS/2 ソフトウ ÖS / 2 アプリケーションを作成するために OS 2 の開発 こてはツール していきたいと思います。 とコンパイル手順 , 開発環境について理解 ては次項て、述べますのて、 , OS / 2 プレゼンテーションマネージャ ( PM ) PM の開発王 チファイルがついています。ただし , もインストールのためのプログラムかバッ のセットアップに分けられますが , どちら トアップは C コンパイラのセットアップと SDK ることもあるて、しよう。開発ツールのセッ クスを開いて使い慣れたエデイタを使用す フェイスとなります。また , DOS 互換ポッ キャラクタッールに対するメインのインタ るため , ウインドウコマンドプロンプトが ラやツールを併用してコーディングを進め ドウッールとキャラクタベースのコンパイ ラがありません。後述する数種類のウイン は PM にフルに対応するエデイタ , コンパイ 環境て、すべて行われるべきて、すが , 現状て、 アプリケーションの開発は本来ウインドウ いては次項て、述べますが , 実際のコーディングのプロトタイプにつ て設定してください い優先順位て、パスが通っているかを確認し CONFIG. SYS の LIBPATH については正し こて、はツール とコンパイル手順 , 開発環境について説明 します。 くコン′ヾイラ > OS / 2 のアプリケーション開発には数種類 のコンパイラ (MS-Pascal,MS-FOR TRAN など ) が対応していますが , それらが すべて PM ファンクションをサポートしてい るわけて、はありません。通常はマイクロソ フトの C オプティマイジングコンパイラ Ver. 5.1 (MS-C Ver. 5.1 ) を用います。ア センプラブログラムを作成するときはマイ クロソフトマクロアセンプラ (MASM) を使 こて、はこれについてはふれ 用しますが , ません。 単独て、販売されている MS ー C Ver. 5.1 に は OS / 2 対応と記されてますが , これはキャ ラクタベースの OS/2 Ver. 1 . 0 をさし , PM が付加された OS / 2 Ver. 1 . 1 のアプリケーシ ョンを作成する場合は , 別途 SDK Ver. 1.1 に含まれるヘッダファイル , ツールなどが 必要になります ( 余談て、すが MS ー C Ver. 6.0 以上て、は PM アプリケーション開発のための ツールが付属するそうて、す。まだ確認はし ていませんが ) 。 デバッガについてはマイクロソフト CodeView, Symbolic Debuger を用いま ロ回ロ 46 CMÅGAZINE 19 3
C-MAGA 援ライプラリ「キー入力が簡単」 , プリンタ 398000 円 出力コントロールライプラリ「印字が簡単」 , 問合せ先松下電器産業国際商事本部 ウインドウ処理画面開発支援ライプラリ「ウ 〒 105 東京都港区浜松町 2 ー 4 ー 1 世界貿易 インドウが簡単」 , グラフ描画処理画面開発 センタービル TEL 03-435 ー 4556 支援ライプラリ「グラフが簡単」の 4 種類。 32 ビットバス対応 RAM ボード く価格〉キー入力が簡単 Ver. 1 25000 円 メルコ Ver. 2 28000 円 印字が簡単 Ver. 1 8000 円 ・ MS マウスドライバ対応のインタフェイス メルコは , PC ー 9801RA 内部の 32 ビットデ Ver. 2 18000 円 ライプラリをサポート ウインドウが簡単 Ver. 1 タバスに対応した VXM(Virtual 28000 円 ・ EGC ( 拡張グラフィックコントローラ ) 対 Extended Memory) ポード「 MRC シリーズ」 グラフが簡単 Ver. 1 14000 円 く対応機種〉 PC ー 9801 シリーズ 応により高速描画を実現 ( PC ー 9801 シリー を発志した ノし、 0 く対応言語〉 MS-C, Latteice C ズのみ ) 「 MRC シリーズ」は , 標準添付の「 MELWAR ・すべての関数のソースコードを添付 E Ver. 4 」により , 仮想 8086 モードとして使 問合せ先ェフ・エー・、 ンステムエンシニ く対応言語〉 QuickC Ver. 1 . 1 および MS-C 用て、き , バーチャル EMS メモリとして利用 アリング て、きる。また , 各社の RAM ポードを混用す 〒 790 愛媛県松山市北藤原町 1 ー 26 Ver. 4.00 / 5.10 く価格〉 SYLPH 各 28000 円 ることがて、きる。 TEL 0899 ー 31 ー 2886 く価格〉 MRC -2000 (2MB) 59800 円 問合せ先シンフォニ C 詳醗発ツール「 C PAD 」か MRC ー 3000 (3MB) 〒 141 東京都品川区東五反田 1 ー 4 ー 1 84800 円 バージョンアップ TEL 03 ー 443 ー 0291 問合せ先メルコ 〒 460 愛知県名古屋市中区大須 4 ー 11 ー 50 オオッカ カミャビル TEL 052-251 ー 8365 並列記述の讎士様をした C コンバイラ 松下電器酸 オオッカ商事は , C 言語開発支援ツール 「 CPAD 」の PC ー 9801 版を 2 月末にバージョン アップする。今回のバージョンアップによ 松下電器産業は , オランダ Parsec 社のト り , 処理容量が増大し , また C 言語ソースの ランスヒ。ュータ用の並列処理システム 己述方法に柔軟に対応てきる。 , 印刷時のタイトルを自由に設定ぞ 「 Par. C SYSTM 」を輸入・販売する。 きるなど , ユーザの要望を盛り込んている。 「 Par ℃ SYSTM 」は , 標準 C 言語のスーパ ーセットに基づいている。小数の言語拡張 さらに , Ver. 2 購入ユーザを対象としてソー (par, alt, channel) により , パラレルプロ スを公開する ( オプション ) 。 グラミングに欠くことのて、きない基本的な PC ー 9801 版以外についても , 随時バージョ C 讎醗発支援ツール 機能を提供する。また , 算術演算ライプラリ ンアップしていく予定て、ある。 工フ・エー・システムエンジニアリング は , アセンプラて、独自に記述したものて、 , く価格〉 CPAD Ver. 2 85000 円 ・システムエンジニアリング 問合せ先オオッカ商事 高速なコンパイラを実現している。 . 工 . フ は , C 言語開発支援ツール「簡単シリーズ」を 〒 760 香川県高松市西内町 5 ー 14 大塚ビル内 く価格〉 Par. C SYSTM ()C 対応 ) 398000 円 発売した。本シリーズは , 入力画面開発支 Par. C SYSTM (SUN 対応 ) TEL 06 ー 634 ー 2563 ー〃 MRC -380 二二ロ V ー代リ E 砂 " , 地社 C-MAGA News Square 133
00 最新ー 2 入門 2 の戦略は , それほど際立ったものとはいえ ために , OS / 2 には 386 の機能をかなり取り込 力のハードウェアのアーキテクチャの違い ず , どちらかというと IBM のほうが熱心て、 から移植に時間がかかってしまう。開発の もうとしているのがわかる。その最たるも ある。 386 のライセンスは IBM 以外には提供 段階から日本側の意見を取り入れ , 移植を ののひとつに仮想 8086 モードがある。これ されていない。 IBM からみると , 今後 CPU 短縮化するといったマイクロソフトの発表 は , 386 の実行時にひとつのプロセスとして はインテルの 386 を使い , OS はマイクロソフ 8086 モードを起動させることがて、きる機能 もあったが , 実際にはそう簡単にはいかな トの OS / 2 を使うという図式が成り立つ。そ て、ある。 OS / 2 て、は , これを互換ポックスと のため , IBM としてはこれらのものは最優 呼んて、いる。この機能をソフト的に行うこ ードウェアの問題は本来の OS / 2 の性能 先に押さえたいと思っているだろう。マイ とは不可能て、はないが , 非常にたいへんな を損なうことなく , それを引き出すような クロソフトも OS/2 については , IBM と共同 作業になるのはたしかて、 , 実際 286 版 OS / 2 て、 ードウェアが求められていることて、ある。 て、市場を押し広めていく方針のようだ。今 は 286 そのものが 86 モードをもってはいる ところが現在の OS / 2 は 286CPU をターゲ 後はインテルー IBM ーマイクロソフトの 3 社 が , 286 モードから 86 モードへの移動はソフ ットとしているための結果て、あり , 386 を使 がともに協調しあいながら OS / 2 を普及させ ト的に解決せねばならず , かなり苦労して っても 286 の機能しか使っていないのて、あ ていくということになるてあろう。 ード的にサポ る。 OS / 2 が 386 マシンて、起動されると , 386 オ・カす , これ力すハ いるようだ ートされていれば , ソフト側て、その機能を CPU の機能てある 286 モードにしてしまうか 制御しながら使用するだけて、簡単に扱える。 らだ。これは先ほども述べたように ( 当たり しかし , 問題なのはハードの開発に先行 386 版 OS / 2 Ver. 2.0 の開発を急ぐわけだ。 前だが ) , 現在の OS / 2 が 386 の本来の機能を を許してしまっているソフトの開発てある。 使えないことを意味しており , 386 マシンの インテルー旧 M ーマイクロソフト 現在の OS / 2 にはまだまだ機能改良が必要 ューザには , なんとも , もったいない話て、 て、 , 時間をかけながら徐々に機能の付加お 互換ポックスはたんに 386CPU に 8086 モー ある。 よび改良が行われていくだろう。今はそれ ドをサポートしたわけて、はなく , 86 系 CPU こうした問題や , 386 用 OS / 2 も含めて本当 が始まったばかりて、ある。 OS / 2 Ver. 1.0 て、 に下位の CPU と互換をもたせているインテ の OS / 2 の真価を発揮するバージョンの開発 は OS/2 の基本版 (Standard Edition) が提 ルの一貫したポリシーに基づいている。 386 はかなり先になることが予想される。おそ 供されたが , その基礎となるものは MS-DOS には , 8086 モードと 286 モードがサポートさ らくハードウェアの問題も含めて 3 年くらい からもってきたものばかりて , 当初は 286CPU の年月を費やさねばならないだろう。 れている。 を想定していたため , 386CPU の機能を使い 余談になるが , 386 に対するインテルの思 OS / 2 Ve 「 . 1 .0 / 1 . 1 / 1 .2 きっていない 惑は UNIX にも求めることがてきる。もし , Ver. 1.1 て、は , プレゼンテーションマ不一 OS / 2 のバージョンについては , もう少し UNIX が動いているときに , DOS をひとつ ジャ (PM) といわれる一種のウインドウ指向 のプロセスとして起動させ , データを自由 つけ加えねばならない。 1.0 と 1.1 の違いは 型シェルが付加されただけなのだが , だか にやり取りすることがてきるならば , いろ 明らかにあったが , 1.1 と 1.2 の違いについ らといって Ver. 1.0 と 1.1 が同じかというと いろな UNIX の中て、も際だった特長をもたせ ても明白て、あり , それらの詳細については そうてもない。これはプログラムをつくる ることがてきるのて、ある。これは , 386 を販 いずれ解説するつもりている。しかし , バ うえては非常に困ることだ。しかも , アプ 売する際セールスポイントになる。 UNIX に ージョンが新しくなるにつれて , いろいろ はさまざまなバージョンがあり , さまざま リケーションプログラムとのインタフェイ 機能が拡張されてきているのて当然といえ スを定める API にいたっては , 漢字 API の統 な機種て、動いている。そのため , 販売する ば当然の話だが , これてはプログラマは困 側としては , たんに UNIX だからといって売 ってしまう。このような状況て OS / 2 が普及 ーを含め , まだ決定していない項目があり , れるものて、はない。そこて , 386 の登場が意 各ハードメーカーの OS / 2 は微妙に異なって していくとはとうてい思えない。ましてや , 味を , もってくるのてある。これを , インテ OS / 2 の Ver. 1.2 が 1990 年の秋には日本て出 しまっているのが現状だ。 ルは最初から意図していたものと思われる。 荷されるかもしれないのに , 今あえて Ver. 1.1 忘れてならないのは , ファイルシステム インテルは , CPU の開発販売を行う一方 を購入するユーザはいるのだろうか。まだ が劇的な変化を目指していることだろう。 て、 , 386 搭載のマシンを開発販売しているの まだ OS / 2 の使用を安心して勧められる状況 それは , おそらく Ver. 2.0 のときにはじめて てある。そのマシンの OS には , UNIX が搭 てはないようだ。 本来の姿がみえてくるように思われる。 載されている。そして最近て、は , UNIX の販 著者の個人的な推測ては , OS / 2 Ver. 1.2 日本 <Ver. 1.1 が出荷されるときには , ア 売を本格的に行う旨の発言があった。 あたりから本格的に動いていくとみている メリカてはもう Ver. 1.2 が出荷されている。 舌を OS / 2 に戻すが , インテルにおける OS / のて , 興味をもっている読者の方には Ver. 1.2 この地域差の問題も大きい。日本とアメリ 特集最新 OS / 2 入門 31 OS / 2 の一 一三ロ
を必要としない。メインメモリはおよそ 30 K バイト弱を使用する。これは , 機種ごとに 必要なライプラリモジュールしか登録しな いとのことて、ある。 MS-DOS Ver. 3.3 から 添付されているこのグラフィックの稼働は , 当然ながらそれ以後のバージョンて、ある 3.3 A , 3.3B て、間題なく動くが , 実際には Ver. 2.11 以降ならば稼働することを確認し ている。またエプソン製機種て、も間題ない ことも確認ずみて、ある。 ただし , Ver. 3.3A と 3.3B て、は , グラフィ ックのドライバとライプラリが変更されて いる。これはドライパファイルとグラフィ ックライプラリ間の変更て、はないかと思わ れる。いくつかのサンプルプログラムも問 題なく動作している点からも , 実用上の間 題はないはずだ。 グラフィックコマンドの種類 MS-DOS Ver. 3.3 からやっとグラフィッ クコマンドが標準サポートされるようにな り , ューザアプリケーションのなかから言 語レベルて、自由に使えるようになった。す べての関数を表 1 の一覧表に示すが , この 表からもわかるとおり , 円や三角形または 長方形などのような簡単な図形ならば , す ぐにて、も描くことがて、きる。これらは C 言語 ( QuickC または MS ー C のみ ) やアセンプラか らも呼び出しがて、きるのて、 , BASIC なみの 操作環境が整ったともいえる。 グラフィックの基本関数としてはものた りないが , ホビー用には少なめの機能のほ うがわかりやすいといえるかもしれない 各関数の詳細な内容については , TMS-DOS Ver. 3.3B プログラマーズリファレンスマ ニュアル V01.2 』の第 4 章を参照していただ なお、グラフィックについてのマニュア ルの記述は , Ver. 3.3 と 3.3A が同一て、あ る。 Ver. 3.3B て、は内容が多少改善された が , ひとつひとつの関数の機能が説明され ているだけて、 , 作り方が明記されてはいな い。そのほか Ver. 3.3 と 3.3A て、は , 指定パ ラメータの値が正確に記述されていない この値はおそらくボートナンバーて、あろう とか , プレーンナンバーて、はないかと推測 ◆ [ 表 1 ] グラフィックコマンドの種類 ・初期化関数 グラフィックの開始 グラフィックの終了 仮想 V 日 AM の生成 ・環境設定関数 表示モードの設定 描画プレートの設定 表示プレートの設定 バレットの設定 ビューポート領域の設定 フォアグラウンドカラーの設定 バックグラウンドカラーの設定 ボーダカラーの設定 表示スイッチの設定 表示領域の設定 中断処理ルーチンの設定 , 描画関数 画面消去 点の描画 線の描画 三角形の描画 長方形の描画 台形の描画 円の描画 楕円形の描画 閉領域の塗りつぶし グラフィックイメージ取得 グラフィックイメージ設定 領域転送 領域移動 画取得関数 八一ジョンの取得 プレーン数の取得 表示モードの取得 描画プレーンの取得 表示プレーンの取得 パレットの取得 ビューポート領域の取得 フォアグラウンドカラーの取得 八ックグラウンドカラーの取得 ボータカラーの取得 表示スイッチの取得 指定座標の取得 表示領域の取得 中断処理ルーチンの取得 関数 0 関数 1 関数 2 関数 3 関数 4 関数 5 関数 6 関数 7 関数 8 関数 9 関数 10 関数Ⅱ 関数 12 関数 13 関数 14 関数 15 関数 16 関数 17 関数 18 関数 19 関数 20 関数田 関数 22 関数 23 関数 24 関数 25 関数 26 関数 27 関数 28 関数 29 関数 3 ロ 関数 31 関数 32 関数 33 関数 34 関数 35 関数 36 関数 37 関数 38 関数 39 関数 40 しなければならない箇所がいくつかあった。 そのためか , MS-DOS Ver. 3.3B のマニュ アルて、は , そのあたりがわかりやすくなっ ている。しかし , このライプラリを C 言語て、 使用するには , さらに各関数の構造体を宣 言しなければならない ◆ C 言語からの呼び出し方法 このグラフィックを C 言語て、使用する場 合 , その操作はほとんど決まりきった手続 きて、処理されている。 こて、はその手続き MS - DOS プログラミング入門 C プログラマのための MS ー DOS プログラミング入門 73 たい する可能性があるのて、 , 注意していただき そのため , 予期せぬなんらかの事態が発生 を除いて一度も使用していないものがある。 に定義されている構造体には , 必要なもの ッダファイルを呼び込んて、もらいたい。 List2 グラムの最初には , 必ず include 文て、このヘ してある。したがって , 開発する C 言語プロ る。各関数の構造体は , List2 にすべて定義 前に関数に数値の設定をしておく必要があ この文て、指定関数を実行させる ( ゴよ , その 手続きて、あり , 変史を加えてはいけない 行させることがて、きる。この文は決まった 数値を変えることて、 , いろいろな関数を実 おり , この文は関数 0 を実行している。この FUNC CO] のなかの 0 は関数 O をさして long)(int far * )&GrpData); (*(GL ->FUNC CO] ))((unsigned びに必す実行しなければならない 。なお , 次の文は関数を実行させるた ム上て、必要に応じて実行の順番を変えても こにおいただけて、ある。ューザのプログラ 最初に実行させておくだけて、よいのて、 , わけて、はない。簡単なプログラムならば , 関数 3 , 11 , 14 はこの位置に固定されている 考にしてほしい は各関数によって指定されており , 表 1 を参 頻繁に使っているためて、ある。個別の機能 らない。これは , 内部処理て、 far 呼び出しを うなら , オプション「 /Ze 」をつけなければな し , MS-C Ver. 3.0 のスモールモデルを使 が , MS ー C て、も何の変更もせずに動く。ただ サンプルプログラムは QuickC て、作成した ないようだ なく動くということだが , 実際はそうて、も 正しければ , どのような言語て、もまちがい によると , AX , BX レジスタに設定する値が NEC インフォメーションセンターの説明 て、はそのままのソースがうまく動作しない および MS ー C て、は不具合はないが , TurboC まざまな C 言語て、使用してみると , QuickC プロトタイプは List1 に記述した。実際にさ ルーチンをプロトタイプとして使用する。
ミングインタフェイス (FAPI) と呼んて、お り , BIND という OS/2 用のユーティリティ を使えば FAPI て、作成された DOS 用のアプリ ケーションプログラムを OS / 2 て、も稼動させ ることが可能になる。ただしこれは , MS- DOS ( 互換ポックス ) のアプリケーションを OS / 2 上て、動かすことに重点がおかれてお り , OS / 2 の本来の機能を発揮させるものて、 はない マイクロソフトの C コンパイラ MS-C Ver. 5.1 は OS / 2 上て、コンパイルとリンクを 行うことがて、きる。 MS-C のパッケージには DOS 用と OS / 2 用が組み合わされて販売され ており , OS/2 用プログラムの開発はもちろ んこの MS ー C を使って OS / 2 上て、もて、きる が , DOS 上て、も可能になっている。 OS/2 の ライプラリを使えばよいのだ。なお , この OS / 2 用のライプラリは OS / 2 のソフトウェア 開発ツール (SDK) にしか提供されていない のて、注意を要する。ちなみに , QuickC て、は OS / 2 用アプリケーションの開発は不可能て、 ある。 リムレモードと プテクトモード 80286 / 80386CPU には , リアルモードとプ ロテクトモードというふたつのモードがあ る。これについては次項て、説明するが , 簡 単にいえばリアルモードは 32 ビット CPU を 16 ビット CPU にして使うモードて、 , プロテ クトモードは複数のプロセスを動かすため の機能を付加したモードといえる。さらに 単純に図式化すれば MS ー DOS はリアルモー ドを ,OS/2( や UNIX などのマルチタスク OS ) はプロテクトモードを利用する。したがっ て , 286 / 386 マシンがあっても , MS-DOS を 動かしているかぎりて、はプロテクトモード が使えないのて、 , たんなる高度 8086 マシン て、しかない。 OS / 2 はプロテクトモードを利 用するために , 286 の機能を使うことがて、き るし , 386 に対応て、きるようになれば DOS 互 34 CMAGAZINE 19 3 MS-C 換ポックスて、はリアルモードを利用するこ ともて、きる。 286 て、はプロテクトモードに入 ると , リセットしないかぎりリアルモード には人れないのて 286 の DOS 互換ポックスは ソフト的に実現するしかないが , 386 ならば リセットすることなしにリアルモードに移 ることが可能だし , 仮想 86 モードが追加さ れたのて、 , 386 上から 8086 モードを利用する ことがて、きる。 このように OS / 2 て、は , このふたつのモー ドを使用て、きるが , いうまて、もなくプロテ クトモードのほうが OS / 2 の本来の機能をは るかに発揮させるプログラムを作ることが て、きる。 また , このモードて、は , コンパイル / リン クそして実行という MS ー DOS 上て、同様の操 作を行うスタティックリンクという一般的 なプログラムの作り方以外に , 先に述べた OS / 2 本来のダイナミックリンクという方法 て、プログラムを作ることがて、きる。 リアルモードて、動くリアルモードプログ ラムの作成については , 作り方は同じだが , 呼び出す関数がいくっか異なっている。そ れゆえリアルモードつまり DOS 互換ボ、ツク スは , そこて、プログラムの開発を行うのて、 なく , 既存の DOS プログラムを動かすため に使うほうが適切て、あろう。したがって , DOS 互換ポックスを用いる際 , どのような プログラムが動くか , みきわめておく必要 がある。 実際には , 日本電気の OS / 2 Ver. 1.1 バ ージョンと PC ー 98RA2 十 80MB を基本にして 調べた。この Ver. 1.1 滝バージョンは , 正式 に出荷されるものと多少の違いがあるよう だ。筆者が本特集を書いている時点て、は , まだ出荷されていないのて、詳しいことはわ からない 0 S / 2 上での開発 OS / 2 上て、のプログラム開発は , マイクロ ソフトの MS-C Ver. 5.1 を使うのが一般的 て、ある。そうて、なければ , 日本電気より出 荷されている Ver. 5. IA を使う必要がある。 現在 , 市販されている MS ー C Ver. 5.1 に は , MS ー DOS 上て、開発を行う今まて、の MS ー C と OS / 2 上て、コンパイルが可能な MS ー C が同 じパッケージに組み込まれている。したが って , 使用する際はこれを使い分けねばな らない。もちろん OS / 2 て、コンパイルとリン クをする以外に MS ー DOS 上て、 OS / 2 用のプロ グラムを作ることもて、きる。どちらにして も使うライプラリは , OS/2 用のものを使わ ねばならない。これは余談になるが , MS- C Ver. 5.1 をインストールするときに , フロ ッピーディスクをそのままコピーしてはい けない。 MS-C Ver. 5.1 には , 必ずインス トール用のプログラムが添付されており , そのプログラムを使用しなければならない ディスクからそのままコピーしたものて、は 結合ライプラリの作成がて、きないために 「ライプラリがない」というメッセージが 出て , 新たなライプラリ名の入力待ちにな ってしまう。 もちろんリンカも OS / 2 用が提供されてい る。 OS/2 におけるプログラムの開発は , のように環境整備が非常に重要になってく る。しかも , このような開発に関する環境 整備の情報が , OS / 2 のマニュアルにも MS -C Ver. 5.1 のマニュアルにもほとんどな い。試行錯誤の世界て、ある。バージョンが 変われば環境整備もほとんどやり直しに近 くなってしまうのて、ある。 実行ファイルのヘッダい MS-DOS 用のプログラムを OS / 2 上て起動 させると , 次のメッセージを出力して OS/2 のプロンプトに戻ってしまう。 SYS1107 : プロセスを正常に終了することてきません また , OS / 2 用のプログラムを MS - DOS 上 て、実行させると , やはりメッセージを出力 して DOS のプロンプトに戻ってしまう。 のとき , 出力されるメッセージがいくっか 異なっている。 MS ー DOS て、は使用て、きません This program cannot be run in DOSmode. This program requires OS/2 Presentation Manager. これは OS / 2 を PC ー 9801 シリーズに移植し 日本語化するときに生じたものと思われる。
MS-DOS プロクラミンク 入門 本誌創刊と同時にスタートした連載も , いよい ラフィックライプラリの概略を説明し , 第 2 部で は最新の MS - DOS Ver. 3.3B を取り上けて よ今号で最終回をむかえることになった。そこ で , 最後にふさわしく今回は今までとは異なっ みたい 0MS-DOS Ver. 3.3B は昨年 12 月にリ たものを , ということで最新 MS - DOS 情報を リースされたはかりである。どのような変更か 2 部構成でお届けしよう。まず第 1 部として , MS なされているか , 読者にとっても興味津々であ -DOS Ve 「 . 3 .3 から新たにサポートされたグ ろう。 ことばを耳にしているユーザも多い 己しておこう。 かと思う。だが , アクセスプログラムは基 以上のような改善が望まれる点を抱えて PC -98 のグラフィック 本的にアセンプラて、開発する以外に手段が はいるが , GLIO をサポートするよりもはる ないのて、 , アセンプラの知識が必要だった。 かに利便性が高いのは事実て、ある。 こて、 もちろんなかには汎用ライプラリとして提 MS ー DOS の Ver. 3.3 から新たな機能のひ は , MS ー DOS Ver. 3.3 , 3 .3A, そして 供されているものもあり , アセンプラの知 とっとして , グラフィックライプラリがサ Ver. 3.3B と , それぞれのグラフィックライ ポートされ , MS-DOS ューザはグラフィッ 識が必ずしも必要というわけて、はないが , プラリの概略を説明していこう。 それとて満足て、きるものは非常に稀なのが ク開発が容易に可能になった。関連するフ ◆グラフィックドライノヾの登録 実情て、ある。 ァイルは , 次のふたって、ある。 今回 , 日本電気からリリースされた MS ー ドライパファイルは , CONFIG. SYS ファ ・グラフィックドライバ GRAPH . SYS DOS Ver. 3.3 のグラフィックライプラリに イルのなかて、登録するか , ADDDRV/DEL ・グラフィックライプラリ より , GLIO をサポートするような煩わしさ DRV コマンドて、登録および削除するか , ど GRAPH . LIB を避けることがてきるようになった。しか ちらかの方法によらなければならない 従来は BASIC の GLIO という , グラフィッ も , 利用可能な言語が複数サポートされて CONFIG. SYS ファイルて、登録する場合は , クライプラリを MS-DOS から強制的に使う いる点も利便性を高める理由のひとつにあ 立ち上げドライプのルートディレクトリに のが一般的だった。そのためには簡単なア げられる。だが , 残念ながら現段階て、は、 GRAPH. LIB が存在していなければならな クセスプログラムの開発が必要て、、ほとん このグラフィックライプラリは学習用 , ま どのプログラムはユーザまかせて、あったり , い。登録されると、、グラフィックドライバ たはホビー用と認識したほうがよいかもし または , 雑誌などに掲載されていたものを が使用可能て、す〃というメッセージが表示 れない。機能が少ないこともあるが , それ もっともア 流用していたにすぎなかった。 される。 以上に処理速度が遅い。また , 実際の使用 ADDDRV コマンドて、登録する場合にも , クセスプログラムの作り方にもよるが , ラ イプラリだけを使うならプログラムはかな にあたって , マニュアルを一読しただけて、 カレントディレクトリに GRAPH . LIB がや はグラフィックライプラリを使ったプログ この場 はり存在していなければならない り小さくすることがて、きるだろう。おそら ラムが作れないことが判明した。マニュア 合い登録されると上記のメッセージが出 く 100 行前後て、ある。 ルの項目の冒頭に例題として掲示されてい 力される。 GLIO をサポートして使用することはかな る C 言語のサンプルプログラムがあるが , そ いずれの場合においても , 一度登録され り以前から行われていた。また , さまざま こにも初歩的なミスティクがあったこ ると , それ以後はグラフィク専用ファイル な書籍や雑誌などて、解説されており , GLIO 72 CMAGAZINE 19 3 C プロクラマのための 最終回最新 MS OS 情報 秋津彰文 尋 1 ロ
月マカ、、、 3 月ロ万 今世界のスタンタード。 すべてを備えた究極の C コンイラ。 TURBO C 20 ÅR. お 90 0 ・適応機種 . NEC PC -9801 シリーズ ()A 、 XL 、 RL2 、 本当の使い心地の良さを実感させる統合開発 ■ TURBO C2.0 ・主な特長 RL ハイレゾルーションモード : LT を除く ) / EPSON 統合環境こ咼性能ソースレベル・デヾッガを内蔵。 環境。 13 , 000 行 / 分というコンパイルスピーそして、 286 ・ 386 シリーズ / 各種 AX マシン / 富士通 FM - R ・ 1 分間 / 13 , 000 ステッフ。のコンヾイル速度を実現。 統合開発環境中に内蔵された高性能ソースレベ シリーズ / 松下 PanacomM シリース ・付属のライプラリを TC. EXE / TCC. EXE 共通 ル・テパッガ。 Turbo C2.0 は、洗練されたプロフェッ ・・ 29 , 800 円 ・価格 : TurboC2. O ( 甼藷磊帋つ て、変換作業なしに使える、真の統合開発環上実現。 ショナルなプログラム開発にもはや欠かせない、 C ・・ 59 , 800 円 ・エテタのバッフアとして、最大 64KB の EMS メモリ、 TurboC2.0ProfessionaI•・ コンパイラのワールド・スタンタードですこの Turb 。 ・ 29 , 800 円 ランタイ、ライプ もしくは GVRAM を使用することが可能。 Turbo C 2.0 C20 に、従来の PC -980 レリース用に加え、今回新た ラリ・ソ・一スコード ※この価格に、消費税は含まれていません ■動作環境 : MS - DOS Ⅵ 21 以上 / メモリ 640K 日 に富士通 FM - R シリーズ用および世界標準規格・ ※ TurboC2 ℃ profession は P098 / P0286 ・ 386 版のみのサホートとなります AX マシン用の 2 パージョンがラインアンプされました TURBO C PROFESSIONAL PRO はに第感 PC98 ※ AII BO rland Products are trademarks 0 「「 e stered tradema 「 ks Of Borland lnternational, lnc. 0 Borland lnternational.lnc. ※その他、商品名は一般に各社の商標てす 株式会社ホーランドシャパン 〒 107 東京都港区南青山 7-8-1 小田急南青山ビル TEL. 03 ー 486-1400 代 ー←製ルの iFiiIüー 定価 980 円 ( 本体 951 円 THE POWERFIJI OPTIMIZING ( COMPIIER:INCIUDES THE POWERFUI NEW TURBO ÅSSEMBLER AND REVOIUTIONARY N?W TURBO DEBUC'GER T' し市 0 C 2.0 has the Best Of evervthtng ~ ・—lnciudes the comp ⅱ曾 . editor, and debugger. 「 0 ed intO one .lntegrated source- V 引 debugger 給 yo リ step code, watch varjables. and set breakpoints. DevelOP and debug production-quality COde ⅲ all six m 日 110 Ⅳ mode\s assembler suøport EM S suppOrt fO 「 editor : Faster than ever; compiles and links 20 ー 30 % faster than TurbO C を 5 : Over 430 tibrary f リ nc 朝 0n9. 、 clu 朝 ng a CO 1 麒 e graphtcs librarv : Make facility with automatic dependency checking Support fO 「 T リ市 0 Asse 「 n e 「印 )d 市 0 Debugg 可・ ・レチウインドウ環境での快適なラゞッグを実現 ・製品に関するお問い合わせは、総販売元株マイクロソフトウェアアソシェイツ TEL. 03-486-1411 までお願いします、 T 4 91 1 4 5 2 5 0 5 9 8 5 雑誌 14325 ー 3 ◎日本ソフトパンク 凸版印刷 Printed in Japan
CGRAPH . FD は , プログラムごとにインク ルードしなければなりません。 C て、はすべて のサププログラムが関数てすが , FORTRAN て、は関数と CALL 文て、呼び出すサカレーチン とがありますのて、注意してください コンパイル方法は , 以下のとおりて、す。 fl 3d. for /link fgraph. lib fl font. for /link fgraph. lib S 0 Ver. 5.1 で するには 最初に述べたように , QC のライプラリは そのまま MS-C Ver. 5.1 て、使えますのて、 , QC の標準ライプラリを入れ換えてそのまま 全部使う方法がいちばん簡単てす。しかし , スタートアップルーチンやライプラリソー スが公開されていないのて、 , MS ー C て、それら を修正して使っている場合には , 現在使っ ているライプラリに QC のグラフィックライ プラリだけを加えたいのて、はないかと思い ます。 FORTRAN のときと同じようにして MS ー C のグラフィックライプラリを作成する ことがて、きます 0FORTRAN の場合とは違 って , 必要なモジュールは少なくてすみま す。 QC の GRAPHICS. LIB に qcwindow と aDBswpflg 以ド 4 つのグローバル変数を定 義してコンパイルしたモシュールをつけ加え るだけて、 , MS ー C 用のグラフィックライプラ リが作成て、きます。 実際の作業手順を説明します。 ・ QC の標準ライプラリから qcwindow を取 り出します。この qcwindow はどのメモリモ デルのライプラリから取り出したかにより , メモリモデルに依存します 6 [ 例 ] lib slibce * qcwindow; この例て、取り出した qcwindow はスモール モデルてしか使えません。 名を削除しておきます。 値演算に依存したデフォルトのライプラリ ません。 / ZI オプションて , メモリモデルや数 このモジュールはメモリモデルに依存し cl /c /ZI global. c パイルします。 ・グローバル変数を定義した global. c をコン ・必要に応じた形のライプラリを作ります。 lib graphics 十 qcwindow 十 global, , sgraph; qcwindow をつけ加えたライプラリは , メ モリモデルに依存します。メモリモデルに 依存させないようにするには , qcwindow だ け別にしておき , コンパイルするときに次 のようにするとよいて、しよう。 cl ー LM f00. c mqcwindow /link graph. lib MS ー C て、グラフィック関数を使ったプログ ラムをコンパイルすると , fatal error C1001 : lnternal Compiler Error が発生することがあります。これはウイン ドウ座標関係のいくっかの関数が , graph. h て、マクロて定義されており , それが関数の 引数に関数が使われるような形て、展開する ために , コンパイラが処理しきれない があるからて、す。これに対処するには , マ クロて、定義されている関数を自分て直接ソ ースに , 引数となる関数を一度変数に代入 して , その変数を引数とするような形て、記 述すれば工ラーを回避て、きます。しかし , この方法ては QC 用に書かれたソースをいち いち書き直さなければならず , よい方法と はいえません。 GRAPH. H のマクロ定義を 次のように書き直す方法をおすすめします。 例として関数 ellipse w を使いますが , ほ かの関数も同様にして書き直してください #ifdef C51 国 # define ellipse w(control,wxl, wyI,WX2,wy2) {struct xycoord xy1,xy2; ¥國 xyl= getviewcoord w(wxl, wyl); xy2= getviewcoord w(w x2,wy2); 國 ellipse xy(control,xyl, xy2); } 國 #else 国 #define ellipse w(control,wxl, wyI,wx2,wy2) ellipse xy(control, getviewcoord(wxl,wyl), getviewcoo+d(wx2,wy2)) 國 #endif 國 このようにしておけば , QC と MS-C て、同 じ GRAPH. H を使っても QC て、コンパイルす るとき余分なコードを生成しなくてすみま す。 MS ー C てコンパイルしてエラーが発生し たときには , /DC51 を使いします。 さ、に て、きるだけ MS-FORTRAN Ver. 5.0 のグ ラフィックライプラリの仕様に合わせて作 成したのて , 将来日本 <FORTRAN Ver. 5.0 が発売になったときには , わずかな修正 て、移植て、きると思います 0FORTRAN Ver. 5.0 て、は構造体の定義がてきるように拡張さ れているのて、 , C とのミックスドランゲージ プログラミングがしやすくなっています。 QC には代替数値演算が使用てきないの て、 , グラフィックライプラリも代替数値演 算用にはつくられていません。したがって , こて、作成したグラフィックライプラリも 代替数値演算て、は使えません。しかし , プ レゼンテーショングラフィックとウインド ウ座標を除いた ,GRAPHICS. LIB に含まれ る多くの関数は数値演算ライプラリに依存 しないようて、す。 FORTRAN からは難しい てしようが , MS ー C からは制限っきて代替数 値演算ても使えるのて、はないかと思います。 この QC のグラフィックライプラリのよう ミックスドランゲージプログラミング の丁・法を用いると , 異言語間てライプラリ の共有化をすることがて、きます。たとえば , FORTRAN て、誓かれた数値演算や構造解析 などのライプラリを C から使ったり , C て、書 かれている機器制御プログラムを FOR TRAN からも使えます。まだまだ 、ックス ドランゲージプログラミングを活用してい る方は少ないのて、はないかと思いますが , ソフトウェア資産を少して、も有効に使うひ とつの丁・段になるのてはないかと思います。 ( 編注 : 本文中のリストは改行マーク ( 國 ) までで一行です。入力時に注意して下さい。 ) ミックスドランゲージプログラミングの手法 63
ミックスドランケージ プロクラミンクの手法 MS-C S-FORTRAN て uickC の クラフィッイプラリを使う 田倉達夫 FORTRAN を使っていて , グラフィック描画したいと思っている方は多いのではな いかと思います。 MS-FORTRAN Ver. 4 . 1 にはグラフィックライプラリがない ので , アセンプラや C で自作するか , サードバーティーのグラフィックライプラリを購 入しなければなりません。マイクロソフトの言語製品は , ミックスドランゲージプログ ラミングがありま異言語を使ってプログラミングができます。この手法を用いれば , ほかの言語のライプラリを FORTRAN で使うことができるはすです。最近発売され た QuickC r. 2.0 ( 以下 QC と呼びます ) のグラフィックライプラリを MS ー FORTRAN r. 4.1 で使い , いちおう満足する結果を得られましたので , その手法を発表しましよう。 FO 彳 RAN 用グラフィック ージモデル用て、す。 QC にはグラフィックライプラリとして ラ、ラリの作成 、、 GRAPHICS. LIB" と、、 PGCHART. LIB" 必要なものは QC だけてす。マクロアセン ミックスドプログラミング手法によって が添付されています。、 VGCHART. LIB" プラや特殊なツールなどいっさい必要あり QC のプレゼンテーショングラフィックを MS はプレゼンテーショングラフィックてすが , ません。これから作成するライプラリはラ -FORTRAN Ver. 4.1 て、使用するには , 構 最初に述べたような理由て、今回は使いませ 造体がネストになっているのて、 , 無理だと fgraph. c 判断しました。 1 : また , MS ー C Ver. 5.1 を使っている方 2 : 事グラフィックライプラリ用インターフェース 3 : 本 M S ー F 0 R T R A N V e r . 4 . 1 0 も , QC て、追加されたプレゼンテーショング 4 : まグラフィックライプラリ : Q u i c k C 2 . 0 89 / 11 / 26 By Tatsuo Takura ラフィックやウインドウ座標を使いたいの 7 : 本 qcl -A し - 幻 -c -Gs -W3 fgraph. c 8 : て、はないて、しようか ? 基本的には , QC の 9 : #include く graph. h> 10 : #include く string. h> 標準ライプラリを MS ー C に流用することがて、 12 : short near __aDBswpflg きるのて , ライプラリをそっくり入れ換え 13 : short near -_aDBswpchk : 0 : 14 : short near __aDBscrnod ニ -1 : 15 : 曲 0 「 t near _aDBdoswp れば MS ー C からて、も QC のグラフィックライ プラリを使うことがてきます。しかし , な 18 : void far -f-setvieworg(short x, short y. struct xycoord far *S) んらかの事情て MS ー C の標準ライプラリをそ 22 : のままにしておいて , QC のグラフィックラ 23 : } 24 : イプラリを使いたい場合には , 多少手を加 26 : void far short y, struct xycmrd far *S) えなければなりません。 -getviewcoord(), y) : 本 3 = FORTRAN 用のグラフィックライプラリ 30 : を作成する方法の一部を流用することによ 32 : void far _f_getphysccm•d(short x, short y, s truct ・ xycoord far *S) り可能になります。 はじーに List 1 setvieworg(). y) : ミックスドランゲージプログラミングの手法 57