DOS - みる会図書館


検索対象: 月刊 C MAGAZINE 1991年11月号
78件見つかりました。

1. 月刊 C MAGAZINE 1991年11月号

実践 MS-DOS プログラミンクス門 SOFT BANK C 言語による 実践 8086CPU MS-DOS MS-DOS 1 章 2 章 C 言語のシステムコールの方法 プログラミンク PC ー 9800 のクラフックシテムと ロ とアセン一の複合利 本書は℃ MAGAZINE 』の好評連載「 C プログラマのための MS ー DOS プログラミング入門」を大幅に加彦正し、改題して まとめたものです。 秋津彰文著定価 2 , 200 円 ( 税込 ) 「 C MAGAZINE 」の好評連載を単行本化。 C プログラミングを行う上で必須な MS ー DOS の 知識を明快に解説し、 C 言語と MS ー DOS の関係を活かしたサンプルプログラムを多数紹介。 る よ 五ロ 【 0 T NT 】 秋津彰文・一 - 一一 ~ 暑 9 S 旧朋 BODKS ソフトバンク出版事業部

2. 月刊 C MAGAZINE 1991年11月号

TabIe 2 オフセット 80h 04h Table 3 Table 1 アロケーションストラテジのセット DOS ファンクション 58h アロケーションストラテジの取得 / 設定 AX ニ 01 h AX = 01 h 00h ~ 01 h 02h ~ 03h 05h ~ 09h OAh—ODh OEh—1 1 h 12h ~ 15h 16h ~ 17h 18h—2Bh 2Ch—2Dh 2Eh—2Fh 30h ~ 31 h 32h ~ 33h 34h ~ 37h 38h—4Fh 50h ~ 52h 53h—5Bh 5Ch—6Bh 6Ch—7Fh 81h—FFh 引数 AH ニ 58h ニ 01h : ストラテジの設定 AL = 00h . ストラテジの取得 C プログラマのための TabIe 4 cexit 関数 C ライブラリ終了処理 #include <process. h> void cexit( void ) , 以下の処理を行って呼び出し元に戻る AL = 01 h の場合 BX : 00 : 02 ニ 01 キャリー 返り値キャリー 爪 T21 h 正常終了 最下位の空プロックから割り当て 無効なファンクションコード 最上位の空プロックから割り当て 必要最小の利用可能プロックを割り当て ① atexit, onexit 関数で登録された関数を呼び出す ②バッフアをすべてフラッシュする ③すべてのファイルをクローズする ④スタートアップルーチンで設定した割り込みべクタを元に戻す ストラテジの取得 ( AL = 00h ) の場合 AX ー 00 . 最下位の空プロックから割り当て : 01 : 必要最小の利用可能プロックを割り当て ニ 02 : 最上位の空プロックから割り当て 機能 MS ー DOS がプロセスからメモリの割り付け要求があったときの 空メモリの見つけ方を取得 / 設定する TabIe 5 プログラムのロードと非実行 DOS ファンクション 4B01h プログラムのロードと非実行 引数 AH = 4Bh AL : 01 h DS : DX : 起動するパス名の位置 ES . BX ニバラメータブロックの位置 返り値キャリー 爪 T21 h ( DOS 非公開 ) PSP(Program Segment prefix) の内容 内容 プログラムの終了命令 (lNT20h) 使用可能なメモリ中の最初のセグメント 予約 DOS 機能を FAR コールするための 5 バイト (CP/M 互換 ) プログラム終了アドレス (lNT22h ) のコピー 十 0 の抜け出しアドレス (lNT23h ) のコピー 致命的工ラーによる抜け出しアドレス (lNT24h ) のコピー ニ 02h : 03h ニ 08h : OAh ニ OB h 無効なファンクション ファイルが存在しない . 無効なバス . 十分なメモリがない . 不正な環境 不正なフォーマット キャリー パラメータブロック十 14h ノヾラメータブロック十 12h パラメータブロック十 10h バラメータブロック十 OEh SP の初期値ー 2 SS の初期値 甲の初期値 CS の初期値 SS : SP 初期値ー 0 起動時の AX 初期値 親プロセスの PSP ファイルテープル 環境変数のセグメント S P 退避領域 S S 退避領域 ファイルテープルの数 ファイルテープルへのポインタ ( DOS 非公開 ) ( DOS 非公開 ) ( DOS 非公開 ) ( DOS 非公開 ) (DOS 非公開 ) ( DOS 非公開 ) 機能 DS : DX にロードするノヾス名の ASC ⅱ文字列の位置を指定し , ES : BX にロードするためのパラメータブロックの位置を指定する DOS ファンクション 4B00h と異なる点はプログラムをロードして 実行せすに戻ることである ノヾラメータブロックの内容は以下のとおり オフセットバイト数内 予約 爪 T21 h 予約 RETF 第 IFCB ( ファイルコントロールプロック ) 第 2FCB ( ファイルコントロールプロック ) 転送領域 ) として使用される コマンドラインの文字数通常はテフォルト DTA ( ディスク PSP アドレスのセット コマンドライン 00h 06h OAh 02h 2 4 4 4 渡される環境のセグメントアドレス 001 h の場合親環境をコピーする PSP のオフセット 80h のコマンドラインに対するポインタ PSP 6Ch に渡すテフォルト FCB に対するポインタ PSP 5Ch に渡すテフォルト FCB に対するポインタ CR を除く文字数 ( 1 ノヾイト ) ↑ コマンドライン文字列 CR コマンドラインの形式は以下のとおり DOS ファンクション 50h PSP アドレスのセット ( DOS 非公開 ) 引数 返り値 機能 AH = 50h BX ニ PSP アドレス 爪 T21 h なし プロセスの切り換えができる ている実行中のプロセスについての情報で , これを変えることにより アドレスにセットする。カレント PSP アドレスは MS ー DOS が持っ BX レジスタで指定する PSP アドレスを MS ー DOS のカレント PSP Table 6 PSP アドレスの取得 DOS ファンクション 62h PSP アドレスの取得 引数 AH : 62h 爪 T21 h 返り値 BX ニ PSP セグメントアドレス 機能実行中のプロセスの PSP セグメントアドレスを BX レジスタに返す 新 MS-DOS プログラミング入門 非公開の DOS ファンクション 51 h と同じ機能である 93

3. 月刊 C MAGAZINE 1991年11月号

自由のメモリ。 ▽メモリ環境は卸から開放された /. DOS 工クステンタ EXE386 / 286 ・ VC 対応 ・ XMS 対応 ・ DP Ⅶ対応予定 KMC の提供する DOS 工クステンダ「 EXE シリーズ」は、 MS ー DO S のメモリの壁を打ち破るための DOS 拡張ツールてす。 MS ー DOS のもとで 640K バイトのメモリの壁を取り払い、プロテクトモードの広 大なメモリ空間てアプリケーションを実行てきます。 EXE シリーズには、 80286 のプロテクトモードをターゲットにした 「 EXE286 』と 80386 をターゲットにした『 EXE386 』があります。 非営利目的での使用に限り無償配布版の EXE286 / 386 が用意されて います。個人的な趣味や評価用としてご利用いただけます。 プロテクトメモリの管理規格である『 DPM しおよび「 VCP しに対応 しています。したがって、 VCP ーをサポートする仮想 86 モードの EMS ドライバや DPM ー対応の Windows とも共存可能てす。また、 EXE 386 / 286 開発バックおよびライセンスパックには高機能ソースレベル テパッガ ( PA 日 TNE 日 Ve 「 3 相当品 ) が付属しています。 DPM ー対 応は 91 年中予定。 EXE386 32bit 用 DOS 工クステンタ EXE386 は、 32 ピット CPU80386 / 80486 用のネーテイプモードて動作 する 32 ピット用の DOS 工クステンダです。 EXE386 によって 32 ビット 本来の性能を発揮するプログラムを MS - DOS 上で実行可能てす。 つまり、 32 ピットレジスタ、拡張されたアドレッシングモード、拡張され た命令が利用でき 4G バイトの広大なメモリ空間をリニアにアクセスて きます。 EXE386 開発パックには専用リンカ L386 が付属します。 処理系として 386 ネイテイプコードを出力する High C386 や GCC386 が利用てきます。 EXE286 16bit 用 DOS 工クステンタ EXE286 は、 80286 / 386 / 486CPlJ のプロテクトモードでユーサプログ ラムを実行させるための DOS 工クステンダです。 MS-DOS の環境 をそのまま利用して 16M ノヾイトの広大なメモリ空間を使用するプログ ラムが実行可能てす。 EXE286 ては、処理系としては従来の MS ー C ( Ve 「 5. I) 、 Tu 「 bo ー C ( Ve 「 2 ①が使用てきます。 PC -9 日ロ 1 心罰 31 ◎◎ FM panacom ・ 43 . 0 圓円 ・・ 1 98 , 0 圓円 ・・ 990 . 0 囲円 0 対応機種 価格 EXE386, EXE286 開発キット・・ EXE386, EXE?86 ライセンス八ック川 0 ( 1 囲本分の使用ライセンスか付属 ) EXE3B6, EXE?B6 ライセンス八ック川囲・・ ( 10 囲本分の使用ライセンスか付属 ) 10 月より下言己住所に移転しました。 〒 617 京都市長岡京市八条ヶ丘 2 丁目 27 TEL. 075-953-0963 FAX. 075 ー 953 ー 0935 京都マイクロコンピ、一タ株式会社 資料請求り・ 007

4. 月刊 C MAGAZINE 1991年11月号

. ◆ PERSONAL MEDIA CORP. BuiIding Your Future with ◆ PersonaIized M ・ d . ワークステーションがなくたって、 ー >< を使ってみたい。 MS - DOS をお使いの方に 気軽に UN Ⅸに触れてみることができます。使い慣 れたパソコンとキーポードで U N Ⅸの世界をお試し ください。 UN Ⅸをお使いの方に 見慣れたコマンドを MS-DOS パソコンで使うこと ができます。 U N Ⅸ環境は高価なワークステーショ ンのものだけではありません。 ■ UN Ⅸ環境への移行のための理想的な学習用ツールに ■サイトライセンス制度を用意 ■ AT&T 、 H P 、 N C R 、 U C LA でも標準的に採用 ■ POS Ⅸ準拠 140 を超える UN Ⅸ SYSTEM V. 3 互換のコマンドを MS - DOS 上に 実現。シェル、文字列マッチ、編集、ファイル操作を違和感なく パソコン上で扱うことができます。 Mortice Kern Systems ツール キットは、あなたの MS-DOS パソコンを限りなく UN Ⅸ環境に近 いマシンに変身させます。 ツ→レキット PC -9800 シリーズ用・旧 M-PC 用 ハソナルメティア会社パッケージソフトウェアディビジョン 〒 142 東京都品川区平塚 1 -7-7 MY ビル電話 : ( 03 ) 3490-8841 く資料請求番号 008 〉 Mortice Ker n Systems MS - DOS パソコンで UN Ⅸのコマンドが動く 68 , 000 円

5. 月刊 C MAGAZINE 1991年11月号

一 C プログラマのための List 3 します (parac 叩 y 関数 ) 。 ⑥ dos freemem 関数 (MS-C Ver. 6.0 ) , f reemem 関数 (Turbo C Ver. 2.0 / C 十十 Ver. 1.0 ) て、自プロセスの現環境変数領域 を解放します。 ⑦新領域の PSP 領域 (Table 2 ) の環境変数 領域のセグメントとファイルテープルへ のポインタを変更します。 ⑧工ラー発生時に DOS により自動的に解放 されるように次のメモリプロックの Own er ID(Fig. 12 ) を変更します。 1. 新環境変数領域の MCB セグメント 2. 新プログラム領域の MCB セグメント 3. 現プログラム領域の MCB セグメント ⑨ DOS ファンクション 50h(Table 3 ) て、新し い PSP アドレスを設定する。 ⑩スタートアップルーチンて、設定する割り 込みべクタ 00h などを元に戻すため , ce xit 関数 (TabIe 4 , MS-C Ver. 6.0 ) , estorezero 関数 (Turbo C Ver. 2.0 / C 十十 Ver. 1.0 ) を呼び出す。 cexit 関数 はライプラリとして公開されていますが , restorezero 関数は非公開のライプラリ関 数て、割り込みべクタ 00h , 04h , 05h , 06h を元に戻します。 cexit 関数とは異なり , ファイルのクローズなどは行わないため , 本関数を呼び出す前に処置しておく必要 があります。 ⑩ DS , SS レジスタを設定して新プログラム 領域にジャンプします。 @旧プログラム領域を解放します。 ⑩ DOS ファンクション 4B01h(TabIe 5 ) を呼 び出すためパラメータブロックを作成し て , DOS ファンクション 4B01h を呼び出し ます。 DOS ファンクション 4B01h は非公開 て、 , DOS ファンクション 4B00h からプログ ラムの起動だけを取り除いたような仕様 のファンクションて、す。 @DOS ファンクション 4B01h て、作成された P SP アドレスを DOS ファンクション 62h ( T able 6 ) て、取得します。 ⑩起動プログラムの PSP 領域のうち , 187 : / * フ。ロク・ラムのロート・ iregs. x. ax ニ 0X4b01 ; 188 : ニ segs. ds; segs. es 189 : intdosx( &iregs, &iregs, &segs ) ; / * 子フ。ロセス起動 190 : if ( iregs. x. cflag ) 191 : -exit( ー 1 ) ; / * 子フ。ロセス起動ェラー : 192 : ー 193 : / * PSP アト・レスの取得 ( DOS 3. x ) * / iregs. h. ah = 0X62 : intdos( &iregs, &iregs ) ; 194 : / * ( 朋 : 51h for DOS 2.11 ) / , bx : 動フ。ロク・ラムの PSP セク・メント・アト・レス , / 195 : * ( unsigned far * )MK—FP( ire s. x. bx, PARSEG 196 : * unsigned far * )MK—FP( —psp, PARSEG ) ; 197 : ・ 198 : / * 親フ。ロセスの PSP セク・メントコヒ。ー 199 : / * 割込へ・クタ 22h , 23h , 24h を元に戻す * / 200 : 201 : * ( 10 far * )MK—FP( iregs. x. bx, PRGEND + 0 ) = 202 : * ( long far * ) FP( —psp, PRGEND + 0 ) ; 203 : * ( 10 far * )MK—FP( iregs. x. bx, PRGEND + 4 ) = ー 204 : * ( long far * )MK FP( —psp, PRGEND + 4 ) ; 205 ・ * ( 10 far * )MK_FP( iregs. x. bx, PRGEND + 8 ) ー 206 : * ( long far * )MK—FP( —psp, PRGEND + 8 ) : 207 : 208 : #ifdef _MSC_VER 209 : dos setvect 0X22 , ( void interr 叩 t far * far * ) ( ) )MK_FP( _psp, PRGEND + 0 ) ) ; 210 : 211 : dos setvect 0X23 , ( void interrupt far * far * ) ( ) )MK—FP( —psp, PRGEND + 4 ) ) ; 212 : 213 : dos_setvect 0X24 , * ( void interrupt far * far * ) ( ) )MK—FP( —PSP, PRGEND + 8 ) ) ; 214 : ツ 215 : #endif 216 : #ifdef _TURBOC setvect ( 0X2 217 : * ( void interrupt ( far * far * ) ( ) )MK—FP( —psp, PRGEND + 0 ) ) : 218 : se tvect ( 0X23 , 219 : * ( void interrupt ( far * far * ) ( ) )MK—FP( —psp, PRGEND + 4 ) ) : 220 : se tvect ( 0X24 , 221 : * ( void interr 叩 t ( far * far * ) ( ) )MK—FP( —psp, PRGEND + 8 ) ) ; 222 : 223 : #endif 224 : —dos_fræmem( * ( unsigned far * )MK FP( ps ENVSEG ) ) ; 225 : - / * 現環変数領域の解放 226 : 227 : 228 : #if defined( _MSC_VER ) Ⅱ defined( TURBOC / * 起動フ。ロク・ラムの PSP セク・メント 229 : es, iregs. X. bX asm mov / * SS の初期値 230 : ss,paramblk. ssinit asm ITIOV / * SP の初期値ー 2 231 : sp,paramblk. spinit asm mov / * 起動時の AX レシ・スタの初期値 、 232 : —asm POP 、 233 : _asm pushf / * CS の初期値 234 : _asm push paramblk. csinit / * IP の初期値 235 : asm push paramblk. ipinit / * 現領域の PSP セク・メント 236 : _asm mov dx, _psp 237 : _asm dec dx / * 現領域の MCB セク・メント ・ 238 : _asm mov dS, dX 239 : asm Cli word ptr ds : [ 0X01 ] , 0 / * 現領域の解放 ( OWNER ID リセット ) * / 、 240 : asm mov 241 : _asm push / * 起動フ。ロク・ラムの PSP セク・メント 242 : _asm pop ds / * 子フ。ロセスにシ・ヤンフ。 ー 243 : asm iret 244 : #end7f return( ー 1 ) ; 、 245 : : 246 exec—ovlay 関数テストプログラム (texecovl. c) List 1 : 2 : * exec—ovlay 関数テスト・フ。ロク・ラム 3 : 4 : * ファイル名 . texecovl. c 5 : 6 : 7 : コンハ。イル・スイッチ 8 : 9 : Microsoft (R) C Co 叩 iler Version 6. 00A 10 : 11 : cl /J /W3 /Zp texecovl. c execovl. Obj 12 : cl /J 川 3 /Zpl texecovl. c execovl. Obj / 1 ink + libh 13 : 14 : Turbo C Version 2.0 / Turbo C + + Version 1.0 16 : tcc ー響 texecovl. c execov 1. Obj 17 : 18 : * / 19 : 20 : #include く string. h> 21 : #ifdef _MSC_VER 22 : #include く stdlib. h> 23 : #endif 24 : #ifdef _TURBOC 25 : #include く stddef. h> 新 MS-DOS プログラミング入門 91

6. 月刊 C MAGAZINE 1991年11月号

五ロ C の道具箱 豊国丞健 U N Ⅸ上でプロクラミングしていて , MS- DOS 上でのプログラミン三慣れ、るせい か , 勝手が悪いと感じる。ということで , 回は , 、、 MS-DO } ses を作成する。 れによって MS ー DOS 上で IJN Ⅸプログラム開発 ミできるようになる。 という環境の実現を狙ったものて、ある。 の UNIX マシンに標準て、搭載されており , そ はじめに UNIX マシンを使用したことがなくても , の意味て、は UNIX マシンのメーカーや機種の UNIX に関心を持ち , UNIX 上のプログラム 違いを意識することもなく , プログラムの 最近 , 筆者は UN Ⅸのプログラムを作成す を実際に作成してみたいという方もいると 開発が可能て、ある。たとえば Sun て、開発した ることが多くなってきているが , 作成中よ 思う。本ライプラリを使用することにより , プログラムて、あっても curses ライプラリのみ く感じることは , 「ここて、 CodeView が使え UNIX 上てのプログラム開発を疑似体験して を使用したものて、あれば , そのソースをそ たらなあ」「 Turbo Debugger が使えたらなあ」 いただければ幸いて、ある。 のままソニー NEWS て、コンパイルすること ということて、ある。確かに UNIX 上のデバッ が可能て、あり , もちろんその逆も可能て、あ IJNIX の curses ガも優れている。たとえば , プログラムが る。その意味て、は「端末にも依存しないし , UNIX マシン本体にも依存しない」ライプラ 異常終了したような場合 , その終了した位 置をソース上て簡単に確認て、きる。しかし , curses は , 本連載第 4 回て、も簡単に触れた リということがて、きる。 こに限定された MS ー DOS 上のデバッガを使った経験のある が , その特徴を一言て、いえば , 「端末に依存 機能しか持たないにもかかわら icurses が広 しない画面制御ライプラリ」ということにな 方て、あれば , やはり使い勝手は MS ー DOS 上 く利用されている理由がある。 のデバッガのほうが上と感じているのて、は る。この端末への非依存性とは非常に重要 ないかと思う。 なことて、ある。たとえば , UNIX のプログラ そこて、筆者は , UNIX のライプラリを MS ミングて、有名なジョン・ストラングは , ー DOS に移植し , 同様の環境を整備した上 「端末への非依存性により , プログラマはイ curses ライプラリは , 標準 C ライプラリの て , MS-DOS 上てプログラムを作成 , デバ ンテリジェントな端末の優れた機能を利用 仕様に似ている。たとえば , curses の print ッグし , 再びそのプログラムを UNIX 上て、コ するプログラムを書くことがてきるように w 関数は , printf 関数と引数の指定などほと ンパイルするという方法を考えた。このほ なる。端末に依存しないということは , ひ んど同じて、ある。そうてあれば , 使い慣れ うが開発効率がはるかに高いと思われる。 とつのプログラムが , DEC の Vt100 や Wyse た printf 関数を使用するほうが容易て、あると これまて、のライプラリて、も subwin, wrefre 50 , そしてそのほか新旧さまざまな端末を いう結論になるが , 出力の方法がまったく 制御て、きることを意味する。プログラマに sh など UNIX の curses ライプラリを意識した 異なっている。 printf 関数は , その関数が呼 関数を何本か紹介してきているが , 互換性 び出された時点て、 , 画面 ( 標準出力デバイス とってもっともすばらしいことは , さまざ stdout) へ出力してしまうが , printw 関数を は取れていなかった。 まな端末に対して , プログラム自体が責任 呼び出した場合には , stdscr という仮想画面 今回から紹介する MS-DOS 版 curses は , を持たなくても済むという点て、ある」 MS-DOS 上て、作成したプログラムが , その 用のバッフアに書き込まれる。したがって , と述べている。 まま何の変更も加えずに UN Ⅸ上て稼働する 画面には何の変化も生じない また curses ライプラリは , ほとんどすべて 第 17 回 応用 C 言語 103 成

7. 月刊 C MAGAZINE 1991年11月号

DOSC)R 合開発環境を実現 ソフトの道具箱 4 他機種の開発かすべて PC -9800 シリーズで OK / ロライプラリ関数のソースコードーーー完全公開 きわめて移植性の高いコードなので , コンバイラのバージョン・アップへの対応や , 異なるコンノヾイラ への移植作業はこ自身の手で容易に実行可能 ロ組み込みロイヤリティーーー無料 通常のアプリケーション・プログラムへの組み込みに対するロイヤリティーは一切不要 C/Window C/BCD C/Dbase C/Graph C/Print * 印は近日対応予定。 ISAM ファイルのキー値としてそのまま使用可能。 能。また , BCD 型データは C / Dbase にてサポートされる だが , double への型変換を行えば科学技術計算も可 実現するための関数ライプラリ。サポー N よ四則演算のみ お金の計算のように高い寅算精度が要求さオ処理を 植可能。 れたアプリケーションはそのままソースコード・レベルで移 ートされているので , あらかじめ排他制御を考慮に作成さ 排他制御を行う関数は , MS ー DOS 版にも疑似的にナ レコードの排他制御およびファイルの排他制御は完璧。 ・ OS / 2 , IJN Ⅸ版はマルチ・プロセス対応 なデータ・べース ( SQL , カード型等 ) の構築が可能。 の構築に最適。 Data 関数およこ Btree 関数は汎用的 別。 ISAM 関数は一般的な定型業務用データ・べース ISAM 関数 , Data 関数 , Btree 関数の 3 グルーズこ大 的データ・べース構築用関数ライフラリ。提供関数群は 検索ロジックに正当な Btree アルゴリズムを採用 , 本格 13 種類の多彩なグラフをサポート。 ・多彩なグラフ種類 フごとに可能。 より , キャンバスの枠 , 背景色などきめ細かい変更がグラ メント , ラベル , 凡例 ) の属性の既定値を変更することに 単に作成可能。また , 各図表要素 ( キャンバス , 軸 , セグ 1 つあるいは複数のデータ系列から 13 種類の図表を簡 常駐させるので , プログラムの変更なしに異機種パソコ プリンタの機種依存部分はすべて BIOS としてシステムに ■異機種パソコン / プリンタに対応 タでもべージプリンタ感覚でレイアウト可能。 ックス印字ツール , C/Window と完全連動。ラインフ 1 ン 仮想ページ・プリンタ方式を採用したテキスト十グラフィ のまま異機種で動作可能。 PC ー 9801 で開発されたアプリケーション・プログラムがそ ー異機種の画面制御方式の相違をすべて吸収 が容易に実現可能。 ラフィックスもサポートしているので , きめ細かな画面設計 チウインドウ・アプリケーション開発用関数ライプラリ。グ 仮想画面をサポートした本格的なオーバーラッフ型マル ー仮想画面の概念を導入 巨大な仮想画面が設定可能。仮想画面内 ( 示しご 文字 , グラフィックは任意部分をビューに投影。 ー多彩なウインドウ操作 拡大縮小 , 移動 , 表示 ON/OFF, 枠タイトル , 色 , タイ ルバターン , 重なり順序の変更。 ・強力なテキスト操作処理 低レベルな入出力から高機能なスクリーンエディッはで ・価格 : Y33 , 000 ( 本体価格 Y32 , 039 ) 図形表示 , 塗りつぶし , 全面 / 部分画面コピーをサポ ・豊富なグラフィック処理機能 種々の文字サイズ , 文字属性 , 網掛けをサポート。 ■テキスト装飾機能 ン / プリンタで出力が可能。 ■メモリ効率のよいグラフィック管理 サポート。 sprintf ( ) のょ手軽さで BCD 型のデータを編集可能。 ■豊富な編集機能 ルのキー値としてそのまま使用可能。 BCD 型データは C / Dbase でサポートさオ昉 ISAM ファイ 用可能 ■ BCD 型テータは旧 AM ファイルのキー値に使 すべて C 言語で記述 , 異 OS への移植が容易。 ■異 OS への移植か簡単 応 OS / 対応言語 : MS-DOS(Ver. 3.0 以上 ), Y95 , 146 ) , 対応機種 : 一般の MS-DOS マシン , 対 ・ MS ー DOS 版・・・価格 : ¥ 98 , 000 ( 本体価格 データ量が多くなるほど , 威力を発揮。 ・高速な検索スピード リテイだけでなく関数としても提供。 ファイルの整合性検証およびに修復の機能はユーティ ■充実したファイルの破壊対策機能 存在するので , 必要に応じて復旧可能。 削除レコードはファイルのパージを行うまでファイル内に ・削除レコードの復旧機能 スも可能。 キー値によるアクセスに加えて , レコード番号によるアクセ ・豊富な検索機能 ー 2 8 6 / 2 8 6 L , F M ー R 5 0 * / 6 0 * / 7 0 * , J ー ・対応機種 : PC ー 9800 シリーズ ( LT , XA は除く ) , PC ・価格 : Y33 , 000 ( 本体価格 Y32 , 039 ) の太さ , 色等をサポート。 多彩な枠・線・マーカ形状 , 文字サイズ , 背景模様 , 線 ■多彩な図表要素 更により , きめ細かいグラフ作成が容易。 キャンバス , セグメント , ラベル , 凡例の各構成要素の変 ■きめ細かい変更か可能 ・対応機種 : PC ー 9800 シリーズ ( LT , XA は除く ) , PC ・価格 : Y66 , 000 ( 本体価格 Y64 , 078 ) ・対応機種 : PC ー 9800 シリーズ ( LT , XA は除く ) , pc ー 2 8 6 / 2 8 6 L , F M ー R 5 0 / 6 0 / 7 0 , J ー 3100(Dynabook) シリーズ , AX パソコン , DOS/V パソ コン ・対応 OS / 対応言語 : MS-DOS(Ver. 3.0 以 上 ),DOS/V,MS-C(Ver. 5.1 以上 ),Quick C (Ver. 1.0 以上 ) , Turbo C ( Ver. 2.0 以上 ) , Lattice C ( Ver. 4.0 以上 ) ー 2 8 6 / 2 8 6 L , F M ー R 5 0 * / 6 0 * / 7 0 * , J ー 3100(Dynabook) シリーズ * , AX パソコン * , DOS/V パ ソコン * ・対応プリンタ : PC-PR201 系 , ESC-P 系 * ・対応 OS / 対応言語 : MS-DOS(Ver. 3.0 以 上 ),DOS/V,MS-C(Ver. 5.1 以上 ),Quick c (Ver. 1.0 以上 ) , Turbo C ( ver. 2.0 以上 ) , Lattice C ( Ver. 4.0 以上 ) 3100(Dynabook) シリーズ * , AX パソコン * , DOS/V パ ソコン * ※ C / Window ( Ver. 2.0 以上 ) が動作可能な機種 ・対応 OS / 対応言語 : MS-DOS(Ver. 3.0 以 上 ),DOS/V,MS-C(Ver. 5.1 以上 ),Quick C ( Ver. 1.0 以上 ) , Turbo C ( Ver. 2.0 以上 ) , Lattice C ( Ver. 4.0 以上 ) DOS/V,MS-C(Ver. 5 . 1 以上 ),Quick C (Ver. 1.0 以上 ) , Turbo C ( Ver. 2.0 以上 ) , Lattice C ( Ver. 4.0 以上 ) ・ MS-Windows 版 * ・・・価格 : Y168 , 000 ( 本体価格 Y163 , 107 ) , 対応機種 : 一般の MS-Windows マシ ン , 対応 OS / 対応言語 : MS-Windows,MS-C ( Ver. 5.1 以上 ) ・ OS / 2 版 * ・・・価格 : Y168 , 000 ( 本体価格 Ⅵ 63 , 107 ) , 対応機種 : 一般の OS / 2 マシン , 対応 OS / 対応ⅱ語 : OS/2, MS-C(Ver. 5.1 以上 ) ・ UNIX 版・・・価格は応談 , 対応機種 : 一般の UNIX マシン , 対応 OS / 対応言語 : UNIX, 標準の ・価格 : ¥ 33 , 000 ( 本体価格 Y32 , 039 ) ・対応機種 : 一般の MS ー DOS マシン ( 他の OS でも c 言語ならば対応 ) ・対応 OS / 対応言語 : MS-DOS(Ver. 3.0 以 上 ),DOS/V,MS-C(Ver. 5.1 以上 ),Quick C (Ver. 1.0 以上 ) , Turbo C ( ver. 2.0 以上 ) , Lattice C ( Ver. 4.0 以上 ) ※上記機種以外のパソコンへの移植も以下の条件にてこ・相談に応じます・・・・・・作業期間 = 4 ~ 8 週間 , 受注価格 = 応談 , 受注条件 = 作業期間中パソコン貸与 MS-DOS. MS-Windows. MS-C. Quick C は米国 Mic 「 osoft 社の商標です。 Turbo C は米国 Borland lnternational 社の商標です 0Lattice C は米国 Lattice 社の商標です。 UN Ⅸは米国 AT & T 社の商標です。 ーお問い合わせ・こ注文は直接当社まて AQLFT 黯 " ツールクラフト 〒 182 東京都調布市国領町 2 ー 3 ー 15 センチュリー K & AI 102 号 TEL. 0424 ( 89 ) 0202 FAX. 0424 ( 89 ) 4888 く資料請求番号 1 乃〉

8. 月刊 C MAGAZINE 1991年11月号

イルがあるとします。このライプラリには トモジュールの追加や削除などを行います。 A. OBJ, B. OBJ, C. OBJ の 3 つのオプジェ Fig. 9 を見ながら具体的に考えていきまし クトモジュールがすて、に登録されています。 よう。いま ABC. LIB というライプラリファ MS ー DOS 汎用ライプラリ【日付の取得・設定】 1 : #include く dos. h> 2 : #include く lib*msdos. h 〉 3 : ー MS-DOS の日付を取得ー 5 : void DosGetDate(DosDate *datep) union REGS reg; 7 : reg. h. ah ニ 0x2A; intdos (&reg, &reg) ; 10 : 11 : datep->year reg. X. CX; 12 : datep- 〉 mon = reg. h. dh ; 13 : datep->day = reg. h. dl; 14 : } 15 : MS-DOS の日付を設定ー 17 : void DosSetDate(const DosDate *datep) 18 : { 19 : union REGS reg; 20 : 21 : reg. h. ah = 0x2B; 22 : reg. x. cx = datep->year; 23 : reg. h. dh = datep->mon; 24 : reg. h. dl = datep- 〉 day; 25 : intdos (&reg, &reg) : ライプラリファイルへの登録 List 6 をコンパイルしたオプジェクトファ イルが , たとえば dosdate. obj て、あるとしま す。最初に説明したように C 言語て、は分割コ ンパイルを行うことがて、きるのて、 , リンク 時に dosdate. obj をいっしょにリンクするよ う指定することにより , このライプラリを 利用て、きます。 しかし , この方法だと , この関数を利用 するプログラムの実行ファイルを作成する たびに , リンクの指定が必要となり , 作業 がめんどうになります。 そこて、 , このような汎用のライプラリは 処理系の提供するライプラリファイルに登 録しておくと便利て、す。 ライプラリファイルへの登録などの作業 はどのように行えばよいて、しようか。 ヘッダファイルの作成 DosGetDate, DosSetDate を利用するに は , DosDate 型の定義が必ず必要て、す。さら これらふたつの関数のプロトタイプも 用意したほうが便利て、す。ヘッダファイル は List 7 のようになります。しかし , 本当に このような設計て、よいのて、しようか。 List TabIe 4 MS ー DOS 汎用ライプラリ【日付の取得・設定】の機能概路 DosGetDate 式 #include <lib*msdos. h 〉 形 void DosGetDate(DosDate * datep) 解 説 DosGetDate は現在の日付を datep の指す DosDate 型構造体に格納します。 typedef struct { int year; / * 年 * / char mon, / * 月 * / char day; / * 日 * / } DosDate; 可搬性 MS ー DOS 上でのみ有効 DosSetDate 式 #include <lib*msdos. h 〉 VOid DosSetDate(const DosDate * datep) 解 説 DosSetDate は現在の日付を datep の指す DosDate 型に格納されている日付をシス テムにセットします。 MS - DOS 上てのみ有効 可搬性 ライプラリファイルの 保守 〇 DosDate 型 まずライプラリファイルの保守の点を考 えましよう。ライプラリの保守にはライプ ラリアン ( ライプラリマネージャ ) を使いま す。 ライプラリアンの操作 ライプラリが「図書館」ならば , ライプラ リアンは「図書館員」て、す ( ) 。 ライプラリアンは , ライプラリファイル の保守を行うためのユーティリティて、す。 ライプラリファイルに対して , オプジェク ′彡 52 C MAGAZINE 1991 11

9. 月刊 C MAGAZINE 1991年11月号

・注意事項 94 C MAGAZINE 1991 11 として起動可能となり , 参考文献 [ 2 ] に示 用すれば , ADDDRV コマンドを子プロセス 関数て、す。今回示した exec_ovlay 関数を使 すという観点から考えれば , 結構役に立っ 子プロセスにて、きるだけ多くのメモリを渡 awn 関数に比べて馴染みが少ないのて、すが , いかがだったて、しようか。 exec 関数は sp おわりに ンアップしてみてください ノヾ - ーシ ' ヨ C 言語て、記述すれば簡単て、すから , - 彡・い、 0 11 回「環境変数の操作」 ( ' 91 年 8 月号 ) 夫昭 ) をたどることて、可能となります ( 本連載第 extern Char * * environ ; た環境変数を渡すには外部変数の , いることになります。 putenv 関数て、設定し することが可能て、すが , これらを無視して す。 C 言語て、は putenv 関数て環境変数を設定 数領域をそのまま子プロセスに渡していま ② exec 。ⅵ ay 関数て、は起動時の環境変 ません。 ロセスを終了させるほうが , 安全かもしれ たときには DOS ファンクション 4Ch て、直接プ DOS ファンクション 4B01h て、エラーが発生し の解放などの無視て、きるエラーは無視して , こは , 領域 われていると誤動作します。 が , もし , exit 関数て、セグメント参照が行 て、プログラムを終了するようにしています きに呼び出し元にリターンせず , exit 関数 そのため , 移動後にエラーが発生したと 作します。 を行っているライプラリを呼び出すと誤動 プログラム領域に移動後はセグメント参照 となる可能性があります。したがって , 新 題ありませんが , スモールモデルて、は問題 あればリロケーションの必要がないため問 ョンを行っていません。タイニィモデルて、 移動するだけて、 , セグメントのリロケーシ ( 1 ) exec ー 0 ⅵ ay 関数て、はメモリプロックを ~ C プログラマのための しているように , ADDDRV/DELDRV コマ ンドを多重に起動するユーティリテイも作 成て、きるようになります。次回は , 実際に exec 0 ⅵ ay 関数を使ったユーティリティを [ 参考文献 ] 作成します。 [ 6 ] 幸田敏記 , fMS-DOSi•—タブッ S-DOS 』 , BNN [ 5 ] 幸田敏記 , 「マシン語クックプック M SIC 』 1991 年 4 月号 ョンを自動起動する LAP 」 , fThe BA [ 4 ] 川野亮 , 「拡張子によりアプリケーシ ンターフェース』 1991 年 4 月号 DELDRV 多重起動ユーティリティ」 , 『イ [ 3 ] 中島信行 , 「 PCー9801 対応 ADDDRV/ 「別冊インターフェース』 , CQ 出版社 [ 2 ] 中島信行 , 「 C によるメモリ管理技法」 , Q 出版社 ト技法」 , 「別冊インターフェース』 , C [ 1 ] 中島信行 , 「 MS-DOS メモリ管理ソフ ク』 , ラジオ技術社 olume 1 システム解説編』 , アスキー [ 15 ] TMS-DOS ェンサイクロべディア V ファレンスマニュアル』 , NEC [ 14 ] TMS-DOS Ver. 3.3B ューザーズリ 01.2 , NEC ズリファレンスマニュアル』 V01.1 , V [ 13 ] TMS-DOS Ver. 3.3B プログラマー ァレンスマニュアル』 , NEC [ 12 ] TMS-DOS Ver. 3.1 ューザーズリフ ラマニュアル』 , NEC [ 11 ] fMS-DOSVer. 3.1 マクロアセンプ リファレンスマニュアル』 , NEC [ 10 ] TMS-DOSVer. 3.1 プログラマーズ スキー 帳 ? 」 , 「年刊 AhSKI ! 』 1987 年 4 月 , ア [ 9 ] 「エッ ! M U S ー D O S うらわざ手 ル ( ソフトウェア編 ) Ver. 2.11 』 , 東芝 [ 8 ] 「 J ー 3100 シリーズテクニカルマニュア ル ( ソフトウェア編 ) Ver. 3.1 』 , 東芝 [ 7 ] 『 J ー 3100 シリーズテクニカルマニュア [ 16 ] TMS-DOS 工ンサイクロペディア V olume 2 リファレンス編』 , アスキー [ 17 ] fMicrosoft C Ver. 6.00A Professi onal Devel opment System Program mi ng Guide 』 , Microsoft [ 18 ] fMicrosoft C Ver. 6.00A Professi ona 1 DeveIopment System Referen ce 』 , Microsoft [ 19 ] TMicrosoft C Ver. 5.1 Optimizing Compiler User' s Guide 』 , Microsoft [ 20 ] [fMicrosoft C Ver. 5.1 Optimizing Compi ler Language Reference 』 , M icrosoft [ 21 ] fMicrosoft C Ver. 5.1 Optimizing CompiIer Mixed Language Progra mming Guide 』 , Microsoft [ 22 ] fMicrosoft C Ver. 5.1 Optimizing Compiler Run-Time Library Refere nce 1 , 2 』 , Microsoft [ 23 ] TTURBO C Ver. 2.0 USER' S GU IDE 』 , BORLAND [ 24 ] TTURBO C Ver. 2.0 REFERENC E GUIDE 』 , BORLAND [ 25 ] TTURBO C 十十 Ver. 1.0 INTRO DUCTION 』 , BORLAND [ 26 ] fTURBO C 十十 Ver. 1.0 USER' S GUIDE 』 , BORLAND [ 27 ] TTURBO C 十十 Ver. 1.0 PROGR AMMER' S GUIDE 』 , BORLAND [ 28 ] TTURBO C 十十 Ver. 1.0 LIBRA RY REFERENCE V01.1 , V01.2 』 , B ORLAND [ 29 ] TLSI C ー 86 Ver. 3.2 試食版ューザー ズマニュアル』 , 工ル・エス・アイシ ヤノヾン ( 注 1 ) 本記事での menu は MS ー DOS に付属す るメニュープログラムではなく , 一般 的なメニュープログラムを意味しま す。したがって , menu のスイッチなど が適切でない場合もあります。

10. 月刊 C MAGAZINE 1991年11月号

CONTENTS NOV,. 1991 円引年Ⅱ月一日 ( 毎月一回一日発行 ) 第 3 巻第Ⅱ号通巻 26 号円 90 年 2 月 2 日第 3 種郵便物認可 Vol.3No.11 PauI Hagerty(DNex 、 ,ー,,~。。ー Programnung on PLlrPOSetText editorsJP. J.PIauger GUI プログラミングの高速化ーー開発ツールを正しく選ほう COMPUTER LANGUAGE 提携記事 Get GUI Fast! ソーティンクの秘密主義を終わらせよう COMPUTER LANGUAGE 提携記事 An End tO the Mystery Of Sorting フリーソフトウェア最新レポートく第 23 回〉 Wind 。 ws で便利 ( 2 ) 野口雄平 Book Review ライプラリ開発技法 PartI ・ライプラリ開発の基礎知識 Pa Ⅱ・実践ライプラリ開発 Pa Ⅲ・ 8086 ライプラリ開発の秘訣 djgcc 詳解講座 H 可 GCC W 町 ld く第 1 回〉環境変数の設定安田英之 新連載 新 MS ー DOS プログラミンク入門く第 14 回〉子プロセスのオーバレイ ( 1 ) 中島信行・ C プログラマのための GCC で学ぶ 68 ゲームプロクラミンクく第 6 回〉スプライトゲームの例をみる ( 2 ) 吉野智興・ ・・ 95 X68k 活用講座 の道具箱く第 17 回〉 MS ー DOS 版 0000 , の作成豊国永健・ ・・・ 103 応用 C 言語 恥すかしながらドジりましたく第 24 回〉苦労が徒労であることも往々にしてある岩谷宏・ C 言語フォーラム = 田典玄のランタムアクセスく第 5 回〉新人類プログラマへの愚痴 115 痛快工ッセイ C 言語雑学講座く第 14 回〉ェンティアン乗松保智・ ・・・ 117 明解 ANSI C 言語入門講座く第 8 回〉文字列とポインタ柴田望洋・ ・・・ 123 スタートアップ C 十十く第 7 回〉クラスの設計木戸研ー・龍崎昌平・白倉伸一郎・山本浩文・・ ・・・ 133 実力養成講座 C MAGA セミナールームく第 15 回〉文字列を返す関数の考察柴田望洋・・・ ・・・ 142 プログラミング添削 C 言語インタフェイスライプラリ℃凵 PS 』内田勝己・・ ・・・ 145 最新開発環境レポート RHD システム』 ( HPC テサインシステム ) 木戸研ー ・・ 148 最新開発環境レポート C マガ電脳クラブく第 8 回〉ネイノ←ズ吉柄貴樹 ・・・ 152 lnformation from CompiIer Makers 円羽信夫の発想快発く第 11 回〉毒と DOC , 鏡と DOC ・ ・・ 161 C MAGA News Square ・・・ 162 Readers' Room ティスク内容のお知らせ ・・・ 167 EDITORS' ROOM ・ ・・ 168 ・本記事中のプログラム名 , システム名 , CPU 名は一般に各メーカーの登録商標です。本文中では TM , マークは明記していません。 ・本誌および付録ディスクに掲載されたすべてのプログラムは著作権法上 , 個人で使用する目的以外で無断で複製することは禁じられています。 表紙・イラストレーション・秋山育 / テサイン・持田哲 PubIisher: Masayoshi Son Publishing Di 「 e 0 「 : GO 「 0 Hashimoto Editor-in-Chief: Shinichi Hoshino Director Of Marketting: Ryo Tanii Manager Of Sales and Advertising. YOShiO GOShima EditoriaI and Busi ness Offices: NS Takanawa Bldg. , 2-19-13 , Takanawa, Mi nato-ku, TOkYO 108 , Japan Editori 計 Phone ( 03 ) 5488-1318 SaIes : Phone ( 03 ) 5488-1360 、 Advertising. T0kyo. Phone ( 03 ) 5488-1365 0saka: Phone ( 06 ) 264-1471 C 叩 yright ⑥ 1991 SOFTBANK Corporation. TOkYO. AII rights reserved. NO materialin this publication may be in whOle 0 「 in part, in any from without permission. pri nted in Japan. 巻頭インタビュー ・ 20 ・・ 25 0 2 3 4 4 柴田望洋・ 特集 ・・・ 74