Mercurial > hg > early-roguelike
comparison rogue5/main.c @ 34:655c317b6237
rogue5: add savedir, logfile, bugfixes
| author | elwin |
|---|---|
| date | Mon, 24 May 2010 20:16:15 +0000 |
| parents | f502bf60e6e4 |
| children | 24e6beb9e7aa |
comparison
equal
deleted
inserted
replaced
| 33:f502bf60e6e4 | 34:655c317b6237 |
|---|---|
| 40 argc--; | 40 argc--; |
| 41 } | 41 } |
| 42 | 42 |
| 43 #endif | 43 #endif |
| 44 | 44 |
| 45 /* Check to see if savefiles should be stored in the system location */ | |
| 46 #ifdef SAVEDIR | |
| 47 if (argc >= 3 && !strcmp(argv[1], "-n")) | |
| 48 { | |
| 49 use_savedir = TRUE; | |
| 50 strncpy(whoami, argv[2], MAXSTR); | |
| 51 whoami[MAXSTR-1] = '\0'; | |
| 52 snprintf(file_name, MAXSTR, "%s/%d-%.10s.r5sav", SAVEDIR, | |
| 53 md_getuid(), whoami); | |
| 54 } | |
| 55 #endif | |
| 56 | |
| 57 open_score(); | |
| 58 open_log(); | |
| 59 | |
| 45 /* | 60 /* |
| 46 * get home and options from environment | 61 * get home and options from environment |
| 47 */ | 62 */ |
| 48 | 63 |
| 49 strcpy(home, md_gethomedir()); | 64 strcpy(home, md_gethomedir()); |
| 50 | 65 |
| 51 if (strlen(home) > MAXSTR - strlen("rogue.save") - 1) | 66 if (strlen(home) > MAXSTR - strlen("rogue5.save") - 1) |
| 52 *home = 0; | 67 *home = 0; |
| 53 | 68 |
| 54 strcpy(file_name, home); | 69 if (!use_savedir) |
| 55 strcat(file_name, "rogue.save"); | 70 { |
| 71 md_normaluser(); | |
| 72 strcpy(file_name, home); | |
| 73 strcat(file_name, "rogue5.save"); | |
| 74 } | |
| 56 | 75 |
| 57 if ((env = getenv("ROGUEOPTS")) != NULL) | 76 if ((env = getenv("ROGUEOPTS")) != NULL) |
| 58 parse_opts(env); | 77 parse_opts(env); |
| 59 if (env == NULL || whoami[0] == '\0') | 78 if (!use_savedir && (env == NULL || whoami[0] == '\0')) |
| 60 strucpy(whoami, md_getusername(), strlen(md_getusername())); | 79 strucpy(whoami, md_getusername(), strlen(md_getusername())); |
| 61 lowtime = time(NULL); | 80 lowtime = time(NULL); |
| 62 if (getenv("SEED") != NULL) | 81 if (getenv("SEED") != NULL) |
| 63 { | 82 { |
| 64 dnum = atoi(getenv("SEED")); | 83 dnum = atoi(getenv("SEED")); |
| 66 } | 85 } |
| 67 else | 86 else |
| 68 dnum = (unsigned int) lowtime + md_getpid(); | 87 dnum = (unsigned int) lowtime + md_getpid(); |
| 69 seed = dnum; | 88 seed = dnum; |
| 70 | 89 |
| 71 open_score(); | |
| 72 | |
| 73 /* | |
| 74 * Drop setuid/setgid after opening the scoreboard file. | |
| 75 */ | |
| 76 | |
| 77 md_normaluser(); | |
| 78 | |
| 79 /* | 90 /* |
| 80 * check for print-score option | 91 * check for print-score option |
| 81 */ | 92 */ |
| 82 | |
| 83 md_normaluser(); /* we drop any setgid/setuid priveldges here */ | |
| 84 | 93 |
| 85 if (argc == 2) | 94 if (argc == 2) |
| 86 { | 95 { |
| 87 if (strcmp(argv[1], "-s") == 0) | 96 if (strcmp(argv[1], "-s") == 0) |
| 88 { | 97 { |
| 103 exit(0); | 112 exit(0); |
| 104 } | 113 } |
| 105 } | 114 } |
| 106 | 115 |
| 107 init_check(); /* check for legal startup */ | 116 init_check(); /* check for legal startup */ |
| 108 if (argc == 2) | 117 if (use_savedir) |
| 118 { | |
| 119 /* If there is a saved game, restore() will not return. If it | |
| 120 * returns 1, there isn't a game, so start one. If 0, there was | |
| 121 * an error. */ | |
| 122 if (!restore(file_name)) | |
| 123 my_exit(1); | |
| 124 } | |
| 125 else if (argc == 2) | |
| 109 if (!restore(argv[1])) /* Note: restore will never return */ | 126 if (!restore(argv[1])) /* Note: restore will never return */ |
| 110 my_exit(1); | 127 my_exit(1); |
| 111 #ifdef MASTER | 128 #ifdef MASTER |
| 112 if (wizard) | 129 if (wizard) |
| 113 printf("Hello %s, welcome to dungeon #%d", whoami, dnum); | 130 printf("Hello %s, welcome to dungeon #%d\n", whoami, dnum); |
| 114 else | 131 else |
| 115 #endif | 132 #endif |
| 116 printf("Hello %s, just a moment while I dig the dungeon...", whoami); | 133 printf("Hello %s, just a moment while I dig the dungeon...\n", whoami); |
| 117 fflush(stdout); | 134 fflush(stdout); |
| 118 | 135 |
| 119 initscr(); /* Start up cursor package */ | 136 initscr(); /* Start up cursor package */ |
| 120 init_probs(); /* Set up prob tables for objects */ | 137 init_probs(); /* Set up prob tables for objects */ |
| 121 init_player(); /* Set up initial player stats */ | 138 init_player(); /* Set up initial player stats */ |
| 233 * start back up again | 250 * start back up again |
| 234 */ | 251 */ |
| 235 md_tstpresume(); | 252 md_tstpresume(); |
| 236 raw(); | 253 raw(); |
| 237 noecho(); | 254 noecho(); |
| 255 nonl(); | |
| 238 keypad(stdscr,1); | 256 keypad(stdscr,1); |
| 239 playltchars(); | 257 playltchars(); |
| 240 clearok(curscr, TRUE); | 258 clearok(curscr, TRUE); |
| 241 wrefresh(curscr); | 259 wrefresh(curscr); |
| 242 getyx(curscr, y, x); | 260 getyx(curscr, y, x); |
| 309 signal(SIGINT, leave); | 327 signal(SIGINT, leave); |
| 310 clear(); | 328 clear(); |
| 311 mvprintw(LINES - 2, 0, "You quit with %d gold pieces", purse); | 329 mvprintw(LINES - 2, 0, "You quit with %d gold pieces", purse); |
| 312 move(LINES - 1, 0); | 330 move(LINES - 1, 0); |
| 313 refresh(); | 331 refresh(); |
| 332 writelog(purse, 1, 0); | |
| 314 score(purse, 1, 0); | 333 score(purse, 1, 0); |
| 315 my_exit(0); | 334 my_exit(0); |
| 316 } | 335 } |
| 317 else | 336 else |
| 318 { | 337 { |
| 375 */ | 394 */ |
| 376 md_shellescape(); | 395 md_shellescape(); |
| 377 | 396 |
| 378 noecho(); | 397 noecho(); |
| 379 raw(); | 398 raw(); |
| 399 nonl(); | |
| 380 keypad(stdscr,1); | 400 keypad(stdscr,1); |
| 381 playltchars(); | 401 playltchars(); |
| 382 in_shell = FALSE; | 402 in_shell = FALSE; |
| 383 clearok(stdscr, TRUE); | 403 clearok(stdscr, TRUE); |
| 384 } | 404 } |
