#include "util/angband-files.h"
#include "view/display-messages.h"
-#include <stdio.h>
-#include <stdarg.h>
#include <ctype.h>
+#include <stdarg.h>
+#include <stdio.h>
#ifdef WINDOWS
#include <windows.h>
#endif
#if defined(WINDOWS)
#include <winsock.h>
#else
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
+#include <arpa/inet.h>
#include <netdb.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
#include <sys/time.h>
-#include <arpa/inet.h>
+#include <sys/types.h>
#include <setjmp.h>
#include <signal.h>
#define MAX_HOSTNAME 256
#endif
-#define RINGBUF_SIZE 1024*1024
+#define RINGBUF_SIZE 1024 * 1024
#define FRESH_QUEUE_SIZE 4096
#ifdef WINDOWS
#define WAIT 100
#else
-#define WAIT 100*1000 /* ブラウズ側のウエイト(us単位) */
+#define WAIT 100 * 1000 /* ブラウズ側のウエイト(us単位) */
#endif
#define DEFAULT_DELAY 50
#define RECVBUF_SIZE 1024
int server_port;
#endif
-static long epoch_time; /* バッファ開始時刻 */
+static long epoch_time; /* バッファ開始時刻 */
static int browse_delay; /* 表示するまでの時間(100ms単位)(この間にラグを吸収する) */
#ifdef CHUUKEI
static int sd; /* ソケットのファイルディスクリプタ */
-static long time_diff; /* プレイ側との時間のずれ(これを見ながらディレイを調整していく) */
+static long time_diff; /* プレイ側との時間のずれ(これを見ながらディレイを調整していく) */
static int server_port;
static GAME_TEXT server_name[MAX_HOSTNAME];
#endif
#endif
/* 描画する時刻を覚えておくキュー構造体 */
-static struct
-{
- int time[FRESH_QUEUE_SIZE];
- int next;
- int tail;
-}fresh_queue;
-
+static struct {
+ int time[FRESH_QUEUE_SIZE];
+ int next;
+ int tail;
+} fresh_queue;
/* リングバッファ構造体 */
-static struct
-{
- char *buf;
- int wptr;
- int rptr;
- int inlen;
-}ring;
+static struct {
+ char *buf;
+ int wptr;
+ int rptr;
+ int inlen;
+} ring;
/*
* Original hooks
static void disable_chuukei_server(void)
{
- term *t = angband_term[0];
+ term *t = angband_term[0];
#ifdef CHUUKEI
- chuukei_server = FALSE;
+ chuukei_server = FALSE;
#endif /* CHUUKEI */
- 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;
+ 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_buffer(void)
{
- fresh_queue.next = fresh_queue.tail = 0;
- ring.wptr = ring.rptr = ring.inlen = 0;
- fresh_queue.time[0] = 0;
- ring.buf = malloc(RINGBUF_SIZE);
- if (ring.buf == NULL) return -1;
-
- return 0;
+ fresh_queue.next = fresh_queue.tail = 0;
+ ring.wptr = ring.rptr = ring.inlen = 0;
+ fresh_queue.time[0] = 0;
+ ring.buf = malloc(RINGBUF_SIZE);
+ if (ring.buf == NULL)
+ return -1;
+
+ return 0;
}
/* 現在の時間を100ms単位で取得する */
static long get_current_time(void)
{
#ifdef WINDOWS
- return timeGetTime() / 100;
+ return timeGetTime() / 100;
#else
- struct timeval tv;
- gettimeofday(&tv, NULL);
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
- return (tv.tv_sec * 10 + tv.tv_usec / 100000);
+ return (tv.tv_sec * 10 + tv.tv_usec / 100000);
#endif
}
-
/* リングバッファ構造体に buf の内容を加える */
static errr insert_ringbuf(char *buf)
{
- int len;
- len = strlen(buf) + 1; /* +1は終端文字分 */
+ int len;
+ len = strlen(buf) + 1; /* +1は終端文字分 */
- if (movie_mode)
- {
- fd_write(movie_fd, buf, len);
+ if (movie_mode) {
+ fd_write(movie_fd, buf, len);
#ifdef CHUUKEI
- if (!chuukei_server) return 0;
+ if (!chuukei_server)
+ return 0;
#else
- return 0;
+ return 0;
#endif
- }
+ }
- /* バッファをオーバー */
- if (ring.inlen + len >= RINGBUF_SIZE)
- {
+ /* バッファをオーバー */
+ if (ring.inlen + len >= RINGBUF_SIZE) {
#ifdef CHUUKEI
- if (chuukei_server) disable_chuukei_server();
- else chuukei_client = FALSE;
+ if (chuukei_server)
+ disable_chuukei_server();
+ else
+ chuukei_client = FALSE;
- prt("送受信バッファが溢れました。サーバとの接続を切断します。", 0, 0);
- inkey();
+ prt("送受信バッファが溢れました。サーバとの接続を切断します。", 0, 0);
+ inkey();
- close(sd);
+ close(sd);
#endif
- return -1;
- }
-
- /* バッファの終端までに収まる */
- if (ring.wptr + len < RINGBUF_SIZE)
- {
- memcpy(ring.buf + ring.wptr, buf, len);
- ring.wptr += len;
- }
- /* バッファの終端までに収まらない(ピッタリ収まる場合も含む) */
- else
- {
- int head = RINGBUF_SIZE - ring.wptr; /* 前半 */
- int tail = len - head; /* 後半 */
-
- memcpy(ring.buf + ring.wptr, buf, head);
- memcpy(ring.buf, buf + head, tail);
- ring.wptr = tail;
- }
-
- ring.inlen += len;
-
- /* Success */
- return 0;
+ return -1;
+ }
+
+ /* バッファの終端までに収まる */
+ if (ring.wptr + len < RINGBUF_SIZE) {
+ memcpy(ring.buf + ring.wptr, buf, len);
+ ring.wptr += len;
+ }
+ /* バッファの終端までに収まらない(ピッタリ収まる場合も含む) */
+ else {
+ int head = RINGBUF_SIZE - ring.wptr; /* 前半 */
+ int tail = len - head; /* 後半 */
+
+ memcpy(ring.buf + ring.wptr, buf, head);
+ memcpy(ring.buf, buf + head, tail);
+ ring.wptr = tail;
+ }
+
+ ring.inlen += len;
+
+ /* Success */
+ return 0;
}
#ifdef CHUUKEI
void flush_ringbuf(void)
{
- fd_set fdset;
- struct timeval tv;
+ fd_set fdset;
+ struct timeval tv;
- if (!chuukei_server) return;
+ if (!chuukei_server)
+ return;
- if (ring.inlen == 0) return;
+ if (ring.inlen == 0)
+ return;
- tv.tv_sec = 0;
- tv.tv_usec = 0;
+ tv.tv_sec = 0;
+ tv.tv_usec = 0;
- FD_ZERO(&fdset);
- FD_SET(sd, &fdset);
+ FD_ZERO(&fdset);
+ FD_SET(sd, &fdset);
- while (TRUE)
- {
- fd_set tmp_fdset;
- int result;
+ while (TRUE) {
+ fd_set tmp_fdset;
+ int result;
- tmp_fdset = fdset;
+ tmp_fdset = fdset;
- /* ソケットにデータを書き込めるかどうか調べる */
- select(sd+1, (fd_set *)NULL, &tmp_fdset, (fd_set *)NULL, &tv);
+ /* ソケットにデータを書き込めるかどうか調べる */
+ select(sd + 1, (fd_set *)NULL, &tmp_fdset, (fd_set *)NULL, &tv);
- /* 書き込めなければ戻る */
- if (FD_ISSET(sd, &tmp_fdset) == 0) break;
+ /* 書き込めなければ戻る */
+ if (FD_ISSET(sd, &tmp_fdset) == 0)
+ break;
- result = send(sd, ring.buf + ring.rptr, ((ring.wptr > ring.rptr ) ? ring.wptr : RINGBUF_SIZE) - ring.rptr, 0);
+ result = send(sd, ring.buf + ring.rptr, ((ring.wptr > ring.rptr) ? ring.wptr : RINGBUF_SIZE) - ring.rptr, 0);
- if (result <= 0)
- {
- /* サーバとの接続断? */
- if (chuukei_server) disable_chuukei_server();
+ if (result <= 0) {
+ /* サーバとの接続断? */
+ if (chuukei_server)
+ disable_chuukei_server();
- prt("サーバとの接続が切断されました。", 0, 0);
- inkey();
- close(sd);
+ prt("サーバとの接続が切断されました。", 0, 0);
+ inkey();
+ close(sd);
- return;
- }
+ return;
+ }
- ring.rptr += result;
- ring.inlen -= result;
+ ring.rptr += result;
+ ring.inlen -= result;
- if (ring.rptr == RINGBUF_SIZE) ring.rptr = 0;
- if (ring.inlen == 0) break;
- }
+ if (ring.rptr == RINGBUF_SIZE)
+ ring.rptr = 0;
+ if (ring.inlen == 0)
+ break;
+ }
}
-
static int read_chuukei_prf(concptr prf_name)
{
- char buf[1024];
- FILE *fp;
-
- path_build(buf, sizeof(buf), ANGBAND_DIR_XTRA, prf_name);
- fp = angband_fopen(buf, "r");
-
- if (!fp) return -1;
-
- /* 初期化 */
- server_port = -1;
- server_name[0] = 0;
- browse_delay = DEFAULT_DELAY;
-
- while (0 == angband_fgets(fp, buf, sizeof(buf)))
- {
- /* サーバ名 */
- if (!strncmp(buf, "server:", 7))
- {
- strncpy(server_name, buf + 7, MAX_HOSTNAME - 1);
- server_name[MAX_HOSTNAME - 1] = '\0';
- }
-
- /* ポート番号 */
- if (!strncmp(buf, "port:", 5))
- {
- server_port = atoi(buf + 5);
- }
-
- /* ディレイ */
- if (!strncmp(buf, "delay:", 6))
- {
- browse_delay = atoi(buf + 6);
- }
- }
-
- angband_fclose(fp);
-
- /* prfファイルが完全でない */
- if (server_port == -1 || server_name[0] == 0) return -1;
-
- return 0;
+ char buf[1024];
+ FILE *fp;
+
+ path_build(buf, sizeof(buf), ANGBAND_DIR_XTRA, prf_name);
+ fp = angband_fopen(buf, "r");
+
+ if (!fp)
+ return -1;
+
+ /* 初期化 */
+ server_port = -1;
+ server_name[0] = 0;
+ browse_delay = DEFAULT_DELAY;
+
+ while (0 == angband_fgets(fp, buf, sizeof(buf))) {
+ /* サーバ名 */
+ if (!strncmp(buf, "server:", 7)) {
+ strncpy(server_name, buf + 7, MAX_HOSTNAME - 1);
+ server_name[MAX_HOSTNAME - 1] = '\0';
+ }
+
+ /* ポート番号 */
+ if (!strncmp(buf, "port:", 5)) {
+ server_port = atoi(buf + 5);
+ }
+
+ /* ディレイ */
+ if (!strncmp(buf, "delay:", 6)) {
+ browse_delay = atoi(buf + 6);
+ }
+ }
+
+ angband_fclose(fp);
+
+ /* prfファイルが完全でない */
+ if (server_port == -1 || server_name[0] == 0)
+ return -1;
+
+ return 0;
}
int connect_chuukei_server(char *prf_name)
{
#ifdef WINDOWS
- WSADATA wsaData;
- WORD wVersionRequested = (WORD) (( 1) | ( 1 << 8));
+ WSADATA wsaData;
+ WORD wVersionRequested = (WORD)((1) | (1 << 8));
#endif
- struct sockaddr_in ask;
- struct hostent *hp;
+ struct sockaddr_in ask;
+ struct hostent *hp;
- if (read_chuukei_prf(prf_name) < 0)
- {
- printf("Wrong prf file\n");
- return -1;
- }
+ if (read_chuukei_prf(prf_name) < 0) {
+ printf("Wrong prf file\n");
+ return -1;
+ }
- if (init_buffer() < 0)
- {
- printf("Malloc error\n");
- return -1;
- }
+ if (init_buffer() < 0) {
+ printf("Malloc error\n");
+ return -1;
+ }
#ifdef WINDOWS
- if (WSAStartup(wVersionRequested, &wsaData))
- {
- msg_print("Report: WSAStartup failed.");
- return -1;
- }
+ if (WSAStartup(wVersionRequested, &wsaData)) {
+ msg_print("Report: WSAStartup failed.");
+ return -1;
+ }
#endif
- printf("server = %s\nport = %d\n", server_name, server_port);
-
- if ((hp = gethostbyname(server_name)) != NULL)
- {
- memset(&ask, 0, sizeof(ask));
- memcpy(&ask.sin_addr, hp->h_addr_list[0], hp->h_length);
- }
- else
- {
- if ((ask.sin_addr.s_addr=inet_addr(server_name)) == 0)
- {
- printf("Bad hostname\n");
- return -1;
- }
- }
-
- ask.sin_family = AF_INET;
- ask.sin_port = htons((unsigned short)server_port);
+ printf("server = %s\nport = %d\n", server_name, server_port);
+
+ if ((hp = gethostbyname(server_name)) != NULL) {
+ memset(&ask, 0, sizeof(ask));
+ memcpy(&ask.sin_addr, hp->h_addr_list[0], hp->h_length);
+ } else {
+ if ((ask.sin_addr.s_addr = inet_addr(server_name)) == 0) {
+ printf("Bad hostname\n");
+ return -1;
+ }
+ }
+
+ ask.sin_family = AF_INET;
+ ask.sin_port = htons((unsigned short)server_port);
#ifndef WINDOWS
- if ((sd=socket(PF_INET,SOCK_STREAM, 0)) < 0)
+ if ((sd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
#else
- if ((sd=socket(PF_INET,SOCK_STREAM, 0)) == INVALID_SOCKET)
+ if ((sd = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
#endif
- {
- printf("Can't create socket\n");
- return -1;
- }
-
- if (connect(sd, (struct sockaddr *)&ask, sizeof(ask)) < 0)
- {
- close(sd);
- printf("Can't connect %s port %d\n", server_name, server_port);
- return -1;
- }
-
- return 0;
+ {
+ printf("Can't create socket\n");
+ return -1;
+ }
+
+ if (connect(sd, (struct sockaddr *)&ask, sizeof(ask)) < 0) {
+ close(sd);
+ printf("Can't connect %s port %d\n", server_name, server_port);
+ return -1;
+ }
+
+ return 0;
}
#endif /* CHUUKEI */
/* strが同じ文字の繰り返しかどうか調べる */
static bool string_is_repeat(char *str, int len)
{
- char c = str[0];
- int i;
+ char c = str[0];
+ int i;
- if (len < 2) return FALSE;
+ if (len < 2)
+ return FALSE;
#ifdef JP
- if (iskanji(c)) return FALSE;
+ if (iskanji(c))
+ return FALSE;
#endif
- for (i = 1; i < len; i++)
- {
+ for (i = 1; i < len; i++) {
#ifdef JP
- if(c != str[i] || iskanji(str[i])) return FALSE;
+ if (c != str[i] || iskanji(str[i]))
+ return FALSE;
#else
- if(c != str[i]) return FALSE;
+ if (c != str[i])
+ return FALSE;
#endif
- }
+ }
- return TRUE;
+ return TRUE;
}
static errr send_text_to_chuukei_server(TERM_LEN x, TERM_LEN y, int len, TERM_COLOR col, concptr str)
{
- char buf[1024];
- char buf2[1024];
-
- strncpy(buf2, str, len);
- buf2[len] = '\0';
-
- if (len == 1)
- {
- sprintf(buf, "s%c%c%c%c", x+1, y+1, col, buf2[0]);
- }
- else if(string_is_repeat(buf2, len))
- {
- int i;
- for (i = len; i > 0; i -= 127)
- {
- sprintf(buf, "n%c%c%c%c%c", x+1, y+1, MIN(i, 127), col, buf2[0]);
- }
- }
- else
- {
+ char buf[1024];
+ char buf2[1024];
+
+ strncpy(buf2, str, len);
+ buf2[len] = '\0';
+
+ if (len == 1) {
+ sprintf(buf, "s%c%c%c%c", x + 1, y + 1, col, buf2[0]);
+ } else if (string_is_repeat(buf2, len)) {
+ int i;
+ for (i = len; i > 0; i -= 127) {
+ sprintf(buf, "n%c%c%c%c%c", x + 1, y + 1, MIN(i, 127), col, buf2[0]);
+ }
+ } else {
#if defined(SJIS) && defined(JP)
- sjis2euc(buf2);
+ sjis2euc(buf2);
#endif
- sprintf(buf, "t%c%c%c%c%s", x+1, y+1, len, col, buf2);
- }
+ sprintf(buf, "t%c%c%c%c%s", x + 1, y + 1, len, col, buf2);
+ }
- insert_ringbuf(buf);
+ insert_ringbuf(buf);
- return (*old_text_hook)(x, y, len, col, str);
+ return (*old_text_hook)(x, y, len, col, str);
}
static errr send_wipe_to_chuukei_server(int x, int y, int len)
{
- char buf[1024];
+ char buf[1024];
- sprintf(buf, "w%c%c%c", x+1, y+1, len);
+ sprintf(buf, "w%c%c%c", x + 1, y + 1, len);
- insert_ringbuf(buf);
+ insert_ringbuf(buf);
- return (*old_wipe_hook)(x, y, len);
+ return (*old_wipe_hook)(x, y, len);
}
static errr send_xtra_to_chuukei_server(int n, int v)
{
- char buf[1024];
-
- if (n == TERM_XTRA_CLEAR || n == TERM_XTRA_FRESH || n == TERM_XTRA_SHAPE)
- {
- 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);
+ char buf[1024];
+
+ if (n == TERM_XTRA_CLEAR || n == TERM_XTRA_FRESH || n == TERM_XTRA_SHAPE) {
+ 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);
}
static errr send_curs_to_chuukei_server(int x, int y)
{
- char buf[1024];
+ char buf[1024];
- sprintf(buf, "c%c%c", x+1, y+1);
+ sprintf(buf, "c%c%c", x + 1, y + 1);
- insert_ringbuf(buf);
+ insert_ringbuf(buf);
- return (*old_curs_hook)(x, y);
+ return (*old_curs_hook)(x, y);
}
static errr send_bigcurs_to_chuukei_server(int x, int y)
{
- char buf[1024];
+ char buf[1024];
- sprintf(buf, "C%c%c", x+1, y+1);
+ sprintf(buf, "C%c%c", x + 1, y + 1);
- insert_ringbuf(buf);
+ insert_ringbuf(buf);
- return (*old_bigcurs_hook)(x, y);
+ 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;
+ 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;
}
-
/*
* Prepare z-term hooks to call send_*_to_chuukei_server()'s
*/
-void prepare_movie_hooks(void)
+void prepare_movie_hooks(player_type *player_ptr)
{
- char buf[1024];
- char tmp[80];
+ char buf[1024];
+ char tmp[80];
- if (movie_mode)
- {
- movie_mode = 0;
+ if (movie_mode) {
+ movie_mode = 0;
#ifdef CHUUKEI
- if (!chuukei_server) disable_chuukei_server();
+ if (!chuukei_server)
+ disable_chuukei_server();
#else
- disable_chuukei_server();
+ disable_chuukei_server();
#endif
- fd_close(movie_fd);
- msg_print(_("録画を終了しました。", "Stopped recording."));
- }
- else
- {
- sprintf(tmp, "%s.amv", p_ptr->base_name);
- if (get_string(_("ムービー記録ファイル: ", "Movie file name: "), tmp, 80))
- {
- int fd;
-
- path_build(buf, sizeof(buf), ANGBAND_DIR_USER, tmp);
-
- fd = fd_open(buf, O_RDONLY);
-
- /* Existing file */
- if (fd >= 0)
- {
- char out_val[160];
- (void)fd_close(fd);
-
- /* Build query */
- (void)sprintf(out_val, _("現存するファイルに上書きしますか? (%s)", "Replace existing file %s? "), buf);
-
- /* Ask */
- if (!get_check(out_val)) return;
-
- movie_fd = fd_open(buf, O_WRONLY | O_TRUNC);
- }
- else
- {
- movie_fd = fd_make(buf, 0644);
- }
-
- if (!movie_fd)
- {
- msg_print(_("ファイルを開けません!", "Can not open file."));
- return;
- }
-
- movie_mode = 1;
+ fd_close(movie_fd);
+ msg_print(_("録画を終了しました。", "Stopped recording."));
+ } else {
+ sprintf(tmp, "%s.amv", player_ptr->base_name);
+ if (get_string(_("ムービー記録ファイル: ", "Movie file name: "), tmp, 80)) {
+ int fd;
+
+ path_build(buf, sizeof(buf), ANGBAND_DIR_USER, tmp);
+
+ fd = fd_open(buf, O_RDONLY);
+
+ /* Existing file */
+ if (fd >= 0) {
+ char out_val[160];
+ (void)fd_close(fd);
+
+ /* Build query */
+ (void)sprintf(out_val, _("現存するファイルに上書きしますか? (%s)", "Replace existing file %s? "), buf);
+
+ /* Ask */
+ if (!get_check(out_val))
+ return;
+
+ movie_fd = fd_open(buf, O_WRONLY | O_TRUNC);
+ } else {
+ movie_fd = fd_make(buf, 0644);
+ }
+
+ if (!movie_fd) {
+ msg_print(_("ファイルを開けません!", "Can not open file."));
+ return;
+ }
+
+ movie_mode = 1;
#ifdef CHUUKEI
- if (!chuukei_server) prepare_chuukei_hooks();
+ if (!chuukei_server)
+ prepare_chuukei_hooks();
#else
- prepare_chuukei_hooks();
+ prepare_chuukei_hooks();
#endif
- do_cmd_redraw(p_ptr);
- }
- }
+ do_cmd_redraw(player_ptr);
+ }
+ }
}
#ifdef CHUUKEI
static int handle_timestamp_data(int timestamp)
{
- long current_time = get_current_time();
-
- /* 描画キューは空かどうか? */
- if (fresh_queue.tail == fresh_queue.next)
- {
- /* バッファリングし始めの時間を保存しておく */
- epoch_time = current_time;
- epoch_time += browse_delay;
- epoch_time -= timestamp;
- time_diff = current_time - timestamp;
- }
-
- /* 描画キューに保存し、保存位置を進める */
- fresh_queue.time[fresh_queue.tail] = timestamp;
- fresh_queue.tail ++;
-
- /* キューの最後尾に到達したら先頭に戻す */
- fresh_queue.tail %= FRESH_QUEUE_SIZE;
-
- if (fresh_queue.tail == fresh_queue.next)
- {
- /* 描画キュー溢れ */
- prt("描画タイミングキューが溢れました。サーバとの接続を切断します。", 0, 0);
- inkey();
- close(sd);
-
- return -1;
- }
-
- /* プレイ側とのディレイを調整 */
- if (time_diff != current_time - timestamp)
- {
- long old_time_diff = time_diff;
- time_diff = current_time - timestamp;
- epoch_time -= (old_time_diff - time_diff);
- }
-
- /* Success */
- return 0;
+ long current_time = get_current_time();
+
+ /* 描画キューは空かどうか? */
+ if (fresh_queue.tail == fresh_queue.next) {
+ /* バッファリングし始めの時間を保存しておく */
+ epoch_time = current_time;
+ epoch_time += browse_delay;
+ epoch_time -= timestamp;
+ time_diff = current_time - timestamp;
+ }
+
+ /* 描画キューに保存し、保存位置を進める */
+ fresh_queue.time[fresh_queue.tail] = timestamp;
+ fresh_queue.tail++;
+
+ /* キューの最後尾に到達したら先頭に戻す */
+ fresh_queue.tail %= FRESH_QUEUE_SIZE;
+
+ if (fresh_queue.tail == fresh_queue.next) {
+ /* 描画キュー溢れ */
+ prt("描画タイミングキューが溢れました。サーバとの接続を切断します。", 0, 0);
+ inkey();
+ close(sd);
+
+ return -1;
+ }
+
+ /* プレイ側とのディレイを調整 */
+ if (time_diff != current_time - timestamp) {
+ long old_time_diff = time_diff;
+ time_diff = current_time - timestamp;
+ epoch_time -= (old_time_diff - time_diff);
+ }
+
+ /* Success */
+ return 0;
}
#endif /* CHUUKEI */
static int handle_movie_timestamp_data(int timestamp)
{
- static int initialized = FALSE;
-
- /* 描画キューは空かどうか? */
- if (!initialized)
- {
- /* バッファリングし始めの時間を保存しておく */
- epoch_time = get_current_time();
- epoch_time += browse_delay;
- epoch_time -= timestamp;
- //time_diff = current_time - timestamp;
- initialized = TRUE;
- }
-
- /* 描画キューに保存し、保存位置を進める */
- fresh_queue.time[fresh_queue.tail] = timestamp;
- fresh_queue.tail ++;
-
- /* キューの最後尾に到達したら先頭に戻す */
- fresh_queue.tail %= FRESH_QUEUE_SIZE;
-
- /* Success */
- return 0;
+ static int initialized = FALSE;
+
+ /* 描画キューは空かどうか? */
+ if (!initialized) {
+ /* バッファリングし始めの時間を保存しておく */
+ epoch_time = get_current_time();
+ epoch_time += browse_delay;
+ epoch_time -= timestamp;
+ // time_diff = current_time - timestamp;
+ initialized = TRUE;
+ }
+
+ /* 描画キューに保存し、保存位置を進める */
+ fresh_queue.time[fresh_queue.tail] = timestamp;
+ fresh_queue.tail++;
+
+ /* キューの最後尾に到達したら先頭に戻す */
+ fresh_queue.tail %= FRESH_QUEUE_SIZE;
+
+ /* Success */
+ return 0;
}
#ifdef CHUUKEI
static int read_sock(void)
{
- static char recv_buf[RECVBUF_SIZE];
- static int remain_bytes = 0;
- int recv_bytes;
- int i;
-
- /* 前回残ったデータの後につづけて配信サーバからデータ受信 */
- recv_bytes = recv(sd, recv_buf + remain_bytes, RECVBUF_SIZE - remain_bytes, 0);
-
- if (recv_bytes <= 0)
- return -1;
-
- /* 前回残ったデータ量に今回読んだデータ量を追加 */
- remain_bytes += recv_bytes;
-
- for (i = 0; i < remain_bytes; i ++)
- {
- /* データのくぎり('\0')を探す */
- if (recv_buf[i] == '\0')
- {
- /* 'd'で始まるデータ(タイムスタンプ)の場合は
- 描画キューに保存する処理を呼ぶ */
- if ((recv_buf[0] == 'd') &&
- (handle_timestamp_data(atoi(recv_buf + 1)) < 0))
- return -1;
-
- /* 受信データを保存 */
- if (insert_ringbuf(recv_buf) < 0)
- return -1;
-
- /* 次のデータ移行をrecv_bufの先頭に移動 */
- memmove(recv_buf, recv_buf + i + 1, remain_bytes - i - 1);
-
- remain_bytes -= (i+1);
- i = 0;
- }
- }
-
- return 0;
+ static char recv_buf[RECVBUF_SIZE];
+ static int remain_bytes = 0;
+ int recv_bytes;
+ int i;
+
+ /* 前回残ったデータの後につづけて配信サーバからデータ受信 */
+ recv_bytes = recv(sd, recv_buf + remain_bytes, RECVBUF_SIZE - remain_bytes, 0);
+
+ if (recv_bytes <= 0)
+ return -1;
+
+ /* 前回残ったデータ量に今回読んだデータ量を追加 */
+ remain_bytes += recv_bytes;
+
+ for (i = 0; i < remain_bytes; i++) {
+ /* データのくぎり('\0')を探す */
+ if (recv_buf[i] == '\0') {
+ /* 'd'で始まるデータ(タイムスタンプ)の場合は
+ 描画キューに保存する処理を呼ぶ */
+ if ((recv_buf[0] == 'd') && (handle_timestamp_data(atoi(recv_buf + 1)) < 0))
+ return -1;
+
+ /* 受信データを保存 */
+ if (insert_ringbuf(recv_buf) < 0)
+ return -1;
+
+ /* 次のデータ移行をrecv_bufの先頭に移動 */
+ memmove(recv_buf, recv_buf + i + 1, remain_bytes - i - 1);
+
+ remain_bytes -= (i + 1);
+ i = 0;
+ }
+ }
+
+ return 0;
}
#endif
static int read_movie_file(void)
{
- static char recv_buf[RECVBUF_SIZE];
- static int remain_bytes = 0;
- int recv_bytes;
- int i;
-
- recv_bytes = read(movie_fd, recv_buf + remain_bytes, RECVBUF_SIZE - remain_bytes);
-
- if (recv_bytes <= 0)
- return -1;
-
- /* 前回残ったデータ量に今回読んだデータ量を追加 */
- remain_bytes += recv_bytes;
-
- for (i = 0; i < remain_bytes; i ++)
- {
- /* データのくぎり('\0')を探す */
- if (recv_buf[i] == '\0')
- {
- /* 'd'で始まるデータ(タイムスタンプ)の場合は
- 描画キューに保存する処理を呼ぶ */
- if ((recv_buf[0] == 'd') &&
- (handle_movie_timestamp_data(atoi(recv_buf + 1)) < 0))
- return -1;
-
- /* 受信データを保存 */
- if (insert_ringbuf(recv_buf) < 0)
- return -1;
-
- /* 次のデータ移行をrecv_bufの先頭に移動 */
- memmove(recv_buf, recv_buf + i + 1, remain_bytes - i - 1);
-
- remain_bytes -= (i+1);
- i = 0;
- }
- }
-
- return 0;
-}
+ static char recv_buf[RECVBUF_SIZE];
+ static int remain_bytes = 0;
+ int recv_bytes;
+ int i;
+
+ recv_bytes = read(movie_fd, recv_buf + remain_bytes, RECVBUF_SIZE - remain_bytes);
+
+ if (recv_bytes <= 0)
+ return -1;
+
+ /* 前回残ったデータ量に今回読んだデータ量を追加 */
+ remain_bytes += recv_bytes;
+ for (i = 0; i < remain_bytes; i++) {
+ /* データのくぎり('\0')を探す */
+ if (recv_buf[i] == '\0') {
+ /* 'd'で始まるデータ(タイムスタンプ)の場合は
+ 描画キューに保存する処理を呼ぶ */
+ if ((recv_buf[0] == 'd') && (handle_movie_timestamp_data(atoi(recv_buf + 1)) < 0))
+ return -1;
+
+ /* 受信データを保存 */
+ if (insert_ringbuf(recv_buf) < 0)
+ return -1;
+
+ /* 次のデータ移行をrecv_bufの先頭に移動 */
+ memmove(recv_buf, recv_buf + i + 1, remain_bytes - i - 1);
+
+ remain_bytes -= (i + 1);
+ i = 0;
+ }
+ }
+
+ return 0;
+}
#ifndef WINDOWS
/* Win版の床の中点と壁の豆腐をピリオドとシャープにする。*/
static void win2unix(int col, char *buf)
{
- char kabe;
- if ( col == 9 ) kabe = '%';
- else kabe = '#';
+ char kabe;
+ if (col == 9)
+ kabe = '%';
+ else
+ kabe = '#';
- while (*buf)
- {
+ while (*buf) {
#ifdef JP
- if (iskanji(*buf))
- {
- buf += 2;
- continue;
- }
+ if (iskanji(*buf)) {
+ buf += 2;
+ continue;
+ }
#endif
- if (*buf == 127) *buf = kabe;
- else if(*buf == 31) *buf = '.';
- buf++;
- }
+ if (*buf == 127)
+ *buf = kabe;
+ else if (*buf == 31)
+ *buf = '.';
+ buf++;
+ }
}
#endif
static bool get_nextbuf(char *buf)
{
- char *ptr = buf;
+ char *ptr = buf;
- while (TRUE)
- {
- *ptr = ring.buf[ring.rptr ++];
- ring.inlen --;
- if (ring.rptr == RINGBUF_SIZE) ring.rptr = 0;
- if (*ptr++ == '\0') break;
- }
+ while (TRUE) {
+ *ptr = ring.buf[ring.rptr++];
+ ring.inlen--;
+ if (ring.rptr == RINGBUF_SIZE)
+ ring.rptr = 0;
+ if (*ptr++ == '\0')
+ break;
+ }
- if (buf[0] == 'd') return FALSE;
+ if (buf[0] == 'd')
+ return FALSE;
- return TRUE;
+ return TRUE;
}
/* プレイホストのマップが大きいときクライアントのマップもリサイズする */
static void update_term_size(int x, int y, int len)
{
- int ox, oy;
- int nx, ny;
- Term_get_size(&ox, &oy);
- nx = ox;
- ny = oy;
-
- /* 横方向のチェック */
- if (x + len > ox) nx = x + len;
- /* 縦方向のチェック */
- if (y + 1 > oy) ny = y + 1;
-
- if (nx != ox || ny != oy) Term_resize(nx, ny);
+ int ox, oy;
+ int nx, ny;
+ Term_get_size(&ox, &oy);
+ nx = ox;
+ ny = oy;
+
+ /* 横方向のチェック */
+ if (x + len > ox)
+ nx = x + len;
+ /* 縦方向のチェック */
+ if (y + 1 > oy)
+ ny = y + 1;
+
+ if (nx != ox || ny != oy)
+ Term_resize(nx, ny);
}
static bool flush_ringbuf_client(void)
{
- char buf[1024];
-
- /* 書くデータなし */
- if (fresh_queue.next == fresh_queue.tail) return FALSE;
-
- /* まだ書くべき時でない */
- if (fresh_queue.time[fresh_queue.next] > get_current_time() - epoch_time) return FALSE;
-
- /* 時間情報(区切り)が得られるまで書く */
- while (get_nextbuf(buf))
- {
- char id;
- int x, y, len;
- TERM_COLOR col;
- int i;
- unsigned char tmp1, tmp2, tmp3, tmp4;
- char *mesg;
-
- sscanf(buf, "%c%c%c%c%c", &id, &tmp1, &tmp2, &tmp3, &tmp4);
- x = tmp1-1; y = tmp2-1; len = tmp3; col = tmp4;
- if (id == 's')
- {
- col = tmp3;
- mesg = &buf[4];
- }
- else mesg = &buf[5];
+ char buf[1024];
+
+ /* 書くデータなし */
+ if (fresh_queue.next == fresh_queue.tail)
+ return FALSE;
+
+ /* まだ書くべき時でない */
+ if (fresh_queue.time[fresh_queue.next] > get_current_time() - epoch_time)
+ return FALSE;
+
+ /* 時間情報(区切り)が得られるまで書く */
+ while (get_nextbuf(buf)) {
+ char id;
+ int x, y, len;
+ TERM_COLOR col;
+ int i;
+ unsigned char tmp1, tmp2, tmp3, tmp4;
+ char *mesg;
+
+ sscanf(buf, "%c%c%c%c%c", &id, &tmp1, &tmp2, &tmp3, &tmp4);
+ x = tmp1 - 1;
+ y = tmp2 - 1;
+ len = tmp3;
+ col = tmp4;
+ if (id == 's') {
+ col = tmp3;
+ mesg = &buf[4];
+ } else
+ mesg = &buf[5];
#ifndef WINDOWS
- win2unix(col, mesg);
+ win2unix(col, mesg);
#endif
- switch (id)
- {
- case 't': /* 通常 */
+ switch (id) {
+ case 't': /* 通常 */
#if defined(SJIS) && defined(JP)
- euc2sjis(mesg);
+ euc2sjis(mesg);
#endif
- update_term_size(x, y, len);
- (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++)
- {
- Term->scr->a[y][i] = col;
- }
- break;
-
- case 'n': /* 繰り返し */
- for (i = 1; i < len; i++)
- {
- mesg[i] = mesg[0];
- }
- mesg[i] = '\0';
- update_term_size(x, y, len);
- (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++)
- {
- Term->scr->a[y][i] = col;
- }
- break;
-
- case 's': /* 一文字 */
- update_term_size(x, y, 1);
- (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 'w':
- update_term_size(x, y, len);
- (void)((*angband_term[0]->wipe_hook)(x, y, len));
- break;
-
- case 'x':
- if (x == TERM_XTRA_CLEAR) Term_clear();
- (void)((*angband_term[0]->xtra_hook)(x, 0));
- break;
-
- case 'c':
- update_term_size(x, y, 1);
- (void)((*angband_term[0]->curs_hook)(x, y));
- break;
- case 'C':
- update_term_size(x, y, 1);
- (void)((*angband_term[0]->bigcurs_hook)(x, y));
- break;
- }
- }
-
- fresh_queue.next++;
- if (fresh_queue.next == FRESH_QUEUE_SIZE) fresh_queue.next = 0;
- return TRUE;
+ update_term_size(x, y, len);
+ (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++) {
+ Term->scr->a[y][i] = col;
+ }
+ break;
+
+ case 'n': /* 繰り返し */
+ for (i = 1; i < len; i++) {
+ mesg[i] = mesg[0];
+ }
+ mesg[i] = '\0';
+ update_term_size(x, y, len);
+ (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++) {
+ Term->scr->a[y][i] = col;
+ }
+ break;
+
+ case 's': /* 一文字 */
+ update_term_size(x, y, 1);
+ (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 'w':
+ update_term_size(x, y, len);
+ (void)((*angband_term[0]->wipe_hook)(x, y, len));
+ break;
+
+ case 'x':
+ if (x == TERM_XTRA_CLEAR)
+ Term_clear();
+ (void)((*angband_term[0]->xtra_hook)(x, 0));
+ break;
+
+ case 'c':
+ update_term_size(x, y, 1);
+ (void)((*angband_term[0]->curs_hook)(x, y));
+ break;
+ case 'C':
+ update_term_size(x, y, 1);
+ (void)((*angband_term[0]->bigcurs_hook)(x, y));
+ break;
+ }
+ }
+
+ fresh_queue.next++;
+ if (fresh_queue.next == FRESH_QUEUE_SIZE)
+ fresh_queue.next = 0;
+ return TRUE;
}
#ifdef CHUUKEI
void browse_chuukei()
{
- fd_set fdset;
- struct timeval tv;
+ fd_set fdset;
+ struct timeval tv;
- tv.tv_sec = 0;
- tv.tv_usec = WAIT;
+ tv.tv_sec = 0;
+ tv.tv_usec = WAIT;
- FD_ZERO(&fdset);
- FD_SET(sd, &fdset);
+ FD_ZERO(&fdset);
+ FD_SET(sd, &fdset);
- Term_clear();
- Term_fresh();
- Term_xtra(TERM_XTRA_REACT, 0);
+ Term_clear();
+ Term_fresh();
+ Term_xtra(TERM_XTRA_REACT, 0);
- while (TRUE)
- {
- fd_set tmp_fdset;
- struct timeval tmp_tv;
+ while (TRUE) {
+ fd_set tmp_fdset;
+ struct timeval tmp_tv;
- if (flush_ringbuf_client()) continue;
+ if (flush_ringbuf_client())
+ continue;
- tmp_fdset = fdset;
- tmp_tv = tv;
+ tmp_fdset = fdset;
+ tmp_tv = tv;
- /* ソケットにデータが来ているかどうか調べる */
- select(sd+1, &tmp_fdset, (fd_set *)NULL, (fd_set *)NULL, &tmp_tv);
- if (FD_ISSET(sd, &tmp_fdset) == 0)
- {
- Term_xtra(TERM_XTRA_FLUSH, 0);
- continue;
- }
+ /* ソケットにデータが来ているかどうか調べる */
+ select(sd + 1, &tmp_fdset, (fd_set *)NULL, (fd_set *)NULL, &tmp_tv);
+ if (FD_ISSET(sd, &tmp_fdset) == 0) {
+ Term_xtra(TERM_XTRA_FLUSH, 0);
+ continue;
+ }
- if (read_sock() < 0)
- {
- chuukei_client = FALSE;
- }
+ if (read_sock() < 0) {
+ chuukei_client = FALSE;
+ }
- /* 接続が切れた状態で書くべきデータがなくなっていたら終了 */
- if (!chuukei_client && fresh_queue.next == fresh_queue.tail ) break;
- }
+ /* 接続が切れた状態で書くべきデータがなくなっていたら終了 */
+ if (!chuukei_client && fresh_queue.next == fresh_queue.tail)
+ break;
+ }
}
#endif /* CHUUKEI */
void prepare_browse_movie_aux(concptr filename)
{
- movie_fd = fd_open(filename, O_RDONLY);
-
- browsing_movie = TRUE;
+ movie_fd = fd_open(filename, O_RDONLY);
+
+ browsing_movie = TRUE;
- init_buffer();
+ init_buffer();
}
void prepare_browse_movie(concptr filename)
{
- char buf[1024];
- path_build(buf, sizeof(buf), ANGBAND_DIR_USER, filename);
+ char buf[1024];
+ path_build(buf, sizeof(buf), ANGBAND_DIR_USER, filename);
- prepare_browse_movie_aux(buf);
+ prepare_browse_movie_aux(buf);
}
void browse_movie(void)
{
- Term_clear();
- Term_fresh();
- Term_xtra(TERM_XTRA_REACT, 0);
-
- while (read_movie_file() == 0)
- {
- while (fresh_queue.next != fresh_queue.tail)
- {
- if (!flush_ringbuf_client())
- {
- Term_xtra(TERM_XTRA_FLUSH, 0);
-
- /* ソケットにデータが来ているかどうか調べる */
+ Term_clear();
+ Term_fresh();
+ Term_xtra(TERM_XTRA_REACT, 0);
+
+ while (read_movie_file() == 0) {
+ while (fresh_queue.next != fresh_queue.tail) {
+ if (!flush_ringbuf_client()) {
+ Term_xtra(TERM_XTRA_FLUSH, 0);
+
+ /* ソケットにデータが来ているかどうか調べる */
#ifdef WINDOWS
- Sleep(WAIT);
+ Sleep(WAIT);
#else
- usleep(WAIT);
+ usleep(WAIT);
#endif
- }
- }
- }
+ }
+ }
+ }
}
* Note that we let each entry have a unique "name" and "text" string,
* even if the string happens to be empty (everyone has a unique '\0').
*/
-static errr init_info(concptr filename, angband_header *head, void **info, char **name, char **text, char **tag)
+static errr init_info(player_type *player_ptr, concptr filename, angband_header *head, void **info, char **name, char **text, char **tag)
{
/* General buffer */
char buf[1024];
path_build(buf, sizeof(buf), ANGBAND_DIR_DATA, format(_("%s_j.raw", "%s.raw"), filename));
/* Grab permissions */
- safe_setuid_grab();
+ safe_setuid_grab(player_ptr);
/* Kill the old file */
(void)fd_kill(buf);
* Initialize the "f_info" array
* @return エラーコード
*/
-static errr init_f_info(void)
+static errr init_f_info(player_type *player_ptr)
{
/* Init the header */
init_header(&f_head, max_f_idx, sizeof(feature_type));
/* Save a pointer to the retouch fake tags */
f_head.retouch = retouch_f_info;
- return init_info("f_info", &f_head,
+ return init_info(player_ptr, "f_info", &f_head,
(void*)&f_info, &f_name, NULL, &f_tag);
}
* Initialize the "k_info" array
* @return エラーコード
*/
-static errr init_k_info(void)
+static errr init_k_info(player_type *player_ptr)
{
/* Init the header */
init_header(&k_head, max_k_idx, sizeof(object_kind));
/* Save a pointer to the parsing function */
k_head.parse_info_txt = parse_k_info;
- return init_info("k_info", &k_head,
+ return init_info(player_ptr, "k_info", &k_head,
(void*)&k_info, &k_name, &k_text, NULL);
}
* Initialize the "a_info" array
* @return エラーコード
*/
-static errr init_a_info(void)
+static errr init_a_info(player_type *player_ptr)
{
/* Init the header */
init_header(&a_head, max_a_idx, sizeof(artifact_type));
/* Save a pointer to the parsing function */
a_head.parse_info_txt = parse_a_info;
- return init_info("a_info", &a_head,
+ return init_info(player_ptr, "a_info", &a_head,
(void*)&a_info, &a_name, &a_text, NULL);
}
* Initialize the "e_info" array
* @return エラーコード
*/
-static errr init_e_info(void)
+static errr init_e_info(player_type *player_ptr)
{
/* Init the header */
init_header(&e_head, max_e_idx, sizeof(ego_item_type));
/* Save a pointer to the parsing function */
e_head.parse_info_txt = parse_e_info;
- return init_info("e_info", &e_head,
+ return init_info(player_ptr, "e_info", &e_head,
(void*)&e_info, &e_name, &e_text, NULL);
}
* Initialize the "r_info" array
* @return エラーコード
*/
-static errr init_r_info(void)
+static errr init_r_info(player_type *player_ptr)
{
/* Init the header */
init_header(&r_head, max_r_idx, sizeof(monster_race));
/* Save a pointer to the parsing function */
r_head.parse_info_txt = parse_r_info;
- return init_info("r_info", &r_head,
+ return init_info(player_ptr, "r_info", &r_head,
(void*)&r_info, &r_name, &r_text, NULL);
}
* Initialize the "d_info" array
* @return エラーコード
*/
-static errr init_d_info(void)
+static errr init_d_info(player_type *player_ptr)
{
/* Init the header */
init_header(&d_head, current_world_ptr->max_d_idx, sizeof(dungeon_type));
/* Save a pointer to the parsing function */
d_head.parse_info_txt = parse_d_info;
- return init_info("d_info", &d_head,
+ return init_info(player_ptr, "d_info", &d_head,
(void*)&d_info, &d_name, &d_text, NULL);
}
* Note that we let each entry have a unique "name" and "text" string,
* even if the string happens to be empty (everyone has a unique '\0').
*/
-errr init_v_info(void)
+errr init_v_info(player_type *player_ptr)
{
/* Init the header */
init_header(&v_head, max_v_idx, sizeof(vault_type));
/* Save a pointer to the parsing function */
v_head.parse_info_txt = parse_v_info;
- return init_info("v_info", &v_head,
+ return init_info(player_ptr, "v_info", &v_head,
(void*)&v_info, &v_name, &v_text, NULL);
}
* Initialize the "s_info" array
* @return エラーコード
*/
-static errr init_s_info(void)
+static errr init_s_info(player_type *player_ptr)
{
/* Init the header */
init_header(&s_head, MAX_CLASS, sizeof(skill_table));
/* Save a pointer to the parsing function */
s_head.parse_info_txt = parse_s_info;
- return init_info("s_info", &s_head,
+ return init_info(player_ptr, "s_info", &s_head,
(void*)&s_info, NULL, NULL, NULL);
}
* Initialize the "m_info" array
* @return エラーコード
*/
-static errr init_m_info(void)
+static errr init_m_info(player_type *player_ptr)
{
/* Init the header */
init_header(&m_head, MAX_CLASS, sizeof(player_magic));
/* Save a pointer to the parsing function */
m_head.parse_info_txt = parse_m_info;
- return init_info("m_info", &m_head,
+ return init_info(player_ptr, "m_info", &m_head,
(void*)&m_info, NULL, NULL, NULL);
}
if (fd < 0)
{
/* Grab permissions */
- safe_setuid_grab();
+ safe_setuid_grab(player_ptr);
/* Create a new high score file */
fd = fd_make(buf, file_permission);
/* Initialize feature info */
#ifdef JP
note("[データの初期化中... (地形)]");
- if (init_f_info()) quit("地形初期化不能");
+ if (init_f_info(player_ptr)) quit("地形初期化不能");
if (init_feat_variables()) quit("地形初期化不能");
#else
note("[Initializing arrays... (features)]");
- if (init_f_info()) quit("Cannot initialize features");
+ if (init_f_info(player_ptr)) quit("Cannot initialize features");
if (init_feat_variables()) quit("Cannot initialize features");
#endif
/* Initialize object info */
note(_("[データの初期化中... (アイテム)]", "[Initializing arrays... (objects)]"));
- if (init_k_info()) quit(_("アイテム初期化不能", "Cannot initialize objects"));
+ if (init_k_info(player_ptr)) quit(_("アイテム初期化不能", "Cannot initialize objects"));
/* Initialize artifact info */
note(_("[データの初期化中... (伝説のアイテム)]", "[Initializing arrays... (artifacts)]"));
- if (init_a_info()) quit(_("伝説のアイテム初期化不能", "Cannot initialize artifacts"));
+ if (init_a_info(player_ptr)) quit(_("伝説のアイテム初期化不能", "Cannot initialize artifacts"));
/* Initialize ego-item info */
note(_("[データの初期化中... (名のあるアイテム)]", "[Initializing arrays... (ego-items)]"));
- if (init_e_info()) quit(_("名のあるアイテム初期化不能", "Cannot initialize ego-items"));
+ if (init_e_info(player_ptr)) quit(_("名のあるアイテム初期化不能", "Cannot initialize ego-items"));
/* Initialize monster info */
note(_("[データの初期化中... (モンスター)]", "[Initializing arrays... (monsters)]"));
- if (init_r_info()) quit(_("モンスター初期化不能", "Cannot initialize monsters"));
+ if (init_r_info(player_ptr)) quit(_("モンスター初期化不能", "Cannot initialize monsters"));
/* Initialize dungeon info */
note(_("[データの初期化中... (ダンジョン)]", "[Initializing arrays... (dungeon)]"));
- if (init_d_info()) quit(_("ダンジョン初期化不能", "Cannot initialize dungeon"));
+ if (init_d_info(player_ptr)) quit(_("ダンジョン初期化不能", "Cannot initialize dungeon"));
{
for (int i = 1; i < current_world_ptr->max_d_idx; i++)
if (d_info[i].final_guardian)
/* Initialize magic info */
note(_("[データの初期化中... (魔法)]", "[Initializing arrays... (magic)]"));
- if (init_m_info()) quit(_("魔法初期化不能", "Cannot initialize magic"));
+ if (init_m_info(player_ptr)) quit(_("魔法初期化不能", "Cannot initialize magic"));
/* Initialize weapon_exp info */
note(_("[データの初期化中... (熟練度)]", "[Initializing arrays... (skill)]"));
- if (init_s_info()) quit(_("熟練度初期化不能", "Cannot initialize skill"));
+ if (init_s_info(player_ptr)) quit(_("熟練度初期化不能", "Cannot initialize skill"));
/* Initialize wilderness array */
note(_("[配列を初期化しています... (荒野)]", "[Initializing arrays... (wilderness)]"));
if (init_quests()) quit(_("クエストを初期化できません", "Cannot initialize quests"));
/* Initialize vault info */
- if (init_v_info()) quit(_("vault 初期化不能", "Cannot initialize vaults"));
+ if (init_v_info(player_ptr)) quit(_("vault 初期化不能", "Cannot initialize vaults"));
/* Initialize some other arrays */
note(_("[データの初期化中... (その他)]", "[Initializing arrays... (other)]"));