From b325a8f15140b02af3efeee93ea5568142ddf15b Mon Sep 17 00:00:00 2001 From: mogami Date: Tue, 16 Sep 2003 18:36:59 +0000 Subject: [PATCH] =?utf8?q?=E8=87=AA=E5=8B=95=E6=8B=BE=E3=81=84=E3=82=A8?= =?utf8?q?=E3=83=87=E3=82=A3=E3=82=BF=E3=80=81=E6=9C=AA=E5=AE=9F=E8=A3=85?= =?utf8?q?=E9=83=A8=E5=88=86=E3=82=92=E7=9B=B4=E3=81=97=E3=81=9F=E3=80=82?= =?utf8?q?=E3=82=AA=E3=83=97=E3=82=B7=E3=83=A7=E3=83=B3=E7=94=BB=E9=9D=A2?= =?utf8?q?=E3=81=A7=E3=80=8CP=E3=80=8D=E3=82=92=E6=8A=BC=E3=81=97=E3=81=A6?= =?utf8?q?=E3=82=82=E8=87=AA=E5=8B=95=E6=8B=BE=E3=81=84=E3=82=A8=E3=83=87?= =?utf8?q?=E3=82=A3=E3=82=BF=E3=81=AB=E5=85=A5=E3=82=8C=E3=82=8B=E3=82=88?= =?utf8?q?=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F=E3=80=82=E5=BE=8C=E3=81=AF?= =?utf8?q?=E3=83=98=E3=83=AB=E3=83=97=E6=96=87=E7=AB=A0=E3=82=92=E6=9B=B8?= =?utf8?q?=E3=81=91=E3=81=B0=E5=AE=8C=E4=BA=86=E3=81=8B=E3=81=A8=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/autopick.c | 392 ++++++++++++++++++++++++++++----------------------------- src/cmd4.c | 49 +++++--- 2 files changed, 223 insertions(+), 218 deletions(-) diff --git a/src/autopick.c b/src/autopick.c index fad195a69..7aba17f67 100644 --- a/src/autopick.c +++ b/src/autopick.c @@ -274,10 +274,8 @@ bool autopick_new_entry(autopick_type *entry, cptr str) } buf[i] = '\0'; -#if 0 - /* Skip empty line */ - if (*buf == 0) return FALSE; -#endif + /* Skip comment line */ + if (*buf == 0 && insc) return FALSE; ptr = prev_ptr = buf; old_ptr = NULL; @@ -1427,6 +1425,16 @@ typedef struct { /* + * Dirty flag for text editor + */ +#define DIRTY_ALL 0x01 +#define DIRTY_MODE 0x04 +#define DIRTY_SCREEN 0x08 +#define DIRTY_NOT_FOUND 0x10 +#define DIRTY_NO_SEARCH 0x20 + + +/* * Describe which kind of object is Auto-picked/destroyed */ static void describe_autopick(char *buff, autopick_type *entry) @@ -2146,32 +2154,161 @@ static void free_text_lines(cptr *lines_list) */ static void toggle_keyword(text_body_type *tb, int flg) { - autopick_type an_entry, *entry = &an_entry; + int by1, by2, bx1, bx2, y; + bool add = TRUE; + bool fixed = FALSE; - if (!autopick_new_entry(entry, tb->lines_list[tb->cy])) - return; + /* Select this line */ + if (!tb->mark) tb->my = tb->cy; - string_free(tb->lines_list[tb->cy]); + if (tb->my < tb->cy) + { + by1 = tb->my; + by2 = tb->cy; + bx1 = tb->mx; + bx2 = tb->cx; + } + else + { + by2 = tb->my; + by1 = tb->cy; + bx2 = tb->mx; + bx1 = tb->cx; + } - /* Remove all noun flag */ - if (FLG_NOUN_BEGIN <= flg && flg <= FLG_NOUN_END) + /* String on these lines are not really selected */ + if (tb->lines_list[by1][bx1] == '\0' && by1 < tb->cy) by1++; + if (bx2 == 0 && tb->cy < by2) by2--; + + + /* Set/Reset flag of each line */ + for (y = by1; y <= by2; y++) { - int i; - for (i = FLG_NOUN_BEGIN; i <= FLG_NOUN_END; i++) - REM_FLG(i); + autopick_type an_entry, *entry = &an_entry; + + if (!autopick_new_entry(entry, tb->lines_list[y])) + return; + + string_free(tb->lines_list[y]); + + if (!fixed) + { + /* Add? or Remove? */ + if (!IS_FLG(flg)) add = TRUE; + else add = TRUE; + + /* No more change */ + fixed = TRUE; + } + + /* Remove all noun flag */ + if (FLG_NOUN_BEGIN <= flg && flg <= FLG_NOUN_END) + { + int i; + for (i = FLG_NOUN_BEGIN; i <= FLG_NOUN_END; i++) + REM_FLG(i); + } + + if (add) ADD_FLG(flg); + else REM_FLG(flg); + + tb->lines_list[y] = autopick_line_from_entry_kill(entry); + + /* Now dirty */ + tb->dirty_flags = DIRTY_ALL; } +} + + +/* + * Change command letter + */ +static void toggle_command_letter(text_body_type *tb, byte flg) +{ + autopick_type an_entry, *entry = &an_entry; + int by1, by2, bx1, bx2, y; + bool add = TRUE; + bool fixed = FALSE; - if (IS_FLG(flg)) - REM_FLG(flg); + /* Select this line */ + if (!tb->mark) tb->my = tb->cy; + + if (tb->my < tb->cy) + { + by1 = tb->my; + by2 = tb->cy; + bx1 = tb->mx; + bx2 = tb->cx; + } else - ADD_FLG(flg); + { + by2 = tb->my; + by1 = tb->cy; + bx2 = tb->mx; + bx1 = tb->cx; + } - tb->lines_list[tb->cy] = autopick_line_from_entry_kill(entry); + /* String on these lines are not really selected */ + if (tb->lines_list[by1][bx1] == '\0' && by1 < tb->cy) by1++; + if (bx2 == 0 && tb->cy < by2) by2--; - /* Now dirty */ - tb->dirty_line = tb->cy; -} + /* Set/Reset flag of each line */ + for (y = by1; y <= by2; y++) + { + int wid = 0; + + if (!autopick_new_entry(entry, tb->lines_list[y])) continue; + + string_free(tb->lines_list[y]); + + if (!fixed) + { + /* Add? or Remove? */ + if (!(entry->action & flg)) add = TRUE; + else add = FALSE; + + /* No more change */ + fixed = TRUE; + } + + /* Count number of letter (by negative number) */ + if (entry->action & DONT_AUTOPICK) wid--; + else if (entry->action & DO_AUTODESTROY) wid--; + else if (entry->action & DO_QUERY_AUTOPICK) wid--; + if (!(entry->action & DO_DISPLAY)) wid--; + + /* Set/Reset the flag */ + if (flg != DO_DISPLAY) + { + entry->action &= ~(DO_AUTOPICK | DONT_AUTOPICK | DO_AUTODESTROY | DO_QUERY_AUTOPICK); + if (add) entry->action |= flg; + else entry->action |= DO_AUTOPICK; + } + else + { + entry->action &= ~(DO_DISPLAY); + if (add) entry->action |= flg; + } + + /* Correct cursor location */ + if (tb->cy == y) + { + if (entry->action & DONT_AUTOPICK) wid++; + else if (entry->action & DO_AUTODESTROY) wid++; + else if (entry->action & DO_QUERY_AUTOPICK) wid++; + if (!(entry->action & DO_DISPLAY)) wid++; + + if (wid > 0) tb->cx++; + if (wid < 0 && tb->cx > 0) tb->cx--; + } + + tb->lines_list[y] = autopick_line_from_entry_kill(entry); + + /* Now dirty */ + tb->dirty_flags |= DIRTY_ALL; + } +} /* * Delete or insert string @@ -2898,7 +3035,7 @@ cptr menu_name[] = "¥Þ¥¯¥íÄêµÁ¤òÁÞÆþ", "¥­¡¼¥Þ¥Ã¥×ÄêµÁ¤òÁÞÆþ", - "¼«Æ°¥³¥Þ¥ó¥É»ØÄêʸ»ú", + "½¦¤¤/Ç˲õ/ÊüÃÖ¤ÎÁªÂò", "¡Ö ¡× (¼«Æ°½¦¤¤)", "¡Ö!¡× (¼«Æ°Ç˲õ)", "¡Ö~¡× (ÊüÃÖ)", @@ -3267,16 +3404,6 @@ static void add_str_to_yank(text_body_type *tb, cptr str) } -/* - * Dirty flag for text editor - */ -#define DIRTY_ALL 0x01 -#define DIRTY_MODE 0x04 -#define DIRTY_SCREEN 0x08 -#define DIRTY_NOT_FOUND 0x10 -#define DIRTY_NO_SEARCH 0x20 - - #define DESCRIPT_HGT 3 /* @@ -3354,22 +3481,25 @@ static void draw_text_editor(text_body_type *tb) if (tb->mark) { + /* Correct cursor location */ + int tmp_cx = MIN(tb->cx, (int)strlen(tb->lines_list[tb->cy])); + tb->dirty_flags |= DIRTY_ALL; if (tb->my < tb->cy || - (tb->my == tb->cy && tb->mx < tb->cx)) + (tb->my == tb->cy && tb->mx < tmp_cx)) { by1 = tb->my; bx1 = tb->mx; by2 = tb->cy; - bx2 = tb->cx; + bx2 = tmp_cx; } else { by2 = tb->my; bx2 = tb->mx; by1 = tb->cy; - bx1 = tb->cx; + bx1 = tmp_cx; } } @@ -3789,16 +3919,16 @@ static bool do_editor_command(text_body_type *tb, int com_id) case EC_REVERT: /* Revert to original */ #ifdef JP - if (!get_check("Á´¤Æ¤ÎÊѹ¹¤òÇË´þ¤·¤Æ¸µ¤Î¾õÂÖ¤ËÌᤷ¤Þ¤¹¡£¤è¤í¤·¤¤¤Ç¤¹¤«¡© ")) + if (!get_check("Á´¤Æ¤ÎÊѹ¹¤òÇË´þ¤·¤Æ¸µ¤Î¾õÂÖ¤ËÌᤷ¤Þ¤¹¡£¤è¤í¤·¤¤¤Ç¤¹¤«¡© ")) break; #else - if (!get_check("Discard all changes and revert to original file. Are you sure? ")) + if (!get_check("Discard all changes and revert to original file. Are you sure? ")) break; #endif - break; free_text_lines(tb->lines_list); tb->lines_list = read_pickpref_text_lines(&tb->filename_mode); tb->dirty_flags |= DIRTY_ALL | DIRTY_MODE; tb->cx = tb->cy = 0; + tb->mark = 0; break; case EC_HELP: @@ -3993,6 +4123,9 @@ static bool do_editor_command(text_body_type *tb, int com_id) chain_str_type *chain = tb->yank; + /* Nothing to do? */ + if (!chain) break; + /* Correct cursor location */ if ((uint)tb->cx > strlen(tb->lines_list[tb->cy])) tb->cx = (int)strlen(tb->lines_list[tb->cy]); @@ -4446,155 +4579,11 @@ static bool do_editor_command(text_body_type *tb, int com_id) } break; - case EC_CL_AUTOPICK: - { - autopick_type an_entry, *entry = &an_entry; - - if (!autopick_new_entry(entry, tb->lines_list[tb->cy])) - { - break; - } - string_free(tb->lines_list[tb->cy]); - - if (entry->action & (DO_AUTODESTROY | DONT_AUTOPICK | DO_QUERY_AUTOPICK)) - if (tb->cx > 0) tb->cx--; - - entry->action &= ~DO_AUTODESTROY; - entry->action &= ~DONT_AUTOPICK; - entry->action &= ~DO_QUERY_AUTOPICK; - entry->action |= DO_AUTOPICK; - - tb->lines_list[tb->cy] = autopick_line_from_entry_kill(entry); - - /* Now dirty */ - tb->dirty_line = tb->cy; - break; - } - - case EC_CL_DESTROY: - { - autopick_type an_entry, *entry = &an_entry; - - if (!autopick_new_entry(entry, tb->lines_list[tb->cy])) - { - break; - } - string_free(tb->lines_list[tb->cy]); - - entry->action &= ~DONT_AUTOPICK; - entry->action &= ~DO_QUERY_AUTOPICK; - if (!(entry->action & DO_AUTODESTROY)) - { - entry->action &= ~DO_AUTOPICK; - entry->action |= DO_AUTODESTROY; - tb->cx++; - } - else - { - entry->action &= ~DO_AUTODESTROY; - entry->action |= DO_AUTOPICK; - if (tb->cx > 0) tb->cx--; - } - - tb->lines_list[tb->cy] = autopick_line_from_entry_kill(entry); - - /* Now dirty */ - tb->dirty_line = tb->cy; - - break; - } - - case EC_CL_LEAVE: - { - autopick_type an_entry, *entry = &an_entry; - - if (!autopick_new_entry(entry, tb->lines_list[tb->cy])) - { - break; - } - string_free(tb->lines_list[tb->cy]); - - entry->action &= ~DO_AUTODESTROY; - entry->action &= ~DO_QUERY_AUTOPICK; - if (!(entry->action & DONT_AUTOPICK)) - { - entry->action &= ~DO_AUTOPICK; - entry->action |= DONT_AUTOPICK; - tb->cx++; - } - else - { - entry->action &= ~DONT_AUTOPICK; - entry->action |= DO_AUTOPICK; - if (tb->cx > 0) tb->cx--; - } - - tb->lines_list[tb->cy] = autopick_line_from_entry_kill(entry); - - /* Now dirty */ - tb->dirty_line = tb->cy; - break; - } - - case EC_CL_QUERY: - { - autopick_type an_entry, *entry = &an_entry; - - if (!autopick_new_entry(entry, tb->lines_list[tb->cy])) - { - break; - } - string_free(tb->lines_list[tb->cy]); - - entry->action &= ~DO_AUTODESTROY; - entry->action &= ~DONT_AUTOPICK; - if (!(entry->action & DO_QUERY_AUTOPICK)) - { - entry->action &= ~DO_AUTOPICK; - entry->action |= DO_QUERY_AUTOPICK; - tb->cx++; - } - else - { - entry->action &= ~DO_QUERY_AUTOPICK; - entry->action |= DO_AUTOPICK; - if (tb->cx > 0) tb->cx--; - } - - tb->lines_list[tb->cy] = autopick_line_from_entry_kill(entry); - - /* Now dirty */ - tb->dirty_line = tb->cy; - break; - } - - case EC_CL_NO_DISP: - { - /* Toggle display on the 'M'ap */ - - autopick_type an_entry, *entry = &an_entry; - - if (!autopick_new_entry(entry, tb->lines_list[tb->cy])) - break; - string_free(tb->lines_list[tb->cy]); - - if (entry->action & DO_DISPLAY) - { - entry->action &= ~DO_DISPLAY; - tb->cx++; - } - else - { - entry->action |= DO_DISPLAY; - if (tb->cx > 0) tb->cx--; - } - - tb->lines_list[tb->cy] = autopick_line_from_entry_kill(entry); - - /* Now dirty */ - tb->dirty_line = tb->cy; - break; - } + case EC_CL_AUTOPICK: toggle_command_letter(tb, DO_AUTOPICK); break; + case EC_CL_DESTROY: toggle_command_letter(tb, DO_AUTODESTROY); break; + case EC_CL_LEAVE: toggle_command_letter(tb, DONT_AUTOPICK); break; + case EC_CL_QUERY: toggle_command_letter(tb, DO_QUERY_AUTOPICK); break; + case EC_CL_NO_DISP: toggle_command_letter(tb, DO_DISPLAY); break; case EC_IK_UNAWARE: toggle_keyword(tb, FLG_UNAWARE); break; case EC_IK_UNIDENTIFIED: toggle_keyword(tb, FLG_UNIDENTIFIED); break; @@ -4790,6 +4779,7 @@ void do_cmd_edit_autopick(void) while (!quit) { int com_id = 0; + size_t trig_len; /* Draw_everythig */ draw_text_editor(tb); @@ -4803,12 +4793,12 @@ void do_cmd_edit_autopick(void) if (!tb->mark) { /* Display current position */ - prt (format("(%d, %d)", tb->cx, tb->cy), 0, 60); + prt (format("(%d,%d)", tb->cx, tb->cy), 0, 60); } else { /* Display current position and mark position */ - prt (format("(%d-%d, %d-%d)", tb->mx, tb->cx, tb->my, tb->cy), 0, 60); + prt (format("(%d,%d)-(%d,%d)", tb->mx, tb->my, tb->cx, tb->cy), 0, 60); } /* Place cursor */ @@ -4828,27 +4818,22 @@ void do_cmd_edit_autopick(void) /* Get a command */ key = inkey(); - /* Delete key */ - if (key == 0x7F) key = KTRL('d'); + /* Count length of macro trigger which induced this key */ + trig_len = strlen(inkey_macro_trigger_string); /* HACK -- ignore macro defined on ASCII keys */ - if (strlen(inkey_macro_trigger_string) == 1) + if (trig_len == 1) { /* Get original key */ key = inkey_macro_trigger_string[0]; } + /* Delete key */ + if (key == 0x7F) key = KTRL('d'); - if (key == ESCAPE) - { - com_id = do_command_menu(0, 0); - - /* Redraw all */ - tb->dirty_flags |= DIRTY_SCREEN; - } /* Cursor key macroes to direction command */ - else if (strlen(inkey_macro_trigger_string) > 1) + if (strlen(inkey_macro_trigger_string) > 1) { switch (key) { @@ -4911,6 +4896,15 @@ void do_cmd_edit_autopick(void) /* Already done */ } + /* Open the menu */ + else if (key == ESCAPE) + { + com_id = do_command_menu(0, 0); + + /* Redraw all */ + tb->dirty_flags |= DIRTY_SCREEN; + } + /* Insert a character */ else if (!iscntrl(key & 0xff)) { diff --git a/src/cmd4.c b/src/cmd4.c index 294f38201..763402c81 100644 --- a/src/cmd4.c +++ b/src/cmd4.c @@ -2287,22 +2287,24 @@ void do_cmd_options(void) /* Why are we here */ #ifdef JP - prt("[ ¥ª¥×¥·¥ç¥ó¤ÎÀßÄê ]", 2, 0); + prt("[ ¥ª¥×¥·¥ç¥ó¤ÎÀßÄê ]", 1, 0); #else - prt("Options", 2, 0); + prt("Options", 1, 0); #endif /* Give some choices */ #ifdef JP - prt("(1) ¥­¡¼ÆþÎÏ ¥ª¥×¥·¥ç¥ó", 3, 5); - prt("(2) ²èÌ̽ÐÎÏ ¥ª¥×¥·¥ç¥ó", 4, 5); - prt("(3) ¥²¡¼¥à¥×¥ì¥¤ ¥ª¥×¥·¥ç¥ó", 5, 5); - prt("(4) ¹ÔÆ°Ãæ»ß´Ø·¸ ¥ª¥×¥·¥ç¥ó", 6, 5); - prt("(5) ¸úΨ²½ ¥ª¥×¥·¥ç¥ó", 7, 5); - prt("(6) ´Ê°×¥¢¥¤¥Æ¥à¼«Æ°Ç˲õ ¥ª¥×¥·¥ç¥ó", 8, 5); - prt("(R) ¥×¥ì¥¤µ­Ï¿ ¥ª¥×¥·¥ç¥ó", 9, 5); + prt("(1) ¥­¡¼ÆþÎÏ ¥ª¥×¥·¥ç¥ó", 2, 5); + prt("(2) ²èÌ̽ÐÎÏ ¥ª¥×¥·¥ç¥ó", 3, 5); + prt("(3) ¥²¡¼¥à¥×¥ì¥¤ ¥ª¥×¥·¥ç¥ó", 4, 5); + prt("(4) ¹ÔÆ°Ãæ»ß´Ø·¸ ¥ª¥×¥·¥ç¥ó", 5, 5); + prt("(5) ¸úΨ²½ ¥ª¥×¥·¥ç¥ó", 6, 5); + prt("(6) ´Ê°×¥¢¥¤¥Æ¥à¼«Æ°Ç˲õ ¥ª¥×¥·¥ç¥ó", 7, 5); + prt("(R) ¥×¥ì¥¤µ­Ï¿ ¥ª¥×¥·¥ç¥ó", 8, 5); + /* Special choices */ + prt("(P) ¼«Æ°½¦¤¤¥¨¥Ç¥£¥¿", 10, 5); prt("(D) ´ðËÜ¥¦¥§¥¤¥ÈÎÌ", 11, 5); prt("(H) Äã¥Ò¥Ã¥È¥Ý¥¤¥ó¥È·Ù¹ð", 12, 5); prt("(M) ÄãËâÎÏ¿§ïçÃÍ", 13, 5); @@ -2310,14 +2312,15 @@ void do_cmd_options(void) /* Window flags */ prt("(W) ¥¦¥¤¥ó¥É¥¦¥Õ¥é¥°", 15, 5); #else - prt("(1) Input Options", 3, 5); - prt("(2) Output Options", 4, 5); - prt("(3) Game-Play Options", 5, 5); - prt("(4) Disturbance Options", 6, 5); - prt("(5) Efficiency Options", 7, 5); - prt("(6) Easy Auto-Destroyer Options", 8, 5); - prt("(R) Play-record Options", 9, 5); + prt("(1) Input Options", 2, 5); + prt("(2) Output Options", 3, 5); + prt("(3) Game-Play Options", 4, 5); + prt("(4) Disturbance Options", 5, 5); + prt("(5) Efficiency Options", 6, 5); + prt("(6) Easy Auto-Destroyer Options", 7, 5); + prt("(R) Play-record Options", 8, 5); /* Special choices */ + prt("(P) Auto-picker/destroyer editor", 10, 5); prt("(D) Base Delay Factor", 11, 5); prt("(H) Hitpoint Warning", 12, 5); prt("(M) Mana Color Threshold", 13, 5); @@ -2330,7 +2333,7 @@ void do_cmd_options(void) { /* Birth */ #ifdef JP - prt("(B) ½é´ü ¥ª¥×¥·¥ç¥ó (»²¾È¤Î¤ß)", 16, 5); + prt("(B) ½é´ü ¥ª¥×¥·¥ç¥ó (»²¾È¤Î¤ß)", 16, 5); #else prt("(B) Birth Options (Browse Only)", 16, 5); #endif @@ -2339,7 +2342,7 @@ void do_cmd_options(void) { /* Birth */ #ifdef JP - prt("(B) ½é´ü ¥ª¥×¥·¥ç¥ó", 16, 5); + prt("(B) ½é´ü ¥ª¥×¥·¥ç¥ó", 16, 5); #else prt("(B) Birth Options", 16, 5); #endif @@ -2350,7 +2353,7 @@ void do_cmd_options(void) { /* Cheating */ #ifdef JP - prt("(C) º¾µ½ ¥ª¥×¥·¥ç¥ó", 17, 5); + prt("(C) º¾µ½ ¥ª¥×¥·¥ç¥ó", 17, 5); #else prt("(C) Cheating Options", 17, 5); #endif @@ -2523,6 +2526,14 @@ void do_cmd_options(void) break; } + /* Auto-picker/destroyer editor */ + case 'P': + case 'p': + { + do_cmd_edit_autopick(); + break; + } + /* Hack -- Delay Speed */ case 'D': case 'd': -- 2.11.0