ファイルの 書き出しタイミング 3-4 て、す。すなわち , 一定のデータがくるまて くに問題になるのが出力のバッファリング 理系 ( OS ) と行わない処理系があります。と 入出力に関してバッファリングを行う処 バッフアにためておいて , あるとき , まと めて実際の出力動作を行うような場合て、す。 たとえば画面にプロンプトメッセージを出 力した後て、キーポードからの入力を待ちた いような場合には , 入力に先だって確実に 出力を完了させておきたいわけて、す。そう て、ないと , プロンプトなして入力待ちとな り , 入力を終えてからプロンプトが表示さ 3 れるという間抜けなことになりかねません。 一般にそのような場合には , 出力先のスト リーム ( たとえば stdout) に対して fflush 関数 を呼ぶことて、バッファリングされている内 容を吐き出すようにします。バッファリン グが行われない OS の下て、開発したソフトウ ェアは , おうおうにしてこれがおろそかに されがちて、す。 MS ー DOS 処理系間移植の落とし穴 系依存が避けられない現状て , c 言語プログラ は微妙な相違が存在する。この相違が実際の AN 準拠とうたわれてはいても , 各処理系に ムの移植性確保の方策を探る。 S=DOS 用の 66 C MAGAZINE 1991 5 ど甘くありません。実際にはそれらの間の 移植可能に思えます。しかし現実はそれほ ャも OS も共通て、すから , 一見何も問題なく 場合はどうてしようか。 CPU アーキテクチ いくっかの処理系の間て、ソースを移植する それては , MS-DOS 上て、提供されている います。 じるということがおわかりいただけたと田 化が大きい場合は実にたくさんの間題が生 る可能性を秘めた言語とはいえ , 環境の変 てきました。いくら C 言語が移植性を高くす ャも OS も限定せずに一般的な移植の話をし PARTI, PART2C, CPU アーキテクチ C 几理系について 移植はかなり困難なケースが多いといわざ るをえません。 その背景には , DOS 用の C 処理系の数が非 常に豊富て、あることも遠因として存在しま す。過去から現在にかけて , DOS 用として 数多くの処理系が提供されてきました。い くつかのコンパイラベンダーは競合に負け て撤退してしまいました。まさに , MS-DOS は C の激戦区だといってもいいて、しよう。と ころて、 , MS ー DOS マシンが使用している i80 X86 という CPU のアーキテクチャは , およそ C 向きとはいえないところがあります。それ にもかかわらず , このようにたくさんの処 理系が供給されているということは , それ だけ DOS の市場が広くて魅力的だというこ となのて、しよう。 一般にコマーシャルべースて、複数の処理 系が存在した場合に , 何かしら他との差別 化を図らなければ生き残ることはて、きませ ん。必然的に , 各社は他社の処理系とは異 なる機能や性能を実現しようとしてしのぎ を削ることになります。当然ながら各社が 独自に追加した機能は移植性を低下させま す。一方 , コーディング上の問題もないわ けて、はありません。 MS ー DOS て、は比較的自 ードウェアに密接した作業をユーザ 由にハ プログラムに許してしまいます。実際には OS が提供している機能が不十分てあるた め , あるいはほんの少して、も性能を高めた いがために , 不本意にもシステムのアーキ テクチャに依存するコーディングを多用す る場合がよくあるのて、す。ところが , そう いう部分に限って処理系間て、互換性が低か ったりするのて、す。
③ボタン [ 確認 ] や [ 取消し ] て、ほかのダイアロ グウインドウをオープンする場合や , 処 理終了などほかの処理を起動するきっか けについてのキーアクション , マウスの 操作などを定義する。実際のボタンアク ションはスクリプト定義て、行う。確認 , 取り消しの意志表示のほかに条件分岐な ど 8 種類のボタンアクションが用意されて ④チョイス 複数表示の選択項目から , ひとつの項目 のパラメータを選択する。選択する項目 のテープルをトヒ。ックという。まず , 表 示形式とトピックを定義する。必要なら ば , 既存のトピックを流用することがて きる。 ( 1 ~ 50 ) を設定する。 Fig. 4 ト Object による開発の流れ ⑤セット 複数表示の選択項目から , 複数の項目の パラメータを選択する。 ⑥長文表示 ( テキストボックス ) 長いテキストを表示する。 ⑦スライドバー データを棒グラフて表示し , 最大 , 最小 や増分を指定てきる。データは 0 から 65535 の整数値てある。棒グラフのマウスクリ ックて棒を伸び縮みさせることにより視 覚的に数値データを直接入力することも ⑧確信度バー て、きる。 ストボックス内てメッセージ , 工デイタ ストボックスサイズを設定したあと , リ データベース入出力テープルてある。リ ⑨リストボックス 確信度係数 ( % ) を数値と棒グラフて表す。 MS-DOS からト Object を起動 アプリケーション仕様の入力 ト Object 内で実行チェック ( スクリプト ) 処理手順 , 操作手順の記述 C ソースジェネレート ( 生成 ) コンバイル プル , チョイス , スライドバーのアイテ ムを設定てきる。 d) データベース定義 , 作成 は QuickC て、コンパイルしてアプリケーショ コーディングされたソースを , MS ー C あるい ジェネレートされた C ソース , または追加 コンヾイル い機能はプログラマが追加コーディングす する。不十分な部分やサポートされていな 各ヘッダおよびプログラムソースを生成 C ソースジェネレート ( 生成 ) トによって定義する。 ータベースの処理との関連づけをスクリプ 取り消し , 無条件ウインドウ出力など ) やデ ンによって引き起こされる動作 ( 入力確訒 インドウとデータベースの関連づけ , ボタ ウインドウとウインドウの関連づけ , ウ ( スクリプト ) 処理手順 , 操作手順の記述 を確認する。 ウインドウのリンクがうまくいっているか クてきる。メニューのぐあいやダイアログ I-Object 内てオンメモリのまま動作チェッ ト Object 内で実行チェック ンラインヘルプを作成てきる。 各ウインドウに対して , 必要に応じてオ ルプの作成 e) 各ウインドウに対するオンラインへ る。検索の設定も可能てある。 レコードを定義したり , その逆定義もてき てきるのて効率的てある。ウインドウから ル内てあってもそのレコード定義をコビー 合は , 異なるファイル間ても , 同じファイ 義されているレコード定義を再使用する場 コード定義 ( スキーマ定義 ) する。すてに定 データベースを使用する場合にのみ , レ ンは , いうまてもないが , I-Object がなくて ンが完成する。作成されたアプリケーショ 138 C MAGAZINE 1991 5
アプリケーション アプリケーション AP 生まれの AP 育ち C 言吾用プログラミンク、孑ツノレ 「簡単シリース」十「作ろうシリース」※開発ェ数削減と標準化のために V . 1.0 ーー \ 18 , 000 V R. 1.0 ーー \ 22 , 000 V . 1.0 ーー \ 28 , 000 V R. 1.0 ーー \ 22 , 000 「マウスが簡単」ワトドコトが簡単」「ヘルプが簡単」「エテイタ入力が簡単」 V . 2.0 - ー \ 28 , 000 V R. 2.0 ー - \ 18 , 000 V R. 1.0 - ー \ 28 , 000 VE . 1.0 ーー \ 14 , 000 「キー入力が簡単」「印字が簡単」「ウインドウが簡単」「クラフが簡単」 キー入力関数・テキスト画面制御関数・カ ーソル制御関数を提供します。キー入力関数 は、指定された位置で指定された桁の入力を 受けつけ、入力テータを指定されたエリアに 格納します。入力テータタイプもチェックし、 漢字入力したいところてはフロントエンドプ ロセッサを立ち上げます。カーソルは、現在 入力中の位置に表示します。テータ表示色・ アトリヒュートも、 PF キーガイドラインの 表示 / 非表示も設定自由、 PF キーガイドラ インには任意の文字列を任意の色て表示でき ます。ロールアップ / ダウン・ BS ・ HELP ・ HOMEe 十 c の特殊キーも全て取得 OK 。リ アルタイム・クロック表示関数や、ダイレク ト・キースキャン関数、 V 一日 AM のリード / ライト関数等も用意しています。 テータ出力関数・ビットイメージ出力関数・ プリンタステータスチェック関数を提供しま す。文字列テータはもちろん、罫線テータも 同時に出力できます。文字列も罫線も、画面 のように桁を行で印字位置を決めるので桁合 わせは不要。文字列は、拡大・下線・網掛け 等の特殊効果を同時に指定可。罫線は実線 破線それそれに太 / 細の計 4 種類をサポート、 ピットイメージを出力して引く罫線よりも高 速に印字します ( 社内テスト結果 : ピットイメ ージ出力で 10 分かかった表が、 6 分で出力完 了にイ ) 。また、文字と罫線を同じ桁・同じ行 に出力できるので、ムダのない帳票を設計で きます。もう、制御コード出力処理だらけの 読みにくいプログラムとはオサラバです。 各種のウインドウ制御関数と、 N88 日 AS ℃ を基本にしたグラフィック関数を提供します。 最大 20 個のオーバーラップ・ウインドウをオ ープンできます。テキストモードとグラフィ ックモード双方向をサポート、ウインドウ内 でのキー入力関数・テキスト画面制御関数・ カーソル制御関数もそろっています。文字列 表示関数は、ウインドウ・サイズに合わせた 自動改行機能を持っているので、プログラミ ングの手間もくっと省けます。通常のウイン ドウに加えてメニュー選択処理のためのメニ ューウインドウや、 Y / N のキー入力を受けて 返せるメッセージウインドウもサポート。ユ ーザー・インターフェイスの優等生・ウイン ドウ処理を、メモリ操作なしのお手軽プログ ラミングで実現てきます。 グラフ描画関数と、 N88 日 AS ℃を基本に したグラフィック関数を提供します。描画で きるクラフは、棒グラフ ( 縦・横 ) 、折れ線グラ フ ( 縦・横 ) 、円グラフの計 5 種、棒グラフと 折れ線グラフは重ね合わせも可能。色やライ ンバターンの設定は自由です。描画のための テータテープルをセットして関数をコールす れば、グラフ本体はもちろん、タイトル・グ リッド・単位・凡例まで、全て関数内で計算・ 描画するので、メインプログラム側での計算 処理は何一つ必要ありません。「簡単シリーズ」 は全て併用可能ですから、「ウインドウか簡単」 と「クラフが簡単」を併用すると、グラフが出 るウインドウを画面上にオープンする、なん てことも、あっとオドロク簡単さでできてし まいます。 デ - タテープしをセットして 関数をコ - ルす 3 たけ マウスドライバとのインタフェース関数を 提供します。「キー入力が簡単 V2.0 」と「ウイ ンドウが簡単 VI . 0 」と併用すると、プルタウ ンメニュー関数や、ダイアログ関数 ( 文字列、 メニュー、リスト・ボタン、シートなどの豊 富なアイテム ) 、マウス情報取得関数が使用で きます。 マウスのアクションに対して各関数が返す値 として、任意の値をあらかじめ設定すること もできます。このことを上手く利用すれば、 マウスとキーホードを併用するアプリケーシ ョンを作る際、マウス用のロジックとキーホ ード用のロジックが一本化できるので、プロ グラムが長くならずに済みます。高い機能を 短いステップで、簡単シリーズの身上です。 グラフィック画面をモノクロ 8 階調または、 カラープリンターにハードコピーします。領 域指定や色指定など豊富なオプションも用意。 その他、アプリケーション実行中に現在の画 面を Disk にセープする常駐プログラムと、 セープしたテータを圧縮するプログラム、更 にそれらのデータを再表示したり、印字した りするプログラムも装備しています。 苦労して作った美しい画面の利用範囲が広が ります。 アプリケーションの使用方法を導く高機能 なポップアップ ( アドバイサ ) 関数を提供しま す。 100 タイトル ( 300 頁 ) のヘルプメッセージ をサポート。タイトルメニューと関連タイト ルのリンク機能を持ち、階層的ヘルプを実現 できます。工ラー・警告・ガイド・質問を出力す るメッセージ機能もあり、ヘルプ機能と連動す るとユーサーフレンドリーなアプリケーション を簡単に開発できます。 DOS 配下でヘルプメ ッセージを参照するユーティリテイや、専用工テ イタも付属。マニュアルレスな時代のアプリケー ション開発にお役に立ちます。 ( この商品をお使 し順くときには、別売「ウインドウが簡単 V. 1.0 」 が必要てす。別売「マウスが簡単 VI .0 」をお使い の方には、マウス対応版のヘルプ関数も用意し ています。 1991 / 4 / 1 発売開始。 ) 長めの文章をキーボードから入力する機能を 簡単に実現できるテキストエテイタ関数を共 します。アプリケーションでコメントを入力し たり、通信ソフトて手紙を入力したりするため のエテイタ入力機能を関数ひとって実現てきま す。最 50 字 x 6500 行のテキストエテイタが、 同時に 20 個作成できます ( 但し、メモリに依存し ます ) 。日本語対応、スクロール、行単位のカッ ト & ペーストをサポート。その他、本格的な工 テイタの開発を支援する関数群を豊富に揃えて います。「キー入力が簡単」にエテイタ入力機能 を拡張した関数も用意しました。「キー入力が 簡単」の手軽さでエテイタ入力機能を実現でき ます。 ( この商品をお使い頂くときには、別売「キ ー入力が簡単 V. 2.0 」が必要です。 1991 / 4 / 1 発 売開始。 ) 「簡単ツールエテイタ」 R ・ 1 ・ 0 ーー \ 22 , 000 「簡単シリーズ」のテータテープレを編集するための、専用工テイタです。 画面上で、マウス ( なくてもかまいません ) やキーボードを使って、実行画面や帳票のイメージをワープ ロ感覚で入力すると、そのまま使えるソースコードか出力されます。これ 1 本で「キー入力 ( V2.0 ) 」「印 字 ( V2 ①」「ウインドウ ( VI . 0 ) 」「グラフ ( VI. 0 ) 」をサポートしています。テータ編集中に、擬似テータを 使っ ( 表示したりできるので、テストランの必要もなく、簡単シリーズを更に簡単にお使いいただけます。 「 { 乍ろう」・。住所録を作ろう。 ・「スケジュール表を作ろう」 シリーズ・「こづかい帳を作ろう」・ ・「らくがき帳を作ろう」・ ・・・ VER. 1.0 ー \ 6 , 400 ・・・ V R. 1.0 ー \ 7 , 200 ・・・ VER. 1.0 ー \ 8 , 600 ・・・ VER. 1.0 ー \ 9 , 800 ロステム構 ( 共通 ) ・本体 : PC-9801 (XA/XL/XL2/RLA イレゾ / LT を除く ) ・ OS : MS-DOS V3. レ 3.3 ( F ・ PMS ー DOS に添付のもの ) ・プリンタ : NEC PC ー P 日刪系、 PC ー P 日 2 田系 ・コンバイラ : Mic 「 osoft-C/Lattice-C/Tu 「 bO-C/ Quick-C ( 簡単シリーズは、御使用のコンパイラを指定して下さい。 ) ・メティア : 5 ″ 2HD / 3.5 ″ 2HD ( 御希望のメティアを指定して下さい。 ) ※全商品プロテワトなし、サンプル付きです。 ※サンプルソフトを実費 ( ¥ 1 , 50 ので販売中 / ※全商品ロイヤリティフリー ※記載されている内容は、将来予告なしに変更することがあります ※ MS-DOS 、 Microsoft-C 、 Quick-C は、米国 Mic 「 osoft 社の 登録商標です ※ Lattice-C は、米国 La ⅲ ce 社の登録商標です ※ Tu 「 bO ー C は、米国 BorIand ⅲ ternation 引社の登録商標です ※お問合せはお近くのマイコン・ショップか、私どもへどうぞ 工 1 ジステ必工ュニア鱸ユ 〒 790 愛鍰県松山市北藤原町 1 ー 26 T E L : ( 0899 ) 31 ー 2886 FAX : ( 0899 ) 41 ー 0336 ・株式 会社 く資料請求番号 1 〃〉
ェイスクラスライプラリ Turbo Vision が 付属。 Turbo Vision はユーザインタフェ イス向上のためのライプラリ。サイズ変 更可能なオーバラップウインドウ , プル ダウンメニュー , ダイアログボックス , ボタンなどを利用するマウス環境を簡単 に利用てきる。 統合環境 新しくオーバラッブマルチウインドウが サポートされ , マウスによる操作が行え る。工デイタは複数のファイルを同時に オープンて、き , ファイルサイズも IM バイ トまて編集てきる。ハイバーテキスト形 式のオンラインヘルプは , すべての関数 , 手続きのプログラム例をエデイタに取り 込める。 組み込みアセンプラ 組み込みアセンプラが内蔵され , ソース コードにアセンプリ言語が記述可能。 Turbo Assembler などの外部アセンプラ を使わずにコンパイル可能となった。 ハイレゾモード対応 TPCX(PROFESSIONAL 版 ) Turbo Drive(DOS Extender) を使用し て , プロテクトメモリをワークエリアと した膨大なソースがコンパイル可能。 く動作環境 > ・対応機種 PC ー 9800 シリーズ PC ー 286 / 386 シリーズ ・対応 OS MS-DOS Ver. 2.11 以上 ・必要メモリ 640K バイト以上 く価格 > ・ Turbo PascaI 6.0 29 , 800 円 ・ Turbo PascaI 6.0 PROFESSIONAL 59 , 800 円 問い合わせ先株ポーランドジャパン 〒 107 東京都港区南青山 7 ー 8 ー 1 小田急南青山ビル 9F TEL 03 ー 3486 ー 1400 C-MAGA ーズ 、 0 ファイルの入出力のためのライプラリ。 ・ ISAM ータを小さなインデックスて、管理する。 インデックス管理ライプラリ。巨大なデ ・ CBT ている。おもな内容は以下のとおり。 また C 言語て書かれたソースコードも付属し スの向上が可能。ライセンスはフリーて , ータのコンパクトな収納 , ディスクアクセ データベース言語を使用することなく , デ 「 C/Database Toolchest pc ー 9801 版」は , Database Toolchest PC ー 9801 版」を発売 スシステムの構築がて、きるライプラリ「 C/ システム・ワン株は , C 言語てデータベー システム・ワン株 PC ー 9801 版」 「 C/Database TooIchest 次のユーティリティが付属。 ・ TOOLS サンプルプログラム。 CBT と ISAM を使用したデータベースの ・ LDM 検索 , 高速処理を行う。 データファイルを直接管理し , データの PC ー 286 / 386 シリーズ ・対応コンパイラ MS-C, QuickC, Turbo C, Power C く価格 > 48 , 000 円 問い合わせ先システム・ワン株 〒 103 TEL 東京都中央区日本橋人形町 2 ー 15 ー 16 大森ビル 03 ー 3663 ー 4551 「エテイタ入力か簡単」 「ヘルプが簡単」 dbftodb dbtodbt dBASE の DBF ファイルを ISAM の DB ファイルに変換 ISAM の DB ファイルを dBASE の DBF ファイルに変 換 dumpdata ISAM5-•—タファイルの内容 を出力 dumptree CBT ファイルの内容を表示 pressdb データベースの未使用領域を 圧縮 prlabel LDM からメールラベルをプリ ・対応機種 PC ー 9800 シリ く動作環境 > 工フ・エー・システムエンジニアリング株 工フ・エー・システムエンジニアリング 株の , C 言語用開発支援ライプラリ「簡単シ リーズ」に「エデイタ入力が簡単」「ヘルプが 簡単」が加わる。それぞれのおもな内容は以 下のとおり。 「エデイタ入力が簡単」 テキストエデイタと同様な入力機能をア プリケーション中て行うためのツール。 最大 250 字 X65 , 000 字の文書を 20 個編集 可能。カット , コヒ。ー , 検索なども行え る。使用にあたっては「キー入力が簡単」 が必要。 「ヘルプが簡単」 最大 1 , 000 タイトルのヘルプ表示てきるポ ップアップへルプ関数。関連タイトルの リンク機能により階層的なヘルプ表示が てきる。使用にあたっては「ウインドウが ジニアリング株 問い合わせ先工フ・エー く価格 > 28 , 000 円 ・対応コンパイラ MS-C, Turbo C, ・対応 OS MS-DOS Ver. 3.1 以上 ・対応機種 PC ー 9800 シリ く動作環境 > 簡単」が必要。 ・システムエン Lattice C, QuickC ーズ News Square 155 TEL 0899 ー 31 ー 2886 〒 790 愛媛県松山市北藤原町 1 ー 26
実行例を Fig. 16 に示します。 数の引数や型などに関する情報がなけれ ① EOF の定義が必要である ば , プログラム間の整合性がとれないて EOF のようなマクロを自分て、 #define て、定 式と文 こまります。 義してはいけません。 EOF の定義を含む C 言語プログラムに頻繁に出現する : ( セミ printf, putchar, getchar などの関数に stdio. h をインクルードしましよう。なぜ 関する情報は stdio. h の中に含まれていま コロン ) について説明していませんて、した。 ならばあなたの処理系ては EOF は一 1 てあ すのて , このヘッダファイルをインクル っても , 別の処理系ては一 2 かもしれませ b a ードすれば安心してこれらのライプラリ が代入式て、あり , 代入式は左オペランドの ん。 を呼び出せます。 ② printf という関数の引数や返す型などの 型と値をもっということは説明しました。 さて 8 行目て、 putchar 関数を呼び出してい 情報を入手する インクリメントを行う i 十十や十十 i というの ます。これは引数て、与えた文字をそのまま List 9 のプログラムて、は , main 関数 <sum も式てす。ただし式の値としては , 出力するものて、す。 関数を呼び出しています。 main 関数より i 十十・・・インクリメントする前の値 結局このプログラムは文字を 1 文字ずつ読 も前に sum 関数の本体があるのて、 , コンパ 十十 i ・・・インクリメントした後の値 イラはく sum 関数が整数の引数をふたっ受 み込み , 終わりにぶつからない間 , その文 をもっという違いがあります。また 字をそのまま出力するプログラム , すなわ け取り , 整数を返す > ということを知っ puts("BuII shit!") た上て、 , コンパイルします。使用する関 ち入力を出力にコピーするプログラムて、す。 も関数呼び出し式 (function call expres 入力を出力にコピーする LiSt リダイレクト これまでとくに説明しませんでしたが , printf, puts, putchar は標準出力に対して出 力を行い , scanf, getchar は標準入力から入 力を行いました。 MS ー DOS では標準出力およ び標準入力はコンソール ( ディスプレイとキ ーポード ) に割り当てられています。ですか ら出力はディスプレイへ , 入力はキーポー ドからということになります。しかし MS-DOS ではリダイレクトという機能があり , くや > を指定することにより標準入力や標準出力 を自由に変更できます ( 詳しいことは MS- DOS のマニュアルをご覧になってくださ い ) 。 たとえば List 9 のプログラム ( コンバイル して作成した実行ファイルが list9. exe とい う名前であるとします ) を , A>list9 > PRN として標準出力をプリンタに変更すると , キーポードから打ち込んだ文字をプリンタ に対して出力します。また A > list9 く list9. c > file として標準入力を Iist9. c, 標準出力を f ⅱ e に 変更すると , 結局ⅱ st9. c のファイルを f ⅱ e と いうファイルにコピーすることになります。 リダイレクトの機能はあくまでも MS ー DOS の ものであり , C 言語の機能ではありません。 1 : # i nclude 2 : 3 : int main(void) 5 : i nt ch : 6 : while ( ()h = getchar()) ! ニ EOF) 7 : putchar(ch) : 8 : return ( 0 ) : 9 : 10 : } く stdio. h> Fig. 15 代入と比較 ①代入 ch= etchar ① ch に getchar() の値が 代入される ②代入式 (ch=getchar()) と EOF を比較する =EOF) while ( ②比較 Fig. 16 List 9 のプログラムの実行例 下線の付いた部分が入力する箇所です A>LlST9 123456 123456 ABCDE@ ABCDE 27 2 入力の最後は一亘日ロキーを押しながら ] キーを押します 130 C MAGAZINE 1991 5
に一彡売 なかなか思うように時間が取れなくて結局 使わずじまいになっています。 ( 2 ) bfontlib.lib それから bfontlibo bfont(BFNT) というの は noenoe 氏が提唱したフォントデータの規 格て , 蟹味噌て、はこれを文字の表示に使っ ています。そしてそのフォントデータのロ ード・実際の表示を行っているのが bfontlib てす。これはもともと , こもも ( komomo ) 氏 が「ばろりす』の中の関数として作ったも のなのてすが , あるていの強引な寄せにあ ってソースを提供 , 蟹味噌に組み込まれま したが , 効率を考えてか自らライプラリ化 に乗りだしたのて、した ( 笑 ) 。 しかしながらこのライプラリも bgmlib 同 様すべて C て記述されているため , 後にスビ ードに関していろいろいわれることに 「ライプラリはふつ一アセンプラ」これは , めてす ( metys ) 氏の名言なのてすが , 本当に 耳が痛いばかりて、す ( 笑 ) 。 ( 3 ) gr.lib そして忘れてならないのが , キャラクタ ブット・文字表示以外のグラフィックス全 般の関数を提供するライプラリ , gr. lib て、 す。これは「ライプラリはふつ一アセンプラ」 のめてす ( metys ) 氏が自分て、使うことを目的 として作っていた高速グラフィックス関数 群て , これまたあるていの寄せにあってや むなく公開。 ほとんどが彼によるものて、すが , 一部 Taka 氏と Danna 氏の作った関数も入っています。 fTAKALITH 』て、使われた高速ラインル ーチン ( Taka 氏 ) などがそうて、す。このライ プラリのおかげて標準のグラフィックスラ イプラリを使わずに , 小さくて高速な実行 形式が得られました。ゲームを作成するに は欠かせないライプラリといえるて、しよう。 ちなみに , 彼が昔作った「 GETS ! 」という C MAGAZINE 1991 5 ゲームは QuickC のライプラリを使っていて 150 とても大きくて遅いてす ( 笑 ) 。ても最高に おもしろい ! ( メッセージが ) ( 4 ) joy.lib ったわりにはずいぶんと長かったみたいだ あるてい説明ご苦労さま。「簡単に」とい みキャラクタデータとして利用て、きます。 のフォーマットのデータファイルを読み込 BFNTpIus のフォントデータにも対応。そ また前述の BFNT の最新規格て、ある 消去が可能てす。 せを意識することなくキャラクタの表示・ プログラマはキャラクタと背景の重ね合わ しています。本ライプラリを用いることて , ポーズ表示 , その復元 ( 消去 ) を高速に実現 なものて、はありません。完全スーパーイン ライプラリが提供する機能はそれほど単純 氏てす。キャラクタブットといっても , 本 ブットを行うライプラリて、 , 作者は Kazumi 前章て、触れたグラフィックスキャラクタ ( 5 ) super. lib て、対戦て、きるようになっています。 きゲーム ) はこのライプラリを使用して 2 人 まいます。彼の作った『 mogler 』 ( もぐら叩 の入力が可能て、対戦ゲームも楽々作れてし 入力と統合してくれました。当然 2player 分 的に作ったものを , めてす氏がキーポード 初め私が JOYSTICK の状態取得だけを目 リて、す。 から取得て、きるようにするためのライプラ ーポードを意識することなくプログラム側 った入力が使われますが , JOYSTICK とキ ゲームてはよく上下左右・ボタン A / B とい JOYSTICK/ キーポード入力ライプラリ。 ています ( 笑い ) 。 そ完成 というわけて難しいところはすべてライ プラリが実現してくれているのて , 私は悪 玉の分裂や合体 , 邪悪玉の出現 ( これはのろ 氏の発案 ) , お邪魔キャラの出現などのアイ デアをゲームに盛り込んて、いきました。あ , 曲や効果音のデータを作ったのも私て、すよ。 そして面データを追加したり , 動きの微調 整をしていよいよ完成版へ 。めてす氏 けど・・ ともかく , 蟹味噌はこれらのラ イプラリ群を利用してお手軽に作られてい ることが理解していただけたと思います。 私のもっとも偉大なる功績は , たくさん のライプラリを周囲の人たちに作らせて , そして充実させていったことてあると思っ にオープニングの背景を描いてもらい ,free software とは思えないほどの高級感を出し ています ( 笑 ) 。 あるていふう一 , ホントやっとって感じ こまて、イケルとは思わなかった だよね。 ふえみいそうだよねえ。俺も最初から見 てたから新鮮味なかったし。 あるていもうこの世界は制覇したな。次 は何しようか ? ( 笑 ) ふえみいわはは , アキつばいなあ。 , 最後に 蟹味噌のお味のほどはいかがてしようか ? 半年間かけてじっくり煮込んだソースは素 材 ( アイデア ) の味を引きだし , 噛めば噛む ほど味が出る , てきになっていると思いま す。最後に , 蟹味噌の製作に協力してくだ さった皆さんありがとう ! 実際に試食して いろいろな感想やアイデアを提供してくれ た方々ありがとう ! ! とお礼と感謝を捧げた いと思います。蟹味噌が世界の食卓にあが る日も近いてしよう ( ! ? ) 。 なお蟹味噌は free software< す。「 free software 」を「 PDS 」と呼んだりする無神経な 人・団体には食す権利はありません ( 笑 ) 。 て、はまた会う日まて、・・・
型名 ( 式 ) この方法て、は , 式のどこからどこまて、を どの型に変換するのか明確に記述てきる。 しかし , ポインタの変換にはキャストを用 いることをすすめる。 データ型名 * ( 式 ) て、は , 式の評価結果が い 白倉伸一郎・山本浩文 ポインタて、 , そのポインタの指す内容を指 定したデータ型に変換するものと解釈され るからて、ある。 今回説明した範囲て、は , C 十十特有の機能 は , コメント , 定数型 , キャストの 3 点てあ り , ほかの項目は C 言語と同様て、ある。次回 実践編 け暮れるのもいい しかし , 私たちにはやらなくてはならな いプログラミングがあります。そのために C というすばらしい言語を手に入れました。 それをどうして , むざむざ手放さなくては ならないのてしようか。 C のいいところも悪いところもいっさい がっさい , 投げ捨てる必要がどこにあるの てしようか ? C 十十は C 言語の産物てあると同時に , C ヾ十十 ? てもあります。今もって十十されつ づけている , 発展途上の言語てす。言語仕 様からクラスライプラリまてがすてに固ま ってしまい , 完成度が高くとも , 発展性の ない言語とは違います。 オプジェクト指向の限界もちらほら見え 始めていますが , それもいずれ解決してし まいかねない勢いをもっています。「 C 十十 の時代がきた」のて、はありません。時代が始 まったのて、す。 あえていいます。バスに乗り遅れるな ! 「プログラミング言語 C 十十』から引用すれ ば , C 十十は何よりも「プログラミングの作 業をもっと楽しくてきるように設計された 言語」なのてす。それが楽しいバス旅行てあ は , C 十十の制御構造 , 関数とプログラムの 構成 , 変数の記憶クラス ( 有効範囲 ) につい て解説する。 TabIe 9 に C + 十の演算子の優先順位と結 合性をまとめたのて、 , 参照していただきた → , はしめに 110 C MAGAZINE 1991 5 理屈をこね回すのもいい。知識表現に明 う議論もよく聞きます。 する部分もあるかもしれませんし , そうい れば , 歯がゆかったり , 物足りなかったり ジェクト指向系の言語のプログラマから見 刃にすぎない , ともいえます。ほかのオプ って , しよせん , あらゆる機能が付け焼き つまり , 出発点からして℃〃十十なのてあ 的に解決していこうとする試みの産物なの 語が背負いこんてしまった諸問題を , 総合 ソフトウェア危機が叫ばれるなかて、 , C 言 もたらす福音て、はありません。 びていますが , 決してそればかりカ℃十十の くに , オプジェクト指向的機能が脚光を浴 を改善するために開発された言語て、す。と い」という現場の要請に応じて , C の問題点 C 十十は , C 言語を使っていて「どうも苦し と噴出しています。 構造化プログラミング自体の問題点が続々 た , ソフトウェアが大規模化するにつれて , てすし , 時代錯誤な面を免れえません。ま 「 1 ロロ C 旨も 20 歳になんなんとする古い言語 楽しいことばかりてはありません。 しかし C プログラミングもそうそううれしく れ C, たの C, 望ま C 」と銘打っていました。 fThe BASIC 』誌 ' 88 年 3 月号の特集は「う ることを期待しましよう。 「形から入る」ということて、 , C 十十概観 まずは C と C 十十をざっと比較するために , ひとつの ( 一 す。しかし , それて、もいくつかの問題を抱 もないありきたりなコーディングに見えま これは , C プログラムとしては , 何の変哲 す。 こて、は , 重複回数を表示することにしま ref の回数分ループさせればいいのて、すが , 加させることにします。出力するときには , タとしてフィールド ref を設けて , これを増 を割り当てるのはムダなのて , 参照カウン 同じ要素が出てきた場合は , 別々の記憶域 に , 大きな要素は right の先につなぎます。 す。自分自身よりも小さな要素は left の先 語は struct Node という構造体に保存しま ください ) 。簡単に説明すると , 入力した単 中「アルゴリズムとデータ構造入門」を参照 明はしません ( 編集部注 : 詳しくは本誌連載 が , ここて二進木に関して , くどくどと説 二進木 ( バイナリツリー ) を使っています l(sortw. c) て、す。 この条件のもとに C 言語て、書いたものが List す。 は考慮しません。工ラーチェックも省きま のスペースやタブなどとします。全角文字 に条件をつけます。単語の句切りは , 半角 グラムてす。誌面の都合上 , 簡略化のため ソートしたうえて、標準出力へ出力するプロ 標準入力から入力された単語を切り出し , しましよう。 対の ) サンプルプログラムを見ていくことに
すでに「朝言語ユーサー 準ツ司レ 日ョッ響 洋をツ N 第体 5 V 阜ツ物 はを L 戸 B-FORPve 3 画面設計制御ツール この商品はマイコンショー ' 91 に出展いたします 東京流通センター・プース No. 3 ーに ( 第 3 会場 ) ・ 5 月 8 日 ~ 5 月ロ日 Forrrat P 「 ocesso 「 8 ー F 〔 e 「 .2. 四 (c) Copyright 1 , 89.8 BITS 8. , Ltd. フィールド属性定義画面 各入力項目毎にデータの形式、 35 種類の完了条件 が設定できます。プログラム実行時には、これらのチェ ックを終えたデータのみをユーザープログラムに引き 渡すので、プログラム作成の負担が大幅に軽減します。 B ー FORP で予めに 0 種類を用意してあり、好みのバタ ーンで塗込が可能。さらに、ユーザー定義バターンを に 0 種類までサポート。表現できない色はない程の機 能です。 B-F O 日 P で予め 24 種類のバターン備。さらに 20 種類までユーザー定義可能。罫線色も 8 色 ( 黒色を 含む ) サポート。そして斜線を引くことも可能です。 V 一日 AM を直接アクセスすることにより、ウインドウの 高速処理を実現、メモリーに取り込んだ複数の画面 を個別に範囲指定して表示・消去が可能。リリース 関数を併用すれば田 0 画面でも 200 画面でも 0 K です。 マルチウインドウ実行例 「 B - FORP 」は、 printf 、 scanf を使わずに画面の設計制御を可能にした画 期的なツールです。汎用機のレベルをパソコン上で実現した、まさに「 C 」 ユーザーが待ち望んでいたツールです。 ※資料ご希望の方は電話にても受付ております。下記弊社営業部までご連絡下さい。 NEC PC -9800 シリーズ ・本体 ・ B - FO 日 P ( レイアウトエデイタ十ランタイム関数 ) ・本体 N E C P C -9800 シリーズ 89 .000 MS-DOS ver. 3.1 以上 ・ OS ・レイアウトエテイタ ( 3.5 " 2HD 、 5 ?HD) ・ OS M S -D 0 S ver. 3.1 以上 59 .000 39.000 各種日本語入力 FEP 使用可 ・漢字入力 ・対応言語 ・ランタイム関数 ( 3 を 2HD 、 2HD) M ℃「 0S0 C/TURBO C Latttce C PC -P R201 シリーズ ( レイアウト印刷用 ) ・プリンタ ・漢字入力 各種日本語入力 FEP 使用可 ※ MS -D 0 S 及び日本語入力フロントプロセノサは付属しておりません * MS - DOS 、 MIC 「 0S0 れ C は米国 MIC 「 0S0 れ社の登録商標です B ー FO 日 P を使って作成したフログラムに対するライセンス料は不要です。 *TURBO C は米国 Bo 「 nd 社の登録商です * Lattlce C は米国 La い e 社の登録商標です 本社 / 〒田 5 東京都港区東新橋 2 ート 7 ( 住友生命東新橋ビル 6F ) 谷東京 ( 03 ) 3432 ヨ 677 ( 営業部直通 ) ( 03 ) 3432 ー 03 引 ( 代表 ) く資料請求番号 006 〉 朝 3 第 : ら季に . し篭ら . み気当 表示色 ■冨 ■をを タイルバターン登録画面 を十第編三宿 : ラインバターン登録画面 「 B - FORP 」システムフロー コメンをま、 画面レイアウト ェデイタ 画面情報 ~ フィルー 画面制御ライプラー ランタイム関数 ) 標準ライプラリ ユーザ プログラム 実行モジュール レイアウトエテイタ動作環境 ランタイム関数動作境 ( 社 ) 日本システ乙ハウス協会会員 株式会ネにリ
Q List 1 のような簡単なプログラ ムが正しく動作しません。何が問 題なのでしようか。 プログラムの中て、、、 read 〃とい う関数を定義していますが , この 名前の関数は標準ライプラリ関数 としても用意されています。ライ プラリ関数の中には , 明示的に使 用しない場合て、もほかの関数から 呼び出されることがあります。 の場合は , scanf が内部処理のため にライプラリ関数の read を呼び出 そうとしていますが , プログラム て、定義されている read 関数が優先 されて呼び出されてしまうため正 しく動作しません。たとえば , read を iread のような名前に変更すれば 動作するようになります。 プログラム中て、使用する関数名 は , ライプラリ関数の名前とは異 A List 1 なるものを使用してください i nt a, b : 13 : ma i n ( ) return scanf( ” Xd ” , (n) : printf("input ー > int n; int read(void) 3 : / * 整数値の読み込み * / 1 : #include く stdio. h> ホ - ランドジツ lnformation from Compiler Makers 8 : 14 : { 22 : } Q List 2 のように , fopen のソ十 b ″モードを使ってファイルをオー プンしているのですが , 書き込み の後で読み込みを行うと正しく動 作しないようです。 A 高水準入出力関数ては , 通常 ノヾッフアを介してファイルの読み 書きが行われます。このバッファ は , ある時点て、は読み込みか書き 込みのどちらかのためだけに使わ れます。読み込みを行った直後は , バッフアは読み込みのために使わ れており , バッフア内のデータや 内部のファイルポインタは次の読 み込みのために保持されています。 こて、バッフアに対して書き込み を行おうとすると , これらの内容 が無効になってしまい正常な処理 が行われません。 高水準入出力関数を使って , 読 み込みと書き込みを切り換える場 合は , ことに注意してく ださい。たとえば , fseek(stream, OL, SEEK CUR) : とすれば現在 のファイルポインタを変更せずに 次の読み書きの処理を行う準備が て、きます。 Q har 型の変数に scanf で数値 を読み込む場合 , 、、 % d ″という書式 は使えないのですか。値は正しく 入力されるのですが , その後の動 作がおかしくなるようです。 A 書式、、 % d 〃は , 引数のポインタ が int 型を指していることを前提に しているため , char 型を指すポイ ンタを指定すると , 正しく読み込 みが行われたように見えても不正 な領域を破壊してしまうことがあ ります。 scanf や printf て、は , 書式 文字列と引数の種類が正しく合っ ていなくても何の警告も発しませ んのて、 , 注意してください Q BG やフォントを実行ファイル List 2 1 : #include く stdio. h> 2 : 3 : main (int argc, char **argv) に組み込む方法について教えてく ださい。 A List 3 は , ノーマルモード用の BGI と TRIPLEX フォントを組み 込む場合のプログラム例て、す。フ オントは 1 種類につき 5K ~ 18K バイ トのメモリを消費するため , 通常 のセグメントにロードするとリン ク時に $Segment exceed 64K 〃と いうエラーが発生してしまうこと があります。このエラーを避ける ために , registerfarbgifont を使っ て異なるセグメントへ組み込むと よいて、しよう。 この例をコマンドラインから構 築するためには , 次のように実行 してください A > B 引 OB 」 PC98 ( PC98. OBJ の作成 ) A>BGIOBJ /F TRIP (TRIPF. OBJ の作成 ) A >TCC LlST3. C PC98. OBJ TRIPF. 0B」 GRAPH ℃ S. L 旧 Turbo C Ver. 2.0 Turbo C 十十 Ver. 1 .0 TurbO Debugger Ver. 2.0 2 : 4 : 6 : 7 : 8 : 9 : 12 : 15 : 16 : 17 : 18 : 19 : 20 : 21 : printf("input tWO ニ read() : a b = read() : printf("%d * %d ニ %dYn", a, b, return 0 : integersYn") : 5 : 6 : 7 : 9 : 10 : 13 : 14 : 15 : 16 : 17 : 20 : 22 : 23 : 24 : int c; FILE *fp: if (argc く 2 ) { / * 入力した文字コードをビット反転して書き込む * / exit(l); perror(argv[l]) : : NU しし ) { if (fp fp = fopen (argv [ 1 ] , / * 書換えてもよいファイル名を 1 つだけ指定する * / exit(l); "filename needed. Yn") : fprintf (stderr, return 0 : fclose (fp) : fputc (-c, (p) : ー 1 し , SEEK_CUR) : fseek(fp, while ()c = fgetc(fp)) ! = EOF) { 158 C MAGAZINE 1991 5
最新ロロロレポート こてメニューの実行チェックを行うこと Fig. 3 確信度バーを使ったアプリケー ション例 7 , VJE ーの使用を推奨しているが , そのほ もて、きる。 かの FEP< も問題はないようだ。ちなみ に , 松茸 V2 を組み込んて使ってみたが , 不 b) ダイアログウインドウの定義 , 作成 具合はなかった。 マルチウインドウ型の対話型ウインドウ ・ C コンバイラ を作成する。ダイアログウインドウをとお 生成した C ソースをコンパイルするために して入力を受け付けたり , データ表示出力 C コンパイラが必要てある。具体的には , MS をする。 ー C(Ver. 5.1 以上 ) あるいは QuickC(Ver. ウインドウ枠 ( サイズ , 移動するかしない 2.0 ) てある。ライプラリは LLIBCE. LIB を使 か , スクロールなどの仕様入力 ) , ウインド 用する。 ウ色 ( 通常時だけてなく非動作時の色も設定 ・ハードディスク インドウ〃ダイアログのについて」と助詞の てきる ) , ウインドウ表示位置 , メニュ 変なメッセージが表示される。 こういった フロッピーシステムペースても使用てき ダイアログウインドウの関連づけなどの設 変な日本語があちこちに見受けられるのて、 るが , 効率的な作業にはハードディスクが 定を行う。 ストレスを感じてしまう。早急な改善を望 必要てある。 I-Object< 使ラウインドウ (I-Object から みたい ・ PC ー 9801 シリーズ 作成されるアプリケーションて、使用するウ インドウ形式と同じてある ) はグラフィック 対応機種は PC ー 9801 シリーズて、ある。ただ ノストール ス使用てはなく , キャラクタベース ( テキ し , XL,XL2, RL などのハイレゾリューシ ストべース ) のものだが本格的なオーバラッ ョンモードには対応していない。ューザー 専用のインストールプログラムを使用す プウインドウて、 , マウスを使ってウインド ズメモリが 640K バイト必要てある。 る。このプログラムも I ー Object て、作成されて ウ位置やウインドウサイズを変更したり , ・ハードプロテクト いるらしく , ファイルサイズが大きい。フ ウインドウ内のスクロール , ウインドウの これについては前項て説明した。 ロッヒ。ーディスクて、開発する場合はフロッ 自由な順序てのクローズ , オープンがてき ・マウス ビーディスクが 3 枚必要てある。コンパイラ も必要だから , フロッヒ。ーシステムて、はス なくても使用上問題はないが , あると作 ちなみに , マウスカーソルもテキストカ 業が楽てある。 ムーズな開発は望めないだろう。 ーソルてある。 c) ダイアログウインドウ内の項目定 モプログラム ニュアル 義 , 作成 ウインドウ内の項目 ( アイテム ) の作成 , 現時点てのマニュアルには誤植が目立ち , デモプログラムは充実しており , 最初か 追加 , 修正 , 削除およびウインドウ内の入 ら最後まてひととおり見ると 30 分以上かか 翻訳もわかりずらい日本語が多い ( 将来改善 カ , 表示項目の設定を行う。ウインドウ内 る。操作説明のため , 修正作業やテスト作 されるはずだ ) 。また , 解説もあまり親切と の項目は必要に応じて組み合わせ選択が可 業を繰り返しているのて何度も見るともど はいえない。たとえば第 8 章「こんなときの 能て , 1 ウインドウ内て各種アイテムを混在 Q&A 」という章はわずか 2 ページて , Q&A かしさを感じるが , このデモをじっくり見 てきる。各アイテムの表示位置などの設定 ることが理解への早道てある。 が 1 ページにひとつずっ , 合計ふたっ掲載さ もてきる。アイテムは次の 9 種類が用意され れているだけてある。プロのユーザ向けの ており , 色 , 表示位置 , 表示順序を設定て 発の流れ ( Fig. 4 参照 ) 製品とはいえ , これてはほとんど役に立た きる。 ないだろう ( ューザからの質問はユーザサポ ①メッセージ ートて対応するということだ ) 。 アプリケーション仕様の入力 ウインドウに文字列を出力する。最長 80 オンラインヘルプも装備されている。と 文字てある。 a) メニューの定義 , 作成 ころが , ヘルプテキストにも不思議な日本 ②工デイタブル 語が多く , 読んていてすっきりしない メインメニュー , サプメニューを作成す とえば , ダイアログウインドウの仕様入力 文字ラベルのあとに文字列を入力する場 る。必要に応じてメニューセパレータ ( メニ の場面てヘルプ表示するとドダイアログウ ュー文字列間の横枠線 ) などの設定を行う。 合に使用する。入力長 ( 1 ~ 50 ) , 表示長 ア : ゲュ秀明ア外名工珵完ま度 しヒュー : FAX 0 ) ・ ) ビュー こ印 S 旧 1 , 設計 第消 [ E3 コ 最新開発環境レポート 137