Proper ball shadow removal in poser mode. Patch from Elviz.
[neverball] / ball / st_save.c
index 9dfef74..9ea2efd 100644 (file)
@@ -21,6 +21,8 @@
 #include "audio.h"
 #include "config.h"
 #include "demo.h"
+#include "levels.h"
+#include "text.h"
 
 #include "st_shared.h"
 #include "st_save.h"
@@ -54,20 +56,23 @@ static int file_id;
 
 static int save_action(int i)
 {
-    size_t l = strlen(filename);
+    char *n;
 
     audio_play(AUD_MENU, 1.0f);
 
     switch (i)
     {
     case SAVE_SAVE:
-        if (strlen(filename) == 0)
+        n = text_to_locale(filename);
+
+        if (strlen(n) == 0)
             return 1;
-        if (demo_exists(filename))
+
+        if (demo_exists(n))
             return goto_state(&st_clobber);
         else
         {
-            demo_play_save(filename);
+            demo_rename(n);
             return goto_state(ok_state);
         }
 
@@ -79,20 +84,13 @@ static int save_action(int i)
         break;
 
     case GUI_BS:
-        if (l > 0)
-        {
-            filename[l - 1] = 0;
+        if (text_del_char(filename))
             gui_set_label(file_id, filename);
-        }
         break;
 
     default:
-        if (l < MAXNAM - 1)
-        {
-            filename[l + 0] = (char) i;
-            filename[l + 1] = 0;
+        if (text_add_char(i, filename, MAXNAM, 17))
             gui_set_label(file_id, filename);
-        }
     }
     return 1;
 }
@@ -137,7 +135,7 @@ static void save_leave(int id)
 
 static int save_keybd(int c, int d)
 {
-    if (d && isascii(c))
+    if (d)
     {
         gui_focus(enter_id);
 
@@ -175,7 +173,7 @@ static int clobber_action(int i)
 
     if (i == SAVE_SAVE)
     {
-        demo_play_save(filename);
+        demo_rename(text_to_locale(filename));
         return goto_state(ok_state);
     }
     return goto_state(&st_save);