明解 ノ \BbIC 言語 入門講座 範囲てあれば , 1 桁の出力となりますから , 数値によって大きさ ( 幅 ) が変化することに なります。もっとも書式を指定すれば , 任 意の大きさて出力することもてきます。文 字としての出力を行うのて、 , cat などて、中身 をのぞくことがてきるのが , 大きな特長て、 す。 ・バイナリモード バイナリモードて、は , 整数の内部表現を そのまま出力します。ここて、は int 型を 2 バイ トて、あると考えています。よって , a がどの ような数値を持っていても 2 バイトの大きさ て、出力されます。内部表現をそのまま出力 します。したがって , cat< のぞくのは不可 能て、す ( 可能て、あったとしても , 意味のない ものが出力されます ) 。 ファイルの大きさは , 一般にテキストモ ードよりも小さくなります。さらに に ) 浮動小数点値などは , まったく精度を落 とすことなく読み書きできるのが特長て、す。 8086 の注意点 整数の内部表現については , 1 月号て、解説 しました。 List 4 て、入出力を行った 0 ~ 9 , 2 573 および 12609 の内部表現は , Fig. 7 に示す ようになります。ここて、 , Fig. 5 の実行結果 と Fig. 7 を比較してみてください。たとえば 値 0 ~ 9 を 16 進数 4 桁て、表すと , Fig. 7 に示す ように , 0X0000 , 0X0001 , 0X0002 , 0X0009 となるはずて、す。しかし Fig. 5 の実行 結果を見ると , 0 0 ・ 0 0 , 0 1 ・ 0 0 , 0 2 ・ 0 0 , ・ , 09 ・ 00 となっており , 上位バイトと下 位バイトが逆になっています。 これは 8086CPU の仕様てす。ここて、も 25 73 を例にとり , Fig. 8 に示しています。プロ グラム上から数値を扱うときの論理的表現 ( ビット演算など ) は , あくまても Fig. 8 (a) てあるように , プログラマには見えます。 よう。ここて、は 2573 の値を持っ整数 a を出力 す。 しかし実際には , メモリ内部て、の物理的表 dmp て、は , fread を用いて 16 文字ごとに読 する例を考えます。 現は , 上位バイトと下位バイトの並びが逆 み込みを行います。出力としては , まず各 ・テキストモード になっており , Fig. 8 (b) のように格納され テキストモード <fprintf による出力を行 バイトごとに , 16 進数値の表示を行います。 うと , 整数を「目て見ることのてきる」文字 ています。 さらに , 印字可能文字はそのまま , 非印字 もっとも , 通常の C 言語て利用する限り , 文字は ! 〃として出力します。 の並びツ 573 クとして出力します。この場合 論理的表現さえ知っていれば十分て、あり , は , 数値は 4 桁てすから , 4 文字分の出力と Fig. 6 を見ながら , テキストモードとバイ なります。たとえば , たまたま値が 0 ~ 9 の この逆配置を意識することはありません。 ナリモードについて , もう一度確認しまし 明解 ANSI C 言語入門講座 83 dmp ・・・ファイルのダンプ List く stdio. h> 1 : #include 2 : #include く ctype. h> 3 : ーストリーム src を dst へダンプー 5 : void dump(FlLE *src, FILE *dst) size_t 7 : unsigned long count = 0 : 8 : unsigned char bufC16] : 9 : 10 : while ()n = fread(buf, 1 , 16 , src)) 〉の ( 11 : int 12 : 13 : fprintf(dst, ” % 081X 14 : 0 ; i く n ; i + + ) for ( i 15 : ” % 02X ” , (unsigned)buf[i]); fprintf(dst, 16 : if (n く 16 ) 17 : for (i ニ n; i く 16 ; i + + ) fputs( ” , dst); 0 ; i く n; i + + ) for (i 19 : fputc(isprint(buf[i]) ? bufCi] , dst); 20 : fputc(' *n' , dst); count + = 16 : 22 : 23 : fputc(' %n' , dst) ; 24 : 25 : } 26 : 27 : int main(int argc, char *argv ロ ) FILE *fp; 29 : 30 : if (argc く 2 ) fputs(" ファイルを指定して下さい *n". stderr); 32 : else { 33 : while (--argc 〉の { 34 : if ((fp = fopen(* + + argv, "rb")) = NULL) ( 35 : fprintf(stderr, " ファイル % s が正しくオープン " 36 : ”できません \ n ” , *argv) : 37 : return(l) ; 38 : } else { 39 : dump(fp, stdout) ; 40 : fclose(fp); 41 : 42 : 43 : 44 : 45 : 46 : } count) : return( の ; Fig. 5 List 5 で作成した TEMP ファイルをダンプしたもの 00000000 00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 00000010 08 00 09 00 OD OA 41 31 . AI Fig. 6 テキストモードとバイナリモード int a = 2573 ; テキストモード fprintf(fp, a); バイナリモード fwirte(&a, sizeof(int), 1 , fp); 2 5 7 3
Fig. 10 List 7 の実行結果 49 16650 0 1 ('*n') の取り扱い Fig. 11 テキストモードでの改行文字 2 31 41 49 3 31 4 5 6 7 8 9 メモリ OA 書き出し 読み込み ファイル OD OA Fig. 12 List 7 の読み込み OD OA OA 41 Fig. 13 ファイルポジション ファイルポジション 現在読み書きを 行っている位置 読み込んだテータ ファイル 16 , 650 TabIe 3 fseek の機能概路 fsee k 形式 int fseek(FlLE * stream, long offset, int 0 「 igin) 解説 st 「 eam のファイルポジションを設定する。ファイルポジションは , 0 「 i in で指定する位置からの差を 一定されている以下のマクロのい SEEK¯END ファイルの終端 SEEK¯CU R 現在の位置 SEEK SET ファイルの先頭 すれかを指定する 0 幵 set に設定することによって指定する。 0 「 igin にはく stdio. h > に 12 く stdio. h> int main(void) 3 : #define MAX 1 : #include 任意のテータを読み込む fseek は , 成功した場合には 0 を , 失敗した場合には非 0 を返す List 5 : 9 : 10 : 11 : 12 : 13 : 14 : 15 : 17 : 18 : 20 : 22 : 23 : 24 : 26 : } FILE *fp; if ((fp = fopen("TEMP", "rb")) ! = NULL) { int no,• puts ( " 何番のデータ [ 0 ・・ 11 ] を読みますか ? " ) ; return ( の : fclose(fp) : puts ( " データの番号が正しくありません " ) : } else { printf("Xd 番のデータは % d です \ n " , no, data) : fread(&data, sizeof(int), 1 , fp); fseek(fp, sizeof(int)*no, SEEK—SET) ; int data; if ()o 〉 = 0 & & no く MAX) { scanf("Xd ” , &no) : 明解 IC 言ロロ 入門講座 字 ) て、、、 \ n 〃は 0x0A の値を持ちます。 MS-DOS 上の C 言語は , テキストファイル に対する読み書き時に , Fig. 11 に示すよう な変換を自動的に行っているのて、す。 これて、 , 実行結果が正しくない理由がわ かりましたね。 Fig. 5 からもわかるように 明解 AN C 言語入門講座 85 任意の位置のデータを読み書きて、きるはず て、した。ファイルポジションを設定すれば , ァイルの先頭から順に読み書きを行うもの これまて、示したプログラムはすべて , フ てファイルポジションが史新されます。 うに , 読み書きが成功すると , それに伴っ ます。 fread, fwirte の説明からもわかるよ ンは , 0 すなわちファイルの先頭に設定され ードて、のオープンを除き ) ファイルポジショ ファイルをオープンしたときは , ( 追加モ ョン』と呼びます。 けるために , 本連載て、は「ファイルポジシ す。前回説明したように , 用語の混乱を避 び , FILE 型のオプジェクト中に記憶されま ル位置指示子 (file position indicator) と呼 かを覚えています (Fig. 13 ) 。これをファイ ファイル中のどの位置を読み書きしている す。ファイルを読み書きするときは , 現在 イルポジション』という言葉を使っていま TabIe 2 の fread, fwirte の解説て、 , 『ファ ファイルポジション リモードでオープンする リモードで作成したファイルはバイナ テキストモードでオープンし , バイナ テキストモードで作成したファイルは 重要 ばならないことがわかります。 識し , 読み書きを同一モードて、行わなけれ ときには , テキスト / バイナリのモードを認 この例から , ファイルの読み書きを行う 読み込まれてしまったのて、す ( Fig. 12 ) 。 の 2 バイトが , 改行文字 ( 0A ) に変換されて , イルとしてオープンしたから , その OD ・ OA 41 ・ 31 となっています。これをテキストファ TEMP ファイルの最後の 4 バイトは , OD ・ ()A ・
ドキュメント作成支援システム 特集 ため , MS-DOS て、はかなり小さいドキュメ るために特化しています。 QuickHelp はプ ントて、もメモリが足りなくなってしまうと リントアウトすることは考えていません。 いうふたつの欠点があるために日本語の , また , 普通の整形プログラムが当然持って かっ MS ー DOS 環境の上て、は非実用的て、す。 いる索引やクロスリファレンス , 目次など の機能もありません。しかし画面を制御す プリントアウト るための命令は豊富て、 , テキストに色をつ TeXinfo に近いシステムについて調べてみ 一方 , TeXinfo ファイルからプリントアウ ましよう。前にあげた UNIX の man は TeX けることがて、きます。 ⅲ fo の直接ライバルとなるものて、すが ( とは また , 画面の一部をスクロールさせない トするときは普通 TeX を使います。 TeX は とくに UNIX の世界て、広く使われている高性 いっても TeXinfo が一方勝ちて、すが ) , それ以 ようにすることもて、きます。プ化ダウンメ ーを使うこともて、き , どのようなメニ 能テキスト整形 / 印刷システムて、す。 TeX は 外にもヘルプシステムはいくつもあります。 ハイバーテキストに , テキストだけて、なく 一項目を表示するかを指定することもて、 強力なマクロ機能を持っており ,texinfo. te x というマクロセットを使うことて、 TeXinf 絵や音が表現て、きるようにしたものをハイ きます。さらに , マウスを使ってある特定 0 て、書かれたソーステキストを直接 , 整形し パーメディアというそうて , 最近進歩の著 の単語をクリックしたとき , 別のトヒ。ックに ジャンプすることもて、きます。 しい分野て、す。ハイバーメディアは単体て、 てプリントアウトて、きます。 ひとつの作品として成立していることも多 しかし , TeX は最近は MS ー DOS て、も使わ これらは , Emacs の最低限の画面上の表 いのて、すが , それをオンラインマニュアル 現能力の下て、使うことを前提にした info には れるようになってきたというものの , フォ の一種と考えることもて、きます。しかしそ ない機能て、す。逆に inf 。は貧弱な画面の下て、 ントなどて、ディスクを圧迫すること , また こまて、範囲を広げると話が拡散してしまう も使うことがて、きるためにポータビリティ 処理速度の問題から , MS-DOS て、使うには のて、 , テキストべースて、 , MS-DOS て、一般 多少勇気がいります。 は非常に高くなっています。 に利用て、きるものという条件に限定するこ Quick Help のヘルプファイル本体は圧縮 finfo とにしました。そのような経緯て、取り上げ のかかった特殊な形式となっており , Quic たのは Quick HeIp と TTHELP て、す。 kHeIp 形式という人間が読める形のファイ TeXinfo それ自身は決して複雑なシステム ルから helpmake というプログラムを使って て、はないのて、すが , それを処理するソフト •ck Help 圧縮された形式に変換します。 ウェアが UNIX ( 並に大きなシステム ) プロバ ーなものばかりだったために , MS-DOS て、 本記事は Quick HeIp にこだわるのが主目 マイクロソフトの開発環境に使われてい の利用は困難て、した。 的てはないのて、 , Quick HeIp のサンカレを提 示するだけにします ( List 7)。前に UNIX の るヘルプシステムを Quick HeIp といいま 今回紹介する finfo というシステムは , 小 man のところて、も使った Uni ライプラリて、 規模なコンピュータて、も TeXinfo を利用て、き す。 Quick HeIp もハイバーテキストて、す るように , GNUEmacs や TeX を使わずに が , TeXinfo とは多少考え方が違います。 す 0Fig. 18 がヘルプを見ているときの画面 て、す。なお , ヘルプファイルを作るには , info ファイル / プリントアウトを作成て、きる QuickHelp はオンラインマニュアルを作 Fig. 19 幵 HELP のサンプル画面 Fig. 18 Quick He ゆのサンプル画面 ようにしたシステムて、す。 Te ー fO に近いシステム くくく TTHELP > > > Ver 1. Ccpynght (C) 19 O 戸田プロダクション 面 1 ライプラリで提供されるライプラリ関数を説明します . これらの関数を 使う場合には , ソースファイルの頭で下のように um. h を取り込んで下 さい . #lnclude く unl. れ > ライプラリ詳説 : 物 1 ライプラリで提供 使う場合には , ソースファ #lnclude く unl. h 〉 wtd 」 説明します . これらの関数を に um. h を取り込んで下さ 参照 く urll—lnitlallze> く unl—draw> く um—erase> くす 描消 - しをを 初ウウ i—lnltla11Z unl—draw unl—era* 51 ライプラリ インストール 利用方法 特集 ドキュメント作成支援システム 37
続々登場新ライフラリ 0 ソースコード付属 / 組み込みロイヤルティ無料 0 lbraries マシン共通化ライフラリ PF し / 98 PF し / J3100 PFL/AX PFL/FMR PFL ライプラリは複数のパソコンて同一仕様の関数を提供するライプラリシリーズ。 NE C PC -9800 シリーズ、東芝 -3100 シリーズ、各社 AX 仕様パソコン、富士通 FM 日 -50 シ リーズ間で、各機種の OS 、ハードウェア等の差異を吸収し、統合化された関数インタ ーフェイスを提供することにより、同一仕様の関数を提供し、マシンインテペンテントな ソフト開発が可能なプラットフォームライプラリです。 このライフラリシリーズを利用することにより、例えば 98 シリーズ用に開発したソフトを J -3100 、 AX 等他の機種に移植する、同時開発するといった作業が非常に簡単に行えます。 キー入力、テキスト画面表示、カーソル制御、テキストウインドウ、メニュー選択、グラ フィックス、マウス等の関数が提供されます。 ■キー入力 SH 旧 T / CT 日 L / ALT と各種ファンクションキー•INS ・ DEL 等を組 価格各 9 ククク み合わせての取得か可能。■テキスト表示高速画面表示 / 矩形領域の切り張り・移動・ コピー / 部分・全体の上下左右スクロール etc ■カーソル移動・位置の取得・形状の 変更・移動範囲の指定・表示の切り替え・ウインドウ / メニュー Window & Menu と同等の機能を提供。■グラフィックスほとんどの図形描画関数て 5 種類のラスタオペ レーションをサポート / 矩形領域のスクロール・移動・コ e—etc ・マウスカーソルの 移動 / 位置の取得 / 移動範囲の指定 / 表示の切り替え / ホタン押下情報の取得 etc ■完全ソースコード付属、組み込みロイヤルティ無料。 ◆ MS-DOS Ve 「 3 」以上◆対象 C コンバイラ Mic 「 osoft-C Ve 「 . 5 」 6 ラージモテルに対応 ◆テモティクを用意しています。切手 00 円分をお送りください。メティアは 98 用 5 ″ 2HD 、 J31 凹用 3.5 ″ 2DD 、 AX 用 3.5 ″ 2DD 、 FM 日用 5 ″ 2HD となっています。 すわ e C Libraries fo PC ー 9800 series Key & 00P ね y ー、 価格ア 29 クク 価格ア 2 クク Menu & SeIect Menu & S 引 ect 」はメニュー表示と項目選択に関する機能を提供する C 言語用ライプ 1 文字単位のキー入力から、 1 行工デイタ、数値 / 全角等文字種指定のテータ入力関数まで、 ラリです。画面のまん中に数個のメニューを表示するべージメニュー、指定行に表示する また 1 文字表示から、指定領域に折り返し表示を行う関数、カーソル移動キーにより上下左 ラインメニュー、ポップアップメニュー、一度に多くの項目を選択対象として表示できス 右スクロール表示が可能なテキスト表示関数まで、キー入力、画面表示 / 制御のさまざま クロール可能なワイドメニュー、一覧表のような形式のリストメニューか提供され、カー な機能を提供するライプラリ。■キー入力ファンクションキー、カーソル移動キー、 A ソル移動キー、ホットキーおよびマウスによる選択が可能です。各メニュー関数は組み合 NK 、漂字の各コードを 1 回のキー入力関数で取得できる。・日本語入力 FEP の制御 A わせて利用することができるので、用途に合わせて最適なメニューを利用することができ TOK6 / 7 、 VJE 、 NEC/NECAI の起動、入力 / 変換モードの切り替え、終了等の機能 ます。また、選択されたメニューを表示したまま次のレベルのメニュー選択か可能です。 を提供。・スクロール可能な 1 行工テイタにより、表示幅より大きいテキストの入力が可能。 メニュー選択時のキーコードは簡単に変更することができるので、アプリケーションに合 ・テータ入力関数日本語入力 FEP の制御を伴った文字種指定のテータ入力関数カン わせたキー設定が可能です。簡単に呼び出せる A 曰 / メニューバーの大きさの変更、メニ マ編集・折り返し表示可能な指定領域への文字列表示関数■スクロール表示関数カ ュー選択中に他の処理を行う等のフレキシプルな処理が可能な A 曰の 2 種類の AP 陸サポ ーソル移動キーにより上下左右スクロール表示が可能なテキスト表示関数。・その他各 ートしています。ページメニューを除くすべてのメニューを階層化することができる階層 種シフトキーの取得、文字属性 ( 表示色 / リバース / プリンク / アンターライン等 ) の設定 メニュー機能があり、一連のメニュー選択を自動化することができます。また、キーの変 更によりメニューカーソルの移動キー、選択キーを変更することも可能てす。 価格ア 29 クク Window & Menu Window & Menu/EX 価格ア 4 クク CCF / 総合コンソ - ルコントロ - ルライフラリ価格ア 5 クク テキストウインドウ、メニュー関数のライプラリバッケージ。簡単な説明や操作カイドを CCF/EX 価格ア 9 クりク ヘルプウインドウを開いて表示するためのマルチウインドウ機能とウインドウを利用した キーホード、テキスト画面、クラフィック、マウス、ウインドウ、メニュー、プリンタ、 メニュー選択機能を提供します。 拡張関数等 200 以上の関数で構成される統合コンソールコントロールライプラリてす。 ◆ Window & Menu/EXJ は XL 、 XL2 、日 L のハイレゾリューション / ノーマルの G 「 aphic & Mouse(VEX). 1 、 ! ・ Window & Menu(ZEX)' を包含。 両モードに対応。互換モード ( 自動判別 ) も装備。 ■プリンタ関数は日一 OS を介してプリンタに文字コード、制御コード送り、各種アルファ べットの文字印字、拡大、キャラクタモードの切り替え等の処理を行うことかてきます。 BGM / クラフ作成プロクラム CCF ー EX では XL 、 XL2 、日 L の八イレゾリューション / ノーマルの両モードに対 BGM/EX 応し、一部の関数を除いて、どちらのモードても動作するプログラムを開発することが てきます。 12 種類のグラフ作成機能を提供するバッケージ。例えは、必要なバラメータを設定し、関 数を呼び出すだけで円グラフや棒グラフを簡単に描画することかできます。さらに、タイ ピジネスアプリケーションで必要とされるあらゆるクラフ情報を表現できます。 応。さらにどちらのモードでも動作する互換モード ( 自動判別 ) もあります。 価格ア 9 ククク 価格タ存ククク 価格ア 29 ク Graphic & Mouse Graphic & Mouse/EX 価格タ 59 クク N88 日 A C 相当のグラフィック機能とマウス機能を提供するライフラリ。グラフィック 機能はグラフィック画面に点、線、四方形、円、文字等を描画する機能、指定領域を切り 出す貼り戻す等の機能と表示モードの設定を行う制御機能て構成され、マウス関数はマ ウスカーソルの表示非表示、色指定、ボタンの押下状態の検査、移動範囲の指定、移動 距離の検査等の関数かあります。 ◆ G 「 aphic & Mouse EX 」では XL 、 XL 气日 L のノ、イレゾリューション / ノーマルの両 モートに対応しており、どちらのモードても動作する互換モード ( 自動判別 ) の設定も可能。 ◆ BGMZEX では XL 、 XL2 、日 L の八イレゾリューション / ノーマルの両モードに対 価格タ 4 クク 価格ア 9 ククク R 232C Library R 2320 Library/EX MS - C から呼び出すことのできる日 S -232C コミュニケーションライプラリです。「日 S ー 232C Lib 「 a 「 y コは B 旧 S を利用して日 S ー 232C の制御 / 送受信を行っています。これに 9861 K 用とマルチサー八用テパイスドライバ版を追加拡張した日 S -232C Lib 「 a 「 YZ EX の 2 種類があります。とちらも 2 、 3 回線もサポートしています。 ◆日 S -232C Lib 「 a 「 y. : ( \ 49.800 ) では MS - DOS のウアージョン、型番に制限あり。 価格ア 4 ク 0 ・走行環境等 ( PFL を除く ) ・機種 NEC PC -9800 シリース ( LT を除く ) * 製品によっては XL 、 XL 气日 L の ハイレソリューション / ノーマルの両モートに対応。 ・対象 C 言語・・ Mic 「 OS0ft-C 5.1 / 6.0 Quick-C 2.0 Turbo-C 2.0 / C 十十 ・メティア・・・・ 5 ″ 2HD 、 3.5 ″ 2HD ・ MS-DOS ・ Ve 「 sion 3.1 / 3.3 ■お求め方法 お近くの八ソコンソフト取扱店、秋葉原の石丸電気マイコンセンター ( 03-325 ト凹 11 ) または弊社てお求めになれます。 * すへての表示価格には消費税は含まれておりません。 * 各製品は C 言語毎の対応になっています。 * 各製品の仕様は断わりなく変更されることかあります。 GP•旧 Library GP - 旧インターフェイスホード ( pc -9801 -29K N ) を C 言語から利用するためのライプ ラリ。 N88- 日 AS ℃か使用している GP - 旧ホード内の日 OM - 日 OS を呼び出している のて、日 AS ℃と同等の機能を提供します。 MS-C 用、 Tu 「 bo-C 用があります。 ・詳しい資料総合カタロクを用意していますので、こ請求ください。 会 〒 ・ PHONE 03 ー 5828 ー 0 デ 1 ・ FAX 03 ー 5828 ー 051 3 く資料請求番号 162 〉
一般にはプログラムが関知しない領域て、 , 逆になっているだけて、す。 バイナリファイルは , バイトの並びて、す から , テキストファイルは , ある意味て、は バイナリファイルの一種ともいえます。 dm p ユーティリティて、テキストファイルをのぞ いてみましよう。 A>dmp dmp. c のように , dmp て、自分自身のファイルをダ ンプした結果を Fig. 9 に示します。 工ンディアン 2 バイトの int データを 2 バイトの int とし て読み書きするにはまったく問題はない のですが , それをレヾイトずつ読み込んだ りするためには , 物理表現を知っておか ねばなりません。 このような複数バイトにわたるデータ の配置に関しては , 参考文献 [ 1 ] に詳し く書かれています。 Fig. 7 各整数値の内部表現例 0 0 : 0 : 0 ! 0 : 0 : 0 : 0 0 : 0 : 0 : 0 , 0 : 0 : 0 0000 1 0 ! 0 : 0 \0 : 0 : 0 0 ! 0 \O : 0 : 0 : 0 ⅱ 0001 9 0 : 0 : 0 ! 0 : 0 : 0 0 : 0 ! 0 : 1 ・ 0 : 0 ! 1 0009 2573 0 : 0 ! 0 ! 0 : 1 ・ 0 : 1 : 0 0 ! 0 ! 0 ⅱ ! 1 : 0 : 1 ODOA 12609 0 : 0 : 1 い ! 0 ! O ! 0 ⅱ 0 ! O : 1 ! 0 ! 0 : O ・ 0 : 1 3141 16 進数 10 進数 2 進数 Fig. 8 整数の論理表現と物理表現 ( 8086 ) (a) 0 : O ! 0 ! 0 : 1 : 0 : 1 : 0 0 : 0 : 0 い : 1 : 0 : 1 論理表現 (b) 0 : 0 : 0 ! 0 いⅱ : 0 い 0 : 0 IO : 0 : 1 : 0 : 1 : 0 物理表現 0 0 一 O 一 A 一 0 4- 介ム A 8 -4 っ 0 9 0 り 0 ー 0 ん 8 0 り 0 っー 0 っ 0 ・つ 0 0 -4 を . 9 8 6 CO りな CD 0 行ー 0 叮ーれ 0 0 0 ん 6 っ 0 0 叮ーりれ 0 ワーワー 0 ^ 0 -4 9 00 0 【 0 0 0 っ 0 00 れ 0 0 00 叮ー 0 つー りりみ ^ 0 0 叮ー -4 戸 0 0 6 4 -0 ^ 0 一 0 ーれ 0 り 8 叮ー ^ 0 0 マー 7 ・ ^ 0 -4 4 っ 0 っ 0 0 00 0 9 -4- 叮ー 6 0 8 8 り、 ,. 叮ーワー 0 0 叮ー 《 ) -0 00 -4 略《 ) 、 9 -0 00 ー 0 -0 9 CD 6 ^ 0 0 0 6 中 9 1 人 0 リ 9 ・・ー・【 0 8 0 》 9 0 乙 れ 0 り 0 0 0 ー 0 CD 0 8 8 ^ 0 果 行 4 00 00 れ 0 A A 《 0 40 0 8 8 叮ー 」 -0 9 ー 6 9 -0 叮ー 00 6 0 0 叮ー 0 っ 0 0 0 し《し 00 8 ^ 0 00 9 人 - 9 ^ 0 0 8 8 0 0 00 ^ 0 0 叮ー行ー プ っ 0 8 4- ・ 9 0 》 0 9 れ 0 0 り LO 叮ーり 0 0 0 な叮ー 0 0 ン ダ を 9 -. 0 8 ^ 0 00 ーりな 00 0 ん 0 0 ー 0 0 00 身 9 4 -0 A 9 自《 0 8 9 0 00 0 6 6 叮ーり 0 、 1 つれ 0 4- 一 0 一 0 ー 8 0 》 00 っ 0 っ 0 れ 0 れ 0 00 9 MS ー DOS のテキストファイル 〃ヾイナリファイル List 5 のプログラムて、は , int 型の数値を バイナリモードて、読み書きしました。 て、作成したファイルをテキストモードて、オ ープンして読み込むと , どのような結果と なるて、しようか。 List 7 のプログラムを見て ください。、、 TEMP 〃をテキストモードて、オ ープンし , fread て、読み込みを行います。 実行結果は , Fig. 10 のようになります。 最後の数値 y が正しく読み込めていません ね。どうしてて、しようか ? こて、 , dmp 自身をダンプした実行結果 て、ある Fig. 9 を , 再度よく見てください。各 行の終わりて、ある改行文字に相当するとこ ろは , OD ・ OA となっており , 改行文字が 2 バ イトになって格納されていることがわかり ます。 MS-DOS のテキストファイルて、は , 改行 文字を 0x0D , 0x0A の 2 バイトて、表現しま す。しかし , C 言語て、は改行文字を、、 \ n 〃す なわち 1 文字 = 1 バイトて、表現することにな っています 0MS-DOS て、使う文字 (ASCII 文 84 C MAGAZINE 1992 3 バイナリファイルをテキストモードでオープン List イ 1 11 十 、ノ ・ 1 X 1 」 O 0 ・ 1 , し十し十し ・ -0 0 ・ 1 : 1 ・ 1 O よ ・ 1 、 0 1 亠りな 4 0 00 叮ー 8 9 0 1 人りん 00 4 : -0 ^ 0 8 0 1- ワ 00 4- ・ 1 1 11 41 ・ー - 、 1 、 1 1 ム 1 よ・ー - りつなつなりっ く stdio. h> 10 カカカ 入入入 ををを
ツ→レキット PC -9800 シリーズ用・旧 M-PC 用 68 , 000 円 お問合せ : パッケージソフトウェアティビジョン TE し 03-5702-7850 MS - DOS をお使いの方に 気軽に UN Ⅸに触れてみることができます。使い慣 れたパソコンとキーポードで UN Ⅸの世界をお試し ください。 UN Ⅸをお使いの方に 見慣れたコマンドを MS-DOSJ\O ソコンで使うこと ができます。 UN Ⅸ環境は高価なワークステーショ ンのものだけではありません。 ・ UN Ⅸ環境への移行のための理想的な学習用ツールに ■サイトライセンス制度を用意 ー AT &T 、 H P 、 N C R 、 U C LA でも標準的に採用 140 を超える UN Ⅸ SYSTEM V. 3 互換のコマンドを MS - DOS 上に 実現。シェル、文字列マッチ、編集、ファイル操作を違和感なく パソコン上で扱うことができます。 Mortice Kern Systems ツール キットは、あなたの MS-DOS/\O ソコンを限りなく UN Ⅸ環境に近 いマシンに変身させます。 ◆ PERSONAL MEDIA CORP. Building Your Future with ◆ P 町 son 引に・ d M ・ d ね . Mortice Kern Systems MS - DOS パソコンで UN Ⅸのコマンドが動く ロ タ グ フ ユ 工 フ ザ ム 。を ス SunView のプログラミン グに苦労されている方に グラフィカルなユーサーインタフェースを作成す るための SunView のプログラミンクが簡単になり ます。画面イメージの作成の苦労はもうありませ ん。 ・対話形式で GU 陸構築 ・特別なプログラミングの知識は不要 ■ホタンの中にも日本語が使える日本語対応 ・カラーにも対応 AutoCODE は、 SunView の各種機能をサポートしています。 サプウインドウ : パネル、キャンバス、ターミナル、テキスト パネルアイテム : ボタン、スライダ、テキスト入力、メッセー ジ、チョイス、トグル、サイクル、ウォーキ ングメニューアイテム等 自動作成 国 = 国 ワークステ 1 ション がなくたって、 Z ー X を使ってみたい。 AutoC 〇 DE 240 , 000 円 TEL. 03-5702-7858 ハソカレメティア株式会社〒 142 東京都品川区平塚 1 -7-7 MY ビル く資料請求番号 002 〉 SunView インタフェース作成支援ツール SPARCstation ・ SUN3 / 4 / 386i 対応 お問合せ : スペシャルプロダクトテイヒジョン
ドキュメント作成支援システム 特集 List 7 参照 初期化 く uni_initialize> ウニを描く く uni draw 〉 ウニを消す く uni_erase> . context uni_initialize . freeze 3 Up: }aFunctions*vFunctions#v Next uni initialize VOid uni_initialize();}p Uni ライブラリを使う場合には , プログラムが起動した時にこの関数を必ず 呼んで下さい . . context uni_draw . freeze 3 prev:*auni_initia Up•.}aFunctions*vFunctions}v Next:*auni_erase*vuni_erase un i _draw lize}vuni_initialize*v #bint uni_draw(int X, int y, int C010r , int attr) ;*p ピクセル座標 (*bx}p, }by}p) に色 \ bcolor \ p , 属性 #battr*p で ウニを描きます . }bcolor#p, \ battr \ p の意味は次の通りです . どうた らこうたら . 描いたウニを消したい時には }buni—erase}vuni_erase%v}p を使って下さい . . context uni_erase . freeze 3 prev : i _eras e}vun i _erase#v Up:*aFunctions}vFunctions}v unl_erase }bint uni_erase(int X, int y) ;*p ピクセル座標 (}bxyp, }by*p) に , #buni_draw*vuni—draw*v}p を用いて書かれたウニを画面上から 消去 します . . context h. title UniLib Reference Manual Te nfo の弱点 TeXinfo にも弱点はあります。 Quick H elp と比較してみればすぐにわかるのて、す が , とにかく画面上て、の表現能力が低いの て、す。文字の強調表示や下線引き , 反転表 示などは普通の端末て、あればて、きます。実 際に UNIX の man て、使われる nroff て、もその 程度のことはやっています。 しかし , info は Emacs という文字をそのま ま表示するしか能力のないエデイタの上て、 使われるものなのて、 , すべてが目に見える テキストになっています。たとえば強調表 示は , このように * 強調 * します 、、 * 〃と、、 * 〃の間にテキストを書くだけ て、す。 もちろん , このようなテキストを表示す るときパーズしなおし , たとえば * の部分は強調表示に直すとか , クロスリフ ァレンスの項目は色を変えるなどの努力を info プラウザの中て、行えば , それなりに美し い画面を作ることも可能て、す。 実際 ,Epoch という Emacs の X ウインドウ インタフェイスを強化したエデイタがあり ます ( これは近い将来リリースされる Emac s 19 版のプロトタイプて、あるともいわれてい ます ) 。この Epoch に含まれている hyper-m an というパッケージを使って info ファイルを 見ると , マルチウインドウを駆使してノー ドごとにウインドウを切って , さらにノー ドへッダやメニュー項目などは色を変えて 表示します。 プリントアウトするときはフォントの切 り換えくらいはて、きますが , 絵や図を入れ ることはて、きません。また , オンラインマ ニュアルのほうに合わせるためか , TeX が 本来持っている数式の整型機能もあえて捨 てています (TeX にエスケープするという技 を使えばて、きることはて、きるのて、すが , うして書いた部分は info て、は見えません ) 。 特集ドキュメント作成支援システム 39 幵 HELP 形式のサンプル ) 形式 List Un i ライブラリ UNILIBRARY Uni ライブラリは MS ー DOS の画面にウニを描くことを可能にするスーパーなラ イブラリセットです . うんぬんかんぬん . & & インストール & & 利用方法 & & ライブラリ詳説 インストール I NSTALL libuni. lib を標準ライブラリディレクトリに置いて下さい . 標準ライブラ リディレクトリとは環境変数 LIB の指すディレクトリです . また , uni. h を標準インクルートディレクトリ ( 環境変数 INCLUDE の指すディ レクトリ ) に置いて下さい . 以上でインストールは完了です . &&Un i ライブラリ & & 利用方法 ライブラリ詳説 利用方法 USAGE ソースプログラム中に Un i ライブラリ関数を呼び出すコード を書き , リンク時に *. obj ファイルに加えて 1 ibun i. 1 i b を指定して下さい . ##HELPCOLOR=WHITE link f00. obj bar. obj libuni. lib
提携・ LANGIJAGE 誌 1992 年 3 月 1 日発行 ( 毎月 1 回 1 日発行 ) 第 4 巻第 3 号通巻 30 号 1990 年 2 月 2 日第 3 種郵便物認可 / 監修・石田晴久 C 言語技術情報誌・ C マカジン 980yen MAR. VOI. 4 No. 3 1992 も〇 VFA の誕生から仕組まで フリーソフト作成記 ンスアムⅡ・ハイバーテキストシステム I ・文芸的プログラミングと WEB ドキュメント作成支援 特集 ・ Visual FiIe Administration プログラム rVFA 」・ XGCC ⑩・ rANSI C 言語入門講座」活用集・立体充境ケーム「 TAKA3DES 」 5 2HD 特別付録 ・トキュメント作成支援ツール >DOS 対応「 WEB 」「 Finfo 」「 Efin 」「 info 」»PC -9801 対応「Ⅱ H 阯円日本語 perITeXinf0 ・本誌掲載ソース 明解 AN 引 C 言語入門講座入出力処理とライプラリ ( 2 ) / djgcc 詳解講座グラフィックライプラリ ( 1 ) / X68k 活用講座 / スタートアップ C 十十 実践アルゴリズム戦路再帰 ( 1 ) / プログラミングの工ッセンス「もしも」 / 提携記事 >The ReaIities of Po 血 b 厄 Software
ボーティングを成功させるために必要な各種サーヒスのシンタクス ファイルサービス : コールの構文 : open_file( lun, file_name, option, (CALLING SYNTAX) List 1 fle_s ize, error ) 目的 : (PURPOSE) 1/0: コールの構文 : 目的 : コールの構文 : 目的 : コールの構文 : 目的 : 1/0: コールの構文 . 目的 : コールの構文 : 目的 : 1/0: 1/0: 注記 : 1/0: 注記 : サービス : 目的 : サービス : 目的 : 既存のファイルをオープまたは新たにファイルをクリエイトする。 1 un file name option f i 1 e S i ze ファイルの論理的装置番号またはハンドル。 ASCII 文字列。 既存のファイル , 新ファイル , アベンド。 既存のファイルならばファイルサイズを返す。 新ファイルやアベンドなら , クリエイトする ファイルサイズ。 close file( lun, file name, option, error ) ファイルをクローズし , 指定があれば削除する。 削除か保存か。 option delete file( lun, file name, error ) 指定名のファイルを削除する ( 一部のプラットホームでは , または file ー name のどちらかだけでよい ) 。 read_fi le( lun, 1 ine, nbytes, error ) write file( lun, line, nbytes, error ) lun く CR 〉く iF 〉付きの 1 行のテキスト行をリードまたはライトする。 line nbytes 入力行を保持するためのバッフア。 バッフアのサイズ。 block_fo( lun, fun, buffer, record-s ize, start_record, number of_records, option, error ) ファイルから非書式化データのプロックをリード / ライトする。 fun buffer record_size start record リードかライトかの機能指定。 ・イス、 = record size * number Of recordso バイト数。 最小限 32 ビット。 number of_recs この回にリード / ライトするレコード数。 ウェイトまたはノーウェイト。 option block ー fo は M 以降の N バイトをリード / ライトする。 record S ize * number of—records M = start record * number Of records スクリーンサービス : ユーザインタフェイスは説明すると長くなるので , こでは骨格だけを示す。 block-io( lun, fun, nbytes, buffer, rlun, rnbytes, rbuffer, option, error ) リモートターミナル等のシリアルデバイスをサポートする。 リード , ライト , イニシャライズ , キャンセル , ライトしてリード , 工コーの有無。 ウェイトまたはノーウェイト ( 終了時にトラップ ないし割り込みを発生できる ) 。 opt ion fun 画面クリアと画面スクロール。 blnkscn, scroll リード , およびクローズする。 ダイアログボックスまたはコマンドウインドウをオープン , openwin, readwin, closewin etc. は入力用。 してリードの J き ) 用。 lun, nbytes, buffer がプロンプトで , rlun, rlun, rnbytes, rbuffer は , 画面にプロンプトを出す場合 ( ライト と思いました。て、も , この方法を採用する と , 2 週間もかけて書いたコードを , その時 点て、気づかなかった問題のために全部投げ 捨てなければならない といったことはな くなりますから , 生産性は大幅にアップし ますよ。構造化プログラミングに従うと , コードを 1 行も書かない前から , PLTLIB に は何を収めなければならないかが分かりま す。また , あるプラットホーム用の PLTLI B を基に , 他の人が別のプラットホーム用の PLTLIB を企画するといったこともふつう に行えるようになります。 ューザインタフェイス の選択 たしかに , テキストべースのインタフェ イスは , グラフィカルなインタフェイスよ りも移植は容易て、すが , て、も Macintosh を移 植しようとしたら , グラフィカルを選ばざ るをえません。したがって , IBM PC が開 発起点て、ある場合は , Mac への移植よりも 則に , Windows 3.0 や X Window System への移植をやってみるのもよいて、しよう。 ューザインタフェイスの選択の幅は , ハ ードウェアプラットホームの多様性と同じ くらい , 多様になっています。ありとあら ゆる標準策定機関が , インタフェイスの標 準規格の策定に努めていますが , て、も歴史 が証明するところによれば , 標準を決める のは市場て、す。現時点て、は , Windows 3.0 が優位なように見えます (Microsoft が最終 的に Apple にロイヤリティを支払うことにな るとしても ) 。 最小公分母 プログラムの移植に際しての大きな問題 は , 最小公分母に合わせてプログラミング することて、す。タスク間通信やコプロセッ ポータブルなソフトウェアの現実 15
特集 ドキュメント作成支援システム e に変換される といった点があげられます。 そのほか , 予約語の扱いなど , PascaI に 依存した部分の書き換えも当然行われてい ます。 CWEB は , UNIX 用の TeX の配布ファイ ルの中に入っていることもあり , かなり出 回っているようて、すが , 実際にどの程度使 われているかは不明て、す。 EB FWEB CKr91] の、、 F 〃は , FWEB が CW 略します。 ているため , CA090] の紹介はここて、は省 CKr91) のほうが機能が高く , 広く使われ 処理系 CA090) がもうひとつありますが , 以外に , まったく同じ FWEB という名前の 実は , ここて、紹介する [Kr91) の FWEB いうのは WEB の欠点といえます。 ュメントをテキスト端末上て見られないと て大きな長所となっています。実際 , ドキ = 番目の点は標準の WEB システムに対し という点が異なります。 結果を見ることができる 力が可能なので , テキスト端末上で出力 ・ nroff によるテキストファイル形式での出 がインストールする必要がない ンドなので , TeX のようにあとからユーザ ・ troff は多くの UN Ⅸシステムの標準のコマ りやや劣る ・ troff による印刷結果は , 機能的には TeX よ ため , WEB と比べて , troff/nroff を使っている点が特徴て、す。その cweb は , タイプセッタとして TeX て、なく のて、 , 注意してください 6 ] 。これは CWEB とはまったく別のものな て , cweb という処理系もあります [Th8 語を採用した WEB べースのシステムとし CWEB 以外に , プログラム言語として C 言 EB をベースとして FORTRAN への対応を行 ったことから来ていますが , 現在て、は , C, C 十十 , FORTRAN 77 , FORTRAN 90 , Ratfor, TeX という多くの言語に対応した システムに拡張されています。 , こて、注目してほしいのは , プログラミ ング言語として TeX を扱うことがて、きる点 て、す。つまり , TeX のマクロファイルをプ ログラミング言語のソースと見なして , Te X のソースを WEB 方式て、書いて , マクロと そのマクロについてのドキュメントとをい っしょに管理することがて、きるわけて、す。 TeX のマクロはわかりにくいことて、有名て、 すから , これは大きな意味があります。た だし , この FWEB の TeX モードを使うと , TANGLE の出力も WEAVE の出力も TeX のコードになるのて、 , どちらがマクロて、ど ちらがドキュメントなのかをよく考えてお かないと混乱が生じます。 将来的には , UNIX の make コマンドて、読 み込まれる MakefiIe をプログラミング言語 として扱えるように拡張する予定もあるそ うて、す。 さらに , WEB ファイルの途中て、言語を切 り換える機能があるのて、 , これらの言語の うちいくつかを混在させて , 文芸的プログ ラミングを行うこともて、きます。 MWEB CSe87] は Modula-2 用の WEB べ ースシステムて、す。 PascaI て、は , さきほどの case 文のデフォ ルト分岐のように , 標準 PascaI て、定義され ておらず , 実用的なプログラムを書くため には処理系ごとに互換性のない機能を使う 必要があります。また , モジュール ( WEB のモジュールて、はなく , 識別子の名前の隠 蔽などを行う , プログラミングにおけるモ ジュールて、す ) の概念もありません。 これらの問題を解決するために , WEB の PascaI を ModuIa-2 て、置き換えたのが MWE B て、す。 EB Modula-2 は , Pascal の設計者て、もある N iklaus Wirth が設計した言語て、 , Pascal が べースになっていますが , モジュールによ る分割コンパイル , 割り込み , コルーチン , ユーティリティモシュールによるファイル 入出力といった機能があります。システム 記述言語としてかなり強力ぞすが , なぜか あまり利用されていない言語て、す。 MWEB は , Modula-2 に対応させるため ・識別子の長さの延長 ・コメント記号の変更 ・大文字・小文字の区別 〃の処理の変更 などの自然な変更が行われているほかは , ほとんど WEB と同じて、す。 eb A-Web [WB89] は Ada 用の WEB べー スシステムて、す。 Ada は , 軍事用途などの , 大規模リアルタ イムソフトウェアの開発用の言語て、 , やは り Pascal を基礎としています。 Modula ー 2 の モジュールに対応する「パッケージ」という 概念があるほか , リアルタイム処理をサポ ートするため , タスクや delay 文などの機能 が盛り込まれています。 A-Web システムのうち , A-Web から Te X への変換を行う A ーⅥ ave は , オリジナル の WEAVE をもとに WEB て、 ( つまりプログ ラム部分は PascaI て、 ) 書かれています。それ に対して , A - Web から Ada への変換を行う A-Tangle は , WEB て、書かれたオリジナル の TANGLE を使わずに , 新たに A ー Web て、 ( つまりプログラム部分は Ada て、 ) 作ったもの を使っています。これは , 「オリジナルの TA NGLE が , 文脈依存文法を使って書かれて いるのて、 , ほかの言語への移植が難しい上 , ( 先ほどの TANGLE. PAS のリストを見ても わかるとおり ) ソースコードを圧縮してし まうから」と CWB89] の論文は主張してい ます。 特集 ドキュメント作成支援システム 31