
Windows 10 Threshold 2(10.0.1058)ではコマンドプロンプトでANSI/VT100互換表示が可能に 48
ストーリー by hylom
実機が手元にないから試せない…… 部門より
実機が手元にないから試せない…… 部門より
あるAnonymous Coward 曰く、
昨年11月にリリースされたWindows 10のメジャーアップデート「Threshold 2」(10.0.1058)ではコンソール機能が強化され、ANSIやVT100ターミナルがサポートされているそうだ(Nivot Ink、Slashdot)。
ANSIやVT100のエスケープ文字列が多数インプリメントされており、conhost.exeやcmd.exe、PowerShellから利用できるという。以前Windows VistaまでANSI互換カラーを実現するansi.sysというドライバがあったが、Windows 7以降では廃止されていた。Nivot Inkの記事では、実際にコマンドプロンプトでANSI互換のカラー表示を行っている例や設定方法などが紹介されている。
ANSI.SYS (スコア:2)
32bitのコマンドプロンプトにANSI.SYSなんて組み込めたっけ?
32bitWindowsのコマンドプロンプトでDOSアプリを実行すると、COMMAND.EXEが走ってAUTOEXEC内に記述したANSI.SYSが入るけど、その環境では32bitコンソールアプリは動作しない。
64bitWindowsだと、そもそもDOS窓が無いからANSI.SYSは入れ様が無いって状況だったかと。
-- Buy It When You Found It --
Re:ANSI.SYS (スコア:1)
もう少し詳しく解説願えますか。
----------------------------------
私自身は wow64;;https://ja.wikipedia.org/wiki/WOW64 で dos 窓も動くと解釈しています、。 実際私は 64bit Win7 使いですが、cmd.exe を日常的に使っています。32bit mingw で下のような動作をしています。
//@@
#include
int inStt;
static int* pInStt=&inStt;
int main(){
printf("%x", (long int)(pInStt+0x1ffffffff0));
return 0;
}
//@@@
//copy __tmp tmp.cpp /y
//gcc tmp.cpp C:\MinGW\lib\gcc\mingw32\4.8.1\libstdc++.a
a
40cfe0
「Win10 以降 DOS 窓が使えない」の意味だとしたら私にとって大問題です。Win10 upgrade なんて不可能になってしまいます。
もし私の解釈誤りがあれば、「64bitWindowsだと、そもそもDOS窓が無い」の意味を詳しく解説してやってくれますでしょうか
Re:ANSI.SYS (スコア:2)
既にレスが付いてますが、NT系で起動するのはCmd.exeをシェルとする「コマンドプロンプト」であって、厳密には「DOS窓」ではありません。(混同されてる事が多いですが)
Cmd.exeは、機能が強烈に強化されているけれど、直接DOSアプリを起動する能力は有りません。
代わりに、32bitOS限定でシームレスに仮想86モードで動作するNTVDM環境に移行し、COMMAND.COM経由でDOSアプリを実行する能力が有ります。
この際にCOMMAND.COMが自動的にWindowsディレクトリにあるAUTOEXEC.BATを実行するので、そこでDOS用ドライバを組み込むことが出来ます。これが、正確な「DOS窓」です。
より厳密には、Win9x系環境で起動する仮想DOS環境をDOS窓と呼ぶべきかも知れませんが。
//9x系仮想DOSはVxDでフック出来たけど、NT系ドライバで出来るのかな?
64bit環境には、仮想86モードが無いのでネイティブでDOSアプリを実行する機能が有りません。(仮想マシンやエミュレータが必須)
Cmd.exeをシェルにする「コマンドプロンプト」は32bitアプリ(多分)なので、64bit環境でも使えます。
余談ですが、EXEファイルは、DOS用実行モジュールとWindows用実行モジュールを混在出来ます。Windows環境ではDOS用モジュール(通常はWindowsで無いと動作しない旨のエラーを出すだけ)は無視されます。
ま、DOS/Windows両用EXEなんて普通は見かけませんが。
//追加:割り込みはカーネルモードドライバでフック出来るから、判定基準にならない
-- Buy It When You Found It --
Re:ANSI.SYS (スコア:1)
完全に混同してました。皆様、丁寧な解説ありがとうございました。
Re: (スコア:0)
DOSプロンプト
https://ja.wikipedia.org/wiki/DOS%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%... [wikipedia.org]
> DOSプロンプト(どすぷろんぷと、正確にはDOSコマンドプロンプト)とは、MS-DOSやPC DOSなどのオペレーティングシステムにおけるコマンドプロンプトであり、更にはその画面である。
>正確にはMS-DOSなどのオペレーティングシステムで、標準のコマンドインタプリタである「COMMAND.COM」を起動した状態であり、その際に表示されるコマンドプロンプト(例:「C:¥>」)である。
COMMAND.COM
https://ja.wikipedia.org/wiki/COMMAND.COM [wikipedia.org]
>Windows 9x系
Re: (スコア:0)
int 21h使えるか試してみろよ
Re: (スコア:0)
何言ってんだこいつ
Re: (スコア:0)
DOS窓とコンソール画面は別物だよ。見た目はそっくりだけど。
DOSアプリが動作するのがDOS窓でWindows(32/64)アプリが動くのがコンソール画面。
32ビットWindowsでコンソール画面からDOSプラグラムを実行しようとすると
最初にDOS窓を(内部的に開いて)実行するんだよ。
Windows用のコンソールアプリではなくてDOS用のコンソールアプリを実行してみれば
すぐわかる話だと思うのだけど……
てゆーか技術系サイトのスラドでその両者の区別がつかない人がいるとは。
Re: (スコア:0)
若者なのでDOSアプリ使った事無いです
Windows SDKにもなんかある (スコア:2)
Nivot Inkの記事では、Undocumentedである4を元の値にORして関数SetConsoleMode [microsoft.com]を呼び出すと、このANSI/VT100互換機能が有効になると書かれています。
Windows SDK 10.0.10586.0を見てみると、#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004という定数が追加されていました (C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\um\wincon.h)。たしかに、この定数はMSDNライブラリにはまだ記載されていませんね。
Re: (スコア:0)
ここにさげとく
win32でよく「遊んでる」人には周知のことですが、コンソールはcmd.exeの専売じゃありません
see: AllocConsole()
Re: (スコア:1)
デバッグモードとかで起動するとAllocConsoleで割り当てた「自分の」コンソールにログを吐く作りになっているアプリを見かけますね。
ansi.sys (スコア:2)
うわ、IBM5550時代にあったなぁ。(多分IBM-PC/XTでも同じ)
INT29だったかのトラップを引っ掛ける奴。
バグで、あるシーケンスで無限ループに陥ったバージョンがあって、symdebだったかのコマンドテキストでパッチを作って、人にあげたことがある。
30年弱前。
Re: (スコア:0)
うわ、IBM5550時代にあったなぁ。(多分IBM-PC/XTでも同じ)
ANSI.SYS - Wikipedia [wikipedia.org]
ちょっと今さらな感じですが… (スコア:1)
実機が手元にないから試せない…… 部門より (スコア:0)
今時VT100(後継)の実機って動いてるの?
Re: (スコア:0)
doda さん [srad.jp]なら持ってそう。
Re:実機が手元にないから試せない…… 部門より (スコア:1)
VT100は2台持っていますね。普段は使っていないですが。
後継機のVT382JはFreeBSDなサーバのシリアルコンソールとして現役です。
# 日本語やSixel Graphicsも表示できるので、普段はsayakaちゃん [github.com]でTwitterのTLを表示しています
以前は動作仕様の確認でたまにVT100も使っていたのですが、
最近はVT382JやVT525で済ましています。
Re: (スコア:0)
ええ、動いてて業務にたくさん使っています。それだけのためにかなりの費用がかかります。
Re: (スコア:0)
今時 IBM PC/ATの実機なんてほとんど動いていないと思うけれど、AT互換機ならまだまだ沢山動いています。
VT100互換として動いているソフト+ハードはまだまだ沢山あるはずです。
私もWindowsXpのハイパーターミナルをVT100エミュレーションに設定して海外製のセンサーのコントローラへ接続したことがありますし、去年隣の席で Windows7となんとかタームの類のソフトでLiイオン電池の充電器と対話していました。
Raspberry Pi程度のものが載っている機器ならWebブラウザを使って接続設定するのが今時の定番ですが Arduinoクラスのマイコンだとそういうのは重過ぎるからVT
Re: (スコア:0)
部門名、元々コメ、元コメ、ボケ損なったネタもどきにマジレスで、
何とも気持ち悪い、むず痒い。
Re: (スコア:0)
なんか読みにくいけど、部門名まで責めるのは可哀想なんじゃないかな。
Re: (スコア:0)
technetで無料の評価版をダウンロードしてVMで動かせばいいだけなのに、
「実機が手元にないから試せない」とはいかに?
https://www.microsoft.com/ja-jp/evalcenter/evaluate-windows-10-enterprise [microsoft.com]
Re: (スコア:0)
そのエミュレータは本当にVT100互換ですか? VT102だったりしませんか? さらに日本語対応の勝手拡張が入ってたりしませんか?
Re:実機が手元にないから試せない…… 部門より (スコア:1)
SunOS「え?」
HP-UX「え?」
SunOS(Solaris)のコンソールは独自ですね。termcap/terminfoでのエントリもsunです。
シリアルポートからのログイン時もデフォルトではTERMがsunになるので、
「viがちゃんと動かない」→「TERMをvt100にセットしろ」ってのは定番です。
HP-UXのコンソールもHP2492とかHP2621とかのHPの端末の系統で、VT100とはかなり違います。
FreeBSDのコンソールのsysconsも元々はSCO consoleの系統なのでVT100互換じゃないですね。
最近はSCO console互換から外れてvt100に合わせてきてますけれど。
新しいコンソールドライバのvtは最初からvt100互換です。
Linuxのコンソールはvt100互換ではありますが、独自拡張部分がECMA-48(ANSI X3.64)から外れているので個人的にはvt100互換と言いたくないです。
他にもvt100互換じゃないコンソールなんていっぱいあると思います。
Re: (スコア:0)
むかーし昔、大学で使っていたシステムでsetenv TERM vt100とかやっていたのを思い出しました…
むかーし パソコン通信で (スコア:0)
回線速度が遅かったころ、その遅さを逆手にとってエスケープシーケンスで
キャラアニメをしていた(人が居た)
NEC98の上とかでしたけど、色とカーソル位置が移動できたのでカーソル戻して書き換え書き換え・・・
回線速度に依存した動作なので、ボーレート合わせないとまともに見られない。
300ボーだったか1200だったか
それくらいの時代の話
Re:むかーし パソコン通信で (スコア:1)
VT100でもそういうのは結構行われていましたね。
例えばこれ [vt100.net]とか。
今時のssh接続等の高速な環境だと一瞬で終わってしまって何が起きているか判りませんが。
Re: (スコア:0)
sl コマンドとかあったけど、通信速度の遅さとかは利用していなかった気がする。
むしろ速くないとまともに動かないんじゃないかな。
近い将来、DOSプロンプトでslが走るのかな。
いや、sl じゃなくて、driとか打つとドリルで穴をあけるとか、typeと間違ってcatしてしまったら猫が出てくるとか楽しそう。
Re:むかーし パソコン通信で (スコア:1)
sl コマンドとかあったけど、通信速度の遅さとかは利用していなかった気がする。
slコマンドは何人かの人が作っていましたけれど、例えばこれ [github.com]はusleepでウェイトを入れるようにしていますね。
typeと間違ってcatしてしまったら猫が出てくるとか楽しそう。
猫が走りだすんですね。
https://github.com/klange/nyancat [github.com]
# Unix用だけれどcygwinならビルド出来るかも
Re: (スコア:0)
普通にテキストファイルをtypeして、アニメーションしてたよね。
Re: (スコア:0)
H98シリーズの拡張アトリビュートを思い出しました。
なかなか使われてませんでしたけど。
Re: (スコア:0)
エスケープシーケンスでキーボードの再定義ができたんです。
それを利用したメッセージがBBSにかかれていて、
頻繁に押すキーに卑猥な言葉を定義されちゃってチャットで恥をかいたとかいう話がありました。
#と他人事のように書いてるけど引っかかったのは私です
Windows10で一番進化したのはコマンドプロンプト (スコア:0)
コピペ周りの機能が超強化されてる。
http://www.atmarkit.co.jp/ait/articles/1503/02/news139.html [atmarkit.co.jp]
さらにVT端末対応とか、中の人のモチベーションの高さは一体何なのか!?
これだけ進化してるなら、アップデートごり押しなのもうなずける話です。
Re: (スコア:0)
以前ここでWindowsのコマンドプロンプト使い物にならねぇと愚痴ったら使い方が悪いとか
そうならないよう実行前に予測して設定変更しとけとか言われて
Windowsユーザーはこんなだし95から7まで殆ど変わらず改善の見込み無いのかなと思ってたらWindows10でかなり改善されててびっくりした。
それがあったのですぐ10にしました。(うちの環境だとなぜかストアとかコルタナ使えないとか色々バグってるけど許容範囲内)
あとはUTF-8だ…
Re: (スコア:0)
どんなものだろうと使い始める前に設定を行わないのは使い方が悪いだろ
Re: (スコア:0)
あなたは使う前に設定画面に入るの?
それで最適な設定解るの?すごいですね
Re: (スコア:0)
>これだけ進化してるなら、アップデートごり押しなのもうなずける話です。
それとこれとは別問題。
きもちわるぃ
今はConEmuつこてますが (スコア:0)
もうすぐ要らなくなるの…
UTF-8周りも何とかして欲しい。 (スコア:0)
chcp では解決しないし、CmderとかConEmuとか使うのもめんどくさい(入っていない/入れられないサーバも多いので)。
SSH対応でしょうか (スコア:0)
関連リンクにある、Microsoft公式SSHクライアントに関するストーリーにおいて、複数のコメントで指摘されていますが、
SSHクライアントだけ実装しても、端末の制御方法が違うために実用性が低いのではないかと思われていました。
どうするのかと思っていましたが、まさかコマンドプロンプトを直してくるとは。
Microsoftの本気度を感じますね。
Re:SSH対応でしょうか (スコア:1)
Windows NTの頃からあるtelnet.exeでは、telnet.exe自身がVT100をエミュレートしていたので、時代が変わったと感じます。
そのtelnet.exe、初期設定はVT100互換ではなくVTNTという独自のモードなので「最初にset term vt100を実行するように」と教わったというのも、もはや思い出の話ですね。
Re: (スコア:0)
顧客が本当の欲しかった物: un*x端末
Re: (スコア:0)
unixが欲しいのにwindowsを買う(#2962592) のようなバカはどうしようもないです
Re: (スコア:0)
日本だと完成品はWindows機しか手に入りにくい
海外だとLinux機が普通に売ってるけど海賊版の温床だなんだと評判が悪い
Linux用ハードでWindows起動しないようにすればいいだけだけど
MSは他OS排除したいし、Linux側はどのハードでも自由に起動したいという意向なので
基本的にプリインストール機出しても買わないユーザの問題なんだけど
結局中古にインストールするのが安くて手っ取り早いのが現実
Re: (スコア:0)
元々Windowsを使わないなら、今回のストーリーとはあまり関係ないような。
今回の件は飽くまでWindowsとの相互運用の話だし…。
Re: (スコア:0)
Macのターミナルの中で生活しているユーザーを取り込みにかかってますね