some cleanups memory leak fixes and moving of source files
[supertux.git] / src / high_scores.cpp
index 5b2d827..86b1eb6 100644 (file)
@@ -1,22 +1,41 @@
-/*
-  by Adam Czachorowski
-  gislan@o2.pl
-*/
+//  $Id$
+// 
+//  SuperTux
+//  Copyright (C) 2004 Adam Czachorowski <gislan@o2.pl>
+//
+//  This program is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU General Public License
+//  as published by the Free Software Foundation; either version 2
+//  of the License, or (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+// 
+//  You should have received a copy of the GNU General Public License
+//  along with this program; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+//  02111-1307, USA.
 
 /* Open the highscore file: */
 
-#include <string.h>
-#include <stdlib.h>
+#include <config.h>
+
+#include <cstring>
+#include <cstdlib>
 
-#include "globals.h"
+#include "app/globals.h"
 #include "high_scores.h"
-#include "menu.h"
-#include "screen.h"
-#include "texture.h"
-#include "setup.h"
-#include "lispreader.h"
+#include "gui/menu.h"
+#include "video/drawing_context.h"
+#include "video/screen.h"
+#include "video/surface.h"
+#include "app/setup.h"
+#include "utils/lispreader.h"
+#include "resources.h"
+
+using namespace SuperTux;
 
 #ifdef WIN32
 const char * highscore_filename = "/st_highscore.dat";
@@ -56,14 +75,12 @@ void load_hs(void)
   if (strcmp(lisp_symbol(lisp_car(root_obj)), "supertux-highscore") == 0)
     {
       LispReader reader(lisp_cdr(root_obj));
-      reader.read_int("score",  &hs_score);
-      reader.read_string("name", &hs_name);
+      reader.read_int("score",  hs_score);
+      reader.read_string("name", hs_name);
     }
  
   fclose(fi);
-
-printf("name=%s\n", hs_name.c_str());
-printf("score=%i\n\n", hs_score);
+  lisp_free(root_obj);
 }
 
 void save_hs(int score)
@@ -73,31 +90,31 @@ void save_hs(int score)
   Surface* bkgd;
   SDL_Event event;
 
-  bkgd = new Surface(datadir + "/images/highscore/highscore.png", IGNORE_ALPHA);
+  DrawingContext context;
+  bkgd = new Surface(datadir + "/images/highscore/highscore.png", false);
 
   hs_score = score;
 
   Menu::set_current(highscore_menu);
 
-  if(!highscore_menu->item[0].input)
-    highscore_menu->item[0].input = (char*) malloc(strlen(hs_name.c_str()) + 1);
-
-  strcpy(highscore_menu->item[0].input,hs_name.c_str());
+  highscore_menu->item[0].input = hs_name;
 
   /* ask for player's name */
   while(Menu::current())
     {
-      bkgd->draw_bg();
+      context.draw_surface(bkgd, Vector(0, 0), LAYER_BACKGROUND0);
 
-      blue_text->drawf("Congratulations", 0, 130, A_HMIDDLE, A_TOP, 2, NO_UPDATE);
-      blue_text->draw("Your score:", 150, 180, 1, NO_UPDATE);
+      context.draw_text(blue_text, "Congratulations", 
+          Vector(screen->w/2, 130), CENTER_ALLIGN, LAYER_FOREGROUND1);
+      context.draw_text(blue_text, "Your score:", Vector(150, 180),
+          LEFT_ALLIGN, LAYER_FOREGROUND1);
       sprintf(str, "%d", hs_score);
-      yellow_nums->draw(str, 350, 170, 1, NO_UPDATE);
+      context.draw_text(yellow_nums, str, Vector(250, 170), LEFT_ALLIGN, LAYER_FOREGROUND1);
 
+      Menu::current()->draw(context);
       Menu::current()->action();
-      Menu::current()->draw();
 
-      flipscreen();
+      context.do_drawing();
 
       while(SDL_PollEvent(&event))
         if(event.type == SDL_KEYDOWN)
@@ -106,8 +123,7 @@ void save_hs(int score)
       switch (highscore_menu->check())
         {
         case 0:
-          if(highscore_menu->item[0].input != NULL)
-            hs_name = highscore_menu->item[0].input;
+          hs_name = highscore_menu->item[0].input;
           break;
         }
 
@@ -123,8 +139,8 @@ void save_hs(int score)
   /* Save data file: */
   filename = highscore_filename;
 
-  fcreatedir(filename.c_str());
-  if(fwriteable(filename.c_str()))
+  FileSystem::fcreatedir(filename.c_str());
+  if(FileSystem::fwriteable(filename.c_str()))
     {
       fi = fopen(filename.c_str(), "w");
       if (fi == NULL)
@@ -145,18 +161,4 @@ void save_hs(int score)
       fprintf( fi,")");
       fclose(fi);
     }
-
-/*
-  fi = opendata(highscore_filename, "w");
-  if (fi != NULL)
-    {
-      fprintf(fi, "# Supertux highscore file\n\n");
-
-      fprintf(fi, "name=%s\n", hs_name);
-      fprintf(fi, "highscore=%d\n", hs_score);
-
-      fprintf(fi, "# (File automatically created.)\n");
-
-      fclose(fi);
-    }*/
 }