changed variable handling when typing name in main menu
[rocksndiamonds.git] / src / screens.c
index 95b56934b1ba724ec404442afd310387fdf2d829..24d440c7bb71e9c724be6a7282c61d8bb2a9711e 100644 (file)
@@ -3980,11 +3980,12 @@ void HandleInfoScreen(int mx, int my, int dx, int dy, int button)
 
 static void HandleTypeNameExt(boolean initialize, Key key)
 {
+  static char name[MAX_PLAYER_NAME_LEN + 1];
   static char last_player_name[MAX_PLAYER_NAME_LEN + 1];
   struct MainControlInfo *mci = getMainControlInfo(MAIN_CONTROL_NAME);
   struct TextPosInfo *pos = mci->pos_input;
-  int startx = mSX + ALIGNED_TEXT_XPOS(pos);
-  int starty = mSY + ALIGNED_TEXT_YPOS(pos);
+  int sx = mSX + ALIGNED_TEXT_XPOS(pos);
+  int sy = mSY + ALIGNED_TEXT_YPOS(pos);
   static int xpos = 0;
   int font_nr = pos->font;
   int font_active_nr = FONT_ACTIVE(font_nr);
@@ -3993,20 +3994,21 @@ static void HandleTypeNameExt(boolean initialize, Key key)
   boolean is_valid_key_char = (key_char != 0 && (key_char != ' ' || xpos > 0));
   boolean is_active = TRUE;
 
-  DrawBackgroundForFont(startx,starty, pos->width, pos->height, font_active_nr);
+  DrawBackgroundForFont(sx, sy, pos->width, pos->height, font_active_nr);
 
   if (initialize)
   {
-    strcpy(last_player_name, setup.player_name);
+    strcpy(name, setup.player_name);
+    strcpy(last_player_name, name);
 
-    xpos = strlen(setup.player_name);
+    xpos = strlen(name);
 
-    StartTextInput(startx, starty, pos->width, pos->height);
+    StartTextInput(sx, sy, pos->width, pos->height);
   }
   else if (is_valid_key_char && xpos < MAX_PLAYER_NAME_LEN)
   {
-    setup.player_name[xpos] = key_char;
-    setup.player_name[xpos + 1] = 0;
+    name[xpos] = key_char;
+    name[xpos + 1] = 0;
 
     xpos++;
   }
@@ -4014,39 +4016,39 @@ static void HandleTypeNameExt(boolean initialize, Key key)
   {
     xpos--;
 
-    setup.player_name[xpos] = 0;
+    name[xpos] = 0;
   }
   else if (key == KSYM_Return && xpos > 0)
   {
+    strcpy(setup.player_name, name);
+
     SaveSetup();
 
     is_active = FALSE;
-
-    SetGameStatus(GAME_MODE_MAIN);
   }
   else if (key == KSYM_Escape)
   {
-    strcpy(setup.player_name, last_player_name);
+    strcpy(name, last_player_name);
 
     is_active = FALSE;
-
-    SetGameStatus(GAME_MODE_MAIN);
   }
 
   if (is_active)
   {
-    pos->width = (strlen(setup.player_name) + 1) * font_width;
-    startx = mSX + ALIGNED_TEXT_XPOS(pos);
+    pos->width = (strlen(name) + 1) * font_width;
+    sx = mSX + ALIGNED_TEXT_XPOS(pos);
 
-    DrawText(startx, starty, setup.player_name, font_active_nr);
-    DrawText(startx + xpos * font_width, starty, "_", font_active_nr);
+    DrawText(sx, sy, name, font_active_nr);
+    DrawText(sx + xpos * font_width, sy, "_", font_active_nr);
   }
   else
   {
-    pos->width = strlen(setup.player_name) * font_width;
-    startx = mSX + ALIGNED_TEXT_XPOS(pos);
+    SetGameStatus(GAME_MODE_MAIN);
+
+    pos->width = strlen(name) * font_width;
+    sx = mSX + ALIGNED_TEXT_XPOS(pos);
 
-    DrawText(startx, starty, setup.player_name, font_nr);
+    DrawText(sx, sy, name, font_nr);
 
     StopTextInput();
   }