command - みる会図書館


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

1. 月刊 C MAGAZINE 1991年10月号

コンバイル こて、は , MS-DOS 版関数 , UNIX 版関 数それぞれのコンパイル方法を説明する。 MS - DOS 版関数のコンバイル 本関数は , Turbo C Ver. 2.0 および MS -C Ver. 5.1 て、コンパイル可能なものて、あ パイルしてライプラリに格納し , 最後にリ ンパイルする場合には , 各関数を分割コン プログラム用のものて、ない汎用の関数をコ いが , 「 C の道具箱」のように必ずしも特定の 造がはっきりしている場合には利用しやす うのは , make はあらかじめプログラムの構 に登録するという方法を用いている。とい 用して分割コンパイルを行い , ライプラリ 方法もあるが , 筆者はバッチファイルを使 コンパイルについては , make を使用する ンクするほうが簡単だからだ。 各関数の実際のコンパイルは以下のように 複数のファイルを一度にコンパイルてきる。 後 , 次の行に処理を戻す機能があるのて , command / c はバッチファイルを起動した cboxcs2 tcl する。そして以下のように起動すればよい at や mcl. bat のようなバッチファイルに記述 イル方法については , 以下て、解説する tcl. b だけを記述したものてある。実際のコンパ このファイルは , 基本的にはファイル名 起動する方法を取っている。 List 1 のようにバッチファイルを二重三重に 度にコンパイルする場合などは , 筆者は , は効率が悪い。とくに多くのファイルを一 るが , いちいち各ファイル名を書き込んて ところて、そのバッチファイルの内容て、あ 出し関係を常に意識している必要もない るし , プログラム全体の中て、の関数の呼び すれば , そのような手間を省くことがて、き 要が生ずるが , ライプラリファイルを使用 作成するごとに make ファイルを修正する必 make を使用する場合には , 新しい関数を cboxcs2. bat List 1 goto start 1 Tu rbo C 行えばよい command/c % 1 command/c command/c % 1 command/c : 3 0 . 1 2 command/c command/c command/c command/c command/c command/c command/c command/c command/c command/c : 9 0 . 1 1 command/c % 1 command/c command/c command/c % 1 command/c : 9 0 . 9 command/c command/c command/c command/c % 1 lllld command/c % 1 command/c command/c command/c : 9 0 . 8 : start command/c % 1 scrol 1 % 1 command/c % 1 wats eta 1 command/c % 1 wat troff command/c % 1 wattrset command/c % 1 kattrset % 1 % 1 % 1 % 1 % 1 % 1 % 1 % 1 % 1 % 1 command/c % 1 mvwprint % 1 command/c % 1 delwin % 1 command/c % 1 spctoru command/c % 1 outform command/c % 1 m id torup % 1 command/c % 1 keyget2 command/c % 1 chgvatr % 1 command/c % 1 textkei3 command/c % 1 mypoke command/c % 1 mypeek % 1 % 1 % 1 command/c % 1 realkey command/c % 1 printv % 1 command/c % 1 chgfnc3 command/c % 1 selbar % 1 chg fnc70 wclear wat tron mVW 1 n wsavemem wsave 1 nm wres tore wsave wrefresh werase subwin myerror touppers tolowers midins 1 ocatec superin2 vramwr vramrd S cand i r inkey 1 swap % 1 dispkei2 menurd コンパイルするのてはなく , TCC を使用す れておく必要がある。また統合環境の中て onfig. h として List 2 の内容のファイルを入 トリ下の INCLUDE ディレクトリの中に , c とともに , Turbo C コンパイラのディレク ンパイルスイッチを以下のように設定する Turbo C て、コンパイルする場合には , コ 応用 C 言語 C の道具箱 -K -J -w -ml -c wyokosel tlsubwin tlwfresh wyokosel barscrol keybfc 1 keymatch sclwidck watchgll clockon clockoff de 1 ayy inkey98 timedate getdver scandir2 selbarms realkey2 bkdraw2 inpdraw2 lnpmenu iplus keidraw2 keydraw2 locate2 menurd2 seldraw2 pr i ntvs superin3 selbar2 windraw2 addargme addiparg addopt funcrun funcrun2 inkey2 keyret2 se 1 bar3 selwin selwin2 se targs winkind windraw2 wyokose2 5 :END goto END command/c % 1 command/c command/c % 1 command/c % 1 command/c % 1 command/c command/c % 1 command/c % 1 command/c % 1 command/c % 1 command/c command/c % 1 command/c % 1 command/c % 1 : 9 1 . 9 command/c command/c % 1 command/c command/c % 1 command/c % 1 command/c % 1 command/c % 1 command/c % 1 command/c % 1 command/c % 1 command/c command/c % 1 command/c % 1 command/c % 1 command/c % 1 command/c command/c % 1 command/c % 1 command/c % 1 command/c % 1 command/c % 1 command/c % 1 : 9 1 . 6 command/c % 1 command/c % 1 command/c command/c % 1 command/c % 1 command/c % 1 command/c % 1 command/c % 1 command/c tCC ー V List 1 % 1 % 1 % 1 % 1 % 1 % 1 % 1 % 1 % 1 ファイルをあらかじめ作っておくと便利て イル用にはそれぞれ以下て説明するバッチ main 関数 , main 関数以外の関数のコンパ イルのみ行う ) ジメモリモード / リンクは行わずコンパ r にする / 漢字を使用する / 警告あり / ラー ( デバッガを使用 /char を unsigned cha ある。 応用 C 言語 117

2. 月刊 C MAGAZINE 1991年10月号

プログフノク入門 C プログラマ のための 島 中 既存ユーティリティの活用 第 13 回 ユーティリテイプログラム ( 以下ユーティリティ ) を 使いこなすことは , コンピュータで仕事をするとき に強力な武器となる。しかし既存のユーティリティ を使っていると少し不自由を感しることもある。今 回は既存のユーティリティをいかに自分の仕様にロ わせるかというひとつの指針を示す。 思想は私が慣れていたものと異なるため , たとえはどんな例かあるか はじめに 使いづらい面もあります。そこて、 , 自分に あった形て、 LHA を起動て、きるプログラムを MS-DOS 上にはさまざまなユーティリテ 思いっく例をいくつかあげてみましよう。 作成するということが考えられます。私は ①既存のユーティリティを使いやすくする ィがあります。 MS-DOS に付属しているも 所有していませんが , すて、にそういうユー のを始めとして , フリーソフトウェアや自 ティリティが作成されているようて、す。 たとえば , 本誌て、もおなじみの LHA は機 作のユーティリティなど皆さんも活用され ② FC. EXE の差分情報の活用 能が豊富て、ヘルプを見ただけて、は使い方が ソフトウェアのバージョンアップに FC. E ているものと思います。しかし , 既存のユ わからなかったり , 簡単に使えなかったり XE の差分情報だけを渡して , 差分情報と旧 ーティリティて、はもうひとつ機能が足りな します。 LHA をときどき使用させてもらっ バージョンから新バーションを作成するユ いとか , この機能を直したいとかいうこと ていますが , LHA のオプションスイッチの をときおり感じます。ソースが公開されて Fig. 1 アスキーダンプの修正 いれば自分て、直してしまえばよいのて、すが , 市販ソフトなどのようにソースが公開され . COMMAND. COM を口 00000A70 OA 43 4F 4D 4D 41 4E 44 ー 2E 43 4F 4D 82 FO 83 8D ていないものて、は直しようがありません。 00000A80 ードできません。 81 5B 83 68 82 C5 82 AB-82 DC 82 B9 82 FI 2E 20 00000A90 リセットしてくだ 83 8A 83 5A 83 62 83 67-82 B5 82 C4 82 AD 82 BE しかし , ソースが公開されていなくても さい . $.. COMMAND. 00 圓 OAAO 82 B3 82 A2 2E 24 OD OA ー 43 4F 4D 4D 41 4E 44 2E 出力されたファイルを加工するなどの工夫 を行うことにより , 使いやすくすることも 可能て、す。今回は足りない機能を追加した り , 出力を加工したりする方法て、既存のユ ーティリティを活用する方法の一例を紹介 します。 ↓ ロ . だ をんく g せて 0 きト 皿でツ $ g ドセい . 一リさ 8 りん . 8 つん 8 . 0 1 よ りなっ 0 っ朝 . 8 8 8 . ・つなつ . ・ 8 8 . りムつな . ・ 8 8 . ・ CD 0 ・りムっ 0 . 8 8 0 ・戸しれ 0 つ ・ 8 8 ワ . 8 つな ・れ 0 LO ・ 00 00 ワ ・ 8 8 8 ・ LD 8 ・ 14 れ 0 り 0 0 8 8 8 90 C MAGAZINE 1991 10

3. 月刊 C MAGAZINE 1991年10月号

List 1 47 : 48 : 49 : 50 : 51 : 52 : 53 : 54 : 55 : 56 : 57 : 58 : 59 : 60 : 61 : 62 : 63 : 64 : 65 : 66 : 68 : 69 : 72 : 74 : 75 : 77 : 78 : 80 : 81 : 82 : 83 : 84 : 86 : 88 : 90 : 91 : 92 : 95 : 96 : 98 : 99 : 100 : 101 : 102 : } Fig. 2 レ 94 : { 具合を解消する愛用のユーティリティを紹 などがあげられます。そこて、 , これらの不 る ・日付とサイズを考慮せずに必ず比較す タのタグジャンプが使用できない ・アスキーファイルの差分情報でエディ ・ワイルドカードが使用できない っています。たとえば , 用されていますが , 結構使いづらい面を持 前述のように FC コマンドはいろいろと活 FC ドライ JX(FD) 7 正してください 可能性があります。そのときはソースを修 のフォーマット以外て、は正常に動作しない フォーマットにはいろいろあるため , Fig. 1 S 3.3B て、行っています。 DUMP コマンドの い。動作確認は PC ー 9801 シリーズ , MS-DO コンパイルは Fig. 2 のように行ってくださ dump2bin のコンノヾイル st 1 (dump2bin. c) を参照してください 説明は省略させていただきます。詳細は Li 短いプログラムて、すから , プログラムの す。 て、は COMMAND.COM を小文字にしていま 応するアスキーダンプを採用します。 Fig. 1 す。変換時に BIN ダンプが .. のときは対 イルを省略した場合 , 拡張子を . BIN にしま ァイル ( く binfile > ) に変換します。 BIN ファ while ( fgets( dmpbuf, BUFSIZ' fpdmp ) ! = NULL ) { char *pdmp, *pasc, binbufC DUMPCNT + 1 ] ; int n; if ( !isxdigit( dmpbufC 0 ] ) Ⅱ !isxdigit( dmpbuf[ 2 ] ) Ⅱ ! isxdigit( dmpbuf[ 1 ] ) ! isxdigit( dmpbuf[ 3 ] ) ) if ( pdmpC 0 ] ニ & & pdmpC 1 ] = int dat ; for ( n = 0 : n く DUMPCNT; n + + , pdmp + = 3 ) { pasc = pdmp + 3 * DUMPCNT + 2 ; / * ASCII タ。ンフ。・アドレス + + pdmp ; while ( isspace( *pdmp ) ) + + pdmp ; while ( isxdigit( *pdmp ) ) pdmp ニ dmpbuf ; con t i nue ; fputs( ” DUMP テ・一タが異常です。 *n" stderr ) ; else if ( ( dat = tobin( pdmp ) ) く 0 ) { da t / * ASCII タ・ンフ。から取得 * / = pascC n ] ; if ( pdmpC 0 ] ー & & pdmpC 1 ] = + + pdmp; / * まん中を見やすくしているハ・一シ・ヨンに対応 * / while ( isspace( pdmpC 0 ] ) Ⅱ pdmpC 0 ] = if ( n ニ 8 & & !isxdigit( pdmp[ 0 ] ) ) { break; / * 変換テ・一タ終了 ( タ・ンフ。ファイルの最後の行 ) * / fputs( dmpbuf, stderr ) : return( 1 ) ; binbufC n ] ニ ( char )dat; if ( fwrite( binbuf, n, 1 , fpbin ) ! = 1 ) ( fputs(- ” DUMP テ・一タの書込み工ラーです。” stderr ) ; return( 1 ) ; 89 : #define t00fh( ch ) fclose( fpdmp ) ; fclose( fpbin ) ; return( 0 ) ; ' A' + 1 の ' F' → 0X00 ~ 0x0f * / 93 : int tobin( char dmpdatC] ) / * dmpdatC 0 ] , d 叩 datC 1 ] → 16 進 Bin. * / int chl, ch2; chl = dmpdatC 0 ] : ch2 ニ dmpdatC 1 ] ; if ( !isxdigit( chl ) Ⅱ !isxdigit( ch2 ) ) return( ー 1 ) ; return( ( t00fh( chl ) * 0X10 + t00fh( ch2 ) ) & Oxff ) ; 介します。 検索します ( 現バージョンて、は path2 にはワ 可能て、拡張子を指定しない場合 pathl. * を ッチて、す。 pathl にはワイルドカードが使用 表示て、 / t はタブをスペースに変換しないスイ して FC コマンドを起動します。 / n は行番号の アスキー比較時はスイッチ / n と / t を必ず指定 チて、 ( 6 ) 以降は FC コマンドのスイッチて、す。 ます。 ( 1 ) ~ ( 5 ) は FC コマンドにないスイツ FC ドライバ ( FD ) の使用法を Fig. 3 に示し FC ドライノヾ ( FD ) の使用法 dump2bin のコンノヾイル lcc dump2bin. c -k/st : 0X2800 / cp : 0X1000 ③ LSI C ー 86 Ve 「 .3.20 tcc -w dump2bin. c ② Tu 「 bo C Ve 「 sion 2.0 / Turbo C 十十 Ve 「 sion 1 ℃ cl /J /W3 /Zpl dump2bin. c /link slibcr 十 libh /st : 0X2800 / cp : 0X1000 cl /J /W3 /Zp dump2bin. c /link /st : 0X2800 / cp : 0X1000 ① Microsoft C CompiIer Version 5.10 / 6 ℃ OA 92 C MAGAZINE 1991 10

4. 月刊 C MAGAZINE 1991年10月号

L 」を機能強化して発売した。 同ソフトは WATCOM 社の製品から機種 依存部分を取り去り , 独自のユーザインタ フェイスとエデイタを付加したもの。 COB OL の標準規格 (JIS X3002 ー 1980 / ANSI X3. 23 ー 1974 / ISO 1989 ー 1978 ) に準拠し , COBO L 機能単位のうち , 中核 , 表操作 , 順ファイ ル , 相対ファイル , 索引ファイルのレベル 1 のすべてと , レベル 2 の主要部分の機能を サポートしている。おもな特徴は以下のと おり。 ・約 60 のサンプルプログラムが付属 ・漢字 ( 2 バイト文字 ) をサポートし , 文字列 としてだけてはなく , データ名 , 手続き 名への使用も可能 ・インタブリタに対話式デバッガを内蔵 き換えて使用することも可能。おもな特徴 は以下のとおり。 ・ POSIX 標準規格に準拠 ・簡易プログラム言語 AWK ( nawk 準拠 ) 付 属 ・ラインエデイタ ed, ex, スクリーンエデ C MAGA 1 , 300 , 000 円 1 , 420 , 000 円 ・必要メモリ く価格 > 問い合わせ先 640K ノヾイト 7 , 800 円 ( 株 ) ソフトビジョン イタⅵ付属 く動作環境 > ・対応機種 ・対応 OS ・必要メモリ く価格 > 問い合わせ先 PC ー 9801 シリーズ (PC-98X A, LT を除く ) IBM-PC/XT/AT NEC MS-DOS Ver. 3.1 以上 I BM PC-DOS Ver. 3 以上 640K バイト以上 68 , 000 円 パーソナルメディア ( 株 ) く動作環境 > ・対応機種 ・対応 OS ・必要メモリ く価格 > 問い合わせ先 PC ー 9801 シリーズ J ー 3100 シリーズ FMR シリーズ MS-DOS Ver. 3.1 以上 640K バイト以上 58 , 000 円 ( 株 ) LIFEBOAT 〒 141 東京都品川区西五反田 1 ー 23 ー 9 協和五反田ビル 6F TEL 03 ( 3490 ) 8841 丿し、 0 く動作環境 > の練習も可能 ・キータッチ練習だけてなく入力スヒ。ード の練習が可能 ・日本語変換システムによるローマ字入力 ・不得意な指をグラフにより確認可能 ・指定した指ごとに練習が可能 とおり。 が可能となっている。製品の特徴は以下の てはなく , ューザが練習方法を決めること ように決められた課題に従って練習するの 同ソフトは従来のキー入力練習ソフトの ト「 TYPE RUNNER 」を発した ( 株 ) ソフトビジョンはキー入力練習ソフ ( 株 ) ソフトビジョン 「 TYPE RLJNNER 」 〒 323 栃木県小山市駅南町 3 ー 10 ー 11 TEL 0285 ( 28 ) 3640 「 PROICE/ 凵 NK TLJ-V53 」 岩崎技研工業 ( 株 ) 岩崎技研工業 ( 株 ) は NEC の 16 ビット MP U 「 V53 ( 4PD70236 ) 」に対応したインサーキ ットエミュレータ「 PROICE/LINK TU-V 53 」を発売した。おもな特徴は以下のとお く TU-V53 > ・ 16MHz の高速対応工ミュレータ ・拡張アドレスモードをサポートし , 最大 16M バイトのメモリ空間が使用可能 ・ 256K バイトのノーウェイトエミュレーシ ョンメモリ搭載 ・ 132PIN PGA, 120PIN QFP の 2 種類のパ ッケージを用意 く PROICE/LINK> ・ターゲット MPU ュニットの交換のみて , 複数の MPU に対応可能 ・ GP-IB, LAN インタフェイスをオプショ ン装備 TU-V53 を使用するには , PROICE/LIN K 本体 , I/F カード ( PC981F ー 03 ) , 及び高級 言語対応デバッガ ( iDEB Ⅲー V53 ) が必要と 〒 101 東京都千代田区神田錦町 3 ー 6 TEL 03 ( 3293 ) 4711 「 MKS ツールキット」 バーソナルメティア ( 株 ) パーソナルメディア ( 株 ) は MS-DOS 上て UNIX 環境を再現するためのツール集「 MK S ツールキット」を発した ノし、 0 同ソフトは UNIX 環境を再現するためにシ ェル (KornShelI) を中心として , 140 近いコ マンドを収めたツール集。 MS ー DOS のファ イル名の制限やマルチタスキングが不可能 な点などを除けば , MS-DOS 上 <UNIX 環 境を再現てきる。通常 , 同ソフトの KornS hell は MS-DOS の COMMAND ℃ OM から 起動するが , CONFIG. SYS<SHELL に指 定することにより .COM/AND.COM に置 なる。 く価格 > TU-V53 PROICE/LINK 本体 iDEBIII-V53 PC981F ー 03 PC モデル 41 PC モデル 21 PC モデル 10 950 , 000 円 100 , 000 円 50 , 000 円 980 , 000 円 ・対応機種 ・対応 OS PC ー 9801 シリーズ (PC-98X A , LT , ハイレゾモードを除 MS-DOS Ver. 2.11 以上 間い合わせ先岩崎技研工業 ( 株 ) News Square 171 TEL 075 ( 602 ) 7878 〒 601 ー 13 京都市伏見区下鳥羽平塚町 13 ー 3

5. 月刊 C MAGAZINE 1991年10月号

を表示して終了するだけだが , debug32 て、 デバッガの画面の裏の画面に表示され , 画 c があり , なおかっ lderr が一 g つきて、コンパイ 面の切り換えが行われる。 は , ルされていてデバッグ情報を含んて、いるた ・レジスタの内容 さて , debug32 て、 lderr を実行したときも , めて、ある。 g032 の場合と同様にく Segmentation VioI ・エラーの生じた箇所に対応するソース mov eax, [ebx 十 edx * 4 十 4 ] ation > が生じる。しかし , そのあとの処理 という命令と , それに対応するソース行 が g032 とはまったく違う。 ・エラーの生じた命令の逆アセンプルリ buffer end = line table [line 十 1 ] ; g032 ならば , 単に を見ると , おそらく ebx レジスタが配列 line スト ・エラーの種類 といった有益な情報が得られる。 table , edx レジスタが変数 line に割り当てら ・参照中のアドレス ソースコードが表示されているのは , カ れていると考えられる。 ・例外番号 レントディレクトリにソースファイル lderr. edx=00004e1f ebx=0000000c Fig. 8 旧 e のテパッグ となっている ( このふたつの変数の値が , わ ざわざほかの変数とは別に , 命令のすぐ右 B >gcc ー 0 ー 0 旧 e 「「 -fomit-frame-pointer -g 旧 e 「「 . c に出るのも心憎い ) 。 edx に割り当てられて B>debug32 旧 e g : mf. web いる変数 line が 0x4e1f ( = 19999 ) になってい b : /djgpp/bin/debug32. exe Copyright (C) 1 991 DJ Delorie 16352 十 4096 十 0 : 20448 るのは正しいのて、 , ebx の line table が怪し 256 Kb conventional, 1 1 36 Kb extended ー 1392 Kb total RAM available Reading symbols … 100 % 305 symbols read > > go そこて、実際に 0X0000000C をダンプしてみ file size : 925154 line buffer enlarged tO 28910 lines ると , やはり 0X0000000C にはページが割り 22730 lines line number ニ 20000 当てられていないことがわかる。 line tabl Segmentation Violation referencing address 0X1388C e の設定の誤りが原因て、ある。 eax = 000058C9 ebx : 0000000C ecx=7ffffdOO edx=00004e 1 f esi=OOOe 1 de2 edi : 00403004 ebp = 7 幵幵 d34 U P に PL NZ AC P E N C こまて、わかれば , あとはソースをちょ ds : 0048 es : 0048 fs = 0048 gs=0048 ss : esp : 0048 : 7 幵幵 d24 cs:0040 exception 1 4 (Oxe) occurred, e 「「 0 「 code=O っと見直すだけて、 , buffer end ニ line table [line 十 1 ] : # 1 1 7 : mov eax, [ebx 十 edx * 4 十 4 ] edx ニ 00004e 1 f ebx ニ 0000000C 000013f6 : 8b449304 return(line table) ・ が抜けていた , ということがわかるだろう。 Commands . go く v> g go, stop at く v> continue execution cont C step through cur 「 ent instruction Ste p S まとめ step tO next instruction next n list instructions (takes addr, count) list dump memory (takes addr, count) dump d set breakpoint (takes which, addr) break b b 「 eakpoint status status 以上見てきたように , djgcc 十 g032 のプロ print 「 egisters regs set register/memory set グラミングて、は , 「この点を間違えると大変 display 80387 contents npx なことになるのて、 , 心してかかるべし」とい cls clear screen screen @ change user screen った意味て、注意が必要な点がほとんどない help h,? print help quit quit q リアルモードて、必要だった苦労がなくなっ buffer end = line table [line 十 1 ] , # 1 1 7 : という点が多い。気楽に取り組んて、大 8b449304 mov eax, [ebx 十 edx* 4 十 4 ] 000013f6 丈夫だと思う。 fwrite (line table [line] , sizeof(char), buffer end ー line table [ ⅱ # 1 1 8 . 000013fa : 6818004000 push ー」 ob 十 20 sub eax, [ebx 十 edx * 4 ] 000013 幵 . 2b0493 [ 参考文献 ] OOOO 1402 : 50 push eax 00001403 : 6aO 1 push 0X1 [ebx 十 edx * 4 ] 幵 3493 00001405 : push [ 1 ] John H. Crawford and Patrick P. Ge 00001408 . e895070000 call —fwrite lsinger/ 岩谷宏訳『 80386 プログラミン 0000140d : 83C410 add esp, Ox10 > > d 0000000C グ』 , 工学社 , 1988 年 0X00000000 Segmentation Violation refe 「 encing address Oxc B > 76 C MAGAZINE 1 1 10