Mercurial > hg > early-roguelike
comparison rogue5/save.c @ 34:655c317b6237
rogue5: add savedir, logfile, bugfixes
author | elwin |
---|---|
date | Mon, 24 May 2010 20:16:15 +0000 |
parents | f502bf60e6e4 |
children | af6b05e86747 |
comparison
equal
deleted
inserted
replaced
33:f502bf60e6e4 | 34:655c317b6237 |
---|---|
39 over: | 39 over: |
40 if (file_name[0] != '\0') | 40 if (file_name[0] != '\0') |
41 { | 41 { |
42 for (;;) | 42 for (;;) |
43 { | 43 { |
44 msg("save file (%s)? ", file_name); | 44 if (use_savedir) |
45 msg("Save game? "); | |
46 else | |
47 msg("Save file (%s)? ", file_name); | |
45 c = readchar(); | 48 c = readchar(); |
46 mpos = 0; | 49 mpos = 0; |
47 if (c == ESCAPE) | 50 if (c == ESCAPE) |
48 { | 51 { |
49 msg(""); | 52 msg(""); |
61 strcpy(buf, file_name); | 64 strcpy(buf, file_name); |
62 goto gotfile; | 65 goto gotfile; |
63 } | 66 } |
64 } | 67 } |
65 | 68 |
69 if (use_savedir) /* User chose N, changing location isn't allowed. */ | |
70 goto quit_it; | |
66 do | 71 do |
67 { | 72 { |
68 mpos = 0; | 73 mpos = 0; |
69 msg("file name: "); | 74 msg("file name: "); |
70 buf[0] = '\0'; | 75 buf[0] = '\0'; |
77 mpos = 0; | 82 mpos = 0; |
78 gotfile: | 83 gotfile: |
79 /* | 84 /* |
80 * test to see if the file exists | 85 * test to see if the file exists |
81 */ | 86 */ |
82 if (stat(buf, &sbuf) >= 0) | 87 if (stat(buf, &sbuf) >= 0 && !use_savedir) |
83 { | 88 { |
84 for (;;) | 89 for (;;) |
85 { | 90 { |
86 msg("File exists. Do you wish to overwrite it?"); | 91 msg("File exists. Do you wish to overwrite it?"); |
87 mpos = 0; | 92 mpos = 0; |
97 msg("file name: %s", buf); | 102 msg("file name: %s", buf); |
98 md_unlink(file_name); | 103 md_unlink(file_name); |
99 } | 104 } |
100 strcpy(file_name, buf); | 105 strcpy(file_name, buf); |
101 if ((savef = fopen(file_name, "w")) == NULL) | 106 if ((savef = fopen(file_name, "w")) == NULL) |
107 { | |
102 msg(strerror(errno)); | 108 msg(strerror(errno)); |
109 if (use_savedir) | |
110 return; | |
111 } | |
103 } while (savef == NULL); | 112 } while (savef == NULL); |
104 msg(""); | 113 msg(""); |
105 save_file(savef); | 114 save_file(savef); |
106 /* NOTREACHED */ | 115 /* NOTREACHED */ |
107 } | 116 } |
136 char buf[80]; | 145 char buf[80]; |
137 mvcur(0, COLS - 1, LINES - 1, 0); | 146 mvcur(0, COLS - 1, LINES - 1, 0); |
138 putchar('\n'); | 147 putchar('\n'); |
139 endwin(); | 148 endwin(); |
140 resetltchars(); | 149 resetltchars(); |
141 md_chmod(file_name, 0400); | 150 md_chmod(file_name, 0644); |
142 encwrite(version, strlen(version)+1, savef); | 151 encwrite(version, strlen(version)+1, savef); |
143 sprintf(buf,"%d x %d\n", LINES, COLS); | 152 sprintf(buf,"%d x %d\n", LINES, COLS); |
144 encwrite(buf,80,savef); | 153 encwrite(buf,80,savef); |
145 rs_save_file(savef); | 154 rs_save_file(savef); |
146 fflush(savef); | 155 fflush(savef); |
147 fclose(savef); | 156 fclose(savef); |
157 printf("See you soon, %s!\n", whoami); | |
148 exit(0); | 158 exit(0); |
149 } | 159 } |
150 | 160 |
151 /* | 161 /* |
152 * restore: | 162 * restore: |
165 if (strcmp(file, "-r") == 0) | 175 if (strcmp(file, "-r") == 0) |
166 file = file_name; | 176 file = file_name; |
167 | 177 |
168 md_tstphold(); | 178 md_tstphold(); |
169 | 179 |
170 if ((inf = fopen(file,"r")) == NULL) | 180 if ((inf = fopen(file,"r")) == NULL) |
171 { | 181 { |
182 /* If a system savefile doesn't exist, start a new game. */ | |
183 if (use_savedir && errno == ENOENT) | |
184 return TRUE; | |
172 perror(file); | 185 perror(file); |
173 return FALSE; | 186 return FALSE; |
174 } | 187 } |
175 stat(file, &sbuf2); | 188 stat(file, &sbuf2); |
176 syml = is_symlink(file); | 189 syml = is_symlink(file); |