}
#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()
+static errr init_chuukei(void)
{
fresh_queue.next = fresh_queue.tail = 0;
ring.wptr = ring.rptr = ring.inlen = 0;
/* ¥Ð¥Ã¥Õ¥¡¤ò¥ª¡¼¥Ð¡¼ */
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();
char buf[1024];
FILE *fp;
- path_build(buf, 1024, ANGBAND_DIR_XTRA, prf_name);
+ path_build(buf, sizeof(buf), ANGBAND_DIR_XTRA, prf_name);
fp = my_fopen(buf, "r");
if (!fp) return (-1);
server_name[0] = 0;
browse_delay = DEFAULT_DELAY;
- while (0 == my_fgets(fp, buf, 1024))
+ while (0 == my_fgets(fp, buf, sizeof(buf)))
{
/* ¥µ¡¼¥Ð̾ */
if (!strncmp(buf, "server:", 7))
{
- strncpy(server_name, buf + 7, MAX_HOSTNAME);
+ strncpy(server_name, buf + 7, MAX_HOSTNAME - 1);
+ server_name[MAX_HOSTNAME - 1] = '\0';
}
/* ¥Ý¡¼¥ÈÈÖ¹æ */
}
ask.sin_family = AF_INET;
- ask.sin_port = htons(server_port);
+ ask.sin_port = htons((unsigned short)server_port);
#ifndef WINDOWS
if ((sd=socket(PF_INET,SOCK_STREAM, 0)) < 0)
bind = (err == noErr);
}
if (err == noErr){
- OTInitInetAddress(&inAddr, server_port, host_addr);
+ OTInitInetAddress(&inAddr, server_port, host_addr);
sndCall.addr.len = sizeof(InetAddress);
sndCall.addr.buf = (unsigned char*) &inAddr;
- sndCall.opt.buf = nil; // no connection options
+ sndCall.opt.buf = nil; /* no connection options */
sndCall.opt.len = 0;
- sndCall.udata.buf = nil; // no connection data
+ sndCall.udata.buf = nil; /* no connection data */
sndCall.udata.len = 0;
- sndCall.sequence = 0; // ignored by OTConnect
+ sndCall.sequence = 0; /* ignored by OTConnect */
err = OTConnect(ep, &sndCall, NULL);
#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];
#ifndef WINDOWS
-/* WinÈǤÎÃæÅÀ¤ÈÊɤÎƦÉå¤ò¥Ô¥ê¥ª¥É¤È¥·¥ã¡¼¥×¤Ë¤¹¤ë¡£*/
-void win2unix(int col, char *buf)
+/* WinÈǤÎÃæÅÀ¤ÈÊɤÎƦÉå¤ò¥Ô¥ê¥ª¥É¤È¥·¥ã¡¼¥×¤Ë¤¹¤ë¡£ */
+static void win2unix(int col, char *buf)
{
char kabe;
if ( col == 9 ) kabe = '%';
#ifdef SJIS
euc2sjis(mesg);
#endif
- (void)((*angband_term[0]->text_hook)(x, y, len, col, mesg));
+ (void)((*angband_term[0]->text_hook)(x, y, len, (byte)col, mesg));
strncpy(&Term->scr->c[y][x], mesg, len);
for (i = x; i < x+len; i++)
{
mesg[i] = mesg[0];
}
mesg[i] = '\0';
- (void)((*angband_term[0]->text_hook)(x, y, len, col, mesg));
+ (void)((*angband_term[0]->text_hook)(x, y, len, (byte)col, mesg));
strncpy(&Term->scr->c[y][x], mesg, len);
for (i = x; i < x+len; i++)
{
break;
case 's': /* °ìʸ»ú */
- (void)((*angband_term[0]->text_hook)(x, y, 1, col, mesg));
+ (void)((*angband_term[0]->text_hook)(x, y, 1, (byte)col, mesg));
strncpy(&Term->scr->c[y][x], mesg, 1);
Term->scr->a[y][x] = col;
break;
case 'c':
(void)((*angband_term[0]->curs_hook)(x, y));
break;
+ case 'C':
+ (void)((*angband_term[0]->bigcurs_hook)(x, y));
+ break;
}
}