ターミナルエミュレータの実装

Daisuke Murase <typester@cpan.org>

AS3 で ttyrec 再生

ttyrecって?

高林哲さんがつくったttyレコーダー

http://0xcc.net/ttyrec/

これをずっとWebで再生したいなって思ってた

as3になるとバイナリを扱えるようになると聞いていてずっとwktkしていて、

Flex2 SDK が出てすぐ作成開始。

Flex2 SDK

Adobe が提供している無償の Flex2 開発環境

http://www.adobe.com/jp/products/flex/sdk/

だけど結構むずかしい

端末のエスケープシーケンスを地道に実装していかなければいけないのだけれど

資料がなかなかない

そもそもこういう古い技術に対する知識がないので

調べ方がわからないというのもある

僕が参考にした資料

ところでエスケープシーケンスってなによ?

ASCIIの文字以外のところ

制御文字ってとこですね

0x08

Back Space

0x0a

New Line

0x07

bell

0x1b

ESC

0x1b

ESC

0x00 - 0x1f だけじゃ数が足りないのでこれをprefixとしてつかう

ESC c

画面をクリア

ESC [

CSI

ESCの下にさらにあるprefixコード

CSI {number} A

= ESC [ {number} A

カーソルをnumber行上に移動

CSI {number} B

カーソルをnumber行下に移動

CSI {x} ; {y} H

カーソルを x, y の位置に移動 (超頻出)

そんなこんなでできたのがこれ

Welcome to TTYShare

まだぜんぜん完璧じゃないのだけど、

NetHackぐらいは完璧に再生できる

TTYShare

http://ttyshare.com/

エスケープシーケンス知ってると

プログラムにもいかせるかも!

print "\x07"

bell鳴らしたり

print "0x1b[10,10H"

座標 10, 10 にカーソル移動したり

とかいう感じで

あれ?

端末の制御コード
まじめに実装したから

もしかして

Linuxアプリの出力を
そのまま流しても
再生できるんじゃね?

オンライン
NetHack プレーヤー

Demo

http://ttyshare.com/play/nethack

実装

実装 (サーバーサイド)

実装 (サーバーサイド)

TCPからの入力をそのままnethackへ、nethackの出力をtcpへつなぐだけのサーバー

実装 (クライアントサイド)

Socket + ByteArray

ttyrecプレーヤーの再生データをTCPからのストリームに変更したもの

これってほかにも
いろいろできそうですね

今、これをみて

夢がひろがりんぐしてるかたは

実装してみると楽しいよ!

schemeとか

haskellとか

言語実装ブームも面白いけど

制御コードもなかなか
面白いよ!

もし

TTYShareもっとよくしたる!
という

as3 プログラマ

perl プログラマ

いらっしゃったら

KAYAC採用サイト

ご清聴ありがとうございました!