}
#endif
+/*
+ * Original hooks
+ */
+static errr (*old_xtra_hook)(int n, int v);
+static errr (*old_curs_hook)(int x, int y);
+static errr (*old_bigcurs_hook)(int x, int y);
+static errr (*old_wipe_hook)(int x, int y, int n);
+static errr (*old_text_hook)(int x, int y, int n, byte a, cptr s);
+
+
+static void disable_chuukei_server(void)
+{
+ term *t = angband_term[0];
+
+ if (!chuukei_server) return;
+
+ chuukei_server = FALSE;
+
+ t->xtra_hook = old_xtra_hook;
+ t->curs_hook = old_curs_hook;
+ t->bigcurs_hook = old_bigcurs_hook;
+ t->wipe_hook = old_wipe_hook;
+ t->text_hook = old_text_hook;
+}
+
+
/* ANSI C¤Ë¤è¤ì¤ÐstaticÊÑ¿ô¤Ï0¤Ç½é´ü²½¤µ¤ì¤ë¤¬°ì±þ½é´ü²½¤¹¤ë */
static errr init_chuukei(void)
{
/* ¥Ð¥Ã¥Õ¥¡¤ò¥ª¡¼¥Ð¡¼ */
if (ring.inlen + len >= RINGBUF_SIZE)
{
- chuukei_server = FALSE;
- chuukei_client = FALSE;
+ if (chuukei_server) disable_chuukei_server();
+ else chuukei_client = FALSE;
prt("¥Ð¥Ã¥Õ¥¡¤¬°î¤ì¤Þ¤·¤¿¡£¥µ¡¼¥Ð¤È¤ÎÀܳ¤òÀÚÃǤ·¤Þ¤¹¡£", 0, 0);
inkey();
while (1)
{
fd_set tmp_fdset;
- struct timeval tmp_tv;
int result;
tmp_fdset = fdset;
- tmp_tv = tv;
/* ¥½¥±¥Ã¥È¤Ë¥Ç¡¼¥¿¤ò½ñ¤¹þ¤á¤ë¤«¤É¤¦¤«Ä´¤Ù¤ë */
select(sd+1, (fd_set *)NULL, &tmp_fdset, (fd_set *)NULL, &tv);
if (result <= 0)
{
/* ¥µ¡¼¥Ð¤È¤ÎÀܳÃÇ¡© */
- chuukei_server = FALSE;
+ disable_chuukei_server();
prt("¥µ¡¼¥Ð¤È¤ÎÀܳ¤¬ÀÚÃǤµ¤ì¤Þ¤·¤¿¡£", 0, 0);
inkey();
if (result <= 0)
{
/* ¥µ¡¼¥Ð¤È¤ÎÀܳÃÇ¡© */
- chuukei_server = FALSE;
+ disable_chuukei_server();
prt("¥µ¡¼¥Ð¤È¤ÎÀܳ¤¬ÀÚÃǤµ¤ì¤Þ¤·¤¿¡£", 0, 0);
inkey();
return (TRUE);
}
-void send_text_to_chuukei_server(int x, int y, int len, int col, char *str)
+static errr send_text_to_chuukei_server(int x, int y, int len, byte col, cptr str)
{
char buf[1024];
char buf2[1024];
- if (!chuukei_server || Term != angband_term[0]) return;
-
strncpy(buf2, str, len);
buf2[len] = '\0';
}
insert_ringbuf(buf);
+
+ return (*old_text_hook)(x, y, len, col, str);
}
-void send_wipe_to_chuukei_server(int x, int y, int len)
+static errr send_wipe_to_chuukei_server(int x, int y, int len)
{
char buf[1024];
- if (!chuukei_server || Term != angband_term[0]) return;
-
sprintf(buf, "w%c%c%c", x+1, y+1, len);
insert_ringbuf(buf);
+
+ return (*old_wipe_hook)(x, y, len);
}
-void send_xtra_to_chuukei_server(int n)
+static errr send_xtra_to_chuukei_server(int n, int v)
{
char buf[1024];
- if (!chuukei_server || Term != angband_term[0]) return;
- sprintf(buf, "x%c", n+1);
+ (void)v;
- insert_ringbuf(buf);
-
- if (n == TERM_XTRA_FRESH)
+ if (n == TERM_XTRA_CLEAR || n == TERM_XTRA_FRESH || n == TERM_XTRA_SHAPE)
{
- sprintf(buf, "d%ld", get_current_time() - epoch_time);
+ sprintf(buf, "x%c", n+1);
+
insert_ringbuf(buf);
+
+ if (n == TERM_XTRA_FRESH)
+ {
+ sprintf(buf, "d%ld", get_current_time() - epoch_time);
+ insert_ringbuf(buf);
+ }
}
+
+ /* Verify the hook */
+ if (!old_xtra_hook) return -1;
+
+ return (*old_xtra_hook)(n, v);
}
-void send_curs_to_chuukei_server(int x, int y)
+static errr send_curs_to_chuukei_server(int x, int y)
{
char buf[1024];
- if (!chuukei_server || Term != angband_term[0]) return;
sprintf(buf, "c%c%c", x+1, y+1);
insert_ringbuf(buf);
+
+ return (*old_curs_hook)(x, y);
}
+static errr send_bigcurs_to_chuukei_server(int x, int y)
+{
+ char buf[1024];
+
+ sprintf(buf, "C%c%c", x+1, y+1);
+
+ insert_ringbuf(buf);
+
+ return (*old_bigcurs_hook)(x, y);
+}
+
+
+/*
+ * Prepare z-term hooks to call send_*_to_chuukei_server()'s
+ */
+void prepare_chuukei_hooks(void)
+{
+ term *t0 = angband_term[0];
+
+ /* Save original z-term hooks */
+ old_xtra_hook = t0->xtra_hook;
+ old_curs_hook = t0->curs_hook;
+ old_bigcurs_hook = t0->bigcurs_hook;
+ old_wipe_hook = t0->wipe_hook;
+ old_text_hook = t0->text_hook;
+
+ /* Prepare z-term hooks */
+ t0->xtra_hook = send_xtra_to_chuukei_server;
+ t0->curs_hook = send_curs_to_chuukei_server;
+ t0->bigcurs_hook = send_bigcurs_to_chuukei_server;
+ t0->wipe_hook = send_wipe_to_chuukei_server;
+ t0->text_hook = send_text_to_chuukei_server;
+}
+
+
static int read_sock(void)
{
char buf[1024];
case 'c':
(void)((*angband_term[0]->curs_hook)(x, y));
break;
+ case 'C':
+ (void)((*angband_term[0]->bigcurs_hook)(x, y));
+ break;
}
}