+- (void)saveGame:(id)sender
+{
+ NSSavePanel *sp = [NSSavePanel savePanel];
+
+ if ([sp runModal] == NSFileHandlingPanelOKButton) {
+ const char *name = [[sp filename] cString];
+
+ FILE *fp = fopen(name, "w");
+
+ if (!fp) {
+ [self showError:"Unable to open save file"];
+ return;
+ }
+
+ midend_serialise(me, savefile_write, fp);
+
+ fclose(fp);
+ }
+}
+- (void)loadSavedGame:(id)sender
+{
+ NSOpenPanel *op = [NSOpenPanel openPanel];
+
+ [op setAllowsMultipleSelection:NO];
+
+ if ([op runModalForTypes:nil] == NSOKButton) {
+ const char *name = [[[op filenames] objectAtIndex:0] cString];
+ char *err;
+
+ FILE *fp = fopen(name, "r");
+
+ if (!fp) {
+ [self showError:"Unable to open saved game file"];
+ return;
+ }
+
+ err = midend_deserialise(me, savefile_read, fp);
+
+ fclose(fp);
+
+ if (err) {
+ [self showError:err];
+ return;
+ }
+
+ [self resizeForNewGameParams];
+ }
+}