[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00175] Re: FDClone の HP-UX 対応について
- Subject: [FDclone-users:00175] Re: FDClone の HP-UX 対応について
- From: SHIOTA Shoichi <Shoichi.Shiota@lightwell.co.jp>
- Date: Sat, 10 May 2003 15:51:51 +0900
潮田です。
# 以下では AIX での議論は無視して、 素の 2.03a での話です。
Takashi SHIRAI <shirai@unixusers.net> wrote:
> HP-UX は termcap による端末管理がおかしいので、HP-UX だけ
> terminfo を使うようにしてあります。machine.h の USETERMINFO
> を外すとどうなりますか?
$ ./fd
No TERMCAP is prepared
となりました。
TERM を dtterm にしていたので、 vt100 にしましたが変わりません。
で調べてみると、
http://homepage1.nifty.com/~tetsu/ruby/diary/0204.html#11 と #12
がひっかかりました。
(う、 ruby。cygwin にもバンドルされて順風満帆かな。)
term.c の getterment() を
i = tgetent(buf, terminalname);
# endif
+#ifdef HPUX
+ if (i == -1) {
+#else
if (i <= 0) {
+#endif
に修正しました。
man によると tgetent() の戻り値は
#define OK (0)
#define ERR (-1)
のようですが、このソースからは定義が見えないのでハードコード。
/usr/include/curses.h
/usr/include/curses_colr/curses.h
には定義があるようです。
これで、FD 自体の起動はできるようになりました。
が、Enter や e や x の挙動は変化ありません。
逆に、マイナス点が増えました。
カーソルの移動時に、移動前の領域に再描画がなされないようで、
下(上でも)へ移動させると画面に反転表示が残り、そのまま移動させ
続ければ塗りつぶされます。
Ctrl + l では直ります。
> termcap と terminfo を使い分ける必要がありそうですね。流石は
> gritch の王者。
すいません、 gritch ってどういった意味でしょう。
#Jargon の日本語ページってないかな。
> > [1]+ 6511 Stopped on terminal output more ./README
> > 何かキーを押して下さい.
>
> SIGTTOU ですか。んー、ちゃんと子 process に端末を渡してあ
> るんですけどねー。状況を簡単にするために、./fdsh や ./fdbsh
> で動作確認してみて貰えませんか?
素の ./fdbsh では、動きましたが、
./fdsh では
$ vi FAQ
[1]+ 3726 Stopped on terminal output vi FAQ
と FD 同様です。
ps は
$ ps
PID TTY TIME COMMAND
3728 pts/tb 0:00 ps
3726 pts/tb 0:00 vi
3723 pts/tb 0:00 fdsh
1596 pts/tb 0:00 telnetd
1597 pts/tb 0:00 ksh
Pid 3723 received a SIGSEGV for stack growth failure.
Possible causes: insufficient memory or swap space,
or stack size exceeded maxssiz.
と必ず落ちるようです。
こちらは AIX の方と同根かもしれませんね。
> # ひょっとすると more や vi 側で何か特殊なことをしているの
> #かも知れません。出典の明らかな GNU less や vim なんかを使
> #ってみるとどうなるでしょう?
ちょっと待ってくださいね。
ソースは手元にありますが、 HP-UX に入るかな。
やっぱり /opt に入ったりするのかな。
> > HP-UX B.10.01
> > な別の WS で試そうとしたのですが、ファイルが足りないのか
> > コンパイルも終了できませんでした。
>
> こちらも USETERMINFO を外してみるとどうでしょう?
>
> # その場合、「#define TERMCAPLIB -ltermlib」にしないとい
> #けないようです。
> この ML が出来る直前に HP-UX の端末絡みの報告が挙げられて
> いて、「#define TERMCAPLIB -lcur_colr」にすると HP-UX では問
> 題なく動くという話でした。version によっては -lxcurses だと
> か。
USETERMINFO を外して、
-lxcurses の場合
/usr/ccs/bin/ld: Can't find library for -lxcurses
-lcur_colr の場合
/usr/ccs/bin/ld: Unsatisfied symbols:
killpg (code)
getdtablesize (code)
-ltermlib の場合
/usr/ccs/bin/ld: Unsatisfied symbols:
killpg (code)
getdtablesize (code)
HP-UX B.11.00 では、killpg(), getdtablesize() とも
/lib/libc.a
にいるようで問題は無かったのですが。
HP-UX B.10.01 では、killpg() は
/lib/libBSD.a
にいました。
問題は getdtablesize() で、まったくみあたりません。
lib と言う名前のディレクトリを総なめしたのですが、
無いようです。
system.c の頭で
#if MSDOS
#define getdtablesize() 20
#else
とあったので、 else に
#ifndef getdtablesize
#define getdtablesize() 20
#endif
をいれました。
根拠は無いですが -ltermlib を採用して
$ make Makefile.tmp
Makefile.tmp の
LDFLAGES に -lBSD を追加
また、fdsh の
$(CC) -o $@ $(SOBJ) $(SLDFLAGS)
にも -lBSD を追加
$ make sh bsh all
でコンパイル成功。
./fdbsh は簡単なコマンドは動きました。
vi とか ps, ls などは問題ないですが、この上で ./fd と
すると帰ってこなくなりました。
落ちるわけでもなく、 ctrl + c 等も受けつけず
$ ./fd
のまま FD へ表示が切り替わりません。
改めて試すと、上の 11.00 の fdsh も同様でした。
(これは fd の方が悪いのかも)
./fd は [FDclone-users:00168] の時の 11.00 と同様です。
マシンパワーの違いで、 e の時
「しばらくお待ち下さい.」
と表示しているのがなんとか読めます。
で、 ./fdsh ですが、起動できません。
throne 25: ./fdsh
./fdsh: No such process
throne 26: ./fdsh
./fdsh: No such process
throne 27:
となり、起動すると勝手に元の shell へ戻ってきます。
10.01 の方で tgetent() の戻り値の修正が必要なかったので、
#ifdef HPUX での切り換えはだめですね。
10.01 にマニュアルが入っていないので仕様がどうだったかは
不明です。