Gauche > Archives > 2012/02/22

2012/02/22 01:30:14 UTC(び)
#
あれ、HEADが、termiosのテストで刺さるようになった(FreeBSD 8.2R)
2012/02/22 01:32:07 UTCshiro
#
termios変えた。ptyが使えるときは使うようにしたんだけどそのせいかな。
#
変えたってのはテストを変えたってこと。ext/termios/test.scmの(sys-openpty), (open-input-fd-port) あたりに#?=噛ませるとどうなります?
2012/02/22 01:35:53 UTC(び)
#
test termios-tcsetattr, expects (#<undef> #<undef> #<undef>) ==>
#
止まってるのはここですね
2012/02/22 01:37:23 UTCshiro
#
ああ、ptyのオープンはうまくいってるんですね。ptyに対してsetattrするとまずいものがあるんだろうか。
2012/02/22 01:44:32 UTCshiro
#
TCSADRAINかTCSAFLUSHで、master側が何かするまで待っちゃってるのかな。今、 (list TCSANOW TCSADRAIN TCSAFLUSH) と3つのフラグをテストしてますが、これをひとつづつテストしたら、どれでつっかえてるかわかります?
2012/02/22 01:50:56 UTC(び)
#
やってみます
2012/02/22 01:54:59 UTC(び)
#
TCSADRAIN で止まりますね
#
TCSAFLUSH でも止まる
2012/02/22 01:59:58 UTCshiro
#
その二つはmaster側のアクションを待つということか… Linuxのmanpageでは「変更のタイミング」に関しては述べられているけど、関数が戻るか戻らないかは何とも言ってないんですよね。
#
アドホックだけど、(1)/dev/ttyのオープンを試みてだめだったらptyにフォールバック(2)ptyにフォールバックした場合はTCSANOWだけ試す、ということにしようかな。
2012/02/22 02:03:30 UTC(び)
#
TCSADRAIN  The change occurs after all output written to fd has been
                transmitted to the terminal.  This value of action should be
                used when changing parameters that affect output.

     TCSAFLUSH  The change occurs after all output written to fd has been
                transmitted to the terminal.  Additionally, any input that has
                been received but not read is discarded.
2012/02/22 02:06:17 UTCshiro
#
それはLinuxの記述と同じですね。ただ、そこで言っているのはパラメータの変更が端末に反映されるタイミングであって、tcsetattrがその変更が起きるまで待つということは言ってないと思うんですよ。
2012/02/22 02:06:45 UTC(び)
#
確かにそうですね。
2012/02/22 02:07:10 UTCshiro
#
変更前に戻っちゃうと何らかのバッファリングが必要なので、実装上待ちたくなるのはわかりますが。
2012/02/22 02:08:43 UTC(び)
#
関数そのものがブロックするかどうかについては、記述がないですね。
2012/02/22 02:20:14 UTCshiro
#
ちょっと強引だけどこんな感じでどうだろう https://gist.github.com/1880709
#
(let1 term (sys-ctermid) の下に (error <system-error>) をつけてもらえば、ptyを使う方のパスをテストできます。
2012/02/22 02:42:03 UTCshiro
#
pushしときました。
2012/02/22 02:42:27 UTC(び)
#
止まらなくなりました。
2012/02/22 02:45:17 UTCshiro
#
まはろ〜。
2012/02/22 03:28:55 UTCkenhys
#
ちょっとしたtypoを見つけました。diff --git a/doc/modgauche.texi b/doc/modgauche.texi
index 3d0bc86..414eb22 100644
--- a/doc/modgauche.texi
+++ b/doc/modgauche.texi
@@ -7858,7 +7858,7 @@ so that a parameter can be used as if it were a procedure.
 
 @example
 ;; p is a parameter with initial value 2
-(define p (make-parametre 2))
+(define p (make-parameter 2))
 
 ;; calling p with no arguments returns the current value
 (p) @result{} 2
2012/02/22 04:34:00 UTCshiro
#
ども。直しました。
2012/02/22 05:51:52 UTCshiro
#
ヘルツにちなんだ今日のGoogleロゴだけど円弧を繋いだ波形ってのは(普段あんまり目にしないので)見ててちょっと異質な感じ。どんなスペクトルになるんだろ。
2012/02/22 08:12:27 UTC齊藤
#
https://plus.google.com/u/0/107817010900537616066/posts/JCBGpm3QAyq
2012/02/22 08:17:39 UTCshiro
#
デザインとしてはわかるのだけれど、現実の波形ではあんま見ないですよね。でも方形波は綺麗な無限和で作れるから、円弧をつないだ波形も案外すっきり作れたりして。
2012/02/22 08:40:48 UTCenami
#
直前の tcflow(TCIOFF) tcflow(TCION) でおくられた ^S/^Q が出力バッファにあるから止まってるんですね.
2012/02/22 08:49:00 UTCshiro
#
そっか。ということは何か送る前にテストすれば止まらずに済むかな。
2012/02/22 08:52:25 UTCenami
#
tcflush のテストを間にもってくるとか
2012/02/22 08:53:06 UTCshiro
#
pty使ってる場合、tcflushもmasterで読み出すまで止まったりしませんかね。
2012/02/22 08:55:58 UTCenami
#
tcflush はキューにある文字を捨てる関数のようなので大丈夫じゃないですかね?
#
とりあえず手元では動きました.
2012/02/22 08:57:42 UTCshiro
#
お、じゃあそっちの方がいいかな。今の変更は(pty使用時には)あんまり意味のないテストになっちゃってるので。
#
https://gist.github.com/1883481 こんなかんじ?
#
あ、ptyのパスを試すにはctermidの方のコードでエラーを投げるかなんかしてください。
2012/02/22 09:07:47 UTCenami
#
そうですね.動きました.
2012/02/22 09:08:27 UTCenami
#
tcflush のテストをコメントアウトするととまったのでたぶんちゃんと pty 使われてると思います.
2012/02/22 09:08:27 UTCshiro
#
ありがとです。