0 SOFT BANK 誰にでも使える UNIX 講座 安岡孝ー著 本書は、基本コマンドを解説した UN Ⅸ入門から始まり、順次、 sh 、 csh 、 s 、 make 、 awk という UN Ⅸの重要コマンドを、会話形式で解説したものです。登場人物 yasuoka くんの目を通して知る UN Ⅸの世界を初心者が本書で疑似体験することは、 UNIX の理 解を大いに助けることでしよう。 誰にでも使える Un ⅸ講座 I 誰にでも書ける # ! /bin/sh 講座 Ⅱ 誰にでも使える csh 講座 Ⅳ 誰にでも書ける # ! /bin/sed ー座 V 誰にでも使える make 講座 誰にでも書ける # ! /bin/awk ーー f 講座 定価 2 , 700 円 ( 税込 ) 一一 ! 。誰にでも使える UNIX 安岡孝ー蓄 UNIX システム管理入門 UN Ⅸシステム管理者に必要なのは、個々のコマンドの知識だけでなく、日常の煩雑な 問題に対処するための具体的な管理テクニックです。本書では、管理者となった方に 必要な知識を、システムの立ち上げから時系列で解説しています。 また、リファレンスとしても活用できる内容なので、すべてのシステム管理者必携の 総合解説書といえるでしよう。実用的なプログラムも豊富に記載。 EVI NEMETH 著井上尚司監訳 CONTENTS 始める前に / ブートとシャットダウン / UNIX スーバーユーザの特権 / ファイルシステム システム管理入門 / プロセスの制御 / 新しいユーサの登録 / デバイスとドライバ / カーネルの設定 / 端 ー X 、 5Y5 すに M 末とモデムのインストール / ATT での印刷 HA20300K / BSD での印刷 / ディスクの追加 / ハード EVI NEMETH ウェアのメンテナンス方法 / BSD でのネッ GARTH SNYDER/SCOTT SEEBASS 著 トワーキング / メールと BerkeleySendmail / uucp / ニュース / バックアップと過搬媒 体 / アカウンティング / デーモン / 定期的 プロセス / クオータと 0 S 制限 / システム の監視 / セキュリティ / 小型の UN Ⅸシステ ム / 雑記帳 細 B 圓烱 定価 5 , 900 円 ( 税込 ) ソフトバンク出版事業部
的な決定の例て、ある。 戦術的な決定は , 以上のようなアーキテ クチャ本体に関する決定の必須的な細部に わたるものて、ある。データベースの基本枠 組み , クラスのプロトコル , メンバ関数の シグネチャ ( 引数の形式など ) 等々はすべて 戦術的な決定の例て、ある。賢明な戦術的決 定を欠けば , どんなに素晴らしいアーキテ クチャも無用の長物と化す。また , アーキ テクチャにヴィジョンを欠けば , ほとんど どっねに大失敗に至る。 われわれの表記法はやたらと細かくて詳 しいけれども , それは , いついかなる場合 にもそれらのすべてを使えという意味て、は ない。開発プロジェクトの工程は , 形式性 (formality, フォーマルて、あること , 公式性 ) と非形式性 (informality, 非公式性 ) との均 衡がとれていなければならない。したがっ て , これらの表記成分はそのプロジェクト の狙いをうまく表現て、きるものだけを利用 すべきて、あり , それ以外は無視していただ きたい。しかも , 公式性・形式性の程度は , プロジェクトのライフサイクルの間に変化 するて、あろう。たとえば , 分析は , 開発が 最も抽象的なレベルて、進行する工程て、ある。 しかし実装段階て、は , 逆に具体的な細部を 検討しなければならない〔形式化・公式化 しなければならない要素が多い〕。 分析は , 本質的に非常に高い抽象レベル て、進行する工程なのて、 , 表記法全体の内の Fig. 1 オプジェクト指向の分析設計の枠組み 動的セマンティクス 静的セマンティクス ごく一部しか必要としない。表記法の , の基本的な部分集合は , 、、軽量プーチ表記 法 , Booch lite notation" と呼ばれている。 これと対照的に , 詳細設計は , 実装に関す る具体的な決定を盛り込まなければならな いのて、 , より表現力豊かな表記法を必要と する。 というわけなのて、 , われわれの表記法は 一見複雑て、も , 実際に使ってみるとそれほ どて、もない。表記法の , 基本成分と詳細成 分とは , はっきり区別されている。したが って , どのプロジェクトて、も分析と設計に は基本成分を使うことになろうが , その他 の成分は詳細設計を表現するために , 必要 に応じて使えばよい 本稿て、説明する表記法は , 特定の ( プログ ラミング ) 言語に依拠するものて、はない ( な くて , 一般的な表記法て、ある ) 。したがっ て , 表記法の成分の一部は , それに相当す る構文が特定の言語に存在しないこともあ りえる。実装に使用する言語が確定してい る場合は , そういうーーー該当する構文が一 語に存在しないーー表記成分の使用を避け ていただきたい。また , この表記法を , 特 定の言語向けに部分改作するのも , おおい に結構てある。そして , この表記法よりも 言語本体のほうが簡潔て、分かりやすい表現 がて、きる , という部分は の構文を使 「コロロ うべきて、ある。 たとえば , 演算に対する制限の表記を CL 論理的視界 物理的視界 クラスの構造 モジュールの構造 プロセスのアーキテクチャ オプジェクトの構造 OS 用に改変して , 主メソッドとともに : be : around メソッドなども表 fore, : after, 記してよいだろう。あるいは C 十十用には , クラスを指定する表記法を使わずに , C 十十 のヘッダファイルの名前を直接に使えばよ いだろう。 開発は , 表記法を使って絵を描くことて、 はない。分析と設計は創造的な営みて、あり , 表記法はただ , チームのメンバ間の表現と コミュニケーションを支援するだけて、ある。 また , セマンティクスの潤沢な表記法を使 えば , 複数のデベロッパがさまざまな抽象 化のレベルて、仕事がて、き , そういう表記法 をサポートするツール類を使えば , 各レベ ルのモデル間の整合性チェックに〔会議打 合せなどの〕長い時間を費やさずにすむ。 論理モデルと物理モデル われわれはこの表記法を考案するにあた って , まず最初に , オプジェクト指向のア ーキテクチャを作りたいと欲するデベロッ パが分析と設計に際して行なう , 必須的な 戦略的ならびに戦術的な決定事項は何か , という点を考えた。アーキテクチャと実装 に関する , そういう必須的な決定事項の集 合から , われわれはこの表記法の各成分を 作り上げていった。 Fig. 1 に , その際の基 本的な把握の枠組みを示す。 とくに重要なのは , 分析と設計において それぞれ独立している事項を分別すること て、ある。なかて、もデベロッパは , オプジェ クト指向のアーキテクチャを作ろうとする 場合 , 次の基本問題を考慮しなければなら ・どのようなクラスがあり , それらのクラ スはたがいにどう関連しているか ? ・個々のオプジェクトの構造はどうなって いるか , また , 複数のオプジェクトの社 会的な共働を指定するときは , どんな機 構を用いるべきか ? ・それぞれのクラスとオプジェクトは , プーチ法の表記法 ( 前編 ) ど 35
2 つのシリーズで パワーアップ〃 0 NPPC ライプラリ (NetWO 「 k Prog 「 am-to-P 「 og 「 am Communications) NPPC(Network Program-to-Program Communications) ライ プラリは、ネットワーク・アプリケーション開発を助ける強力なサプ ルーチン・パッケージです ■ IPX と Net 日 OS 両方に対応 NPPC ライプラリには 2 つのヴァージョンがあります。 1 つは Novell 社の IPX トランスポート・プロトコルに対応したヴァージョンて、、もう AllWays テキストウインドウライプラリは、マルチベンタに対応 1 つは NetBIOS ヴァージョンて、す。どちらのヴァージョンも同じ API した C 言語スクリーン・ファンクション・ライプラリです。実行する ( アプリケーション・プログラム・インタフェース ) を持っていますか に応じた高速・高機能なスクリーン里を提供します。特に LAN ら、作成するアプリケーションはソース・レベルて完全な互換性があり 対応アプリケーションの場合、マルチベンダ対応は非常に重要かっ困 ます。運用する環境に応じた NPPC ライプラリをリンクするだけて、す。 難な問題です。 AIIWays を使用して作成したアプリケーションなら、 ・言語インタフェースの提供 1 つの実行ファイルだけで多くのに対応できます。毎の実行 NPPC ライプラリて、は、 C 言語およびアセンプリ言語のインタフェー ファイルを用意する必要はありません。 スが標材是供されます。 IPX や NetBIOS のプログラミングについて ・機種依存部分を分離 新たに学習する必要はありません。メッセージのキューイン久転送、 AllWays は、スクリーンやキーポードなどの機種依存部分をランタイ 受取り、エラー時の再送、 IPX や NetBIOS の初期化および終了処理な ム・エクステンションとして分離しました。これらのモジュールは作 どはすべて NPPC によってコントロールされます。メッセージは 成した実行ファイルにリンクされるのて、はなく、実行時にダイナミッ FIFO モードあるいは指定した優頂にアプリケーションに渡すこと クにロードされます。どの機種用のモジュールをロードするかは竟 が可能て、す。 変数によって指定しますから、作成した実行ファイルには機種依存部 ■アプリケーション・モデル 分を含む必要はないのて、す。 NPPC ライプラリを使用して作成されたアプリケーションて、は、どの ・高速でコンパクトなランタイム・エクステンション ステーションもクライアント、サーバあるいはその両方の機能を利用 機種依存部分をまとめたランタイム・エクステンションは、 PC9800 、 て、きます。非同期 / 同期メッセージ転送が、クライアント / サーパ・ FMR 、 PS/55 、 Jー3100 、 AX 、 DOS/V など、主要な国産パーソナルコ モデルおよびヒ。ア・トウ・ピア・モデルてサポートされます。 ンヒ。ュータ用のものが殆ど提供されます。しかも、各機種窈生能を最 ーフル・アセンプラ 大に活用て、きるように高速・コンパクトに設計されています。 NPPC ライプラリは 10 般 6 アセンプラて言されており、オプション ■多彩な入力里を提供 て、ソースコードも提供しています。なお、 NPPC ライプラリを組み込 入力フィールドのデータタイフ寸旨定、各種入力属 1 旨定、文字色指定、 んだアプリケーションは約 30KB のメモリを余分に必とします。 カーソル表示制御、自重友け出し指定、 FE 歸リ御などカイきます。ま ・ランタイム・ライセンス・フリー た攵国杉入力フィールドもサポートしています。フィールド内て、のスク NPPC ライプラリを組み込んだアプリケーションは、追加費用を支払 ロールもサポートしていますのて、、実際の表示フィールドより大きな うことなく、自由に販売・配布することカイきます。 データの入力・編集も可能て、す。 〈価格〉 ーウインドウ里を NPPC forIPX ¥ 68 , 000 最大 64 個のオーヴァラップ・ウインドウカ甲」用て、きます。ウインドウ NPPC f ロ rIPX / ソースコード付き¥ 120 , 000 のポップアップ、移動、サイズ / カラー / タイトルの変更などが容易 NPPC for NetBIOS ¥ 68 , 000 て、す。ウインドウ内て、のスクロールも可能て、す。 NPPC fo 「 NetB 旧 S / ソースコード付き¥ 120 , 000 ・ラ明メニューの ※ IBM-PC 版と NEC PC9800 版はそれぞれ別製品て、す。いずれも ポップアップ・メニュー、プルダウン・メニュー、メニュー・バー MS-DOS v3.1 以上が必要て、す。 階層メニューを容易に実現する関数を提供しています。階層メニュー ※ IBM-PC, 版は BIOS レベルて、 IBM-PC と互換性のあるマシンて、あ て、は、特に表示位置を指定しなくてもサプメニューの適切位置表示が れば使用可能て、す。具イ勺な機種についてはお問い合わせください。 自重加勺に行われます。 ■ランタイム・ライセンス・フリー ・お問い合わせは 作成したアプリケーションは、機種依存部分のランタイム・エクステ 株式会社工ーシーテック ンションと共に、自由に配布・販売することカイきます。 〈価格》¥ 68 , 000 〒 461 名古屋市東区東桜一丁目 10 ー 9 ベルエースビル 4F PHON E. 052 ー 951 ー 2706 代 FAX. 052 ー 951 ー 4469 ※ソースコード付きヴァージョンも用意されています ( 価格 : \ 180 , 000 ) く資料請求番号 1 84 〉 AG-TECH
れる。単にゞほどほどによい〃標準て、よい のだ。て、も , 我々技術者にとっては , この 教訓を理解するのがなかなか難しい 私が学生時代に大学へ持っていった RoyaI のポータブルタイプライタは , 19 世紀の古 典的な機械式タイプライタと比べてもほん の些細な相違しかなかった ( そう , 1960 年代 になっても機械式タイプライタがまだ作ら れていたのだ ) 。そのキーポードと現在の一 般的なコンピュータキーポードを比較する と , いくつかのノヾンクチュエーションキー ( 訳注 : 英数字以外の文字用のキー ) の位置 が少なくとも違っていたはずだ。いま思い 出してみると , 当時の典型的な IBM タイプ ライタのキーボード配列と本当によく似て 現在のタイプライタキーポードの使い勝 手が安定していることに関しては , IBM に 感謝しなければならないだろう。この会社 は , ほかの企業より、、ほどほどによい いうことをよく理解していたようだ。そし て , 第一級の設計者による製品のリリース も何度か行われた。その結果 , 当然のごと くオフィス機器市場を長い間圧倒してきた。 IBM の Selectric キーポ、一ドの影響は , コン ピュータによるワードプロセッシングが普 通になった現在て、も残っている。 キーボードは不滅 て、も , 早合点してはいけない , 問題もあ ったのだ。 1970 年代後半に最初のホビイス ト用 ( 個人向け ) キーポードが登場したとき を思い出してみよう。その当時はハードウ ェアコストを抑えることが重要だったのて、 , いろいろ野蛮な〃手段が使われた。たと えば , プラスキー ( 十 ) の代わりにイコール サインキー ( = ) をシフトすれば , ゲートを 1 個か 2 個節約て、きる。実際にそうした設計 者もいたにんなことは本当はどちらて、もい いのだ。 Christopher CoIumbus だってイン ドを探すつもりだったのに , アメリカ大陸 に行き当たってしまったのだから ) 。 ニコンビュータのべンダも同じような ものだった。彼らの予算は膨大だったが , 実用的な感覚はそれほどて、もなかった。な にせ , 我々が想像もしないようなさまざま な場所にバックスラッシュキー ( \ ) を隠し たのだから。これは , 初期の UNIX 関係者に は困ったことだった。 もっともほかのユー ザにとっても , よく使うコントロールキー や ALT キーを探し回らなければならなかっ たのて、 , 同じことだ。 シフトキーの追加以外に , ASCII に対応す るために数文字が新たに導入された。それ らは SeIectric ゴルフポールタイプライタに は含まれない文字て、ある。これらの文字は すべて , キリストを思弄したさまよえるユ ダヤ人と同様に , 安定した居住地 ( キーの位 置 ) を持てない運命にあるのだ。キリストの 降臨まて , 彼らに安住の地は見つからない 10 年ほど前に IBM が攻撃を再開した。ビ ッグプルー ( IBM ) が PC て、も市場を支配し , 事実上の標準さえ確立て、きることを知らし めた。そうなると , ほとんどのキーボード が PC と似たものになってきた。その結果 , 私の指も再びくつろいだ気分になれた。新 しいファンクションキーや矢印キーの場所 さえ , 指が覚え始めた。 PC のキーポードは 完璧な標準て、はなかったが , 、、ほどほどによ いクものだった。 そうすると IBM は次に , 拡張 AT キーポー ドを導入した。このキーボ、一ドはいくつか のキーを , 何か , とるに足らない理由て、置 き換えただけのものとしか思えない。そし て次に AppIe が Macintosh を出してきて , ビ ッグプルーを盲目的にまねたものてない とを証明した。さらに Sun がワークステーシ ョン市場を PC とは分離し , 支配力を強め た。ワークスラーションには単なる PC の場 合とは異なり , もっと真剣なニーズがある のを知らされた。ても , それは , もう一度 タッチタイピングに戻っても安全だろうと 思い始めた頃だったのだ programming 聞町咄 私は , ここて、単にタイヒ。ストたちの声だ けを代弁しているのて、はない。コンピュー タがしゃべったり聞いたりすることの必要 性を強く信じている人たちてさえも , キー ポードが使われ続けると思っている。だか ら , アプリケーションて、ホストと対話をす るためには , キーポードがどうしても必要 なのて、ある ( マウスなどのポイント & クリッ クだけて、 , すべてを表現て、きるわけて、はな い ) 。つまり , タイピング技術がポータブル になるほど , そしてタイプすることが日常 的になるほど , より多くのコンヒ。ュータが 日々の暮らしにスムーズに入り込むように なるのだ。人々に対してコンピュータが脅 威て、あるかぎり , 本当の意味て、の一般化は 理だ。 メタキーの存在 我々プログラマにとって , とくに重要な アプリケーションはテキストエデイタて、あ る。以前のコラムて、テキストエデイタに関 する一般的な不満を説明 ( 本誌 1991 年 11 月 号 fText Editors 』参照 ) した。普通我々は , 工ディットしているテキストの変化のよう すを心理的にモデル化している。そして , テキストが期待どおりに ( つまり , 心理的な モデルと同じように ) 変化していることを確 認するためにスクリーンディスプレイを使 う。その確認に必要なものがスクリーンデ イスプレイから視覚的に得られれば , それ は有用なフィードバックといえる。スクリ ーン上 ( あるいは用紙上 ) て、変化を示すなん らかのマークさえ得られれば , 実現方法は どのようなものて、もよい しかし , そのようなマークを生成するこ と以上を望むと難しくなってくる。すべて のキーストロークが表示 ( あるいは印字 ) 可 能な文字を生成するとは限らないのて , テ キストを直接生成せずに何らかの指示を表 すメタキー〃としての扱いが必要になっ Programming on Purpose てくる。そうすると , メタキーストローク 31
に一彡売 のリストの内 , 最大値を返す関数の例を Li st 5 に示します。可変個の引数を処理する関 数を定義しているソースファイルには , 必 ず stdarg. h をインクルードしなければならな ことに注意してください。 MaxList 関数 を参照するほかのソースコードは , 必ず Fi g. 2 のような正しいプロトタイプ宣言をしな ければなりません。 可変個の引数処理についての詳しいこと は , ANSI の規格書か ANSI C の解説書 , あ るいは , ANSI C に準拠したコンパイラのリ ファレンスマニュアルを参照してください パソコン用コンバイラからの移植 パソコンて、使用て、きるコンパイラのほと んどは ANSI 規格に従っており , プログラム の多くは特別な変更を必要としません。 しかし , コンパイラ特有のライプラリ関 数を使用しているプログラムには問題があ ります。コンパイラ特有のライプラリ関数 の使用に対しては , 1 等価な ANSI で定義されているライプ ラリ関数を使用する 2. ユーザ自身のライプラリ関数を書く といった方法て、対処します。 複数のコンパイラに対してソースコード を共有しなければならないときには処理系 が自動的に定義するマクロ名 ( TabIe 2 ) を利 用して条件コンパイルを行うようにプログ ラムすると便利て、す。 List 6 は , 各処理系が デフォルトて、定義しているマクロ、、 WAT COMC 〃を使用して条件コンパイルし WA TCOMC 用と MS ー C 用の正しいコードを生 成することがて、きます。 前述のように処理系によっては , 関数の 呼び出しにおいてレジスタを使用したり , スタックの解放を関数て、行ったりと , 従来 のコンパイラとは異なる仕様になっている 場合があります ( とくに , 新しいコンパイラ は最適化を追求して関数呼び出しのオーバ ヘッドを減らすためにこのような仕様にな っている場合があります ) 。 152 C MAGAZINE 1993 1 ほかのコンパイラからコードを変換する には , 通常 C のソースコードを再コンパイル する必要があります。また , アセンプリ言 語て、書かれた関数に対しては ( 引数をスタッ クに積み上げる古い関数の呼び出し方を使 用するために ) 関数自体を書き直す必要が出 てきますが , プロトタイプ宣言を使って従 来の関数インタフェイスを使用することも て、きます。 たとえば , アセンプリ言語て、書かれたⅵ d eo init 関数 , video_put 関数 , video get 関 数があった場合 , これらの関数を使用する ソースファイルの中に Fig. 3 のようなプロト タイプ宣言を記述します。処理系によって は , ヘッダファイル、、 stddef. h クを含む必要が あります。これは , stddef. h 中 <cdecl とい う関数の呼び出し方を定義している場合が あるためて、す。 C コンパイラは , これらの 3 つの関数が cd ecl という関数の呼び出し方て、あることを認 識し , 従来の C コンパイラ同様 , 引数はスタ ックて、渡し , 引数渡しに使用したスタック は , 呼び出したルーチンのほうて、解放する というコードを出力します。 しかし , 32 ビット C コンパイラへの移植て、 実際に問題になるのは , 変数の型の違いに よって古い C のプログラムが新しい C コンパ イラて、通らなくなる場合て、す。すなわち , 古い C が変数の型に対してあまり厳密て、はな かったために通っていた異なる型の代入な どを含むプログラムは , 新しい C コンパイラ て、は通らなくなるということて、す。 また , ANSI C て、型が追加され , 標準関数 て、ありながら引数の型が変わっているもの もあります。 typedef を使って型を定義して おきながら , あるときにはその定義した型 を使い , またあるときには基本型を使って いるということがあります。しかも , type def を使って定義したときは修飾子 short を使 っていながら , 基本型をそのまま使ってい るところて、は short を忘れるということをす ると 16 ビット系の C コンパイラて、は , sizeo f(int) = = sizeof(short int) て、あるために通 っていたソースコードが 32 ビットの C コンノヾ イラて、は通らなくなるということが起こり 型が変わった例としては time 関数があり ます 0ANSI C て、 time t 型が導入され time 関 数の引数は time t 型へのポインタとなりまし たが , 従来は , (unsigned) long 型へのポイ ンタが使われていました 0ANSIC て、は , 引 数の型チェックが行われるのて、 time 関数の 引数に long 型へのポインタが渡されると , 工ラーにこそなりませんが警告がて、ます。 また , 標準関数の型宣言は , ANSIC て、は C コンパイラに付属するヘッダファイルの中 Fig. 2 MaxList 関数をほかのファイルから参照する場合のプロトタイプ宣言 extern int MaxList( int hOW many, Fig. 3 video init, video_put, vodeo get のプロトタイプ宣 #include く stddef. h> extern int cdecl video init( void ) . extern void cdecl video put( int 「 OW , int COI , char ch, int a せ「 ) TabIe 2 各処理系が自動的に定義するマクロ extern char cdecl video get( int 「 OW , int COI ) コンパイラ マクロ名 WATCOM C / 386 High C / 386 WATCOMC H ℃ H C MS-C MSC VER Lattice C LATT ℃ E
釦 0 曲 Meth0d : 洳 ta 加 Part I はその値がクラ ないクラスだ。われわれの表記法て、は , 抽 属性一一一データメンノヾ て、ある。 スのオプジェクトの中に物理的に実在する , 象クラスは , Fig. 4 に示すように , 三角形て こういう追加的な記入欄は , 一定の形式 オプジェクトに、、持たれている〃 という意 囲んだ A て、表す。 を守ることによって , クラスの内容指定に 味〕。 一貫性をもたせることがて、きる。この考え クラスのフレーバの区別に加えて , クラ ス図の中にオプジェクトを含める場合もあ 方は , MicrosoftWord のスタイルシートと ・ N : C 属性名と属性クラス 似たものて、ある。記入欄の一定の形式があ る。これは , static なメンバオプジェクトが : C 属性クラスのみ ることによって , クラスの仕様要素がアイ 存在することを示すためや , クラスがグロ 属性名のみ ーバルなオプジェクトを使っているときに コンの中に書き出されているのか , いない 属性名のみ 属性名は , メソッド , 属性 , およびその のか , という点もすぐに分かる。 Fig. 3 にそ よく必要になる。 の形を示す。曖昧になるおそれがなければ , クラスから出る has 関係の集合の中て、 , ュニ クラスの関係 ークて、なければならない 区画部分だけを矩形て、囲んて、もよい。区画 内の個々の項目が , ひとつの属性ないしひ 属性名の後に , = に続けてその属性のイン スタンスの値を書くこともて、きる。値を表 とつのメソッドを表す。 クラスやオプジェクト間の関係の表記は , すその式は , その属性のデフォルト値を表 それらの間の重要な相互作用を定義するた クラス名は同時に , そのクラスの全メン す。メソッド項目は名前だけを書き , その バの宣言も表現している。区画は単に , そ めに用いる。 Fig. 5 に , 各種のクラス間関係 ういうメンバの一部を図中に書き表す方便 後ろに ( ) または完全なシグネチャを書くこ の表現に用いるアイコンを示す。 にすぎない〔 = 区画欄がなくてクラス名だ 関係表記にはそれぞれラベルを付けて , とによって , 属性と区別する。 けの場合もそのクラスにメンバがないとい メソッドのシグネチャは , 詳細情報に属 その関係の名前を明記する。それぞれの結 う意味て、はない〕。一部の属性を書き出すこ する。したがって , メソッドのシグネチャ 合に , さらに四つの追加項目のひとつを付 とによって , 工ンティティ〔この場合はク を区画内に書くことは , 実際的て、ない場合 けることがて、きる。複数の役割や制限 , あ ラス〕の構造が理解しやすくなる。同じく , るいはキーなどは , コンマて、区切ったテキ が多く , また不必要なことも多い ストて、書き表す。最初の追加項目は , 結合 一部のメソッドを示すことによって , 工ン メソッド名は , メソッド , 属性 , および そのクラスから出る has 関係の集合の中て、 , の一端または両端に書くテキストて、 , その ティティの振る舞いが理解しやすくなる。 結合の役割を言明するものて、ある ( ソースか この意味て、 , この表記法における区画は , ュニークて、なければならない。このユニ クラスの仕様に対する部分的な視界のひと らターゲット方向へ読む ) 。 ク性という制限は , パラメータのシグネチ つにすぎない。あえてこの点を強調するの ヤを使ってメソッド名をオーバロードて、き 第二の項目は , 結合の濃度の表記て、ある。 るならば , 緩和される。 濃度は , 結合のどちらかの端 ( あるいは has ごく小さなクラスを除いては , クラス は , の全メンバを追加記入欄に書き出すことは , 属性やメソッドを書くときは , その名前 関係のターゲット側 ) に書く。第三の項目 は , 関係の一端または両端にプレースて、囲 実際的て、ないからて、ある〔、、区画〃の中には , や記法を使用する言語のシンタクスに合わ せてもよい。たとえば , C 十十の場合なら , んだテキストを書いて , その結合の制限を 重要とか , 理解を助けるとか思われるデー 説明する。そして第四は , 結合の一端また static, const, virtual といった修飾子を使 タメンバやメンバ関数だけを書けばよい は両端に , プラケットて、囲んだテキストを の意〕。 ってもよい 書いて , ターゲットの識別に用いるキーを static (C 十十のクラスのメソッドに対する 属性とは , 値を持っ結合 ( 値による has 関 係 ) の一種て、あり , そのラベルが属性名 , 帰 指定 ) , virtual (C 十十におけるパラメトリッ 己述する。 クな多態性 (parametric polymorphism) の ターゲットクラスの属性を並 属先がターゲットのクラス , そしてその濃 キーとは , ソースオプジェクトに結びつ 度は 1 〔ひとつの属性はそれひとっしかない〕 指定 ) , および pure virtual(C 十十におけ べたものて、 , く複数のターゲットオプジェクトの中て、 , る , サプクラスが実装しなければならない て、ある。もっと簡単に言うと , 属性 ()n at tribute) はクラスのオプジェクトの特質 ( a p メソッドの指定 ) , 以上三つが〔 OOD にとっ ひとつのオプジェクト ( たとえば , 在庫管理 て〕最も重要な修飾子て、ある。 const やその システムにおける Part (D) をユニークに識 r 叩 erty) を表す。属性項目としては , 名前 , クラス , あるいはその両方を書く。次のよ 他の修飾子は , 一般的に , 二義的な重要性 別するために用いるものて、ある。その他の 追加項目 , たとえばソートの方針なども , うな属性項目が定義されている〔、、値による しかない 盛り込んて、よい 抽象クラスは , そのインスタンスを作れ has 関係クについては後述する。要するに 一三ロ 38 C MAGAZINE 1993 1
ス セ ク ア ム ダ ン一 ( の 玄】 田 いる。日本て、はまず見られない文面てある。 社外秘ということもあって , 実物は見せて つまり , みんな働かなくなってしまったと もらえなかったが , 今まて、実際にかなりの PIADEIN MADE 爪 0 ト ーⅣ為 N 祕ーⅣ N いうことのよ・うだ。また , 大学て、もあまり 数の韓国語版 UNIX を売ったということだっ MÅDE 学生は勉強をしなくなってきた ( あ , これは 丁ⅣⅣ 日本も同じか ) 。ひところは韓国人は中国人 しかし , そういう意欲的な研究や仕事を と並んて、 , アメリカの大学への留学も優秀 しているところは希だ。けして先生方に意 な学生が多かったといわれていたが , どう 欲がないということて、はなく , 新しいもの も今はそうて、もないらしい や情報がほとんど国内に入ってこないとい かっては「勤勉な国民」として世界て、も有 う現実があるからなのだ。輸入品は手を出 名だった韓国の人たちが , 今 , あまり働か すには高すぎるし , PC 関連製品は国の政策 なくなってしまっている , というのが現実 に合わないものは入れてもらえない。 ら研究者や開発者は新しい情報がほしくて イイ しかたがない。おまけに , 最近少し悪化し コンピュータ市場の比較 てしまったように見える日本と韓国の関係 の問題から , 名前のある人たちが日本など 日本という国は , 戦後アメリカをお手本 の外国にいきにくくなってしまったという に「追いつけ追い越せ」をやってきた。、 事情もあるようだった。 らコンピュータの技術なども「かろうじて」 とくに韓国て、は外国のハイテク関連情報 は , そのほとんどを大企業が独占してしま アメリカの技術進歩のおしりにへばりつい れからのダウンサイジングはおそらく日本 って , なかなか民間に降りてこないという という感じがある。アメリ てやってきた , 以外のアジア諸国のほうが先に進むだろう 事情もある。これて、はすばらしいソフトな カて、やっていたものは , 端から吸収し , な ことは , 十分考えられる。 どはなかなか生まれないだろう。大学生の んとか自分たちのものにしてきたといって 高くて手が出なかった技術て、はなく安い サークルが作ったといわれる韓国製のすば もよいだろう。だから , アメリカの時代の 技術こそ , コンピュータ技術の本命だとす 後を追って , 大型コンピュータ全盛の時代 らしいフリーソフトウェアの通信ソフトが もあったし , 中型コンビュータの時代があ るならば , この予測はあながちはずれたも あるが , ああいうソフトウェアがもっと出 のにはならないだろう。考えてみればコン てくるような下地がこの国にはもっと必要 ったし , パソコンの時代 , UNIX の時代もあ て、ある。やっと安価な PC の時代がやってき ピュータというものは , 端的にいってコス った。 た世界情勢からみれば , 高い PC は時代錯誤 日本を除いた , 韓国を含めたアジア諸国 トダウンのためのものて、ある。コンヒ。ュー て、ある。「高い技術は ( 直接的 , 間接的に ) 安 タを使ってコストダウン , あるいは効率化 はそういうアメリカの技術革新の波を受け いものを作る」のて、なければ , なぜ高い金を が図れなければ導入に意味はない。したが とめられるほどの器がなく , そういう技術 かけた技術などが必要になるのだろう ? って , 行き着くところまて、いけばコンピュ の進歩から半分はおいてきばりにされてし 国の見栄ばかりを考えるのて、はなく , ータ自身のコストダウンは必須て、ある。 まっていた。しかし , この時代になってか ういう「アジアの実質」を先取りしたやり方 だからこそ , 台湾製 PC が大きく伸びたの ら , むしろそれが幸いしたのて、はないか , こそ , おそらくこれからのコンピュータ社 と私は思っている。ついてこられなかった だろう。 会て、は必須の「成長の要件」となることだろ ぶんだけ , まっさらな市場が多いのだから , 研究者はどうしているか う。そういう意味て、日本のコンピュータ産 新しいものをより早く受け入れる素地が多 業は「いったい何のためのコンピュータなの いと考えられるからだ。日本のようになま か」という問にきちんと答えを出していかな じ受け入れてしまってきただけに「汚れてい また , 韓国のコンピュータ研究者やそれ ければならない時代になったといえるだろ る」市場てはない。そして , その市場に育つ に近い方々にもお会いした。ある会社ては AT&T 社から UNIX のディストリビュータ コンピュータ産業は「安い」を売りものにす フ。 そうて、なければ , 日本のコンピュータ産 る , きわめてアジア的な市場だ。 向けライセンスを取得し , UNIX の韓国語版 だから , 韓国だけてはないだろうが , を作っているということだった。 もちろん 業の未来はないだろう。 MADE IN ー。・ MADE / Ⅳ な / ルⅣ MADE ー 丁ル A Ⅳ 三田典玄のランダムアクセス 125
List 2 ば , もう少し使いやすくなるて、しよう。 たとえば , AX マシンて、は 00h ~ IFh の領域 に半角の罫線コードを割り当てているため , 一部の半角罫線をサポートすることがて、き ます ( ただし , 00h ~ 1Fh にはコンソールの 制御コードが割り当てられているため , 07h ( ブザー ) , 08h ( バックスペース ) , 09h ( タ プ ) , 0Dh ( キャリッジリターン ) , OAH ( ラ インフィード ) など使用て、きないものもあり ます ) 。 ・↓、 0 す ま な ' と ン , , 定 指 、ン 4 4 0 . 一新す力 A レ [ ま出 し入 換準 O O 月出変標 換 1 」 00 合 変秘訂場 訂カな 0 ・ 1 り 7 入し し . し 定 、ン 9 — 1 よ O ・ 1 を 00 ・′、 0 ・ 1 1 0 3 用出 O ′、・ 1 人 o \ 使訂入” 0 響 O 0 LD 6 7 ー 8 9 0 41 り 0 00 4 0 6 ー 8 9 0 、よりな 00 -4 0 6 ー 8 9 0 ・ー《り 0 っ 0 4 - -0 ^ 0 ー 8 9 0 1 人りっ 0 4- 【 0 ワー 8 0 1 人 0 00 4- - -0 6 ロー 8 9 / * JIS →シフト JIS 変換 まとめ 漢字というもっとも重要なもののひとつ が統一されていないというのは本当に不思 議なことて、す。 GUI が主流にな機種間の差異カ剛及収さ れるといってもキーポードや漢字コードな ど直接触れる部分に非互換の部分が少なく ありません。という泣き言をいっても始ま りませんから , ユーザとしてはなんらかの 変換を行って対応していくしかないて、しょ 今回紹介した漢字コードの変換はプリン トアウトユーティリティを作成するときに 必要となります。罫線コードに関しては新 JIS と旧 JIS て、お互いに空きコードの部分に なっているため , どちらの罫線コードがあ っても印字て、きる罫線コードに変換してプ リンタに送ってやれば結構便利て、す。 筆者の自作のプリントアウトユーティリ ティてはこのような変換を行っており , 全 角罫線 , 半角罫線ともに線をつないて、印字 する機能も追加しています。そのおかげて プリントアウトに関してはパソコンの機種 にそれほど気を使う必要がなくなっていま す。 皆さんもプリントアウトユーティリティ を自作するときには参考にしてください 【編集部注】 Fig. 1 の、、平成〃という文字は , 平成以降に製 造されたパソコン , プリンタに追加されて います。 } else { if ( kanji ) { if ( ( int ) ( c2 = ( unsigned )getc( fpr ) ) re turn ( ERR ) : = jistojms( ( cl くく 8 ) ー c2 ) ; cl putc( ( cl 〉〉 8 ) , fpw ) ; putc( cl, fpw ) ; = EOF ) Table 1 AX マシンで特別に追加された漢字コード シフト J 旧 0 1 2 3 4 5 6 7 8 9 A B C D E F JIS 873F ①②③④⑤⑥⑦⑧⑨⑩⑦⑩⑩⑩⑩ 874F ⑩⑩⑩⑩⑩ I nMIVVVIWVMIXX 875 F ミリキロットン解やらレ齧 876F mm ⅲ , 贐皿①①@⑥代翻柾 8780 三工ⅵ亠 / / ・ . ・ n IJ 8790 2D20 2D30 2D40 2D50 2D60 2D70 102 C MAGAZINE 1993 1
リ The 0 + 本番のプログラミングて、 , 本気て、安全を いうと , 「クラスのひな型を作っておく」仕 はなれません。 期すなら ,SortEIem クラスに copy() という よい機会てすのて , 継承や仮想関数に関 掛けということになります。汎用の「型」に ような仮想関数を作るかしてインスタンス 対するクラスといってもよいて、しよう。そ する表を ARM から引用して , Table 1 に掲 の複製を作れるようにしておく必要があり の意味て , 今回扱った抽象クラスと若干似 載します。 ます。 ている気もしますが , 外見・方法論はまっ ちょっと脱線・・・ たく異なります。テンプレートの場合 , SortEIem * SortElem : : copy ( ) テンプレート という感じて、。 ラメータとして型 ( クラスなど ) を取り , そ て、も , ちょっと待って。インスタンスを テンプレート機構は , AT&T 版の C 十十 の型に応じた各々のクラスはコンパイラが コヒ。ーする特殊なメンバ関数に , コピーコ て、いうと ReI. 3 から取り入れられた機能て、 自動的に生成してくれます。 インタフェイスの統一に継承を使う場合 ンストラクタというのがあったじゃないか。 す。 コピーコンストラクタを使って , 余談て、すが , BC 十十 3.0 において , いまだ には , どうしてもキャストを使わなければ に満たされていない ARM のメジャーな仕様 ならないケースが多いのてすが , テンプレ SortElem * newone new SortEIem .org/ には例外ハンドリング (Exception Handlin ートの場合にはたいてい不要になります。 g ) がありますが , これが AT&T の ReI. 3 て、 じゃ駄目なの ? キャストを忌み嫌う人には , テンプレート ちょっと考えてみればすぐにわかります のほうが精神衛生上よろしいようてす。 実現されなかったため , 実質上 BorIand 継承によるクラスライプラリが垂直指向 が , これて、作ろうとしているのは SortElem C 十十 3.0 は AT & TC 十十 3 と同等の機能 のインスタンスて、あって , org と同じクラス を備えていることになります。 なものだとすれば , テンプレートによるク ちなみに , 例の新 ARM 第 19 章によると ラスライプラリは水平指向とて、も呼べるて、 のインスタンスて、はありません ( コンパイル テンプレート・例外ハンドリングともども してもエラーになります ) 。インスタンスを 作るときには , その型 ( クラス ) を正確に知 ANSI C 十十の規格として採用されるという しかし , もう誌面がなくなってきました ことてす。 , テンプレートはまた別の機会に る必要があるのて、す。 のて、い一 て、 , テンプレートとはいったい何か , このため , コンストラクタは仮想関数に と ご紹介することにしましよう。 SubStory 十十 登場人物 C 子 : C 子で ~ す。お正月といえばおせち。 プラ子 . プラ子です。おせちもいいけど , カレーもね ( 誉 ) 。 ぶらなりあ : ぶりぶら。ぶりぶら ( 一年中正月な奴 ~ ) 。 コラム を用意しておいたって ? プラ子 : こいつ何ものやねん。 C 子 : じゃ , このプログラムて、じゃんけんしてきめましよ。 ー同 . じゃんけんつば一んつ。 ぶらなりあ : ぶー ( : C 子 : あはは , やつばりぶらちゃんの負けだ プラ子 : じゃ , よろしくねつ。 ( ぶらなりあがコンビニに出かけた後て ) C 子 : プラ子 , プログラムに細工しなかった ? プラ子 : あはは , ちょっとね。ぶらちゃんが抽象クラスを使っ て共通な基本クラスを用意してたから , 派生クラスの中て、 , 手の出し方をちょこちょこっと細工したのよ。 C 子 : おぬしもワルよのお。 というわけて , 付録ディスクにプログラムを収めておいたの て見てくださいね。て、はまた来月 ~ C 子 : お正月ねえ。 プラ子 : そうねえ。てもおせちもぶらちゃんが全部食べちゃっ たし , どうしましよ。 ぶらなりあ : ぶー C 子 . うーん , カレーが食べたいつ。 プラ子 : あ , 私もつ。 ぶらなりあ : ぶらぶらぶらぶら。 C 子 : ても外へ出るのはおっくうだなあ。 プラ子 : じゃ , じゃんけんて、きめましよ ( ぶらなりあぶつつぶー C 子 . あららちん , そうなると思てじんけんプ 0 グラ C 十十入門講座 111
ロ OS / V のアプリが 98 の上で開発できます。 DOS / V 版クラシックウインドウのライプラリ関数は、 9 8 版の関数と ビュートが機種により異なりますので、多少の修正は必要です。 ) また、 DOS / V 用アプリのコンパイルや、 DOS / V 版ライプラリのリン ソースレベルで互換性がありますので、 9 8 版クラシックウインドウで 98 用に開発されたアプリのソースは、 DOS / V 版のライプラリをリ ク作業は 9 8 の上で行えますので、 DOS / V 機側にエデイターやコン ンクする事により、即 DOS / V アプリになります。 ( テキスト文字のアトリ パイラがなくても、 DOS / V 用アプリの開発が行えます。 C 言語用関数ライプラリ クラシックウインドウのライプラリ関 数を組み込んて作成されたアプリ ケーションプログラムに対するロイ ャリティーは頂いておりません。 対応種 く PC—9 8 版 > クラシックウインドウは ウインドウが簡単に開ける ように各要素に PC ー 9801VM 以降 PC ー 286 / 386 / 486 ノーマルモード専用 ( 98LT 、ハイレゾ不可 ) 既定値を設け、必要なときに必要なところだけ変更す こがちがいます。 れば良いだけです。グラフィックパターンは描写時 ( 登 く DOS/V 版 > 旧 M DOS-J5.0 / V ( 互換 OS ) が動作するマシン 録時 ) にメモリーを確保して行くので、グラフィックパ ウインドウを階層化 ターンの数に制限は無く、ウインドウ作成時にその数 対応言語 して管理しています。階層 MS-C,TURBO-C ほか ライプラリ Y38 ′ 000 . 販売価格 ごとに表示、消去、移動等ができます。ウインドウ作成 を指定する必要もありません。 ( 税別 ) ソースコード V98 ′ 000. 時は、表示位置や重なり位置は親ウインドウの位置 もちろんマウスは完全対応 してます。マウス が基準になり決定されますので、その位置を指定する の状態やウインドウ上の位置だけでなく、フレーム上 必要はありません。また、グラフィック / ヾターンはグルー の位置やグラフィックパターンの番号も取得できます。 プ化によりグループごとに移動や色の変更、消去か グラフィックパターンが重なり合うときは、読み取り間 できます。 違いを防ぐため、どちらかの読み取りを禁止することも グラフィックはオリジナルアセンプラルーチン できます。 で高速処理を実現しています。立体感のあるフレーム 工デイターもサポート しています。画面回りで や多色タイルバターンのパックグランドがきれいに、簡 一番めんどうなラインエテイター、スクリーンエテイター 単に、高速で使えます。 GDC 、凵 0 等の 9 8 固有の機 も完璧に処理できます。工デイター実行中に、時刻表 能はほとんど使用していませんので、他機種への移 示やマウスなどの並行処理も可能です。 植も可能です。 クラシックウインドウ 出来ており、 SDT のライプラリ関数で展開された画面 に対してもウインドウ関数を利用できますので、 SDT だ Q & A けでは表現できない利用法も考えられます。 Q. DOS / V 機には 98 のようなテキスト V - 日 AM 発売以来たくさんのお問い合わせありがとうございま がありませんかどう処理しているか教えてください。 した。 8 、 9 月中に戴いたこ質問の中から一部をこ A. DOS / V ( VGA ) の画面表示は、 9 8 のようにテキ でご紹介します。 ストとグラフィックスをスー / ヾーインポーズすることがで Q. ウインドウの階層化を説明してください。 きないため、 4 プレーンある V - RAM の内一プレーンま たは 2 プレーンをテキスト用に、残りをグラフィックス用 A. クラシックウインドウシステムを使うとき一番始めに Winit 関数を実行しますが、この関数内では内部変数 に使って表示しています。このため再現できる色の数 を初期化すると同時に、バックグランドウインドウと呼 が制限されますが、テキストもグラフィックスも互いに干 渉せすに表示できます。またグラフィックを使わないア ばれるウインドウが一つ作られます。 / ヾックグランドウィ プリの開発用に、疑似テキストバッフアをつかったタイ ンドウの大きさは 80 文字 X25 行で CRT 画面そのものと プも用意しております。こちらは入出力にすべて引 OS 考えられ、つぎに Wcreate 関数で作成される新たな を使っていますので、互換 OS はもちろん、 WINDOW ウインドウの親ウインドウとなります。階層を更に深くす や OS / 2 で「 DOS ポックス」を開いてその中で動作さ るときは、先に作成したウインドウの番号を親に指定 せる事もできます。 すればバックグランドウインドウの孫ウインドウになりま す。階層化する必要が無いときは、単に 0 番 ( バック Q. マウスドライバーは MOUSE , COM か必要 グランドウインドウの番号 ) を指定すれば階層を意識 せずプログラミングできます。 とありますか MOUSE , SYS は使えませんか。 A. 使えません。 SYS 型より COM 型ドライバーの方が Q. SDT とクラシックウインドウの関係は . マウスカーソルがきれいに表示できる点と、他機種の A. SDT は画面レイアウトを設計するエデイターと画面 DOS のマウスドライバーとの互換性から COM 型を採用 データファイルを取り込むライプラリ関数から構成され しています。ただし、 COM 型ドライノヾーが手元に無い ています。 SDT のエデイターによって作成された画面 方や、併用するソフトで問題のある方には個別に SYS データファイルはクラシックウインドウの内部データで 型に対応しますのでお問い合わせください。 クラシックウインドウ . 。ルノ これ 0 こ U T 10 月 [ 以 / V ] S D T Screen Design T001 販売価格 ( 税別 ) : Y58 , 000 ワープロ感覚で入出力工リアやグラフィックノヾターン を設定できる画面設計ツールです。編集した 1 画面 は 1 レコードとして取り扱いますので、多数の画面を 利用するアプリケーションでも画面データは 1 つの ファイルに作成できます。データベースなどの連続し たデータを扱う画面ではサプファイル機能を使えば大 きな画面や長さの定まらない表なども簡単に作れま す。 P D T Print Design Tool 販売価格 ( 税別 ) : Y58 , 000 SDT と同様にプリンタで出力する帳票を画面上で設 計する帳票設計ツールです。帳票の各部分 ( 見出し 部、明細欄、小計欄、合計欄など ) をそれぞれのレ コードに分けて管理すれば、アプリケーションの処理 に応じてそれらを組み合わせて出力することにより柔 軟な帳票が作り出せます。 ・ウインドウのテモティスクを用意しております。ご請求ください。 ・ C 言語、アセンプラでの開発のお手伝いも行っております。 お気軽にご相談ください。 〒 399-41 長野県駒ヶ根市北町 29-14 TEL0265 ( 82 ) 3087 FAX0265 ( 82 ) 3023 開発元ビットユニオン販売元株式会社駒 く資料請求番号 186 〉