ファイル - みる会図書館


検索対象: 月刊 C MAGAZINE 1990年6月号
72件見つかりました。

1. 月刊 C MAGAZINE 1990年6月号

広い意味ては , スカラーデータオプジェ クトの宣言をするたびに継承が使われてい る。 FORTRAN 時代から手続き型の言語て、 は論理型 , 整数型 , 浮動小数点型などの各 種の演算型を各種のサイズて提供している。 さらにより新しい言語てはオプジェクトが 格納される領域のアドレス ( ポインタ ) を扱 うことさえ , ある程度可能になっている。 各スカラー型は等値比較や加算などの各種 演算をサポートし , 型どラしの変換やひと つの式の中ての演算子を挟む型の混合 ( 訳 注 : 型 A 演算子型 B) については固有 のルールがある。 したがってコード中に int x と書くと , す ぐに (int の ) 属性とメソッドをたくさん継承 する。この宣言により作り出された x は , そ のまますぐにプログラム中に使うことがて きる。そしてこの x の有効範囲や有効期間は 宣言て、決められているのて , プログラム中 て , それらについての特別な記述は不要て ある。このように宣言時点て多くのものが 得られるわけだが , これは言語設計時に決 められている。 しかし , 必要なもの以外も得てしまう。 実際のプログラムては , x が int て表現可能な すべての値を取るのはまれだ。そのため事 実上意味のない値 ( int の部分集合 ) がスト アされるのを避けるコードを追加しなけれ ばならないこともある ( 部分範囲を定義可能 な言語もある。これは有益てある。しかし 以前に指摘したように , 部分集合すべてが 部分範囲とは限らない ) 。同様に , x の値を y に格納された値に加算してはいけないとい う制限や , 17 て割ってはいけないという制 限が場合によってはある。いずれにしても , 必要とする属性とともに int から , 以上のよ うな不要な ( コード ) を書く許可も継承する わけだ。 もうひとつ云統的な の方法 利用価値があるものを継承するもうひと つの伝統的な方法は , サポートライプラリ を呼び出すことだ。 C プログラムて標準ヘッ ダ stdio. h をインクルードすると , 日 LE とい う型定義 ( とそのほかのいろいろなもの ) が 得られる。有効なファイル名を使って fopen をコールすると日 LE データオプジェクトへ のポインタが返るのて , このポインタを各 種の関数へ渡せばオープンしているファイ ルの内容をいろいろな方法て操作てきる。 たったひとつの # inc 旧 de ディレクテイプて得 られるサービスを自作しようとするなら , 数ベージにも渡る宣言 , 数 K バイトものコー ドが必要となる。 もちろん FILE は int よりさらに余分なもの を提供しすぎている。特定ファイルに対し ての操作ては , ( あなたに代わって ) 標準 C ライプラリが提供しているもののほんの一 部しか使用されない。たとえば , 名前と住 所のシーケンシャルファイルを取り扱うオ プジェクトを自分て定義をする場合には , こんな機構すべてを提供しないだろう。あ なたが書くコードの一部はまちがいなく継 承パワーを制限するようになっている。 指摘したいのは , 継承をいっても使って いるということだ。この概念にはなんら難 解なことはないし , 使用上の困難もありえ ない。しかし , 継承した型から新しい型を 導出していることが多いのにはなかなか気 づかない。たとえば , あなたのコードが•x には int とほとんど同じ動作をしてほしいが 以下の部分だけは別〃 , またはこれは日 LE とほとんど同じだが , 以下のような厳しい 制限があるクというような記述をすること がある。汎用的な言語に付属するオプジェ クトはあまりに汎用的すぎるのて , 使うと きになんらかの制限をつけるべきだ。 のより正確な オプジェクト指向プログラミングの中心 テーマは , 自前のオプジェクトを作成する ことだ。そうするとコード再利用の可能性 が約束される。あなたがしたいことのほと んどを行うオプジェクトを , リサイクル可 能なときに再利用するのだ。もしそのオプ ジェクトが , あなたがやってほしいことと まったく同じなら , ただて目的達成だ。実 際には滅多にそうはいかないのはご存じだ ろう。目的におおよそ合致したオプジェク トの属性すべてを継承し , この属性を修正 して完全に目的に合致するオプジェクトを 導出てきる言語ならばよろしい これが先に簡単に触れた継承のより正確 な意味だ。前から述べていたことと同じこ とだが , より様式化 (stylized) され , 集中化 され (centralized) ている ( 様式化は抽象化の 一形態て , 集中化はカプセル化の一形態 ) 。 継承したものをどう編集したいかをはっき り考えさせてくれるのはオプジェクト指向 プログラミングのよい点だが , そのかわり に単純な行為まてが見えにくくなり効率が 低下するのは困った点てある。 効率低下の原因は何だろうか ? 複雑な ケースも取り扱う用意のある言語て , 何か 単純なことをしようとするとそうなる。あ なたの本当にしたいことが単純てあるとト ランスレータに伝わらないと , 安全のため に汎用的な機構をすべて使わなければなら なくなり , パフォーマンスの低下は避けら れない オプジェクト指向プログラミング言語に おける効率低下の最悪の原因のひとつは , オプジェクトとメソッドをマッチさせる機 構 ( 訳注 : オプジェクトへのメソッドの割り 付け機構 ) に潜んている。これが何を意味 し , なぜ問題なのかを解説するためには少 し前に戻らなければならない 先月号ては関数をグループ化し外部名の 名前空間ての混乱を最少にする方法につい て解説した。結合 (coupling) と団結 (cohe sion ) の原理をおのおのの関数同様にグルー プにも適応し , ひとつのグループ内の関数 を相互に関連させることが望ましい。典型 的なグループては , 関数はすべて , あるデ ータ構造を操作する ( そのほかの関数はこの データ構造の内部を知る必要はない ) 。 カプセル化をうまくサポートしている言 Programming on purpose 13

2. 月刊 C MAGAZINE 1990年6月号

かの main( ) を含むモジュールとリンクして 用いる。 Fig. 11 にコンパイルの方法を示し た。外から呼ばれる関数は int kmp search(char * key, char * text)<A たっ の引数をとる。第 1 引数はキーワードて , 第 2 引数として与えられたストリング中からこ れを探し , 最初に見つけたロケーションを 返す。ロケーションがない場合は一 1 を返 す。 DEBUG を定義したままコンパイルし , 実 行した結果は Fig. 12 のようになる。 G20 奮闘記ー第 3 回吉ー g 十十移植再挑戦 TEX は DonaId E. Knuth 教授の開発した 文書処理システムてす。 X68000 てはこれの Ver. 2.95 と ASCII 版日本語 TEX の Ver. 2.90 連載も 3 回目となりました。先月の大きな が稼働しています。私カⅨ 68 てコンパイルし 「脱線」いかがてしたてしようか ? 本誌て、 て動くようにしたものは ASCII 版の日本語 TEX てす ( 注意 : X68 の日本語 TEX のファイ キーワードがその中に自身の先頭からの も yacc を使ったコンパイラ作成の連載があ ルは一部オリジナルの ASCII 版日本語 TEX 部分文字列を含むとき , KMP 法はおもしろ り , コンパイラの中身の基礎知識を得るた い動きをする。検索対象のポインタ k は後戻 めに私にはたいへん役に立っています。 gcc と異なったものがあります ) 。 りしない。たかだか 2 回の比較が行われるの TEX 自体は WEB という言語て記述されて はバージョンアップして , 1.37.1 が最新に みてあるのて , 検索時間は文章の長さのみ なっているようてす。 Ver. 1.36 のループ最 いますが , 私がコンパイルしたのは , すて に比例し , キーワードの長さに関係しない。 適化ては意味不明の無意味なコードが少し に NEWS 上て C にトランスレートされたソー てていましたが , 最近 1.37.1 を入手して移 スてした。機種依存部分を X68 の仕様にあわ 植したところ , まちがったコードを生成し せて少し手を加えただけて , 稼働しました てしまいました。なかなかループの最適化 ( 考えてみるといちばん楽だった記憶があり 〈参考文献〉 というのは難しいようてすね。 ます。最初 make を実行しただけて、 / ーエラ 話を本題に戻しましよう。 g 十十の移植て 文献 1 はキーワードが与えられたら , これ ーて実行形式まて生成てきましたから・・・ す。結局 , 第 1 回てお話しましたように , 最 を探すマシンコードを直接生成して実行し もちろん , まともには動きませんてした 初の試みは見事に失敗に終わり , その後 , てしまうようなことも書いてある。文献 2 自 が ) 。移植には当然 gcc を使用しましたが , 身は 2 次元のパターンマッチの話だが , KMP しばらく g 十十のソースは私の HDD から消滅 試しに XCC コンパイルしてみるとバスエラ し , BACK UP すらなくなっていました。 ーになってしまいました 0Ver.2 の噂も聞く 法や 4 月号て紹介した BM 法や RK 法が簡単に 私がおもに活動している NIFTY-Serve の XC てすが , UNIX の巨大なファイルをコン まとめてある。 パイルする無謀な ( ? ) 試験もやってみてく FSHARP<, オフラインミーティングの計 画がもち上がり大阪に出向いていきました。 1 ) Knuth,D. E. ,Morris,J. H. ,Pratt,V. ださいね。 この日本語 TEX は いい機会だから私の母校てある大阪大学の 話は前後しますが , R. : Fast Pattern Matching in Strings , NTT 版 JTEX と違って , 日本語のフォント 工学部通信工学科中西研究室におじゃまし SIAM J . of Comput . ,Vol.6,N0.2 て , NEWS て稼働している g 十十や TEX の をすべてプレビューアとプリンタドライバ June , pp. 323 ー 350 ( 1977 ) に依存しています。いきなり , 「プレビュー ソースを配布してもらったのが 2 回目の移植 2 ) Zhu,R . F. ,Takaoka,T. ;A Tech の始まりてした。このときは g 十十と日本語 ア」などというのがててきてしまったのて , nique for TWO ー Dimensional Pattern TEX をもらい , 移植したのてすが , 人気の Matching, CACM , V01.32 , No. 9 , Septem 少し説明しておきます。 TEX の原稿は原稿文章そのものと TEX の 点て g 十十は TEX の影にかすんてしまいま ber,pp. 1110 ー 1120 ( 1989 ) す。そこて , またまた話は脱線して , この コマンドがいっしょに記述してあるテキス TEX を少し紹介しておこうかな ? と思い トファイルてす。それを TEX システムて処 理することて DVl(Device independent ます。 、脱線 ま Conference Room 141

3. 月刊 C MAGAZINE 1990年6月号

List1 i が選ばれるべきてある ) 。 プグラム 10 : { Char *key, *text; int 地 c ocsu 舮 0 : 14 : key=" 円 PC ”・ 15 : text=" 円 PCCMZ 円 PCABPCPCG 円 PC" : printf("Text is Y" % s ド \ 心 . text) : printf(" \ ” 0123456789012345678901r \ n つ : printf("Key word is W"XsY"Yn",key) : printf(" し ocation is つ : loc=knp-search(key, text) : 21 : 22 : locsun 十 =loc; while ( 10C 〉 = の { 24 : printf(" Xd",locsum) : 26 : loc=kmp-search(key. text+locsun 十 1) : csu 計引 oc + 1 : printf("}n") : 31 : #endif 32 : 33 : k np-sea rch ()a ttern, text) 34 : Char *pattern, *text : 35 : { 36 : int n,n,j,k; int *next : 38 : n=strlen(pattern) : 39 : n=strlen(text) : 40 : if 加Ⅱ第←の return -1 : 41 : 42 : next=(int *)malloc(sizeof(int)*n); 43 : prep-next (next, pattern) : 44 : 46 : while ( j く第 & & k く n) { whi 厄 ( j 〉 = 0 & & text[k] ! =pattern [j]) 48 : j=next[j] : 49 : 50 : k 十十 : j 十十 : free( (void *)next) : 52 : return( ( (k==n & & text[k]==pattern Cj] ) Ⅱ k く n) ? 53 : 54 : } 55 : 56 : prep-ne xt (nex t. pattern) 57 : int *next: 58 : Char *pattern; 59 : { int j,t,n: n=strlen(pattern) : 62 : j=0:t=-1:next[0] 63 : while ( j く { whi le ( t 〉 -1 & & pattern[j] ! =pattern ) 65 : t=next[t] : 66 : t 十十 : j 十十 : if (pattern [j] ==pattern [t]) 68 : next[j] =next[t] : 69 : next[j] =t : e ー se 72 : } キーワードは patternC] に , 文章盟 ext ロ にあるものとする。 k を文章のポインタ , j を キーワードのポインタとし , j をずらすため の補助表を next ロとする。 m はキーワード の文章の長さを , n は文章の長さを表す。 next ー 1 は前節の①④の場合に相当し , *k は 0 文字目となる可能性もないのて , このと きは j 十十して j を 0 にするとともに無条件に k 十十してよいことを示す。最外の while を抜 けたとき , k < n なら , k 司がキーワードの先 頭を示すことになる。 k = = n & & * (k— = * 0 ー 1 ) てある場合は , ちょうど比較 終了時とテキストの終わりが同じだと考え られる。 次に next ロの作り方てあるが , prep_ next( ) がこれを作る。概念的には前節て述 べた。プログラム中ては前節における i を保 持するために t を用いている。もし , j が先頭 からの部分文字列を含む形て増えている間 は , next[j]=next[t] として , 初めての不一 致 <next[j]=t となる。この例ての next [ ] は ー 1.0 , ー 1.1 となる。 ヾイルの手順と ー出し方法 ソースファイルのファイル名を KMP. C と する。前回 ( ' 90 年 4 月号 ) と同様 , #define DEBUG を残せば , main( ) がコンパイルさ れ , 単体テスト用の実行形式を作る。 DEBUG が定義されなければ , KMP. OBJ としてほ Fig. 12 実行例 Fig. 11 コンバイルの手順 #define DEBUG のまま KMP. OBJ—>KM P. EXE ( 例題を実行 ) KMP. C KMP. OBJ ( リンクして使う ) #define DEBUG を消去 Text is ” PIPCCMZPIPCABPCPCGPIPC ” ” 0123456789012345678901 ” Key word is "PIPC ” Location is 0 7 18 CMAGAZINE 140 19 6

4. 月刊 C MAGAZINE 1990年6月号

002 point Edition がちなため , プロトタイプなども使いたが らないという傾向は強い 一方 , 世の中には lint というツールが存在 する。 UNIX ては有名なツールだし , MS- DOS 用も存在するから , すてに愛用されて いる方も多いだろう。 lint は複数のファイル て関数の型宣言の矛盾 ( 不一致 ) をチェック してくれるのて , それを使えばこの種の誤 りはある程度防げる。しかも不精者て、も Makefile の中に 1 行入れておけばすむのて、 , おっくうがらずに使える。 しかし , ⅱ nt が有効なのは , ソース ( すく なくともプロトタイプ宣言 ) が用意されてい るようなケースに限られるのてある。第三 者によって作られ , すてにコンパイルがす んているライプラリルーチンなどを使う場 合には , マニュアルなどて返り値をよく調 べて , まちがえないように使わなくてはな らない。親切なライプラリ作成者て、あれば , 適切なプロトタイプ宣言を行ったヘッダフ ァイルを用意してくれるかもしれない。そ うすれば , 問題はいちおう解決する。しか し本来は , どんな不精なユーザが使っても , どんなまずいことをしても , いっさい型違 したがって , LSI C ー 86 の場合に ある ( 9 ) いによる悲劇が起きないようなメカニズム プログラムとして myecho. c という , 非常に は , prog に何もパラメータを渡さずに起動 を言語が提供すべきだということになるの 簡単てありふれたプログラム List3 も作って すると 1 が返される。 て、はないだろうか。 みたのて , 参考にしてほしい。 それては , 先ほどのプログラムを次のよ この問題を解決するひとつのアイデアが , void とするカ血するか ? うに変更したら , いったい返り値はどうな 最近の C 十十には盛り込まれた。それは type るてあろうか。 safe linkage と呼ばれる手法だ。ごく簡単に 前の部分て , int が返されると期待してい 説明しておこう。 C 十十のソースファイルに void main( ) 先ほどよりも少し複雑になったが , まだ る場合に , void と宣言した関数がリンクさ 含まれる関数名をコンパイルすると , 従来 まだ簡単なプログラムてある。 れて何もエラーにならないのは言語の欠陥 は , UNIX の伝統にしたがって , 関数名の前 やってみればわかるが , この場合も返さ てある , と書いた。現状ては , 確かにこの にアンダースコアヾ〃をつけた形式のシン れる値は同じてある。 MS ー C Ver. 5.1 や 欠陥を内蔵したまま C という言語は使われて ポルとして出力されていた。たとえば , main ( ) TurboC Ver. 2.0 ては 0 が返ってくるし ,LSI 関数は実は main() となるわけてある otype いて , ユーザはこの落し穴に落ちないよう C ー 86 ては仮想的な a 「 gc の値が返される。つ にと気を配ってコーディングしなければな safe linkage< は , これに加えて関数の返り まり , このようなケースては , 実際問題と らないことになる。 値の型情報をエンコードしたものを関数名 してはどちらても同じ結果になるわけだ。 プロトタイプを用心深く用いれば , この に付加したシンポルを出力する。 なお , 具体的に main( ) が値を返す場合に 種のまちがいはおおむね防ぐことがてきる。 これを行えば , C のソースレベルては同じ はどうなるかをテストするためのサンプル しかし , 不精者だとついつい宣言をさばり 関数名ても , 返り値の型が異なれば , リン ANSI C : more 125 ① List 2 help(); / * never * / / * sk ip thi s command name * / 十十 argv; if ((rc = spawnvp(P WAIT, *argv, arg の ) く 0 ) fprintf (stderr, ” run: spawn fail with XdYn ” , errno) : else fprintf (stderr, run: Xs term inated with XdYn" *argv, return 0 : 9 0 1 よっ 0 っ 0 4 ド 0 6 々ー myecho. C List 3 引数を stdout へ工コーする 2 : myecho これは特別版 ! * * * 5 : 渡された引数の個数を、 ma i n からの戻り値とします。 6 : それはこのプログラムを実行したプロセスの、終了ス 7 : テータスとして親プロセスへと戻されるはずです。 8 : 9 : 10 : #include く stdio. h> 12 : i nt 13 : nain(int argc, char **argv) int i = argc; while (--argc 〉の 17 : printf("XsXc ” return i : 〉 1 ) (a rgc * 十十 argv,

5. 月刊 C MAGAZINE 1990年6月号

最新 ウシステム 入門 ウイン、 数は読み出すメッセージの種類を限定する インスタンス変数に似ています。 いるのて、す。それが可能な理由は Fig. 4 の ためのマスクの役割をしますが , ふつうは MSG 構造体のメンバを見れば理解していた Windows や PM において , ウインドウは どちらも 0 にして , すべてのタイプのメッセ だけます。 Windows にはウインドウブロシ 自己の記憶域と同時に , 決まった特性 , あ ージを読み出すことになるて、しよう。 ージャのようにシステムの側から呼び出さ るいは動作をもっているという意味におい て , オプジェクト指向の概念て、いうオプジ れる関数がいくっかあります。それらの関 ウインドウブロシージャ 数は , アプリケーションのモジュール定義 ェクトとよく似ています。オプジェクト指 向言語て、はオプジェクトに動作するきっか ファイル ( 拡張子 . def : Windows のアプリケ ウインドウブロシージャは最初に示した ーションプログラムをリンクするとき指定 けを与えるものをメッセージと呼んて、いま イベントループのスイッチ文だけを抜き出 します ) の EXPORTS 文に列挙しておきま す。 Windows や PM て、はこのことを意識し したような関数てす。先ほどのふたつのポ てか , イベントのことをメッセージと呼ん す。その事情は [ 文献 5 ] に詳解されているの タンをもったウインドウを想定すると Win て、います。同様にイベント ( ディスパッチ ) て、参考にしてください dows のものは次のようになるてしよう。 ループは「メッセージループ」と呼んていま メッセージループには , TransIateMes long FAR PASCAL WndProc( す。今後本稿て、も Windows や PM に関して sage( ) という API がディスパッチルーチン HWND hWnd, の前に入れられています。この API はどれか はイベントという言葉の代わりにメッセー unsigned iMessage, のキーポードが押されたというキーストロ ジという言葉を使うことにします。 WORD wParam, ークメッセージからキャラクタコードメッ メッセージループ LONG IParam) セージを作ってキューに入れます。ほとん どの Windows のプログラムのメッセージル これまて、にイベントループとディスパッ ープはこのようになっています。また GetM es チループの例をひとつずつ紹介しました。 sage ( ) の第 2 引数に特定のウインドウへのハ このふたつのループを見て , 「このループは ンドルを入れると , そのウインドウ向けの どうやって終わるのだろう」と疑問に思われ メッセージだけが読み出されます。第 3 , 4 引 たかもしれません。いろいろなウインドウ システムのイベントループの抜け方を比較 Fig. 4 MSG 構造体 これらの構造体は SKD に付属の Windows. h ヘッダファイルで定義されています。 するのもおもしろいのてすが , Windows の メッセージループを見ていくことにします。 / * ウインドウクラスデータ構造体 * / Windows てはキューからメッセージを読み typedef struct tagWNDCLASS { / * クラススタイル * / WORD style; 出すには , 通常 GetMessage( ) を使います。 (FAR PASCAL *lpfnWndProc) ( ) ; / * ウインドウブロシージャ * / long この API はアプリケーション終了を知らせる / * ウインドウクラスの付加情報を記憶するバイト数 * / int cbClsExtra; WM QUIT メッセージを読み込んだ場合にだ int / * ウインドウインスタンスの cbWndExtra; / * プログラムインスタンスのハンドル * / HANDLE hlnstance; け 0 ( 偽 ) を返し , そのほかのメッセージを読 クラスアイコンのハンドル * / HICON hlcon; み込んだときには 0 以外の値 ( 真 ) を返しま / * クラスマウスカーソルのハンドル * / HCURSOR hCursor; / * クラス背景ブラシのハンドル * / す。そこてメッセージループは次のように HBRUSH hbrBackground; LPSTR lpszMenuName; / * クラスメニューのリソース名 * / 己述てきます。 LPSTR lpszCIassName; / * ウインドウクラスの名前 * / while (GetMessage(&msg, NULL, 0 , 0 ) ) { ) WNDCLASS; TransIateMessage(&msg); / * メッセージデータ構造体 * / DispatchMessage(&msg); typedef struct tagMSG HWND hwnd; / * メッセージを受け取るウインドウのハンドル * / WORD message; / * メッセージ番号 * / , こて , プログラムからは直接ウインド WORD wParam; / * メッセージの付加情報 * / ウブロシージャを呼び出してはいない LONG lParam; / * メッセージの付加情報 * / に注意してください。 DispatchMessage( ) DWORD time; / * メッセージがキューにポストされた時間 * / / * メッセージがポストされたときのマウスカーソルの位置 * / POINT pt; A 曰が , メッセージが送られるべきウインド } MSG ウのウインドウブロシージャを呼び出して switch (iMessage) { case WM COMMAND: switch (wParam) { case ID YES: 1 三ロ 特集最新ウインドウシステム入門 57

6. 月刊 C MAGAZINE 1990年6月号

0 0 ンフレーム系やミニコンピュータ系 ーター・ノートン氏はもともとメイ 38 CMAGAZINE 1990 6 マルチタスク」は , とくにわかりやすかっ は , 一読の価値がある。「 9 章ファイルと オ」 , そして「 9 章ファイルとマルチタスク」 とくに , 「 5 章スレッド」 , 「 6 章セマフ ないだろうか。 みすすむことがてき , 理解しやすいのては 切に入っているのて , 意外とスムーズに読 ている。さらに , 図表類も必要に応じて適 門書として誰にても薦められる内容になっ ている。そのためか , 本書は , 基本的な入 的な事柄について紙面を十分割いて解説し 全体的にいえることなのだが , 非常に基礎 ているという印象を受けた。また , これは の構成と取り上げ方もよくまとまっ 本 書は 14 章から構成されており , 各章 になった。 なのて , そういった意味ても , 本書は参考 評者は , OS / 2 関連の翻訳を行っている最中 するうえてよい方向に働いたのて、あろう。 わせているようなのて、 , それも原書を翻訳 者は , OS / 2 についての知識と経験をもち合 たいへん読みやすい翻訳てある。本書の訳 突き合わせて読み比べたわけてはないが , 切てあるということて、ある。とくに原書と まず最初に感じたのは , 翻訳が非常に適 つか述べる。 て , 本書を読んて、感じたことをいく 書籍といえるだろう。 OS/2 については , 氏の書きおろした最初の ては , 最新のものて、ある。しかも , 本書は , の本のうち , 日本語て、翻訳されたものとし 本書は , ノートン氏が執筆したいくつか は , いまや世界中に知れわたっている。 る。そのソフト「ノートンユーティリティ」 イソフトの製作・販売に成功したからて、あ かというと , パソコン関連のユーティリテ た人てある。その彼が , 今 , なぜ有名なの の企業てコンヒ。ュータの作業に従事してい ・今月の書籍・ ・定価 6 , 500 円 ー B5 判上製 / 251 頁 一日経 BP 社 ■池田健一訳 •Peter Norton Robert Lafore 著 房 0 二 OS / 2 ビーターツノートンの Peter Norton'slnside 0S/2 『ピーターノートンの OS / 2 』 にかぎらず , これらについてのまとまった SDT についての情報が不足している。本書 リ , Linker のオプションの使い方 , また , いての標準ライプラリや OS / 2 のライプラ 供してもらいたかった。とくに , C 言語につ プログラミングの環境についての情報を提 それから , これは評者の希望てあるが , ていたが , これも , ちょっと気になった。 「キュー」と「待ち行列」が混在して使用され てもいいのてはないだろうか。それから , て、取り上げてはあったが , 1 章割いて説明し ついては , いちおう「 11 章プロセス間通信」 の説明が少ないのが気になった。キューに いて述べる。まず , キューについて れからは , いくつか気づいた点につ よいのかもしれない 項目にかぎるならば , この程度がちょうど のて、はないかとも思うが , あえて基礎的な 内容的にはもう少し突っ込んて、もよかった 章プロセス間通信」がそれて、ある。ただ , Exchange) についても説明されている。「 11 た。そのほかに , DDE ( Dynamic Data 情報を提供してくれる本がいまだに存在し ていないのが実状て、ある。ただ , 本書は訳 書なのて、 , そこまて、望むのはすじ違いとい うものかもしれない メリカて、は , OS / 2 Ver. 2.0 が出荷さ れているが , 日本て、の出荷はもう少 し先になるようだ。このバージョンは , OS/ 2 の 80386CPU 完全対応版て、ある。しかも , Ver1.0, Ver1.1, Ver1.2 との完全互換をう たっている。もちろん , PM ( プレゼンテー ションマネジャ ) もサポートされている。本 書は , OS/2 Ver. 1.0 に基づいているため , PM がごっそりと抜け落ちている。しかし , 本書が無意味て、あるということて、はない なぜならば , 本書の内容は , OS / 2 の基本的 な部分の解説がかなり詳しく , わかりやす く書かれているからて、ある。 PM のプログラ ミングを取り除けば , なんら問題はない S / 2 のプログラミングといったとき に , PM をはずすことはて、きないの て、 , 本書だけて、は情報が足りない。したが って , ほかの書籍も併読しなければいけな くなるが , そのためにも , 本書の定価がリ ーズナプルな範囲て、あれば , という気がす 現時点て、は , OS / 2 プログラミングの解説 書や関連書籍は , 個人て、は購入せず , 会社 て、購入することが多いという判断が働いた のかもしれない。おそらく , それは事実て、 あろう。だが , 評者のようなフリーのプロ グラマには , 手の届かない , 高価な書籍と 映ってしまう ( もっとも定価と内容がミスマ ッチしているのが最大の原因なのだが ) 。「 OS / 2 プログラミング技法を学ぶ」という副題に ふさわしい優れた内容をもち , また , よく こなれた翻訳て、 , 読みやすいよい本て、ある にもかかわらず , 定価が高いのはかえすが えすも残念て、ある。本書は , もっと低価格 にして多くの人に読んて、もらいたい本て、あ 0 ( 秋津彰文 )

7. 月刊 C MAGAZINE 1990年6月号

オフジェクト指向システム分釿上流 CASE のためのモテル化手法 S. シュレイアー / S. J. メラー著 く主な内容項目〉 オフブエク / 、指向 1 なせ情報をモテル化するのか ? 開発 / 情報のモテル化 / 他 本位田真一 / 山口亭訳 システム分析 2 基本的考え方 A5 判 192 頁 3 オプジェクト定義 / 識別化 / 名前付け / オプジェワトの試験 / 他 、 . シュしをアー、メラーお 税込定価 2500 円 本川れ・山日ツ去 4 属性定義 / 表記法 / 発見と区分化 / 職別子 / 属性記述 / 定義域 / 他 本書は , オプジェワト指向に基づく情報のモテル化手法をシステ乙 5 関係関係の概念 / 2 項関係の形式 / 他 6 多数のオプジェクトに関係する構成サプワラスとスーハーワラ 開発 ( ソフトウェア開発 ) に用いるための実用的なハウ・ツー書です。 また , 本書のシステ乙分析のテワニッワは強力で , そのアプローチは ス / 関連付けオプジェワト 7 情報モテルの表現情報構造図 / 情報構造概念図 / オプジェワト仕 システ乙ガ要とする本質的情報を同定し , 規格化し , 確認するテワ ニッワに重点を置き , 多くのシステ乙 ( ビジネス , 工学 , 技術訓練用 様書 / 関係仕様書 / 要約仕様書 / 他 等 ) のエキスハート知識を同様なアプローチで扱うことガできます。 8 技法文書調査 / 対話 / 技術ノート / レビュー / 他 9 システム開発におけるモテルの役割開発プロセス / 分析フェーズ テータベース・システ乙の他 , 多様で複雑な問題を持つシステ乙 ( リ / 外部仕様フェーズ / システ乙設計フェース / 実現フェース / 他 アルタイ乙制御システ乙 , 設計支援システ乙 , 知識べースシステ乙等 ) にも有効に利用することガできます。 付録 ロリ侮 BASIC 入門 ve 「 4.2 / 4.5 対応版 吉川敏則 / 浅野ー志著 く主な内容項目〉 0 〃畆例立 1 システムの組み込み方法フロッピーティスワ・ハードティスワ 日 5 判 B5 判 236 頁 入門 への組み込み / ガな漢字変換の設定 / 特殊な設定 / 他 税込定価 2500 円 2 簡単な使用方法起動 / 作成 / 実行 / 保存 / 読み込み / コンバイル / タ イレワトモード / 他 3 プログラムの作成テータの入力と出力 / 四則演算 / 判断 / 繰り返 し / 配列 / 条件判断と組み込み関数 / プロシージャ / 文字列処理関数 / ファイルの処理 / クラフィッワ / 再帰的プロシージャ / 他 4QuickBASlC Ver4.5 についてシステ乙構成と組み込み / この本では , 主に初心者を対象に , QuickBAS ℃のシステ乙の組 起動とプロクラ乙の実行 / QB アドハイサ / 総合環境 / 言語使用 / 他 み込み方法から , BASIC のプロクラ乙の実際的な作成方法を , 多く の例題を用いて詳しく説明しています。初めて BASIC に触れる人 , 付録 あるいはすでに他の BASIC に慣れている人 , さらに他の言語を使い こなしている人にとっても , QuickBASlC のすばらしさは一読する 価値ガあると思います。 ※ 1990 年度版図書目録か出来上がりました。下記に、ご請求くたさい。 啓学出版 〒 101 東京都千代田区神田神保町ト 46 報なる C プログラマーをめざとに〃 C 日語学習ソフト UN Ⅸシステムの基本機能をコマンドを通じで里解し、 UN Ⅸシステム上でプログラミングができるようになるこ とを目的とした学習ソフトです 第 1 章 マイクロコンピュータ用 OS 第 2 章 UN Ⅸシステムの概要 第 3 章 システムの起動 第 4 章 ファイルシステムとその内部構造 第 5 章 シェルの使い方とコマンド IPA CAROL ℃」は、 C 言語を文法知識、プログラミング演習の両面から学習でき 第 6 章 ファイルの編集 るソフトで魂これから C を使う方、 C 言語らしいスタイルの華麗なプログラミングをめ 第 7 章 UN Ⅸの基本的なコマンド 第 8 章 文章の作成・処理・出力 ざす方むきのものです。 UN Ⅸシステムでのプログラム作り 第 9 章 C プログラマは、ポインタのポインタ、ポインタのポインタのポインタなどを自由に使 第 10 章 UN Ⅸシステムの導入と運用 いこなし、関数のポインタ呼び出しを活用し、リスト構造を使いこなし、そのうえ分か 標準学習時問 : 60 時問 適応機種 : PC ー 9801 ジトズ りやすくデバッグしやれ、プログラムを組むことが要求されます。 MS-DOS Ve 「 2.11 このソフトの学習内容は、入門編、基礎編、応用編に分かれ、 c 言語の文法全体 格 : 98 , 000 円 ( 消費税別 ) 価 を包括しています。また、内蔵の C シミュレータで与えられた問題を実行し、動作を確 C 言語関連書籍 認することで発見的学習を導くよう工夫されています。 標準学習時間 : 入門編 13 時間、基礎編 27 時間、応用編 30 時間 適応機種 . PC -9801 シリーズ C の基礎文法を豊富な例題で解説した入門書の決定 MS-DOS Ver2.11 以上 版。 B5 判 240 頁 2 , 060 円 価 格 : 98 , 000 円 ( 消費税別 ) ( 消費税込み ) 〒 164 東京都中野区中野 5 ー 62 ー 1 資料請求は、氏名・お勤め先の名称・所属・住所・電 話番号を明記し資料請求券とともに郵送または FAX お問い合わせ先 CAROL インフォメー ぐノョン 株式会社 SC 0 でお願い致します。「 C 」のサンプル版をお送り致しま TEL ( 03 ) 319 ー 6991 す。 FAX ( 03 ) 319 ー 6823 TEL08 ー 233 ー 3795 FAX08 ー 233 ー 3730 UNIX 学習ソフト lPAØQ5L 「ソフトウェア (UNIX) 」 これは、基礎編で学習した文字舅をソートするプ 0 グラムてす . このプログラムのン一ト部分を数化してください . ′・をの内も・ノ、 IPAØQOL 「 C 」 数の号物はインタの配発一により 3 書 二二ロ

8. 月刊 C MAGAZINE 1990年6月号

"HeIIo, wo 日 d / " を表示するプログラム ( C ) 60 : { List2 int PASCA し WinMain(HANDLB hlnstance, / * この起動用のハンドル * / long FAR PASCA し HelloWndProc (HWND, uns igned, WORD, LONG) : 1 : #include く windows. h> 2 : 3 : 4 : 5 : 7 : 8 : 10 : 13 : 14 : 17 : 19 : 20 : 22 : 23 : 24 : 26 : 28 : 29 : 30 : 32 : 33 : 34 : 35 : 36 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 45 : 46 : 48 : 49 : 50 : 52 : 53 : 54 : } 55 : 56 : 57 : 58 : 59 : 62 : 64 : 66 : 68 : HANDLE hPrevInstance, LPSTR lpCmd し ine, int nCmdShow) HWND hWnd; MSG msg; WNDC し ASS wndClass : / * 前の起動のハンドル * / / * コマンド行の引数 * / / * ウインドウの表示のされ方 * / / * メイン・ウインドウ用のハンドル * / / * メッセージ・ループ内でメッセージを保持する * / / * ウインドウ・クラスの構造体 * / if (!hPrevInstance) { / * これが最初の起動か ? * / wndCIass. style = NU しし : wndCIass.IpfnWndProc = Hel loWndProc; wndClass. hlnstance = hlnstance; wndClass. hlcon = し oa con ( NU しし , IDI_APP し ICATION) : wndC lass. hCursor = し oadCursor (NULL, IDC_ARROW) : wndCI ass. hbrBackground = GetStock0bject ()H I TE_BRUSH) : if (!RegisterCIass(&wndCIass)) { wndCIass. IpszClassName = (LPSTR) " HE しし 0 " : ( し PSTR) NUL し : wndClass.IpszMenuName / * 初期化不能なので終了する * / return ()U しし ) : hWnd = CreateWi ndow ( ” HEL し 0 ” ” Hello, World" WS_OVERLAPPEDWINDOW, CW_USEDEPAU し T, CW_USEDEFAU し T, CW_USEDEPAU し T, CW_USEDEFAULT, NU しし NU しし hlnstance, NU しい : / * ウインドウ・クラス名 * / / * ウインドウ名 * / / * ウインドウのスタイル * / / * x 位置 * / / * y 位置 * / / * ウインドウの幅 * / / * ウインドウの高さ * / / * 親のハンドル * / / * メニューの I D * / / * インスタンス * / / * 追加的情報 * / if (!hWnd) { return ()U しし ) : / * ウインドウを作れるか ? * / / * 作れなければ Windows に戻る * / ShowWindow(hWnd, nCmdShow) : / * メイン・ウインドウを表示 * / UpdateWindow (hWnd) : / * WM_PAI NT メッセージを送る * / while (GetMessage(&msg, NU しし , NU しし , NU しし )) { TransIateMessage (&msg) : DispatchMessage (&msg) : return (msg. wParam) : / * PostQuitMessage からの帰値 * / long FAR PASCA し HelloWndProc(HWND hWnd, / * ウインドウのハンドル * / uns igned Message, WORD wParam, LONG lParam) swi tch (Message) { PAI NTSTRUCT ps : HDC hDC : / * メッセージのタイプ * / / * 追加的情報 * / / * 同上 * / / * ウインドウは破壊される * / case WM_DESTROY : PostQu itMessage ( 0 ) : break : / * ウインドウはリペイントされる * / case WM-PAINT: hDC = BeginPaint(hWnd, &ps) : Text0ut (hDC, 1, EndPa int (hWnd, &ps) : break : / * Windows にすべておまかせする * / default: return (DefW indowProc (hWnd, Message, wParan, lParan)) : } / * end switch * / return ()U しい : ” Hello, World!", 13 ) : いるのて、す。ひとつの例て、説明します。 ウインドウをひとつ作りましよう。この ードを示します。 プログラムて、す。 List2 に , C による同じコ これが , たった 3 行の HeIlo , world / ′′ 目を書き加えるだけてす。 world / クを表示したかったら , す。さらに , このウインドウに Hello List 1 の 1 , 2 行目のようなコードになりま に出るだけのウインドウて、す。 Actor て、は , ウインドウはなんにもて、きない , List1 の 3 行 ただ画面 のがふつうて、す。つまり Windows アプリ のて , コードとデータがかなりの量になる medium のメモリモデルて書くことが多い のアプリケーションは small または てき上がることに気づきます。 Windows ないのて , かなり小さな . EXE ファイルが ードは実際には . EXE ファイル中に含まれ チンだけがリンクされて , Windows のコ き彫りになります。 C て、書くと , スタブルー dows SDK との間の , ある大きな違いが浮 を実行する段階になると , Actor と Win 実際にアプリケーションを作って , それ 行性能 するメソッドが , すて、に存在するからて、す。 なかった , いろいろな状況に応じて処理を はプログラマがいちいち書かなくてはなら Actor が定義しているクラスの・中に , C て、 す。 Actor だとコードが少なくなるのは , いうふたつのメッセージだけを扱っていま 例て、は , WM DESTROY と WM PAINT と 処理するための関数は必要て、す。 List1 の事 すだけて、あっても , これらのメッセージを メッセージをただ Windows の処理用に渡 ジループも書かなくてはなりません。また , からのメッセージを扱うための , メッセー ドウを表示するよう指示します。 Windows 生成し , そして最後に , Windows にウイン インドウのクラスを登録し , ウインドウを の部分て、す。 Windows 中て、は , ューザのウ C のコードのほとんどが , セットアップ 「なぜこんな大量のコードになるんだ ? 」 窓 (Windows) によじ登る方法 21

9. 月刊 C MAGAZINE 1990年6月号

に教えます。これによって , PWB はコンパ イラやリンカのオプションの初期値を決め ます。オプションは , デバッグバーション 用とリリースパージョン用の 2 種類が登録さ れます。ューザは PWB が決めたオプション の修正を , メニューの選択て、簡単に行うこ とがて、きます。変更されたオプションは , PWB が自動的に MAKE ファイルに反映して くれます。 いよいよコンパイルて、す。デバッグが終 わるまて、は , デノヾッグノヾーションて、コンノヾ イルします。 PWB は , コンパイル終了後に 工ラーまたは警告があると , コンパイル結 果のウインドウにエラーまたは警告を表示 して , それが発生したソース行にカーソル を移動させます。 MS-C Ver. 6.0 て、は警告 レベルが 0 から 4 まて、あり , 4 にすると LINT ユーティリティのように細かいところまて 警告を発して , 不用意なミスや移植性の悪 い部分を指摘してくれます。 コンパイル / リンクが無事に終了すると , デバッグに移ります。 PWB のメニューて、デ バッグを選択すれば Code View( コードビ ュー ) が起動され , 終了すると PWB に戻り ます。デバッグ作業中は , プログラムの修 正とコンパイルの繰り返して、すが , MS-C Ver. 6.0 には QC と同様のクイックコンパイ ル , インクリメンタルコンノヾイル , インク リメンタルリンクの機能があるのて、 , 大き なプログラムて、も短時間て、コンパイル / リン クがて、きるようになっています。 デバッグが終わると , リリースパーショ ンて再度コンパイル / リンクを行い , 最終的 なプログラムを作成します。 新しい機能として , ソースプラウザが組 み込まれています。ソースプラウザは , ソー スプログラム上の関数 , 変数 , マクロ , 宣言 などの相互リファレンスの表示や検索する 機能てす。関数がどこて、定義されているか , どこて、使われているかを表示し , そこをマ ウスてクリックすれば , 関数が定義されて いるまたは使われているところを瞬時に見 ることもてきます。ソースプラウザは複数 のソースファイルに対して使えるのて、 , 大 きなプログラムの開発に便利だと思います。 コンバイラ オプジェクト指向を取り入れて C 十十にす る , もしくは独自の仕様て℃を大幅に拡張す るということは , MS-C Ver. 6.0 て、は行わ れていません。しかし ,ANSI C 規格準拠の 度合いが高められ , オプチマイズの強化 , インラインアセンプラのインプリメントな どにより Ver. 5.1 に対して大幅な変更が加え られています。 次頁の Tbl. 1 に MS ー C Ver. 6.0 て、追加さ れたコンパイラオプションの一覧を載せま したのて、 , 参照してください ANSI C 規格への準拠 Ver. 5.1 て、もかなり ANSI C に準拠してい ましたが , 今回のバージョンアップて、 , 通 常使用される範囲ては , ほば 100 パーセント ANSI C の仕様に準拠したのて、はないかと思 われます。 具体的な変更点を述べますと , キーワー ドとしては使えましたが , 実質的なコード が生成されなかった vo は t ⅱ e が正式にインプ リメントされました。ビットフィールドは 構造体て、しか使えませんて、したが , Ver. 6.0 ては共用体て、も使用て、きるようになってい ます oswitch 文て、 long および unsigned long が使えるようになりました。アドレス演算 子 & の仕様が ANSI と同じになりました。し たがって , 関数や配列に対して使用したと きに , 以前のように & を無視して直接ポイン タを得るようなことはしませんし , 得たポ インタは何へのポインタかを厳しくチェッ クします。 変数は ; 〃のように宣言することがて きましたが , ANSI の仕様に合わせて , "int a ; 〃のように必ず型かストレージクラスを 指定しなければなりません。過去のソース のことを考慮してか , 「エラー」にならずに 「警告」になります。 以上が ANSI C に準拠するための変更点て、 す。私が気づいた範囲て、の ANSI C との相違 占は , トリグラフシーケンスがインプリメ ントされていないことぐらいてす。 インラインアセンプラ C のソースプログラム上に直接アセンプラ コードが書けるようになりました。使用て、 きるコードは , MASM のサプセットになっ ています。 8086 および 8087 の命令を使うこ とがて、きます。コンパイルオプション / G2 を 指定したときには , 80286 および 80287 の命 令も使えます。 80386 , 80387 の命令は使え ません。そのほかの制限としては , データ ディレクテイプ (DB, DW, RECORD ・・ ) , マクロ , セグメントディレクティフ などが使えません。反対に , C のソースのシ ンポルや変数名 , 定数 , マクロなどが使え オプチマイズ グローバル最適化など , 全体的に最適化 の向上が図られているようてす。べンチマ ークテストをしたわけてはありませんが , 手元のいくっかのプログラムを使って MS- C Ver. 5.0 と比べてみると , ほとんど変わら ない場合もありますが , おおむね 5 パーセン ト ~ 15 パーセント速くなっているようて、す。 とくにラージモデルのほうがスモールモデ ルよりも効果が大きいようてす。 MS-C Ver. 5.1 て、はモジュール単位ての 最適化しかて、きなかったのて , 最適化に失 敗したときは , そのモジュールの最適化を あきらめるか , ソースプログラムをさらに 分割して再度最適化を試みるしかありませ んてした。 MS-C Ver. 6.0 ては , プラグマ を使って最適化をコントロールすることが て、きます。ポインタによる工イリアスて最 適化に危険な部分を制御てき , 高度な最適 化が可能てす。 関数呼び出しを速くするために , 通常の C の呼び出し規約とは異なる fastcall という 呼び出し規約が追加されました。 fastcall 規 速報 MS-C Ve 「 .6.0 緊急レポート 25

10. 月刊 C MAGAZINE 1990年6月号

高橋武夫 C . ・ 32 朝中里正雄 6 一佐藤功 92 岡本吉夫 37 大谷千代子 M し 123 15 山田義人 P20 ー 16 , 東京都千代田区 コマンド ~ 36 & 75 表示 ( 数値 ) 幅 寄せ 2 4 6 印刷 書式 実行 ロード セープ ファイル = ・らヨ電・ル別朝 - 第盟 冖レ受 : ー画面作成の基本画面 給 7 7 7 に ー 234567899 993969 3 9 3 5 6 5 9 3 9 9 9 3 6 x 55 部 55 9 5 5 9 9 9 6 5 2 に》 5 5 0- 勝 ーアプリケーションの開発を 強力にサポート 「で ~ ぐ 3 」は画面レイアウトの言十および作成を 行うためのツールです。イメージデータ作成のため のバターンエデイタと、文字やペクトルの線・円な どてイ第成する画面作成、そして入力する項目を定義 する画面定義の 3 つのツールが用意されています。 アプリケーションの M Ⅵに膨要な機能をすべてサ ポートしました。文字・数値・選択・ファイル名選 択などの単項目の入力に加え、表計算ソフトのよう に項目を並べた表形式での入力も可能です。もちろ ん上下左右にスクロールします。そして pf キー、アイ コン、コマンドなども強力な機能をサポートします。 ー画面作成 試行錯誤を繰り返し目的に沿った最適の画面を作 成できます。図形の挿入をはじめ線、円弧、ペ イントなど 1 頁の豊富なエレメントと文字て個面 を構成します。また強力な編集機能ですばやい変更 が可能です。 16 色とバレットをサポートしています ので豊富な表現力河能です。 ヾターンエテイタ イメージデータの作成と生成、そしてバターンの 登録などを主に行います。図 0X48 ドットの範囲内 て狂意の大きさのバターンを作成します。 1 倍、 2 倍、 4 倍、 8 倍の大きさに拡大した画面て乍成や編 集を行います。マルチフォント日 OM ポードとイメー ジスキャナからの取り込みをサポートしています。 ・体験版「で ~ ぐ 3 」を用意しました。 こ・希望の方は 1.5 円 ( 切手でも可 ) をお送りください。 ・無料バージョンアップ ( v3.1 ) を行っています。ご購入 の方は登録カードをこ・返送ください。 ー画面定義 画面作成て詐った画面を元にして文字や数値や表 形式の項目を定義します。また pf キーやアイコンの 定義では、キーを返すのか、ユーザのルーチンをコ ールするのかを指定できます。コマンドはロータス 123 の様なツリー状の機能をサポートしていますので どんなに複雑なコマンドも処王里できます。 ー C 言語のソース生成 画面定義が終わると自動的に C 言語を生成します。 各レベルでユーザルーチンをコールする機能がある ので、ト的な入力処理にすばやく対応できます。 プロの仕様に耐える機能とノウハウを盛り込みまし た。ライプラリの、レ 0 操作の関数や、項目の単独入 力なと・の関数を公開してますので、ユーザルーチン てイ吏用できます。 Iil]2FF 《 3 4 00 -0 【ー い引ロ FF 5 4 6 ぐ 3 価格 58 ′ 000 円 ( 格には消は含まれておりません ) 〔イ吏用環境〕 BEC pc -9 1 シリーズ ( pc -9 ー / 98XA / 98LT 、 98XL / 98RL の′、イレゾリューションモー ドは除く ) 8-2 シリーズ。パスマウスと MS - は必す膨要です。 16 色とパレットは使用できなし一 カヾあります。マルチフォントポードを使用するときは -8S3 3A が膨要です。 C 言語は NIS-C 、、 Qnck-C 、 Lattice-C をサポート。 株式会社アークビット 〒 272 千葉県市川市ニ俣ト 12-1 石元ビル 4F 電話 0473 ( 28 ) 1275 FA x 0473 ( 28 ) 3612 卩ヾターンエテイタの基本画面 PC -98 田用の C ライフラリ ・コンソール入出力・ ・テキストウインドウ・ 4 種 以上の関数が組み込まれた強 ・グラフィック制御・ ・・ 20 種 力なライプラリて、 MS-C 、 ・マウスコントロール・ ・・ 16 種 TURBO-C 、 Quick-C 、 Lattice-C ・プリンタコントロール・ 6 種 て動作します。「て ~ ぐ 3 」には ・日 S -232C 制御 9 種 含まれています。詳細はカタロ ・タイマー時間制御 8 種 グをご請求ください。 ・文字列擽作 9 種 ・ PC ー 0 ライプラリ・・・・ 9.800 円 ・メモリ管理機構 新発売