処理 - みる会図書館


検索対象: 月刊 C MAGAZINE 1989年12月号
56件見つかりました。

1. 月刊 C MAGAZINE 1989年12月号

0 「 m on from (ompiler maker ライフボート Lattice C/RT 本製品は「すて、に数多いリソー ス ( 資源 ) を活用て、きる MS-DOS 上て、 , 特別な知識を必要とせず , C 言語・アセンプラて、プログラムが 書ける人なら誰て、もマスチタスク のシステムが構築て、きるような機 能を設け , 即時処理時間が重要な 制御系システムて、も十分対応てき る高速タスク制御機能を備える」 ことをコンセプトに開発しました。 特長 / システム機能 ( 1 ) 開発環境が容易 C 言語またはアセンプラて、書かれ たプログラムを通常の方法て、コン パイルリンクし , 生成した EXE フ アイルをコントロールファイルに 登録するだけて、 , マルチタスクシ ステムが構築てきます。 LatticeC/RT は , コントロール ファイルに登録された情報を基に メモリを確保し , タスク群をロー ディングします。 ( 2 ) MS-DOS の 640KB のメモリ 制限を解決する a. LIM EMS4.0 のサポート コントロールファイルにおいて タスクモードを「マッヒ。ングモード」 に設定することにより , その EXE LatticeC/RT の紹介 製品概要 LatticeC/RT は , 今まて、専用制 御機器に頼っていた「リアルタイム マルチタスク制御」を , 現在のパー ソナルコンヒ。ュータて、実現させる ための開発支援システムて、す。 開発思想 は EMS メモリにローディングさ れ , 実行されます ( 最大 16 個のタス クを EMS 拡張メモリに登録する ことがてきます ) 。 EMS インタフェイスに関するプ ログラム上ての考慮は不必要て、す。 b. トランジェント ( 非常駐 ) ・タ スク機能 コントロールファイルにおいて タスクモードを「トランジェント」 に設定することにより , タスク実 行時にメモリを確保して , ディス クからローディングされ , 実行時 にメモリ解放を行います。初期化 処理タスクや , メニュー制御タス クなど , メモリに常駐する必要の ないタスクに有効て、す。 ( 3 ) 豊富で簡便なタスク間通信機 能を備える a. データの送受信によるタスク 間通信機能 任意の領域のデータを任意タス クに送信することがて、きます。デ ータを受信するタスクは , 任意の 領域にデータを受信てきます。 b. イベントの通知によるタスク 間通信機能 任意のタスクと同期を取るとき は , イベントフラグをセットしま す。イベントはひとつのイベント の待ち合わせと , 複数を同時に待 ち合わせる方法とがあります。 c. コモン領域を使用するタスク 間通信機能 各タスクが共通に参照て、きる領 域を 8KB 有しており , 使用宣言す れば , 自由に読み書きてきます。 ( 4 ) タイムスライス制御機能を備 タスク間の同期処理 , タスク間 通信など , マルチタスクを実現す るための関数をいっさい利用しな くても , マルチタスクのシステム が構築て、きる機能て、す。コントロ ールファイルにおいてタスク属性 を「タイムスライス」に設定するこ とにより , 指定された時間だけ自 動的に CPU の処理時間が割り当 てられ , 並列処理を可能とします。 ( 5 ) マルチタスクのテスト環境を 取り入れた設計 a. マルチタスクのテスト環境を 考慮した設計 MS-DOS が提供する SYMDEB. EXE を , LatticeC/RT が制御する 1 タスクとして登録し , 単体のデバ ッグ作業と同様にデバッグ操作が て、きます ( プレークコマンドを実行 しても , LatticeC/RT が制御する ほかのタスクが影響を受けること なく処理を継続します ) 。 b. バックグランドテスト LatticeC/RT が制御するタスク 群をバックグランドて実行し , フ ォアグランドて MS ー DOS コマンド を実行することがて、きます。この 機能により , コンソールから付属 のデバッグューティリティを起動 させ , システム全体の状況を検証 することがてきます。 6 ) すべてのメモリモデルに対応 Ver. 4.2 て、はすべてのメモリモデ ル (), P, D, L, H) に対応しまし た。プログラムの規模に合ったメ モリモデルて、 , マルチタスクシス テムを構築て、きます。 ( 7 ) 割り込み処理プログラムをオ ール C 言語で記述できる 簡単に割り込み処理を行えるよ う関数を追加しました。それほど 高速性を必要としない場合には , わざわざアセンプラて、記述する必 要がなくなりました。 ( 8 ) マルチタスク環境での高速な 割り込み制御機能 高速の割り込みを実現するため に , 「割り込み処理モード」と「タス クモード」との中間に「フォーク処 理モード」を設けています。 フォーク処理に指定された実行 単位はキューイングされ , ほかの 割り込み処理を優先させることが てきます。この機能により , 複数 のデバイスから発生した割り込み 処理要求を遅延なくサポートする ことがてきます。 9 ) マルチタスクマクロを標準装備 「この部分・タスクはアセンプラ て、」マルチタスクさせたいという場 合のために , アセンプラ用マルチ タスクマクロを付属しています ( 使 用に際してはアセンプラの MASM Ver. 3 以上が別途必要 ) 。 Fig. 2 Lattice C / RT における , タスクのローティング / 実行のメカニズム MS-DOS LatticeC/RT (EDSKNL) タスクー 1 タスク 2 ←バラメータ・ファイル = task-l . exe task-2. exe ←ー sta rt—task file=task-l . exe task= タスクー1 end-task start—task file=task-2. exe task= タスクー2 end-task lnformation 作 om Compiler Maker 139

2. 月刊 C MAGAZINE 1989年12月号

造をもつ。分析はシステム内の処理とデー タの流れを決定するために行われる。ある 処理は自動的に詳細が記述されるし , 設計 者により , 単一機能の関数モジュール ( mod ules) になるまて、 , より小さく分割されたり もする。これらは , コード化され , 単位ご とに検査され , しかる後にまとめられ , シ ステムの検査が行われる。 こうしてシステ ムの実行可能な機能はすべて仕上げられる。 そして完成したシステムが組み立てられ , 受け入れ検査がなされる。その方法は本質 的には処理指向て、ある。 このようにしてプログラマは処理に注目 する。というのは , それが彼らの仕事 ( 計算 機をいくっかの手順て、正確に繰り返し実行 させるという ) だからて、ある。たいていの分 析者はプログラマて、もあるため , 分析者も 主として処理に注目する。 構造的な開発と同様 , オプジェクト指向 的な開発は , 標準的な滝型モデル (waterfall model) に従っている ( 分析 , 設計 , 単位ごと の実装 , システムの実装 , 確認 , 検証 , 保 守 ) 。しかしオプジェクト指向的な手順の背 後にある重要な秘密は , オプジェクト指向 的な設計者は分析の直後に , 処理て、はなく データに注目するということてある。 オプジェクト指向的な開発はデータ駆動 て、ある。あなたがシステムの全データを手 に入れ , それを標準化するのて、あれば , お のおのの第 3 正規形の完全な構造は , 取り扱 う必要がある各オプジェクトの優れた第 1 の 近似値てある。いずれの第 3 正規形の構造も 要素ごとに独立して存在する。各自は , そ のデータを取り扱う一連の処理や手順を所 有している。そして , これらの処理は , ほ かのどのオプジェクトにも関係なく定義す ることがてきる。 これら第 3 正規形のオプジェクトの多く は , ある程度大規模な機能を達成するため に共通して仕事をする必要があることは明 白てある。たとえば ,price( 値段 ) と part( 中 身 ) のデータは invoice ( 送り状 ) を形成する 量的なデータに結合て、きる oinvoice も同様 にメソッドや手続きを所有するオプジェク トて、ある。 invoice オプジェクトと price そして part オプジェクト間のインタフェイスは , 明確 に定義て、きる。 invoice の処理が part のデ ータを知ることが必要て、あれば ( たとえば , それを 100 個生産するコスト ) , そのデータ を獲得する方法についての情報を埋め込ま ないて、 , たんに part オプジェクトに尋ねれ ばよい。そこて、 , この情報を計算する特定 の part オプジェクトの処理を記述し , デー タが必要な invoice の処理がこのルーチンを 呼び出す。これが情報隠蔽の概念て、あり , モジュール化 ( modularity ) の基礎て、ある。 しかし , オプジェクト指向的なアプロー チは , データベースアプリケーションだけ に制限されるのてはない。標準化されたデ ータ構造は , 単純なひとつのデータ構造 ( デ ータ型 ) て、あり , 一般的にデータ構造はすべ てのプログラミング労力の基礎なのてある。 ファイルアクセスをまったく行わないプロ グラムて、さえ , 配列 (arrays) , 構造体 (structures) , 静的グローノヾル変数 (static global variables) のいずれかの内部データ 構造をもつのだ。したがってオプジェクト 指向的な方法は , あらゆる種類のデータ構 造のいかなる操作にも適応されうるのて、あ る。 開発の例題 例題として , 7 カードゲームの全基本メカ ニズムを演ずる計算機プログラムの開発を 取り上げることにする。気のきいた賭けを 除けば , 何てもそろっている ( その拡張は読 者に譲ることにする ) 。 オプジェクト指向的な開発のサイクルに おいて , 分析の段階は比較的変えずにすむ のて , この段階は飛ばし , いきなり設計の 段階に移ることにする ( 分析は比較的変えず にすむにもかかわらず , そうすべきて、はな いという多数の意見もある。 こて、の目的 はオプジェクト指向的なアプローチの基本 概念をどのようにして最少の混乱て、実現て、 きるかを示すことなのて、 , ここて、はこれら の意見については触れないことにする。た だオプジェクト指向的分析の最良の方法の ひとつを , 文献 1 (Mellor, Schlaer, 1988 ) に 示すことにする。 こて、は必要なことがはっきりしている のて、 , 分析は必要て、ない。あなたは参加金 を払ってゲームに参加し , 1 枚以上のカード (card) を受け取り , 新しいカードごとに掛 け金を積み , 勝者は賞金を受け取る。そし て , 破産したら家に帰る。しかしながら , あなたが厳密な人間て、あるか , または本当 に分析から始めるのが必要だったら , Fig. 1 のような図表を作成するとよいだろう。 オプジェクト指向的な方法て、は , 概括的 な設計の段階て、最大のインパクトがある。 通常 , 設計者はプログラミングが行われる 前にシステムの構造を示した構造表 ( struc ture chart) を作成する。構造表は , ひとつ のプログラムの中て、の各関数の親子関係を 示し , 各レベルのおのおののルーチンが行う 仕事を明確にするために用いられる。さら に構造表は , 設計を明確にし , 多数のプロ グラマに仕事を分担するのに役立っ ( しかし 不幸なことに , 多くの場合において構造表 は , コード化の段階が完了した後て、 , 通常 はある種のドキュメントが必要だと感じた 人間の呼びかけによって作成される ) 。 オプジェクト指向的なアプローチにおい ても , 設計者は , やはり構造表を作成する が , それはあなたが使っているような表て はない。サプルーチンや制御構造の階層表 (hierarchy chart) は , オプジェクトの階層 表に置き換えられる。このタイプの表はサ プルーチンの構成を表したものて、はない それは , データの構成を表しているのだ。 オプジェクトの設計手法 23

3. 月刊 C MAGAZINE 1989年12月号

extern int a [IO) は OK て、すが , int extern a [ 10 ] はダメて、す。 ⑤は , 式のコード生成をするのに , 数値 型の種類が増えすぎると組み合わせのパタ ーンが多くなってしまうために設けた制限 て、す。 char は符号つきとして扱われます。 なお , signed char と書くことはて、きませ ん。 int と char をもとに , ポインタや配列 を任意に組み合わせて宣言て、きます。 ⑥も , コンパイラ簡素化のために設けた 制限て、す。 Cm て、は , 関数はプロトタイプ風 main(int argc, char * *argv) は不可て、す。ただし , 「プロトタイプ風」と お断りしたように , 構文がプロトタイプに なっているだけて、 , パラメータの型チェッ クをしないのはご愛敬て、す。 また , Cm コンパイラにはプリプロセッサ は含まれていません。 C コンパイラ用のプリ プロセッサを流用することにします。具体 的には , 創刊号付録の LSIC ー 86 試食版のプ リプロセッサ CCP を使うことにしましよ , こまて、に説明した相違点以外て、は , Cm は , C とまったく同じ仕様になっています。 キャストや sizeof などもちゃんとサポート しています。有名なべンチマークテストの 「エラトステネスのふるい」もそのままて、コ ンパイル実行することがて、きます (List1)0 LSIC て、 9 秒 , TurboC て、 12 秒 , MS-C て、 10 秒かかるところを , Cm は 24 秒て、す ( PC286 70 CMAGAZINE 1989 12 と定義します。従来の main (argc, argv) int argc ; char **argv ; V 10MHz) 。まあ , 予想していたほどは悪 くはないな , というのが開発者の感想てす。 Cm コンバイラの構成 [ 表 1 ] Cm コンノヾイラのソースファイル名一覧 するわけにはいきません。て、すから , ディ 残念ながら紙面の都合上 , 全リストを掲載 って話を進めることにしましよう。また , けて、すが , 実際に筆者が開発した順序に従 これから , Cm コンパイラの作成に入るわ ものが , 人手て、作成したファイルて、す。 って自動生成したものて、す。これら以外の トタイプて、 , ストリームエデイタ sed を使 のマクロ定義て、す。 function. れは関数プロ ョンによって自動的に生成されるトークン す。また , cm. h は , KM-yacc の -d オプシ の本体 ( 関数 y arse ) が定義されていま ケージに付属しているファイルて、 , パーサ c は , 前回説明したように , KM-yacc'€ッ ヒ。ーに収録されています。このうち ,yaccpar. これらのファイルは今月号の付録のフロッ ログラム全体て、約 4500 行ほどの長さて、す。 イルから構成されています ( 表 1 ) 。ソースプ ソースファイル (. y ) が 1 個の , 計 16 個のファ が 12 個 , C ヘッダファイル ( 上 ) が 3 個 , yacc Cm コンパイラは , C ソースファイル (. c) スクて、配付するソースプログラムを適宜参 照しながら読み進んて、いただくことになり ます。必要に応じて要所を抜粋したリスト を掲載します。 Cm コンパイラの開発はだいたい次の順序 て、行いました。 ①文法を定義する (cm. y) ②レキシカルアナライザをつくる (lex. c, lexstr. c)o この時点て、 , レキシカルア ナライザとパーサ ( 構文解析部 ) が完成。 とりあえず , プログラムをパースする ことがて、きる ( もっとも , 文法工ラーが なければウンともスンともいいません ③ヒープ領域ハンドラ ( heap. c ) , シンポ ルテープル処理ノレーチン (table. c) , オ プジェクトコード出力ルーチン (gen code. c) などの , ハウスキーヒ。ング部分 をつくる ④宣言の処理 ( declare. c ) をつくる ⑤式の意味解析 (exp. c) , 式のコード生成 (genexp. c) をつくる ⑥文の処理 ( stmt. c ) をつくる 今回 ( 第 3 回 ) は① , 第 4 回は② ~ ④ , 第 5 回 は⑤の前半 , 第 6 回て、⑤の後半と⑥ , という ペースて、今後の連載を進めていく予定て、す。 ファイル名 declare. C exp. C gencode. C genexp ・ c heap. c lex. C lexstr. c maln . C msc . C stmt. C table. c yaccpar. C cm. h cmder. h function. h cm ・ Y 内容 宣言と定義を処理する Cm 言語の文法定義 関数プロトタイプ (sedc 作成 ) 型 , マクロの定義 トークンのマクロ定義 ( cm. y をもとに yacc が生成 ) バーサ本体 ( KM ー yacc バッケージのもの ) シンボルテープル処理ルーチン 文のコードを生成する 工ラー処理 , 型合わせ , 型チェック , 定数式の畳み込みなど 下請けルーチン群 Cm コンバイラメインルーチン 厄 x. c の下請けで , 文字列の処理を行う レキシカルアナライザ ( 文字列 ) レキシカルアナライザ ( 本体 ) 宣言と式を表現する木構造を扱うルーチン ヒープ領域八ンドラ exp. c がつくった木構造をたどりながらオプジェクトコードを生成する 式のコード生成を行う オプジェクトコード生成ルーチン 構文木を作り出す このファイルのルーチンは , cm. y の中の式のアクションから呼び出され , 式の意味解析ルーチン すべての宣言 / 定義を処理する 外部宣言 , 関数定義 , バラメタ宣言 , ローカル宣言など

4. 月刊 C MAGAZINE 1989年12月号

( 第 1 印ファイル操作編・珱の・ 五ロ 高橋良明 践へを合言葉に , 多彩な実用例を駆使し C 言語を学んでいくうえで文法をマスタ てわかりやすく「 C 」を解説していきます。 ーすることはいうまでもありませんが , 連載第 1 回は「ファイルアクセス」からス 学習の第 2 ステップとしていかに「 C 」を タートします。「 C 」活用レポートにこ期 使いこなしていくかか重要になります。 待ください。 この新連載「応用 C 言語」は文法から実 次のようになります (Fig. 1) 。 ファイル属性 フガルの概要 ファレの概要 MS-DOS は , データ ( プログラムなども 含む ) を「ファイル ( file ) 」という単位て、管理 します。ファイルの概念を理解しないとデ イスクとデータのやりとりはて、きません。 ファイルは , 元来「紙製」の資科をストック しておくものて、す。まず , この事務用のフ ァイルを扱うときを考えてみましよう。 通常 , 資料は分野や用途 , 目的ごとにフ ァイルにまとめられています。ファイルの 背や表紙には , 資科の内容を表すタイトル が書かれ , ファイル棚に整理して保管され ています。さて , 私たちはファイルを探す とき , ファイルのタイトルを目印にしてフ ァイル棚から引き出します。ファイルを読 む場合には , ファイルを開いて目的のペー ジを探します。また , ファイルに内容を追 加したり更新する場合には , 資料をファイ リングするわけて、す。資料を使った後 , フ ァイルをしまう場合には , ファイルを閉じ て棚に戻します。この一連の手順は , 事務 用ファイルの基本的な使い方て、す。 一方 , ディスク上のファイルも , まった く同様な考え方て、理解て、きます。ディスク 上のファイルにアクセスする場合の手順は さて , ファイルにはさまざまな属性 ( ファ イルアクセスモード ) があります ( 表 1) 。フ ァイル属性の設定はファイルのユーザに制 限を設けるために行われます。 たとえば , 事務用ファイルは , 誰にて、も 見ることがて、きるファイルから , 部課長ク ラス , 取締役クラスて、ないと見ることのて、 きないファイルまてがあるのと同じことて、 す。ファイル属性を設けることて、データの 保安性を高めることがて、きるのて、す。必要 に応じて , ファイル属性をファイルに設定 します。 [ 表 1 ] ファイル属性一覧 内 ~ 容 コード 00H 普通のファイル。自由に読み書きができます 読み出し専用 ( Read 0 司 y ) ファイル。書き込 みのためにファイルをオープンすることはでき 01 H ません。また , 同名のファイルを作成すること もできません 隠し ( Hidden ) ファイル。 D 旧コマンドや TYPE コ 02H マンドなどでは見ることはできません システムファイル。 D 旧コマンドや TYPE コ 04H マンドなどで見ることはできません ホリュームラベル。この属性のファイルは , ル 08H ートティレクトリに 1 個だけ存在できます サプティレクトリ 10H アーカイプ ( A 「 ch ⅳ e : 保存 ) ファイル。ファイ ルが変更されたときに ON になります。 BACK 20H UP コマンドによって消去されます。アーカイ バ ( フアプル圧縮ユーティリティ ) で作成したア ※ボリュームラベル ( 08H ) とサプディレクトリ ( 10H ) は , ファン クション 43H ( ファイル属性の取得 / 変更 ) では変更できません。 応用 C 言語 99 Fig. 1 ファイルアクセスの基本的な流れ ファイル検索 (find file) ディスク ( ファイル 棚 ) からファイル名 ( タイトル ) でファイ ルを探す ァイルあ N ファイルオープン ( 0 pen file) 工ラー 工ラー処理 目的の場所 ( ペー ファイルポインタの設定 ジ ) を指す (set file poi nter) 資料の読み出し ファイルリード / ファイルライト または資料の更 (read file/write file) 新・追加 工ラー 工ラー処理 ファイレクローズ (close file) 工ラー ①ファイル検索 ( find flle) ディスク ( ファイル棚 ) からファイル名 ( タイトル ) でフ ァイルを探し出します ②ファイルオープン ( open f ⅱ e ) ファイルを開きます ③ファイルポインタの設定 (set file pointe 「 ) 目的の場所 ( ページ ) を見つけます ④ファイレリード / ファイルライト ( 「 ead file/write file) 目的の資料を読み出します。または資料を更新・追加します ⑤ファイレクローズ ( f ⅱ e close ) ファイルを閉します ファイルを開く 工ラー処理

5. 月刊 C MAGAZINE 1989年12月号

それらの参照 , 記憶 , そして修正手続きを 変更て、きるようにするのだ。 データ構造の参照・記憶・修正のための 全ルーチンのロジックは , その構造に影響 がないルーチンからは隠されるということ が情報隠蔽の意味て、ある。いくつかの処理 のロジックは , それが取り扱う構造に依存 するため , オプジェクトの構造自身もまた 隠されるべきて、ある。オプジェクトおよび そのメソッドは普通プラックポックスと呼 ばれるものて、ある。 旁実装の詳細 List1,2 は card クラスのデータ構造を実 現するふたつのヘッダファイルて、ある。 こて、 , 定数 (. h のファイル ) を , クラスの定 義 (. s のファイル ) , グローバルデータ (. g の ファイル ) と分離することにする。これらの ファイルに分けるのにほかの理由はない 実装のスタイルは , C 十十の設計者 Bjarne Stroustrup が使ったクラスの実装をまねる ことにする。オプジェクトの外観て、あるプ ラックボ、ツクスを強調するために このス タイルを使用するわけて、ある。 List 2 および ヘッダファイル card. s を参照のこと。この ヘッダファイルは card クラスの定義の全外 観を含んて、いる。 このヘッダファイルを最後から見てみよ う。最後の部分に , 実際のクラスオプジェ クトを実現する構造体の定義がある。この 構造体はふたつの基本構成要素 , すなわち データ部分 ( 先頭 ) とメソッド構造体のポイ ンタ ( 最後 ) をもっている。構造体の中の各 メソッドへポインタを並べることもて、きる。 しかし , far ポインタを使うのて、あれば , 4 バイトの構造体に 20 バイトをつけ加えるこ とになる。この問題はメソッドの数が増え るにつれて多くなる。かわりに , 私はクラ ス構造体を補足する , メソッド構造体を定 義した。 G WITH OB 」 E ( 15 20 : / * 30 : * / 47 : end 50 : / * 63 : * / List 4 札 ( card) オプジェクトの処理 12 : static CardProcs CardProc0bject; 10 : # inc lude "card. g" / * このファイルも , 付録のディスクの中に収めてあります * / 9 : #include ” card. s ” 8 : #include ” card. h ” 7 : # inc lude "sty le. h ” / * このファイルは , 付録のディスクの中に収めてあります * / クラスやオプジェクトを作成する関数 ( 外部から呼ばれる ) が最後にある。 実際に操作を行う関数 ( 外部から呼ばれない ) がまず最初にあり , 表面的に card. c : 札オプジェクトに関係する処理の定義 2 : 3 : 4 : 5 : 13 : 14 : 15 : 16 : 17 : 22 : 24 : 26 : 29 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 48 : 49 : 52 : 54 : 55 : 56 : 58 : 59 : 31 : static void CIearCard (card) 28 : 詳細仕様 : 札を再び初期化する。 C 1 earCard (&card) : Card *card : static void CIearCard() 23 : 記述形式 : 21 : 関数 : CIearCard() This function Update ー初期化された札 この処理が終わった札は正当な札となる。 / * Update ー初期化された札に種とランクをセットする * / 32 : Card *card; ランクと種類を初期値に設定する end exit (I); printf ("YnInvalid Card in ClearCard. begin if (card->proc ne &CardProcObject) 札の正当性のチェック begin 51 : 関数 : SetCard() 53 : 記述形式 : static void SetCard() Card *card,• enum rank rank : en um su i t su i t : card—>rank card—>suit NoRank : NoSuit; This function ー札に設定する種類 lmport I mport ー札に設定するレベル U pdate ー再定義された札 SetCard (&card, rank, suit) : 60 : 詳細仕様 : 札のレベルと種類の値を設定する。 であるから , 値のチェックはされない。 な札となる。 こでは , レベルと種類が列挙型 この処理が終わった札は正当 static void SetCard (card, rank, suit) 65 : Card *card; enum rank rank; enum su i su i t : begin 正当性をチェックする 70 : 69 : 68 : 67 : 66 : 64 : 28 CMAGAZINE 1989 12

6. 月刊 C MAGAZINE 1989年12月号

I N F 0 F.: M A T 0 N N EC が新バスアーキテクチャを採用した 32 ビットノヾソコンなど新製品 9 機種を発表 接アクセスて、きる「バスマスタ機能」を装備 NEC は , PC ー 9801 シリーズの新製品とし て , 高速 32 ビット機「 PC ー H98 モデル 70-002 / し , マルチプロセッサシステムに対応した PC ー H98 モデル 70 ー 002 100 」の 2 機種をはじめ , ノートパソコン「 PC 99.5 万円 PC ー H98 モデル 70 ー 100 168.0 万円 ー 9801N 」など 9 機種を発表した。また同時 に , 製品強化・拡充を図ったハードウェア A4 ファイルサイズノート型パソコン 14 種 , ソフトウェア 15 種も発表した。 「 PC -9801 N 」 ( 愛称「 98NOTE 」 ) PC -9801 シリーズの最上位機種 「 PC ー 9801N 」は , A4 ファイルサイズ。 CPU 「 PC - H98 モテル 70-002 / 1 00 」 △ PC ー 98 田シリーズの最上位機種「 PC ー H98 モデル 70 」 に V30 (10MHz) を採用 , 「 80C86 」の東芝製に M バイトまて、ユーザーズメモリを拡張て、き 比べて「処理速度は 1 . 3 倍速い」という。 3.5 「 PC ー H98 モデル 70 」は新開発の 32 ビットバ るため , 「日本語 MS OS/2 」「 PC-UX/V 」な インチフロッヒ。ーディスクドライプ 1 台と 1.25 スアーキテクチャ「 NESA ( ネサ ) 」を採用し どの高機能 OS はもちろん , AI などの大容量 M バイトの RAM ドライプを内蔵。 PC ー 9801 た高速 32 ビット機。 NESA はバスのデータ シリーズとの互換性を重視し , 4 , 700 種のア メモリを必要とするアプリケーションにも 転送幅を従来の 16 ビットから 32 ビットに拡 対応て、きる。 プリケーションが使える。 RAM ドライプは 張し転送能力を約 3.3 倍向上した。さらに ・ 1 , 120 >< 750 ドットのハイレゾリューショ バッテリて、バックアップされているため , CPU は「 80386 」 (33MHz) を採用 , また 64K バ 一度アプリケーションを登録しておけば一 ンモードと 640 x 400 ドットのノーマルモー イトのキャッシュメモリを搭載し高速処理 を可能にしている。 度目から自動的にシステムが立ち上がり , ドの両モードて、 1 , 600 万色中 16 色の多色表示 使用アプリケーションが決まっているユー が行える。オプションて、 256 色表示を行うこ PC ー H98 モデル 70 および NESA のそのほか ザには便利なセカンドパソコンて、ある。 ともて、きる。また , グラフィック専用カス のおもな特長をあげておく。 タム VLSI として AGDC と E2GC を採用し , 「 PC ー H98 モデル 70 」 そのほかのおもな特長は以下のとおり。 ・ ROM て、内蔵している「 98NOTE メニュ グラフィック描画を高速に行える。 ・メモリアドレス空間を 4G バイトまて、拡 「 NESA(New Extended Standard Archi により , ファイルコヒ。ー , 起動ドライプの 大。これによりシステムスルーブットが向 tecture) 」 上され , UNIX システムや将来的な処理量の ・ 32 ビットのデータバス幅をもっており , 増大に対応。マルチプロセッサシステムの データ転送能力が現行バスに比べ約 3.3 倍高 構築 , 機能分散による高速処理が可能にな 速化されている。また , 4G バイトのメモリ アドレス空間に対応て、きる。 ・データバス幅は 8 , 16 , 32 ビットを自動選 ・自動セットアップ機能をサポート。シス 択 , PC ー 9801 シリーズのオプションボ、一ドが テムの空きの領域など , セットアップに必 使える。 要な情報を自動的にチェックし , セットア ・ユーザーズメモリとして「 PC ー H98 モデル 70 ー 100 」は 5.5M バイトを , 「 PC ー H98 モデル ップが行える。 ・オプションポードからメインメモリに直 △ノート型パソコン「 PC ー 9801N ( 98NOTE ) 」 70 ー 002 」は 1 .5M バイトを標準装備。最大 27.5 1 16 CMAGAZINE 1989 12

7. 月刊 C MAGAZINE 1989年12月号

ンパイル・リンク作業を提供している。 Ver. 2.0 て、はすべてのメモリモデルに対 し , 統合環境上て、のコンパイル・実行を可 能としている。そのためオンメモリコンパ イルを行わなくなり , コンパイル・リンク 作業の速度が低下したが , インクリメンタ ルコンパイル・リンクを提供することによ り , その速度の低下を最小限に抑えること List 1 93 : } あり , コマンドライン版 (QCL) て、使うこと ただし ILINK が使えるのは統合環境上て、 を損なわずにすんて、いる。 いう , インタブリタ感覚の使い勝手のよさ 「プログラムを書いたらすぐ実行てきる」と に成功し , 統合環境の利点のひとって、ある はてきない Quick 2.0 ・ NMAKE 今回 MAKE が機能アップし NMAKE とな った。 MAKE に比べかなり高機能になって おり , 今まて、の MAKE の機能に不満をもっ ていた人も満足て、きるものとなっている。 以下に MAKE と NMAKE の違いを示す。 ・ファイルて、コマンドライン引数を指定て きる。これにより , 長い引数を簡単に指定 2 : 4 : 8 : 9 : 10 : 1 1 : 13 : 20 : 22 : 23 : 26 : 29 : 30 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 42 : 43 : 44 : 45 : 46 : 48 : 49 : 50 : 52 : 53 : 54 : 56 : 58 : 59 : 60 : 62 : 63 : 64 : 65 : 67 : 68 : フォント表示プログラム ! し arge model 0 心 y ! link with graphics. lib #include く stdio. h> #include く coniO. h> #include く string. h> 12 : #include く stdlib. h> #include く graph. h> 15 : / * 地 cate マクロの定義 * / 16 : / * text 文字の書く位置をセットする ( x: 1-80 y : 1 ー 25 ) * / 17 : #define locate( x, y ) printf( "YxlbC%d;%dH" 19 : / * 関数の宣言 * / VOid main(int argc,char * *argv) : 21 : VOid load-font(void) : VO id put-font (char *out-text) : VO id read-text (char *text_file) : 24 : void set-color(char col) : 25 : VOid set_font(char fnt) : VOid saver(char *save file) : 28 : / * static 変数の宣言 * / 77 : 80 : 82 : 86 : 87 : 88 : 90 : 92 : 94 : 95 : 98 : 99 : 100 : 101 : 102 : 103 : 104 : 105 : 106 . 107 : 108 : 109 : 1 10 : 84 : void load-font() err, exit(err); can ・ t register fontsYn ” , err) ; printf ("Error (%d) -registerfonts("*. FON")) くの { if ( (err / * カレントディレクトリよりフォントデータを読み込みます * / strcpy(list, font-l ist) : / * font 種別を設定します * / / * -setfont() にわたす list を作成します * / setcolor(color) : / * 色を指定色にします * / char ⅱ st [ 100 ] : / * -setfont ( ) にわたすコマンドリスト * / VO id put-font(char *out-text) 69 : / * セープファイルが指定されている場合セープルーチンを実行します * / if(save-flg) saver(argv[2]) : 73 : / * 終了処理 * / Iocate(), 25 ) : 83 : / * フォントデータヘッダ読み込み処理 * / exit(l); -cIearscreen(-GC し EARSCREEN) : if ()n ー = getch ( ) : pr intf ( " 画面を消去してから終了しますか ? ( Y / N ) " ) : static static static static static 1 ong Char char Char int / * フォントの色 * / _98WHITE_D; color put-x=0, put-y=c; / 事フォントの描きだし位置 * / ” 20 ” ; ysize-listC10] / * フォントの高さ ( デフォルトは 2 の * / ” 20 ” : xsize-l istC10] / * フォントの幅 ( デフォルトは 2 の * / ” t'courier font-list[20] / * フォント種別 ( デフォルトでは courier) VOid main(int argc,char **argv) char text_file[65] : int save-flg = 0 : i nt yn : if (argc く 2 ) { exit(-l); save-flg 55 : / * 初期処理 * / if (argc ニ cputs("Usage: font text_file く save_file>Yn") : / * セープフラグを真にする * / / * セープファイルが指定されていた場合 * / 111 : 112 : 113 : 114 : 1 15 : 1 16 : 1 17 : 118 : 120 : 121 : 122 : 123 : 124 : 125 : 126 : 127 : } 128 : 130 : 131 : 132 : 133 : 134 : 135 : / * font 高さを設定します * / ysize_l ist) : / * font 幅を設定します * / xsize_list); / * 設定値に近いサイズを選ぶように指定します * / / * ー setf 。 nt ( ) が成功した場合 * / strcat (list, strcat(list, strcat(list, ” w"): strcat(list, strcat ( list. -outgtext (out_text) : / * 文字列を描き出します * / _moveto(put_x, put_y) : / * 描き出し位置を設定します * / if (!-setfont(list)) { / * 次の描き出し位置を設定します * / exit(-l); cputs("Error : can't set fontYn") : -setvi deomode(_DEFAULTMODE) : else { put-y 十ニ at0i (ysize_l ist) 十 10 : strcpy(text_file,argv[l]) : / * グラフィックモードをデジタル 8 色に設定します * / -setvideomode (-98RESS8C0 し (R) : / * 画面をクリアします * / -c learscreen (-GC し EARSCREEN) : / * 背景色を黒にします * / -setbkc010r(_98B し ACK-D) : / * フォントデータヘッダをメモリに読み込みます * / load-font() : 66 : / * メイン処理 * / / * テキストファイルを読み、画面にフォントを表示します * / read-text (text-file) : 129 : void read_text(char *text-file) FILE *text_fp; char buffer[256] : char *ptr; / * text f ⅱ e をテキストリ ードモードで open します * / 第 2 特集 QuickC Ve 「 .2.0 徹底チェック 83

8. 月刊 C MAGAZINE 1989年12月号

> 独自路線を日本旧 M 旧 M における Ver4.0 の位置づけ DOS が Ver. 3.3 から Ver. 4.0 に移行する場 ロ , システムコールがどっ増えるのか , 機 能はどうなるのか , メモリの問題はどうな るのかという , プログラマ的な発想でおう かがいしたいのですが , 旧 M さんは実際に Ver. 4.0 を出されていますので , そのへんを お聞かせ願いたいと思います。 旧 M 現在 Ver. 3.4 と並行して Ver. 4.0 を出 していますが , Ver. 4.0 というのはマイクロ チャネルというアーキテクチャをもったハ ードウェアを主体に考えています。 Ver. 3.4 というのは , これまて、の 5550 ファミリーに 対応した DOS て、あると同時に , マイクロチ ャネルにも若干対応している。これから PS/ 55 のハードウェアの方向としては , マイク ロチャネルにしたいと考えていますのて、 , 今後は Ver. 4.0 が主力になっていくだろうと 思っています。 そのひとつの表れとして , DOS の世界て、 はじめてこの Ver. 4.0 て、ソフトウェアにサー ビス体制をつけたんて、すよ。 サービス体制というと ? 旧 M サポートセンターという保守部隊があ って , 問題が生じた場合 , そこに連絡しま す。するとリティンという IBM の世界中に つながっている保守システムに問題報告が 入力されます。それが専門家集団の手にわ たり , 間題を解析するわけて、す。 それが「問題」だと判断された場合 , 開発 側に回します。チェンジチームといってい ますが , 開発側に問題を処理するグループ がいて , 彼らが処理します。その結果がお 客さんにフィードバックされるというシス テムて、す。 ラージシステムという , 大型機のソフト , 52 CMAGAZINE 1989 12 たとえば MVS とか , それから VTAM などの ソフトを保守するために , 長年かかってつ くり上げてきたシステムがあります。この システムと同じ方法を DOS に導入したわけ てす。 したがって , たとえば何か問題が起きた としても , たとえばカナダ , プラジル , あ るいはヨーロッパて、問題提起され , すて、に 解決されている可能性が非常に高くなって います。 IBM 自身て、集中管理をするソフトウェア というのは , 非常に重きを置いたソフトウ ェアてあるという認識があります。その裏 づけとなるシステムがこのリティンて、す。 世界中て、ひとつの管理体制をもっていて , すべて均一に品質を保っソフトて、あること からも , IBM における DOS Ver. 4.0 の位置 づけがわかるかと思います。 DOS そのものだけですか。それとも ,DOS 用のアプリケーションに関してもあるので すか。 旧 M 現時点て、は DOS だけてす。ホストの 場合もだいたい同じような制度になってい て , プラットフォームとなるようなコンポ ーネントについてのサービスをまず最初に 考えているということて、す。たとえば IBM の製品のなかて、は , OS / 2 は同じようにセン トラルサービスを行っていますし , それか ら 3270 というホストコミュニケーションの ためのソフトウェアも同じシステムに載っ ています。 V r40 は国際標準 DOS Ver. 4.0 て、実際に変わったところは , メモ リを拡張てきるようにしたというのが EMS, それからディスク容量もこれまて、の 32M バイトの制限を超えたものが扱えるよ うになった。またユーザインタフェイスも , SAA て、規定された OS / 2 のインタフェイスと 対応したようなものを DOS の世界に持ち込 もうとしています。 いわゆるビジュアルシェルみたいなも のがついているんですか。 旧 M 現時点の Ver. 4.0 はキャラクタベース のシェルて、す。 それからもうひとっ , Ver. 3. X と比べて 大きく違うのは , 国際標準の DOS に変わっ たことて、す。したがって , 日本語の DOS て、 あると同時に英語の DOS て . もあるわけて、 す。スイッチというコマンドを使って , PS/ 2 と同じ環境を PS ー DOS Ver. 4.0 が提供して くれます。 日本語環境と英語環境を変えた場合 , 日本語処理が問題になるだけで , 基本的に 英語 DOS と機能的には同じと考えてかまわな いわけですか。 たとえば日本語 DOS にスイッチした場合 に , PC ー DOS 用のアプリケーションが動かな いということはありませんか。 旧 M 日本語モード上て、英語モードの DOS 用につくられたアプリケーションは動きま せん。 日本語モードというのはまったく別の アプリケーションであるというかたちにな るわけですね。つまり , アメリカの PC-DOS 用のアプリケーションを動かすためには , 英語モードに切り替えるわけですね。 アテクチャを重視 旧 M そうて、す。たんに今まての日本語の DOS と , アメリカの PS / 2 の DOS をくつつけ たものて、はありません。今度は DOS として のソフトウェア上のアーキテクチャを , 世 界中て、ひとつのコントロールポードをつく

9. 月刊 C MAGAZINE 1989年12月号

DESIGNIP G WITH OBJECTS 使うことによって生じる。 これらの利点を 開発および保守のて、きる , 非常に優れたア のに注意を向けるならば , より安い費用て 処理について考える前に , データというも 実装し始めなければならないのだ。もし , とて , オプジェクト指向の概念を ( 頭の中に ) データ抽象化の技術を理解し , 使用するこ 方法を根本的に変更しなければならない ぶ必要もない。ただ , 開発過程て考察する 得るために , 新しい言語を買う必要も , 学 参考文献 ルゴリズムて、処理するだろう。 Manifesto. Englewood Cliffs, N. J, 5. Martin,J. An lnformation Systems WesIey, 1986. Language. Reading, Mass. : Addison- 4. Stroustrup,B. The C 十十 Programming Communications of the ACM, Dec. 1972. in Decomposing Systems intO Modules. ” 3. Parnas,D. L. "On the Criteria to Used Prentice-HaII, 1979. emsDesign. Englewood Cliffs, N. J. DiscipIine Of Computer Program and Syst Structured Design : FundamentaIs Of a 2 . Yourdon,E. and L. L. Constantine. Hall, 1988. Data. Englewood Cliffs, N. J. : Prentice- ented Analysis : M0deling the World in 1. Mellor,S. and S. Schlaer, Object-Ori 著者について Prentice-HaII, 1984. 32 CMAGAZINE 1989 12 おもなビジネスとしている。 的情報システムの特殊なコンサルタントを 査を専門に行っている企業に対して , 戦略 長て、ある。この会社は , セキュリテイや調 のロサンゼルスにある Stratisys Corp. の社 Stephen C. Bailey 氏は , カリフォルニア List 5 関数 : 円 ayingCards() 記述形式 : void 円 ayingCards() This function Export ージョーカを加えた札の組を初期化する Deck deck; 円 ayingCards (&deck) : 詳細仕様 : 2 枚のジョーカを加えた 5 2 枚の札の組を作成する ( 全部で 5 4 枚 ) 。 札は順番通りにならんでいる ( ジョーカは最後で 5 3 番と 5 4 番 ) 。 編集部から : これらの札全部はスペースの関係で本誌には掲載できません。 このプログラムの全部は付録のディスクに収めてありますので , そちらをご覧ください。 static int 円 ayingCards (deck) Deck *deck; begin / * 札オプジェクトのポイン々 * / Card *cardp; void ( * setcard) (Card * , enum rank, enum suit) : クラブの札を作成 cardp = &deck->card[ 0 ] : CreateCard (cardp) : setcard ニ cardp->proc->SetCard; ( * setcard) (cardp, Ace, Clubs) : cardp 十十 : CreateCard (cardp) : ( * setcard) (cardp, Two, Clubs) : cardp 十十 : cardp 十十 : CreateCard (cardp) : ( * setcard) (cardp,King,CIubs) : cardp 十十 : 同様にしてダイヤの札を作成する 同様にしてハートの札を作成する end 同様にしてスペードの札の作成する ( * setcard) (cardp, J0ker, NOSuit) : CreateCard (cardp) : cardp 十十 : ( * setcard) (cardp, JOker, NoSuit) : CreateCard (cardp) : 同様にしてジョーカの札を作成する

10. 月刊 C MAGAZINE 1989年12月号

lnformation 作 om (ompiler 「 カラーは QCCONFIG ユーティリ などの使い方を見るだけて、はなく , ティて、それぞれカスタマイズて、き そのまま使うことがて、きますから , ます。さらに , QuickC 環境版のメ C コンパイラに慣れていない方て、も ニューに MS-DOS 実行コマンド 入力しまちがえるなどといったこ を追加て、きます。自分の使い慣れ とはありません。 たエデイタやツールを登録するこ とも可能て、す。 プラリ ( 28 , 000 円 ) 日本技術ソフト開発 〒 151 東京都渋谷区千駄ヶ谷 5 ー 5 ー 10 ー 112 TEL03 ー 352 ー 1972 MS-C ユーサの ライプラリリスト MS - C て、プログラミングするう えて、便利なライプラリをいくっか 紹介します。 0 ◆ JC ー凵 B98 ( 12.800 円 ) c を学ぶのによい参考書を教 キー , 文字入力関数 , 高速テキ えてください。 0 スト画面関数 , 簡易テキストウィ NMAKE とは何ですか ? QuickC ver. 2.0 には , ンドウ関数 , ポップアップメニュ A ー関数 , プリンタ関数などのライ 従来のマイクロソフト社の製 for Yourself 』という C 言語の入 プラリ 品には , 大規模なプログラムを作 門書が付属しています。この本は , 株ジャノヾン・ソフト・サービス 成するための MAKE ユーティリテ ほかの BASIC などの言語を使っ 〒 721 広島県福山市引野町 2-194 ィが付属していました。 NMAKE たことがあるユーザ向けに書かれ TEL0849 ー 41 ー 8858 は , MAKE を発展させ , さらに使 ています。この中て、使われている いやすくしたものて、す。もちろん , サンプルプログラムは , QC アドバ 環境版にも NMAKE のサプセッ イザからカット & ペーストして実 ト機能が内蔵されています。 行て、きますから , 手軽に C 言語を 覚えることがて、きます。 ◆ connect : GP 旧 ( 38 , 000 円 ) GPIB デバイスドライバ , インタ フェイス関数ライプラリ connect : 232C ( 38 , 000 円 ) ◆ RS232C サポート制御ライプラ ◆ C ー TOOL / 98 ( 32 , 000 円 ) グラフィック関数 , マウス関数 , サウンド関数などのライプラリ ◆ピタゴラス ( 98 , 000 円 ) 科学技術計算 , 統計処理ライプ ラリ LIFEBOAT ◆ SYLPH ( 28.000 円 ) 〒 101 東京都千代田区神田錦町 マウス関数 , グラフィック関数 3 ー 6 TEL03 ー 293 ー 4711 のライプラリ ◆ SYM ー RS232C ( 50.000 円 ) ◆ The C Libraries ・ Window&Menu(29,800 円 ) RS232C の制御を行うためのイ 0 ンタフェイスライプラリ テキストウインドウ関数 , メニ ハードディスクは必要ですか ? 0 ◆ SYM ー RDB ( 68.000 円 ) ー関数ライプラリ CBT とは何ですか ? QulCkC ver. 2.0 の優れた機 ・ Graphic&Mouse(29,800 円 ) 画面設計 , 帳票設計 , データベ Q 。 ickC 環境版には豊富な機 ースライプラリ 拡張グラフィック関数 , マウス 能をヤ分に発揮するためには , ぜ 関数ライプラリ 株シンフォニ ひハードディスクをお使いくださ 能があります。これらの機能を使 ・ Key&Display(29,800 円 ) 〒 141 東京都品川区東五反田 1 ー 4 い。フロッヒ。ーベースて、もコンノヾ いこなすための家庭教師プログラ キーポード , ディスプレイ関係 TEL03 ー 443 ー 0291 イル / リンクは可能て、すが , QC ア ムが CBT て、す。このプログラムを のライプラリ ドバイザや各種のメモリモデルを 実行すると , ひとつひとつのコマ MS-C ユーサーズライプラリ ・ CCF / 総合コンソールコントロー 効率よく使いこなすためには , 数 ンドを順に覚えられますから , 自 ルライプラリ ( 59 , 800 円 ) ・グラフィックマウステキストラ M バイトが必要て、す。 然に QuickC 環境版の使い方がわ 「 Graphic&Mouse 」 , 「 Win- イプラリ ( 9 , 800 円 ) かります。 dow&Menu 」 , 「 Key&Display 」な ・ワールド座標系グラフィックサ このように , 生まれ変わった どのライプラリバッケージ ポートライプラリ ( 9 , 800 円 ) QuickC は ,C コンパイラに慣れて ・ワールド座標系グラフィックサ 株ティップス いない方の C 言語学習ツールとし 0 〒 111 東京都台東区蔵前 3 ー 13-12 ポートライプラリ・タイプⅡ て , C 言語をすて、にご使用のマニア 工デイタや画面のカスタマイ TEL03 ー 866-8635 ( 9 , 800 円 ) の方の座右のコンパイラとして , ズはできますか ? ・テキスト画面高速描画処理ライ またエキスパートユーザの開発支 A 第しくはそれぞれの会社にお間 プラリ ( 12 , 800 円 ) 援ツールとしても , 十分に満足し 工デイタのキーの割り当ては ・キーポードデー・タ入力処理ライ い合わせください ていただけるものて、す。 MKKEY ューティリティ , 画面の リ 1111 い lnformation from CompiIer Maker 135