X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Futil.c;h=c93b9c198fc3b72690a87ef7833f03d6646a2940;hb=e70ba712cf4b753e7d3876f60980c87cfeec09e3;hp=13a5991d6cfea9fed42e0635f08f88f516ba7474;hpb=f3b0c2d3886c629c86de60c4943727d4137ce737;p=hengband%2Fhengband.git diff --git a/src/util.c b/src/util.c index 13a5991d6..c93b9c198 100644 --- a/src/util.c +++ b/src/util.c @@ -11,6 +11,7 @@ /* Purpose: Angband utilities -BEN- */ #include "angband.h" +#include "monsterrace-hook.h" static int num_more = 0; @@ -72,13 +73,7 @@ int usleep(huge usecs) /* Paranoia -- No excessive sleeping */ -#ifdef JP - if (usecs > 4000000L) core("不当な usleep() 呼び出し"); -#else - if (usecs > 4000000L) core("Illegal usleep() call"); -#endif - - + if (usecs > 4000000L) core(_("不当な usleep() 呼び出し", "Illegal usleep() call")); /* Wait for it */ Timer.tv_sec = (usecs / 1000000L); @@ -103,7 +98,7 @@ int usleep(huge usecs) */ #ifdef SET_UID extern struct passwd *getpwuid(uid_t uid); -extern struct passwd *getpwnam(const char *name); +extern struct passwd *getpwnam(cptr name); #endif @@ -289,11 +284,10 @@ static errr path_temp(char *buf, int max) /* Temp file */ s = tmpnam(NULL); - /* Oops */ if (!s) return (-1); /* Format to length */ -#ifndef WIN32 +#if !defined(WIN32) || (defined(_MSC_VER) && (_MSC_VER >= 1900)) (void)strnfmt(buf, max, "%s", s); #else (void)strnfmt(buf, max, ".%s", s); @@ -444,9 +438,7 @@ FILE *my_fopen_temp(char *buf, int max) errr my_fgets(FILE *fff, char *buf, huge n) { huge i = 0; - char *s; - char tmp[1024]; /* Read a line */ @@ -509,7 +501,7 @@ errr my_fgets(FILE *fff, char *buf, huge n) } #endif /* Handle printables */ - else if (isprint(*s)) + else if (isprint((unsigned char)*s)) { /* Copy */ buf[i++] = *s; @@ -535,10 +527,8 @@ errr my_fgets(FILE *fff, char *buf, huge n) /* * Hack -- replacement for "fputs()" - * * Dump a string, plus a newline, to a file - * - * XXX XXX XXX Process internal weirdness? + * Process internal weirdness? */ errr my_fputs(FILE *fff, cptr buf, huge n) { @@ -568,18 +558,6 @@ errr my_fputs(FILE *fff, cptr buf, huge n) /* - * Code Warrior is a little weird about some functions - */ -#ifdef BEN_HACK -extern int open(const char *, int, ...); -extern int close(int); -extern int read(int, void *, unsigned int); -extern int write(int, const void *, unsigned int); -extern long lseek(int, long, int); -#endif /* BEN_HACK */ - - -/* * The Macintosh is a little bit brain-dead sometimes */ #ifdef MACINTOSH @@ -611,7 +589,6 @@ errr fd_kill(cptr file) /* Remove */ (void)remove(buf); - /* XXX XXX XXX */ return (0); } @@ -633,7 +610,6 @@ errr fd_move(cptr file, cptr what) /* Rename */ (void)rename(buf, aux); - /* XXX XXX XXX */ return (0); } @@ -684,44 +660,21 @@ errr fd_copy(cptr file, cptr what) fd_close(src_fd); fd_close(dst_fd); - /* XXX XXX XXX */ return (0); } - /* * Hack -- attempt to open a file descriptor (create file) - * * This function should fail if the file already exists - * * Note that we assume that the file should be "binary" - * - * XXX XXX XXX The horrible "BEN_HACK" code is for compiling under - * the CodeWarrior compiler, in which case, for some reason, none - * of the "O_*" flags are defined, and we must fake the definition - * of "O_RDONLY", "O_WRONLY", and "O_RDWR" in "A-win-h", and then - * we must simulate the effect of the proper "open()" call below. */ -int fd_make(cptr file, int mode) +int fd_make(cptr file, BIT_FLAGS mode) { char buf[1024]; /* Hack -- Try to parse the path */ if (path_parse(buf, 1024, file)) return (-1); -#ifdef BEN_HACK - - /* Check for existance */ - /* if (fd_close(fd_open(file, O_RDONLY | O_BINARY))) return (1); */ - - /* Mega-Hack -- Create the file */ - (void)my_fclose(my_fopen(file, "wb")); - - /* Re-open the file for writing */ - return (open(buf, O_WRONLY | O_BINARY, mode)); - -#else /* BEN_HACK */ - #if defined(MAC_MPW) || defined(MACH_O_CARBON) { int fdes; @@ -732,12 +685,10 @@ int fd_make(cptr file, int mode) /* Return the descriptor */ return (fdes); } -# else +#else /* Create the file, fail if exists, write-only, binary */ return (open(buf, O_CREAT | O_EXCL | O_WRONLY | O_BINARY, mode)); -# endif - -#endif /* BEN_HACK */ +#endif } @@ -855,7 +806,7 @@ errr fd_chop(int fd, huge n) /* Verify the fd */ if (fd < 0) return (-1); -#if defined(SUNOS) || defined(ULTRIX) || defined(NeXT) +#if defined(ULTRIX) || defined(NeXT) /* Truncate */ ftruncate(fd, n); #endif @@ -942,7 +893,6 @@ errr fd_close(int fd) /* Close */ (void)close(fd); - /* XXX XXX XXX */ return (0); } @@ -953,7 +903,7 @@ errr fd_close(int fd) /* - * XXX XXX XXX Important note about "colors" XXX XXX XXX + * Important note about "colors" * * The "TERM_*" color definitions list the "composition" of each * "Angband color" in terms of "quarters" of each of the three color @@ -1203,8 +1153,8 @@ void text_to_ascii(char *buf, cptr str) /* Hex-mode XXX */ if (*str == 'x') { - *s = 16 * dehex(*++str); - *s++ += dehex(*++str); + *s = 16 * (char)dehex(*++str); + *s++ += (char)dehex(*++str); } /* Hack -- simple way to specify "backslash" */ @@ -1258,29 +1208,29 @@ void text_to_ascii(char *buf, cptr str) /* Octal-mode */ else if (*str == '0') { - *s = 8 * deoct(*++str); - *s++ += deoct(*++str); + *s = 8 * (char)deoct(*++str); + *s++ += (char)deoct(*++str); } /* Octal-mode */ else if (*str == '1') { - *s = 64 + 8 * deoct(*++str); - *s++ += deoct(*++str); + *s = 64 + 8 * (char)deoct(*++str); + *s++ += (char)deoct(*++str); } /* Octal-mode */ else if (*str == '2') { - *s = 64 * 2 + 8 * deoct(*++str); - *s++ += deoct(*++str); + *s = 64 * 2 + 8 * (char)deoct(*++str); + *s++ += (char)deoct(*++str); } /* Octal-mode */ else if (*str == '3') { - *s = 64 * 3 + 8 * deoct(*++str); - *s++ += deoct(*++str); + *s = 64 * 3 + 8 * (char)deoct(*++str); + *s++ += (char)deoct(*++str); } /* Skip the final char */ @@ -1328,7 +1278,7 @@ static bool trigger_ascii_to_text(char **bufptr, cptr *strptr) switch(ch) { case '&': - while ((tmp = my_strchr(macro_modifier_chr, *str))) + while ((tmp = my_strchr(macro_modifier_chr, *str)) != 0) { j = (int)(tmp - macro_modifier_chr); tmp = macro_modifier_name[j]; @@ -1594,8 +1544,6 @@ static sint macro_find_ready(cptr pat) n = i; s = t; } - - /* Result */ return (n); } @@ -1604,15 +1552,15 @@ static sint macro_find_ready(cptr pat) * Add a macro definition (or redefinition). * * We should use "act == NULL" to "remove" a macro, but this might make it - * impossible to save the "removal" of a macro definition. XXX XXX XXX + * impossible to save the "removal" of a macro definition. * * We should consider refusing to allow macros which contain existing macros, * or which are contained in existing macros, because this would simplify the - * macro analysis code. XXX XXX XXX + * macro analysis code. * * We should consider removing the "command macro" crap, and replacing it * with some kind of "powerful keymap" ability, but this might make it hard - * to change the "roguelike" option from inside the game. XXX XXX XXX + * to change the "roguelike" option from inside the game. */ errr macro_add(cptr pat, cptr act) { @@ -1721,18 +1669,24 @@ errr play_music(int type, int val) if (!use_music) return 1; /* Make a sound (if allowed) */ - return Term_xtra(type , val); + return Term_xtra(type, val); } /* * Hack -- Select floor music. */ -void select_floor_music() +void select_floor_music(void) { int i; /* No sound */ if (!use_music) return; + if(ambush_flag) + { + play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_AMBUSH); + return; + } + if(p_ptr->wild_mode) { play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_WILD); @@ -1760,7 +1714,7 @@ void select_floor_music() return; } - for(i = 0; i < max_quests; i++) + for(i = 0; i < max_q_idx; i++) { // TODO マクロで類似条件を統合すること if(quest[i].status == QUEST_STATUS_TAKEN && (quest[i].type == QUEST_TYPE_KILL_LEVEL || quest[i].type == QUEST_TYPE_RANDOM) && @@ -1776,11 +1730,11 @@ void select_floor_music() if(dungeon_type) { - if(play_music(TERM_XTRA_MUSIC_DUNGEON, dungeon_type)) + if(p_ptr->feeling == 2) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_FEEL2); + else if(p_ptr->feeling >= 3 && p_ptr->feeling <= 5) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_FEEL1); + else { - if(p_ptr->feeling == 2) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_FEEL2); - else if(p_ptr->feeling >= 3 && p_ptr->feeling <= 5) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_FEEL1); - else + if(play_music(TERM_XTRA_MUSIC_DUNGEON, dungeon_type)) { if(dun_level < 40) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_LOW); else if(dun_level < 80) play_music(TERM_XTRA_MUSIC_BASIC, MUSIC_BASIC_DUN_MED); @@ -1826,7 +1780,7 @@ void select_floor_music() * Only 500 (0+1+2+...+29+30) milliseconds may elapse between each key in * the macro trigger sequence. If a key sequence forms the "prefix" of a * macro trigger, 500 milliseconds must pass before the key sequence is - * known not to be that macro trigger. XXX XXX XXX + * known not to be that macro trigger. */ static char inkey_aux(void) { @@ -1910,7 +1864,6 @@ static char inkey_aux(void) /* Excessive delay */ if (w >= 10) break; - /* Delay */ Term_xtra(TERM_XTRA_DELAY, w); } } @@ -2005,7 +1958,7 @@ static void forget_macro_action(void) /* - * Mega-Hack -- special "inkey_next" pointer. XXX XXX XXX + * Mega-Hack -- special "inkey_next" pointer. * * This special pointer allows a sequence of keys to be "inserted" into * the stream of keys returned by "inkey()". This key sequence will not @@ -2018,7 +1971,7 @@ static cptr inkey_next = NULL; #ifdef ALLOW_BORG /* - * Mega-Hack -- special "inkey_hack" hook. XXX XXX XXX + * Mega-Hack -- special "inkey_hack" hook. * * This special function hook allows the "Borg" (see elsewhere) to take * control of the "inkey()" function, and substitute in fake keypresses. @@ -2205,11 +2158,9 @@ char inkey(void) /* Wait for (and remove) a pending key */ if (0 == Term_inkey(&ch, TRUE, TRUE)) { - /* Done */ break; } - /* Oops */ break; } @@ -2219,7 +2170,6 @@ char inkey(void) /* Check for (and remove) a pending key */ if (0 == Term_inkey(&ch, FALSE, TRUE)) { - /* Done */ break; } @@ -2232,12 +2182,10 @@ char inkey(void) /* Excessive delay */ if (w >= 100) break; - /* Delay */ Term_xtra(TERM_XTRA_DELAY, w); } } - /* Done */ break; } @@ -2251,8 +2199,6 @@ char inkey(void) { /* Strip this key */ ch = 0; - - /* Continue */ continue; } @@ -2351,9 +2297,9 @@ void quark_init(void) /* * Add a new "quark" to the set of quarks. */ -s16b quark_add(cptr str) +u16b quark_add(cptr str) { - int i; + u16b i; /* Look for an existing quark */ for (i = 1; i < quark__num; i++) @@ -2379,7 +2325,7 @@ s16b quark_add(cptr str) /* * This function looks up a quark */ -cptr quark_str(s16b i) +cptr quark_str(STR_OFFSET i) { cptr q; @@ -2419,10 +2365,11 @@ cptr quark_str(s16b i) -/* - * How many messages are "available"? +/*! + * @brief 保存中の過去ゲームメッセージの数を返す。 / How many messages are "available"? + * @return 残っているメッセージの数 */ -s16b message_num(void) +s32b message_num(void) { int last, next, n; @@ -2441,14 +2388,15 @@ s16b message_num(void) } - -/* - * Recall the "text" of a saved message +/*! + * @brief 過去のゲームメッセージを返す。 / Recall the "text" of a saved message + * @params age メッセージの世代 + * @return メッセージの文字列ポインタ */ cptr message_str(int age) { - s16b x; - s16b o; + s32b x; + s32b o; cptr s; /* Forgotten messages have no text */ @@ -2468,15 +2416,17 @@ cptr message_str(int age) } - -/* - * Add a new message, with great efficiency +/*! + * @brief ゲームメッセージをログに追加する。 / Add a new message, with great efficiency + * @params str 保存したいメッセージ + * @return なし */ void message_add(cptr str) { - int i, k, x, m, n; + u32b i, n; + int k, x, m; - char u[1024]; + char u[4096]; char splitted1[81]; cptr splitted2; @@ -2491,39 +2441,37 @@ void message_add(cptr str) /* Important Hack -- Ignore "long" messages */ if (n >= MESSAGE_BUF / 4) return; - /* extra step -- split the message if n>80. (added by Mogami) */ + /* extra step -- split the message if n>80.(added by Mogami) */ if (n > 80) { #ifdef JP - cptr t = str; - - for (n = 0; n < 80; n++, t++) - if(iskanji(*t)) { - t++; - n++; - } - if (n == 81) n = 79; /* 最後の文字が漢字半分 */ + cptr t = str; + + for (n = 0; n < 80; n++, t++) + { + if(iskanji(*t)) { + t++; + n++; + } + } + if (n == 81) n = 79; /* 最後の文字が漢字半分 */ #else - for (n = 80; n > 60; n--) - if (str[n] == ' ') break; - if (n == 60) - n = 80; + for (n = 80; n > 60; n--) + if (str[n] == ' ') break; + if (n == 60) n = 80; #endif - splitted2 = str + n; - strncpy(splitted1, str ,n); - splitted1[n] = '\0'; - str = splitted1; + splitted2 = str + n; + strncpy(splitted1, str ,n); + splitted1[n] = '\0'; + str = splitted1; } else { - splitted2 = NULL; + splitted2 = NULL; } - /*** Step 2 -- Attempt to optimize ***/ + /*** Step 2 -- 最適化の試行 / Attempt to optimize ***/ /* Limit number of messages to check */ m = message_num(); - k = m / 4; - - /* Limit number of messages to check */ if (k > MESSAGE_MAX / 32) k = MESSAGE_MAX / 32; /* Check previous message */ @@ -2549,8 +2497,8 @@ void message_add(cptr str) /* Find multiple */ #ifdef JP - for (t = buf; *t && (*t != '<' || (*(t+1) != 'x' )); t++) - if( iskanji(*t))t++; + for (t = buf; *t && (*t != '<' || (*(t+1) != 'x' )); t++) + if(iskanji(*t))t++; #else for (t = buf; *t && (*t != '<'); t++); #endif @@ -2558,7 +2506,7 @@ void message_add(cptr str) if (*t) { /* Message is too small */ - if (strlen(buf) < 6) break; + if (strlen(buf) < A_MAX) break; /* Drop the space */ *(t - 1) = '\0'; @@ -2591,15 +2539,13 @@ void message_add(cptr str) now_message++; } - /* Done */ break; } /* Check the last few messages (if any to count) */ for (i = message__next; k; k--) { - u16b q; - + int q; cptr old; /* Back up and wrap if needed */ @@ -2738,7 +2684,7 @@ void message_add(cptr str) message__head += n + 1; /* recursively add splitted message (added by Mogami) */ - end_of_message_add: +end_of_message_add: if (splitted2 != NULL) message_add(splitted2); } @@ -2773,12 +2719,7 @@ static void msg_flush(int x) if (!p_ptr->playing || !nagasu) { /* Pause for response */ -#ifdef JP - Term_putstr(x, 0, -1, a, "-続く-"); -#else - Term_putstr(x, 0, -1, a, "-more-"); -#endif - + Term_putstr(x, 0, -1, a, _("-続く-", "-more-")); /* Get an acceptable keypress */ while (1) @@ -2804,6 +2745,12 @@ static void msg_flush(int x) } +void msg_erase(void) +{ + msg_print(NULL); +} + + /* * Output a message to the top line of the screen. * @@ -2820,23 +2767,20 @@ static void msg_flush(int x) * The global "msg_flag" variable can be cleared to tell us to * "erase" any "pending" messages still on the screen. * - * XXX XXX XXX Note that we must be very careful about using the + * Note that we must be very careful about using the * "msg_print()" functions without explicitly calling the special * "msg_print(NULL)" function, since this may result in the loss * of information if the screen is cleared, or if anything is * displayed on the top line. * - * XXX XXX XXX Note that "msg_print(NULL)" will clear the top line + * Note that "msg_print(NULL)" will clear the top line * even if no messages are pending. This is probably a hack. */ void msg_print(cptr msg) { static int p = 0; - int n; - char *t; - char buf[1024]; if (world_monster) return; @@ -2848,13 +2792,12 @@ void msg_print(cptr msg) p = 0; } - /* Message Length */ + /* Original Message Length */ n = (msg ? strlen(msg) : 0); /* Hack -- flush when requested or needed */ if (p && (!msg || ((p + n) > 72))) { - /* Flush */ msg_flush(p); /* Forget it */ @@ -2864,20 +2807,27 @@ void msg_print(cptr msg) p = 0; } - /* No message */ if (!msg) return; /* Paranoia */ if (n > 1000) return; + /* Copy it */ + if (!cheat_turn) + { + strcpy(buf, msg); + } + else + { + sprintf(buf, ("T:%d - %s"), (int)turn, msg); + } - /* Memorize the message */ - if (character_generated) message_add(msg); - + /* New Message Length */ + n = strlen(buf); - /* Copy it */ - strcpy(buf, msg); + /* Memorize the message */ + if (character_generated) message_add(buf); /* Analyze the buffer */ t = buf; @@ -2953,16 +2903,14 @@ void msg_print(cptr msg) t += split; n -= split; } - /* Display the tail of the message */ Term_putstr(p, 0, n, TERM_WHITE, t); /* Memorize the tail */ /* if (character_generated) message_add(t); */ - /* Window stuff */ p_ptr->window |= (PW_MESSAGE); - window_stuff(); + update_output(); /* Remember the message */ msg_flag = TRUE; @@ -2974,11 +2922,28 @@ void msg_print(cptr msg) p += n + 1; #endif - /* Optional refresh */ if (fresh_message) Term_fresh(); } +void msg_print_wizard(int cheat_type, cptr msg) +{ + if (!cheat_room && cheat_type == CHEAT_DUNGEON) return; + if (!cheat_peek && cheat_type == CHEAT_OBJECT) return; + if (!cheat_hear && cheat_type == CHEAT_MONSTER) return; + if (!cheat_xtra && cheat_type == CHEAT_MISC) return; + + cptr cheat_mes[] = {"ITEM", "MONS", "DUNG", "MISC"}; + char buf[1024]; + sprintf(buf, "WIZ-%s:%s", cheat_mes[cheat_type], msg); + msg_print(buf); + + if (cheat_diary_output) + { + do_cmd_write_nikki(NIKKI_WIZARD_LOG, 0, buf); + } + +} /* * Hack -- prevent "accidents" in "screen_save()" or "screen_load()" @@ -3044,6 +3009,32 @@ void msg_format(cptr fmt, ...) msg_print(buf); } +/* + * Display a formatted message, using "vstrnfmt()" and "msg_print()". + */ +void msg_format_wizard(int cheat_type, cptr fmt, ...) +{ + if(!cheat_room && cheat_type == CHEAT_DUNGEON) return; + if(!cheat_peek && cheat_type == CHEAT_OBJECT) return; + if(!cheat_hear && cheat_type == CHEAT_MONSTER) return; + if(!cheat_xtra && cheat_type == CHEAT_MISC) return; + + va_list vp; + char buf[1024]; + + /* Begin the Varargs Stuff */ + va_start(vp, fmt); + + /* Format the args, save the length */ + (void)vstrnfmt(buf, 1024, fmt, vp); + + /* End the Varargs Stuff */ + va_end(vp); + + /* Display */ + msg_print_wizard(cheat_type, buf); +} + /* @@ -3052,7 +3043,7 @@ void msg_format(cptr fmt, ...) * At the given location, using the given attribute, if allowed, * add the given string. Do not clear the line. */ -void c_put_str(byte attr, cptr str, int row, int col) +void c_put_str(TERM_COLOR attr, cptr str, TERM_LEN row, TERM_LEN col) { /* Position cursor, Dump the attr/text */ Term_putstr(col, row, -1, attr, str); @@ -3061,7 +3052,7 @@ void c_put_str(byte attr, cptr str, int row, int col) /* * As above, but in "white" */ -void put_str(cptr str, int row, int col) +void put_str(cptr str, TERM_LEN row, TERM_LEN col) { /* Spawn */ Term_putstr(col, row, -1, TERM_WHITE, str); @@ -3073,7 +3064,7 @@ void put_str(cptr str, int row, int col) * Display a string on the screen using an attribute, and clear * to the end of the line. */ -void c_prt(byte attr, cptr str, int row, int col) +void c_prt(TERM_COLOR attr, cptr str, TERM_LEN row, TERM_LEN col) { /* Clear line, position cursor */ Term_erase(col, row, 255); @@ -3085,7 +3076,7 @@ void c_prt(byte attr, cptr str, int row, int col) /* * As above, but in "white" */ -void prt(cptr str, int row, int col) +void prt(cptr str, TERM_LEN row, TERM_LEN col) { /* Spawn */ c_prt(TERM_WHITE, str, row, col); @@ -3151,7 +3142,7 @@ void c_roff(byte a, cptr str) /* Clean up the char */ #ifdef JP - ch = ((isprint(*s) || k_flag) ? *s : ' '); + ch = ((k_flag || isprint(*s)) ? *s : ' '); #else ch = (isprint(*s) ? *s : ' '); #endif @@ -3167,7 +3158,7 @@ void c_roff(byte a, cptr str) { int i, n = 0; - byte av[256]; + TERM_COLOR av[256]; char cv[256]; /* Wrap word */ @@ -3580,7 +3571,7 @@ bool get_string(cptr prompt, char *buf, int len) { bool res; - /* Paranoia XXX XXX XXX */ + /* Paranoia */ msg_print(NULL); /* Display prompt */ @@ -3591,8 +3582,6 @@ bool get_string(cptr prompt, char *buf, int len) /* Clear prompt */ prt("", 0, 0); - - /* Result */ return (res); } @@ -3617,7 +3606,7 @@ bool get_check(cptr prompt) * mode & CHECK_NO_HISTORY : no message_add * mode & CHECK_DEFAULT_Y : accept any key as y, except n and Esc. */ -bool get_check_strict(cptr prompt, int mode) +bool get_check_strict(cptr prompt, BIT_FLAGS mode) { int i; char buf[80]; @@ -3626,11 +3615,11 @@ bool get_check_strict(cptr prompt, int mode) if (auto_more) { p_ptr->window |= PW_MESSAGE; - window_stuff(); + handle_stuff(); num_more = 0; } - /* Paranoia XXX XXX XXX */ + /* Paranoia */ msg_print(NULL); if (!rogue_like_commands) @@ -3662,7 +3651,7 @@ bool get_check_strict(cptr prompt, int mode) /* HACK : Add the line to message buffer */ message_add(buf); p_ptr->window |= (PW_MESSAGE); - window_stuff(); + handle_stuff(); } /* Get an acceptable answer */ @@ -3732,7 +3721,7 @@ bool get_check_strict(cptr prompt, int mode) */ bool get_com(cptr prompt, char *command, bool z_escape) { - /* Paranoia XXX XXX XXX */ + /* Paranoia */ msg_print(NULL); /* Display a prompt */ @@ -3761,12 +3750,13 @@ bool get_com(cptr prompt, char *command, bool z_escape) * * Hack -- allow "command_arg" to specify a quantity */ -s16b get_quantity(cptr prompt, int max) +QUANTITY get_quantity(cptr prompt, QUANTITY max) { - bool res; - int amt; + bool res, result; + QUANTITY amt; char tmp[80]; char buf[80]; + COMMAND_CODE code; /* Use "command_arg" */ @@ -3785,10 +3775,10 @@ s16b get_quantity(cptr prompt, int max) return (amt); } -#ifdef ALLOW_REPEAT /* TNB */ - /* Get the item index */ - if ((max != 1) && repeat_pull(&amt)) + result = repeat_pull(&code); + amt = (QUANTITY)code; + if ((max != 1) && result) { /* Enforce the maximum */ if (amt > max) amt = max; @@ -3800,24 +3790,17 @@ s16b get_quantity(cptr prompt, int max) return (amt); } -#endif /* ALLOW_REPEAT -- TNB */ - /* Build a prompt if needed */ if (!prompt) { /* Build a prompt */ -#ifdef JP - sprintf(tmp, "いくつですか (1-%d): ", max); -#else - sprintf(tmp, "Quantity (1-%d): ", max); -#endif - + sprintf(tmp, _("いくつですか (1-%d): ", "Quantity (1-%d): "), max); /* Use that prompt */ prompt = tmp; } - /* Paranoia XXX XXX XXX */ + /* Paranoia */ msg_print(NULL); /* Display prompt */ @@ -3842,7 +3825,7 @@ s16b get_quantity(cptr prompt, int max) if (!res) return 0; /* Extract a number */ - amt = atoi(buf); + amt = (COMMAND_CODE)atoi(buf); /* A letter means "all" */ if (isalpha(buf[0])) amt = max; @@ -3853,11 +3836,7 @@ s16b get_quantity(cptr prompt, int max) /* Enforce the minimum */ if (amt < 0) amt = 0; -#ifdef ALLOW_REPEAT /* TNB */ - - if (amt) repeat_push(amt); - -#endif /* ALLOW_REPEAT -- TNB */ + if (amt) repeat_push((COMMAND_CODE)amt); /* Return the result */ return (amt); @@ -3865,16 +3844,12 @@ s16b get_quantity(cptr prompt, int max) /* - * Pause for user response XXX XXX XXX + * Pause for user response */ void pause_line(int row) { prt("", row, 0); -#ifdef JP - put_str("[ 何かキーを押して下さい ]", row, 26); -#else - put_str("[Press any key to continue]", row, 23); -#endif + put_str(_("[ 何かキーを押して下さい ]", "[Press any key to continue]"), row, _(26, 23)); (void)inkey(); prt("", row, 0); @@ -4217,7 +4192,7 @@ static char inkey_from_menu(void) int menu = 0; bool kisuu; - if (py - panel_row_min > 10) basey = 2; + if (p_ptr->y - panel_row_min > 10) basey = 2; else basey = 13; basex = 15; @@ -4268,16 +4243,11 @@ static char inkey_from_menu(void) } max_num = i; kisuu = max_num % 2; -#ifdef JP - put_str("》",basey + 1 + num / 2, basex + 2 + (num % 2) * 24); -#else - put_str("> ",basey + 1 + num / 2, basex + 2 + (num % 2) * 24); -#endif + put_str(_("》", "> "),basey + 1 + num / 2, basex + 2 + (num % 2) * 24); /* Place the cursor on the player */ - move_cursor_relative(py, px); + move_cursor_relative(p_ptr->y, p_ptr->x); - /* Get a command */ sub_cmd = inkey(); if ((sub_cmd == ' ') || (sub_cmd == 'x') || (sub_cmd == 'X') || (sub_cmd == '\r') || (sub_cmd == '\n')) { @@ -4370,13 +4340,13 @@ static char inkey_from_menu(void) * Note that this command is used both in the dungeon and in * stores, and must be careful to work in both situations. * - * Note that "p_ptr->command_new" may not work any more. XXX XXX XXX + * Note that "p_ptr->command_new" may not work any more. */ void request_command(int shopping) { int i; - char cmd; + s16b cmd; int mode; cptr act; @@ -4415,8 +4385,7 @@ void request_command(int shopping) /* Hack -- auto-commands */ if (command_new) { - /* Flush messages */ - msg_print(NULL); + msg_erase(); /* Use auto-command */ cmd = command_new; @@ -4435,7 +4404,6 @@ void request_command(int shopping) /* Activate "command mode" */ inkey_flag = TRUE; - /* Get a command */ cmd = inkey(); if (!shopping && command_menu && ((cmd == '\r') || (cmd == '\n') || (cmd == 'x') || (cmd == 'X')) @@ -4450,18 +4418,13 @@ void request_command(int shopping) /* Command Count */ if (cmd == '0') { - int old_arg = command_arg; + COMMAND_ARG old_arg = command_arg; /* Reset */ command_arg = 0; /* Begin the input */ -#ifdef JP - prt("回数: ", 0, 0); -#else - prt("Count: ", 0, 0); -#endif - + prt(_("回数: ", "Count: "), 0, 0); /* Get a command count */ while (1) @@ -4476,12 +4439,7 @@ void request_command(int shopping) command_arg = command_arg / 10; /* Show current count */ -#ifdef JP - prt(format("回数: %d", command_arg), 0, 0); -#else - prt(format("Count: %d", command_arg), 0, 0); -#endif - + prt(format(_("回数: %d", "Count: %d"), command_arg), 0, 0); } /* Actual numeric data */ @@ -4505,12 +4463,7 @@ void request_command(int shopping) } /* Show current count */ -#ifdef JP - prt(format("回数: %d", command_arg), 0, 0); -#else - prt(format("Count: %d", command_arg), 0, 0); -#endif - + prt(format(_("回数: %d", "Count: %d"), command_arg), 0, 0); } /* Exit on "unusable" input */ @@ -4527,12 +4480,7 @@ void request_command(int shopping) command_arg = 99; /* Show current count */ -#ifdef JP - prt(format("回数: %d", command_arg), 0, 0); -#else - prt(format("Count: %d", command_arg), 0, 0); -#endif - + prt(format(_("回数: %d", "Count: %d"), command_arg), 0, 0); } /* Hack -- Handle "old_arg" */ @@ -4542,29 +4490,17 @@ void request_command(int shopping) command_arg = old_arg; /* Show current count */ -#ifdef JP -prt(format("回数: %d", command_arg), 0, 0); -#else - prt(format("Count: %d", command_arg), 0, 0); -#endif - + prt(format(_("回数: %d", "Count: %d"), command_arg), 0, 0); } /* Hack -- white-space means "enter command now" */ if ((cmd == ' ') || (cmd == '\n') || (cmd == '\r')) { /* Get a real command */ -#ifdef JP - if (!get_com("コマンド: ", (char *)&cmd, FALSE)) -#else - if (!get_com("Command: ", (char *)&cmd, FALSE)) -#endif - + if (!get_com(_("コマンド: ", "Command: "), (char *)&cmd, FALSE)) { /* Clear count */ command_arg = 0; - - /* Continue */ continue; } } @@ -4575,12 +4511,7 @@ prt(format("回数: %d", command_arg), 0, 0); if (cmd == '\\') { /* Get a real command */ -#ifdef JP - (void)get_com("コマンド: ", (char *)&cmd, FALSE); -#else - (void)get_com("Command: ", (char *)&cmd, FALSE); -#endif - + (void)get_com(_("コマンド: ", "Command: "), (char *)&cmd, FALSE); /* Hack -- bypass keymaps */ if (!inkey_next) inkey_next = ""; @@ -4591,12 +4522,7 @@ prt(format("回数: %d", command_arg), 0, 0); if (cmd == '^') { /* Get a new command and controlify it */ -#ifdef JP - if (get_com("CTRL: ", (char *)&cmd, FALSE)) cmd = KTRL(cmd); -#else - if (get_com("Control: ", (char *)&cmd, FALSE)) cmd = KTRL(cmd); -#endif - + if (get_com(_("CTRL: ", "Control: "), (char *)&cmd, FALSE)) cmd = KTRL(cmd); } @@ -4611,8 +4537,6 @@ prt(format("回数: %d", command_arg), 0, 0); /* Start using the buffer */ inkey_next = request_command_buffer; - - /* Continue */ continue; } @@ -4624,7 +4548,6 @@ prt(format("回数: %d", command_arg), 0, 0); /* Use command */ command_cmd = (byte)cmd; - /* Done */ break; } @@ -4632,7 +4555,7 @@ prt(format("回数: %d", command_arg), 0, 0); if (always_repeat && (command_arg <= 0)) { /* Hack -- auto repeat certain commands */ - if (my_strchr("TBDoc+", command_cmd)) + if (my_strchr("TBDoc+", (char)command_cmd)) { /* Repeat 99 times */ command_arg = 99; @@ -4704,12 +4627,7 @@ prt(format("回数: %d", command_arg), 0, 0); { /* Hack -- Verify command */ -#ifdef JP - if (!get_check("本当ですか? ")) -#else - if (!get_check("Are you sure? ")) -#endif - + if (!get_check(_("本当ですか? ", "Are you sure? "))) { /* Hack -- Use space */ command_cmd = ' '; @@ -4830,7 +4748,7 @@ int get_keymap_dir(char ch) } else { - int mode; + BIT_FLAGS mode; cptr act, s; /* Roguelike */ @@ -4868,8 +4786,6 @@ int get_keymap_dir(char ch) } -#ifdef ALLOW_REPEAT /* TNB */ - #define REPEAT_MAX 20 /* Number of chars saved */ @@ -4879,10 +4795,10 @@ static int repeat__cnt = 0; static int repeat__idx = 0; /* Saved "stuff" */ -static int repeat__key[REPEAT_MAX]; +static COMMAND_CODE repeat__key[REPEAT_MAX]; -void repeat_push(int what) +void repeat_push(COMMAND_CODE what) { /* Too many keys */ if (repeat__cnt == REPEAT_MAX) return; @@ -4895,7 +4811,7 @@ void repeat_push(int what) } -bool repeat_pull(int *what) +bool repeat_pull(COMMAND_CODE *what) { /* All out of keys */ if (repeat__idx == repeat__cnt) return (FALSE); @@ -4909,7 +4825,7 @@ bool repeat_pull(int *what) void repeat_check(void) { - int what; + COMMAND_CODE what; /* Ignore some commands */ if (command_cmd == ESCAPE) return; @@ -4945,8 +4861,6 @@ void repeat_check(void) } } -#endif /* ALLOW_REPEAT -- TNB */ - #ifdef SORT_R_INFO @@ -5321,12 +5235,12 @@ void roff_to_buf(cptr str, int maxlen, char *tbuf, size_t bufsize) * * This function should be equivalent to the strlcpy() function in BSD. */ -size_t my_strcpy(char *buf, const char *src, size_t bufsize) +size_t my_strcpy(char *buf, cptr src, size_t bufsize) { #ifdef JP char *d = buf; - const char *s = src; + cptr s = src; size_t len = 0; if (bufsize > 0) { @@ -5389,7 +5303,7 @@ size_t my_strcpy(char *buf, const char *src, size_t bufsize) * * This function should be equivalent to the strlcat() function in BSD. */ -size_t my_strcat(char *buf, const char *src, size_t bufsize) +size_t my_strcat(char *buf, cptr src, size_t bufsize) { size_t dlen = strlen(buf); @@ -5412,7 +5326,7 @@ size_t my_strcat(char *buf, const char *src, size_t bufsize) * * my_strstr() can handle Kanji strings correctly. */ -char *my_strstr(const char *haystack, const char *needle) +char *my_strstr(cptr haystack, cptr needle) { int i; int l1 = strlen(haystack); @@ -5440,7 +5354,7 @@ char *my_strstr(const char *haystack, const char *needle) * * my_strchr() can handle Kanji strings correctly. */ -char *my_strchr(const char *ptr, char ch) +char *my_strchr(cptr ptr, char ch) { for ( ; *ptr != '\0'; ptr++) { @@ -5470,7 +5384,7 @@ void str_tolower(char *str) continue; } #endif - *str = tolower(*str); + *str = (char)tolower(*str); } }