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);