P A R T S ◆ C PARTS は、通常アプリケーション開発に必要と思われる画面制御、デー タ入力制御、帳票印刷制御、パーコード印刷制御い SAM 制御などの関数 をソースファイル形式で、しかも低価格で提供しています。 ◆ C PARTS で提供する関数は、特殊な OS を使用する場合を除いて、基 本的には AN 引規格の関数を使用しておりますので、現在市販されている 一般的な C コンパイラーのほとんどで使用可能です。 (Lattice C, MS-C, QuIck C, TURBO C) ◆ C PARTS は、ソースファイルで提供していますので、必要に応じて機能変 更が可能です。 ◆ C PARTS では、表示、印字等の処理を行う関数では、通常フォーマットフ ァイルを使用しています。フォーマットファイルを使用するメリットは、多少の変 更はアプリケーションプログラムの変更をしなくても、エデイター ( 市販のもの です。 ) で簡単に行うことができることです。 ◆ C PARTS は、ライセンスフリーです。 C PARTS を使用して作成したアプリ ケーションプログラムに対しての、特別な契約をする必要がありません。 C- PA RTS—VO 1 本ソースライプラリーでは、フォーマットファイルを使用した帳票印字用の関数を提供していま 一般的に、帳票を作成する場合印字位置、印字桁数、タイトル文字、罫線の印字など、一表の 帳票を作成する場合本体のプログラム、つまりテータの集計なとの処理よりも、前記の項目に ついての調整に多大な労力を費やすのか普通です。 そこで、本 C PARTS では、印字位置、印字桁数、タイトル ( 固定文字テータ ) 、線の有無 については、あらかしめフォーマットファイルで作成しておき、プログラム本体の作業は単に順 番にテータを出力することのみとすることを可能としていま魂 また、フォーマットファイルは、専用工テイターを必要とせす一般的なエテイターでイ乍成すること か出来るため、アプリケーションプログラム完成後ても、次の項目の変更か可能となっていま魂 1 ) 印字位置 2 ) 印字桁数 3 ) 罫線の有無及び罫線の種類 ( 太線、細線 ) 4 ) 固定印字文字の変更 また、アプリケーションプログラム中では次の項目の処理か可能となっていま魂 1 ) 日付文字列の印字 DD YY 、 YYYY 年 MM 月 DD 日、 YY 年 MM 月 DD 日の印字指定及び、 和歴変更が可能。 2 ) 時問文字列の印字 hh 時 mm 分 ss 秒、 hh 時 mm 分の印字指定が可能。 hh:mm:ss 、 hh:mm 、 3 ) 数値データの編集 数値データに対して、 3 桁単位のカンマ付指定、通貨記号付加 ( 、 $ 、円 ) 4 ) 位置設定 テータ印字時にフォーマットファイルの印字対象場所に対して、左詰め、右詰め、センタリング の指定ができます 5 ) 文字の大きさ テータ印字時にフォーマットファイルの印字対象場所に対して、縦倍角、横倍角、縦横倍角、 指定かできます ラブラ 6 ) 文字の強調 データ印字時にフォーマットファイルの印字対象場所に対して、強調印字指定ができます。 7 ) 網かけ データ印字時にフォーマットファイルの印字対象場所に対して、 3 種類の網掛け指定ができ ます。 8 ) アンダーライン付 データ印字時にフォーマットファイルの印字対象場所に対して、アンダーライン付印字ができ ます。 9 ) 上記 3 ) のカンマ付指定及び、 4 ) から 8 ) の機能を組み合わせて使用できます。 ( 実彳」 ) ( フォーマット例 ) 下をのとり物し一した 下をの・・・・し・し第 C - P A 震 T 0 し . 噐一三一一三 . いイ・・まして . よな鋼・の第員に アイ第ル載第一 «PARTS—VOL-.2 4 , 00 フラー発 本ソースライプラリーでは、 PC9801 用プリンター P 日 201 でバーコードを印字するための関数 を提供しま魂 バーコードの使用は POS 関連、配送関連なと各種の流通業界だけでなく、最近ではロ M の 返信用はカに印字したり、招待状に印字することにより、応答の管理をしたり、自社製品にバ ーコードを付けることにより商品管理をしたりなど、いろいろな用途で使用されるようになって いま魂 本ライプラリーでは、フォーマットファイルを使用することにより、通常文字の印字位置、桁数、 バーコードの印字位置を随時変更可能とし、手軽にバーコードの印字を行えるようにしてし、ま 使用可能なバーコードは次の通りです。 1 ) 」 AN 一般的な流通商品に付加されていて、通常は 13 桁のコードを使用しています。 ただし、短縮コードとして 8 桁も使用しています。 . 2 ) 主に配送個包のバーコードに使用します。 ー T F 比較的初期に開発されたバーコードで、図書館の貸出しカード宅配便の配送用、 3 ) NW7 レンタルビデオなどで使用されています。 4 ) CODE39 1 ) ~ 3 ) のバーコードでは、使用できる文字が数字に限られますが、 CODE39 では 数字以外にもアルファベットが使用できます。 本ライプラリーでは上記バーコードの印字の際、必要な機能を全て提供していま魂 1 ) 印字バーコードの桁数の指定 2 ) チェックコードの付加 3 ) 印字可能文字のチェック 4 ) 印字バーコードの倍率設定 5 ) 付加数字の印字の有無
ポインタと配列 ( 1 ) mo 第 3 回 C 言語の入門者にとって , もっとも難解な言語機能のひとつにポインタが挙げられる。今回は , ポインタ について , 1 次元配列との関係に限定して説明する。 復習はこんなところて十分だろうか ? (List 1 , 2 参照 ) 。 配列とホインタの違い ・配列名はポインタ定数てある。したが 配列をアクセスする機能 C 言語入門者にとって , ポインタはもっと って配列名には代入てきない も難解な言語機能のひとつに挙げられてい 最初の問題は , C においては配列表記とポ ・ポインタ変数は ( const てないかぎり ) 定 る。ポインタを難解にしている要因のひと インタ表記の混用が可能だという点て、ある。 数てはなく変数てあり , それには代入 っとして , ポインタと配列が密接な関係を こて、配列表記とは a [ i ] のような形式を指し てきる。 もって存在している ( 絡み合っている ている。また , ポインタ表記とは * (a 十 i) ・配列は宣言時に定数式て添え字を指定 ことが挙げられるだろう。しかし , C てプロ といった形式を指している。 しなければならない。配列名が示すオ グラミングを行う場合に , ポインタを避け プジェクトを先頭に , 宣言時に指定し たとえば , 次の断片的なプログラムの記 て通ることはてきない。そこて今回はポイ 述はいずれも正しい ( List 3 , 4 参照 ) 。 た数のオプジェクトが , 配列オプジェ ンタと配列の関係を考察し , 両者の複雑に 関数 f00 て、は配列 a をポインタ表記て、用 クトの生成された時点て確保される。 入り組んだ関係に光を当てることを目標に い , 逆に関数 bar て、はポインタ p を配列表記 それはコンパイル時かもしれないし , する。とりあえず今回は , 1 次元配列に限定 て、使用している。しかしこれらは文法的に 関数の内側て auto 配列として宣言され して話を進める。 2 次元以上の配列とポイン 正しいプログラムて、ある。さらには , 両者 れば , その関数に制御が移った時点 ( ス タの関係は , 回をあらためて取り扱いたい を混在させることも可能てある。つまり次 タックフレームが生成された時点 ) て 初心者によくあるまちがいは , ポインタ のような List 3, と List 4 ' もまた , 文法上は 保されることになる。 と配列を混同してしまうことてある。実際 正しいプログラムてある。 ・ポインタ変数は「指し示す先のオプジ には両者はまったく別のものてある。しか 実際 , 配列の 0 番目の要素を指定するに ェクトの型情報」をもつにすぎない。実 し , C 言語の意味上および表記上て , 両者は は , a [ 0 ] と書くよりも * a と書いたほうが短 際にポインタ変数が指し示す先に正し 非常に紛らわしくも似かよった表現が可能 くなるし , ポインタ p がポイントしている要 くオプジェクトが存在するかどうかは , て、あるために , どうしても誤解する人が出 素の 10 個先の要素を指定するには , * (p + プログラマが保証しなければならない てきてしまう。 10 ) と書くよりも p [ 10 ] と書いたほうが簡潔 また , ポイント先に存在するのが実は 今回は , 配列とポインタとが密接な関係 に表現てきる。このため , このような混在 オプジェクトが複数個並んだ配列なの をもって・いるということを述べるのだが , 記述はしばしば見受けられる ( とくに , 少し か , あるいは単一のオプジェクトなの それに先だって , まず両者は違うものてあ てもタイヒ。ングを省略しようという怠惰な かの区別もプログラマの責任て、管理し るということをはっきりと確認しておこう プログラマのコードては : ー ) ) 。 なければならない きだあきら List List int a [ 100 ] : int foo(void) return a[0] + a [ 10 ] : int a [ 100 ] : int bar(void) 1 よワ朝っ・ 4 ・ L.O 《 0 8 1 ーっ -4 ・ 0 《 0 int *p return *p 十 *(p 十 10 ) : 118 CMAGAZINE 19 10
GM / クラフ作成プロクラム BGM/EX 価格 \ 98 ′ 80 、価格 \ 148 ′ 000 ぃ 引 い 叮 い 面に表示可能 25 行目に文字列を表示してもスクロールしてしまうことはありません・裏ートから箱型の文字列をコピー、移動 / * テキストから箱型に文字属性を取得、貼り戻し / * カー ・ CCF / 総合コンソールコントロールライプラリ fo 「 FORTRAN 12 種類のグラフ作成機能を提供するパッケーシです例えば、必要なバラメータを設定し、関 数を呼び出すだけで円グラフや棒グラフを簡単に描画することができます。さらに、タイルバ ターン、ラインバターンとの対応、日本語コード文字列をグラフィック画面に表示する機能を サポートしているので、ビジネスアプリケーションて必要とされるあらゆるクラフ情報を表現 できます。 ・必要なバラメータを設定し、関数を呼び出すだけで簡単にグラフを描画できます。サンプル プロクラムを見ればすぐ理解できます。円グラフの例 cg(vlist,vont,cx, cy, 「 . scalel, scale 2 ) 3 ・粍種類のグラフ作成機能・描画位置、大きさを好みに合わせて描画できる ーサポート関数を用意タイル / ヾターン ( 塗りつぶしバターン ) 、ラインバターンの一覧を表示 する関数により、例えばタイルノヾターンとその内容 ( 例えば“商品名” ) との対応を簡単に表示 0 きます。ーー多彩な表現か可能円グラフ、ドーナツッグラスパイチャート、帯グラフでは ー。 % または数値の表示 / 非表示の選択か可能、縦棒グラフ、横棒グラフ、折線クラフではスケー ルの表示 / 非表示の選択が可能、タイルバターン、ラインバターンと表示色の組み合わせ、ボ ーダーカラー ( 円、棒等の外枠の色 ) 、スケールカラー、 % または数値の表示色の指定か可能な ため、多彩な表現が可能です。ーすぐ使える、拡張もできる 24 種類のタイルバターン、 10 種類のラインバターンを登録済み、さらにユーザー登録も可能・八一ドコピーグラフィッ ク画面、テキスト画面、グラフィック画面とテキスト画面の重ね合わせが可能。日本語コード (Shift-Jis: 全角、半角、 1 / 4 角 ) 文字列をグラフィック画面に表示できるので、カイドメ ッセージ等をテキスト画面に表示したままの状態でもクラフィック画面だけのハードコピーを 印刷することかできます。 ◆ CBGM/E& では XLSD XL2 、日 L のハイレゾリューション / ノーマルの両モードに対応し ており、さらにどちらのモードでも動作する互換モード ( 自動判別 ) もあります。 以下の関数に「 G 「 a ロ hic & Mouse 』または「 G 「 a ロ h に & Mouse / EX 」の一部の関数が Key & Display 価格 \ 29 を 800 Key & Dis ay はソフト開発で欠かせないファンクションキー及び ANK 、漢字の入力、 V 日 AM を直接アクセスしての文字表示等 100 を越える関数で構成されています。ファンクション キー自身には一切特別な値や文字列を設定せすに、 B 旧 S レベルの処理で行っているため、ど のレベルの関数ても同し処理てファンクションキーの取得も可能です。また、 V 日 AM を直接 アクセスして表示するので 25 行目に文字列を表示してもスクロールしてしまうことはなく、す べての 1 バイトキャラクターコード ( 0X01 ー 0Xf7 ) を表示することがてきます。文字表示、文 字属性の設定 ( 色 / 属性 ) 、 V 日 AM 上の指定領域を切取り、貼り戻し、表 / 裏画面の切り替え 表示、全画面 / 部分スクロール、ファンクションキー表示等の機能を持っています。 ■キー入力ファンクションキー及び ANK, 漢字の入力。ファンクションキーと SH ー FT 、 CT 日 L キー等のシフトキーとの組合せで、別のキーコードを得ることもてきます。■日本語 入力フロントエンドプロセッサ ( FEP ) のコントロール日本語入力 FEP の ON / OFF 、入 カモードの切り替え等のコントロールかできます。対象となる日本語入力 FEP は ATOK4 5 / 6 / 7 ( 6 モート ) 、 VJE - / 爲です。・漢字の入力は FEP 等を介して行なわれ、 2 八イト で返されます。・ V 日 AM を直接アクセスして文字表示を行っているので非常に高速です。 すべての 1 バイトキャラクターコード ( 0X01 ー 0Xf7 ) を表示することかてきます。・全画 画面を有効に利用できる表 / 裏画面を切り替えて表示選択できるのてスピードアップ、 VR AM の有効利用が可能てす。・画面の指定領域を切取ったり / 貼り戻したりか簡単にできま ーすい・画面上に表示されている内容をそのままファイルにセープしたり、ファイルにセープ ーざれた画面内容を再表示することが可能です。セープ / ロードする領域を指定することができ るので全画面 / 部分のどちらも可能です。・すべての文字属性 ( シークレット、プリンク、リ バース、アンダーライン、一バーチカルライン、色指定 ) を画面上の指定領域に対して設定できる ので表現力豊かな画面表示か可能です。ー多彩な画面操作機能を装備画面上の指定領域に 対する文字 / 文字属性のコピー、移動、消去を行う関数が用意されています。・画面上の指 いー一定領域に対する上下左右スクロール機能により、全画面 / 部分のスクロールが可能ぐす。ーー・ 含まれます。 ンの作成 ーダチャート / ラインバターンリストの表示 / タイルバターンリストの表示 / タイルバター み重ね ) / 縦棒グラフ / 縦棒グラフ ( 複数 ) / 縦棒グラフ ( 積み重ね ) / 帯グラフ / 折線グラフ / レ 円グラフ / ドーナツッグラフ / バイチャート / 横棒グラフ / 横棒グラフ ( 複数 ) / 横棒グラフ ( 積 EX 」ても提供 ) ノーマルモードてのみ使用可能。 * は fWindow & MenuJ および TWindow & Menu/ 変更 / スクロールし、文字列を表示 / * 上、下、左、右スクロール ( 日本語入力 FEP 制御関数は 得 / カーソルプリンク、表示の ON 、 OFF/* テキストの切り替え / C 日 T のモードの検査、 置に文字列を直接表示 / * 表示文字が漢字か否かの検査 / テキストの文字、文字列コードの取 に ASCII 、全角、文字列を直接表示 / 指定されたバイト数分文字列を表示 / 現在のカーソル位 部分、文字単位ての消去 / ファンクションキー表示の退避、再設定、表示、消去 / * テキスト 左右に移動 / カーソルホームボジションを設定 / カーソルをホームホジションへ移動 / 全部、 ソルを指定座標に移動 / * カーソル座標の取得 / カーソルを移動範囲内で移動 / 力ソルを上下 接入力 / * テキストを箱型に消去 / * テキストの指定範囲のイメージの取得、貼り戻し / テキス キーを 2 バイトコードで返すキー入力 / 全角、 ANK 文字キー入力 / * ファンクションキーの直 ATOK 、 VJE のコントロール / ファンクションキーの退避、設定 / * 漢字、ファンクション 関数 ( 抜粋 ) プ / リストア / 設定 / 消去 etc ・ ルの表示 / 非表示切り替え、カーソルプリンクの ON / OFF 、ファンクションキー表示のセー 指定文字 / 文字属性による V 日 AM の消去関数、指定座標から n 文字を消去する関数、カーソ 動範囲を一定領域に限定する関数も用意しました。■まだまだある、こんな機能、こんな関数 動位置が漢字の 2 バイト目の場合はスキップし、次の位置へ移動する関数群です。カーソル移 動関数群を用意しました。この関数群は移動位置が漢字の 2 バイト目か否かの検査を行い、移 移動、カーソル位置取得機能はもちろん、表示文字列のコード識別機能を使用したカーソル移 限定機能により、多彩なカーソルワークか可能になりました。通常の上下左右移動、座標指定 ます。■カーソルコントロールシステム 2 種類のカーソル移動関数群とカーソル移動範囲 また漢字の 2 バイト目か等の識別機能により、現在表示されている文字を検査することかてき し ASCll/Shift-Jis コートへの変換が可能てす。・指定座標の表示文字が漢字か否か、 現在表示されているすべての 1 バイトキャラクタコード / 漢字の文字列を V 日 AM から取り出 フィールドリファレンス番号によって指定されたフィールドの総計を得る ースの内容を出力テパイスに書き出す / 関連テータベースと管理データベースを関連付ける / レコードをシーケンシャルに読む / レコードバッフア内のレコードを n 番目とする / テータベ ンする•[extended] レコードかプランクかどうか調べる / メモリバッフアに入るだけの と拡張子を結合する / ファイル名から拡張子、ティレクトリ名を取り除くノファイルをオープ ァイル名を探す / セクションのロック、解除 / ファイル名に適した文字か調べる / ファイル名 報を書き出す / メモフィールドを読む、テータが存在するか調べる E[utility] 次の該当フ ックの解除■ [memo] 内部的にテータが格納されているかを検査 / メモファイルにある情 し直す / キーをサーチ / ポインタを先頭へ設定 / インテックスファイルの型を文字で返す / ロ ポインタを最後尾に移動、指定キーに設定 / ファイルリファレンス番号の取得 / インテックス ンデックスファイルを作成、オープン、クローズ、ロック、ロックの解除、選択キーの追加 / 値フィールドの値を dou e 得る / 指定フィールドのバイト数の取得 U[index file] イ 番号の取得 / 論理フィールドが T 日 LJE か FALSE かの検査 / 指定フィールドの型の取得 / 数 アの先頭ポインタの取得 / レコードバッフア内の文字の総数の取得 / フィールドリファレンス の取得 / フィールド名の取得 / カレントテータベースのフィールド数の取得 / レコードバッフ る / 演算子の優先順位の取得■ [fieIdJ 1 ロ進数の桁数の取得 / フィールドリファレンス番号 Cexepression] dBASE の式を評価し、結果を得る / d 日 ASE の式を中間コンバイルす タベースを選択後、ロックする / レコードを書き出す / 指定された範囲のレコードの削除・ ・走行環境等 1 CodeBase4 価格 \ 98 を 000 い い CodeBase4 は C 言語から dBASEIII 、 dBASEIIIPIus 、 dBASEIV 、 C ⅱ P ロ e 「のファ イルシステム ( テータベース、インテックス、メモ ) とコンバチプルなテータベースライフラリ です。これらのテータベース言語にコンバチプルな関数を用意しているので d 日 ASE Ⅲ / us からの移植も簡単にてきます。 dBASE ルと比較してデータアクセスは 5 倍速く、ループでは なんと 330 倍も速くなります。 ・高速処理■最大 1 , 022 フィールド、 2 , 000.000 , 000 レコード ( 論理値 ) ■メモリモテル S ( 一部機能が限定 ) / M / L ■ 2.000 行程度のソースプログラムで 100kb 程度の . exe ファイル を作成可能■マルチューサー対応ー PC -9800 シリーズではテータベースライプラリで漢字 の使用は可能■旧 M - PC 版てはウインドウ、メニュー関数も付属■英文マニュアル◆対 応 C 言語 : Mic 「 osoft-C 4.0 / 5.1 または Tu 「 bo - C2.0 関数 ( 抜粋 ) ・ [ ock ] プロックキーを追加、削除 / フロックを検索 / キー番号のスキップ•cconve 「 sion] 指定長の ASC 文字列を dou e / int / ng に変換 ECdatabase] データ べースファイルの作成、オープン、選択 / 指定レコードに削除マークを付加 / 削除マークが付 加されているかの検査 / レコードを読む / ロック / 削除マーク付きのレコードを削除 / レコー ド数、番号の取得 / 参照番号の取得 / テータベースの選択 / インテックスファイル内の先頭レ コードを読む / カレントテータベースのロックの解除 / データベースのオープン、選択 / テー ・まだまだあるこんなライプラリ ・ CIisp 7AX-WINDOW BFMR-WINDOW EFMR-GRAPHIC ・ Ptree & Symtab お求め方・ ) 去 ー Lisp ライク関数ライプラリー ー AX マシン用テキストウインドウ / メニューライプラリー価格 \ 98 ′ 000 ー FMR - 50 / 60 用テキストウインドウ / メニューライプラリー ー FMR - 50 用グラフィックライプラリー ー構文解析 / シンポルテーカレモジュールー 価格 \ 79 ′ 800 価格 \ 69 ′ 800 価格 \ 98 ′ 000 価格 \ 98 ′ 000 価格 \ 98 ′ 000 ・お近くのパソコンソフト取扱店または弊社までこ注文ください。 ※すべての表示価格には消費税は含まれておりません。 クイック資米斗イ寸サ - ーピス ・いますく、資料をこ希望の方はお電話ください。 ・こ注文の際に製品名、対象コンバイラ ( ウアージョン ) 、メティアを指定してください。 FAX で資料をお送りいたしま魂 ・ NEC PC -9800 シリーズ ( LT 、八イレゾ リューションモードを除く ) tCCF/EXJs CBGM/EXA CG 「 aphic & Mouse/EXJs tWindow & Menu / EX 』は XL 、 XL2 、日 L のノ、イレゾリューシ ョン / ノーマルの両モードに対応。 ・ MS-DOS ・・ Ve 「 sion 2 Ⅲ / 3.1 / 3.3 ・対象 C 言語・・ Mic 「 osoft-C 4.0 / 5.1 Quick-C 1 . 1 / 2.0 Lattice-C 3.1 / 4.0 Tu 「 bO-C 2.0 ・・・ 5 ″ 2HD 、 3.5 ″ 2HD 、 5 ″ 2D ( 旧 M - PC フォーマント ) ・メティア ・機種 ・ PHONE 03 ー 866 ー 8635 ・ FAX 03 ー 866 ー 8637 ・〒 1 1 1 東京都台東区蔵前 2 ー 8 ー 10 ゾま株式会社ティッフス
続々登場。 PC986 シリーズ ( ハイレゾルーションタイプを除く ) 、 MS-DOS Ver3.l 以上 MS-C Ve 「 4.0 以上 (Microsoft) Lattice C Ve 「 3.0 以上 (Lattice) Quick C Ve 「 1.1 以上 (Mic 「 osoft) TURBO C Ve 「 1.5 以上 (BORLAND) ※上記会社名、製品名は各社の商標または登録商標です ( 対応機種・ OS ) ( 対応コンヾイラー ) O*PA ” S VO 3 企靤御 本ソースライプラリーでは、画面表示、テータ入力用の関数を提供しま 本ソースライプラリーでは、画面フォーマットファイルを使用することにより、入力位置、裄数、 タイトル ( 固定文字 ) の指定か随時可能となっていま魂 また、本フォーマットファイルには、入力テータの編集の条件、表示色、ホックスサイズ、ボック スカラー、罫線、初期テータなとの各種バラメータの設定も可能ですから、プログラム作成後 でも、上記項目についての変更か可能となっています。 また、ウインドウ単位で上記フォーマットファイルを設定しますから、かなり複雑な処理も可能 で魂 更に、メニューで設定されたウインドウでは、メニュー選択の処理関数を用意していますので、 ユーサーは本関数を呼ぶだけでメニュー選択処理か出来ま魂 フォーマットファイルで設定可能な項目は次の通りで魂 1 ) ウインドウタイトル 2 ) ) ウインドウ表示位置、サイズを設定 3 ) ウインドウポックスカラーの設定 4 ) ウインドウ左右スクロール単位の設定 5 ) ウインドウ罫線モードの設定 6 ) 入力項目への初期値の設定 7 ) 入力項目のアトリビートの設定 8 ) 表示イメージはそのままで、入力位置、桁数、固定文字を設定 また、入力テータの編集について次の機能かありま魂 1 ) 入力文字種の限定 2 ) 入力データの右詰め表示 3 ) 数字の右側入力 4 ) 数字の 0 抑制表示 5 ) 入力数字データをカンマ付数 字に変更して更表示 本ライプラリーのその他の仕様は 次の通りです。 1 ) マルチウインドウ処理が可能 ( 最大ウインドウ数はメモリー の限界まで ) 2 ) 入力桁数は 80 字まで 3 ) フォーマットファイ丿レに言殳定され ている機能の解除、または機 能変更 4 ) 表示ウインドウのスクロール 制をち 、′イ・を フ O トの 一すは 数フき数 関ので関 ン下がン 一以と一 リこリ ク 4 るク郡 ス 6 すス•< ↓ ー秋島ビル 処理を慢り返しますか いいえ し ED OrPARTS-VOL; 本ソースライプラリーではコ SAM を C て使用可能にするための関数を提供しておりま魂 ー SAM ファイルは、テータ部分とキーテータ部分を独立して管理しており、 1 つのテータを検 索するためにいくつかのキーを設定することか出来ま魂 また、呼び出し時には設定キーでテータを呼び出すことか出来ますから、テータ管理が格段に 楽になりま魂 主な機能は次のとおりで魂 1 ) ファイルに登録されたデータをキーを使って管理することができます 2 ) 設定可能キー数は最大 45 キーです。 3 ) 同時アクセス可能キーは最大 10 キーです。 ( キー間の条件付検索はできません ) 4 ) キー名称は最大 16 文字です。 C-PARTS-VOC.5 グラフ作成、一スフラー 本ソースライプラリーでは、フォーマットファイルを使用した各種ヒジネスグラフ作成関数を提 設定、刻みなどの項目もフォーマットファイル中で指定できます。 供しま魂 また、同一画面上に複数のグラフも表示可能で魂 ( 1 グラフにつき 1 フォーマットファイルか フォーマットファイルを使うことによって、プログラムの変更なしにグラフの種類、テータの項目 対応しま魂 ) 数、グラフの表示位置・色・サイズ・種類・各種文字修飾の有無・タイトル等を変更することかで また、現在あるテータをもとに将 きま魂 ( 通常ユーサーが使用する関数は 1 個だけです ) 来のテータを予測する、テータ予 また、表示用のテータはテータファイルから取り込む方法と、アプリケーションプログラム中で 測関数も装備していますので単に 渡す方法があり、用途により選択できま魂 既存のテータをグラフ化するにと 作成できるグラフは下記の 5 種類ですか、これらには多数のバリエーションがありますので、組 とまらず一歩進んだプレセンテー み合わせによっては数百におよふグラフを作成することかてきます。 ションを行うことかできるものと思 われま魂 1 ) 棒グラフ ( ヒラミッドグラフを含む ) また、これらのグラフを作成するた 2 ) 折れ線グラフ めに用意された、グラフィック関数 3 ) 円グラフ ( ドーナッグラフを含む ) や文字の拡大・縮小・網掛け等を 4 ) レーダーチャート 行う文字修飾関数は、単独で使用 5 ) 散布図 することか可能です。 上記グラフ作成時の凡例、各テータに対応する線種、色、ハッチングノヾターン、項目名座標の ・プログラム開発ツールシリーズ C DATA SCOPE 通常、プログラムを作成しても、テスト用テータの作成、作成後のテータ 1 ) レコードの定義はプログラム起動後に定義する方法と、 lnclt 用 e ファイルで指定する方 法がある の内容の確認なと、本体プログラムの作成以外の労力で結構手間取るこ 2 ) 使用可能データファイルは固定長データファイル とかあるものです。そこで、登場したのか、「 C DATA SCOPE 」です。 3 ) レコードの初期設定 ( 一括指定、部分データの設定 ) 「 C DATA SCOPE 」は、 C での st 「 uct の表記で、レコードのフォー 4 ) レコードデータの変更 ( stru で記述された型での入力が可能 ) マットを記述することにより、プログラムで使用するファイルのテータをア 5 ) レコードデータの削除 6 ) レコードデータの追加 クセス可能にするもので、次のような特徴かあります。 7 ) 画面上での指定データの検索、表示 8 ) レコードデータのダンプ ( 打ち出しフォーマット、打ち出しデータの指定が可能 ) 5 ) キーとしてイ吏用肯皀なデータの型 ( ま cha 「 . lnt. unslgned lnt,long, unslgned long double です。 6 ) キー長はキーの型を cha 「で指定したとき最大 128B です。他の数値型の場合はそれぞれの 型のサイズによります。 7 ) 最大レコード長は 32KB です。 8 ) 最大レコード件数は 232 ー 1 件です。 ( 実用的な件数は各キーのデータ型によります ) 9 ) 検索方法は指定キーに対しての一致データ検索。また前回検索データについて昇川頁検索 及び降順検索が可能です。また、一致キーがなかったときは、検索キーに最も近いキーを検 索します。 10 ) 検索速度は各コンバイラー、キー長、データ長に依存します。 11 ) 入出力関数には簡易アクセスタイプと高速タイプの 2 種類あります。 9 訓 0 発売中 タタタタ タタタタ デデデデデデデデ S Vo 5 1 2 3 4 5 6 7 8 月月月月月月月月 お求め方法 お近くのパソコンソフト取扱店または弊社までこ注文 下さい。弊社へこ注文の際は、メティアサイズをこ指 定下さい。 ( 現金書留または振込 ) また、詳しい資料を こ希望のかたはお電話下さい。 アイセル株式会社 〒 171 東京都豊島区池袋 2 丁目 53 番 8 号秋島ヒル 5F TEL. 03 ( 988 ) 6973 ( 代表 )
る。このポリモフィズムにより , プログラ Object ムが自然言語のように可読性の高いものと となる。記述形式がまったく同じて、あるこ なるのて、ある。 とに注目していただきたい。陽に処理の相 たとえば , 「走る」という動詞を考えても 手先が指定て、きる処理系は , 現実に存在し らいたい。自動車も人も , 「走る」ことがて、 ているのて、ある。 CRT p 「 intWithFo 「 mat ("hello, きる。実際には人が走るのと , 自動車が走 world. l'm an Object *n"); ポリモフ不ズム るのて、は , その実態はまったく異なるのて、 あるが , 同じ「走る」という語が使えること のようになるて、あろうか。出力する主体を により急いて、移動しているという , 行動内 さて , この関数のもっ処理内容に関する 明記し , その主体に当 ' m 〃といわせるのて、あ 容を推測て、きるのて、ある。 情報は処理先によって相違するため , 同じ このプログラムを処理するコ る。実際に もし , すて、に C 日 T printWithFormat とい 識別名て、違った処理を指定することがて、き ンパイラがあったとして , 実行してみると , う式のもつ意味を理解しているとしたら , るようになる。 CRT が処理を行うか , File CRT に文字列を出力するというよりは , CRT fp 「 intf( ) と書くよりは , File printWithFormat が行うかを指定することによって , 同じよ が自ら、、 he Ⅱ 0 , world" と述べている , そん と書いたほうが , 対比 , 推定が容易になる うに printWithFormat と書いても , 実際の処 な印象を受けないだろうか。 CRT という主 ため , プログラムがよりわかりやすいもの 理を変えることがて、きるのて、ある。 体を想定するならば , CRT が世界を眺めて になるのて、ある。 このように , 同じ識別子が多くの意味を いるようにさえ見えてくる。まさしく , そ それて、はなぜこのように , 処理内容の指 もっことを , ポリモフィズム ( 多態 , 多形 ) れがオプジェクト指向の第一歩なのて、ある。 定と処理の相手の指定を分離させてしまう と呼ぶ。オプジェクト指向のなかて、も重要 ちなみに , 同じ処理を Smalltalk ー 80 て、記 のだろうか。 な概念て、ある。このポリモフィズムは , 人 述すると , そもそも , 関数やサプルーチンは , ある 間の自然言語にも備えられている要素て、あ Transcript show. 'hello, WO d. l'm an 特定の処理をほかのモジュールにまかせて , TabIe1 メッセージ式の記述形式 プログラムの一部の変更をほかに及ばない ように局所的なものにしたり , プログラム プログラミング言語 自体の可読性を高めて , わかりやすいもの にするという目的をもったものて、ある。端 的にいえば , オプジェクト指向は , それら の大きな目的をより高度に実現するための 技法と考えることがて、きる。オプジェクト 指向を理解する場合 , そのモジュールの局 所性やプログラムの可読性は非常に重要な 要素なのて、ある。以降て、は , オプジェクト 指向として結実するいくっかの発想につい て解説するが , まずこのメッセージ式に登 場したオプジェクト , メッセージというふ たつの基本的な概念について触れておこう。 プジェクトと 情報隠蔽 前項て、は , printWithFormat( ) という手続 が所属する処理の相手先を擬人化したもの として , CRT や FiIe,Array などという主体 ェクト指向言語のための ( C 十十て、はない ! ) 例 題プゴグラムとして記述するならば , main( ) 式 述 = = ロ 処理先△処理内容 式 般 Object △ message:arg Smalltalk-80 [Object △ message:arg] Objective-C クラス変数・メンノヾ関数 ( a 「 g ) C 十十 (send △ Object △ arg) Flavor 60 CMAGAZINE 1990 10
List 2 を ion 行 ( 「 5 List 3 int bp, int si) 1 : 2 : 5 : 6 : 7 : 8 : 10 : #include く stdio. h> 2 : 3 : 4 : 6 : 7 : 8 : 10 : 14 : 20 : 21 : } ックを余分確保している場合は , 1 : #include く stdio. h> #include く dos. h> int Num, 5 : char d [ 128 ] : int handler(int err, int ax, hardresume ( 0 ) : 1 1 : vo i d ma i n ( ) { harderr(handler) : do { printf("Drive ( A : 1 , B : 2. scanf("%d", &Num) : if( getcurdir(Num,d) printf("Drive Xd e ー se printf("Drive Xd } wh ⅱ e (Num トの : 燔 not ready. Yn ” Num) : 3 : char *get(void) char s [ 10 ] : scanf("Xs" return(s) : 1 1 : VO i d ma i n ( ) printf("XsYn", get()) : 3 : ma i n ( ) 2 : 1 : #include く stdio. h> List 4 Nun) : 燔 ready. Yn" 0 メモリの割り当てを行うため に , allocmem と malloc を使ってい るのですが , 正しくメモリが確保 されないことがあるようです。 A malloc や calloc などは , すべ てのメモリ管理を自分自身て行う ことが前提となっています。 oc mem は , これらの関数の動作に関 与せ $DOS のメモリ割り当てファ ンクション ( 48h ) を呼び出します。 このため , プログラムは ma Ⅱ oc と a Ⅱ ocmem を併用すると正しく動 作しなくなることがあります。 locmem と , ma Ⅱ OC や ca Ⅱ OC などの メモリ割り当て関数は併用しない てください。また , fopen や strdup など間接的に m 訓 oc を呼び出して いるものもあります。とくに必要 5 : 6 : 7 : 8 : 9 : Char c; = 0X80 : C printf("XxYn" printf("XxYn" (unsigned char)c) : 内容が壊されずに正しく動作する 場合もありますが , プログラムと しては正しくありません。 0 ha 。型の変数の値を 16 進数で 表示したいのですが , printf を使う と先頭に ff が表示されることがあり ます。 通常 C コンパイラは , char や sho 「 t を関数の引数として渡す場合 に , 自動的に int 型に変換されま す。 char は , とくにオプションを 指定しないかぎり sig ned 型 ( 符号 っき ) てすから , int 型に変換される 場合は符号が拡張され , 0X80 以上 の値は 16 進て 0xFF ? ? という値にな ります。これを , % X などの書式指 定て表示すると先頭に余計な ff と いう文字列が付加されてしまいま す。この場合は , 符号拡張されな いようにあらかじめ無符号の cha 「 型 (unsigned char) に変換してお くとよいてしよう。 (List 4 参照 ) A てなければ a Ⅱ ocmem を使わないよ うにしたほうがよいてしよう。 0 インラインアセンプラをふく んだプログラムをコンパイルする と , 同じ行の警告やエラーが 2 回表 示されることがありますが , なぜ ですか。 A プログラムの先頭て、 # p 「 agma in ⅱ ne を指定しなかったり , ー B オプ ションをつけずにインラインアセ ンプラを使ったプログラムをコン パイルすると , 初めて asm 文に出合 ったときに最初からコンパイルを やり直します。これは , 通常は直 接コンパイラがオプジェクトを生 成しているのに対し , インライン アセンプラを使った場合はアセン プリコードを生成しなければなら ないためてす。このとき , asm 文に 出合うまての行て発生した警告や 工ラーは , 再度コンパイルされる 段階てもう一度表示されます。コ ンパイル上 , 余計な時間がかかる 点以外てはとくに問題ありません が , インラインアセンプラを使う 場合 , #pragma inline 指令か , —B オプションを使うようにしてくだ さい 0 TurbO Debugger 2 . 0 で , TD386 と NEC の MS-DOS に付属し ている RAMD 旧 K. SYS を使用する 場合のオプションの指定は何が必 要ですか ? A RAMDISK. SYS を使う場合 , オプションはとくに必要ありませ ん。 CONFIG. SYS て TDH386. SYS と RAMDISK. SYS を指定す るだけてす。ほかにプロテクトメ モリを使用するアプリケーション またはデバッグ中のプログラムが プロテクトメモリを使用する場合 にはそのサイズをオプションて指 定する必要がありますが , そのア プリケーションが 0 : 401 番地 ( 使用 可能なプロテクトメモリサイズ ) を 設定している場合はそのかぎりて はありません。 lnformation from Compiler Makers 159
三ロ はじめて学ぶプロクラミンク List 1 て、は w すなわち write モードて、ファ イルをオープンしていました。ファイルオ ープン時に , そのファイルは書き込み専用 て、ある , と指定をしておいたわけて、す。 の指定を行うのが fopen 関数の第 2 引数て、 す。この引数の取り得る値を TabIe 2 に示し ました 0Table 2 ー 1 がファイルのオープンモ ードを表しています。この指定によってフ アイルは読み , 書き , 追加 , 読み出し / 更 新 , 書き込み / 更新 , 追加 / 更新の指定がて、 きます。これに加えて TabIe 2 ー 2 の文字を付 加することにより , テキストモード , バイ ナリモードの指定がて、きます。 さて , List 2 を実行してみてください のプログラムては read モード <abcde. xyz と いうファイルをオープンしています。 read モードはそのファイルがすて、に存在するこ とを前提にしています。しかし , このファ イルは用意してありません。ところが List 2 のプログラムを実行しても , ファイルのオ ープンは失敗しているはずなのにとくに工 ラーがて、るとか , 変わったことはなにも起 こりません。逆にいえばファイルオープン 時のエラー管理は自分自身て、行わなければ ならないわけて、す。 fopen 関数て、はファイル のオープンに失敗した場合 , NULL が返っ てくることになっていますのて、 , これを利 用したエラー管理の例を List 3 に示します。 fopen て、オープンされたファイルに対して 実際に入出力を行うためには , getc, fgetc, fgets, putc, fputc, fputs, fscanf, fprintf などといった関数 ( マクロ ) を用います。 れらの関数は以前にててきた , getchar, putchar, gets, puts, scanf, printf とほぼ同じ働きをします。 scanf , P ⅱ ntf など はすて、にオープンされている , 標準テキス トストリーム (Table 3 参照 ) に対して読み書 きを行っていました。それに対し fscanf, fp 「 intf といった今回説明する関数などは , ユ ーザがオープンしたファイルに対して入出 はじめて学ぶ C プログラミング 135 ・形式 int fscanf()l LE * stream, const char * format, argl, arg2, ・機能 ファイルから文字列を入力し , 入力書式制御にしたがって変換し , 変数に値を格納する 関数名 printf ・形式 int printf(const char *format, argl, arg2, ・機能 指定された変換仕様にしたがって各引数の値を標準出力へ文字列として出力する 関数名 fp 「 intf ・形式 int fprintf(FlLE *stream, const char *format, a 「 91 , a 「 92 , ・機能 指定された変換仕様にしたがって各引数の値を文字列に変換しそれをファイルに出力する 5 プロック入出力 関数名 fread ・形式 sizet fread(void * ptr, size t size, size t n, FILE * stream) , ・機能 入力ストリームからプロックでテータを読み込む。プロックの形式は , 大きさ size の要素が n 個 からなる 関数名 fw 「 ite ・形式 size t fwrite(const VOid * ptr, size t size, size t n, FILE * stream) , ・機能 大きさ size の要素が n 個からなるプロックテータをストリームに書き込む 6 ファイル位置設定 関数名 fsee k ・形式 int fseek(FILE *stream, long Offset, int origin) , 0 「 igin の位置から 0 幵 set で指定されたバイト数だけファイル位置を移動する ・機能 関数名 ftell ・形式 long ftelI(FlLE *stream) , ・機能 ファイルの現在位置を調べる 関数名 rew ・ ind ・形式 VOid rewind(FILE * stream) , ファイルの位置をそのファイルの先頭に移動する ・機能 関数名 fgetpos ・形式 int fgetpos(FILE * stream, fpos t * pos) , ファイルの位置を得て変数に格納する。この関数はれ関数を用いて実現できる ・機能 関数名 fsetpos ・形式 int fsetpos(FILE * stream, const fpos t * pos) , ・機能 指定された位置にファイルの位置を移動する。この関数は fseek 関数を用いて実現できる 7 ファイルの状態を表す マクロ名 feof 匚 , ーロ
また , 配列のサイズを指定することによ り , 次のような 2 タイプの初期化を行うこと もて、きます。 char cc [ 4 ] ー "ABC" char cc [ 3 ] ー "ABC 上記のふたつの例て、は , 初期化リストの サイズが同一て、あるにもかかわらず , 配列 のサイズ指定が異なっていますが , どちら の場合にも正常にコンパイルが行われます。 配列サイズとして 4 を指定したものは , 配列 サイズを省略した場合と同じ結果となりま すが , 配列サイズ 3 を指定したものは , 以下 のような宣言と等しくなります。 浮動小数接尾子 文字 文字ェスケーフ。 8 進工スケーフ。 1 6 進工スクーフ。 文字列 文字 文字工スケープ 8 進整数 8 進工スケープ char cc [ 3 ] つまり , 文字定数の末尾に存在するはず の \ O 〃は無視されるわけて、す。 型変換 1 6 進整数 1 6 進工スケープ 文字 文字ェスケーフ。 8 進工スケーフ。 1 6 進工スケーフ。 文字定数 式の評価が行われる際の比較的多くの場 合において , char 型から int 型への暗黙的な 拡張変換が行われます。この変換規則を C 言 語のプログラム風にまとめると以下のよう になります。 代入演算子 算術演算子 演算子 代入演算子 if(C = SignedChar) (signed int)C; else if(sizeof(C)== sizeof(unsigned int) (unsigned int)C ; else くく 52 CMAGAZINE 19 10
る。色と属性はそれぞれの定数の和をとる TabIe 2 ことにより , 同時に指定て、きる。たとえば , 名前 黄色て、プリンク表示させたい場合には , 以 KEY ー SCREATE KEY ー SDC 下のようにする (List 3 参照 ) 。 KEY-SDL uC010r(CYELLOW ー CBLINK) KEY ー SELECT KEY—SEND こての色・属性の指定には , 工スケー KEY—SEOL KEY ー SEXIT プシーケンスを使用している。その定義に KEY ー S 日 N D ついては , 以下のとおりて、ある (List 4 参 KEY ー SHELP KEY-SHOME KEY-S ℃ KEY ー SLEFT ただし , 工スケープシーケンスといって KEY ー SMESSAGE も各メーカーて、統一がとれているわけて、は KEY ー SMOVE KEY— SNEXT ない。この定義は PC ー UX / V 用のものて、あ KEY—SOPTIONS KEY—SPREVIOUS たとえばソニーの NEWS などてあれ KEY—SPRINT ば , 色の指定にはまず , 参照用テープルに KEY—SREDO KEY—SREPLACE 独自の色を調合して指定しておく必要があ KEY—SRIGHT KEY—SRSUME KEY ー SSAVE また色の選択コードも異なる。したがっ KEY-SSUSPEND KEY—SUNDO て読者は , この upescape. h(List 4 ) ( : 各表 KEY— SUSPEND KEY ー U N DO 示色・属性に対応したコードを必要に応じ て , 定義し直していただきたい [ 戻り値 ] 正常終了の場合 , 0 を返す。 [ 機能 ] 表示画面を att 「の色・属性にする (List 5 参 uprintv(;) 関数 ( 整理番号 : C M 900902 第 女を・指定座標への文字の書き込み [ 書式 ] #include く stdiO. h 〉 #include "upescape. h" キーの名前 shift 十 create キー shift 十 delete char キー shift 十 delete line キー select キー shift 十 end キー shift 十 clear line キー shift 十 exit キー shift 十 find キー shift 十 help キー shift 十 home キー shift 十 input キー shift 十厄負 a ow キー shift 十 m essage キ・一 shift 十 move キ・ - ー・ shift 十 next キー shift 十 options キー shift 十 prev キー shift 十 print キー shift 十「 edo キー shift 十 replace キー shift 十「 ight arrow キー shift 十 resu m e キー - shift 十 - save キー・ shift 十 suspend キー shift 十 undo キー suspend キー undO キー 0576 0577 0600 0601 0602 0603 0604 0605 0606 0607 0610 0611 0612 0613 0614 0615 0616 0617 0620 0621 0622 0623 0624 0625 0626 0627 0630 test. C List 1 1 : #define EXTERN 2 : 3 : # i nc 1 ud e く std i 0. h > 4 : # i nc 1 ud e く string. h> 5 : #include く curses. h> 6 : #include "fkey. h" 7 : #include menurd. h ” 8 : #include "upldwn. h" 9 : #include "upescape. h" 10 : #include ” C010r. h ” 1 2 : v 0 i d ma i n ( ) mn [ ] 14 : static struct Gmnstr ” , 32 , 4 , ” n i C h i ” 日次処理 ” , 32 , 4,"nichi ” 月次処理 ” , 32 , 8 , "getsu" { " 随時処理 ” , 32 , 12 , ' ' zu ー Z ー 20 : 21 : 22 : 23 : 24 : 25 : 26 : 28 : 29 : 30 : 32 : 33 : } 照 ) 。 1 ー - 1 ・よ 1 ・よ uprintv(str, attr, x, y, ura) char st 「ロ ; unsigned char attr int x, y, u 「 a [ 引数 ] str 口には , 表示する文字列を指定す attr には , 表示属性を指定する。指定に は , C010r. h て定義されている定数を用いる。 ない x, y には , それぞれ表示する画面の X 座 [ 戻り値 ] 標および Y 座標を指定する。 正常終了の場合 , 0 を返す。 ura は , ダミーの引数て特定の機能はもた 106 CMAGAZINE 19 10 initscr(); refresh() : PCLS; PCUROFF; utextkei(20,2,60,14,CSKY); uselbar(mn, CB し UE,CRED, 3 , I, の : PCURON; flushinp(); endwin(); ex i t ( の : [ 機能 ] 文字列 s 汁を画面の ( x , y ) の位置に , attr の 属性て表示する (List 6 参照 ) 。
オリジナル C コンノヾイラ 制作プロジェク 第阨規こおける A 規格 朝 0 0 の 0 朝 C マガジン 取り上けま魂以後 , 本文中に現れる ANSI, K&R, イプの処理系と比べた場合の相違点などについて 張機能 , 規約に現れないいくつかの事項や , 旧タ そこで , 規約の番外編として , ANSI 規格の拡 期となってしまいました。 予定でしたが , 種々の事情により , その開催が延 今回は , PragmaC 討論会の模様をおとどけする 藤井保則 BSD は注 1 の処理系を表すものとします。 正数定数について ANSI において , 8 進と 16 進の正数定数 は , その指定された値が , 適合可能なもっと も小さなデータタイプをもっとされていま す。 つまり , 16 進定数、 \0xffff" は , K&R 準 拠の処理系においては long 型て、したが , ANSI 準拠の処理系て、は unsigned int 型となりま す。 50 CMAGAZINE 19 10 K & R て、は , 8 進数の表記中に、、 8 クおよび 、、 9 〃を使用することが有効とされていまし たが , ANSI て、は許されていません。以下の 例のような文は , K&R, ANSI のどちらの 処理系て、も問題なくコンパイルすることが 8 進数表記について て、きますが , その結果は異なります。 printf( " \ 078 " ) ; 上記の例を , K & R 準拠の処理系て、コンパ イルすると , 、、 \ 078 〃というエスケープシー ケンス , は、、 \ 100 〃と解釈され , 実行すると , アスキーコード 40H の、、 @ 〃が表示されま す。 これに対し , ANSI 準拠の処理系て、は , 、、 \ 07 〃というエスケープシーケンスと、、 8 〃 というふたつの文字としてあっかわれます