• ベストアンサー

command.comの内部動作(エディットバッファ等)と画面表示の問題について

昨日、MS-DOSについて質問させていただいたものです。 私が質問の内容を把握していなかったために皆様に多くの御手数をおかけしましたことをお許し下さい。 昨皆様からのご回答を頂く中で私が聞きたいのはどうやらcommand.comの内部動作(エディットバッファ等)と画面表示上の問題についてということが分かりました。昨日は分かったつもりだったのですが、一晩考えたところ、よく分からない点がありまして出来ればそちらにもご回答いただきたく質問させていただけないでしょうか。どうかよろしくお願いします。質問項目は以下の通りです。 1.command.comは現在入力中の文字列のバッファを   持たないということなのですがなぜ画面表示が出来て、   しかも入力中の文字列を[ENTER]を押せば解析し   実行できるのに、バッファはしていないということになるのですか?   (直前の[ENTER]キーを押されて実行した文字列を    バッファしているということは分かりました。) 2.また、編集するには入力中の文字列バッファを持って、   現在のカーソルの位置を覚えておくという処理が必要ということも   分かったのですが、そうするとDOSKEYと入力することで   そういったバッファ領域やカーソル位置を認識する領域を初めて   確保するということになるのでしょうか?   DOSKEYの内部動作っていうのでしょうか?   出来ればそういったものを詳しく教えていただけないでしょうか。 3.それらと画面表示はまったく別物なのでしょうか? 自分がよく分かっていないので質問が的を得ていないかもしれませんが どの問いに対してでも結構です。どうかご回答のほどよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KojiS
  • ベストアンサー率46% (145/312)
回答No.3

1についてですが、入力バッファが編集用バッファとしての機能を持っていないということです。入力バッファとか編集バッファとかいろいろ書いてしまったのでわかりにくくなったようですね。元々command.comは、CP/Mを拡張して unixの shに近づけて使いやすくしたという頃もあり、また、編集するとなると表示することが面倒(プログラムのメモリ最寄り多く必要になる)なので、そういう拡張はしていません。 2については、DOSKEYは command.comを拡張する常駐ソフトです。編集用のバッファ機能を DOSKEYが提供しているという形になります。キー入力を DOSKEYが受け取り、command.comに渡しているという形になっています。 3についてですが、キー入力と画面表示は別物です。入力した物を画面に表示するということも command.comがしています。 command.comは、DOSという言葉からわかるように、あくまでディスクを操作する(アプリケーションの起動も含めて)ための OSと人の操作をやりとりするための物なので、多くの機能を含める必要性が無く、またメモリも少なくてすむように作られています。

masahiro_chi
質問者

お礼

御回答いただき誠にありがとうございます。 なんだか私の中でも整理がついてきたように思います。 直接command.comに入力するためにバッファされた文字列に対して ←キーを押すことは、バッファされた文字列を後ろから順に 飛び越えていくような作り方はされておらず、そうすること (そのような機能を持たせること)は、本来の目的である 実行サイズを小さく保つという意に反することであり、 DOSKEYは、そのための常駐ソフト(外部にソフトとして持たせることで 本体を軽くするもの)であるということでしょうか? ただ、そうあるときにcommand.comから行われるという画面表示と DOSKEYが行った編集を随時、ディスプレイに表示できるというのは どういうことなのでしょうか? 何度も質問してしまい非常に恐縮で申し訳ないのですが 出来ましたら御回答いただけますようお願いいたします。

その他の回答 (5)

  • marine
  • ベストアンサー率34% (23/66)
回答No.6

#4の補足です。 突然「CP/M」と言う名前が出てビックリされたと思いますが、何故「CP/M」を紹介したかと言うとソースコード(アセンブラ)が公開されているからです。 MS-DOSは商用OSですから、ソースコードを見る事は出来ません。ですから、答えている方も内部動作を推測して答えてるわけです。 command.comの内部動作に興味があり、アセンブラプログラムが分かるのであれば、ソースコードを見た方が早いと思ったからです。

masahiro_chi
質問者

お礼

御回答ありがとうございます。 早速、本屋に行ってみたのですが思うようなものは見当たらず 検索もしてみたのですがちょっと探しかねました。 もし何かご存じでしたら教えていていただけないでしょうか。 宜しくお願いいたします。

  • KojiS
  • ベストアンサー率46% (145/312)
回答No.5

DOSKEYの位置づけとしては、だいたいそう考えても言いと思います。 DOSKEYが常駐すると、command.comへの入力は DOSKEYが行っており、キー入力や入力中画面表示(ユーザーインターフェース)は、すべて DOSKEY上で行われます。そこで入力されて作られた文字列のみが command.comへ渡されるようになっています。ですので、DOSKEY常駐後の編集中はすべて DOSKEY上で行われ、command.comのキー入力や画面表示は行われていないということです。

masahiro_chi
質問者

お礼

なるほど。 御陰様で分かってきました。 本当にありがとうございました。

  • marine
  • ベストアンサー率34% (23/66)
回答No.4

難しく考えないで、単なるcommand.comの仕様と思って下さい。MS-DOSの元になったCP/MのCLIが、そういう仕様だったんです。 CP/Mが作られた頃はCRTディスプレイを使ったPCは存在せず、TTY(いわゆるタイプライタ)で接続するマイコンしかなかったんです。だから矢印キーの概念も無いんです。 詳しい内容が知りたければ、「CP/M」で検索するか、大きな図書館で「CP/M」の本を探して読みなさい。私も本を持っていますが物置の奥です。

masahiro_chi
質問者

お礼

「CP/M」を勉強すればいいのですか? 出てくる言葉全てが新たに聞くものばかりで 何を勉強したらいいのかすら分かりませんでした。 CP/Mという言葉も聞いたことすらありませんでした。 そういったことを教えていただき本当にありがたく思います。 御回答いただきありがとうございました。

  • arika
  • ベストアンサー率9% (18/186)
回答No.2

1,#1の回答に補足です。 前回の回答をみてはいないのですが、バッファはあります。カーソル移動キーに対する割り付けがもともとなかったので、今の仕様になっていると推測します。(ESCシーケンスで拡張して入力するようになってる)ASCIIコードを知っていれば,バックスペースに関してはコードがありますが、カーソル移動に対してはないです。 もともとタイプライタが基本ですので、カーソル移動して修正という概念がなかったのではないかと思います。 2、3、これは#1の回答のままです。もっとしりたければ、DOSのシステムコールを勉強してみてください。

masahiro_chi
質問者

お礼

なるほど、そうなんですか。 私が勉強不足のため、せっかく御答え頂いた内容を 半分も理解し切れていないように思います。 御厚意を無にしないようにDOSのシステムコールを 勉強させて頂こうと思います。 御回答いただきまして、誠にありがとうございました。

  • DrSumire
  • ベストアンサー率39% (264/666)
回答No.1

1、Command.comで実装するべき機能ではないから、仮にそれらの機能を実装するとCommand.comの実行サイズは大きくなっていまい、LowLevelのインターフェースとしては好ましくない。 2、それはコンソール(Keybord、Display)をDOSKEYが横取りをして、コマンド確定後にCommand.comに命令を流しているから。 3、それらはともにCONデバイスを利用しています。

masahiro_chi
質問者

お礼

何を調べたらいいのか少しずつ分かってきました。 さしあたりCONデバイスについて勉強してみます。 御回答していただきまして、誠にありがとうございました。

関連するQ&A

  • command.comとASCIIコードについて

    command.comとASCIIコードについて質問させて下さい。 もし御存じであれば以下について御回答いただけないでしょうか。 例えば、 キーボード上「 あ」・「 い」・「 う」・「 え」・「BS」・「 ←」というキーがあり そしてそれに対応するASCIIコードが それに対応して「a1」・「a2」・「a3」・「a4」・「b1」・「b2」となっていたとします。 その時、「あ・い・う」というコマンドを入れたかった場合に 「え・い・う」と間違えて入力してしまった場合、command.comにはENTERが押された時点で「a4・a2・a3」という命令がされることになるのですか? その後で、「a1・a2・a3」に直したいとき「BS」で戻るというのは「BS」の「b1」というコードが 「a4・a2・a3・b1」と入るわけではなく、直接command.comの入力用バッファが 「a4・a2」となってしまうということになるのでしょうか? それとも、やはり「a4・a2・a3・b1」となっているんだけどディスプレイ上「え・い」となっているということなのでしょうか? それに対して「 ←」キーは異なる動作をするということなのですか? それとも、もともと「b2」というコードはなくて「 ←」と入力されたときは 「BS」と入力されたものと同じ処理をするということになるのでしょうか? 質問の意図が取りにくいかとは思うのですが、是非お答いただけたらと思います。どうか宜しくお願いします。

  • エディットボックスのカーソルが表示されない

    長いこと悩んでいますが、解決出来ないでいます。 お知恵を拝借したいと思います。 VC5.0, SDK, WinXPでの開発を行っています。 今、リストビューで直接書き込みをさせる為に、 リストビューのクリックされた位置にエディットボックスをかぶせて表示させてあたかも直接編集させているように見せています。 実際のエディットボックスの表示や書き込み等はうまく行っているのですが、表示したエディットボックスにSetFocusをしても、カーソルが表示される場合とされない場合が出てきています。 親画面を表示し、最初にリストビューをクリックした時のエディットボックスにはきちんとカーソルが表示されます。 しかし、2度目以降はまったくカーソルが表示されません。 ただ、フォーカスはあたっているのか、文字入力は正しく行われます。 また、エディットボックスでリターンキーを押されたタイミングでエディットボックスを破棄し、リストビューに文字列を反映させているのですが、このリターンキー押下後にエディットボックスを表示させた時はカーソルも表示されます。 エディットボックスの破棄には、上記リターンキーもしくはエディットボックスからフォーカスが無くなった時に行っているので、 この時の破棄のタイミング等の問題でカーソルが出たり出なかったりしているのだろうと色々調べているのですが、どうしても分かりません。 実際エディットボックスにフォーカスが当たっていればカーソルは自動的に出るものだと思っていたのですが、出ないという現象は何に問題があるのでしょうか? エディットボックス有効処理 Show( SW_SHOW ); BringWindowToTop( hwnd ); SetFocus( hwnd ); エディットボックス破棄(無効)処理 Show( SW_HIDE ); アドバイスを宜しくお願い致します。

  • command.com上でのcmdの呼び出し

    質問です。 WindowsのDOS窓は基本的にwin上で走るエミュレータだと聞いたのですが、16bitエミュレータのcommand.com上でcmd.exeが呼び出せるのは、どういう仕組みになっているのでしょうか。 ただ、16bitエミュレータ上で32bitのエミュレータを起動したと考えれば良いとは思うのですが、心なしかcommand.com単体のときよりもcommand.com上で呼び出したcmd.exeのほうが、キー入力のエコーバックも早い用に感じます。 ネットで調べてみると、呼び出すたびに切り替えているのではという意見もありましたが、XP上で開いたcommand.comからcmd.exeを呼び出した状態でNASMでアセンブルした16bitのcomファイルが実行できるので、ただ切り替えているだけではないのではないかと疑問が消えません。 また、スタートメニューでファイル名を指定して実行するときに、16bitのcomファイルを指定すると、基本的にはcmdが立ち上がって実行され、プロンプト以外画面には何も表示されないで実行終了となるのですが、2割ほどの確率でcommand.comが立ち上がり、きちんと実行されることがあり余計に混乱しています。 どなたか詳しい方がいらっしゃったら、ご解説を宜しく御願い致します。

  • [IE7]文字が表示されない。画面が真っ白。

    WindowsXPで「インターネットエクスプローラー7」を使用しています。 ネットで検索するときに、キーワードを入力しようすると、毎回ではないのですが、元の位置でカーソルが点滅したままで、タッチした文字が入力されないときが時々あります。 [CTRL+N]で新しい画面をもう1つ作り、改めて、入力すると、通常通り、うまく入力・表示がされます。 それから、これも毎回ではないのですが、時々、あるサイトに移動するときに画面が表示されず、真っ白になって表示されます。でも、そのくせ左下には「ページが表示されました」と出ているのです。 一応、[更新]ボタンを押せば、そのページの内容は表示されるようになるのですが、しばしばこういうことがあるので、面倒を感じております。 どなたか、よきアドバイスをよろしくお願い致します。

  • 編集機能を持つテキストエディタの作成を!!!

    この四つの作成プログラムをを教えて下さい。'i'が入力されるとカーソルの位置に指定した文字列を挿入する。'd'が入力されるとカーソルの位置から指定された文字数だけ削除する。'c'が入力されるとカーソルの位置から指定された文字数だけカーソルを移動する。'q'が入力されると内容をファイルにセーブして編集を終了する。ただし、編集対象は一行文の文字列とし、カーソルは'*'で表示する。誰か私を助けて下さいサッパリわかりません。

  • Word 2010で入力文字がなぜモニタの左上隅?

    Windows 7 Ultimate 64 、Word 2010、Microsoft Office IME 2010を使っています。 文字入力の過程はふつうは次の(1)のようです。 (1) (a)文字を入力したい位置にカーソルを置く。 (b)Word 2010でキーボードから仮名を入力すると、(a)のカーソル位置にその仮名が表示される。 (c)変換キーを押すと(a)のカーソル位置で漢字に変換される。 (d)Enterキーを押すと(a)のカーソル位置で確定する。 でも、ときどき、次の(2)のようになります。 (2) (a)文字を入力したい位置にカーソルを置く。 (b)Word 2010でキーボードから仮名を入力すると、モニタの左上隅にその仮名が表示される。 (c)変換キーを押すとモニタの左上隅で漢字に変換される。 (d)Enterキーを押すと(a)のカーソル位置で確定する。 (2)のようになったときにしばらくそのまま使っているといつの間にか(1)に戻るのですが、なぜ(2)のようになるのでしょうか。(2)から(1)に戻すにはどうしたらいいのでしょうか。

  • 液晶画面が表示されません。

    NECのVALUESTAR(windows98)についての質問です。 中古のPCを、OSが消された状態でもらったのですが、 PCを立ち上げると液晶画面で表示がありません。 立ち上げた初めは、NECと画面の中心に表示があるのですが、その後、画面左上に(文字を入力するくらいの大きさの)カーソルの点滅しか見えなくなっています。ハードの故障でしょうか?対処法はありますか? PC初心者です。お分かりになる方がいましたら、 アドバイスをお願いします。

  • 画面に質問と回答などの表示

    画面に質問と回答などの表示  何時も回答いただきありがとうございます。DELL OPTIPLEX GX260 WindowsXPからです。  以下のURLのように長い 質問と回答、お礼コメント、補足コメント入力  のやり取りでは、後で、読み直したり、 ベストアンサーにする  を選ぶ時に、海で、おぼれた時のように、迷子になった時のようにホームページを読んでいても、  何回目の回答なのか?  何回目のお礼コメントなのか?  ……  今どこにいるのか分からなくなります。質問、一回目の回答、一回目のお礼コメントなどの表記が、画面から消えてしまうからです。  現在の位置を知るためにスクロールバーをあげたり、下げたりして位置を確認します。確認したら、また、スクロールを下げて読みたい場所を確認します。  このために、時間も手間もかかるし、カーソルを上げたり、下げたりして、また迷うこともあります。 ●Q01. だから、長い文章の時には、画面から、 質問なのか 何番目の回答なのか 何番目のお礼なのか 何番目の補足コメントなのか  が、消えてしまうので、消えてしまう時には、文章の右に、 質問なのか 何番目の回答なのか 何番目のお礼なのか 何番目の補足コメントなのか を表示できると便利だと思うのですが、利用者のご意見は、いかがでしょうか?  グーグルクロムのホームページの画面の印刷では、プレビューが表示され、カーソルの位置が、何枚目の画面なのかが、表示されます。  これは、必要な画面の印刷のページを見るのに役立ちます。  このようにOKWAVEの表示の画面で、現在の場所が分かると便利です。 ●Q02. 利用者の方で、何か代替の方法が、あれば、お伝えください。 https://okwave.jp/qa/q9377059.html?by=datetime&order=ASC#a_area  たとえ、ひとつだけでも、お知りのことがありましたら、教授方よろしくお願いします。  敬具

  • 画面右側も全部表示させたい(解像度)

     SOTECのパソコンを使っています。解像度を上げて1024×768にしたら、画面右側が少しはみ出て、マウスを動かすとカーソルが見えなくなる領域ができてしまいました。  今、800×600と2種類しか選べません。解像度が低いほうだと、文字が大きすぎて使いにくいです。  1024×768の文字の大きさで右側も全部表示されるようにするにはどうしたらいいでしょうか?  よろしくお願いします。

  • ワード2007での頭揃え

    文字を箇条書きをする際に  行の先頭から、空白4文字(全角)を入力して、文字列を入力する場合と文字列を入力してからカーソルを先頭列に移動させ空白4文字(全角)を入力する場合では、前者は空白で全角4文字分になりますが、後者は、インデントの位置が動き、場合によっては、文字列の先頭文字が頭揃えにならない場合があります。  ゆえに、後者のように文字列を先に入力した場合は、その文字列の前にEnterキーで改行→空白4文字(全角)を入力→文字列の最後にカーソルあわせ、Deleteで改行削除させて頭揃えしています。  後者の場合も前者と同じように、インデントの位置が動くのではなく、空白4文字(全角)が文字列の前に入るように設定変更が出来ないのでしょうか。  …以外と文書作るのにも時間ロスするので…。