}
#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();
#endif
}
-#ifdef SJIS
-static void sjis2euc(char *str)
-{
- int i, l;
- unsigned char c1, c2;
- int kanji = 0;
- int iseuc = 1;
- l = strlen(str);
-
- for (i = 0; i < l; i++)
- {
- c1 = str[i];
- if (c1 & 0x80) kanji = 1;
- if (c1>=0x80 && (c1 < 0xa1 || c1 > 0xfe)) iseuc = 0;
- }
-
- if (kanji && !iseuc)
- {
- unsigned char tmp[256];
-
- for (i = 0; i < l; i++)
- {
- c1 = str[i];
- if (c1 & 0x80)
- {
- i++;
- c2 = str[i];
- if (c2 >= 0x9f)
- {
- c1 = c1 * 2 - (c1 >= 0xe0 ? 0xe0 : 0x60);
- c2 += 2;
- }
- else
- {
- c1 = c1 * 2 - (c1 >= 0xe0 ? 0xe1 : 0x61);
- c2 += 0x60 + (c2 < 0x7f);
- }
- tmp[i - 1] = c1;
- tmp[i] = c2;
- }
- else
- tmp[i] = c1;
- }
- tmp[l] = 0;
- strcpy(str, tmp);
- }
-}
-
-static void euc2sjis(char *str)
-{
- int i, l;
- unsigned char c1, c2;
- int kanji = 0;
- int iseuc = 1;
- l = strlen(str);
-
- for (i = 0; i < l; i++)
- {
- c1 = str[i];
- if (c1 & 0x80) kanji = 1;
- if (c1>=0x80 && (c1 < 0xa1 || c1 > 0xfe)) iseuc = 0;
- }
- if (kanji && iseuc)
- {
- unsigned char tmp[256];
-
- for (i = 0; i < l; i++)
- {
- c1 = str[i];
- if (c1 & 0x80)
- {
- i++;
- c2 = str[i];
- if (c1 % 2)
- {
- c1 = (c1 >> 1) + (c1 < 0xdf ? 0x31 : 0x71);
- c2 -= 0x60 + (c2 < 0xe0);
- }
- else
- {
- c1 = (c1 >> 1) + (c1 < 0xdf ? 0x30 : 0x70);
- c2 -= 2;
- }
-
- tmp[i - 1] = c1;
- tmp[i] = c2;
- }
- else
- tmp[i] = c1;
- }
- tmp[l] = 0;
- strcpy(str, tmp);
- }
-}
-#endif
/* str¤¬Æ±¤¸Ê¸»ú¤Î·«¤êÊÖ¤·¤«¤É¤¦¤«Ä´¤Ù¤ë */
static bool string_is_repeat(char *str, int len)
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;
}
}