1993 - みる会図書館


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

1. 月刊 C MAGAZINE 1993年2月号

釦① Meth0d:N0tation,Part Ⅱ のになるだろう。 TabIe 7 テパイスの仕様 ものて、あってもよい。プロセスのプライオ トまたはアクテイプなオプジェクトを指す す。プロセスの名前は , プログラムのルー プロセッサの上て、実行されるスレッドを表 ひとつのプロセッサのプロセスは , その ( マシン名 , 機種 , サイズなど ) て、ある。 プロセッサの特性とは , その物理的な説明 ッサおよびプロセスの役割と目的て、ある。 を示す。図中 , 責任任務とは , そのプロセ TabIe 6 に , プロセッサとプロセスの仕様 続を表すために用いてもよい と問題を特定て、きるようなアイコンを , 接 パないしツールは , Fig. 13 とは違う , もっ プロセッサとデバイスに関して , デベロッ めのラベルを付記してもよい ( 省略も可 ) 。 線に , その接続の名称や役割を解説するた ては , 矢印を添えてその方向を表す。接続 向と解釈されるのて、 , 単方向の接続に関し 結合を表現してもよい。接続は通常 , 双方 すことが多いが , 同じアイコンて、間接的な 接続は , ハードウェアの直接の結合を表 通信を表現する。 ッサ , あるいはデバイスとデバイスの間の バイスとプロセッサ , プロセッサとプロセ する。 Fig. 13 に示すアイコンを使って , デ ロセッサとデバイスは , お互いが必ず通信 のスケジュールなどを列記してもよい。プ れるプログラムやプロセスの名前 , それら て , その中にそのプロセッサの上て、実行さ プロセッサのアイコンの中に区画を書い リティ ( 優先度 ) は , 子プロセスのスケジュ ーリングに関わる , そのプロセスの重要度 のことて、ある。 Table 7 にデバイスの仕様を 示す。デバイスの責任任務とは , そのデバ イスの役割と目的て、ある。デバイスの特性 とは , そのデバイスの物理的な説明て、ある ( デバイス名 , 種類 , サイズなど ) 。 接続の仕様を Table 8 に示す。図中 , 接続 の責任任務とは , その接続の役割と目的て、 ある。接続の特性とは , その接続の物理的 な説明て、ある ( 接続名 , 種類 , 帯域幅など ) 。 必須的なサプセット プーチ法に用いる表記法は , ソフトウェ アシステムの全ライフサイクルにわたって 下される基本的な分析 , および設計の意思 決定を , すべて捕捉表現て、きるための , 総合 的て、範囲の広いものてある。表記法の一部 は , 戦略的な決定を表現するためのものて、 あり , それらはアーキテクチャの根本に関 わる大きな問題を表現する。その他の部分 は , 戦術的な決定を表現する。それらはア ーキテクチャのヴィジョンを完成させるた めの , 細部を表現する。分析と初期設計の 間には , これらの内 , 戦術的な決定が支配 的て、ある。そういうときには , 表記法全体 の内の適切なサプセット ( 部分集合 ) を用い るのが妥当て、あり , それには次のものを表 す記号を使う。 ・クラス ( 十区画 ) ・クラスカテゴリ ・クラスの関係 ( 結合関係 , using 関係 , s 関係 , および継承関係 ) ・ラベル , および濃度の修飾 ・有限ステートマシンの記号 ・オプジェクト ha 名前 責任任務 特性 TabIe 8 接続の仕様 特性 責任任務 ラベル 28 C MAGAZINE 1993 2 識別子 テキスト テキスト テキスト テキスト テキスト ・オプジェクトの関係 ( メッセージとリンク ) とくに各工ンティティの責任任 さらに 務を表現するために , これらの記号の仕様 を用いてもよい。アプリケーションによっ ては , プロセス図の成分が分析と初期設計 の段階て、有用となる場合もある。 詳細設計の間には , 本表記法のその他の 成分も用いる。とくに , これからチームが 作っていく , 各種のシステム構築要素の物 理的な構造を説明するためには , モジュー ル図の成分を用いるべきて、ある。さらに その他のクラスおよびクラスの関係を表す 記号 , オプジェクトの可視性とメッセージ の同期に関する修飾記号 , またそれぞれの 詳細仕様などを用いて , 何らかの戦術的決 定を表現してもよい [ 参考文献 ] Booch, G. Object-Oriented Design with Applications. Benjamin/Cummings, 1991. Booch, G. The Booch Method : Proces s and Pragmatics. Rational lnc. , 1992. Coad, P. , and E. Yourdon. Object-Orie nted Analysis. Prentice-Hall, 1990. Harel, D. "Statecharts : A VisuaI For malism for Complex Systems, " Scie nce Of Computer Programming. V01. 8 , 1987. Rumbaugh, J. , M. Blaha, W. Premerla n, F. Eddy, and W. Lorensen. Obje ct-Oriented M0deling and Design. P rentice-HaII, 1991. Shlaer, S. , and S. Mellor. Object-Oriente d Systems Analysis : M0deling the World in Data. Yourdon Press, 1988. Wirfs-Brock, R. , B. WiIkerson, and L. Wiener. Designing Object-Oriented Software. Prentice-Hall, 1990. Grady Booch 氏は , Rationallnc. のオプジ ェクト指向製品部の部長で , 国際的なコン サルタント。『 Object-Oriented Design wit h Applications 』 (Benjamin-Cummings, 1 991 ) の著者である氏は , 広い範囲のオプジ ェクト指向およびオプジェクトべースのプ ログラミング言語に適用できる , 汎用性の あるオプジェクト指向開発方法の開拓者で ある。

2. 月刊 C MAGAZINE 1993年2月号

MAG\ZINE 1993 年 2 月 1 日発行 ( 毎月 1 回 1 日発行 ) 第 5 巻第 2 号通巻 41 号 1990 年 2 月 2 日第 3 種郵便物認可 提携・ LANGUåGE 誌 / 監修・石田晴久 C 言語技術情報誌・ C マガジン 1993 FEB. VOI. 5 No. 2 980yen 特集 通信プロトコル 売高速データ転送を可能にする 石幵九通信規約の実際 速報 >WATCOM C / 386 J9.0 / 巻頭インタビュー >Richa 「 d Steige 「 2 / 特別記事通信ソフト「 WTERM 」開発記ーー ' 'ANS : mo 「ル定数 提携記事 >The Booch Method:Notation, Part Ⅱ >Operator OverIoading in C 十十 / 実践アルゴリズム戦路ヾックトラック法の高速化 2 実践 C プログラミング入門構造体 / T Ⅳ The C 十十クラスライプラリ / ・一 djgcc 詳解講座 / 【 5 " 2HD 特別付録】・データ転送プログラム「 BP 凵 ・通信ソフト「 WTERM 」 98 版 & 総合ドキュメント・フラクタル図形ビューワ「マンデルプロ探検隊」・本誌掲載ソースプログラム

3. 月刊 C MAGAZINE 1993年2月号

ぜに扱う必要はありません。 ゲートウェイ開発 InfoWare 製品を完成し , 1992 年 2 月にリリー 的には , データベースの未使用データ型を スしました。 扱うことになります。 では , 旧 foWa 「 e について少し説明して また , アプリケーションディベロッパは , ください。 SQL がそのアプリケーション内て、て、きるあ Steiger 基本的な SQL コネクティビティを らゆる機能を書くか , あるいは SQL を生成 パークプレースの話題に戻りましよう。 備えている製品はいくっかあります。現在 するコードを書かなくてはいけません。 Steiger さんの技術開発上の役割りは何でし 発売されているほとんどの製品は , SQL, れて、は , 移植可能なアプリケーションを作 Oracle, Sybase, lnfomix に焦点を当てて るのはとても大変て、す。 います。私たちの場合 , SmaIItaIk 環境にク Steiger ノヾークプレースに入って間もな また , 非常に異なる種類のデ ータモテンレ ラスライプラリを追加することて、 , 基本的 く , 私は , とくに SmaIItaIk とデータベース を扱うため , オプジェクトフォームとデー の統合に注目しました。閉鎖性が SmaIItaIk の弱点のひとっと見なされていたからて、す。 ゼロックス社内て、は問題にならないにして も , そんなに閉鎖的て、は社外のプログラマ には見向きもしてもらえません。パークプ レースは , SmaIItaIk を広く普及するため に , 閉鎖性を完全に打破したいと考えまし た。とりわけ , 「徹底したユーザインタフェ イスが必要なアプリケーションには , Sma lltalk が最高だ」といわれたかったのて、す。 フロントエンドアプリケーション , データ べース , 意思決定支援システムなどは , 明 らかに SmaIItaIk の得意分野のはずて、した。 そこて、私は , SmalltaIk アプリケーションを 商用データベースシステムと結びつける作 業に力を入れ始めたのて、す。 1987 年初頭の ことて、した。 Sma 肚 a ⅸをどうやってデータベースア プリケーションに接続するのですか ? Steiger アプローチはいくつかあります。 私は , パークプレース社内て、データベース 製品の開発を指揮していました。 それはデータベースそのものですか ? な SQL コネクティビティを実現していま タベースフォームの間て、データモデルを変 Steiger いいえ , InfoBase というデータベ す。 OracIe の OracIe CalI lnterface (OCI) , 換する機能も書かなくてはなりません。た ースゲートウェイ製品て、す。 1990 年 2 月 , 私 Sybase の DB Library lnterface に相当しま とえば , 簡単な社員データベースがあって , は , InfoBase プロジェクトをパークプレー すね。こうしたクラスライプラリは , SQL 社員は部署に分かれているとしましよう。 データベースに接続し , SQL コマンドやス 従来環境の場合 , 社員レコードと部署のっ スからスヒ。ンアウトしました。パークプレ ースのほうは , 基本的な Sma Ⅱ talk 製品と O ながりは直接的て、はありません。社員レコ テートメントを送り , フラットデータを取 ードに外来キーがついていて , 外来キー / 主 bjectworksC 十十製品に集中することにな り出す働きをします。取り出すデータの形 ったのて、す。私は , 同年 3 月にアンサンプル・ 式は , 配列型オプジェクト , ローレコード キーの参照関係を通じて部署テープル内の ソフトウェア・システムズを設立し , パー 型オプジェクトなど , 各種が可能て、す。あ 該当部署レコードと間接的につながってい クプレースから InfoBase 技術のライセンス るわけて、す。ところが , オプジェクト指向 るアプリケーションクラスのインスタンス 供与を受け , 工ンジニアリングを見直して , に変換することもて、きます。しかし , 基本 環境の場合は , 社員オプジェクトが部署オ 12 C MAGAZINE 1993 2

4. 月刊 C MAGAZINE 1993年2月号

・ , プロクラミング道場 Dr. 望洋の 記憶する整数値 ) のみを利用して , メモリの 確保および解放をシミュレートしているよ うなものて、あるから , List 1 よりはずっと効 率がよいのて、ある。 , 質問募集 この続き そろそろ誌面もつきたようだ は , 次回をご覧あれ。 本連載て、は , 読者からの質間にお答えし , また希望に応じてプログラムの添削も行う。 下記必要事項を明記の上 , フロッヒ。ーディ スクにて応募していただきたい ( 短い質問て、 あれば , 書面のみて、可 ) 。なお , 応募いただ いたフロッヒ。ーディスクは返却て、きない とや , 個人的な質問には一切お答えて、きな ことをあらかじめご了承されたい どんな小さな疑問点て、も結構なのて、 , 気 後れせすに , 応募していただきたい ( ただ し , 特殊な題材よりも , 一般性の高い題材 を優先的に取り上げることを , あらかじめ ご了承願いたい ) 。 Fig. 8 配列による線形リストの操作例 ( 1 ) max=3 max=4 deleted deleted max=4 deleted 2 (b) (c) 第 7 レコードを削除 要素を追加 (a ) Fig. 9 配列による線形リストの操作例 ( 2 ) max=7 max=7 deleted deleted 3 max=7 deleted ( 1) 氏名・住所・電話番号 ( 2 ) 匿名希望の有無 / ペンネーム ( 3 ) 質問・相談事項 ( なるべく具体的に ) 宛先〒 108 東京都港区高輪 2-19 ー 13 NS 高輪ビル ソフトバンク ( 株 ) 出版事業部 C マガジン編集部 『 Dr. 望洋のプログラミング道場』係 第 2 レコードを削除 [ 参考文献 ] [ 1 ] 平林雅英 , 『 ANSI C 言語辞典』 , 技術評 論社 , 1989 削除レコードの管理を , わずらわしく感 [ 2 ] 柴田望洋 , 『秘伝 C 言語問答ポインタ された状態て、ある。 こて、要素の追加を行 じた読者もいるに違いない。しかし , Ca110 編』 , ソフトノヾンク , 1991 うと , max を 8 として新たなレコードを利用 [ 3 ] 柴田望洋 , ℃プログラマのための C 十十 c や malloc によって確保したメモリを free て、 するのてはなく , 削除リスト中の先頭レコ 解放するときも , 同様な操作 ( というより こて、は 3 レコード ~ を優先的に再利 入門』 , ソフトバンク , 1992 も , もっと複雑な操作 ) が内部的に行われて 用する (b) 。このような操作を行うことによ いるのてある。 り , 配列をムダに消費することはなくなる。 したがって , List 2 に示した線形リスト なお , (b) の状態から , 7 レコードを削除し しばたばうよう ( 工学博士・九州大学工学部化学機械工学科・ ) た状態が ( c ) てある。 は , 簡単なポインタ ( 配列のインデックスを 要素を追加 (c) (b) (a ) D 「 . 望洋のプログラミング道場 127

5. 月刊 C MAGAZINE 1993年2月号

れ以外の関数は見えても意味がないのて、あ る。そこて、 , 外部から呼び出す関数以外を static とし , 隠蔽するためにひとつのファイ ルにまとめたのだ しかし結果としては BPlus の処理を記述 するソースファイルが 90K バイトにもなって しまい , あまりおもしろくない。さらに検 討が必要て、あるといえよう。 BPL は現在最新バージョンが 52 て、ある が , 細かい変更により不規則に更新されて いる。最新のソースプログラムは NIFTY- Serve のプログラマーズフォーラム (FPRO G) て、公開されているのて、 , あまりおもしろ くないプログラムて、あるが , 参照していた だければ幸いて、ある ( 編集部注 : 1992 年 12 月 12 日現在のものを付録ディスクに収録した ) 。 BPIus のプロトコルの仕様概略はすて、に 述べたのて , 以下は , ポイントとなる処理 がどのように記述されているかを中心にい くつかの処理を例に説明をする。 バ , ット処理 ( 受信 ) いうまて、もなくもっとも重要な処理がパ ケットの送受信処理て、ある。 BPL の中て、 は , wait for acknowledge という関数がパ ケット受信処理になる。 BPIus の処理の中 て、もっともややこしい処理なのだが , ドキ ュメントを参考にして , てきるだけ忠実に 書いたつもりのものが List 2 て、ある。しか し , C のプログラムとして見ると , あまり美 しい構造とはいえないようて、ある。 構造としては , while ループの中て、 , デー タを受信して , それによってバケットが完 成したり , ACK や , そのほかコントロール コードを受け取れば , 受信データに応じた 処理を行うという感じて、ある。 sts という変 数が終了条件になっている。 あまり美しくない点を指摘すると , まず , チェックサムを計算する処理のために , < c hecksum > という変数がアドレス渡しとし 62 C MAGAZINE て使われていること。 1993 2 という変数を外に見せたくないために こは , < checksum > List 3 : 5 : 6 : 9 : 10 : 13 : 14 : 18 : 19 : 20 : 21 : 22 : 23 : 24 : 25 : 26 : 28 : 29 : 30 : 32 : 33 : 35 : 36 : 37 : 38 : 39 : 40 : 43 : 44 : 45 : 46 : 48 : 49 : 50 : 52 : 53 : 54 : 55 : 56 : 58 : 59 : 60 : 62 : 63 : 64 : 66 : 68 : 69 : 76 : * packet を受け取った場合は、 1 を戻す。内容は current-packeto * ack が得られたら、 0 を戻す。 2 : / * ACK 待ち状態の FSA wait for acknowledge 関数 sts ニ s-resend-packets() : case S_Resend-Packets: break; sts s-send-enq() ; case S_Send-ENQ. break, s ts = 0 : s_send_ack(); case S_Send_ACK : break; sts = s-send-nak ( ) : case S_Send-NAK : break; sts = s-verify-packet() , case S-Ver i fy-Packet : break , sts s-veri fy-cks(checksum) : case S-Vei fY-CKS : break. sts s-veri fy-crc(checksum) , case S-Ver i fY-CRC: break; sts = s-get-crc(&checksum) ; case S_Get_CRC: break; sts = s-get-check(&checksum) : case S_Get-Check: break; sts = s-get-data() : case S_Get_Data: break; sts = s-dle-b-seen() : case S_DLE_B_Seen. b reak ; StS = s_dle_seen(receive) : case S_DLE_Seen: break ; sts = s_get-dle(receive) : case S_Get_DLE: svitch (acknovledge-status) { vhile (sts > = の { after-enq = 0 : int sts UWORD checksum; 7 : STATIC int wait_for-acknovledge(int receive) * error の場合はく 0 break; if (sts = FINISH) { sts = acknovledge-status return Sts; = S-Verify-Packet ? 1 : 0 :

6. 月刊 C MAGAZINE 1993年2月号

月刊情報処理試験のノウハウを結集 ! 情報処理受験参考書 ・これだけは知っておきたい 情報処理の基礎知識 定価 1 , 650 円 ・初めて受験する人のための 情報処理入門 1 / 2 / 3 1 ・ 2 / 定価 1 , 240 円 3 / 定価 1 , 400 円 ・情報処理技術者試験 受験用語ハンドブック 定価 1 , 860 円 ・第 2 種情報処理技術者試験 ソフトウェア徹底マスター 定価 2 , 500 円 ・第 2 種情報処理技術者試験 ハードウェア徹底マスター 定価 2 , 580 円 ・第 2 種情報処理技術者試験 COBOL 徹底マスター改訂版 定価 2 , 900 円 ・第 2 種情報処理技術者試験 FORT N 徹底マスター 定価 2 , 890 円 ・一石ニ鳥のプログラミング学習書 ! 流れ図で学ぶプログラミングス門 定価 2 , 200 円 ・第 2 種情報処理技術者試験 午前問題オリジナル演習 18 定価 2 , 300 円 ・第 2 種情報処理技術者試験 午後問題オリジナル演習 定価 2 , 400 円 ・第 2 種情報処理技術者試験 実戦模擬テスト 定価 2 , 200 円 ・アセンブラ CASL をマスター ! 短期合格 ! アセンプラ C L 定価 1 , 900 円 ・ 1993 年度第 1 種情報処理試験 総整理と徹底対策 定価 2 , 000 円 ・ 1993 年度版 第 1 種情報処理技術者試験問題集 定価 2 , 400 円 ・プログラム設計がわかる ! 短期合格 ! プログラム迸 t 定価 2 , 200 円 ・第 1 種情報処理技術者試験 プログラム設計徹底マスター 定価 2 , 900 円 ・お近くの書店でお求めください・定価は税込です ソフトバンク出版事業部 X68k 活用講座 143 X 68 k 活用講座 List ゲームのスコア表示 01 : #include く stdio. h> 02 : #include く iocslib. h> 03 : 04 : typedef struct { 05 : unsigned v_invert: 1 ; 06 : unsigned h—invert: 1 ; 07 : unsigned dummy: 2 ; 08 : unsigned C010r : 09 : unsigned code: 10 : } bg—data; 11 : 12 : void 13 : init—screen (void) 14 : { screen ( 0 , 2 , 1 , 1 ) ; 15 : B_CUROFF ( ) ; SP_INIT ( ) ; SP-ON ( ) ; 19 : } 20 : 21 : void 22 : end—screen (void) screen ( 2 , 0 , 1 , の ; 24 : B_CURON ( ) : 25 : 28 : void display—score (int score) = (bg-data の ( 0xe 000 + ( 2 * 4 ) + ( 2 * 15 ) + ( 2 * 64 * 31 ) ) ; bg—data *ptr 30 : char volati le *vsyn = (char * ) 0Xe88001 ; bg—data tem; 32 : int i; 33 : 34 : 35 : tem. v_lnvert 36 : tem. h_invert tem. C010r 38 : while (!(*vsyn & 16 ) ) 39 : 40 : whi le (*vsyn & 16 ) 42 : 43 : 44 : 45 : 46 : 48 : 49 : 50 : 53 : void 54 : main (void) 56 : FILE *fp; int i : init_screen ( ) ; 58 : if ( ! ()p = fopen ("BGSample. pcg", "rb"))) 59 : fprintf (stderr, "Fi le Open Err!*n") ; exit ( 1 ) ; 63 : B_SUPER ( の ; 64 : fread ((void * ) ( 0Xeb8000 + 128 ) , 1 , 128 * 10 , fp); 65 : fclose (fp) ; *(short * ) ( 0Xeb0808 ) = 0X201 ; for (i = 0 : i く 99999999 : i + + ) 68 : display—score (i); 69 : for (i = 10 ; i く 1000000000 : i * = 1 の int mod = score % i ; score ー = mod; tem. code = ( m / ( i / 1 の ? d / ( i / 1 の : 1 の + 3 ; *ptr = tem; ptr ー

7. 月刊 C MAGAZINE 1993年2月号

COMNTER LANGUAGE プーチデの表記法 DYÄ備 OBJ 印 OR に印 PROGRAMMING 訳 、い鬟をー第一 L!MIV ( 後編 ) The 釦 0 Meth0d: 洳 ta 恤物Ⅱ Grady B ch / 岩谷宏訳 .COM OTER LANGUAGE, Oct. 1992 ) オプジェト指向プグラミングのための人気の高い表記法に最近盛り込 まれた拡を先号 ( 『 C マガジン』誌 ' 93 年 1 月号 ) と今月号と 2 回にわた って紹介 れらの新しいアイコンや仕様を使うことによりあなたか 開発するシテムの動的な振る舞いを一望に収めて制御できるようになる 先月の , 「プーチ法の表記法 ( 前編 ) 」て、 深さ , 直交性 , 散布 (broadcasting) という 重にネスティングしているときは , 最も中 側のステートだけを円て、表現する。 は , 私と同僚たちが最近の数年間に開発し 三つの単純明快な概念を加えている。 たオプジェクト指向設計のための表記法と , 複数のステート間にありうる唯一の有意 そのためとくに , イベントにガード ( 生起 それに近ごろ加えた拡張を説明した。今回 な関係が , ステート遷移て、ある。あるステ 条件 ) をつけることがて、きるようになり , ま は , システムの動的な振る舞いについて説 たステートのネスティングが表記可能にな ートから別のステートへの遷移のほかに あるステートから自分自身へ遷移すること った。そしてまた , ネスティングされたス 明する。 クラスの動的な振る舞いを表現する方法 テートへのイベントを契機とする出入り〔ネ もありえる。 Fig. 2 に示すように , ステート としては , ステート遷移図が最適て、ある。 遷移は初期ステートから新ステートへ向か スティングレベルの , 内→外 , 外→内への 出入り〕も , 定義の明確なセマンティクス う矢印付きの単線て表す。そういう遷移の ステート遷移図は , クラスのステート空間 , ステートの遷移を起こすイベント , そして て、もって記述て、きる。しかもこれらの概念 それぞれに , そのステート遷移を起こすイ べントの名前を記すラベルをつけてもよい ステートの変化に起因するアクションを表 は , ステートマシンに関するわれわれの従 現する。したがって , ステート遷移図は , 来の表記法に , そのまま追加て、きる。 し , また , 遷移の結果起きるアクションを この表記法のその他の部分と密接に関連し 付記してもよい ステート遷移図 ている。クラスの仕様の一部として , ーっ イベント名とアクション名は , 1 枚のステ ート遷移図の中て、ユニークて、なくてよい または複数のステート遷移図があってもよ い。また , ステート遷移図に載るアクショ Fig. 1 のひとつの円が , ひとつのステート なぜなら , ひとつの同じイベントが複数の を表す。円の中にはステート名を書くが , ンの記述は , 何かのメソッドや別のオプジ いろいろなステート遷移を起こすことがあ 名前が長すぎるときにははみ出してもよい ェクト図を指しているものて、もよい りえるし , 複数のステート遷移の結果同じ し , あるいはアイコンを大きくしてもよい ソフトウェアの開発課題はさまざまて、あ アクションが起きることもありえるからだ イベントはガード ( プラケットの中に書く ) ステート名は , 1 セットのステート遷移図 るが , しかし , フラットて、単純な有限ステ て、修飾してもよい。ガード付きのイベント ートマシンて、十分表現て、きるものが多い ( 複数 ) においてユニークて、なければならな は , そのガードが真 ( true ) と評価されるとき い。開始ステートは , 二重線の円て、表し , ただし , 応答を中心とする一部のシステム 終了ステートは太線の円て、表す。 だけ , 遷移を起こす。 ( たとえば電話用のアプリケーション ) て、は , ひとつのステート遷移が必要とするもの より表現力に富む階層的なステートマシン ステートがネスティングしているときは , 円の中に円を描くやり方て、は , ちょっと表 は , ひとつのイベント , アクション , また を必要とする。そのため , われわれは D. H はガードて、ある。ステートがネスティング 現しづらい。そういうときは , 外側のステ arel の表記法を採用することに決めた。階層 しているときの , 遷移のセマンティクスを ートを角のまるい矩形て、描く。そして中側 的ステートマシンを表す HareI の表記法は , 考えてみよう。外側から内側 , あるいは内 ステートマシンの本来の簡単な表記法に のステートは , ふつうに円て、表現する。多 20 C MAGAZINE 1993 2

8. 月刊 C MAGAZINE 1993年2月号

國囚圖 CMAGAZ 爪 E 広告資料請求カードをご利用下さい くめ 。たりしたノ「、、 ノ力しスペ ース ソフトウェアテサインエンジニア ☆システム製品・・ MS-DOS 、 Windows 、 WindowsNT 、 LAN 上記のソフトウェアデザインエンジニアの仕事内容に関し、以下 ① ~ ⑥何れかに該当するエンジニアを求めます。 マネージャー等。 ☆アプリケーション製品・・・ MS ー DOS または Windows 用アプリ ① C 、 C + + 、 8086 系アセンプラのプログラミング経験がある方。 ケーションソフトウェアの開発 ( ExceI 、 Works 、 Word 等 ) 。 ② MS-DOS 、 Windows 、 OS/2 、 UNIX 、何れかの知識経験 がある方。 ☆言語製品の開発・・・ MS ー DOS または Windows 用アプリケー ③ Windows 用アプリケーションの開発に経験がある方。 ションソフトウェアの開発環境の提供 ( C 、 MASM 、 FORTRAN 、 ④メインフレーム関連の通信システムの知識経験がある方。 BASIC 、 QuickC 、 QuickBASIC 、 VisuaIBasic 、 Quick for ⑤ RDBMS ( リレーショナルデータベース管理システム ) の知識 Windows 等 )。 経験がある方。 ⑥ネットワークの構築運用に関する知識がある方。 *SNA 関連・ SQL 関連。 以下のエンジニアも同時募集しています。お気軽にお問い合わせください。 ☆製品の工程管理や仕様の決定、開発プロジェクトの管理、海外 ☆各種ソフトウェアのペーパーマニュアル、オンラインマニュアル、学 の開発プロジェクトとの調整等。 習ソフトの企画、編集、原稿作成、工程管理等。 ☆パーソナルコンピュータからネットワー久メインフレームを含んた ☆ソフトウェア開発における品質管理全般、テストプラン立案並び トータルなシステムの提案及びコンサルテーション。 にスクリプトの開発、スケジュール管理、出荷基準のプランニン ☆パソコンメーカーに対する OS のライセンス及びパソコン開発に ☆当社の販売する製品 ( パーソナルコンピュータの各種ソフトウェ ついてのコンサルティング ア ) に関する技術サポート業務。顧客に対し、技術的及び実務的 ☆海外営業の経験者及びライセンスに関する知識がある方。 な問題解決のためのアドバイスをする仕事。 ■ ' 93 年 2 月中旬渋谷区笹塚に本社移転。 ☆サードバーティ ( ハードメーカー、ソフトメーカー等 ) への OS 製品 (Windows 、 Windows NT 、 MS-DOS 等 ) のサポート、 VAR 業 〒 151 渋谷区笹塚 1 ー 50 ー 1 笹塚 NA ビル ・ ' 94 年大学新卒者の採用を予定しております。 者への LAN Manager 等のネットワーク製品のサポート 【募集要項】・資格 / 各職種共に 22 歳 ~ 28 歳位迄■給与 / 経 【応募方法】希望職種明記の上、履歴書 ( 写真貼付 ) 及び職務経 歴書を下記宛郵送。書類選考の止、面接日等を連絡します。※応募 験、年齢、能力、現行給与を十分考慮の上、当社規定により優遇。 の秘密は厳守。※応募書類返却不可。※入社日相談に応じます。 ・勤務地 / 本社 ( 東京都新宿区 ) 、 SE ・ OEM 営業スタッスよ芝オフィ ス ( 東京都港区 ) 。ー待遇 / 昇給年 1 回、賞与年 2 回。ー勤務時間 / 〒 105 東京都港区芝 1 ー 11 ー 11 住友不動産芝ビル 応募宛先マイクロソフト株式会社 9 : 00 ~ 17 : 30 。フレックスタイム制 ( コアダアムは 11 : 00 ~ 15 : 00 ) 。 人事部人材開発課 C ②係谷 03 ( 5484 ) 1420 ・完全週休 2 日制。・他詳細は面談。 ・設立 / 1986 年 2 月 17 日・資本金 / 1 億円■売上高 / 126 億円 ( 1992 年 6 月 期 ) ・代表取締役会長 / 古川享、代表取締役社長 / 成毛真■社員数 / 368 名・米国本社 / マイクロソフト・コーポレーション ( ワシントン州レッドモンド ) く資料請求番号 006 〉 プロクラムマネージャ ユーサーエテコケーション ソフトウェアテスティンクエンジニア テクニカルサポートスタッフ S E ロ EM 営業スタッフ マロソフト株式会社 C MAGAZINE 1993 ・ 2

9. 月刊 C MAGAZINE 1993年2月号

lleli(l 胤い トタ ック ビべ らと Q) 0 CO Q す CO し cn E 載 4-J 掲 リを プ 0 0.) 十 tD 十 U) O b ( O Z ス Q) O ラⅣ はクス 回作ラ 今操ク djgcc 詳解講座 ビット操作クラスとべクタクラス 第 1 3 回 安田英之株プロシード 0 GNU C 十十ライプラリ Use ド s Guide Doug Lea 著 / 株プロシード訳 Copyright ⑥ 1988 Free Software Foundation, c. , 1992 Proceed, 旧 c. のセマンティクスを提供する。このクラスはビッ ピット操作クラス トの集まりを 0 ー 1 の符号列として取り扱うときに (Classes fo 「 Bit manipulation) 便利な操作をサポートしている。 libg 十十は , ビットの集まり ( コレクション ) を扱う これらのクラスの違いを以下にまとめる。 ためのものとして , 以下のようなクラスを提供して ・ BitSet の大きさは論理的には無限てある。その領域 いる。これらはそれぞれ , 異なる方法て、ビットの集 の大きさは , 集合を表現するのに実際に必要とな まりを使ったり操作したりする。 る一連のビット数の最小限の値に従って動的に変 化する。 lnteger もまた同様の特性を持っている。 ・ lnteger クラスは , 「整数」としてのセマンティクス BitString は論理的に有限て、あるが , そのサイズは を提供する。このクラスは , ビット配列を整数と 必要な長さを保つように , 内部て、動的に変化する。 して取り扱う際に便利なビット操作をサポートし よって , BitString は連結可能て、あるのに対して B ている。詳細は別項に記載してある ( * 1 ) 。 itSet や lnteger は連結可能て、ない ・ BitSet クラスは , 「集合」としてのセマンティクスを ・ BitSet32 や BitSet256 は , BitSet とほとんど同じて 提供する。このクラス・はビットの集まりが整数の これらのクラスは一定の固定長ビ 無限集合を表現しているものとして取り扱うとき あるが , 唯一 ットからなるべクトルを用いている , という点の に便利な操作をサポートしている。 ・ BitSet32 クラスは固定長の BitSet て、 , その長さは 3 みが異なる。 ーといった基本的な 2 ビットて、ある。 ・どのクラスも , 一項および二項演算子をサポートしているが , そ ・ BitSet256 クラスは固定長の BitSet て、 , その長さは ( * 1 ) 詳しくは , 1992 年 10 のセマンティクスは異なっている。 BitSet のビット 256 ビットて、ある。 月号 87 ページ多精度整数ク 演算子はそれぞれが対応する無限集合の演算を正 ・ BitString は「ビット列」あるいは「べクトル」として ラス lnteger 参日き djgcc 詳解講座・ Hello GCC World 75

10. 月刊 C MAGAZINE 1993年2月号

Li st 1 List 1 static char *msg[] " \ 033 [ 36m ハ。イフ。起動ユーティリティ ハ・ - シ・ヨン 0. 01 \ n ” "Copyright (C) 1992 N. NakashimaY033[mYnYn" " 使用法 : pipemain [ - M くれ・ツフア・サイス・ > ] c 面 1 ! cmd2 ! cmd3 ハ。イフ。処理ハ・ツファ : メイン・メモリ \ n ” register char **pmsg : nsg, vhile ( **pmsg ) puts-err( *pmsg 十十 ) : ex i t ( 1 ) ; ニ NULL ) { i f ( getcmd( cmdnam, *argv ) / * 起動コマント・が見つからない i f ( pcomspec ニ NULL : NULL ) { & & ( PCOmspec ニ getenv( "COMSPEC ” ) ) puts-err( "pipemain : 環境変数 COMSPEC が未定義です . \n" break, strcpy( cmdnam. PCONSPec ) ; / * 起動コマント・名 : COMMAND. COM * / strcpy( comline, strcat( comline, *argv ) : strcat( CO 引 ine. . %nYn ” } se strcat( comline, *argv ) : strcat( comline. Table 3 EMM ファンクション 24 Move Memory Region Move Memory Region ( メモリ領域の移動 ) AX = 5700h DS : : コピー元・コピー先の情報からなる構造体 MOVE SOURCE DEST STRUC REGION LENGTH dd SOURCE MEMORY TYPE db SOURCE HANDLE dw SOURCE 爪 L OFFSET dw SOURCE 爪 L SEG PAGE dw DEST MEMORY TYPE db DEST HANDLE dw DEST INITIAL OFFSET dw DEST 爪 L SEG PAGE dw MOVE SOURCE DEST ENDS INT 67h 返り値 AH : 終了ステータス 次の 4 種類のメモリ領域コピーを行います ・標準メモリ→標準メモリ ・標準メモリ→拡張メモリ ・拡張メモリ→標準メモリ ・拡張メモリ→拡張メモリ DS : の指す構造体は次の要素からなる ・ REGION LENGTH コピーするメモリ領域のバイト数 ・ SOURCE MEMORY TYPE コピー元領域のメモタイプ 0 : コピー元が標準メモリ 1 = コピー元が拡張メモリ ・ SOURCE HANDLE コピー元の拡張メモリ領域の八ンドル番号 コピー元が標準メモリの場合は 00h ・ SOURCE 爪 L OFFSET コピーを開始すコピー元領域内のオフセット コピー元が拡張メモリ領域の場合 0000h ~ 3FFFh コピー元が標準メモリ領域の場合 0000h ~ OFFFFh ・ SOURCE 爪 L SEG PAGE コピーを開始すコピニ元領域内のセグメント または論理ページ番号 コピー元が拡張メモリ領域の場合論理ページ番号 コピー元が標準メモリ領域の場合セグメントアドレス ・ DEST MEMORY TYPE コどー先領域のヌモリタイプ 0 : コピー先が標準メモリ 1 : コピー先が拡張メモリ ・ DEST HANDLE コピ先の拡張メモリ領域の八ンドル番号 コピー先か標準メモリの場合は 00h ・ DEST 爪 L OFFSET コどーを開始するコピー先領域内のオフセット コピー先が拡張メモリ領域の場合 0000h ~ 3FFFh コピー先が標準メモリ領域の場合 0000h ~ OFFFFh ・ DEST 爪 L SEG PAGE コピを開始するゴピー先領域内のセグメント または論理ページ番号 コピー先が拡張メモリ領域の場合論理ページ番号 コピー先が標準メモリ領域の場合セグメントアドレスか / * 割込へ・クタを元に戻す dos-setvect( INT21, 引 d ー幻 ) , / * ハ。イフ。処理ハ・ツファわハ・加ー if ( fbufover ) : ハ。イフ。処理ハ・ツフアがオ - ハ・フロ - しました . \ n " ) . puts-err( p i pema ー n return( ret ) : TURBOC_ $ifdef $def ine ATR-EXEC $else $def ine ATR_EXEC $endif 実行ファイルの検索 っ ! 1 ! っ ! っ ! っ ! っ ! っ ! っ ! っ ! ( FA_RDONLY ー FA_HIDDEN ー FA_SYSTEM ) ( _A_RDON し Y ー _A_HIDDEN ー -A-SYSTEH ) 引 数 . EXE の順に検索する PATH のリストにしたがって . COM. 検索ファイルなし 返り値 NU しし fullpath : 検索ファイルあり char *getcmd( char fullpath[], char srcfile[] ) / * 結果を返すフル・ハ。ス名 / * 検索ファイル名 / * 検索ハ。スへのホ。インタ / * コマント・名 / * 拡張子なしフラク・ char far *ppath, char cmdnam[ PATHLEN ] ; i n t fn oex t . struct find_t dta, strcpy( fullpath, srcfile ) ; if ( !_dos-findfirst( fullpath, ATR-EXEC, &dta ) ) / * 検索ファイルあり return( fullpath ) : strcpy( cmdnam, srcfile ) : ニ N 乢し / * 拡張子なしフラク・ strchr( cndnam. fnoext fullpath[ 0 ] ・ \ 0 第 / * 検索ハ。ス : getenv( "PATH" ) ; ppath if ( ppath - : NU ししⅡ !ppathC 0 ] ) / * 環境変数が見つからない return( NULL ) : char *p, int ch fullpath' vhile ( *ppath & & *ppath ! : ( unsigned char ) ( * P + + ch if ( iskanji( ch ) & & *ppath ) *ppath 十十 : * p 十十 if ( ch い * p 十十 strcpy( p, cmdnam ) . if ( !_dos-findfirst( fullpath, ATR-EXEC. &dta ) ) return( fullpath ) ; / * 検索ファイルあり / * 拡張子なしフラク・ if ( fnoext ) { char *pext ニ fullpath + strlen( fullpath ) ; strcpy( pext, if ( !_dos_findfirst( fullpath. ATR_EXEC. &dta ) ) return( fullpath ) : / * 検索ファイル . COM あり strcpy( pext, 汀 ( !_dos_findfirst( fullpath, ATR_EXEC. &dta ) ) return( fullpath ) : / * 検索ファイル . EXE あり } while ( *ppath + + ) : fullpath[ 0 ] return( NULL ) : : *ppath 十十 ) : / * 検索ファイルが見つからない 返り値 - は以外 : 実際に出力したハ・仆数 int puts-err( char *msg ) 工ラ - / * 文字列標準巧 - 出力 return( vrite( 2 , msg. strlen( msg ) ) ) ; / * 使用法表示 VOid usage( VOid ) 102 C MAGAZINE 1993 2