表示 - みる会図書館


検索対象: 月刊 C MAGAZINE 1993年1月号
96件見つかりました。

1. 月刊 C MAGAZINE 1993年1月号

大きなメモリ量を確保した I ・ Oi•—夕方式 BANK メモリと EMS (Expanded Memory Specification) が拡張メモリとして存在しま す。 本章て、は , まずコンべンショナルメモリ と UMB を MS ー DOS がどのように扱っている かを解説し , 限られたメモリ空間をいかに 効率よく活用するかについて考えていきま す (Fig. 1 ) 。 52 C MAGAZINE 1993 1 r. 3.3 ( 内部的には Ver. 3.2 ) のメモリマップ も記述しない状態の , NEC 製 MS-DOS Ve CONFIG. SYS, AUTOEXEC. BAT に何 す。 メモリプロックの 1 セグメント前に位置しま MCB は 16 バイトの大きさての OS が管理する ock) によりメモリ管理が行われています。 DOS3 て、は , MCB (Memory Control BI DO によるメモリ管理 て解説します。 DOS3 とは異なる DOS5 のメモリ管理につい るのて、 , まず DOS3 について説明し , その後 同じて、すが , 異なる部分もいくっか存在す 5.0 ( DOS5 ) て、も基本的なメモリ管理方法は MS-DOS Ver. 3. x ( 以下 DOS3 ) て、も Ver. す。 ナルメモリの管理についての知識が必要て、 の基本となる MS-DOS によるコンべンショ すためには , 拡張メモリだけて、はなく , そ なっています。よりよくメモリを使いこな ルメモリは , MS ー DOS が管理て、きる領域と のとなっていますが , このコンべンショナ まのソフトウェア環境て、は , かなり狭いも 768K バイトが限界 ) 。この限界サイズは , い す ( PC ー 9801 のハイレゾモードや FM ー R て、は は 640K バイトのメモリが限界となっていま MS-DOS は , PC ー 9801 , IBM-PC などて、 とは コ、 ' ンショナルメモリ を ZMAP を使って s オプションをつけて表示 すると Fig. 2 のようになります ( PC ー 9801RL ノーマルモード使用 ) 。 付録 char mcblD , typedef struct { て、表すと以下のようになります。 MCB の 16 バイトの構成を C 言語の構造体 unsigned short ownerPSP unsigned short size , char reserve [ 11 ] ; } MCB , ・ mcblD . 先頭の 1 バイトは、、 M 气 = 4DH ) または、、 z ク (=5AH) て、 MCB の ID として使われます。 メモリマップ表示 TOOL 「 ZMAP 」 ZMAP (Zobplus memory MAP) の特徴 メモリマップ表示 TOOL は VMAP (c. mos 氏作 ) , MS (K-CRAFT 氏作 ) を参考 にして作成しました。が , 多くの機能を 拡張し , より多くの情報が表示て、きるよ うになっています。 ・デバイスドライバのメモリに占めるサ イズ : 割り込みフックベクタの情報を 表示し , addd Ⅳなどて、組み込むことに よって , コンべンショナルメモリや UM B に移動していても正常に情報を得られ ます。 RIVE についてもデバイスドライバと同 ・ BUFFERS, FILES, FCBS, LASTD TabIe A オプションスイッチー覧 様に UMB 関連のツールや DOSHIGH を 利用して , UMB, HMA に移動してい ても情報を表示し , その設定値を知る ことがてきます。 ・ XMS ドライバに XMZ(XMs driver Z obplus ) を使用している場合 , より詳し い XMS 情報 (EMB 関連 ) を表示てきま す。 ・ VCPI にも対応し , VCPI の情報ととも に仮想 86 モードにおける論理ページと 対応する物理ページのアドレスを表示 します。 起動方法 次のようにして起動します。 意味 オプション C V A S デフォルト 内容 Conventional memory UMB memory EMS memory XMS memory BANK/BMS memo 「 y VCPI memory AII memory NOt compress multi blocks Simple display HeIp Conventional memory & UMB memory コンべンショナルメモリの情報を表示 UMB と HMA の情報を表示 EMS の情報を表示 XMS(HMA, UMB ) の管理情報を表示 BANK メモリに情報を表示 BMS か設定されて いるときは BMS 管理情報を表示 VC 日関連の情報と仮想 86 における論理ページ と物理ページの関係を表示 BANK メモリを除く , すべてのメモリを表示 する。 cuexv と同等 複数の連続するフリーメモリプロックと BUFFERS プロックをまとめすに表示 デバイスドライバ , BUFFERS, 日 LES の表示を 抑止 (DOS5 の Subsegment を除く )

2. 月刊 C MAGAZINE 1993年1月号

ソ このとき , ネスト部分をスキップ ( 不可視 に ) するなどの選択がて、きます。 ③関数の最後まて、到達したら , もう一度同 じ関数を表示するか , 次の関数に進むか どうかの選択がて、きます。 動作は① ~ ③を繰り返します ( えーと , あ この選 げ足とりになってしまいますが , 択時のメッセージのスペルがちょいと間違 っています。気をつけましよう ) 。 CLIST のネスト判定は , 、、 { 〃 ~ 、、ドて、行っ ています。むやみやたらに、、 { 〃 , 、、ドを入れる 癖のある人には向いていないかもしれませ ん。また , コメント文はソ * ク , 、、 * / 〃て、区別 しているようて、す。とくに C プログラムて、な くても , 、、 { 〃 , 、、ドて、くくってあればよいの て、 , ほかの言語や文章 ( ? ) て、も使えるかも しれません。 筆者の個人的な , そして勝手な感想とし ては , CLIST の色表示とネスト単位表示と いうアイデアはいいと思いますが , もしこ れにエデイタの機能をつけていただけたら , さらに一層使いやすく , 単なるソース理解 補助にとどまらず , コーディングを支援す る優れたツールとなるように感じます。 なお , CLIST. LZH には Lattice C Ver. 2.1 ( たぶん ) 用のソース CLIST. C が含まれて います。 NIFTY ー Se Ⅳ e において C 言語フォーラム ( FC ) への登録を確認しています。 NIFTY ー Se Ⅳ e において C 言語フォーラム 52 ー 249 ー 1977 ) て、作成されたものて、す。 市中区栄 4 ー 16 ー 23 オフィス栄 7F : TEL 0 インターナショナル ( 〒 460 愛知県名古屋 ます。また本ソフトウェアは , 株バンビ・ Ver. 1.06 用のソースファイルが含まれてい 行ファイルとデモのほか , ZORTECHC 十十 力の便利ツール フ ト ウ ェ ア 取 新 レ 作 者 CLIST 青池和俊さん ()I FTY-Serve C 凵 ST. LZH 上記ネット GED00307 ) ファイル名 ネット CLIST は , 前記の MACRO と同じ方が作 ラー表示とネスト番号を追いかけます。 ト単位て、ポーズしながら先ほどっけたカ ②表示した関数の最初に戻り , 今度はネス きるわけて、す。 号もつきますのて、 , モノクロて、も利用て き , 色と同時に n 〃のようにネストの番 きて一気に表示してしまいます。このと ①まず , 関数部分の全体をネストカラーっ は次のようになります。 わかりにくかったのて、すが , 基本的な動作 ちのモノクロノートパソコンて、はちょっと り重要な情報となりますのて , 筆者の手持 ページャ」とてもいいましようか。色がかな または関数単位て表示を行う C プログラム用 のネスティングを色て、表現しつつ , ネスト 現するのが難しいのて、すが , 「 C プログラム かなり視覚的なツールて、すのて、 , 言葉て、表 CLIST とは「 COLOR LIST 」のことて、す。 ND. DOC より ) て、す。 時間を短縮するためのツール」 (CLIST の SE 心理的負担 , 不安の軽減および記憶再現の は「 C プログラマの ( ソフトウェアに対する ) 成されたフリーソフトウェアて、す。こちら ( FC ) への登録を確認しています。 OSANPO 作 ファイル名 ネット うーむ , グやプログラミング支援という意味て、は直 うかもしれない。 OSAN PO はプログラミン 者 : 小番潤さん これはちょっと今回の趣旨と違 上記ネット OSANP020. LZH (ASCI ト NET . PCS38349 ) 野口雄平 て表すというアイデア。これが OSANPO の とにかく , メモリの状況をグラフィック なしなど制限が大きいものとなっています。 —CRT 十メインメモリ IM バイト以外は確認 ー 9801 シリーズ十 MS-DOS Ver. 3. x 十カラ っているようてす。また利用可能環境も PC ましたが , かなりの部分を推測によって行 PO て、は弱いのてす。ドキュメントにもあり のとくに EMS や UMB 部分の解析が OSAN リダンプの機能て、す。プログラムデータ部 ほかのツールに比べて特徴的なのはメモ ップへ戻り , キーて、終了します。 しましよう。疲れたらキーてメモリマ す。このウインドウて、メモリの中をお散歩 ーて、次のプログラムの先頭へジャンプしま モリの中て、はカーソルキーて、移動し , キ ら順にメモリの中を見ることがて、きます。メ ウインドウが表れ , 最初の常駐プログラムか 画面表示されたところて、固キーを押すと , レスを並記します。 CB アドレス , オーナーアドレス , 環境アド ム名 , プログラムサイズ ( 10 進 , 16 進 ) , M な内容を出力します。ここて、は , プログラ ゆる VMAP や MAPMEM て、表示されるよう 右半分はプログラムデータ部て、す。いわ モリ使用量なのかが視覚化されるわけて、す。 どのプログラムがどの辺て、どのくらいのメ ます。プログラムの区切りて、色が変わり , ト , 横は 100H セグメントて、 256 ドット表示し メント 0000h ー FFFFh を 1 セグメント縦 2 ドッ ップがグラフィックて、表示されます。セグ OSANPO を起動すると左半分にメモリマ 散歩するツール」という意味てす。 て、す。プログラム名は「メインメモリ中をお への , 「メインメモリ利用状況視覚化ツール」 モリ食ってるよ。なんてことを知りたい方 こにいるのかな ? ありゃ ~ こんなにメ 自分が作ったプログラムがメモリの中て、ど 接は関係ありません。が , あえていうなら 機能と特徴て、あると思います。 フリーソフトウェア最新レポート 47

3. 月刊 C MAGAZINE 1993年1月号

実践 C70 クラジク by ste 奥村晴彦 第 10 回情報処理試験特集 実践 C プログラミング入門も後 3 回となりました。まだ強敵の構 造体などか残っていますか , 今回は 10 月に行われた第 2 種情報処 理技術者試験の解説にあてます。今回は 3 問中 2 問を扱い , 残りの 1 問は構造体やそれに関連するテータ構造を学んだ後に回します。 e110 と表示されるかどうかは徴妙な問題て、 関数 printf ( ) に渡されるのは Hello という す。 VZ ェデイタの中から実行した場合は表 文字列全体て、はなく , その先頭番地て、した。 示されないようて、す ) 。 このような番地 ( アドレス ) を格納するため 1992 年 10 月 18 日 , 第 2 種情報処理技術者試 このプログラムをコンパイルして実行す の変数をポインタといいました。この場合 験て、史上初の C 言語による出題がありまし ると , コンピュータのメモリ ( 記憶装置 ) の のポインタは , 1234 番地の中身が文字 ( cha た。わが大学の職員の O さんもさっそく受 r 型 ) て、すのて、 , 「 char 型を指すポインタ」 , どこかに 験されました。無事合格されるかな。 つまり「 char * 」型て、す。この型のポインタ H e Ⅱ 0 \ 0 言語に関する問題は , アセンプラ (CASL) , という 6 バイト ( 6 文字分 ) の領域がて、きます。 ap を作り , それに文字列 He110 の先頭番地を COBOL, FORTRAN, PL/ I , C から選べ たとえばこの領域が 1234 番地から 1239 番地 代入し , この ap を printf() に渡すことによ ます。どの言語も 3 問ずつ出題されます。 って He110 と表示するプログラムは List 2 の まて、て、あったとしましよう。先頭の 1234 ようになります。 C 言語の最初の問題 ( 問 8 ) を私の C 言語ク 番地には H という文字の文字コード ( 16 進て 48 ) , なお , この 4 , 6 行目は ラスの学生に解かせてみました。必要な事 次の 1235 番地には e という文字の文字コード 項をひと通り解説したあと , 学生が解いて ( 16 進て、 65 ) , ・・が入り , 最後の 1239 番地 Hello char *ap いくようすを観察したのて、すが , とくに問 には文字列の終端を表す特殊な制御文字の とまとめて書くこともて、きます。 8 て、は , アルゴリズムをたどる訓練が十分て、 文字コード ( 16 進て、 0 ) が入ります。この特殊 この場合の Hello が「ポインタ ap によって 指される文字列」て、す。 ことを感じました。 な制御文字は画面には表示されませんが便 て、も , プログラム中に " He110 " と書き込む 宜上 \ 0 と表す約束になっていますにの \ と く問 8 > ことによって作った文字列は , 書き換えて、 いう文字は日本以外て、は \ ( バックスラッシ 文字列の置換 ュ ) て、す。今回の情報処理試験て、も \ 0 とな きないことになっています。たとえば 学生たちは , 問題を配られても , 「ポイン ” He ⅱ 0 ” っていますね ) 。 タ ap て、指される文字列 A 」などのことばに圧 コンパイルされたプログラムは「 1234 とい *ap 倒されているようて、したのて、 , まずは用語 う値をライプラリ関数 printf ( ) に渡す」とい printf (ap) ・ の復習と , 問題文の「読解」から入りました。 う意味の機械語の命令になります oprintf( ) のように , ap 番地の内容 * ap を H から h に書 文字列というのは , たとえば画面に Hell は 1234 という値を受け取ると , 1234 番地の き換えることは一般にて、きません。 文字列を書き換え可能にするには , いっ 0 と出力するプログラム ( List I) の Hello のこ H という文字から順に表示していき , 1239 番 とて、したね ( List 1 のプログラムは He110 の後 たん配列にコピーしなければなりません。 地の \ 0 まて、いくと表示をやめます ( \ 0 は表 に改行の制御文字 \ n がないのて、 , 本当に H List 3 は , ( 終端の \ 0 も含めて ) 6 個の文字を 示されません ) 。 90 C MAGAZINE 1993 1 ーじめに

4. 月刊 C MAGAZINE 1993年1月号

セス名がこの位置に設定されます (DOS5 に おける MCB の 16 バイトの構成を C 言語の構 造体て、表すと以下のようになります ) 。 typedef struct { char mcblD unsigned short ownerPSP unsigned short msize , char reserve [ 3 ] , char ownername [ 8 ] , } MCB ZMAP は DOS3 においてはメモリプロック の使用プロセス名表示に環境変数ェリアの プロセス名文字列を検索して表示していま したが ( 環境変数工リアを解放する常駐ソフ トて、は表示て、きません ) , この MCB 内のプロ セス名の設定によりさらに容易にプロセス 名を表示て、きるようになります。 DOS システムが利用するメモリプロック においても , このオーナープロセス名は設 定され , システムのデータ領域て、は、、 SD 〃 (System Data), プログラムコード領域て、 は、、 SC ク (System Code) が設定されます。 これにより , メモリ管理のマップ情報をよ り確実にアプリケーション側て、把握て、きま す。 08AF : 0098 0FB7 : 0000 1003 0008 1003 : 圓圓 100D : 0000 10A4 : 0000 IOAF : 0000 IOBD : 00 圓 1590 : 0000 15FD 15FD 16D9 15PD 16E4 ー A000 37 : ) プグメント オーナー PSP に 0008h , オーナープロセス 名に、、 SM 〃が設定されているメモリプロッ クは , CONFIG. SYS て、定義された FILES や デバイスドライバなどの位置するメモリプ ロックになります。 DOS3.3 以前て、はこのメ モリプロックはひとつのプロックとして一 括管理されていましたが , DOS5 て、は分割管 Fig. 17 List 6 の実行結果 1003 : 0000 EMMXXXXO Fig. 16 テパイスドライバのメモリマップ ます。 ntrol Block, 以下 SCB) により行われてい セグメント制御プロック (SubsegumentCo 理され , そのメモリ制御は MCB と似たサプ >zmap DEVICE : RZ. SYS /E DEVICE : VEMS. DRV /E /U CONFIG. SYS の内容 ZHAP ⅵ . 00 C 叩 yright(C) 1992 ZOBplus Hayami DOS Version 3. 30 SCB の 16 バイトの構成を C 言語の構造体て、 表すと以下のようになります。 typedef struct { ovnerpsp/parameters device char scblD Hooked vectors Addr PSP 凵 st S i ze 24464 160 218 561600 271 く files> 1040 く buffers> く config> 5 1 く character-device> 2416 く block-device> 3 ( + 5 ) 165 く f ⅱ es 〉 く fcbs> : 19 ( + l) 19760 く buffers> 486 <lastdrive 〉 = F: 3504 く shell> 160 く shell env. > く free 〉 EMMXXXXO 67 IRZ DISK 02 5F 22 23 24 2E 日 LES を表示する C プログラム ( MEM5. C ) 1 : #include く stdio. h> 2 : #include く dos. h> 4 : #ifndef MK_FP 5 : #define MK-FP(), 。 ) ((void far*)(((unsigned 1 。 ) ( s ) くく 16 刃 ( si short) ( 。 ) ) ) 6 : #endif 8 : typedef uns igned char BYTE; 9 : typedef unsigned short WORD; 11 : typedef struct ( WO f_off; WORD f_seg; WORD f num; } FILES; ' 17 : int min() 15 : 14 : ー 12 : は 0 : 7 : 3 : : 18. (Fig. 16 と同じメモリ状態で実行 ) 0060 : 3448 5 0060 : 3436 CLOCK 0060 : 3424 AUX 圓 60 : 3412 PRN 0060 : 3400 CON 100D : 0 圓 0 1 08AF : 0048 NUL 9 : 20 : 22 : 23 : 24 : 25 : 26 : 28 : 29 : 30 : 1 : 32 : ー 33 : 34 : 36 : WORD m off, m_seg; FILES far * 叩 ; —asm mov 曲 , 52h ; —asm int 21h ; asm mov ax, es: bX 十 4 asm mov dX, es : bX 十 6 _asm mov m_Off, ax; asm mov m_seg, dx; 叩 = MK_FP(m_seg, m_off) : return 0 ; 叩 = MK_FP( 叩ー〉 f_seg, mp->f_off) ; if (mp->f_off = = 0xFFFF) break; printf("X04X: % 0 猷 X2d*n", FP_SEG(mp), FP_0FF(mp), 叩ー〉 f ー n 凹 ) : 62 C MAGAZINE 1993 1

5. 月刊 C MAGAZINE 1993年1月号

List 2 を修正すると・・・ List 1 を修正すると・・・ LiSt List int choice; printf( ” 1. カレント . gets(buf) : choice = atOi (buf) ; 卩 switch (choice) { case 1 : break ; case 2 : break ; case 3 : break ; default: break : int choice; printf( ” 1. カレント .. gets(buf) : choice = atoi (buf) ; if (choice = else if (choice else if (choice else { char ChO i ce ; printf( ” C. カレント . gets(buf) ; choice = bufC0] : switch (choice) ( break ; break ; break ; default: break ; Char ChO i ce ; printf( ” C. カレント .. gets(buf) ; choice = buf[0]; if (choice else if (choice = else if (choice = else { List 3 を修正すると・・・ Fig. 2 分散している情報をまとめる コマンド 名前 “カレントディレクトリを表示する” ー℃” 関数 LiSt gets(buf) ; choice = atoi(buf) (*menu[choice]. func) ( ) ; 3 gets(buf) ; choice = cmdtoi(buf) (*menuCchoice]. func) ( ) ; int cmdtoi(char *s) switch (*S) { case ' C' : return(l); case ' D' : return(2) ; case ' Q' : return(3) ; return( の ; default: cmd—curdir テープルにする コマンド関数 名前 'C' cmd-curdir “カレントディレクトリを表示する” 'D' cmd-di 「“指定ティレクトリを表示する” ' 0 ' cmd-exit “終了する” ③それの名前は「カレントディレクトリを表 れがテープルて、あり , 構造体の配列なのて、 ソースプログラム上に明示的には示されて 示する」だ いません。その知識はプログラマの頭の中 す。なるほど , なるほど (Fig. 2 ) 。 と考えて例題 2 を解いたものが List 7 て、 という三つの情報があるのて、す。このうち だけにあるのて、す。 す。これは List 3 をベースにして書きまし ②と③は構造体 ITEM のメンバとして表現さ 要するに , List 6 はひとつにまとめるべき れ , 配列 menu [ ] の中に含まれています。 情報をまとめていないのて、す。いうなれば , た。 しかし①の情報だけは , 配列 menuC] の中 パンとサラダはテープルの各人の席にそれ 配歹添字 ぞれ置かれてるのに , ミルクカップだけは には含まれず , 関数 cmdtoi の中に記述され 別にひとまとめにして台所に並べてあるよ ています。ひとつの「カレントディレクトリ 例題 1 を解いた List 3 ては , 入力されたコ を表示する」という処理にかかわる情報がソ うなものて、す。どのミルクカップが誰のも マンドが何て、あるかを判定する必要はあり のなのかはっきりしているならば , 初めか ースプログラムの 2 か所に散らばっているこ ませんて、した。入力された番号をそのまま とがおわかりいただけるて、しようか。 らテープルの各人の前に並べておけばいい ( 1 減らして ) 配列 menu [ ] の添字に使いま ①と , ②十③のふたつに散らばった情報 のて、す。「はい , これがあなたのパンとサラ ダとミルクて、す」というふうにね。 [ パン , した。けれど例題 2 を解いた List 7 て、はそれ をつなげているのは , 「 ' C ' を選んだとき cm サラダ , ミルク ] をワンセットにしたもの , dtoi は 1 を返し , そこから 1 を引いた値を添字 がて、きず , 今入力された文字がどのコマン とした menu[] の要素に②十③が格納され それが構造体て、す。そして各人の [ パン , ドに相当するかを探しています。探すとい サラダ , ミルク ] を全員分並べたもの , そ ってもたかだか数個のコマンドを調べるだ ている」という知識て、す。そしてその知識は 120 C MAGAZIN E 1993 1

6. 月刊 C MAGAZINE 1993年1月号

第 QUÅTTRO PRO FOR WINDOWS ポーランド株式会社 000 クーポンご利用上の注意点① PC クーポン 1 枚に付き券面掲載 「ポーランド製品ユーザー 謝恩特別セールス価格での の商品 1 点、有効期間中にのみ利用できます。また、換金は 一切いたしません。②破損したりコビーした券は無効となり ご購入は使用できません」 ます。③加盟店のクーポンコーナー展示の対象商品よりお選 びください。なお品切れの場合は販売員にお申し出ください。 ④商品購入時にレジにてクーポン券をご提示の場合のみ利用 できます。ロ答だけでは割引されません。⑤クーポン券裏面 の必要事項 ( 住所・氏名・年齢・電話番号 ) は、来店前に記入 をすませておいてください。⑥レジでのお支払いは、店頭価 格プラスその消費税の課税後金額より、券面記載の割引金額 を差し引いた金額となります。 お問い合わせ先 : クーポンクリアリング株式会社 PC クーポン係 〒 108 東京都港区高輪 2-19-13 NS 高報ビル TEL03-5488-1243 使いやすさの秘密 = = 三 = 三 = 円引き 販売価格に課税後、券面の金額を割引致します。 一有効期間 1992 年 12 月 15 日 ~ 1993 年 1 月 31 日 担当印 一気を , まー QUATTRO PRO FOR WINDOWS 1. OJ 世界初、表計算ノートブックを採用した オプジェクト指向の表計算ソフト 複雑なテータをわかりやすく管理します。 一枚のワークシートですべてのデータを管理する、または、いろいろなファイル名を付 けた、たくさんのワークシートを駆使してデータを管理するするという、複雑でミスの 発生しやすいデータ管理から解放されます。 Quattro pro は、 1 ファイル当たり 256 枚の ワークシートのページを持つ表計算ノートブックを採用。ページの見出しに当たる「タ プ」に名前を付けておけば、欲しいデータのある場所をワンタッチで探すことができま いろいろな種類のデータを「直感的」にまとめて扱える表計算ノートブック。表計算ソフ トの新しいスタイルです。 1 表計算ノートブック 2 デマンドメニュー メニューの迷路から開放されます。 QuattroProforWindows の使い勝手のよさの最大の秘訣が、このデマンドメニュー。マウ スの右ボタンをクリックすると、その場所で変更できるカラーや罫線など、特性メ ニューの一覧表が表示されます。しかも、設定がまとめてできるので、何度もメニュー を呼び出して別々に指定しなくて済みます。ワークシートの表だけでなく、グラフ、ダ イアログボックスなどすべてにわたって使用できます。 直感的でわかりやすいだけでなく、効率よく操作できる。メニューを覚えるのでなく、 ソフトウェアが提示してくる。それがデマンドメニューを備えた QuattroProforWindows ならではの特徴です。 災へつづく

7. 月刊 C MAGAZINE 1993年1月号

特集 M 0S メモリ活用蠡 PSP と呼ばれる 256 バイトのエリアを確保 、、 Z クのときは最終メモリプロックを示し ・ SlZe . します。この MCB の PSP セグメントアド メモリプロックのサイズをパラグラフ単 ます。 位 ( 16 バイト ) て、示します。 レスは , プロセス終了時においてメモリ ・ ownerPSP 次に位置する MCB のセグメントアドレス 解放を行うために利用されます。また環 このメモリプロックを使用するオーナー は , 「 MCB セグメントアドレス十 size 十 1 」て、 プロセス PSP (Program Segment Prefix) 境変数のメモリプロックにおいて , どの 求めることがて、きます (Fig. 3 ) 。 プロセスの環境変数かを判断するのに使 の先頭セグメントが設定されます。プロ MCB は 16 バイトの大きさて、すが , DOS3 セスが起動するとき DOS は実行に必要な われます。 例 : zmap cuexo 具体的な表示を理解していただくために A>zmap く option>@ 例をいくっか紹介しますのて , 参考にし オプション指定に / は必要あ 表示 てください りません。また連続して指定て、きます。 実行例 1 (Fig. B) オプションスイッチー覧を TabIe A に示 環境は Fig. A のとおりて、す。 表示シンポルは Table B のとおりてす。 します。 Table B 表示シンボル Conventional memo & UMB & HMA memo XMS 項目 XMS ドライバの内部リビジョン Driver internal revi メモリプロックの開始アドレスをセグメント単位で Addr 30n 表示 H MA の使用オーナー名 HMA used FFFFh : 0012h の内容を表示してし、砌みで , 設定さ メモリプロックのオーナーセグメント PSP 1 010 : 0000 の表示のときはメモリプロックの開始 れていない場合は表示しないか , 無意味な文字列を表 オフセット 1645 ー A000 の表示のときはメモリプロックの終了 A20Line の状態 A20 line . ON アドレス 以下の表示は XMS ドライバが XMZ のときのみ表示される。 XMZ の拡張 A 円 メモリプロックのサイズをバイト単位で表示 Size にはこのような情報を取得する機能が存在する owner/pa 「 amete 「 オーナー名 / コマンドラインのノヾラメータ HMA 取得時にアプリケーションが要求した HMA サ HMA Use size テパイスドライバのとき , テパイス名を表示 device イズを表示 プロックテパイスの際は , テノヾイスドライバが HMA 最低使用要求サイズ HMA Min size 扱うドライフ数を 1 文字目に表示 EMB の最大八ンドル数 EMB Max handles プログラムかフックする割り込みナンバ Hooked vector 項目 EMB ハンドル Handle フリーエリア く free> EMB プロックの開始アドレス PARA 単位 (1 6 バイト ) Base config. sys が使用するメモリプロック く config> E M B プロックのロックカウント数 Loc ks く shell> command.com EMB プロックのサイズ K バイト単位 Size 環境変数工リア <env. > u sed/free EMB プロックの使用状態 ニ x( + y) く buffers> BUFFERS フリー EMB プロックの最大サイズ K バイト単位 Max free block size x このメモリプロックを占める BUFFER 数 (XMZC なくても表示 ) DOS3 では十 y その他の BUFFER 数 フリー EMB の総サイズ K バイト単位 TOtal free size DOS5 では y は , 未使用の BUFFERS 数 (XMZC なくても表示 ) く files> FILES EMB の総サイズ K バイト単位 EMB TOtal size x このメモリプロックを占める日 LES 数 十 y その他の日 LES 数 CON 日 G. SYS 内のみ表示 VCPI FCBS く fcbs> VC 円の管理する最終アドレス PhysicaI max x 同時にオープンできる FCB 数 address y x 以上の FCB をオープンしようとしたとき , フリー VC 日メモリサイズ , ページ ( 1 ページ : 4K バイ Free VCPI memory クローズしてはならないファイル数 ト ) LASTDRIVE く lastdn.' > CRO レジスタの内容 X . CRO (CPU Register x 最終割り付け可能ドライプ名 0 ) STACKS く stacks> テパッグレジスタの内容 Debug register x スタック数 論理ページと物理ページの対応 Logical paging y 各スタックのサイズバイト 異なるアドレスが割り当てられているべージには Add ress キャラクタテパイス く characte 「一 * が先頭につく device> BANK プロックテパイス <block-device> 存在するバンク番号 I/O Bank No. EMS バンク数と総サイズ K バイト単位 Total Bank Number EMS の存在する開始セグメント Page F 「 ame マッピングされている物理ページ数とセグメントア BMS Mappable pages ドレス 項目 項目 BMS プロック八ンドル Handle EMM 八ンドル Handle BMS プロックのバンク数 Banks 使用ページ数 Pages BMS プロックサイズ K バイト単位 Size 使用ページの合計サイズ K バイト単位 Size EMMJ\ ン・ル フリ—BMS バンク数とサイズ K バイト単位 Name Unallocated Bank EMS メモーフ丿ーベーシサイ K ノ BMS 総バンク数とサイズ K バイト単位 Total Bank Number EMS メモー、ページとサズ KJX Total 特集 MS-DOS メモリ活用技法 53

8. 月刊 C MAGAZINE 1993年1月号

て横方向の拡大倍数分だけオリジナルの 1 ド ットの処理を繰り返します。そして , if (k & ptnmask) { dOtptn [n] mask > > = 1 , て、設定用マスクを 1 ビット右シフトし , if (mask mask 0X80 ; n 十十 ; 漢字の表示 ( 1 文字分 漢字を画面に拡大表示する関数 kanjiprin t を作成します。パラメータは , て、表示パターン格納バッフアへドットパタ int x, y ; ・・・表示位置 ( 左上座標 ) 指定 ーン設定用マスク情報を 1 ビット登録しま unsigned COde す。 表示する漢字コード ( 』 S コード ) Table 2 グラフィック凵 0 のコマンド int tate, YOkO ・ ミコマンドの説明 をベクタ ・コマンド ・縦方向 , 横方向それぞれの拡大率 AO グラフィック LIO の初期化を行う int co に・・・表示色の指定 #INIT 1 AI グラフィック画面のモード設定を行う 2 #SCREEN の 6 個としました。 A2 描画領域を指定する 3 # Ⅵ EW 最初に漢字コードからレヾイト文字か 2 バ A3 背景色を指定する 4 #COLORI イト文字かを判断し , 格納バッフアの大き ノヾレットレジスタを設定する 5 #COLOR2 さを確認します。次に拡大率から文字の右 A4 A5 描画領域を背景色で塗りつぶす 6 #CLS 下位置を計算し画面に表示しきれるかどう 7 #PSET A6 点を打つ かのチェックを行います。表示しきれない A7 直線・矩形を描く 8 #LINE 場合には , 何もせずに、、一 1 〃をエラーコー A8 円・楕円を描く 9 #C 旧 CLE ドとして戻して終了します。 A9 指定領域を指定色で塗りつぶす 1 0 #PAINTI パラメータチェックの次に , 指定された AA 指定タイルノヾターンで塗りつぶす #PAlNT2 コードの文字フォントパターンを取得しま AB 指定領域の描画情報の取得 1 2 #GET す。文字パターンの格納バッフアには , Fi 1 3 #PUTI # GET の逆操作 AC g. 2 のように 1 バイト文字 ( ANK ) は 16 バイ AD 漢字を指定領域に描く 14 #PUT2 ト , 2 バイト文字 ( 漢字 ) は 32 バイトを使用し 1 5 #ROLL AE 描画画面を上下左右にスクロールする てパターンデータが格納されます。 AF 指定座標のノヾレット番号の取得 縦方向の拡大表示は , 1 ライン分のデータ 1 6 #POINT CE 指定領域のドット状態をコピーする 1 7 #COPY を何ライン繰り返して表示するかて、実現て、 きます。横方向の拡大表示は , ドットパタ ーンの 1 ドットずつを複数ドットに展開しな ければなりません。ビット演算を多用して いるのて、 , この部分だけ詳細に解説します。 使用しているビットマスク用変数は , ptn mask ( 文字データ ( 拡大前 ) のドットパター ン検出用 ) と mask( 格納データ ( 拡大後 ) のド ットパターン設定用 ) のふたって、す。まず , for (ptnmask 0x80 ; ptnmask > 0 ; ptnmask > > = 1 ) { て文字ノヾターンにかぶせるノヾターンマスク を順々に作成します。このマスクて、 1 ドット ずっ取り出すわけて、す。次に for (i YOkO ・ 144 C MAGAZINE 1993 1 ー = mask , Fig. 1 テキスト CRT 引 OS のバラメータ設定 【割り込みコード】 INT 18H 【コマンドコード】 AH ← 14H 【ノヾラメータ】 BX ←フォントノヾターンバッフアの先頭アドレス ( セグメント ) CX ←フォントノヾターンバッフアの先頭アドレス ( オフセット ) DX ←文字コード 漢字の場合 : 』 S コードで指定 ANK の場合 : DL=ASCII コード ,DH=80H

9. 月刊 C MAGAZINE 1993年1月号

CPAD / トジョンアップ 情報 ワンポイント カクラミング CPAD 25 り犬プ 0 マスクがアンダーフローして 0 になったら , 換を行っています。 さて , メイン関数て、はこれらの関数を使 マスクを初期化して次の格納バッファ位置 用して文字を表示しています。サンプルプ を示すように変数を変更します。 ログラムのため , 単純に画面の消去 , LIO の 以上て、横方向に拡大したビットパター ン 初期化 , 画面モードの設定などを行ったの がバッファ dotptn [ ] に編集されます。 ち 7 色て、いろいろな拡大率の文字列「あいう こて、注意するのは , 2 バイト文字の場合には えお」を書き込んて、います。 オリジナルバターン 2 バイトて、 1 ラインに編 getch ( ) て、一時停止させて , 画面のスクロ 集しなければいけないということて、す。正 常に 1 文字表示し終わると正常終了コード 0 ールを行っています。スクロールはファン クション AEH ( 1 画面全体を上下左右に n ド を返します。 ット移動 ) を利用しているため , 画面の途中 だけをスクロールすることはて、きず 1 画面全 漢字の表示 体のスクロールとなります。 プログラムて、は 1 行分 ( 16 ライン ) 上方向に スクロールし , 次に下方向に 1 行スクロール 関数 kanjiprint を利用して文字列表示関 後消した文字列を色を変えて表示していま 数 gprintxy ( ) を作成します。パラメータは kanjiprint に準拠し , す。 ・表示位置 ( 左上座標 ) 指定 int x, y 表示する文字列 char *str ; 最後に int tate, Y0k0 ・ ・縦方向 , 横方向それぞれの拡大率 ・表示色の指定 今回はアプリケーションプログラムまて、 int co に この関数て、は , パラメータて、 は作成て、きずに使えそうな関数の作成にと としました。 与えられた文字列を 1 文字ずつシフト JIS コ どまってしまいましたが , グラフィック画 面にいろいろなものが書ける環境がて、きた ードから JIS コードへと変換し , 表示位置を のて、 , 次はほんのちょっと凝ったプログラ 再計算しながら表示させます。 ムを作る予定て、す。 また , 関数 gprint( ) て、は表示位置を xy 座 標て、はなく行列て、指定て、きるように座標変 Fig. 2 文字ノヾターンの格納バッファ VERSION 旧バづン登録ユーサ の方に限り、 / トうン ンプ専用あ申し込み 書を全員にこ送付 します。 高品質のドキュメンテーションを簡単に実現する。 新世代のプロジェクト指向プログラムヘルバーです。 C PAD はこれまて C 言語による開発てソフトハウ スが悩んていた、開発時の工数短縮及び複数人数 によるプロジェクト管理を容易に致します。また、 既存のソースリストの仕様書を自動作成しますの て、管理体制を容易に画一化するこどが可能どなり、 また、プログ・ラマーの余分な負担を軽減する事か てきます。 98 シリーズ対応版・¥ 98 0 ( 消費税別 ) ① C 言語ソースのゴント管理を自動化、一律化する。 ②カーニ八ン & リッチーの書式にソースをリフォー ③ PAD 仕様に準する出力機能。 ( 自動出力印刷例参照 ) ④全ドキュメントはエテイタで編集可能。 ⑤豊富な出力機能。 ( 自動出力印刷例参照 ) ・バージョンアップのポイント ・操作性重視の統合環境強化 ・テクニカルマニュアル添付によるハイレベルユーザへの技術支援 : : ・対応プリンターを増やし主にレーザプリンタによる高速、高品位出力を実現三 ・ドキュメントとストリーをソース中に自動書式化インクリ三 メントするオートドキュメントヒストラー登載 ・他機種順次対応予定 ( 詳しくはインフォメーションセンダ ーまでお問い合わせ下さい ) ソフトウェアインフォメーションセンター ( 技術的なこ質問・こ相談にお電話でお答えしま魂 ) TEL0878-51-18 ロ 7 受付時間 10 : 00 ~ 解 5 : 凹月曜一金曜 ( 祝日除く ) の一オオッカ商事 / ー、本社 : 〒 760 高松市西内町 3 ー 15 く資 * 青求番号 145 〉 ワンポイントプログラミング講座 145 5 大機能 C ソースの解祈、援助、学習ツールとして 2 バイト文字 0 2 1 ノイト 0 1 1 第 1 ライン 第 2 ライン 3 30 第 16 ライン 1 5

10. 月刊 C MAGAZINE 1993年1月号

クラフィック LIO を使う一 ワンポイント カグラミング 今回は , グラフィック凵 O ・ CRTBIOS を使って CRT 画面に文字を拡大して表示します。 第回 ます。 これらは , ソフトウェア割り込みに Table 1 路語について はしめに 意味 路語 Graphic DispIay Cont 「 0 厄「 GDC 最近は直線や円と描画するのも非常に簡 CRT Cont 「 0 厄「 CRTC 単て、 , C コンパイラて、も標準て、関数やライプ ラリがついてきます。そのほかサードノ Character Generator CG テイからも使いやすいツール類が発売され Logicallnput Output 凵 0 ているのて、 , いまさらという感じもします より簡単に呼び出すことがて、きます。 が , 今回はグラフィック LIO と CRT BIOS グラフィック LIO のコマンドを Table 2 に を使ったグラフィック関数をいくつか作成 示します。今回はこの中て、網掛けをした 6 個 します。 のコマンドを使用しました。各コマンドの ただ直線を引く関数を作ってもおもしろ くないのて、 , グラフィック画面に文字を書 パラメータについては省略しますが , プロ いてみました。 CG から読み出したフォント グラムリストにコメントをたくさん入れて おいたのて、そちらを参照してください を書き込むわけて、すが , ただ書くだけのも のは LIO ファンクションにすて、にあるのて拡 大表示て、きるものを作成しました。 漢字ノヾターンの取得 ラフィック凵 O について 漢字をグラフィック画面に表示するため に , まずフォントパターンを読み出します。 PC ー 9801 には , グラフィック表示のための これにはテキスト CRT BIOS のコマンドを 処理を行う専用の LSI(GDC, CRTC, CG な 利用します。パラメータの設定は Fig. 1 のよ ど。 TabIe 1 をご覧ください ) があります。 うに行います。 このハードウェアによって複雑な画面表示 こて文字コードの指定は JIS コードなの てすが , 通常文字列として扱っている漢字 を行うわけてすが , これらを制御するなめ に CRT BIOS および , グラフィック LIO と はシフト JIS コードてあるため , これらの変 いう内部ルーチンが ROM 内に用意されてい 換が必要となります。 ワンポイントプログラミング講座 143