これらのライプラリは Turbo C 十十て、は関 数名・仕様が大幅に変更されてしいまい 基本的には削除されてしまったといっても 過言て、はありません。 個人的にはこのような処理系依存のライ プラリ使用は ( 基本的には ) 反対する立場を 取っています。 Turbo C にしか用意されて いないライプラリを使用したプログラムは , ほかの処理系て、はまったく動作しないから て、す。 ましてや後継処理系て、削除されるような ライプラリを使用するメリットはまったく ありません。 一部の処理系でしかサポートされてい ないライプラリはなるべく使用しない もちろんすべてのプログラムて、そうする べきだというわけて、はありませんが・・・ ということて、関数を三つ作成しましたのて、 ご利用ください (List 1 ) 。以下の処理系 ( 比 較的新しいバージョン ) て、動作を確認しまし unsigned inkey98(void); inkey98 関数の機能の概略を以下に示します。 Turbo C 十十 PowerC/QuickC/Turbo C/ LatticeC/LSI C-86/MS-C/ きは上位バイトにキーコード , 下位バイト アが空のときは 0 を返します。そうて、ないと 入力されたキーを返します。キーバッフ unsigned inkey98(void),• inkey98 トにキーデータを格納します。 ます。上位バイトにキーコード , 下位バイ アが空のときは , キーが押されるまて待ち 入力されたキーを返します。キーバッフ 138 C MAGAZINE 1991 6 キーバッフアをクリアします。 void clearkeybuf98(void) ; clearkeybuf98 にキーデータを格納します。 ■インラインアセンプラ MS ー C Ver. 6.0 , QuickC Ver. 2.0 , Turbo C / C 十十て、はインラインアセンプラ が使用て、きます。この機能を利用すれば C 言 語のプログラム中に直接アセンプリ言語て、 命令を記述て、きます。 前回 int86 関数を紹介しましたが , たかが ( ? ) ソフトウェア割り込みを行うのに , 構 造体をもち出したり , それらのポインタを やり取りするのは , とてもムダなことて、す ( どのくらいムダかというと , 純粋な C プロ グラマには負担にはならないものの , アセ ンプリプログラマにとっては耐え難いとい った程度て、す ) 。 実際 int86 関数を使用すると , アセンプラ て、数命令程度て、記述て、きるものが , 数百バ イト程度に膨らんだうえに ( 不要なレジスタ の設定やスタックへの退避などムダだらけ なのて、 ) , 相当スヒ。ードが落ちてしまいま す。 int86 関数を使用してソフトウェア割り込 みを行う時点て、 , 8086 以外の CPU や他機種 への可搬性はなくなってしまいます。だっ たらこの際インラインアセンプラを利用し て高速かっコンパクトなプログラムを作成 すべきて、す . , 効率を上げるにはインラインアセンプ ラを使おう ! しかしインラインアセンプラをサポート していない処理系て、も動作するようにプロ グラムを組む必要があります。インライン アセンプラを使用て、きる処理系かどうかを 自動判別して , いずれの場合て、あっても動 作するようなプログラムにしなければなり ません。 処理系の判別には処理系が独自に定義し ているマクロを利用します。 Turbo C/C 十十て、は TURBOC とい 推奨 うマクロが定義されています ( マニュアルに も記述されています ) 。 QuickC, MS-C Ver. 6.0 についてはマニ ュアルには記述されていないようて、す ( もし かしたら探し方が悪いだけかもしれません が ) 。 QuickC に関しては , QC とか QUICK な どいろいろと試行錯誤した結果 , QC ( 値は 1 て、す ) が定義されていることをつきとめま した。 MS-C Ver. 6.0 についてはヘッダフ ァイルを眺めているときに見つけました。 MSC VER に 600 という値が入っています ( それ以前のバージョンて、は定義されていま せん ) 。 QC が定義され すなわち TURBOC ているか , MSC VER が 600 以上て、あれば インラインアセンプラが使用て、きることに なります。 List 1 のプログラムて、は条件コンパイルを うまく利用して , インラインアセンプラ対 応処理系 / 非対応処理系のいずれにも対応し ています。 QuickC, MS-C はインラインアセンプラ の指定を asm て、行いますが , Turbo C/ C 十十は asm て、す。この違いは C の強力なマ クロを使えば簡単にクリアて、きますね。 ■インラインアセンプラ使用上の注意 = 和市 0 C での制限 Turbo C の環境版 ( tc. exe ) て、はインライン アセンプリを使用することはて、きません。 コマンドライン版 ( tcc. exe ) て、コンパイルして ください。ただし Turbo C 十十て、は環境版 て、も OK て、す。 B ℃ S コールとレジスタの保存 ソフトウェア割り込みのルーチンの中に はレジスタを破壊するものがあります ( キー ポード BIOS は出力用の AX や BX 以外のレジ スタは破壊しません ) 。たとえば SI レジスタ を破壊する BIOS を呼び出すときは , asm push Si
シャープ X クループ lnformation from Compiler Makers 前回に引き続き , CCompilerPRO ー 68K ( XC ) のバージョンアップによ る XC ver. 1.01 から ver. 2.0 への 変更点 ( おもに ANSI C 準拠にとも なう変更点など ) をご紹介します。 プログラミング時の参考にしてく ださい 局所的な配列 , 構造体 , 共用体の初期化 内部レベルの変数宣言に使用す る auto 記憶クラス指定子によって 宣言された配列 , 構造体 , 共用体 ( 内部レベルて、記憶クラス指定子を 省略した場合は , すべて auto 変数 として扱われます ) の初期化が XC ver. 2.0 においては可能になりまし 32K バイト以上の auto 変数の使用 XC ver. 1.01 て、は , 32K バイト 以上の auto 変数を使用するとコン パイラて、 $AUTO 変数が 32Kbytes を越えました〃というワーニングの 後 , アセンプラてヾ over flow error というエラーが発生します。しか し , Ver. ・ 2.0 て、は , 32K バイト以上 の auto 変数の使用が可能になりま ただし , 32K バイト以上の auto 変 数を使用する場合 , コンパイル時 に / Na スイッチをつけることが必要 てす。 このスイッチを省略したときに は , 、、 aut0 variable 32KbYtes over 〃のエラーが発生します。 なお , 32K バイト以上の auto 変数 を使用したプログラムを / Na スイツ チをつけてコンパイルした場合に 浮動小数点演算 ライプラリの搭載 あらたに浮動小数点演算ライプ ラリが追加されました 0FLOATF NC. L と FLOATEML. L の 2 種類て、 す。 FLOATFNC. L を使用した場合 は , デバイスドライバとして登録 している FLOAT * . X(FLOAT2. X など ) を使用することにより , プ ログラムのサイズを小さくするこ とがて、きます。ただし , FLOATF NC. L を使用して作成された実行フ アイルは , FLOAT* . X が組み込 まれていなければ実行て、きません。 FLOATEML. L を使用すると , FLOAT * . X が組み込まれていな くても実行可能なファイルが作成 されます。 FLOATEML. L 自身が 浮動小数点演算ルーチンをもって おり , それを利用して演算を行う ためて、すが , プログラムのサイズ は大きくなります。 コンパイルするとき , デフォル トて、は FLOATFNC. L が使用され ます。浮動小数点演算ライプラリ として FLOATEML. L を使用する ように変更する場合は , / Nf スイツ チをつけてコンパイルします。 プリプロセッサ命令 # 演算子と # # 演算子のプリプロセ ッサ命令を新たに導入しました。 プリプロセッサの引数に , # , # # の オペレータを使用することにより トークンの加工を行うことがて、き ます。 、、 # トークン〃て、トークンの文字列 化を行い , 、、トークン # # トークン〃 て、トークンを連結します。たとえ ば , #define sample(str) #str 、、コ ンパイラ〃と定義されたマクロは次 のように展開されます。 sample(XC) →、、 XC 〃ヾコンパ イラク→、、 XC コンパイラク , また #define sample2(), b) a##b と定 義されたマクロは sample2(ABC, DEF) → ABCDEF と展開されます。 ■ scanf 関数の注意点 scanf 関数の format string 変換 書式中に使用した空白文字は読み とばされ , 次の入力処理を行いま 3 : main() 2 : 1 : #include く stdio. h> List 1 C CompiIer PPO-68K ver. 2. O が行えます。 3 のように一度に複数のデータ入力 正することが必要て、す。また , List 理を行いません。 List 2 のように修 るため , 期待したとおりの入力処 は空白文字が変換書式の最後にあ す 0List 1 のサンプルプログラムて、 タブ ) , 、、 \ f 〃 ( 改真 ) , 、、 \ r ク ( 復帰 ) て、 空自文字とは , 空白文字をつけてはいけません。 入力の場合は , 変換書式の最後に す。そのため続けて 1 データだけの 7 : 8 : 9 : 10 : char c; i nt i : scanf("%cYn ” ,&c) : printf("%cYn" scanf("%dYn",&i) : printf("XdYn", i) : List 2 1 : #include く stdio. h> 2 : 3 : ma i n ( ) 5 : 6 : 7 : 8 : 9 : 10 : Char c; i nt i : printf("XdYn". i); printf("%cYn",c); List 3 1 : #include く stdio. h> 2 : 3 : ma i n ( ) 5 : 7 : 8 : char c; int i; scanf("%cyn%d",&c,&i); printf("%cYnXdYn",c,i); も , す。 154 ワーニングメッセージは出ま 1 1 6 C M AGAZIN E
作 ? ウェア最新レポ ソフト 野口雄平 Fig. 3 ノヾッチ式メニュー「 BM 」 チプログラムがそのまま利用て、きるのて、組 み込みが簡単て、す。また , BM はメニュ 行時にメモリを一切消費しないメニュ ログラムて、す。その仕組みについては後述 するといたしまして , まず , メニュープロ グラムというものを過去一度も使った , がない ( 使おうと思ったこともない ) 筆者が , なぜ BM を使っているのて、しようか ? 一般に , メニューの効能について言及す る場合 , たとえば操作が簡単になるとか , 環境の統一とかがいわれます。しかし , 自 分ひとりて、毎日同じ端末を使っている場合 には , 操作はコマンド式て、かまいませんし , 環境だって慣れてしまえばそれがいちばん 快適なものになってしまうものてす。それ に第一 , 多種多様なツールをとっかえひっ コンのコマンドまて、教えていられません ( も かえ起動して使っているようなユーザには , 起動するアプリケーションを選択て、きます。 っとも使い方はいずれ教えなければならな メニューの作成など労多くしてなんとやら Fig. 2 は MENU. BAT の一部分て、す OBM て、す ( なんて、したつけ ? ) 。 いが・・・・・ ) 。そこて、というか , 筆者の職場て、 がなぜメモリを消費しないメニューなのか はコマンド ( バッチコマンド ) さえ統一がと ところが , やはり多人数て、 1 台または 2 台 がわかると思います。 以上のパソコンを使用している場合には , れていなかったのて、 , この際メニュープロ つまり , BM の本体 BM. EXE はメニュ 見せて , アプリケーション起動が選択され 環境を統一しておくことが必要になります。 グラムを導入してみようということになっ ると , それに応じて終了コードを返してプ とくにこの時期には , 新人が入ってきて , たのて、す。 BM のインストールは , まず圧縮ファイル ログラムを終了させているだけなのて、す。 ただて、さえ教えなければいけないことがた を解凍して BM. EXE を取り出します。次に 後のアプリケーション起動の部分はすべて くさんある ( 新人にしてみれば記憶しなけれ A ドライプに A : YSTART というディレク バッチプログラムに任せ , また GOTO ばいけないこと ) のに , 日常業務て、使うパソ トリを作成して , こに BM. EXE をコヒ。ー START て、 BM が再起動される , というルー します。そこて、一度 BM を起動すると , プを繰り返しています。まさにシンプルイ MENU. BAT というファイルが作成される ズビューティフルとてもいいましようか , のて、 , この中に起動用のバッチプログラム 単純だからこそアプリケーションの登録も を書き込みます。書き込むバッチは , それ 簡単なのて、す。 BM にはメ = ーのほかに亘 : ディス まて、使用していた , 個々のアプリケーショ クの情報 , 亘 : カレンダの表示 , : 時 ンの立ち上げ用パッチをそのままコヒ。ーす 刻セット , 亘 : ルプと , 3 分間無入力の ることて、 OK て、す。ただし , MENU. BAT の 中て、 1 ~ 65 と START , EXIT というラベル 場合のスクリーンセーバの機能があります。 を使用しているのて、 , これらは避ける必要 なんだこのくらいなら自分にだって作れ があります。 るぞと思った方 , そうてす / 作ってみて BM を起動するとオーバラップしたウイン ください。そして , BBS にアップロードし ドウが 4 枚開き , それぞれに 15 個ずつアプリ てみましよう。 ケーションが登録てきます。臼曰キーて 今回紹介したフリーソフトウェアは本誌 ウインドウのオーバラップが変わり , 国国 7 月号付録ディスクに収録の予定てす。ご キーて各ウインドウ内をカーソルが上下し , 期侍ください 199 一年 4 1 ョロや 4 ′ 1 41 当 ーっ」う 0 物 4 ロ 0 マー CÖ - い - ・ーう」へ 0 ・ 4 ロ ら 0 う 0 - 「 0 ら 0 0 ) 01 : 「こっノ 00 4 4 →は 4 」」 47 Q)0 8 0 0 0 一・ C•d ( 0 4 ロ 0 【「 - ど 1 ・つ」 0 ) 4 にー - -•NLÜ e S 1 MS-C V r 5. 1 レⅳ 0 : 午 D Fig. 2 MENIJ. BAT の一部 ECHO OFF C LS :START CD *START BM /LOG 下 ERRORLEVEL 5 GOTO 5 : 5 REM, 一太郎 Ver4 ECHO OFF CD YJUSTYJSW J XW GOTO START フリーソフトウェア最新レポート 31
アプリケーション アプリケーション AP 生まれの AP 育ち C 言言吾用プログラミンク、支援ツーノレ 「簡単シリース」十「作ろうシリース」※開発ェ数削減と標準化のために キー入力関数・テキスト画面制御関数・カ ーソル制御関数を提供します。キー入力関数 は、指定された位置て指定された桁の入力を 受けつけ、入力テータを指定されたエリアに 格納します。入力テータタイプもチェックし、 漢字入力したいところてはフロントエンドプ ロセッサを立ち上けます。カーソルは、現在 入力中の位置に表示します。テータ表示色・ アトリビュートも、 PF キーガイドラインの 表示 / 非表示も設定自由、 PF キーカイドラ インには任意の文字列を任意の色で表示でき ます。ロールアップ / タウン・ BS ・ HELP ・ HOME e 十 c の特殊キーも全て取得 OK 。リ アルタイム・クロック表示関数や、ダイレク ト・キースキャン関数、 V - 日 AM のリード ライト関数等も用意しています。 「キー入力が簡単」「印字が簡単」「ウインドウが簡単」「クラフが簡単」 V . 2.0 - ー Y28 , 000 V R. 2.0 ーー \ 18 , 000 VER. 1.0 ーー \ 28 , 000 V R. 1.0 ーー \ 14 , 000 「マウスが簡単」ワトドコ←が簡単」「ヘルプが簡単」「エテイタ入力が簡単」 V R. 1.0 ー - \ 18 , 000 V R. 1.0 ーー \ 22 , 000 V R. 1.0 ーー \ 28 , 000 V R. 1.0 ー \ 22 , 000 VER. 1.0 ー Y6 , 400 テータ出力関数・ヒットイメージ出力関数・ プリンタステータスチェック関数を提供しま す。文字列テータはもちろん、罫線テータも 同時に出力できます。文字列も罫線も、画面 のように桁・行で印字位置を決めるので桁合 わせは不要。文字列は、拡大・下線・網掛け 等の特殊効果を同時に指定可。罫線は実線 破線それぞれに太 / 細の計 4 種類をサポート、 ピットイメージを出力して引く罫線よりも高 速に印字します ( 社内テスト結果 : ピットイメ ージ出力て 10 分かかった表が、 6 分て出力完 了に′ ) 。また、文字と罫線を同し桁・同し行 に出力できるので、ムダのない帳票を設計で きます。もう、制御コード出力処理だらけの 読みにくいプログラムとはオサラバてす。 各種のウインドウ制御関数と、 N88BASIC を基本にしたグラフィック関数を提供します。 最大 20 個のオーバーラップ・ウインドウをオ ープンできます。テキストモードとグラフィ ックモード双方向をサポート、ウインドウ内 てのキー入力関数・テキスト画面制御関数・ カーソル制御関数もそろっています。文字列 表示関数は、ウインドウ・サイズに合わせた 自動改行機能を持っているのて、プログラミ ングの手間もぐっと省けます。通常のウイン ドウに加えてメニュー選択処理のためのメニ ューウインドウや、 Y / N のキー入力を受けて 返せるメッセージウインドウもサポート。ユ ーザー・インターフェイスの優等生・ウイン ドウ処理を、メモリ操作なしのお手軽プログ ラミングで実現できます。 グラフ描画関数と、 N88BA 日 C を基本に したグラフィック関数を提供します。描画で きるグラフは、棒グラフ ( 縦・横 ) 、折れ線グラ フ ( 縦・横 ) 、円グラフの計 5 種、棒グラフと 折れ線クラフは重ね合わせも可能。色やライ ンバターンの設定は自由てす。描画のための テータテープルをセットして関数をコールす れば、グラフ本体はもちろん、タイトル・グ リッド・単位・凡例まで、全て関数内で計算・ 描画するので、メインプログラム側での計算 処理は何一つ必要ありません。「簡単シリーズ」 は全て併用可能てすから、「ウインドウが簡単」 と「グラフか簡単」を併用すると、グラフが出 るウインドウを画面上にオープンする、なん てことも、あっとオドロク簡単さでできてし まいます。 データテ - プしをセットい、 関数をコールするたけ : マウスドライノヾとのインタフェース関数を 提供します。「キー入力が簡単 V2.0 」と「ウイ ンドウが簡単 VI . 0 」と併用すると、プルダウ ンメニュー関数や、ダイアロク関数 ( 文字列、 メニュー、リスト・ホタン、シートなどの豊 富なアイテム ) 、マウス情報取得関数が使用で きます。 マウスのアクションに対して各関数が返す値 として、任意の値をあらかじめ設定すること もできます。このことを上手く利用すれは、 マウスとキーボードを併用するアプリケーシ ョンを作る際、マウス用のロジックとキーホ ード用のロジックが一本化てきるので、プロ グラムが長くならずに済みます。高い機能を 短いステップで、簡単シリーズの身上です。 グラフィック画面をモノクロ 8 階調または、 カラープリンターに八一ドコピーします。領 域指定や色指定なと豊富なオプションも用意。 その他、アプリケーション実行中に現在の画 面を Disk にセープする常駐プログラムと、 セープしたテータを圧縮するプログラム、更 にそれらのテータを再表示したり、印字した りするプログラムも装備しています。 苦労して作った美しい画面の利用範囲が広が ります。 今まで苦労していた、テキスト・グラフィッ ク画面の八一ドコピーを手軽にでき、マニュ アル作成時の画面レイアウトとして幅広く利 用てきます。 アプリケーションの使用方法を導く高機能 なボップアップ ( アドバイザ ) 関数を提供しま す。 100 タイトル ( 300 頁 ) のヘルプメッセージ をサホート。タイトルメニューと関連タイト ルのリンク機能を持ち、階層的ヘルプを実現 できます。工ラー・警告・ガイド・質問を出力す るメッセージ機能もあり、ヘルプ機能と連動す るとユーザーフレンドリーなアプリケーション を簡単に開発できます。 DOS 配下てヘルプメ ッセージを参照するユーティリテイや、専用工テ イタも付属。マニュアルレスな弋のアプリケー ション開発にお役に立ちます。 ( この商品をお使 い頂くときには、別売「ウインドウか簡単 V. 1 . 0 」 が必要てす。別売「マウスか簡単Ⅵ .0 」をお使い の方には、マウス対応版のヘルプ関数も用意し 長めの文章をキーホードから入力する機能を 簡単に実現できるテキストエテイタ関数を提供 します。アプリケーションてコメントを入力し たり、通信ソフトで手紙を入力したりするため のエテイタ入力機能を関数ひとつで実現てきま す。最 50 字 X6500 行のテキストエテイタが、 同時に 20 個作成できます ( 但し、メモリに依存し ます ) 。日本語対スクロール、行単位のカッ ト & ペーストをサポート。そ也、本格的な工 テイタの開発を支援する関数群を豊蜜に揃えて います。「キー入力が簡単」にエデイタ入力機能 を拡張した関数も用意しました。「キー入力か 簡単」の手軽さてエテイタ入力機能を実現でき ます。 ( この商品をお使い頂くときには、別売「キ ー入力が簡単 V. 2.0 」が必要です。 1 99 レ 4 / 1 発 売開始。 ) 「簡単ツールエテイタ」 VER ・ 1 ・ 0 ー Y22 , 000 「簡単シリーズ」のテータテーフルを編集するための、専用工テイタです。 画面上で、マウス ( なくてもかまいません ) やキーホードを使って、実行画面や帳 票のイメージをワープロ感覚で入力すると、そのまま使えるソースコードが出力 されます。これ 1 本て「キー入力 ( V2.0 ) 」「印字 ( V2.0 ) 」「ウインドウ ( VI . の」「グ ラフ ( VI .0 ) 」をサポートしています。テータ編集中に、擬似テータを使って表示 したりできるので、テストランの必要もなく、簡単シリーズを更に簡単にお使い いただけます。 「イ乍ろう」・。住所録を作ろう。 ・「スケジュール表を作ろう」 シリーズ・「こづかい帳を作ろう」・ ( c 言語の教育用 ) ・「らくがき帳を作ろう」・ ています。 1991 / 4 / 1 発売開始。 ) 「ファイル・エティ例 VER. 1.0 ー Y18 , 000 ソフトウェア・システムを開 発する際のテータ・ファイル設 計を支援するエテイタ。テータ ファイルのコードサイズ、各テ ータ項目のタイプ・長さ・名称 等を入力すると、定義テーフル がソースコードとして出力され、 さらにファイル・レイアウトの 印字も可能。 ロステム構 ( 共通 ) ・本体 . PC ー 98 田 (XA/XL/XL?/RL ハイレ LT を除く ) ・ OS : MS-DOS V3.1 / 3.3 ( F ・ PMS - DOS に添付のもの ) ・プリンタ : NEC PC ー P 日 101 系、 PC - P 日 2 引系 ・コンバイラ : Mic 「 osoft-C/Lattice-C/Tu 「 00ーC/ Quick-C ( 簡単シリーズは、御使用のコンバイラを指定して下さい。 ) ・メティア : ?HD / 3.5 ″ ?HD ( 御希望のメディアを指定して下さい。 ) ※全商品プロテワトなし、サンプル付きです。 ※サンプルソフトを実費 ( ¥ 1.50 ので販売中 / ※全商品ロイヤリティフリー ・・・ VER. 1.0 ー Y7 , 200 ・・ VER. 1.0 ー Y8 , 600 ・・・ VER. 1.0 ー Y9 , 800 ※記載されている内容は、将来予告なしに変更することかあります ※ MS-DOS 、 Microsoft-C 、 Quick-C は、米国 Microsoft 社の 登録商標です ※ Lattice-C は、米国 Lattice 社の登録商標です ※ Tu 「 bo ー C は、米国 Borland ternation 社の登録商標です ※お問合せはお近くのマイコン・ショップか、私どもへどうぞ 〒 790 愛媛県松山市北藤原町 1 ー 26 TE L : ( 0899 ) 31 ー 2886 FAX : ( 0899 ) 41 ー 0336 ・株式 会社 1 ←ジステ必工ユニ鱸ユ く資料請求番号 166 >
lnformation from Compiler Makers ムが対応て、きないためて、はないて、 W4 に設定し , 工ラーが出ない ように書き直すのもひとつの しようか。 仕様変更についてくわしくは , 方法て、す。 Reference 3 章ランタイムライプラ 2 最適化の抑制 リリファレンス , malloc( ) につい MS-CVer. 6.0 には , さまざ ての記述をお読みください まな最適化スイッチやプラグ マが用意されています。最適 Q List 2 の構造体をコンパイル 化を行ううえて、 , その機能を して , sizeof 演算子を使って調べた outtext 関数で , 文字を表示 理解せずに最高の / Ox のスイ ところサイズがレヾイト多いような した後に printf で表示すると表示位 ッチをつけている方もいます。 のですが。 置がすれてしまいます。なぜです また , デフォルトの状態て、も a は 2 バイト , b は 1 バイト , C は 4 最適化がかかりますのて、 , 複 か ? / ヾイトなので合計 7 / ヾイトになるは 雑なコードを解析する場合 , A outtext 関数は , 自分自身の 最適化を禁止する / Od を使用 プログラム中に , 現在のカーソル することをおすすめします。 ポジションを保持しています。文 3 作業メモリの確保 複雑なコードを解析する場合 , 字の出力を行うと , MS-DOS シス それだけメモリに負荷がかか テムのもっカーソル位置と , outtext 関数のもつポジション情報 ります。メモリをなるべく解 の両方を書き換えます。 放し , 残りメモリが十分にあ そのため , outtext 関数以外の関 る状態て、コンパイルするよう 数 (printf など ) て、 , カーソル位置が にしてください 変化した場合に outtext 関数は , 自分自身のもっカーソルポジショ ン情報をもとに表示するのて、 , MS Q まったく同じ環境で , ma 恥 c ( ) ー DOS のカーソル位置とずれてしま 系関数を使ったルーチンが , Quick います。 C Ver. 2.0 では動作するのですが , 回避方法としては , outtext 関 MS-C Ver. 6.0 ではうまく動作し 数を使用する場合は , システムの カレントボジションを変更するよ なくなりました。理由を教えてく うな関数との併用をさけることが 必要て、す。 すが , sizeof 関数の結果は 8 になっ List 1 のようなプログラムの場 てしまいます。 合 , flag 変数の宣言には , 必ず vola A tile キーワードを使用してくださ MS ー C は , データを高速にアク セスさせるために , 個々のデータ を必ず word 境界に配置します。そ のため奇数バイトのデータの後に 未使用の 1 バイト領域を取ってしま List 2 のように , 奇数バイトのデ ータを連続して配置させたいとき には , コンパイルの際に / Zp オプシ ョンをつけてください A Q ー List 1 flag func (void) while(!flag) int 0 11 っ 0 っ 0 -4 -. 0 7 ・ List 2 1 : #include 2 : 3 : struct test { 4 : int a; 5 : char b; 6 : I ong c : 7 : } abc : main(void) 9 : ViOd printf ("%d" 12 : } く stdio. h> A MS ー C Ver. 5.1 , QuickC Ver. 2.0 て、は , fmalloc 関数は必 要なメモリをヒープ領域に確保て、 List 1 のようなプログラムをコ きなければ , デフォルトデータセ ン / ヾイルしたところ , 永久ループ グメント内に割り当てようとしま となるようなコードが生成されて したが , ー MS-CVer. 6.0 て、はこの しまいます。変数ル g の値は , 外部 ようなとき , NULL を返すように 割り込みにより変化するので , 不 なりました。 都合です。 原因はこの仕様変更にプログラ sizeof(abc) ) ; Q lnformation from Compiler Makers 149
マイクノフト lnformation from C0mpiler Makers Q Programmeds WorkBench( 以 下 PWB ) 上からコン / ヾイルするとコ ンパイルが正常終了するのに , 同 じプログラムを DOS 上から直接 NMAKE ユーティリティを起動して コンパイルを行うと , メモリ不足 のエラーでコンパイルできません でした。 DOS 上からのほうが , PWB の専有するメモリがないぶんだけ , メモリに付加がかからないはすで すが , コンパイルできないのはな せですか。 A NMAKE はたいへん大容量の メモリを必要とするプログラムて、 す。 OS / 2 環境上ならともかく ,DOS E て、の使用は事実上無理といわざ るを得ません。 NMAKE が PWB 上て、の Build の とき , メモリをあまり使わないて、 すむのは , コンパイル , リンクの 手順ファイルを作成し , NMAKE 本体をメモリから解放した状態に し , 実際のコンパイル , リンクは 作成した手順ファイルを利用する からて、す。 DOS のコマンドラインから , N MAKE を使いたいときには , 以 ドのような手段を取るといいて、し 1 NMAKE の代わりに , NMK. COM を使用する NMK ℃ OM は NMAKE より , メモリを節約するユーティリ ティて、す。メモリ使用量が少 ないため , DOS プロンプト上 て、のメイクが可能て、す。しか し , NMK.COM は NMAKE と 完全に互換性があるわけて、は ありません。相違点もありま 148 C MAGAZINE 1 1 6 すのて、 , MAKE ファイルによ っては , NMK.COM を利用て、 きない場合があります。 2 NMAKE のオプション / N を使 用する NMAKE のオプション / N は , NMAKE が実行するコマンド を画面に表示します。この内 容をリダイレクトしてバッチ ファイルを作成し , そのバッ チファイルを実行するとメモ リに付加はかからず , しかも NMAKE を実行したのと同じ 結果が得られます。 もちろん将来のバージョンに おいては , DOS 上て、も制限を もたずに実行可能な NMAKE ユーティリティを供給する予 定て、す。 PWB 上からコンノヾイルを行う 際に , オプジェクトファイルや実 定する手順は以下のとおりて、す。 ディレクトリに生成するように指 クトリに作ります。これを任意の ルはソースファイルのあるディレ プジェクトファイルや実行ファイ A とくに指定がない場合は , オ すが , その方法を教えてください。 のディレクトリに生成したいので 行ファイルをソースファイルと別 2 ダイアログボックス中の Buid す。 Options... コマンドを選択しま ーを選択し , 続いて Build 1 PWB 起動後に Options メニュ Directory 項目をチェックし , Build 先のパスを指定します。 ただし , プログラムリストが 未設定だと Buid Directory 項 目はチェックて、きません。 PWB から Bu ⅱ d を行うとき , デ バッグ状況によって Bu ⅱ d Option や Compiler Option を選ぶのがめんど うです。これらのオプションを登 録しておき , 使うときに選ぶよう にはできないでしようか。 A Build のオプションを設定し , 選択を行う機能はあります。手順 は以下のとおりて、す。 Q わっています。 した設定グループの名則が加 クスの中を参照すると , 登録 Options... > のダイアログボッ I n i t i a 1 B u i 1 d < S e t プ名を入力し , セープします。 3 Description の中に設定グルー の順て、選択していきます。 く Save Current Build Options... 〉 ↓ [Build Options] ↓ [Options] 2 メインメニューから , Option を選択します。 1 BuiId Option や Compiler 4 Q MS-C Ver. 5.1 でコン / ヾイル , ン設定の必要がなくなります。 プを選べば , めんどうなオプショ 以後は , 状況にあわせてグルー MS-C Ver. 5.1 MS-C Ver. 6.0 QuickC Ver. 2. O A グチェックレベルを最高の / ン す。コンパイル時のワー 化などて、ソースを単純化しま 複雑な代入文 , 判断文の簡略 たり , ファイルの分割を行う , 個々の関数サイズを小さくし 1 ソースコードの単純化 があげられます。 解決策として以下のような方法 には出力されるようになりました。 ても上記のような原因がある場合 以下のバージョンて、出力されなく ックが強化されており , Ver. 5.1 い複雑な処理に関するエラーチェ 6.0 へのバージョンアップにともな やすくなります。 Ver. 5.1 から Ver. 要としますのて、 , ェラーが発生し に , 解析のためのメモリをより必 なっていたり , 最適化をした場合 また , 関数自体が大きなものに 合などて、す。 曖昧な文法て、処理を行っている場 に深かったり , ANSI 準拠て、ない たり , プログラムのネストが極端 複雑なポインタ演算を繰り返し 理部分て、発生します。 ード中の複雑なコード , 複雑な処 このエラーはおもに , ソースコ 内部ェラーて、す。 った場合に発生するコンパイラの ソースコードの解析が不可能にな コンパイラが , 何らかの要因て、 , lnternal CompiIer error は , ください。 工ラーの原因と解決策を教えて 終了できません。 error が頻発し , コンバイルが正常 ろ , C1001 lnternal Compiler CVer. 6.0 で再コンパイルしたとこ 正常終了しているソースを , MS-
はじめが、 カンジン。 B 0 風 R 0 丁てノ第 ~ BC> >ßXSC. . し・ - 0 あ巴 6h 一 ( h 一回一 E 談 ) 0 0 蜘 ~ 一蜘一 0 ~ 3 蓄團 プログラミング学習の第 1 歩は、何よりもます良質の言語ソフトに出会うこと ボーランド TIJ 日 BO シリーズ・スチューテントバック / ラボバックです。 はじめにどんな言語ソフトに出会うか これから プログラムを学習していく時、これはとても重要なこと 製品名 て、す。優秀な言語ソフトは、優秀なフログラマを育成 TURBO C 十十 1 .0 する豊かな上壤なのて、す。ボーランドの「 TURBO TURBO PASCAL 6.0 ラボ、パック / スチューデントパック」は、高度な機能 TURBO PASCAL 6.0 Professional 群と使いやすさて、定評のある TURBO 言語シリーズ TURBO DEBUGGER & TOOLS 2.0 を、学校・研究室等の教育現場向けにお求め安い NEC PC -9801 シリーズ 価格て、提供します。 TURBO PASCAL 6.0 を例に 富士通 FM-R シリーズ とると、「ラボ、パッ乞は 10 ライセンスをセットしたパッケージ 各種 AX マシン 富士通 FM-R シリ TURBO PASCAL 5.0 ース を、定価 9 万円 ( 税別 ) て、版売。このため、複数の学 〔お申し込み書必要記載事項〕 生・研究者・教師が 1 ライセンス当り 9 , 000 円という教 ※ラボ、パックのご注文には、専用申し込み書 : を用意 ・氏名・住所・電話番号・注文製品名・媒体 科並の値段て : 正規ライセンスて、の利用が可能 しておりますのて、、 MSA まて、ご請求ください ・お支払い方法 ( 現金書留または銀行振込 ) になります。同様に「スチューデントパッ名は、学生個人 ※スチューデントパックは、学生個人の使用に限定 振込冂座 : 東海銀行九段支店普通 333711 の使用に限り、通常の TURBO PASCAL 6.0 を 12 , されたライセンスて、す ( 本人て、あれば商用 AP 開発 冂座名義 : 株マイクロソフトウェアアソシェイツ 000 円 ( 税別 ) て、販売します。申込者本人以外は使用 ※お申し込みは、下記代理店へ直接お申し込みください。 に使用されても構いません ) 。ご注文時には、学生証 て、きないというライセンス↓ : の制約を除き、通常の製品と 〒 107 東京都港区南青山 7 ー 8 ー 1 小田急南青山ビル もしくは在学証明書のコヒーを添えて MSA まて、直接 全く同仕様てす。プロクラム学習の第 1 歩は、優秀な言 お申し込みください。学生証に記載の申し込み者名 語ソフト選びから。はじめに、ボ、一ランドの「 TURBO 株マイクロソフトウェアアソシェイツ 営業部 TEL. 03 ー 3486 ー 1411 て三一ザ登録を行った後、製品を発送いたします。 ラボ、パック / スチューデントパック」をお選びください 0 価格 ( 税別 ) ラボバック スチューテントパック ( 内容 / マニュアル : 1 式、ライセンス : 10 式 ) 16 , 000 円 90 , 000 円 12 , 000 円 24 , 000 円 適応機種 NEC PC -9801 シリーズ 12 , 000 円 TURBO C 2.0 80 , 000 円 1 劇 T し TURBO C TURBOC++ T リ R 日 0 LANGUAGE SERIES STUDENT PACK し A 日 PACK 株式会社ボーランドジャパン 〒 107 東京都港区南青山 7-8-1 小田急南青山ビル TEL. 03- 86-148 代 1 ) 0 三い 定価 980 円 ( 本体 951 円 ) 几制い ※ AII Borland P 「 oducts are trademarks 0 「 registered trademarks Of Borland lnternational. lnc ◎ Borland lnternational,lnc ※その他、商品名は一般に各社の商標です ・製品に関するお問い合せは、総販売元株マイクロソフトウェアアソシェイツ TEL ℃ 3-3486-1411 までお願いします く資料請求番号 F04 〉 c ソフトパンク凸版印刷 Printed in Japan T 4 9 1 1 4 ろ 2 5 0 6 9 8 4 雑誌 1 4325 ー 6
テックソフト & サービス ・ lnformation from Compiler Makers 今回は , High-C 386 て、の割り込 みハンドラの登録について紹介し ます。割り込みにはキーポードな どによるハードウェア割り込みと , プログラム中て、行う int 命令による ソフトウェア割り込みの 2 種類があ ります。 MS-C などは int86 などの関数を 使って割り込みハンドラの登録が 行えましたが , High ー C て、はリアル モードだけて、なくプロテクトモー ドて、も実行されるのて、 , それぞれ の動作モード用に割り込みハンド ラを用意しなければなりません。 残念ながら , High-C Ver. 1.6 の マニュアルには DOS ー EXTEN DER E て、の割り込みハンドラの登 録に関する説明がなく , また DOS -EXTENDER のマニュアルには , アセンプラて、の使用を前提とした 記述しか見られません。そこて、 , DOS-EXTENDER て、用意されて いる処理を High-C Ver. 1.6 てど のように利用て、きるかを示しなが ら割り込みハンドラの登録につい て説明します。 割り込みハンドラとは 割り込みハンドラとは , キ ーやキーが押されたときに動 き出すルーチンのことて、す。よく 使われる割り込みハンドラは , 何 もせずに iret ( リアルモード ) または iretd ( プロテクトモード ) を行うも のがあります。たとえば , 実行を 中断されたくないプログラムには , 処理中の皿十回の割り込み ( MS ー DOS て、は皿 + 回を受け 付けると , 実行中のプログラムを 終「する処理が登録されています ) を無効にするため , 先に述べた何 もしないルーチンを皿十回の 割り込みハンドラとして登録しま す。 プロテクト / リアルモードでの 割り込み処理 通常 MS-DOS だけて、は ,CPU が 80386 て、も 8086 としてのリアルモー ドて、の割り込み処理しか行えませ んが , DOS-EXTENDER を使うこ とにより 80386 本来のプロテクトモ ードて、の割り込み処理も可能とな ります。て、は , プロテクト / リアル モードて、の割り込み処理にはどの ような違いがあるのて、しようか ? リアルモードの割り込み処理は , 割り込みべクタテープル (MS-DOS て、は 00000h ~ 003FFh におかれ , 割 り込みハンドラのアドレスがセグ メントとオフセットて、書かれる ) を 通してリアルモードて、実行されま す。したがって , リアルモード用 の割り込みハンドラ自身は IM バイ ト以ドのアドレス内に存在する必 要があり , かっハンドラ内の処理 は IM バイト以 E のアドレスにはア クセスて、きません。プロテクトモ ード用のプログラムの中て、リアル モード用の割り込みハンドラを作 成するのは骨の折れる作業て、す。 DOS-EXTENDER て、は , つねにプ ロテクトモードて、動作する割り込 みハンドラの登録がて、きます。 DOS-EXTENDER て、はプロテ クトモードて、実行中に int 21h など のソフトウェア割り込みが実行さ れると , 必要な処理 ( 引数を 32 ビッ トから 16 ビットに変換するなど ) を 行った後 , リアルモードに切り換 え , もう一度 int 21h を実行してお り , プロテクトモードて、も標準的 な MS-DOS のファンクションコー ルは実行て、きます。 次に , プロテクトモードて、の割 り込み処理は , 割り込みディスク リプタテープル ( IDT ) を通して実行 されます。 IDT には割り込みハンド ラを示すセレクタとオフセットが 書き込まれており , そのセレクタ を使ってグローノヾルディスクリプ タテープル ( GDT ) , またはローカル ディスクリプタテープル ( LDT ) から べースアドレスを得てオフセット とともに割り込みハンドラが実行 されます。 DOS-EXTENDER のプロテク トモード実行中て、も , MS-DOS の ファンクションコールの実行時に は , いったんリアルモードに切り 換わってファンクションコールを 実行し , 終「するとまたプロテク トモードに戻ります。この状態て、 ードウェア割り込みが発生する と , プロテクトモードて、の割り込 み , リアルモードて、の割り込み , 両者になる場合があります。つま り , ハードウェア割り込みについ ては , 必ずプロテクト / リアル両モ ードに対して割り込みハンドラを 設定する必要があります。たとえ ば , samplel. c ( 付録ディスク収録 ) て、はプロテクトモードて、の割り込 みハンドラの登録しか行っていな いために , 正しくキーの割り 込み処理がて、きていませんが , sample2. c ( 付録ディスク収録 ) て、 は , つねにプロテクトモードて、動 作する割り込みハンドラを登録し て , プロテクト / リアル両モードに 対する割り込みハンドラを設定し ており , 正しくキーの割り込 み処理がてきています。 High-C 386 Ver. 1.6 lnformation from Compiler Makers 155 ます。 らのファンクションを使用してい samplel. c, sample2. c< は , これ を参照してください。なお , DOS-EXTENDER のマニュアル 各ファンクションについては の割り込みべクタの設定 ( 2507 ・プロテクト / リアル両モードて 定 ( 2506h ) 動作する割り込みべクタの設 ・つねにプロテクトモード下て タの設定 ( 2505h ) ・リアルモードの割り込みべク べクタの設定 ( 2504h ) ・プロテクトモードの割り込み タの取得 ( 2503h ) ・リアルモードの割り込みべク べクタの取得 ( 2502h ) ・プロテクトモードの割り込み は次の 6 つがあります。 DER の用意したファンクションに ンドラに関連する DOS-EXTEN 使う必要があります。割り込みハ EXTENDER のファンクションを ンドラの取得や設定には DOS ー プロテクトモードて、の割り込みハ リアルモードて、しか動作しません。 ( 割り込みハンドラの設定 ) を使い ラの取得 ) とファンクション 25H アンクション 35H ( 割り込みハンド います。この関数は MS ー DOS のフ dos setvect のふたつが用意されて を行う関数として dos getvect と ハンドラのアドレスの取得と設定 High-C Ver. 1.6 には割り込み の設定 での割り込みハンドラ High-C Ver. 1.6
際には REGS は Fig. 9 のようなふたつの構造 体からなる共用体て、 , 各メンバは 8086 のレ ジスタに対応しています。共用体になって いるのは , 8086 の 16 ビット汎用レジスタ AX ~ DX が , 16 ビットのレジスタとしても , 8 ビットのレジスタふたっとしても使えるた めて、す。たとえば , AX レジスタの上位バイ トは AH, 下位バイトは AL という 8 ビットレ ジスタとして使うことがて、きます。 intd 。 s 側て、は第 1 引数て、指定された構造体 の内容をレジスタにコヒ。ーして INT 21H を 発行し , その時点て、のレジスタの値を第 2 引 数て、指定された構造体に収めて戻ります。 関数の戻り値は AX レジスタの値て、す。ま た , 結果を格納する REGS 構造体の cflag メ ンバが非 0 のときはエラーを意味し , AX に は DOS のエラーコードが入っています。た だし , MS-DOS て、はすべてのファンクショ ンがエラーを返すわけて、はなく , CP / M 互換 の ( コール番号の若い ) ファンクションて、は cflag は無意味て、す。 て、は実際の移植を考えましよう。まずコ ール番号を確認します。前述のようにコー ル番号は AH レジスタて、指定するのて、 , 引数 受け渡しに使う構造体の ah メンバに値を代 入している部分を探します 0Fig. 8 ( c ) て、は直 接 ah は現れませんが , AH は AX レジスタの Fig. 9 intdos( ) で使われる構造体 struct WORDREGS { unsigned int ax; unsigned int bx; unsigned int cx; unsigned int unsigned int Si ; unsigned int di ; unsigned int cflag' struct BYTEREGS { unsigned char al, ah; unsigned char bl' bh ; unsigned char cl, ch; unsigned char 引 , dh' union REGS { struct WORDREGS x; struct BYTEREGS h; 86 C MAGAZINE 1991 6 上位バイトて、す。メンバ ax に代入している 値の上位バイトがコール番号となります。 Fig. 8 ( c ) て、は AH レジスタに設定すべき値と AL レジスタへ設定すべき値を同時に代入し ていたわけて、す。 さて , intdos て、はセグメントアドレスを DOS ファンクションに渡すことがて、きません。 far ポインタを DOS ファンクションに渡す必 要があるときには intdosx が使われます。 Fig. 8 ( e ) に , DOS ファンクション 41H を使ってフ ァイルを削除する例を示しておきます。 こて、使用している ,FP SEG,FP OFF は far ポインタのセグメント部 , オフセット部を 取り出すマクロて、す。このふたつのマクロ を使って far* インタを分解し , それぞれレ ジスタ ( 対応した構造体メンバ ) に代入して いるわけて、す。 Human68k への移植時には こんな処理は不用て、すから , 素直に対応す る DOS コール $FF41(DELETE) て、置き換え れば , Fig. 8 ( f ) となります。 ところて、 , bdos や intdos を使わなければ DOS ファンクションが呼び出せなかったの は少し前まて、のことて、 , Turbo C 以来 , MS ー DOS 上の C 処理系て、もよく使われるファン クションについては独立した関数を提供す る傾向にあります。ここて、 , その中て、も使 用頻度の高い , MS-C の dos findfirst, dos findnext, Turbo C の findfirst, findnext を取り上げましよう。関数名は異なります が , どちらもファンクション 4EH, 4FH に よりファイルを検索し , その情報を得るも のて、す。移植時には , XC の相当関数 , FILES, NFILES に置き換えることになり ます。厳密には , 工ラー時の戻り値が , MS ー C 版て、は正の DOS ェラーコード , Turbo C 版て、は一 1 , XC 版て、は負の DOS 工ラーコー ドというように異なっていますから ( 正常終 了時はいずれも 0 を返す ) , 単純な置き換え て、は不十分なのて、すが , この違いが問題に なることはあまりないて、しよう。 実際に関数を置き換えるときには , 引数 の違いに注意します。 dos findfirst, findfirst, FILES はいずれも , 検索するファ イル名 , 検索するファイル属性 , ファイル 情報を受け取る構造体へのポインタの三つ の引数をとりますが , 引数が並ぶ順序と , ファイル情報を受け取る構造体の名前 / メン バ名が異なっています。例によって , マク ロて、つじつまを合わせることになるて、しょ う。 Fig. 10 ( a ) に dos findfirst を FILES に置 き換えるマクロ , Fig. 10 ( b ) に findfirst を FILES に置き換えるマクロをそれぞれ示し ます 0Fig. 10 て、は同時にファイル属性を表 す記号定数も , 各処理系に揃えて定義して います。 0X20 との OR を取っている部分が不 可解かもしれませんが , これは MS-DOS フ アンクション 3EH と Human68k の DOS コー ル $ FF3E ( FILES ) の仕様の微妙な違いを吸 収するためのものて、す。 MS-DOS ファンク ション 3EH て、は , 指定した検索属性に関わ らず通常ファイルは無条件に検索対象にな るのに対し , Human68k の FILES て、は , ア ーカイプビットを立てておかないと通常フ ァイルの検索が行われません。 MS-DOS と Human68k て、はほかにもファ イル属性の扱いが異なる場面が見られます。 ファイル属性を取得 / 設定する MS-DOS ファ ンクション 43H て、は , ディレクトリとポリュ ーム名の属性ビットを変更することを許し ていませんが , Human68k の DOS コール $FF43(CHMOD) て、はこれらビットも操作て、 きます。 DOS ファンクション 43H て、は , ディレク トリやポリューム名の不可視属性や読み込 み専用属性を設定するときに , ディレクト リやポリューム名を意味するビットを立て てはならないという仕様になっており , そ れを知らずに DOS ファンクション 43H を単 純に Human68k の CHMOD に置換すると , ディレクトリがファイルに化けてしまうと いうことも起こるのて、す。この場合 , 現在 のファイル属性を取得して , ディレクトリ やポリューム名のビットを保存するような 細工が必要て、す。
特集・プログラマのための 知的財産権 している。プログラムの発明性については , さて , WheIan 対 JasIow 事件が , 法律専 覚による総体的な印象をいうものて、ある。 門家の間て、さまざまな議論を呼んだのは当 従来から特許庁を中心に専門家の間て、種々 1976 ~ 77 年ごろに , 子供向けの本 , グリー 然のことて、あったが , 注目すべきは , 米国 ティングカード , ファンタジーなどの著作 の議論がなされてきた。 物の訴訟て、適用された概念て、ある。この考 議論の内容は , 三つに大別される。第 1 は のコンヒ。ュータ関連産業がこの判決内容を え方を技術的精密な分析 , あるいは技術専 肯定説て、あり , 第 2 は否定説て、あり , 第 3 は 強く支持したことて、あった。プログラムに その中間説て、ある。 ついては , 単なる文字的な表現 ( コード ) だ 門的な証明が必要とされるプログラム関連 訴訟に無批判に用いられていいものか , 疑 けて、なく , アイデアも含めて保護してほし 第 1 の肯定説は , 「プログラムはコンヒ。ュ 間を感じざるをえない。米国の学者たちも いというのが , その、、本音〃て、はないか。そ ータに一連の動作を生じさせるものて、ある して , 著作権法の枠内て、 , そのような産業 疑問を抱いているようて、ある。 が , コンヒ。ュータの各部の動作はすべて自 界の、、本音〃に応えるためには , 可能なかぎ プログラムは , 小説や絵画 , 音楽などの 然法則の利用によるものて、あり , したがっ 従来の著作物と比べ りの拡大解釈が必要て、あろうと思われる。 言語と目的による制 て , プログラムは , 自然法則を利用した技 約が強い。 拡大解釈のための理論構成は法律専門家の また , 豊富な言葉を使って美的 術的思想の創作て、ある」とするものてある。 仕事て、あるが , 現在の著作権法の枠内て、現 な表現をするのて、はなく , 機能効率の向上 第 2 の否定説は , 「肯定説がプログラムの 実に対応する際に , 拡大解釈以外に方法が を考えているのて、あるから , 表現の自由度 効用・効果を見てプログラム自体を見てい は伝統的著作物に比し非常に低いといわざ ないと指摘する。プログラムそのものは , ないと・すれば , ある意味て、は , その法律自 数学的 , 論理的機能単位から成っており , るをえない。したがって , 類似性の主張が 体が法律生命を失いつつあるのて、はないか どこまて、可能て、あるか , 法律専門家の研究 とも考えられる。 プログラムによって問題が解けるのは , 数 学的 , 論理的性質を正しく利用しているか , 前項て、説明したように , 著作権法 成果を待ちたい らて、ある。それは , 数学的または論理的法 の世界て、は , いわゆる、、海賊版〃が権利侵害 以上 , コンヒ。ュータブログラムの権利保 護に関する著作権法の世界の一側面を見た となることは当然て、あるが , 「 Similarity( 類 則の利用て、あって , 自然法則の利用とは関 が , 一言て、総括すれば , 極めて不安定な世 係ない。したがって , 発明性は認められな 似性 ) 」があっても侵害を認定される。とこ 界て、あるということにつきよう。 い」という考え方て、ある。 ろが , この類似性についても一般的な判断 第 3 の中間説とは , 「解決しようとする問 基準があるわけて、はない。ケースパイケー 題が自然法則の利用に関する技術的課題な スの判断を待つ以外にないのて、ある。 らば , その解法は自然法則を利用したもの たとえば , 米国の税関て、は , 輸入プログ と考えられるから , そのようなプログラム ラムの記述の中に , 一定の割合 ( 30 % といわ 特許による保護がまれなケースと受け取 は自然法則を利用した技術的思想の創作 , れているが , 公表はされていない ) て、同じス られ , ひたすら著作権による保護が社会の すなわち発明として特許性を有するものと テップがあれば , 違法プログラムと判断さ 関心を集めてきたが , こ数年間 , 急速に いうべきて、ある」というものて、ある。この説 れ , 通関が差止になるといわれている。事 ソフトウェア関連発明に特許が与えられて に従えば , プログラムの種類によって判断 実とすれば , まったく横暴な話といわざる いる。また , 本年 3 月 25 日には岡山県のある が異なってくるのは当然てある。 をえない。何パーセントかの類似によって 特許管理会社が , ソフトウェア関連特許に このような議論が繰り返される中て , わ 全体としてのプログラムの類似を判断する かかる侵害差止請求訴訟を起こしているこ が国の特許庁は , 昭和 50 年 ( 1975 年 ) 3 月 , プ といった恣意的なやり方は , とても公正な とからもわかるとおり , ソフトウェア特許 ものとはいえないて、あろう。 ログラムに関する出願の審査基準を公表し に対する関心が急速に高まっている。 た。同審査基準の考え方は , プログラムが また , 米国のプログラム関連訴訟におい ソフトウェア特許の実態に関する資料情 コンヒ。ュータの使用を前提としている点て て当該プログラムの類似性を証明する際に 報 , ソフトウェア特許保護上の諸問題に関 「 Look & Feel 」というスタンダードが , し は自然法則の利用といえても , それは一般 する議論はいまだ不足しているが , これま 的なものて、 , 個々のプログラムの特有のも ばしば適用されている (Atari lnc. 対 て、の議論を中心として , 以下に特許の世界 のとはいえない。したがって , 個々のプロ Amusement WorId lnc. , Broderbund を摘記してみよう。 グラムの発明性は認められない。しかし , Software 対 Unison WorId lnc. , DigitaI 特許は発明に対して莎えられる。わが国 個々のプログラムが利用している手法の因 Communication 対 SoftkIone Distribut の特許法第 2 条 1 項は , 発明とは自然法則を 果関係があり , その因果関係が自然法則に ing など ) 。 Look とは , 見たり読んだりした 由来しているか否かによって , そのプログ 利用した技術的思想の創作てある旨を規定 場合の視覚的な特徴て、あり , Feel とは , 感 特集プログラマのための知的財産権概論 43 特許法の世界