Mercurial > hg > early-roguelike
comparison rogue4/rip.c @ 279:d3968e9cb98d
Use C stdio functions for score files and save files.
Switching from Unix file descriptor operations to C standard FILE*
functions will reduce portability problems.
author | John "Elwin" Edwards |
---|---|
date | Fri, 15 Sep 2017 19:57:54 -0400 |
parents | 23d2e2bf812f |
children | 0250220d8cdd |
comparison
equal
deleted
inserted
replaced
278:c222f9d56776 | 279:d3968e9cb98d |
---|---|
47 score(int amount, int flags, char monst) | 47 score(int amount, int flags, char monst) |
48 { | 48 { |
49 register struct sc_ent *scp; | 49 register struct sc_ent *scp; |
50 register int i; | 50 register int i; |
51 register struct sc_ent *sc2; | 51 register struct sc_ent *sc2; |
52 register FILE *outf; | |
53 register int prflags = 0; | 52 register int prflags = 0; |
54 register void (*fp)(int); | 53 register void (*fp)(int); |
55 register int uid; | 54 register int uid; |
56 char scoreline[MAXSTR + 100]; | 55 char scoreline[MAXSTR + 100]; |
57 | 56 |
70 }; | 69 }; |
71 void endit(); | 70 void endit(); |
72 | 71 |
73 start_score(); | 72 start_score(); |
74 | 73 |
75 if (fd >= 0) | |
76 outf = md_fdopen(fd, "wb"); | |
77 else | |
78 return; | |
79 | |
80 for (scp = top_ten; scp <= &top_ten[9]; scp++) | 74 for (scp = top_ten; scp <= &top_ten[9]; scp++) |
81 { | 75 { |
82 scp->sc_score = 0; | 76 scp->sc_score = 0; |
83 for (i = 0; i < MAXSTR; i++) | 77 for (i = 0; i < MAXSTR; i++) |
84 scp->sc_name[i] = rnd(255); | 78 scp->sc_name[i] = rnd(255); |
110 else if (strcmp(prbuf, "edit") == 0) | 104 else if (strcmp(prbuf, "edit") == 0) |
111 prflags = 2; | 105 prflags = 2; |
112 #endif | 106 #endif |
113 for(i=0; i<10; i++) | 107 for(i=0; i<10; i++) |
114 { | 108 { |
115 encread((char *) &top_ten[i].sc_name, MAXSTR, fd); | 109 encread((char *) &top_ten[i].sc_name, MAXSTR, score_file); |
116 scoreline[0] = '\0'; | 110 scoreline[0] = '\0'; |
117 encread((char *) scoreline, 100, fd); | 111 encread((char *) scoreline, 100, score_file); |
118 sscanf(scoreline, "%d %d %hd %hd %hd", &top_ten[i].sc_flags, | 112 sscanf(scoreline, "%d %d %hd %hd %hd", &top_ten[i].sc_flags, |
119 &top_ten[i].sc_uid, &top_ten[i].sc_monster, &top_ten[i].sc_score, | 113 &top_ten[i].sc_uid, &top_ten[i].sc_monster, &top_ten[i].sc_score, |
120 &top_ten[i].sc_level); | 114 &top_ten[i].sc_level); |
121 } | 115 } |
122 /* | 116 /* |
207 printf(".\n"); | 201 printf(".\n"); |
208 } | 202 } |
209 else | 203 else |
210 break; | 204 break; |
211 } | 205 } |
212 fseek(outf, 0L, 0); | 206 fseek(score_file, 0L, 0); |
213 /* | 207 /* |
214 * Update the list file | 208 * Update the list file |
215 */ | 209 */ |
216 if (sc2 != NULL) | 210 if (sc2 != NULL) |
217 { | 211 { |
221 | 215 |
222 fp = signal(SIGINT, SIG_IGN); | 216 fp = signal(SIGINT, SIG_IGN); |
223 | 217 |
224 for(i=0; i<10; i++) | 218 for(i=0; i<10; i++) |
225 { | 219 { |
226 encwrite((char *) &top_ten[i].sc_name, MAXSTR, outf); | 220 encwrite((char *) &top_ten[i].sc_name, MAXSTR, score_file); |
227 sprintf(scoreline," %d %d %hd %hd %hd \n", | 221 sprintf(scoreline," %d %d %hd %hd %hd \n", |
228 top_ten[i].sc_flags, top_ten[i].sc_uid, | 222 top_ten[i].sc_flags, top_ten[i].sc_uid, |
229 top_ten[i].sc_monster, top_ten[i].sc_score, | 223 top_ten[i].sc_monster, top_ten[i].sc_score, |
230 top_ten[i].sc_level); | 224 top_ten[i].sc_level); |
231 encwrite((char *) scoreline, 100, outf); | 225 encwrite((char *) scoreline, 100, score_file); |
232 } | 226 } |
233 unlock_sc(); | 227 unlock_sc(); |
234 signal(SIGINT, fp); | 228 signal(SIGINT, fp); |
235 } | 229 } |
236 } | 230 } |
237 fclose(outf); | 231 fclose(score_file); |
238 } | 232 } |
239 | 233 |
240 void writelog(int amount, int flags, char monst) | 234 void writelog(int amount, int flags, char monst) |
241 { | 235 { |
242 FILE *logfi; | |
243 char logmessage[220], ltemp[80]; | 236 char logmessage[220], ltemp[80]; |
244 char *killer; | 237 char *killer; |
245 if (noscore) | 238 if (noscore) |
246 return; | 239 return; |
247 #ifdef LOGFILE | 240 #ifdef LOGFILE |
248 if (lfd >= 0) | 241 if (log_file == NULL) |
249 logfi = md_fdopen(lfd, "a"); | |
250 else | |
251 return; | |
252 if (logfi == NULL) | |
253 return; | 242 return; |
254 /* otherwise writing should work */ | 243 /* otherwise writing should work */ |
255 sprintf(logmessage, "%d %d %s %d ", time(NULL), amount, whoami, | 244 sprintf(logmessage, "%d %d %s %d ", time(NULL), amount, whoami, |
256 pstats.s_lvl); | 245 pstats.s_lvl); |
257 if (flags == 0) /* died */ | 246 if (flags == 0) /* died */ |
281 max_level); | 270 max_level); |
282 strcat(logmessage, ltemp); | 271 strcat(logmessage, ltemp); |
283 } | 272 } |
284 else | 273 else |
285 { | 274 { |
286 fclose(logfi); | 275 fclose(log_file); |
287 return; | 276 return; |
288 } | 277 } |
289 | 278 |
290 /* then write */ | 279 /* then write */ |
291 fprintf(logfi, "%s", logmessage); | 280 fprintf(log_file, "%s", logmessage); |
292 fclose(logfi); | 281 fclose(log_file); |
293 #endif | 282 #endif |
294 return; | 283 return; |
295 } | 284 } |
296 | 285 |
297 /* | 286 /* |