[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00176] Re: FDClone の HP-UX 対応について
- Subject: [FDclone-users:00176] Re: FDClone の HP-UX 対応について
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Sat, 10 May 2003 22:52:24 +0900
しらいです。
In Message-Id <03May10.155154jst.119044@inetgw.lightwell.co.jp>
SHIOTA Shoichi <Shoichi.Shiota@lightwell.co.jp>さんwrites:
> 潮田です。
> # 以下では AIX での議論は無視して、 素の 2.03a での話です。
ということは、SIGCHLD とか ECHILD とかは未修正ということで
すね。
> man によると tgetent() の戻り値は
> #define OK (0)
> #define ERR (-1)
> のようですが、このソースからは定義が見えないのでハードコード。
がーん。HP-UX はまた仕様を変えたんですか。とほほ。少なくと
も HP-UX 9.x まではこの code で動いていたんですよ。HP-UX は
もう version 毎に別 OS だと思った方がいいかも。
元々 FDclone は HP-UX 用に開発したものなんです。glitch 絡
みの細かな対応をしてあるのも hpterm 用の配慮ですし。長い間触
っていなかったらいつの間にか全然違う実装になっていたんですね。
> カーソルの移動時に、移動前の領域に再描画がなされないようで、
> 下(上でも)へ移動させると画面に反転表示が残り、そのまま移動させ
> 続ければ塗りつぶされます。
> Ctrl + l では直ります。
それが hpterm 特有の glitch です。他の OS から remote で使
う分には普通に使える筈です。FDclone では stable_standout と
いう変素で表していますが、standout 修飾文字の扱いが一般の端
末と違って特殊なんですね。
FDclone 1.00 の頃に実装されていた機能はこの対応をしてある
んですが、その後 HP-UX 環境が手元に無くなってからは、この対
策が殆んど出来ていません。これは実機が無いと対処出来なさそう
ですね。
実機を持っている人に支障が起こる箇所を逐一報告して貰って、
try & error を何度も繰り返さないといけないかしらん。
> > termcap と terminfo を使い分ける必要がありそうですね。流石は
> > gritch の王者。
> すいません、 gritch ってどういった意味でしょう。
glitch です。あれ?綴り間違えて書いたかな?
termcap/terminfo には glitch と呼ばれる幾つかの flag があ
ります。xn (eat_newline_glitch) とか xs (ceol_standout_glitch)
とか。
「x」で始まるのは「Xanthippe」の頭文字だそうで、悪妻で有名
な歴史上の人物の名を借りるほどに「特例」な機能を有することを
表している flag です。
で、その殆んどが HP 端末用に規定されている訳です。つまり、
HP 端末さえなければ端末制御 program の実装はもっと楽になるの
にというお話。
> ./fdsh では
>
> $ vi FAQ
> [1]+ 3726 Stopped on terminal output vi FAQ
>
> と FD 同様です。
vi や more が stty tostop してしまっているんでしょうかね?
起動前は stty -a でどう表示されていました?source があるよう
ならそちらも確認してみて下さい。
termios library だと c_lflags の TOSTOP bit がこの機能に相
当します。source 内にこの文字列が見つからないでしょうか?
> HP-UX B.11.00 では、killpg(), getdtablesize() とも
> /lib/libc.a
> にいるようで問題は無かったのですが。
killpg(pgrp, sig) の置換えは多分 kill(-pgrp, sig) で行ける
と思います。
./fdsh や ./fd で「&」付で起動した子 process に対し、fg や
bg が普通に行なえて、親を SIGHUP で殺した時に子も一緒に道連
れになるようなら置換えが無事行なわれていることになります。
単一 process でなく process group 全体に signal を送れてい
ることを確認するために、起動する子 process は「echo|cat|cat」
のように pipe で繋いだ方がいいでしょう。
> 問題は getdtablesize() で、まったくみあたりません。
> lib と言う名前のディレクトリを総なめしたのですが、
> 無いようです。
これは system call なので library にはありません。置換える
ならこうでしょうか。
---- Cut Here ----
int getdtablesize(void)
{
struct rlimit lim;
if (getrlimit(RLIMIT_NOFILE, &lim) < 0) return(-1);
return(lim.rlim_cur);
}
---- Cut Here ----
面倒なら「#define getdtablesize() -1」でも構いません。この
取得に失敗した場合には OS の既定値を使いますから。大抵の場合
は既定値から動かしませんし。
# ulimit -n で指定すると、既定値から動的に変更されます。
> 根拠は無いですが -ltermlib を採用して
>
> $ make Makefile.tmp
>
> Makefile.tmp の
> LDFLAGES に -lBSD を追加
> また、fdsh の
> $(CC) -o $@ $(SOBJ) $(SLDFLAGS)
> にも -lBSD を追加
System V 用にだけ上記の置換えを採用するといいんじゃないか
と思います。
# どこかが「FreeSYSV」とか「OpenSYSV」とか出してくれるなら
#System V 方面の対応ももう少し充実させられるのですが :-)
> で、 ./fdsh ですが、起動できません。
この辺りは [FDclone-users:00171] の patch では解消しません
か?System V 一般に通じる支障だと思うので、HP-UX もこの対処
が不可欠なんじゃないでしょうか。
> 10.01 の方で tgetent() の戻り値の修正が必要なかったので、
> #ifdef HPUX での切り換えはだめですね。
> 10.01 にマニュアルが入っていないので仕様がどうだったかは
> 不明です。
どこかに HP-UX の version を分別出来る識別子はないですかね?
例えば「#if defined (__hpux) && (__hpux > 10)」とか出来ると
いいのですが。
「cc -E -v config.h」で pre-define 識別子が出て来ると思う
ので、その中から適当なものを探し出してみて下さい。
しらい たかし