出力 - みる会図書館


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

1. 月刊 C MAGAZINE 1990年5月号

ラプ 9 リ ラタ乙 こしてから使用している ( List1 に実際の例を 示す ) 。 List List プリンタ出力例 標準入出力 ファイル 標準入出力ファイルというのは , MS - DOS が立ち上げ時に周辺デバイスをファイルと して扱うことがて、きるように割り当てたも のを指している ( Tbl. 2 参照 ) 。キーポードや CRT, またはプリンタなどのハードウェア を一般のファイルのように扱おうという考 え方は , UNIX からの流れて、ある。 List2 を見てもらいたい。これはヘッダフ ァイル stdio. h の中て、マクロ定義されている 関数て、 , この #define 文による定義は , MS -C も TurboC もどちらも同じて、ある。 getchar( ) 関数は getc ( ) 関数に展開され , しかも標準入出力に stdin が指定されてい る。プログラミングとしては , 標準入出力 デバイスをファイルのように扱うことがて、 きるのて非常に楽て、ある。もっと簡単な使 用方法はプリンタデバイスて、ある。プリン タに文字を出力するには , たんに List3 のよ うにすればよい このように , 標準入出力ファイルの使い 方はいろいろなプログラミング方法に応用 しやすいようにて、きている。ただ , プリン タのように出力だけしかて、きないものや , COM のように入力しかて、きないものもある のて、 , オープンする際のオプションには注 意しなくてはならない #define getchar() getc(stdin) #define putchar(c) putc((c) , stdout) FILE *fp; fopen( ” PRN" fputs("HeIIo world ! " , (p) : TbI.2 ファイル ティスクリプタ 0 1 2 3 4 ファイル ホインタ ファイル テパイス 標準入力 標準出力 標準工ラー 標準補助ポート入出力 標準プリンタ stdin キーボード CRT CRT COM ボート プリンタ stdout stderr stdaux stdprn LiSt fopen 関数使用サンプルプログラム fopen. c 1 : 2 : このプログラムの簡易機能 3 : 新規ファイルを作成して新たな行を書き込む。 4 : 書き込まれたファイルをまた読み込んで表示させる。 5 : 6 : Compiler is MSC, or TurboC 7 : 8 : 9 : 10 : #include く stdio. h> 11 : #include く conio. h> 12 : #include く stdlib. h 〉 13 : 14 : i nt type ( vo i d ) : 15 : 16 : F ILE *f p : 17 : 18 : VO i d ma i n ( VO i d ) 20 : 22 : 23 : 24 : 25 : 26 : 28 : 29 : 30 : 32 : fopen, freopen, fclose fopen ( ) 関数は , オープンしたファイルと fopen ( ) 関数が返してくるファイルポインタ とを密接に結びつけている。以後はファイ ルと結合されたこのファイルポインタがす べての操作の対象となる。なお , このファ イルポインタは , オープンしたファイルの int i; fopen("work. txt" fprintf(stderr, ex i t ( "File open error !Yn"); for (i fprintf(fp, i 十十 ) ” Newl ine X2d is add. Yn ” C プログラマのためのランタイムライプラリ入門 79

2. 月刊 C MAGAZINE 1990年5月号

楽をしましよう〃 C* = 吾用プロク、ラミンク、、ツノレ癶売 . A. re 簡単シリース・※開発工数削減と標準化のために ED 字が簡単 キー入力が簡単 キー入力関数・テキスト画面制御関数・カーソル制御関数を提供します。 テタ出力関数・ビットイメージ出力関数・プリンタステータスチェック関数 キー入力関数は、指定された位置で指定された桁の入力を受けつけ、入力テータ を提供します。文字列テータはもちろん、罫線データも同時に出力できます。 を指定されたエリアに格納します。入力テータタイプもチェックし、漢字入力し 文字列も罫線も、画面のように桁・行で印字位置を決めるので桁合わせは不要。 たいところではフロントエンドプロセッサを立ち上げます。カーソルは、現在入 文字列は、拡大・下線・網掛け等の特殊効果を同時に指定可。罫線は実線 / 破線 カ中の位置に表示します。テータ表示色・アトリビュートも、 PF キーガイドラ それそれに太 / 細の計 4 種類をサポート、ビットイメージを出力して引く罫線よ インの表示 / 非表示も設定自由、 PF キーガイドラインには任意の文字列を任意 りも高速に印字します ( 社内テスト結果・ビットイメージ出力で 10 分かかった表 の色で表示できます。ロールアップ / ダウン・ BS ・ が、 6 分で出力完了に〃 ) 。また、文字と罫線を同じ桁・ HE LP ・ HOME e 十 c の特殊キーも全て取得 OK 。 同じ行に出九できるので、ムダのない帳票を設計できま リアルタイム・クロック表示関数や、ダイレクト・キー す。もう、プリンタのマニュアルとにらめっこしながら スキャン関数、 V 一日 AM のリード / ライト関数等も用 作る、制御コード出力処理だらけの読みにくいプログラ 意しています。 ムとはオサラバです。 各種のウインドウ制御関数と、 N88BAS ℃を基本に グラフ描画関数と、 N88BA 日 C を基本にしたグラフ したグラフィック関数を提供します。最大 20 個のオーバ ィック関数を提供します。描画できるグラフは、棒グラ ーラップ。ウインドウをオープンできます。 フ ( 縦・横 ) 、折れ線グラフ ( 縦・横 ) 、円グラフの計 5 種、 テキストモードとグラフィックモード双方向をサポート、 棒グラフと折れ線グラフは重ね合わせも可能。色やライ ウインドウ内でのキー入力関数・テキスト画面制御関数・ ンバターンの設定は自由です。 カーソル制御関数もそろっています。文字列表示関数は、ウインドウ・サイズに 描画のためのテータテープルをセットして関数をコールすれば、グラフ本体はも 合わせた自動改行機能を持っているので、プログラミングの手間もぐっと省けま ちろん、タイトル・グリッド第単位・凡例まで、全て関数内で計算・描画するの す。通常のウインドウに加えてメニュー選択処理のためのメニューウインドウや , で、メインプログラム側での計算処理は何一つ必要ありません。 Y / N のキー入力を受けて返せるメッセージウインドウもサポート。 「簡単シリーズ」は全て併用可能ですから、「ウインドウか簡単」と「グラフ が簡単」を併用すると、グラフが出るウインドウを画面上にオープンする、なん ユーサー・インターフェイスの優等生・ウインドウ処理を、メモリ操作なしのお 手軽プログラミングで実現できます。 てことも、あっとオドロク簡単さでできてしまいます。 工テイタ ファイ ) レ・エテイタ VER. 1.0 ー \ 18 , 000 それ無くしては何も語れないテータ・ファイル。たぶんどなたもファイ ルレイアウトを書き、構造体や共用体を使ってテータ定義をなさっている ことでしよう。このエテイタは、画面を見なからワープロ感覚でテータ定 義をして、ファイルレイアウトとテータ定義のソースコードをいっぺんに 作ってしまおうという、横着な発想のエテイタです。 ファイルレイアウトは罫線入りの見やすい帳票 ( 136 桁 ) で出力しま す。ソースコードはもちろん C の書式で、インテントのついた見やすい ファイルにします。ソースにコメントを入れた後からのローティングや 修正も OK です。 設計段階の工数をはぶき、設計資料を標準化するファイル・エテイタ。 お役に立てることを確信しています。 VER. 2 : 0 VE 日 . 2.0 ¥ 28 , 000 ¥ 18.000 ①テータテープ ) レを セットして、 2 関数を コー ) レする だ け VE 日 . 1 .0 VER. 1 . 0 ¥ 28 , 000 ¥ 14.000 「簡単シリーズ」のテータテープルを編集するための、専用工テイタです。 画面上で、マウス ( なくてもかまいません ) やキーボードを使って、実行画面や 帳票のイメージをワープロ感覚で入力すると、そのまま使えるソースコードが出 力されます。これ 1 本で「キー入力 ( V2.0 ) 」「印字 ( V2.0 ) 」「ウインドウ「 V 1 .0 ) 」「グラフ ( VI. 0 ) 」をサポートしています。 テータ編集中に、擬似テータを使って表示したり印字したりできるので、テスト ランの必要もなく、簡単シリーズを更に簡単にお使いいただけます。 VE 日 . 1 . 0 ¥ 22 』 00 イントウ 2 ■システム構成 ( 共通 ) 本体 . PC -9801 (XA/X L/XL 2 / 日 L ハイレゾ / LT を除く ) 0 S : MS-DOS V3.1 / 3.3 (F ・ PMS - DOS に添付のもの ) プリンタ : NEC PC - P 日 101 系 PC - P 日 201 系 ( 但し、ファイル・エティ タは 201 系のみ ) コンバイラ・ Mic 「 osoft-C/Lattice-C /Tu 「 bo-C ( 簡単シリーズは、御使用のコンバイラを 指定して下さい。 ) メティア : 5 ″ 2HD / 3.5 ″ 2HD ( 御希望のメティアを指定して下さい。 ) ※全商品プロテクトなし、サンプル付きで魂 ※お問合せはお近くのマイコン・ショップか、私どもへどうぞ 工ースデ応工ユニアュ 〒 790 愛鍰県松山市北藤原町 1 ー 26 TEL : ( 0899 ) 3 ト 2 6 FAX : ( 0899 ) 41 ー 0336 struct { ID [ 2 ] ; Char ITEM [ 6 ] ; char KAN 同 ; Char struct { SBET ; Char KRAK ; char KNO [ 10 ] ; Char KTAN [ 6 ] ; Char } WH [ 2 ] ; 0 ※記載されている内容は、将来予告なしに 変更することがあります。 ※ MS-DOS 、 Micr08)ft-C は、米国 M osoft ネ土の登宝菇標です。 ※い tt - C は、米国 tt 社の登録商標てす。 ※ T Ⅲ加 - C は、米国 a 面 e 「 t 社の登録商標です。

3. 月刊 C MAGAZINE 1990年5月号

ーバルタイマ BIOS(INT ICH, FUNC 02H ) を利用するほうが安全なのて、すが , 今 回のメインプログラムて、は , ビデオなどの 画像を意識して 30 分の 1 秒 ( 1 インターレース ) 単位て、時間設定する必要があったため , のような方法をとっています ( 30 分の 1 秒 = 33.3msec は nX10msec て、は表せないため ) 。 この関数を利用する場合は , 3.3msec を自分 の PC98 のクロックに合わせて Tbl. 2 の計算 式て、計算しなければなりません。 カレンタ時計 ( 日付時刻の出し ) 今回のように時間て、制御するプログラム の場合 , インターバルタイマの時間て、の累 積て、はどうしても誤差の累積が避けられず , 時間の経過によって時間誤差が拡大してい きます。そこてこのプログラムて、は , 誤差 をなるべく小さくするため , インターバル タイマからて、はなく , カレンダ時計により 1 秒ごとのタイミングを求めています。した がって , 1 秒間て、何回もインターバルタイマ を繰り返し使用した場合には , 誤差が大き くなりますが , 1 秒を越えたときにビットの ずれがないかぎりその時点て、誤差がクリア されます。 カレンダ時計の読み出し BIOS は以下のと おりてす。 割り込みコード : 0x1C コマンドコード : 0X00 入力 : ES ←日付・時刻データを受け取る ノヾッフアのセグメント BX ←日付・時刻データを受け取る バッフアのアドレス 出力 : 指定したアドレスに Tbl. 3 のような BCD 形式て、値を返す たとえば , 1990 年 4 月 22 日 ( 日曜日 ) 午前 9 時 56 分 30 秒ならば Tbl. 4 のように設定されま す。本プログラムて、は , struct dt { 43 : / * ↑ 10 年一年 TbI.3 カレンダ時計の読み出し引 OS の出力 月 ( 曜 ) 10 日 1 秒 先頭ポインタ ( 曜日は設定されません ) TbI.4 出力例 9 O 4 O 2 1 日 2 川時 O 1 時 9 分 5 1 分 6 10 秒 3 List 3 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : 20 : 22 : 23 : 24 : 26 : 28 : 30 : 32 : 33 : 34 : 35 : 36 : 38 : 42 : 44 : 46 : 48 : 49 : } 52 : 53 : サンプルプログラム timer. c P P I 基板のポートに対して , 1 / 3 0 0 秒間隔で指定した時間間隔毎に Ver 3.00 スイッチ入力の 5 秒後にスタート T i me 朝 t / 300 秒間のパルスを発信するプログラム 19 : # i ncl ude #include 21 : # i ncl ude #include #include 25 : #define #define 27 : #define 29 : #define #define 出力 5 種類 入力はポート B (0xD2) のビット 8 と 2 ビット 8 = 0 N でスタート : ビット 2 はリセット用 出力はポート A (0xD0) の各ビット ビット 2 ~ 7 はそれぞれ s w 1 ~ 6 に対応 ビット 0 はランプ出力 ( すべての s w と連動 ) 各ビットは , 0 で O N , 1 で O F P ビット 8 (M S B ) に直前の 1 秒毎のタイミングを出力 . ※ 300 ー TimeInt ー誤差 * / / * パルス O N の間隔 * / コントロール * / 0xD2 / * ポート B * / 0xD0 / * ポート A * / by Tetsu ” timer. h ” く conio. h 〉 く dos. h> く stdlib. h> く stdio. h> 0xD6 / * RevTime 198 T i me I nt 100 int Correct; struct dt { int ym; i nt dh : i nt ms : 39 : } ymdhms : 40 : u n i on R EGS 41 : struct SREGS * usage VOid usageS( VOid ) / * 9 8 のクロックと入力信号の時間差補正値 * / / * システム時間取得用パッファ * / puts( " ln,OUt; seg; A>TIMER TIME. DAT()r ・ ? つ [ >prn ] 50 : void usage し ( void ) puts ( " * 使用法 : ” ) : 110 / * システム時間取得用パッファ * / int ym; CMAGAZINE 19 5

4. 月刊 C MAGAZINE 1990年5月号

グラフィック画面のモード設定 g ー S C r e n g ー s e nd グラフィックパターンを得る グラフィックパターンを得る g—send 1 文字列のグラフィック出力 g ー S t r 描画領域の指定 g ー VI e W ka i t e n 回転変換を行う 2 点間の角度を得る f t pal— パレットの初期化 s s f ー k 記号を線文字で描く 大文字 ( A ~ Z ) を線文字で描く s s f 数字 ( 0 ~ 9 ) を線文字で描く s s f n u m 小文字 ( a ~ 2 ) を線文字で描く s s f 文字列を線文字 ( べクター ) s s f S t r 枠組みの作成 ( 25 行モード時 ) t a い e 25 枠組みの作成 ( 20 行モード時 ) t a い e 20 w s f ー k 記号を箱文字で 大文字 ( A ~ Z ) を箱文字で描く w s f ーー 数字 ( 0 ~ 9 ) を箱文字で描く W S f ー nu m 小文字 ( a —z ) を箱文字で描く W S f ー S 文字列を箱文字で描く W S f ー s t r 補助人力 ( R S ー 232 C ) aux_lnp 文字列の簡易入力 input 数値 (double ) の簡易人力 input_d 数値 (int ) の簡易人力 input キーポードからの 1 文字入力 i n ー ke y 数値入力 (i n t 値 ) n u m ーーー n p 数値入力 ( d 。 u い e 値 ) n u m ーー n p 数値入力 (unsigned 値 ) u n S ー g ーー n 開発環境の充実 / c ー FUNC 0N98 全関数リスト カレントディレクトリーの変史 c h ー di r クリック音を鳴らす c ⅱ c k c r t のモードを得る C r t ー s t a t テキストカーサーの位置を得る C S r ー PO S double を 3 桁の位取りを行な dd ー 3 い高速表示 ディスクの残りパイト数を得る d s k f r e e F D D の状態をセンスする fd_chk クロック周波数を得る cl k get c p u ネームを得る g e t ー c P u dir カレントディレクトリーを得る get ディスクの接続状況を得る di s k get d rv カレントドライプファイルの属 get 性を得る k m 0 d キーポードのモードを得る get メモリーの実装容量を得る g e t m e m セグメントとオフセットを得る ge t ー s e g マシン名を得る ge t ー s y s テキストのカラー属性を得る tCOl get do s のバージョンを得る g e t ー V e r ポリュームラベルを得る vol get H D の状態をチェック hd_chk ディレクトリー存在チェック i S di r k b ー cl キーポードバッフアのクリア ソフトキーの内容を取得 key—get ファンクションキーを表示 key—on key—off ファンクションキーを非表示 ソフトキーへの文字列登録 key—set ソフトキーバッフアのポインター化 kp t r s e t デフォルトキーコードの割付 k_save ソフトキーのセープ k ー S e t ソフトキーのロード ドライプの接続数を得る maxdrv ディレクトリの作成 m k ー di r H D のヘッドを退避させる r e t r a C t rm_dir ディレクトリの削除 日付をセットする set_date カレントドライプを変更する S e t _d r V ファイルの属性をセットする s e t ー fat t キーパッフアに文字列をセット s e t ー kbu f する ポリュームラベルをセットする set_vol プリンターの状態をセンス p r n ー s ta t ァータ変換 数値処理 dtok g t ー po s ltcvs ltOS 半角数値文字列を全角に変換 グラフィック座標値をテキスト 座標に変換 ファイルタイム (long ) を文字列 に変換 文字列中の大文字を小文字に変 換 10 進整数を 10 進文字列へ変換 3 桁位取りをし文字列に変換 テキストカラーを指定 カーソルを表示する カーソルを表示しない カーソルの右移動 カーソルの左移動 指定領域内をスクロールする テキストカーサーの位置を指定 テキスト画面をクリアーする テキストの属性の変更 テキスト画面の読み込み テキストの属性を得る vram への直接出力 保存されたテキスト画面を復帰 テキスト画面の保存 bin bin_init 2 進→ 10 進の変換 2 進データェリアの初期化 補助出力 ( R S 232 C ) a u X ー 0 u t 1 文字出力 cprintc 整数桁揃え出力 C p r ー n い コンソールへの文字列出力 C p r i n t S 1 文字直接出力 dc ー c h r コンソールへの文字列直接出力 dC _s t r double,float 3 裄の位取り出 di s p ー 3 カ 標準プリンターへの出力 l—print コンソールへ高速文字列出力 p u t S t r 文字列の任意部分を表示する sdisp ファイル名検索 ( 1 回目 ) ファイル名検索 ( 2 回目以後 ) ファイル名のリストを得る 最大値の検索 ( int ) 最小値の検索 ( int ) 1 文字の検索 文字列の照合 文字列の検素 i n t の値による検索 int の値による範囲指定検索 文字列の検索 ( 漢字対応 ) 出力 S t C i d t h r e e ー S 画面制御 color C S r ー 0 n c a r ー 0 f f C s r ー f C S r ー b d_roll locate s cl v—chgatt V ー g e t a t t v—poke V r C V f ー s c h 1 f ー s c h 2 fnam ge t ー s c h ー 1 s c h ー 2 S e a r C h search_i s e a r C h ー t S t r ー S C h ファイル以外の入力 ファイル ファイルポインターのセット ファイルのコピーを作成 ファイルの確保 ファイルの大きさを得る ファイルのオープン ファイルサイズの取得 ランダムファイルのリード ランダムファイルのライト 漢字処理 文字列処理 文字列の n 番目の漢字属性を得る 文字の漢字属性の取り出し シフトⅱ s を j i s に変換 knj—chk knj—icd SJCVJ C h r ー ou t 文字列から指定文字の除去 dcvs_3 do u 制 e を 3 桁の位取り 文字列変換 d t 0 b 10 進整数の 2 進文字化 d t 0 h 10 進整数の 16 進文字化 f S t r double,float の文字列化 f t 文字列の左から n 文字の取り出 し m i d 文字列の st 番目から n 文字の 取り出し 文字列の st 番目から文字の代 文字列の置換 replace 文字列の右から n 文字の取り出 right し 空白文字列を得る space 空白を n 個画面に出力する s P C 文字列中の空白文字を 0 に変換 spcvz 文字列からスペースを除去 s p ー 0 u t 文字列の文字数指定比較 S t r C m p n 文字列を n 個連結 string 文字列の分割 div S t r 文字人力 ( 書式付き ) S t r ーー n P 文字の左揃え ー S e t S t r 文字の左揃え ( 空白文字指定 ) 2 ー S e t S t r 文字列のコビーを作成 S t r mov 文字列から指定の文字列を除去 0 u t S t r 文字の右揃え S t r r se t 2 文字の右揃え ( 空白文字指定 ) r S e t S t r ブザーを鳴らす b e ll ビープ音を止める b e Ⅱー 0 f f ビープ音を鳴らし続ける bell_on chg—key ソフトキーの登録 メモリー ( ウインドウ ) 画面を指定したアドレスに保存 V ー m OVe 1 画面分の領域を解放する wd_elose 1 画面分の領域を確保する w d ー op e n メモリー上に退避された画面を W ー r C V 復帰 指定領域内のテキスト画面を保 w_send 存 グラフィック g_circle 惰円乂は円を描く グラフィック画面のクリア ディスプレイ画面各部の色指定 g_color パレットカラーの変更 g ー c 引 0 r 2 g ー c 引 0 r 3 グラフィックカラーの設定 パレット内容の変更 g ー c 制 0 r 4 グラフィック画面のコピー g ー c PY グラフィックパターンを得る g ー ge t グラフィックスの初期化 g ー ini t ポリゴンの内タ」定 g ー iOC k g—kanji 漢字フォントを表示 直線又は矩形を描く g_line XOR モードで直線を描く g_linexor 指定領域の塗りつぶし g ー p a ー n t 指定領域の塗りつぶし g—paint2 ( タイルバターン ) 図形を描く g—pline ドットのパレット番号を得る g—point ドットのパレット番号を得る g—pointv ポリゴンを描く g—poly ドットを消去する g ー p r e S e t グラフィック画面に文字列を表 g ー p r in t ドットを表示する g ー p S e t ドットを表示する g ー p S e t V グラフィックパターンを表示 g ー pu t グラフィックパターンを表示 g ー r C V グラフィック画面のスクロール g_roll 送信レディの判別 (both ) 受信レディの判別 ( b 。山 ) 送信バッファ工ンプテの判別 (both ) パリティエラーの判別ん。 th ) オ - バ - ランエラ - の判別 ( both ) フいミングエラ - の判別 ( both ) デ - タセットレディの判別 ( b 。 th ) 受信キャリア検出の判別 ( both ) 送信許可の判別 ( b 。 th ) 拠平表示の判別 ( b 。 th ) 時関関係 指定年月日から n 日後の日付を after—day 得る 日付け文字列を得る d a t e 指定日まで日数計算 day_count ファイルタイムの取得 f ー t i m e 日付を得る g e t ー da t e ・ 曜日を得る get—day 時刻を得る g e t ーい m e 指定年月の終日を得る max—day 時刻をセットする S e t ー t i m e 日付文字列の取得 tOday 計算機の呼び出し 計算機の呼び出し ( 計算機表示 ) gcalc アナログ時計の表示 g—watch 年間カレンダーを表示する y—calend * バーソナル版には一部含まれない関数があり ます。 P()WER UP KIT マウス マウスカーソルの色設定 m C 0 ー 0 r マウスカーソルを表示する m C S r 0 n マウスカーソルを表示しない m ー c s r 0 f f マウスの移動距離を得る m di S t a n S マウスドライバーの初期化 マウスの左 S W の on , 。 ff 情報 left_free を得る 水平方向の移動範囲設定 m v el e マウスカーソルの位置設定 m ー 0 C a t e ミッキー / ドット比の設定 m—micky マウスカーソルの形状設定 m ー pa t t e r n マウスの右 SW の。 n , off 情報を nght_ free 得る マウスカーソル位置等の取得 m S t a t マウスの左 s w 情報を得る m s w 1 マウスの右 s w 情報を得る m s w 2 マウスによる数値人力 m t e n 垂直方向の移動範囲設定 m V e r t i C a ー マウスカーソルを十に設定 m X h e a r その他 システム関係 更に強化 / 拡張関数リスト POWER UP KIT オンラインマニュアル M A N E X E 付 / プリンター BIOS の初期化 プリン外に 1 バイトを出力 B IO S プリンター 1 パイト出力 i / 0 port グラフィック画面のハードコビー ( 大 ) テキストカ - ソルの形状、プリンク等の グラフィック画面のハードコビー ( 小 ) 設定 プリンタ - のステ - タスを得る 指定工リア内テキスト画面のクリア - 印字ヘッドの復帰を行なう グラフィックで角丸の枠を画く 指定ェリア内画面の上下左右スクロ - ル 改行を行なう グラフィックで影付 B 0 X を画く 漢字、 ANK 比を設定する 改行モードを設定する 改行を n / 1 加インチに設定 文字列を n 文字コビーする マウスカーソルのクリア 印字文字の設定 文字列中の小文字を大文字に変換 マウスカーソルを上向き矢印に設定 マウスカーソルを下向き矢印に設定 マウスカーソルを右向き矢印に設定 漢字人力モードに人る マウスカーソルを左向き矢印に設定 外字ファイルの読み込み フルバスのファイル名の分割 外字ファイルの作成 漢字人力モードから抜ける マウスカーンルを右上向き矢印に設定 フルバスファイル名を作る 外字を印字する その他のコントロール ーソルを右下向き矢印に設定 マウスカ フルバスでフィル名を得る ディレクトリを得る マウスカーソルを左上向き矢印に設定 使用可能な FEP ーソルを左下向き矢印に設定 マウスカ ATOK. VJE, 松茸 , NEC べリファイのモードを設定 マウスポタンが押されるまで待機 (MS-DOS ) → MS - D ( ) S ファンクシ べリファイのモードを得る マウスポタンが離されるまで待機 ョンコ - ル リトライの設定 (BIOS ) → BIOS コール テキスト画面でセレクトメニューを作成 (both ) → M S - D O S ファンクションコ グラフィック画面でセレクトメニュ - を作成 ール & B IO S コール 1 行内メニューを作成 プリンタ - に文字列を出力 B Ⅱ ) S N88BASIC の単精度を日。 at に変換 RS-232C を初期化する ( MS - DOS ) プリンタ - に文字列を出力 i / 。 port N 88BASIC の倍精度を d 。 u e に変換 RS ー 2C のバッフ内文字数を得る RS - c から 1 文孳人力 ( MS - DOS ) 文字列文字数指定の印字 ワ - ドの n ビットを 1 にセットする タイプ 1 の網かけ文字を出力 ワ - ドの n ビットを 0 にリセットする R S - C へ 1 文字出力 (M S - DO S ) ブザーの音程を設定 タイプ 2 の網かけ文字を出力 ワ - ドの上位バイトを int で得る RS - 2C を初期化する ( BIOS ) ブザーの周波数を設定 タイプ 3 の網かけ文字を出力 ワ - ドの下位パイトを int で得る R S - 2 C の使用を終了する (B 10 S ) 指定コードのフォントを得る タイプ 4 の網かけ文字を出力 RS - 2C へ 1 文字出力 ( BIOS ) 指定コードにフォントをセット ワ - ドの右ロ - テ - ト タイプ 5 の網かけ文字を出力 R S - C から 1 文字入力 ( 田 O S ) J A N 13 桁のチェックディジットを求め ワ - ドの左ロ - テート 任意の網かけを行なう R S - 2 C にコマンドを送る (B I OS ) る バイトの右ロ - テ - ト 強調印字を行なう RS - 四 2C パッフアドレスを得る ( b 。 th ) パイトの左ロ - テ - ト アンダーライン印字を行なう R S - 2 C バッフアのクリア ()o th ) ドットスペース印字を行なう RS - 2C のステ - タスを得る ( both ) コンソール関係 クラフィック関係 ート - 匚を」 - 口にを M ヨⅱ 1- : ヨ 1 工 N P ー 1 a u X ー 1 n p NAME : 廴 i 叩 S Y20 P S 工 S Äimlude ( cfum. h 》 rt = 測 X 」叩 ( D E S C R I P T I ON ーを 32C から 1 文字入力さ R E T U R N S 補助入力 ()S - 2 3 2 C ) aux— i 叩 ( i d ) : 文字列関係 マウス関係 : に工 0 リ 日本語入力制御 タ悖関係 入力文 ファイル管理関係 [ESC) 下 [ ↓ ] 文字コードを R S ー 2 3 2 C 関係 入力された文字コード 関数を選んで下さい 取消 = 上 ] ウインドウメニュー ① 00 0 工テイターなとからマニュアルを子プロセスで起動する ことができ、コーディング中に参照、出力可能。 2 プリンター、ファイルにマニュアルの出力が可能。 3 リファレンスマニュアルの EXAMPLES ソース ( サンプ ルプログラム ) のみファイル出力が可能になりコーディ ングが更に楽になりました。 4 強力な検索機能付。 プリンター関係 ( タイムアウト機能付 ) テータ変換関係 その他 ュの数 【ニル関 - マイ体 一フは ォルに はアル ルュイ ュマフ - ニとルす マーアま のュい ー X ニて トマれ ッ - キ Z す込 ・プま組 ッれも ・ア「さル 一ト給ア - ワフ供ュ - 「ル態マ ※ア形の

5. 月刊 C MAGAZINE 1990年5月号

以上の項目 , またそれに関連する事項に ついて明確なご意見 , ご要望がありました ら , C マガジン編集部「 Project Pragma C 」係まて文書てお寄せください。 プログラム編ロ ] まず連載第 1 回として , Project Pragma C の各種プログラムが対応する動作環境を定 義します (Tbl. 7 ) 。 基本的には , 以上の条件を満たすすべて のマシンに対応していく予定てすが , 実際 の使用においては , 数 M バイトの RAM ディ スクまたはハードディスクを使用するほう が効率的になるかもしれません。 CSP:C Souse Print UtiIity csp は , C 言語ソースファイルの表示 / 印刷 を行うためのユーティリテイプログラムて、 す。ソースファイルをただ表示したり , 印 刷したりするだけては , TYPE コマンドや PRINT コマンドとなんら変わりないのて , 以下のような仕様をもたせます。 * 処理対象を C 言語ソースファイルと特 定し , 語句の解析を行う * 解析結果をもとに , 語句を以下のグ ループに分類し , 差別化して表示 / 印 刷する 1 命令 , 指定子 , プリプロセッサ命令 2 句読点 , 演算子 3 定数 , 文字定数 , 文字列 4 注釈 5 そのほか * 差別化は , 画面に対してはカラーで , プリンタに対しては強調などの属性 で行う * 解析結果をもとに , スペーシング , オートインデントなどの整形処理を 施す csp は ,PragmaC のプロジェクトの一貫と してのユーティリティてすが , ANSI 規格に 準拠して作成されたほとんどのソースリス トを処理することが可能てす。 ース ース 50 CMAGAZINE 19 5 本連載を開始するにあたって , あらかじ TbI.8 csp. c のオプションスイッチ 出てきますが , ANSI 規格の宣伝記事で * AN 規格についての言及 / 引用が多数 いっさい使用しません。 もあります。また , yacc などのツールは 的とはいいがたい手法を採用する場合 方教室ではありません。よって , 正統 * 本連載はコンバイラの ( 正しい ) 作り ん。 思われる場合を除き ) 解説を行いませ が , その内容については ( とくに必要と 要素についての定義は行っていきます したものではありません。 C 言語の構成 * 本連載は C 言語の解説 / 教育を目的と め次の点をおことわりしておきます。 はありません。 本プロジェクトにおいて , 作成しなけれ ばならないプログラムの量は , ソースファ イル ( 数 100 ~ 1000 行として ) 単位で計算して 約 100 ファイル , ライプラリの個々のファイ ルを含めると約 400 ファイルとなります。単 純計算でも約 20 万行程度の作業量が必要と なってしまいますので , 予定した順番が移 動したり , 休載となってしてしまうことが あるかもしれません。このような場合には おおめに見ていただき , こ・了承ください。 また , そのような事態におちいらないため にも , 読者の皆さんのご協力をお願いいた します。 -s -v ソースファイルの空白 / タブを無効とし , 解析情報をもとにしたオートスペーシング , インテン ト / アンデントを行い , 整形した形で出力を行います プリンタに対して出力を行います すべてのエスケープシーケンス操作を抑止し , 通常の ASC 日テキスト形式で処理を行います ファイル名を標準入力から読み込みます。 このオプションが指定されると , csp はファイル名の入力を標準入力に対してリクエストし , 入 力があった場合には該当するファイルに対しての処理を行います。この動作は , プランク行が 入力されるまで繰り返されますので , 複数のファイルをつづけて処理したい場合などに有効で す。また , 大量のファイルの印刷を行いたい場合などには , ファイル名を列記したテキストフ ァイルを用意しておき , I/O リダイレクトと併用すると非常に効果的です CSP 内で行われている語甸解析情報を出力します csp の起動は ,DOS のコマンドレベルから csp C-flags] filename 次の書式て、行います。 CSP -a -S -P CSP. c 以下のようになります。 ASCII 形式てプリンタに出力する場合には , ことも可能て、す。例として , 整形を行い , これらのフラグは , 同時に複数指定する に示すものが用意されています。 また , オプションスイッチとしては , Tbl. 8 CSP CSP. C す。 ト csp. c を表示する場合には次のようにしま 例として , このプログラムのソースリス プログラムの構成 csp のプログラムは , 以下のファイルから 構成されています。 語句解析ルーチン用へッダ cctoken. h csp メインプログラムソース CSP . C C 文字タイプ判定ルーチン用ソ cctype. C C 文字タイプ判定ルーチン用へッダ cctype. h 語句解析ルーチンソー cctoken. C ス •csp. c csp. c は , csp プログラムのメインソ

6. 月刊 C MAGAZINE 1990年5月号

lnformation 行 om ( om mak 5 数定数のデフォルトは単精度て、す れは四捨五入て、はないのて、 , 実数 なければなりません。数学的な計 あります。 C 言語て、もアセンプラリ のて、 0.1 を 0.1 # と書き直し , 倍精度 算結果がちょうど 1000 て、あるよう 値て、の丸めは問題になりませんが , ストを出力してみると同じことが 実数値の 0.1 にしてもう一度実行し 実数値から整数値への型変換をし な計算を , 単精度て、計算すると 1000 されているのがわかります。これ たとき四捨五入に慣れている方は は , 倍精度実数て、は有効数字 16 桁 てみてください。 C の場合は , 実数 と出力するのに , 倍精度て、計算す とまどうと思いますのて、注意して 定数はすべて double ( 倍精度 ) とし の 0.56 が表せなく , 丸めによりこ ると 999.9999999999993 となり , ください。具体例をいいますと , の値になっているからて、す。 て扱われます。今度はほとんど 1000 のコンパイラの倍精度演算はおか 2.5 を整数に型変換した場合に , 3 倍精度実数値て、表せる 0.56 に近 に近い値になったはずて、す。 しいということにもなりかねませ 実数値の出力にも注意が必要て、 て、はなく 2 になります。 1 . 5 も 2 に変 い数値は , ん。有効数字 4 桁の 1000. は , 999.5 換されます。 す。言語によって , あるいは使用 から 1000.5 の間の数値を表してい .559999999999999942268 最後に蛇足て、すが , Quick する関数 , ステートメントによっ .560000000000000053291 るのにすぎません。 BASIC て、倍精度字数値 0.56 # を書 て、す。 0.56 に近い下段の値が 0.56 て出力時の精度のコントロールの すて、に述べたように , マイクロ くと , QuickBASIC が , の値として採用されるわけて、す。 仕方が違います。求めた結果を出 ソフトの言語は IEEE の規格に準拠 .5600000000000001 # この値を倍精度実数値の有効数字 力させるときは , 結果の精度や必 しています。 IEEE の規格て、は丸め これはなんだと思わ の桁数て、表示すると , 小数点以下 と変換して , 要とする精度をよく考慮したうえ の取り扱いに 4 つの方法がありま れた方もいるのて、はないかと思い 17 桁目が四捨五入されて , 上に書 す。このうちて、もっとも一般的て、 て、行うべきて、す。 ます。例として , 0.56 をあげまし いたような値になるわけて、す。 計算結果て出力された数値の , ある , 「もっとも近い偶数値に丸め たが , ほかの値て、も起こることが 有効数字というものもよく理解し る」をデフォルトにしています。 単精度実数値の内部表現を表示する ( Quick BAS ℃ ) List 1 List 1 43 : NEXT ー 44 : PRINT 45 : ・符号部の値をセットする 46 : = ABS(SignBit& く ) 0 ) 48 : を 2 3 ビットから 3 0 ビットまでの指数部を得る 50 : Bytes(3) * 2 + Bytes(2) 128 Exponent 52 : ・ 0 ビットから 2 2 ビットまでの有効数字部を得る Mantl : (Bytes(2) OR & H8 の 53 : 54 : PRI NT ” B i t 31 整数 B i t & B i t s 22 ー 0 " Bits 30 ー 23 PRINT ”符号部 有効数字部 " 55 : PRINT TAB(4); Sign; TAB(17); 56 : MHex$ (Exponent) : PRINT TAB(33) : MHex$(Mantl) : MHex$ (Bytes(l)) : MHex$(Bytes(0) ) 57 : 58 : PRINT 59 : 60 : し 00P 62 : 63 : ・ MHex$ 必要なら先頭に 0 を付加して 2 文字の 1 6 進数にする 64 : FUNCTION MHex$ (X AS INTEGER) STATIC 65 : D$ : HEX$(X) 66 : 幃し EN(D$) く 2 THEN D$ - " 0 " + D$ MHex$ ニ D$ 68 : END FUNCTION 2 : 3 : 4 : ・単情度実数値の内部表現を表示する 5 : 6 : Microsoft 90 / 03 / 10 7 : 8 : DEFINT A-Z 9 : DEC し ARE FUNCTION MHexS (X AS INTEGER) 10 : DIM Bytes(3) 12 : C し S 13 : PRI NT " 単精度実数値の内部表現 ( IEEE フォーマット ) 1 6 進数 " ! 4 : PRINT 15 : DO 22 : 24 : 25 : 26 : 28 : 29 : 34 : 35 : 40 : 42 : : PRINT ・ FLPT. BAS Sign T/T 指数部 ・数値を入力して変数に格納する INPUT " 実数を入力してください ( 終了する時は END ) : UCASE$(A$) - ” END ” THEN EXIT DO ニ VA し (AS) RealValue! ・実数値をそのままのビットイメージで倍精度整数に変換する As し ong& ニ CV し (MKSS(RealValue!)) ・ 8 文字 ( 桁 ) になるように必要なら先頭に 0 を付加する Strout$ : HEX$()s し ong&) " 0 " ) + Strout$ StroutS = STRlNG$(8 ー し EN (StroutS) . ・符号部のビットを調べる affect breaking out the bytes SignBit& : As し ong& AND & H80000000 ・符号部のビットを除く AS し ong& : As し ong& AND &H7FFFFFFF ・パイト単位に分割する FOR ー ニ 0 TO 3 Bytes(l) : As し ong& AND &HFF& As し ong& ニ AS し ong& Y 256 & NEXT ー ・内部表現をパイトイメージで表示 PRINT PRINT " 内部表現 " PRI NT " H i gh FOR ー PRINT ” 単精度実数の 0.1 を 1 万回加算するプログラム List2 Low ” : 1 TO 7 STEP 2 : 躓 D$ (StroutS. ↑ー Z = 1 間 10000 b ! 十 a ! 149 lnformation from CompiIer Makers

7. 月刊 C MAGAZINE 1990年5月号

五ロ はしめて学ぶプログラー ニンク 2 , 3 月号のクイズ ( 同じものですが ) は 次のようなものでした。 「 N 個の doub 型のデータを入力し , それ を大きい順に並べ換えて出力するプログ ラムを書きなさい ( ただし N は可変である ) 」 N 個のデータのソート ( 並べ換え ) だけで あれば , そんなに難しいクイズではない はずですね ? 問題は「ただし N は可変で ある」という部分にあります。この記述を 静的ととるか動的ととるかでプログラム はガラリと変わってきます。私たちは , 「静的に N を可変するなら #define を使えば よいから比較的簡単かな・・ 。動的に可 変するときは , リスト構造 , スタック ? いずれにしてもまだ説明していないポイ ンタやストラクチャを使わないと・・・・・」と 考えていました ( クイズを出したあとの話 です ) 。 さて 2 , 3 月号のクイズの回答を募った ところ , この原稿を書いている時点で 4 通 の回答が寄せられました。そのすべてを 紹介しましよう。お答えをいただいたの は浦和市の矢吹嘉成さん ( List6 , quizl . c), 水戸市の佐藤貴雄さん (List7, quiz2. c), 飯能市の岩沢一浩さん (List8, quiz3. c) , 八王子市の金子幸史さん (List9, quiz4. c), 以上の 4 つのプログラムです。 私たちが考えたように , 静的 , 動的に とらえた両方のプログラムがでてきまし ー 0 List. 6, List. 7 は静的 , つまり必要なデ ータ領域をコンバイルの段階で確保して おく方法によるものです。データ数を可 変にするためには , #define などを使って 配列の大きさを変化させています。 List6, List7 ともに #define によって配列の サイズをコンバイル時に変えることによ って , 静的にデータ数可変を実現していま す。 List6 , 矢吹さんのプログラムのほうが すっきりした印象を与えますね。また趣味 の問題ですが , List6 の 14 行目で定義してい はじめて学ぶ C プログラミング 129 List 7 , 1 ワ 0 っ 0 -4 ・っー 8 0 11 っ 0 -4 ・ っ 0 ワ 0 っ 0 ワレワレワ 0 っ 0 っ乙ワ 0 っ 0 00 っ 0 っっ 0 tblCm]=tbl [m + gp] ; tbICm + gp]=dummy; e ー se break : gp/=2 : printf("Ynsort ok ! !Yn") : for ( i = 0 : i く s : i + + ) printf("data no. (%d) % 5.7 け \ n " , i + 1 , tb Ⅱ i ] ) : リスト ① #define C し S() printf("Y033C2J") ② for (s=0; printf("no. %d ? " scanf("%lf", &tbl Cs]) S 十十 ) EOF; 次のセル セル ① ② セル テータ 2 終わり ③ 終わり ④ 新たに確保された セル データ 4 終わり quiz3. c List 8 2 : 3 : C9002. c C 言語入門講座今月のクイズ 90 年 2 月号 4 : 01 / 22 / 90 岩沢一浩 5 : 6 : 7 : doubl e 型のデータを入力し、大きい順に並べかえて出力します。 8 : CO 叩ⅱ e 「 QuickC Ver. 2.0

8. 月刊 C MAGAZINE 1990年5月号

List 7 moveq. 1 # 9 , d3 cmp ユ d1,d3 の部分て、すが , c 砠 p. 1 # 9 , d3 よりも上のほうが実行速度は速いのて、す。 実はこれはパソコンネットて知ったのて、す が , gcc もきちんとこれを知っていて , その ようなコードを生成します。 80386 て、はオートインクリメントアドレッ シングモードをもっていないのて、 leal 命令て、 実行しています。 ところて , 68000 て、は ? ? ? ? て、示してあるム ダなコードが出てきています。このコード は Ver. 1.34 の gcc て、は出てこないのて、 , Ver. 1.36 のエンハンスのときの変更が原 因て出てきたものと思われます。 gcc は Ver. 1.36 になって少しムダなコード を出してくるという話をパソコンネットて、 ことがありますが , 事実のようて、す ( 時間的に Ver. 1.37 を確認て、きなかったのて、 すが , 直っているのて、しようか ? ) 。 ほかに , あまりサイズが大きくない構造 体の転送などに多数のオートインクリメン トコードを gcc は生成します。 文列出力プログラム 次に List7 て、す。 典型的な文字列出力のプログラムて、すが , 関数呼び出しの後のスタック補正を 68000 , 80386 ともにまったく行っていません。最後 にフレームボインタの復帰て一気に解決し てしまう凄まじいコードを生成します。ま た , 68000 て、は関数のアドレスをレジスタに 格納して間接コールしています。 また , fprintf に渡される文字列がすべて 同じなのて、 , この文字列を格納するストレ ージもひとっしか生成されていません。 余談になりますが , 高度の最適化を行う コンパイラては K & R をよく読んておかない と不可解なバグに悩まされます。 たとえば文字列に関しては gcc やほかの fprintf(stdout, "C maga & X68000 " ) : fprintf(stdout, "C maga & X68000 " ) : fprintf(stdout, "C maga & X68000 " ) : (C) CD ー 8 List List7 のコンパイル結果 ( 68000 ) Z 0 11 り 0 -4 戸 0 ^ 0 行ー 8 0 ・ -1 ワ 0 4 ・ LD CD ー 8 0 1 よワ 0 っ 0 -4 ・ - -0 、 .0 ー 1 よ 1 よ , 1 11 , 1 14 1 よ、ー・ 1 よ 1 よっなっ乙ワ 1 っ 0 っ 0 っ 0 っ 0 っ 0 . text . dc. b ℃ maga & X68000 ' , $ 00 . even . xref _mal n . xdef main link a6, # 0 movem. 1 d3/a3, -(sp) pea し CO move. I # ~ iob + 22 , d3 move.l d3, ー (sp) lea -fprintf,a3 jsr (a3) pea し CO move.l d3, ー (sp) jsr (a3) pea し CO move.l d3, ー (sp) jsr (a3) pea し CO move. 1 d3, ー (sp) jsr (a3) movem. I ー 8 ( a6 ) , d3/a3 unlk a6 rts List List7 のコンパイル結果 ( 80386 ) ” test. c ” . f ⅱ e Q) 0 1 っ 0 っ 0 -4 - -0 行ー - 8 9 0 ・ 1 ワ】っ 0 4 戸 0 CD ー 8 0 ・ 1 ワ】 -4 - -0 C.O ー 8 1 よ 1 人 11 1 △ 11 1 よ・ー・ 41 1 よ 1 ・ワ 0 っ 0 っ 0 つなり朝ワなワ 0 っ 0 . asci i "C maga & X68000 \ 0 " . align 2 . 0bl ma ー n : pushl %ebp movl %esp, %ebp pushl Xebx pushl $ し CO movl $ ~ iob + 24 , %ebx pushl %ebx call -fprintf pushl $ し CO pushl Xebx call -fprintf pushl $ し C0 pushl Xebx call -fprintf pushl $ し CO pushl Xebx call -fprintf leal -4(Xebp), Xesp popl Xebx leave ret 142 CMAGAZINE 19 5

9. 月刊 C MAGAZINE 1990年5月号

ラプ 9 リ [d,i,o,x,x] long int long unsigned int [e,E,f,g,G] long double [e,E, f,g,G] long double 引数の型指定 ( ptr ) はポインタ指定を表す 符号つき 10 進整数 int 符号なし 10 進整数 i nt int 符号なし 8 進整数 符号なし 16 進整数 ( abcdef を使用 ) int 符号なし 16 進整数 ( ABCDEF を使用 ) int 符号つき浮動小数点数 double 符号つき浮動小数点数 ( " e " を用いた指数 double 表示 ) 符号つき浮動小数点数 ( " E " を用いた指数 表示 ) f か e より短く表示できるほうを選択 double f か E より短く表示できるほうを選択 double 単一の文字 i nt 文字列 (ptr) 最初の " \ " もしくは , precision 個の部分 文字列 int (ptr) ストリームやバッフアに書かれた文字数 が指定位置に格納される void far (ptr) 引数のアドレスを xxxx : yyyy 形式で出力 ( % Np の場合オフセット yyyy のみ ) w' 書き込みのために空のファイルをオープンする ( ファイルが存在すれば , 内容は失われる ) a' ファイルの最後に追加するためにオープンする ( ファイルが存在しなければ , 新たに作成する ) ” r 十” 既存のファイルを読み込み・書き込み両用にオープンする 空のファイルを読み込み・書き込み両用にオープンする ( ファイルが存在すれば , その内容は失われる ) 読み込み・書き込み両用にファイルをオープンする ( ファイルが存在しなければ , 新たに作成する ) ほかに , 次の文字を type 文字列に付加することによって , 復改文字の変換モ ードを指定できる t テキストモードでオープンする ( ANSI 標準ではない ) ( 入力時には CR / LF が LF に , 出力時には LF が CR / LF に変換される ) バイナリモードでオープンする ( CR / LF の変換は行われない ) ・戻り値 FILE * : オープンストリームのポインタ ■工ラー NULL : 異常終了 type ・ 0 0 X 事ー double b fprintf ■機能要約フォーマットされた文字や値を , 指定したストリームに出力する #include く stdio . h 〉 ー用法 fprintf ( stream, format く argument>. ■引数 FILE * stream : ファイル構造体へのポインタ const char * format ・書式制御文字列 ・戻り値 int: 出力した総文字数 ーエラー CMS-C] なし CTurboC] EOF ■注意 fo 「 mat の書式・機能は , 以下のとおりである Cfprintf 書式一覧 ] ・ fprin 廿の書式指定は " % " に続く文字列で表現される。 " % " 自身を出力する場合 は , ” % % ”と書く ・書式指定の形式は以下のとおり ( 【】内部は省略可 ) % (flags 】【 width 】【 . precision 】【 model) 【 prefix 】 type 意味 ( ロ内部は , それぞれの pe によって意味が異なる場 フィールド文字 を示す ) 左寄せ出力 値が正の場合 , ” + ”符号を出力 十 値が正の場合 , 先頭に空白を出力 SPACE [o,x,x] 先頭にそれそ・れ , 0x , 0 幻を出力 [e,E,f] 小数点をつねに出力 小数点をつねに出力し , 後続の” 0 " を切り 捨てない 出力する文字数の下限を指定 ( 数字で表記 ) 有効桁数の指定 ( 必ず” . ”に続いて数字を表記する ) [d,i,u,o,x,x] 最小桁数の指定 , 少ない場合には左側を ” 0 ”で埋める 小数点以下の桁数指定 , 最終桁の下の桁 で丸められる 小数点以下の桁数指定 , 出力桁に合うよ うに丸められる [g,G] 有効桁の最大数の指定 影響なし 最大文字数の指定 sm 訓モデルでは , 引数に fa 「ポインタをとる場合に指定 comgm, midium,large,huge モデルにおいて , 引数に ポ インタをとる場合に指定 変換される引数のサイズの指定 [d,i,o,x,X] short int short unsigned int fputs ・機能要約文字列をストリームに書き込む #include く stdio . h 〉 ・用法 fputs ( string, stream ) ; ・引数 char * string : 出力する文字列へのポインタ : 出力する文字列へのポインタ const char * string FILE *stream : ファイル構造体へのポインタ ・戻り値 int 0 : 正常終了 : 最後に書いた文字を返す CTurboC] i nt ■工ラー int ! 0 CM S-C] CTurboC] EOF ■注意文字列の最後の " \ n " は出力されない CM S-C] CTurboC] flags fread ■機能要約データ ( 指定バイト長 ) を特定数だけストリ = ムから読み出す #include く stdio . h> ■用法 fread( buffer, size, count, stream); ー引数 void * buffer : データを格納するためのバッファ : データ項目ひとつ当たりのバイト数 Size t Size : 読み込む項目の最大個数 Size t count : ファイル構造体へのポインタ FILE * stream ・戻り値 size t : 実際に読まれた全データ項目の個数 ( バイト数ではない ) ■工ラー戻り値によって区別することはできない ー注意工ラーとファイルの終了は , feof や fe 0 「で調べなければならない st 「 eam のファイルポインタは読まれたバイト数だけ進む。 st 「 eam がテキ ストモードでオープンされている場合 , 復帰 / 改行 ( CR / LF ) は改行 ( LF ) に変換されるが , ファイルポインタや戻り値には影響しない。工ラーが 発生すると , ストリームのファイルポインタの位置を調べることができ ないが , 工ラー発生直前までに読み出されたデータは参照可能である width preclston [e,E] Cf] model prefix C プログラマのためのランタイムライプラリ入門 83

10. 月刊 C MAGAZINE 1990年5月号

0- UN ( 0N98 シリーズ 』を料理 3 C ファンクション 98 ◎い、 C ″は理解したつもりだが、実際にプログラ乙を組むとなると標準関数けではどうにもならない』とあ悩み のあなを。 ◎『 BAS ℃にあった命令ガない」と腹立たしくあ思いのあなた。 ◎「うちも、そろそろ、、フォートラン″、、、 BAS ℃″ガら卒業しようガ』と、℃″言語導入思案中のあなた。 ◎「こんな関数、命令ガあったら楽なのに・・・・・・」とあ悩みのあなた。 C ー FUNC 羽〇 N98 はプログラ乙作成に要な関数、コマンドガ豊富に用意されています。あなは関数をコー ルヴるだけで OK ! 。作業効率ガクーンと UP ! BAS ℃ライワなプログラミンクが可能となりました。 BAS ℃ライクなプログラミングを可能にする豊富な関数群 ! 構 成 データ変換関数 ( 数値 3 桁位取り等 ) 、ファイル入出力関数 C ー FUNC 引 0N98 ライプラリー関数オプジェクトファイル、強 ( ランダムアクセス等 ) 、ファイル以外の入出力関数 ( 数値入 カコンノヾイラコントロールバッチ、ツールコマンド、ライプラリー 力、 RS ー 232C 等 ) 、グラフィック関数 ( N88BAS ℃対応、拡張 リファレンスマニュアル ( 取り扱い説明書 ) グラフィック等 ) 、画面制御関数 ( N88BAS ℃対応、テキスト画 使用環境 面保存等 ) 、漢字処理関数 ( 漢字属性、』 S 変換等 ) 、メモ リー関数 ( 領域確保等 ) 、マウス関数 ( N88BAS ℃対応、マウ 対応機種 :NEC. PC ー 98 田シリーズ ステンキー等 ) 、サーチ関数 ( ファイル、文字、数値検索等 ) 、 ()A 、 LT を除く ) 文字処理関数 (left 、 mid 、 right 、 replace 等 ) 、システム関数 オペレーションシステム : MS-DOS Version2. Ⅱ以上 ( ファンクションキー、 MS-DOS 情報、マシン情報等 ) 、時問 C コンパイラー : MS-C Version3.00. ロ以上 関数 ( 日付、時刻、日数計算等 ) 、アプリケーション関数 ( 電 LATT ℃ E-C Version 」 3 」以上 卓、時計等 ) など 220 ( バーソナルはロ 0 関数 ) を越える BAS ℃ Turbo-C Version l.5 以上 ライクな関数が用意されています Quick-C Version 凵以上 ハワーアップキット C ー FUNCTI 〇 N98 の基本機能に加え、更にクラフィッワ、 マウス、テータ変換、コンソール、文字列、ファイル管理、 プリンター、外字処理、日 S ー 232C 、日本語入力制御、ウィ ンドウメニュー、その他の関数を 100 種類以上追加し拡張 関数ライプラリーです。 C ー FUNCTlON98 と組合せて使用ヴれば、ほとんどのプロ クラ乙ガ簡単に作成出来ます。 また、「パワーアップキット』にはオートマニュアル『 MAN. EXEJ ガ附属してまヴ。 ①工デイターなどからマニュアルを子プロセスで起動することがで き、コーディング中に参照、出力が可能。 ②プリンター、ファイルにマニュアルの出力が可能。 ( ①リファレンスマニュアルの EXAMPLES ソース ( サンプルプログラム ) のみファイル出力が可能になりコーディングが更に楽になりました。 ④強力な検索機能付。 ⑤自 nde で作成したファイルの読み込みが可能。 価格 : プロ用 ( 業務用 ) ・・ 個人用・・ ・¥ 55 , 000 ・・ \ 12 , 000 各コンバイラ共通 注意 : 「パワーアップキット」を使用するには、 C-FUNCTlON98 本体 が必要です。 5.25 インチ 2HD 、 3.5 インチ 2HD フロッビーディスク ¥ 19 , 800 ( C ・ファンクション 98 ノヾーソナル ) 個人使用対象・ ¥ 24 , 800 \ 99 , 800 価格は各コンバイラ共通です。 体 ※「パワーアップキット」のマニュアルはオートマニュ アルソフト CMAN. EXEJ とマニュアルファイルの 形態で供給されます。 C-FUNCTION98PERSONAL C-FUNCTI 0N98 ー NTERM ー DA 祚 ( C ・ファンクション 98 インターミディエイト ) プロ用関数個人使用対象・ ( - F リ N ( T ー 0N98P 0 ( C ・ファンクション 98 プロ ) 使用ライセンス付き・ ■ HARACÅ 5Y5 正 M 4 、株原田ソフトウェアテべロップメント 〒Ⅱ 0 東京都台東区 , 也之端 4- 汚 -8-206 TEL03 ー 82 ト 88 ロ 、原田システム設計 〒 320 栃木県宇者・市弥生 2 ヨトⅡ TEL 0286-34 ー 5605 ※お買い求めは、全国ソフトショップまたは 左言発もしくは販売元へ。 ※ユーザーサポートは月曜 ~ 金曜日の 田 : 0 2 : OQ い 0 巧 : 00 ユーサーサポート TEL 0286 ー 34 ー 5605 ※ MS ・ DOS は、マイクロソフト社の登録商品です。 ・ HARADA. YYT