3 // SuperTux - A Jump'n Run
4 // Copyright (C) 2004 Michael George <mike@georgetech.com>
6 // This program is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU General Public License
8 // as published by the Free Software Foundation; either version 2
9 // of the License, or (at your option) any later version.
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 #include "configfile.h"
25 #include "lispreader.h"
29 const char * config_filename = "/st_config.dat";
31 const char * config_filename = "/config";
34 static void defaults ()
40 use_fullscreen = false;
54 /* override defaults from config file */
56 file = opendata(config_filename, "r");
61 /* read config file */
64 lisp_object_t * root_obj = NULL;
66 lisp_stream_init_file (&stream, file);
67 root_obj = lisp_read (&stream);
69 if (root_obj->type == LISP_TYPE_EOF || root_obj->type == LISP_TYPE_PARSE_ERROR)
72 if (strcmp(lisp_symbol(lisp_car(root_obj)), "supertux-config") != 0)
75 LispReader reader(lisp_cdr(root_obj));
77 reader.read_bool("fullscreen", use_fullscreen);
78 reader.read_bool("sound", use_sound);
79 reader.read_bool("music", use_music);
80 reader.read_bool("show_fps", show_fps);
83 reader.read_string ("video", video);
84 if (video == "opengl")
89 reader.read_int ("joystick", joystick_num);
90 if (!(joystick_num >= 0))
95 reader.read_int ("joystick-x", joystick_keymap.x_axis);
96 reader.read_int ("joystick-y", joystick_keymap.y_axis);
97 reader.read_int ("joystick-a", joystick_keymap.a_button);
98 reader.read_int ("joystick-b", joystick_keymap.b_button);
99 reader.read_int ("joystick-start", joystick_keymap.start_button);
100 reader.read_int ("joystick-deadzone", joystick_keymap.dead_zone);
102 reader.read_int ("keyboard-jump", keymap.jump);
103 reader.read_int ("keyboard-activate", keymap.activate);
104 reader.read_int ("keyboard-duck", keymap.duck);
105 reader.read_int ("keyboard-left", keymap.left);
106 reader.read_int ("keyboard-right", keymap.right);
107 reader.read_int ("keyboard-fire", keymap.fire);
112 void saveconfig (void)
114 /* write settings to config file */
115 FILE * config = opendata(config_filename, "w");
119 fprintf(config, "(supertux-config\n");
120 fprintf(config, "\t;; the following options can be set to #t or #f:\n");
121 fprintf(config, "\t(fullscreen %s)\n", use_fullscreen ? "#t" : "#f");
122 fprintf(config, "\t(sound %s)\n", use_sound ? "#t" : "#f");
123 fprintf(config, "\t(music %s)\n", use_music ? "#t" : "#f");
124 fprintf(config, "\t(show_fps %s)\n", show_fps ? "#t" : "#f");
126 fprintf(config, "\n\t;; either \"opengl\" or \"sdl\"\n");
127 fprintf(config, "\t(video \"%s\")\n", use_gl ? "opengl" : "sdl");
129 fprintf(config, "\n\t;; joystick number (-1 means no joystick):\n");
130 fprintf(config, "\t(joystick %d)\n", use_joystick ? joystick_num : -1);
132 fprintf(config, "\t(joystick-x %d)\n", joystick_keymap.x_axis);
133 fprintf(config, "\t(joystick-y %d)\n", joystick_keymap.y_axis);
134 fprintf(config, "\t(joystick-a %d)\n", joystick_keymap.a_button);
135 fprintf(config, "\t(joystick-b %d)\n", joystick_keymap.b_button);
136 fprintf(config, "\t(joystick-start %d)\n", joystick_keymap.start_button);
137 fprintf(config, "\t(joystick-deadzone %d)\n", joystick_keymap.dead_zone);
139 fprintf(config, "\t(keyboard-jump %d)\n", keymap.jump);
140 fprintf(config, "\t(keyboard-duck %d)\n", keymap.duck);
141 fprintf(config, "\t(keyboard-left %d)\n", keymap.left);
142 fprintf(config, "\t(keyboard-right %d)\n", keymap.right);
143 fprintf(config, "\t(keyboard-fire %d)\n", keymap.fire);
145 fprintf(config, ")\n");