手抜きして、表示時に TAB を変換することにしてみました。 s|^(\t+)|' ' x length($1)|e; > 「ブラウザから ftp://(username):(password)@(server)/(directory) と > 入力すると、何が表示されますか?」というので、やってみるとアクセス > 権表示(rwxr--r--)しか表示されないのです。 rosegarden さんのおっしゃるとおり ftpd の問題なんでしょうが、 考えられるのは ・NLST だとファイル一覧がうまく取れないのかもしれない。 ・inetd が LANG=ja で実行されているため、inetd から呼ばれる ftpd も LANG=ja になり、日付が日本語になってしまう (11月14日など) てなところでしょうか。 で、他の ftp サーバを相手に試してみるとか、その ftp サーバに ftp -d で anonymous login して、プロトコルを見てみる (うまく いく ftp サーバとプロトコルの内容を比較する) などなど。 ちなみに ftp のファイル一覧の形式は、RFC で規定されていません。 一般的には ls -l の表示形式であることが多いですが、ls -l の 形式にすべしとはどこにも書いてありません。 > 例えば、windowの一部が画面の外側に出ている状態で、 > そこからwindowを現在ある位置から移動したとき、 > EXPOSEイベントがたくさん飛んで来るようで、 うーん、状況がよくわからんです。 http://X68000.startshop.co.jp/~68user/xprogram/xlib-3.html のように、ウィンドウ内に子孫ウィンドウを作ってますか? 子孫ウィンドウで Expose イベントに対応していないため、 上位のウィンドウにイベントが上昇伝播していて、その 結果複数のイベントが飛んできていませんか? もしそうなら、子孫ウィンドウでも XSelectInput して、 イベントが飛んできたら、どこ宛 (親ウィンドウ or 子 ウィンドウ) のイベントかどうかを判定し、適切な ウィンドウを再描画すればよいです。どのウィンドウ宛かは event.window でわかります。 1つのウィンドウでも発生するなら、 Expose が飛んできたとき、XCheckTypedEvent で さらに別の Expose イベントが飛んできていないか 調べる。 という方法があります。 case Expose: while (1){ if ( ! XCheckWindowEvent(display, window, ExposureMask, &event) ){ break; } てな感じ。ただし、根本的な解決方法かどうかはわかりません。 |