[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00175] Re: FDClone の HP-UX 対応について



潮田です。

# 以下では 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 にマニュアルが入っていないので仕様がどうだったかは
不明です。