Re: 有沒有人試過讓maple支持非標准行列數?
下面的程式在使用 kkman 時會有問題。pcman,multiterm 都確認過可以用。
putty 也沒問題。
在 bbsd.c 裡面加入一個 term_init()
void
term_init()
{
#ifdef BIGTERM
/* ask client to report it's term size */
static char svr[] = {
IAC, DO, TELOPT_NAWS
};
static char rvr[] = {
IAC, WILL, TELOPT_NAWS,
IAC, SB, TELOPT_NAWS,
IAC, WONT, TELOPT_NAWS
};
int len;
char *cmd, *res;
int rset;
struct timeval to;
char buf[64];
cmd = svr;
len = 3;
/* 問對方 (telnet client) 有沒有支援不同的螢幕寬高 */
send(0, cmd, len, 0);
rset = 1;
if (select(1, (fd_set *) & rset, NULL, NULL, &to) > 0)
recv(0, buf, sizeof(buf), 0);
/* try to read rows and columns of the client terminal */
cmd = rvr;
res = buf;
if (!memcmp(res, cmd, 3)) {
/* got IAC WILL NAWS : 對方說有 */
res += 3;
if (!memcmp(res, cmd+3, 3)) {
/* got IAC SB NAWS :接著回傳資料 */
res += 3;
t_width = res[0]*256+res[1];
t_height = res[2]*256+res[3];
}
} else if (!memcmp(res, cmd+3, 3)) {
/* got IAC SB NAWS */
res += 3;
t_width = res[0]*256+res[1];
t_height = res[2]*256+res[3];
} else if (!memcmp(res, cmd+6, 3)) {
/* got IAC WONT NAWS; default to 80x24 :對方說沒有 */
t_width = 80;
t_height = 24;
} else {
/* what ever else; default to 80x24 :沒有回覆 */
t_width = 80;
t_height = 24;
}
#else
t_width = 80;
t_height = 24;
#endif /* BIGTERM */
}
在 bbsd.c 裡的 main() 最後
telnet_init();
term_init(); <--- 加入這一行
visio_init();
xover_init();
另外,在 visio.c 裡面
/* 把這些
#define t_columns 80
#define t_lines 24
#define p_lines 18
換成下面那些
*/
/* for term-size awareness */
extern int t_width;
extern int t_height;
#define t_columns t_width
#define t_lines t_height
#define p_lines t_lines - 6
int b_lines;
※ 引述《fuse.bbs@bbs.hightman.net (保險絲)》之銘言:
> ※ 引述《LittleJohn2.bbs@bbs.cs.nthu.edu.tw》之銘言:
> > 可以到 news.tfcis.org 的 TFCIS.personal.itoc 找找
> > 有支援超過 24 行長螢幕的程式 (抓 telnet 的 signal)
> 多謝您的回應
> 找到了
> 這里有一段話看不懂,不知哪位大大可以解釋一下:
> ----
> 發信人: itoc.bbs@processor.tfcis.org (:MM:), 信區: maplePlanITOC
> 標 題: Re: [□□]_や穿□□_24_□□□□
> 發信站: XEON (Fri Apr 11 14:29:42 2003)
> 轉信站: Feeling!news.tfcis.org!PROCESSOR
> 出 處: svrequ.tnfsh.tn.edu.tw
> 還沒上站就必須把視窗大小設好
> 視窗的大小是以剛上站時的大小為准
> 后來再改也沒用了 (因為我抓不到 SIGWINCH)
> -----
> 我理解中.........在telnet剛建立時,會作協商:
> server問:你會改變行列數么?(TN_NAWS)
> client答:Yes, I do. (TNCH_DO)
> 那么在連線時,
> 當TERM變化行列數時就會發出:
> TNCH_IAC + TNCH_SB + TN_NAWS + 行數列數 + TNCH_IAC + TNCH_SE;
> 那么也就是在連線階段會發現這個串,解析就是了。
> 那itoc大大說的SIGWINCH又是什么意思呢?
--
※ Origin: 生命科學 BBS <bbs.life.nthu.edu.tw>
◆ From: feminism.life.nthu.edu.tw
討論串 (同標題文章)
Maple 近期熱門文章
PTT數位生活區 即時熱門文章