annotate rogue3/main.c @ 246:61283e71037c

Rogue V5: don't limit the high score list to 1 on Windows. The Visual Studio project file failed to define ALLSCORES, causing the score file to be limited to one entry per UID. Since the UID is always set to 42 on Windows, only one entry could ever appear in the list.
author John "Elwin" Edwards
date Sun, 15 May 2016 19:04:46 -0400
parents e5a15b09ce1d
children 3d4252fa2ed3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
1 /*
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
2 * @(#)main.c 3.27 (Berkeley) 6/15/81
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
3 *
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
4 * Rogue: Exploring the Dungeons of Doom
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
5 * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
6 * All rights reserved.
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
7 *
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
8 * See the file LICENSE.TXT for full copyright and licensing information.
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
9 */
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
10
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
11 #include "curses.h"
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
12 #include <time.h>
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
13 #include <signal.h>
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
14 #include <limits.h>
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
15 #include <stdlib.h>
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
16 #include <stdarg.h>
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
17 #include <string.h>
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
18 #include "machdep.h"
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
19 #include "rogue.h"
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
20
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
21 int num_checks = 0; /* times we've gone over in checkout() */
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
22 WINDOW *cw; /* Window that the player sees */
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
23 WINDOW *hw; /* Used for the help command */
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
24 WINDOW *mw; /* Used to store mosnters */
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
25 FILE *scoreboard = NULL;
17
d67cac79f0f1 Change logf to logfi
edwarj4
parents: 16
diff changeset
26 FILE *logfi = NULL;
0
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
27
214
e5a15b09ce1d rogue3, rogue5: fix all GCC5 warnings.
John "Elwin" Edwards
parents: 212
diff changeset
28 int
e5a15b09ce1d rogue3, rogue5: fix all GCC5 warnings.
John "Elwin" Edwards
parents: 212
diff changeset
29 main(int argc, char *argv[], char *envp[])
0
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
30 {
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
31 char *env;
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
32 struct linked_list *item;
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
33 struct object *obj;
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
34 int lowtime;
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
35 time_t now;
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
36
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
37 md_init(MD_STRIP_CTRL_KEYPAD);
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
38
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
39 open_score();
19
a86ae56e1ed6 rogue3: make LOGFILE work with SAVEDIR
edwarj4
parents: 17
diff changeset
40 open_log();
0
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
41
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
42 /*
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
43 * check for print-score option
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
44 */
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
45 if (argc == 2 && strcmp(argv[1], "-s") == 0)
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
46 {
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
47 waswizard = TRUE;
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
48 score(0, -1, 0);
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
49 exit(0);
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
50 }
11
949d558c2162 Allow wizard mode to be compiled out
edwarj4
parents: 8
diff changeset
51
949d558c2162 Allow wizard mode to be compiled out
edwarj4
parents: 8
diff changeset
52 #ifdef WIZARD
0
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
53 /*
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
54 * Check to see if he is a wizard
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
55 */
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
56 if (argc >= 2 && argv[1][0] == '\0')
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
57 if (strcmp(PASSWD, crypt(md_getpass("Wizard's password: "), "mT")) == 0)
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
58 {
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
59 wizard = TRUE;
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
60 argv++;
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
61 argc--;
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
62 }
11
949d558c2162 Allow wizard mode to be compiled out
edwarj4
parents: 8
diff changeset
63 #endif
0
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
64
1
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
65 /* Are we using the system savefile directory? */
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
66 #ifdef SAVEDIR
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
67 if (argc >= 3 && !strcmp(argv[1], "-n"))
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
68 {
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
69 strncpy(whoami, argv[2], 79);
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
70 whoami[79] = '\0';
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
71 use_savedir = TRUE;
30
09da55b986ca Slightly modify savefile location and prompt
edwarj4
parents: 29
diff changeset
72 /* look for savefile at SAVEDIR/UID-playername.r3sav */
112
ee250e3646fd Don't truncate player name in savefile name or log message.
John "Elwin" Edwards
parents: 95
diff changeset
73 if (snprintf(file_name, 256, "%s/%d-%s.r3sav", SAVEDIR, md_getuid(), whoami) >= 256)
1
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
74 {
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
75 /* this shouldn't happen */
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
76 strcpy(file_name, "rogue3.save");
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
77 use_savedir = FALSE;
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
78 }
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
79 }
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
80 #endif
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
81
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
82 if (use_savedir == FALSE)
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
83 {
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
84 md_normaluser();
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
85 /* because we don't need to create a file in the common savedir,
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
86 * and the scorefile is already open */
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
87 strcpy(home, md_gethomedir());
0
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
88
1
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
89 if (strlen(home) > PATH_MAX - strlen("rogue3.save") - 1)
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
90 *home = 0;
0
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
91
1
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
92 strcpy(file_name, home);
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
93 strcat(file_name, "rogue3.save");
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
94 }
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
95
0
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
96 if ((env = getenv("ROGUEOPTS")) != NULL)
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset
97 parse_opts(env);
1
b4856d4d4c4e Add -n option and system savedir functionality
edwarj4
parents: 0
diff changeset
98 if (!use_savedir && (env == NULL || whoami[0] == '\0'))
0
527e2150eaf0 Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
edwarj4
parents:
diff changeset