Mercurial > hg > early-roguelike
annotate rogue4/save.c @ 19:a86ae56e1ed6
rogue3: make LOGFILE work with SAVEDIR
| author | edwarj4 | 
|---|---|
| date | Wed, 11 Nov 2009 02:41:47 +0000 | 
| parents | e7dc81b41168 | 
| children | 09da55b986ca | 
| rev | line source | 
|---|---|
| 12 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 1 /* | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 2 * save and restore routines | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 3 * | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 4 * @(#)save.c 4.15 (Berkeley) 5/10/82 | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 5 * | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 6 * Rogue: Exploring the Dungeons of Doom | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 7 * Copyright (C) 1980, 1981, 1982 Michael Toy, Ken Arnold and Glenn Wichman | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 8 * All rights reserved. | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 9 * | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 10 * See the file LICENSE.TXT for full copyright and licensing information. | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 11 */ | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 12 | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 13 #include <curses.h> | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 14 #include <sys/types.h> | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 15 #include <sys/stat.h> | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 16 #include <errno.h> | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 17 #include <string.h> | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 18 #include <stdlib.h> | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 19 #define KERNEL | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 20 #include <signal.h> | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 21 #undef KERNEL | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 22 #include "rogue.h" | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 23 | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 24 typedef struct stat STAT; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 25 | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 26 extern char version[], encstr[]; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 27 extern bool _endwin; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 28 | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 29 STAT sbuf; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 30 | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 31 /* | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 32 * save_game: | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 33 * Implement the "save game" command | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 34 */ | 
| 14 
e7dc81b41168
rogue4: prevent changing name or save file when using system savedir
 edwarj4 parents: 
13diff
changeset | 35 /* This has to be cleaned up, these goto's are annoying. */ | 
| 12 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 36 save_game() | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 37 { | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 38 register FILE *savef; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 39 register int c; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 40 char buf[MAXSTR]; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 41 | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 42 /* | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 43 * get file name | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 44 */ | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 45 mpos = 0; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 46 over: | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 47 if (file_name[0] != '\0') | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 48 { | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 49 for (;;) | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 50 { | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 51 msg("save file (%s)? ", file_name); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 52 c = getchar(); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 53 mpos = 0; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 54 if (c == ESCAPE) | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 55 { | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 56 msg(""); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 57 return FALSE; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 58 } | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 59 else if (c == 'n' || c == 'N' || c == 'y' || c == 'Y') | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 60 break; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 61 else | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 62 msg("please answer Y or N"); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 63 } | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 64 if (c == 'y' || c == 'Y') | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 65 { | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 66 strcpy(buf, file_name); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 67 goto gotfile; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 68 } | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 69 } | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 70 | 
| 14 
e7dc81b41168
rogue4: prevent changing name or save file when using system savedir
 edwarj4 parents: 
13diff
changeset | 71 if (use_savedir) | 
| 
e7dc81b41168
rogue4: prevent changing name or save file when using system savedir
 edwarj4 parents: 
13diff
changeset | 72 { | 
| 
e7dc81b41168
rogue4: prevent changing name or save file when using system savedir
 edwarj4 parents: 
13diff
changeset | 73 /* You can't change the savefile if you're using the system | 
| 
e7dc81b41168
rogue4: prevent changing name or save file when using system savedir
 edwarj4 parents: 
13diff
changeset | 74 savedir, because that means you have privileges. */ | 
| 
e7dc81b41168
rogue4: prevent changing name or save file when using system savedir
 edwarj4 parents: 
13diff
changeset | 75 msg(""); | 
| 
e7dc81b41168
rogue4: prevent changing name or save file when using system savedir
 edwarj4 parents: 
13diff
changeset | 76 return FALSE; | 
| 
e7dc81b41168
rogue4: prevent changing name or save file when using system savedir
 edwarj4 parents: 
13diff
changeset | 77 } | 
| 
e7dc81b41168
rogue4: prevent changing name or save file when using system savedir
 edwarj4 parents: 
13diff
changeset | 78 | 
| 12 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 79 do | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 80 { | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 81 mpos = 0; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 82 msg("file name: "); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 83 buf[0] = '\0'; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 84 if (get_str(buf, | 
