使用 - みる会図書館


検索対象: 月刊 C MAGAZINE 1992年3月号
155件見つかりました。

1. 月刊 C MAGAZINE 1992年3月号

lnformation from Compiler Makers F E P にはどのようなものがあります A QuickWin アプリケーションは 完全な Windows アプリケーション なのて、 , MS-Windows て、使用可能 な FEP のみ使用て、きます。 Q QulCkWin 機能は , DDE(Dyna mic Data Exchange) , OLE(Obje ct Linking Embedded) はサポート しておりません。 DDE, OLE ともにサポートは A していますか ? Q とは可能ですか ? プログラムを DLL として呼び出すこ た , このとき MS-FORTRAN 5.1 の を作成することはできますか ? ま で MS-Windows アプリケーション re DeveIopment Kit) の組み合わせ Ver. 6.0 , Windows SDK(Softwa MS-FORTRAN 5.1 と MS ー C んのて、ご注意ください ドレベルて、のデバッグはて、きませ 合 , CodeView を使ってソースコー ただし ,MASM 5.1 を使用する場 Ver. 6.0 , MASM 5.1 / 6.0 て、す。 る言語は MS-BASIC 7.1 , MS-C d Language Programming 力すて、き MS-FORTRAN 5 . 1 と Mixe A ようなものがありますか ? ことが可能な言語製品には , どの Language Programming を行う Q MS-FORTRAN 5.1 と Mixed A DLL は当然のことながら , OB J レベルにおける LINK て、もプログ ラムを作成することがて、きます。た だし , これらの場合は , 必ず C がメイ ンモジュールになります 0MS-FOR TRAN 5.1 をセットアップした後 の SOURCEYSAMPLE というディ レクトリに MS-FORTRAN 5.1 と MS-CVer. 6.0 , W ⅱⅵ 0 、 SDK を使用 した MULMIX というサンプルアプリ ケーションが収められているのて、 , 参考にしてください Q MS-FORTRAN 5.1 を使って MS-Windows 上でグラフィックス を使用するプログラムを作成した いのですが , MS-C Ver. 6.0 と Wi ndows SDK を利用すれば , このよ うなプログラムを作成することが できますか ? A MS-C Ver. 6.0 と Windows SDK て、 MS-Windows プログラム を作成すれば , Windows API を使 用したグラフィックスを利用する ことは可能て、す。ただし , この場 合は QuickWin アプリケーションと しては作成て、きません。もちろん , メインモジュールは , C て、記述され る必要があり , FORTRAN て、は , サプルーチンのみ記述可能て、す。 MS-FORTRAN 5.1 と MASM 6.0 との Mixed Language を行った 場合 , MS-OS/2 2.0 の場合にはフ ラットメモリモデルは使用できる のですか ? A MASM 6.0 はフラットメモリ モデルに対応していますが , MS- FORTRAN 5.1 が対応していない のて、 , フラットメモリモデルを使 用することはて、きません。 Q MS-FORTRAN 5.1 でグラフ ィックス関数を使用した場合 , MS ー OS / 2 上では , キャラクタウインド ウを使ったプログラムしか作成で きないのですか ? A MS-FORTRAN 5.1 に添付 されている GRTEXTP. LIB は , テ キストべース ( テキストウインドウ の設定 , 表示位置の設定 , 文字の 色の指定など ) のみに対応している のて、 , キャラクタウインドウを使 MS-FORTRAN 5.1 て、は , M ることはできますか ? ネージャ用のプログラムを作成す MS ー OS / 2 のプレゼンテーションマ MS-FORTRAN 5.1 を使って , ったプログラムしか作成て、きませ A Q ん。 があります。そのため , たとえば 利用する Mixed Language の機能 SIC をサプルーチン単位て、統合して S-C, MS-FORTRAN, MS-BA Microsoft の言語製品には , M A て利用する方法を教えてください。 AN 5.1 をハードディスクで共有し Q MS-C ver. 6.0 と MS-FORTR は作成て、きません。 ージャ機能を利用したプログラム S ー OS / 2 のプレゼンテーションマネ MS-C のコンパイラと MS-FORT RAN のコンパイラを同時に利用す る場合も考えられます。 MS-C V er. 6.0 と MS-FORTRAN 5.1 て、 は , コンノヾイラ以外のいくつかの ツールも共有て、きます。たとえば , PWB や CodeView, LINK, NMA KE などがとくによく使われるツー ルて、しよう。これらは , FORTRA N に添付されているものが最新バー ジョンになりますから , 共有して 利用する場合には , 必 $MS-FOR TRAN 5.1 に添付されたものを使 うようにしてください もっとも簡単な設定方法は , 以 下のとおりて、す。 ①ハードディスクに MS-C Ver. 6.0 をセットアップする。 ② MS-CVer. 6.0 をセットアップ したディレクトリと同じディレ クトリに MS-FORTRAN 5 . 1 をセットアップする。 具体的には , BINB, BINP, B INR, LIB, INCLUDE, INIT, HELP の各環境変数て、参照される ディレクトリを共有することにな ります。 ただし , ディレクトリを共有し た場合 , MS ー C しか利用しなくても MS-FORTRAN 用の PWB 拡張フ ァイルが読み込まれるため , PWB て、利用て、きるメモリは減少します。 また , MS-BASIC 7.1 , MASM 6.0 を共有する場合にも , PWB や CodeView ツールの共有は可能て、 す。この場合には , MS-FORTRA N 5.1 あるいは MASM 6.0 を必ず 最後にセットアップしてください MS-FORTRAN 5.1 と MASM 6.0 のすべての共有可能なツール は , 同じバージョンて、す。 lnformation from Compiler Makers 149

2. 月刊 C MAGAZINE 1992年3月号

マイ 5Q カト lnformation from C0mpiler Makers 今月は , 昨年 12 月より出荷を開 始した Microsoft FORTRAN Pr ofessional Development System Version 5.1 ( 以下 MS-FORTRA N 5.1 ) に関して寄せられた質問の うち , 代表的なものに関して , お 答えいたします。 Q Ms-FORTRAN 5.1 を使用し たときに MS-DOS, MS-OS/2, M S-Windows 上では , データ領域 , ひとつの配列の大きさ , . EXE ファ イルの大きさはどれぐらいまで使 用できるのですか ? A MS-DOS, MS ー OS / 2 て、の制 限はすべて MS-FORTRAN 4.1 と同じて、す。また , MS-Window s, MS ー OS / 2 て、は仮想メモリを利用 することにより , これらの領域の 大きさに制限はなく , プログラム によって確保可能なシステムの空 き領域すべてを確保て、きます。 MS-OS/2 と MS-Windows て、確 保て、きるひとつの配列の大きさの 例を TabIe 1 に示しますのて、参考 にしてください Q MS-DOS Ver. 5 . 0 では XMS メモリがサポートされていますが , MS-FORTRAN 5.1 を使用した場 合に確保できるデータ領域は MS ー Windows と同じですか ? A MS-Windows て、は 640K バイ ト以上のプロテクトメモリ領域を アプリケーションプログラムが使 用することがて、きます。このメモ リ管理は MS-Windows が行って います。つまり , MS-FORTRAN 5.1 て、作成したプログラムにプロテク 148 C MAGAZINE 1992 3 トメモリを利用する機能が加わっ ているわけて、はありません。した がって , MS-DOS Ver. 5.0 て、 XM S メモリを確保しても , MS ー FORT RAN 5.1 て、作成したアプリケーシ ョンが自動的にプロテクトメモリ を利用て、きるわけて、はありません。 Q MS-FORTRAN 5.1 は 386 / 48 6 コードを利用したアプリケーショ ンを作成することはできますか ? A MS-FORTRAN 5.1 て、は , 3 86 / 486 固有のコード ( 32 ビットコー ドを含む ) を生成することはて、きま せん。当然のことながら 387 ( / 486 / 487SX ) 固有のコードも生成て、きま せん。 MS-FORTRAN 5.1 は , コプロ セッサは 8087 / 80287 / 387 / 486 / 487 SX のすべてに対応しているのです か ? A MS-FORTRAN 5.1 て、開発 されたアプリケーションは , すべ てのコプロセッサにおいて動作可 能て、す。ただし , MS-FORTRAN 5.1 は 8087 または 80287 ( / G2 ) のコ ードしか生成て、きませんのて、 387 / 486 / 487SX は高速な 80287 として利 用されます。 Q M -FORTRAN 5.1 では , サプ ルーチン単位での ( ローカルな ) 最 適化は可能ですか ? A メタコマンドによりルーブオ プティマイズの制御 ($LOOPOP T, $NOLOOPOPT) は , ループ単 位て行えますが , これ以外には , ローカルな最適化の制御は行えま せん。もちろん , サプルーチンを 個別のファイルに分割することに よりファイル単位て、 , 最適化を抑 制することは可能て、す。 Q MS-FORTRAN 5.1 でアプリ ケーションを開発中なのですが , プログラム中で複数のファイルを オープンする必要が出てきました。 MS-FORTRAN 5.1 のプログラム 中では , いくつまでファイルをオ ープンすることができるのでしよ う力、 ? A 基本的には 1 プロセス当たり 2 0 ファイルまて、をオープンて、きま す。ただし , そのうち 5 ファイルは システムて、使用するのて、 , ューザ 側て、利用て、きるのは 15 ファイルま て、となります。 なお , MS - OS / 2 上て、あれば FIL EHAND. DOC (SOURCEYSTA RTUP) にこの制限を緩和する方 法が記述されており , 20 ファイル 以上のファイルを 1 プロセスて、利用 することが可能てす。 Q Ms-FORTRAN 5.1 では , メモ リ管理用のデバイスドライバはど Microsoft FORTRAN ProfessionaI DeveIopment System Version 5.1 のような組み合わせにするのがよ いでしようか ? A 各ユーティリテイプログラム がどのようなメモリを利用て、きる のかをご覧ください ( TabIe 2 ) 。 Table 2 に示したように , EMS メモリは PWB, CV ともに利用し ますのて、 EMS メモリを多く設定さ れたほうがよいて、しよう。ただし , CV を使用する場合に XMS メモリ を使用するとメインメモリの常駐 量が約 20K バイトになりますのて、 , 従来は不可能て、あった大規模なプ ログラムのデバッグが可能になり ます。このように , 必要に応じて XMS メモリに切り換えて使用する とよいて、しよう。 Q Qu ℃ kWin アプリケーションを スタンダードモード , 386 工ンハン スドモードを切り換えて実行させ る場合 , 何か変更しなければなら ないことはありますか ? A QuickWin アプリケーションは スタンダードモード , 386 工ンハン スドモードのどちらて、も , 同一の プログラムて、動作て、きますのて、 , とくに変史を加える必要はありま せん。ちなみに , QuickWin アプリ ケーションをリアルモードて、動作 させることはて、きません。 Q Qu ℃ kWin アプリケーションで 日本語入力する場合に使用できる TabIe 1 確保できるのひとつの配列の大きさの例 TabIe 2 利用できるメモリ MS-OS/2 MS-Windows システムの空き領域 使用可能メモリ 7.6M バイト ス売六 13M バ 使用可能メモリ 10M バイト 確保可能な配列のサイズ 13M ノヾイト 9M バイト PWB CV EMS メモリ XMS メモリ 〇 〇 * 〇 + * Symb 情報のみ + メインメモリを約 20K バイト使用します

3. 月刊 C MAGAZINE 1992年3月号

ライフボート lnformation from C0mpiler Makers 12 : } 20 : } Lattice C Q ファイルの大きさを調べたい のですが , Lattice C には , ファイ ルの長さを返す関数がありません。 うまい方法はないでしようか ? A 方法はふたつあります。ひと つは , ファイルをオープンしてお いて , ポインタがファイルの最後 まて、移動し , そこの位置を調べる という方法て、す ( List 1 参照 ) 。この 方法は , 標準関数のみて、行え , 移 植性もあり , プログラムも単純て、 すが , ファイル内を位置ポインタ がファイルの最後まて、移動します から , 大きなファイルの場合 , 時 間がかかることが欠点といえます。 もうひとつは , DOS のファンクシ ョン 4Eh を使って , ファイルの検索 を行う方法て、す。ファンクション 4Eh は , そのファイルに関する情報 を返すのて、 , この中のファイルの 長さの情報をそのままを利用しま す (List 2 参照 ) 。この方法は , DO S の知識が必要て、あることを除け ば , もっとも効率のよい方法て、す。 Q デバイス名 AI_JX は , RS-232C ポートになるはずですが , まった く RS ー 232C ポートにデータが出て きません。 LatticeC では , AUX と いうデバイス名は使えないのです Q stdaux を使って , RS ー 232C か らデータを送ろうとしても , まっ たく送れません。 Lattice C では , stdaux という名前は使えないので もちろん , Lattice C て、も AU X というデバイス名は使用て、きます し , stdaux も使えます 0AUX とい う名前が使用て、きるかどうかは , MS ー DOS がその名前をデバイス名 として , 認識するかどうかに依存 します。実際 , Lattice C の標準ラ イプラリは , AUX や CON というデ バイス名と ,text. txt のような普通 のファイル名を区別せず , open 関 数または f 叩 en 関数の引数として渡 されたファイル名を MS ー DOS のフ アイルオープンファンクションに 渡しているだけて、す。 MS-DOS が AUX を予約されたデバイス名とし て認識して , 処理するかどうかの 間題になります。 PC ー 9801 をご使用 の場合 , ふたつの可能性がありま す。 まずひとつの可能生として ,CI)NHG . SYS の中て、 , DEVICE=RSDRV. SYS が設定されていない場合が考えら れます。 PC ー 9801 用の最近の MS ー DOS て、は , RS ー 232C デバイスドラ イバを外せるようになっており , CONEIG. SYS の中て、 DEVICE=R SDRV. SYS を設定しないと AUX デバイスは使用て、きないようにな っています。 CONFIG. SYS に , D EVICE=RSDRV. SYS を追加して プログラムを実行すれば , 正しく AUX をオープンて、きます。 もうひとつの可能性としては , RS ー 232C の設定が正しくない場合 が考えられます。 RS ー 232C を使用 する場合には , RS ー 232C のパラメ ータをあらかじめ設定しておかな ければなりませんが , MS-DOS の ファンクションて、はこの設定はサ ポートされていません。このパラ メータの設定方法は , 機種ごとに 異なりますが , たとえば PC ー 9801 シ リーズの場合は , speed コマンドと List 1 printf("FILE LENGTH : %ld bytes*n ” 10 : fseek(fp, OL, 2 ) ; exit(l); printf("open error*n ” ) ; 6 : if(!(fp = fopen( ” test. c ” , ” rb ” ))){ 4 : FILE *fp; 2 : main() 1 : #include く stdio. h> 11 : 9 : 8 : 7 : 5 : List 2 exit(l); printf("Find error*n"); 13 : if( 1 & intdosx(&r, &r, &s)){ 12 : makedv("test. c ” , &r. x. dx, &s. ds); 11 : segread(&s) ; r. X. CX ニ 0 ; 9 : r. h. ah = 0x4e; long flen; 6 : struct SREGS s; 5 : union REGS r; 3 : main() 2 : #include く dos. h> 1 : #include く stdio. h 〉 15 : 14 : 10 : 8 : 7 : , ftell(fp)); 17 : / * Read file length = @ DTA + lah (4bYtes) * / 18 : flen = *(long far *)((unsigned char far * ) psp + 0X80 + 0xla) ; 19 : printf( ” FILE LENGTH : %ld*n", るか , RS-232C BIOS を使うか , 8251A のレジスタを直接初期化す 場合は , outp 関数を使って , gPD ても , プログラムから設定したい しておく必要があります。どうし リテイチェックの有無などを設定 る前にあらかじめ , 転送速度 , り AUX を使うプログラムを実行す いう外部コマンドが用意されてお あるいは system 関数を使って spee d コマンドを呼び出して設定するこ とて、対処します。また , J -3100 の 場合には , ケープルが繋がってい ない場合には AUX のオープンに失 敗するようになっているのて、注意 してください flen) ; lnformation from Compiler Makers 153

4. 月刊 C MAGAZINE 1992年3月号

学 五ロ 一三ロ Char C ; Fig. 10 変数の宣言 変数宣 という構造体は Fig. 9 のような型情報が構築 型がコンパイラ内部て、どのように表現さ されることになります。 れるかはわかりました。て、は変数を宣言し この図は型のみを抽出して簡略化してい たときにはどうなるのて、しようか。 ます。実際にはメンバはメンバの名前や先 頭からのオフセットなどを付加情報として 持っています。同様に構造体を示す箱は全 char *p , 体のサイズを持っています。共用体の場合 という宣言があるとすると , それぞれコン も構造体とデータ構造は同じて、す。違いは パイラ内部て、は Fig. 10 のようになります。 名前を表す箱の中には型を指すための矢印 どこかというと , メンバのオフセットがす べてゼロになっている点て、す。 があり , それがそれぞれ対応する型を指し ます。さらに変数には記憶クラスがありま Fig. 9 構造体の例 すから , そのためのフィールドが必要にな 分類されますが , 記憶クラスそのものて、は ありません。コンパイラは typedef を使った ります。実際にはさらに変数をスタック上 に配置するのか固定番地に配置するのかを 宣言を認識すると , 名前の箱に対して「これ 示すフィールドなども必要て、すがここて、は は typedef された名前て、ある」と記入します。 省略します。 i は関数内て、宣言されていて st これはたとえば記憶クラスのフィールドを 使ってもよいて、しよう。したがって , 上の atic がありませんから記憶クラスは auto とな ります。 ふたつの typedef 宣言は Fig. 11 のように記録 されることになります。これは Fig. 10 と比 typedef 較するとわかりますが , 変数宣言とほとん ど同じ形をしています。 typedef は型の別名を作るために使用され このように , typedef を使えばどんなに複 雑な型の別名て、も作ることがて、きます。 ます。たとえば , れが #define による置換と大きく異なる点て、 typedef int BLOCK NO , す。コンパイラは名前が使用されたとき , typedef char * String , typedef された名前かどうかを調べて , もし のようにすれば , それぞれ BLOCK NO と i nt, String と char * が同義語になります。 そうならば型情報と置き換えます。 これはコンパイラの内部て、はどのような処 / * 関数内 * / String x ; 理が実行されているのて、しようか。 という宣言を見ると , x は Fig. 12 のように解 typedef は構文的には記憶クラス指定子に 釈されます。 Fig. 12 String x ; a utO int auto ポインタ Char 構造体 メンバ i nt メンバ Char Fig. 11 typedef BLOCK—NO typedef a utO i nt ポインタ Char String typedef ポインタ Char 114 C MAGAZINE 1992 3

5. 月刊 C MAGAZINE 1992年3月号

最新ロロロレポート ようて、 , ほかの仮想 86 モードのユーティリテ RT386 て、は , 80386 / 486 の仮想 86 モードと トより少なくなります ) 。 ィを組み込んて、いるマシンて、はこのモードを べージング機構を使用し , 該当タスクをプロ このモードを利用するにはパラメータファ 利用することがて、きませんて、した。 テクトメモリにロードします。このため , タ イルて、 , スクごとに最大 640K バイトのメモリが利用て task mod=V86 ヾッグ支援 と指定します。 きるようになります ( 実際はいったん 640K バ イトのメインメモリ領域にロードされるた なお , マニュアルには書かれていません マルチタスクシステムのデ / ヾッグはめんど が , VCPI などの仕様をサポートしていない め , 1 タスクが利用て、きるメモリは 640K バイ うなものてすが , デバッグ支援機能がいくっ か用意されています。 Fig. 2 RMD ( リアルタイムモニタリングティスプレイ ) ①現在時刻の表示 現在時刻を表示させることにより , プログ タスク名称ディレクティブ ステータスシステムプール使用状況 全容量 8000 未使用領域 tas k0 ラムが動いていることの確認がてきます。 tas kl ②パラメータファイルの内容 , ロードタスク tas k2 のアドレス情報の表示 バッファ使用状況 6 ③バックグラウンドデバッグ機能 1 2 3 4 5 サイズ 128 256 512 1024 2048 4096 RT をバックグラウンドて、動作させること 個数 0 0 0 0 0 0 使用中 により , デバッグ機能を提供しています。 このとき ・ RMD ( リアルタイムモニタリングディス プレイ (Fig. 2 ) ) ・ ATL ( アクテイプタスクリストディスプ レイ (Fig. 2 ) ) ・ SYMDEB などが利用て、きます。 ④ SMKNL ( スモールカーネル ) ATL ( アクテイプタスクリストティスプレイ ) Fig. 3 SMKNL ( スモールカーネル ) を常駐させ て , CodeView などのデバッガて、タスク単 <status=bl> <pri=50> <mode=ts> <atr=ts> <tid=20> tas k0 < rcvl queue = FFFF > <rcv2 queue=FFFF> 位て、デバッグすることがてきます。 RT の <event (set 0000 0000 0000 0000 > システム関数を呼び出すと実行結果カ俵示 < (wait 0000 0000 0000 0002 > ax=08D3 bx=FFFF cx = 0000 dx=FFFF si=02F8 di=02F8 bp=0DCA され , 発行するディレクテイプを入力する sp=0DC8 cs=1D33 ds = 3701 ss = 3701 es=35C6 ip=137F fl = F213 ことがてきるようになります。筆者が使用 =ts> <tid=21> <pri=30> <status=bl> <mode=ts> <atr taskl したかぎりては , デバッグにはこの機能が く rcv2 queue = FFFF > =FFFF> < rcvl queue <event (set 0000 0000 0000 圓 00 > もっとも役立ちそうて、した。 < (wait 0003 0000 0000 圓 00 > ax = 0002 bx=FFFF cx = 0001 dx=80D3 si = 0008 di=02DE bP = 0000 これらのデバッグ機能を初めとして RT は sp=0D5E cs=383A ds = 3963 ss = 3963 es=382A ip=00D8 fl = F206 「開発マシンとデバッグマシンを分ける」とい =ts> <tid=22> <pri=30> <status=bl> <atr <mode=ts> tas k2 うことを前提にしているように思われます。 < rcv2 queue = FFFF> =FFFF> < rcvl queue たとえば , <event (set ー 0000 0000 0000 0000 > < (wait 0003 0000 0000 0000 > ・上記のデバッグューティリティは常駐を解 ax = 0002 bx=FFFF cx = 0001 dx=80D3 si = 0008 di=02DE bP = 0000 sp=0D5E cs=3A9B ds=3BC4 ss=3BC4 es=3A8B ip=00D8 fl = F206 除てきない ・ VCPI などの仕様をサポートしていない ・使用割り込みべクタ F0h ~ F 新を終了時に 元に戻さない リージョン 使用状況 1 サイズ 0 個数 0 使用中 4 0 0 00 0 0 6 0 0 L.n 0 0 9 ム 0 0 最新開発環境レポート 125

6. 月刊 C MAGAZINE 1992年3月号

マウスドライバとのインタフェース関数を 提供します。「キー入力が簡単 V2.0 」と「ウイ ンドウが簡単 VI . 0 」と併用すると、プルダウ ンメニュー関数や、ダイアログ関数 ( 文字列、 メニュー、リスト・ボタン、シートなどの豊 富なアイテム ) 、マウス情報取得関数が使用で きます。 マウスのアクションに対して各関数が返す値 として、任意の値をあらかじめ設定すること もできます。このことを上手く利用すれば、 マウスとキーホードを併用するアプリケーシ ョンを作る際、マウス用のロジックとキーボ ード用のロジックか一本化できるので、プロ グラムか長くならすに済みます。高い機能を 短いステップで、簡単シリーズの身上です。 「日 S -232C か簡単」 VER. 1.0 、一 Y15 , 000 アプリケーション・プログラムの通信用ドライバ として常駐し非同期方式で通信を行います。転送 速度は、 75 日 PS ~ 19.200 日 PS までをサポート。 通信部の割込機能の設定もユーサー側で変更でき、 受信レティ・送信レティ・送信バッファ工ンプテ イの中から選択可能です。また、バラメータ等の 指定により、ドライバ部を介さす自ら相手側と通 信できる機能、割込処理の禁止 / 許可機能等も付 属。さらに、ドライバ部に送受信用パッフアが装 備されているため実行中のアプリケーション・プ ログラムが変更されてもテータ通信を継続して行 うことが可能なように設計されています。ソフト 開発の参考となるよう解り易いサンプルプログラ ムも添付。 ユーサーの側に立ったライプラリ設計、簡単シリ ーズの一貫した思想てす。 アプリケーション アプリケーション AP 生まれの AP 育ち C 言語用プログラミンク。支援ツーノレ 「簡単シリーズ」十「作ろうシリース開発ェ数削減と標準化のために VER. 1.0 ー Y9 , 800 VER. 1.0 ー Y7 , 200 V R. 1.0 ーー \ 18 , 000 V R. 1.0 ーー \ 22 , 000 V R. 1.0 ーー Y28 , 000 V . 1.0 ーー \ 22 , 000 「マウスが簡単」ワトドコが簡単鷲ヘルプが簡単」「エテイタ入力が簡単」 V . 2.0 ーー \ 28 , 000 V R. 2.0 ーー \ 18 , 000 V R. 1.0 - ー Y28 , 000 V . 1.0 ーー \ 14 , 000 「キー入力が簡単」「印字が簡単」「ウインドウが簡単」「クラフが簡単」 キー入力関数・テキスト画面制御関数・カ ーソル制御関数を提供します。キー入力関数 は、指定された位置で指定された桁の入力を 受けつけ、入力テータを指定されたエリアに 格納します。入力テータタイプもチェックし、 漢字入力したいところではフロントエンドプ ロセッサを立ち上けます。カーソルは、現在 入力中の位置に表示します。テータ表示色・ アトリピュートも、 PF キーガイドラインの 表示 / 非表示も設定自由、 PF キーガイドラ インには任意の文字列を任意の色で表示でき ます。ロールアップ / タウン・ BS ・ HELP ・ HOME e 十 c の特殊キーも全て取得 OK 。リ アルタイム・クロック表示関数や、ダイレク ト・キースキャン関数、 V 一日 AM のリード ライト関数等も用意しています。 テータ出力関数・ビットイメージ出力関数・ プリンタステータスチェック関数を提供しま す。文字列テータはもちろん、罫線テータも 同時に出力てきます。文字列も罫線も、画面 のように桁・行で印字位置を決めるので桁合 わせは不要。文字列は、拡大・下線・網掛け 等の特殊効果を同時に指定可。罫線は実線 破線それぞれに太 / 細の計 4 種類をサポート、 ピットイメージを出力して引く罫線よりも高 速に印字します ( 社内テスト結果 : ピットイメ ージ出力で 10 分かかった表が、 6 分て出力完 了にア ) 。また、文字と罫線を同じ桁・同じ行 に出力てきるので、ムダのない帳票を設計で きます。もう、制御コード出力処理だらけの 読みにくいプロクラムとはオサラ八です。 各種のウインドウ制御関数と、 N88BAS ℃ を基本にしたグラフィック関数を提供します。 最大 20 個のオーバーラップ・ウインドウをオ ープンできます。テキストモードとグラフィ ックモード双方向をサポート、ウインドウ内 でのキー入力関数・テキスト画面制御関数・ カーソル制御関数もそろっています。文字列 表示関数は、ウインドウ・サイズに合わせた 自動改行機能を持っているので、プログラミ ングの手間もぐっと省けます。通常のウイン ドウに加えてメニュー選択処理のためのメニ ューウインドウや、 Y / N のキー入力を受けて 返せるメッセージウインドウもサポート。ユ ーサー・インターフェイスの優等生・ウイン ドウ処理を、メモリ操作なしのお手軽プログ ラミングで実現できます。 グラフ描画関数と、 N88 日 AS 旧を基本に したグラフィック関数を提供します。描画で きるグラフは、棒グラフ ( 縦・横 ) 、折れ線グラ フ ( 縦・横 ) 、円グラフの計 5 種、棒グラフと 折れ線グラフは重ね合わせも可能。色やライ ンバターンの設定は自由です。描画のための テータテープルをセットして関数をコールす れは、グラフ本体はもちろん、タイトル・グ リッド・単位・凡例まで、全て関数内で計算・ 描画するので、メインプログラム側での計算 処理は何一つ必要ありません。「簡単シリーズ」 は全て併用可能ですから、「ウインドウが簡単」 と「グラフが簡単」を併用すると、グラフが出 るウインドウを画面上にオープンする、なん てことも、あっとオドロク簡単さでできてし まいます。 デ - タテ - プしをセットい、 関数をコールするたけ、 グラフィック画面をモノクロ 8 階調または、 カラープリンターに八一ドコピーします。領 域指定や色指定など豊富なオプションも用意。 その他、アプリケーション実行中に現在の画 面を Disk にセープする常駐プログラムと、 セープしたテータを圧縮するプログラム、更 にそれらのテータを再表示したり、印字した りするプログラムも装備しています。 苦労して作った美しい画面の利用範囲が広か ります。 今まて苦労していた、テキスト・グラフィッ ク画面の八一ドコピーを手軽にてき、マニュ アル作成時の画面レイアウトとして幅広く利 用できます 9 「簡単ツールエテイタ」 VER. 1.0 ーー Y22 , 000 「簡単シリーズ」のテータテープルを編 集するための、専用工テイタです。 画面上で、マウス ( なくてもかまいません ) やキー ホードを使って、実行画面や帳票のイメージをワ ープロ感覚で入力すると、そのまま使えるソース コードか出力されます。これ 1 本で「キー入力 ( V 2.0 ) 」「印字 ( V2.0 ) 」「ウインドウ ( VI .0 ) 」「クラフ ()I .0 ) 」をサポートしています。テータ編集中に 擬似テータを使って表示したりできるのて、テス トランの必要もなく、「簡単シリーズ」てアップし た開発効率を 60 ~ 40 % も更に引き上げることがで きます。 アプリケーションの使用方法を導く高機能 なホップアップ ( アドバイザ ) 関数を提供しま す。 100 タイトル ( 300 頁 ) のヘルプメッセージ をサポート。タイトルメニューと関連タイト ルのリンク機能を持ち、階層的ヘルプを実現 できます。工ラー・警告・カイド・質問を出力す るメッセジ機能もあり、ヘルプ機能と連動す るとユーサーフレンドリーなアプリケーション を簡単に開発できます。 DOS 配下でヘルプメ ッセージを参照するユーティリテイや、専用工テ イタもイ寸属。マニュアルレスな時代のアプリケー ション開発にお役に立ちます。 ( この商品をお使 い頂くときには、別売「ウインドウが簡単 V. 1 . 0 」 が必要てす。別売「マウスか簡単Ⅵ .0 」をお使い の方には、マウス対応版のヘルプ関数も用意し ています。 ) 長めの文章をキーボードから入力する機能を 簡単に実現できるテキストエデイタ関数を提供 します。アプリケーションでコメントを入力し たり、通信ソフトで手紙を入力したりするため のエテイタ入力機能を関数ひとつで実現できま す。最 50 字 x 65 凹行のテキストエテイタが、 同時に 20 個作成できます ( 但し、メモリに依存し ます ) 。日本語対応、スクロール、行単位のカッ ト & ペーストをサポート。その他、本格的な工 デイタの開発を支援する関数群を豊富に揃えて います。「キー入力か簡単」にエテイタ入力機能 を拡張した関数も用意しました。「キー入力が 簡単」の手軽さでエテイタ入力機能を実現でき ます。 ( この商品をお使い頂くときには、別売 ー入力か簡単 V. 2.0 」が必要です。 ) 「ファイ J レ・エテイタ」 VER. 1.0 ー Y18 , 000 ソフトウェア・システムを開発する際のテータ・ファイル設計を支援するエテイタ。テータファイル のコードサイズ、各テータ項目のタイプ・長さ・名称等を入力すると、定義テープルがソースコード として出力され、さらにファイル・レイアウトの印字も可能。 「作ろう」シリーズ ( C 言語の教育用パッケージ ) ・「住所録を作ろう」・ ・「スケジュール表を作ろう」・ ・「こづかい帳を作ろう」・ ・「らくかき帳を作ろう」・ ・ VER. 1.0 ー Y6 , 4 側 ・・ VER. 1.0 ー Y8 , 6()0 ロステム構供通 ) ・本体 : PC -9801 (XA/XL/XL2/RL-J\ イレ V/LT を除く ) ・ OS : MS-DOS V3.1 / 3.3 ( F ・ PMS - DOS に添付のもの ) ・プリンタ : NEC PC - P 日 101 系、 PC - P 日 2 田系 ・コンバイラ : Mic 「 osoft-C/Lattice-C/Tu 「 bO-C/Quick-C ( 簡単シリーズは、御使用のコンバイラを指定して下さい。 ) ・メティア : 5 ・ 2HD / 3.5 ・ 2HD ( 御希望のメティアを指定して下さい。 ) ※全商品プロテワトなし、サンプ ル付きでヴ。 ※サンプルソフトを実費 ( \ 1 , 5 圓 ) で販売中 / ※全商品ロイヤリティフリー ※記載されている内容は、将来予告なしに変更することがあります※お問合せはお近くのマイコン・ショップか、私どもへどうぞ ※ MS-DOS 、 Microsoft-C 、 Quick-C は、米国 Microsoft 社の 登録商標です ※ Lattice-C は、米国 La ice 社の登録商標です . ※ Turbo-C は、米国 BorIand 抦 te 「 nation 引社の登録商標です、 〒 790 愛媛県松山市北藤原町 1 ー 26 TEL: ( 0899 ) 3 ト 2886 FAX : ( 0899 ) 41 ー 0336 ・株式 会社 工 1 ステ必工ュニア鱸ユ く資料請求番号 163 〉

7. 月刊 C MAGAZINE 1992年3月号

i ntel@ The Computer lnside. ," 00 お求めになった時から、インテルはあなたのパソコンに 指定席をいただいていますもしや、まだ空席のままでは・・ ソケットにセットするだけであなたのパソコンカソフトカミ加速します intel in it 』のマーク、パソコンの広告て、目にした方も多いて、しよう。そう、日本て、販売され ているパソコンのほとんどは、インテルの CPU を使用しています。そして、もうーっ。インテルの 数値演算コプロセッサを組み込むためのソケットも、あらかじめほとんどのパソコンの基板 上に用意されています。言わば、パソコンの中に指定席を持っているようなもの。インテル 数値演算コプロセッサは、表計算、データベース、グラフィクス、 DTP 、 CAD などアプリ ケーションソフトの実行速度を大幅に向上させます。より速く、より快適に、ソフトを使いこ なすために、あなたのパソコンにもぜひインテル数値演算コプロセッサをご利用ください あなたのノヾソコンには ・数値演算コプロセッサ用の ソケットが用意されています。 ーベンチマーク・データ ー 160 秒 コプロセッサ無 コプロセ・ノサ有 82 秒 Mic 「 09 Excel によるべンチマークテスト ー x ーセルのスプレッドシートを再計算させた結果 The t Math CoProcessor インテルジャパン株式会社本社 / 〒 3 -26 茨城県つくば市東光台 5 ー 6 く資料請求番号 F03 〉 ※商品名・名称等は各社の商標及び登録商標です。

8. 月刊 C MAGAZINE 1992年3月号

djgcc 詳解講座・Ⅷ 0 刪 World 漢字 2 個分の幅 ) が一度に描けますが , どの 程度のメリットがあるか考察しましよう。 メモリへの書き込み時間は , 書き込むア ドレスに大きく左右されます。書き込みア ドレスと所要時間の関係を筆者のマシンて、 調べた結果を TabIe 3 に示します。 また , 連続する 4 バイトへの書き込みを 1 , 2 , 4 回に分けて行ったときの所要時間を比 べてみると , TabIe 4 のようになります。 結果をまとめてみると , グラフィック消 去のような単純な書き込みて、あれば , 4 バ イト書き込みのほうが 2 バイト書き込みより 遅いとはいえ , 2 倍も時間はかかりません。 しかし , 何かの図形を描くときなど , ビ ッグエンディアンに変換してから書き込ま なければならないような場合は , 2 バイト書 き込みのほうが高速て、あることがわかりま 合分けしなければならないかもしれない。たとえば , す。もちろん , 書き込み位置はて、きるかぎ り 4 バイト境界に合わせるべきて、す。 。サンプルプログラム 互換性があることを示すには適当だと思い オリジナルのグラフィックライプラリとの 属しているサンプルプログラムて、すから , というだけのものて、す。しかし , djgcc に付 とを示すために画面上に線を引いている , 能て、はなく , 複数のタスクが動いているこ 本来グラフィックスそのものがメインの機 マルチタスクを実現するプログラムて、す。 samples/tasks は , コルーチンによる擬似 ks をコンパイルしました ルプログラムとして , djgcc の samples/tas 98 版のグラフィックライプラリのサンプ ます。 blic License に基づいた再配布を認めま この連載にかぎり , GNU General Pu れ換えておく必要があります ) 。 ください ( もちろん libgr. a は 98 版のものに入 っているソースをそのままコンパイルして 号付録ディスク収録 ) の samples/tasks に入 リジナルの djgcc の配布ファイル ( ' 91 年 10 月 てあります。再コンパイルする場合は , オ というファイル名て、付録ディスクに収録し みを , TASKS. EXE( 自動解凍圧縮ファイル ) このプログラムは , 実行形式 main. exe の て、そのまま動きました。 コンパイルした結果 , まったく変更なし す。 ある 68000 オペレーティングシステムて、は上のレジス タを % a5 と呼ぶ。 いっかコンパイラにレジスタを自動選択させられ るようになるかもしれないが , そのためにはどのよ うにレジスタを選択し , またどのようにユーザの制 御を可能にするかが間題となる。明確な解決法はま だない ( * 7 ) このようなレジスタ変数を定義しても , レジスタ はそれ専用にはならない。フロー解析によりその変 数の値が生きていないと判定された場所て、はほかの 用途のために使用て、きる。しかしながら , そのレジ スタは再ロードバスて、はその変数専用となる。 この機能の使いすぎて、ある関数のコンパイル中に レジスタが不足することになっても , 私は驚かない ( * 8 ) 5.19 代替予約語 オプショ y'-traditional' や '-ansi' はそれぞれいくつ かの予約語の使用を禁止する。これは ANSIC, 伝統 的 C を含むすべてのプログラムに共通にインクルード されるようなヘッダファイル中て、 GNUC の拡張機能 や ANSIC の機能を使いたい場合に問題となる。予約 語 asm, typeof, および inline は、 -ansi' によってコン パイルされるプログラム中て、は使用て、きない。一方 const, volatile, signed, typeof, および inline は ー tradition 引 ' て、コンパイルされるプログラム中て、使用 て、きない この問題を解決するには , 問題となる予約語の前 後に ' をつければよい。たとえば asm の代わりに asm を , const の代わりに const を , そして inline の代わりに i nline を , それぞれ使えばよ ほかの C コンパイラて、はこれらの予約語は無効て、あ るだろう。ほかのコンパイラを使用したい場合には 次のように代替予約語をマクロを使ってほかの予約 語に定義するとよい ( * 9 ) #ifndef GNUC #define asm asm #endif * 7 レジスタ名を指定せず に局所変数を「 egister 宣言 することはて、きるのて , のことを「レジスタの自動選 択」と考えると , この説明は 納得がいかないと思います。 何かもっと高度なレジスタ の選択方法を想定している のかもしれません。 * 8 再ロードバスとは , レ せん。 般のコンパイラては使えま ている asm 命令は , ほかの一 オペランドの制約を指定し 張 asm 命令のような方法て、 * 9 当然ながら , GCC の拡 あります。 がエラーを発生することも ちるだけて、なくコンパイラ スタが足りないと効率が落 て一時記憶用に使えるレジ る , というパスて、す。 スタ間の転送命令を発行す 令について , メモリ・レジ 上にないと実行て、きない命 と , オペランドがレジスタ ジスタ割り当てを行ったあ djgcc 詳解講座・ He110 GCC World 63

9. 月刊 C MAGAZINE 1992年3月号

TabIe 1 c 言語の変数の可視性 記憶クラス 自動変数 ( aut 。 ) 静的変数 (static) 外部変数 (extern) 定義 関数の外で定義 関数の外で定義 関数の中で定義 関数の中で定義 関数の引数もしくは 自動変数に対してレ ジスタ変数と定義 有効期間 プログラムの実行期 間中使用できる プログラムの実行期 間中使用できる 関数の処理中で使用 でき関数の処理が終 了すると解放される 関数の処理中で使用 でき関数の処理が終 了すると解放される 意味 ( 有効範囲 ) プログラムを構成す るすべての関数で参 照できる 関数の外で定義する と定義された箇所か らファイルの終了ま でにある関数で参照 できる 関数の中で定義する と , 定義された関数 の中でのみ参照でき る 関数の中だけで参照 できる 関数の中だけで参照 できる レジスタ変数 (registe 「 ) List 8 : 7 : 5 : 3 : 2 : va 「 iab 厄という p 「 ivate 属性の変数を持つクラス class private: i nt 4 : public: VOid i nt VOid VOid examl { func2(){ variable-- funcl(){ variable + + : } get() {return variable put(int w) (variable = w; } variable; List 8 : 7 : 6 : 5 : 3 : 2 : アクセスメソッドの利用 class private: i nt 4 : public: VOid int VOid VOid exam2 { variable; func2(){ int w = get(); w--; PUt(W); funcl(){ int w= get(); w + + : put( w ) : } get() (return variable; } put(int w) {variable = w; } 実力養成講座 の限定を行うのて、す。 変数は操作て、きないようにして , 参照手段 れらのアクセスメソッドを利用しなければ , これを利用して , クラスの内部からも , そ から操作て、きないものになってしまいます。 メソッドがないと , それらの変数は , 外部 メンバ変数には , 参照と代入のアクセス プクセスメソッドの利用 法をとります。 変数への参照手続きの限定を行うという方 数を実装する場合には , クラスの内部て、も , ないといえます。そこて、 , 実際にメンバ関 情報隠蔽の機能が効果を上げることがて、き 数は , 完全に信頼て、きるものて、なければ , わば大域変数なのて、す。ゆえに , メンバ関 クラスの内部て、は , これらの変数は , い e を自由に参照て、きるわけて、す。 put, get, funcl, func2 て、は , 変数 variabl が , クラス内に定義されているメンバ関数 て変数 variable は , 情報隠蔽されています List 1 を例にすると , クラスの外部に対し は完全に自由にアクセスて、きます。 は不可視て、す。しかし , 内部スコープから 持っているため , 外部からは , メンバ変数 という問題て、す。クラスは情報隠蔽機能を に , クラスの内部スコープて、さえ広すぎる スタートアップ C 十十 情報隠蔽による変数の保護という C 十十の 情報隠蔽によるメリット のは容易に想像がっくて、しよう。 ログラムエラーの発見などの効率が上がる 時にプレークポイントを入れることて、 , プ バッグの過程て、は , 代入の関数の呼び出し れます。メンバ関数の実装過程 , とくにデ することがて、き , 変数の参照経路が限定さ ートメンパ内て、 , 仮想的なスコープを設定 こうすることにより , クラスのプライベ るのて、す (List 2 ) 。 t() を , そして代入する場合 put ( arg ) を用い 視なものと考え , 変数を参照する場合は ge す。しかし , funcl からは , この変数は不可 数 variable を自由に操作することがて、きま List 1 て、は , メンバ関数 funcl からは , 変 スタートアップ c 十十 89

10. 月刊 C MAGAZINE 1992年3月号

最新ロ區ロロレポート 使した作りて、 , マウスを使った直感的な操作 て、気の済むまて、試行錯誤を繰り返しながらデ MS-C ータを作成て、きるようになっている。さら ライン引き ( ディスプレイの対角線 ) 1 5 秒 に , アイコン , フォント , マウスカーソルの 矩形描画 工ディットも行える。 ( 1 辺 400 ドットの正方形 ) 26 秒 作成されたデータは中間ファイル ( リソー 矩形ぬりつぶし ス ) としてセープしておき , 最終的には GEN ( 1 辺 400 ドットの正方形 ) 613 秒 IFA ライプラリとリンク可能な C ソースに変 楕円描画 換して使用する。 462 秒 ( 半径 200 ドットの円 ) 楕円ぬりつぶし のほか ( 半径 200 ドットの円 ) 1270 秒 1274 秒 649 秒 GENIFA を使う場合 , GENIFA システム全 マウス関係の関数 ( 4 種類 ) , 画面上の矩形工 重要な関数群て、ある。 リアを移動したりズーム処理する画面操作関 ダイアログボックスはそのひとって、あり , 体の初期化を行うことて、関数が使用て、きる状 ューザとの対話によりデータを入力したり , 態になるわけだが , この初期化に数秒の時間 数 ( 16 種類 ) , 線の種類や背景色を設定する描 データを表示したりといった機能を実現す を要する。プログラムの最初に一度だけ実行 画環境設定関数 ( 13 種類 ) などが用意されてい すればよい初期化処理なのて、気になるものて、 る。ダイアログ関数の構造体は非常に複雑て、 フォント関係て、は , 多様なテキストフォン あるが , 幸運なことに付属のダイアログエデ はないが , これだけの時間の間にどれだけ複 イタによって簡単に作成て、きる。 雑な初期化をしているのか興味深いところが トをグラフィック画面に表示て、き , 日本語に ダイアログボックスてもほかの GUI 関数て も対応したテキスト関数 ( 15 種類 ) やフォント ある。 GENIFA ライプラリをリンクすると , 画面 が付属している。フォントのデザインは , G も , それらが作動中は , キー入力やマウスク 上に線を引くだけのプログラムても , なんと ENIFA 付属のフォントエデイタ ( マウスによ リックなどのイベントを常に監視しており , 88K バイトほどの大きさになってしまう。 る対話型 ) て、ユーザ自身により作成 , 編集す それらのイベントによってプログラムが分岐 なお , GENIFA は基本的にユーザひとりに していくことになる。またこれらの GUI 関数 ることがて、きる。 っき 1 本の製品て、ある。アプリケーションに は , 作動中に中味が空の関数を一定時間ごと なお基本図形のいくつかを実際に描画速度 組み込んて、販売する場合には別途ライセンス にコールしており , この関数をユーザ側て、記 を計測したのて、 TabIe 1 を参考にしてほし 述すると , 簡易的 , 疑似的なマルチタスクを 料が必要になる。 実現て、きるようになっている。 基本図形の描画速度だけて、比較すると MS 『 G EN 旧 A 』 GUI 構築のための関数には , ダイアログボ -C の graphics. lib などとー長一短というとこ 動作環境 ックスや , プルダウン ( またはポップアップ ) ろだが , 豊富な描画オプションや他機種への NEC 版 : PC ー 9801 シリーズおよび互 メニュー ( 8 階層まて、のメニューシステムを 移植性 , 次項の GUI 関数との連携などを考え 換機 ( 初代 , LT, ハイレゾは除く ) 作成て、きる ) を実現するためのさまざまな関 ると , この数字だけて性能を判断するのは早 AX 版 : AX マシン 数が用意されている。これらはいずれも高機 計て、ある (MS-C にもプレゼンテーショングラ IBM 版 : IBM-PC AT 互換機 (EGA, 能て、 , 十分高速て、ある。 フィックス関数が付属しているが・・ VGA) DOS/V 版 : DOS / V 対応マシン 月購築関数 N 旧 A ユーティリティ 対応コンバイラ MS-C 5.1 以上 価格 131 , 000 円 ( シングルユーザ ) 間い合わせ先アイ・エル・シー GENIFA に用意された高速な基本図形描 GENIFA の GUI 関数て、実現されるメニュー 広島市南区的場町 1 ー 3 〒 732 やダイアログボックスて、使用される構造体は 画関数を基にして , さらに高位に位置する種々 広島的場ビル 9 階 の有能な GUI 関数がイベントハンドリング関 非常に繁雑なのて、 , 対話型のエディットユー 082 ー 261 ー 9933 ( 代表 ) TEL ティリティを使用して作成すると圧倒的に手 数も含めて 13 種類ほど用意されている。これ FAX 082 ー 262--3999 らは GENIFA の中て, もっとも使いて、のある 軽て、ある。このユーティリティ自体 GUI を駆 TabIe 1 描画速度の計測結果 使用機種は PC9801 日 A21 , 20MHz, 数値演算コプロセ ッサなし。 MS-C とは MS-C 6.0 の 1 5 秒 g 「 aphics 」 ib を使用した ものである。 g ⅱ 0 とは PC -9801 の日 0 M 内にあるグラフィックⅱ 0 ルーチンを使用したもので 193 秒 ある。 すべて 1 万回のループを回し 78 秒 ている。 GENIFA 1 5 秒 38 秒 44 秒 1037 秒 30 秒 128 C MAGAZINE 1 2 3