だから私はターミナルエミュレーションを書いて(わかっている、パテなどをコンパイルするだけでいい)、それが正しいことを確認するためにvttestを駆使する段階にいます。今はVT102をベースにしていますが、基本が正しく機能している場合は、カラーなどのターミナル機能を追加します。
コマンドセットは主にANSIです。DECは独自のコマンドセットを備えていましたが、1973年頃からANSIコマンドをサポートしていました。これらのANSI標準は明らかに現在利用できませんが、ECMAの同等物は利用できます。見ることができます。ほとんどのANSIコマンドシーケンスは、ESCで始まります。多くのコマンドは、ここではCSIとして示され、データ内で0x1c 0x5b(ESC [
)、または8ビット通信が可能な場合は0xdbとして表されるコマンドシーケンス識別子で始まります。次に、コマンドを識別するシーケンスが続きました。コマンドの中には、カーソルの位置に影響を与えるもの、画面に影響を与えるもの、ホストへの応答を引き起こすものなどがあります。
一部の端末コマンドには数値引数が含まれています。例CSI 10 ; 5 H
は、カーソル位置を行10、列5にすることを意味します。数値引数がない場合、使用するデフォルト値があります。CSI 10 ; H
つまり、引数が指定されない場合のデフォルト値は1であるため、カーソル位置を行10、列1にします。
私はvt100.net(素晴らしいリソース)からのvt102マニュアルを持っており、これらのコマンドシーケンスに関する部分的な情報を提供する約12のページがあります。どうやら、完全なゴスペルDEC端末仕様はDECから外れたことはありません。
明らかなのは、CSI C
カーソルを右に移動することと、デフォルト値が1であることです。
はっきりしないのは、の意味ですCSI 0 C
。
なぜそこにゼロがあるのですか、それはコマンドが何もしないように思われるでしょうか?「デフォルト値を使用」を意味する場合は、代わりに1として送信された可能性がありますが、短い文字列には引数がなく、いずれにしてもデフォルト値が1として解釈されることに依存します。これらの実際の物理VT端末は300ボー以下で使用されることが多かったため、1文字で問題ありませんでした。
私はvttestをあまり使いこなしていないので、両方の方法を試してみて、すべてが完璧になるかどうかを確認できますが、このような小さな質問が問題になり始めるほど十分です。
[
であり、2文字のシーケンスESC [
として、または[
8番目のビットセットと同じようにエンコードできます。(一部のモデルはのみをサポートしている場合がありESC [
ます)CSI 0 C
vt102で何が行われたかわかりません。xtermではと同等CSI 1 C
です。私は疑っていますが、確かではありませんが、0と値の不在は、ある時点で同じように解析されると思います(と考えてくださいatoi
)。xtermソースでコメントを探しましたか?