Mercurial > hg > early-roguelike
annotate rogue3/main.c @ 0:527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
| author | edwarj4 | 
|---|---|
| date | Tue, 13 Oct 2009 13:33:34 +0000 | 
| parents | |
| children | b4856d4d4c4e | 
| 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; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 26 | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 27 main(argc, argv, envp) | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 28 char **argv; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 29 char **envp; | 
| 
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(); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 40 | 
| 
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 * Drop setuid/setgid after opening the scoreboard file. | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 43 */ | 
| 
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 md_normaluser(); | 
| 
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 /* | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 48 * check for print-score option | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 49 */ | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 50 if (argc == 2 && strcmp(argv[1], "-s") == 0) | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 51 { | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 52 waswizard = TRUE; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 53 score(0, -1, 0); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 54 exit(0); | 
| 
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 /* | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 57 * Check to see if he is a wizard | 
| 
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 if (argc >= 2 && argv[1][0] == '\0') | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 60 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 | 61 { | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 62 wizard = TRUE; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 63 argv++; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 64 argc--; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 65 } | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 66 | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 67 /* | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 68 * get home and options from environment | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 69 */ | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 70 strcpy(home, md_gethomedir()); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 71 | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 72 if (strlen(home) > PATH_MAX - strlen("rogue.save") - 1) | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 73 *home = 0; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 74 | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 75 strcpy(file_name, home); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 76 strcat(file_name, "rogue.save"); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 77 | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 78 if ((env = getenv("ROGUEOPTS")) != NULL) | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 79 parse_opts(env); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 80 if (env == NULL || whoami[0] == '\0') | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 81 strucpy(whoami, md_getusername(), strlen(md_getusername())); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 82 if (env == NULL || fruit[0] == '\0') | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 83 strcpy(fruit, "slime-mold"); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 84 | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 85 if (too_much() && !wizard && !author()) | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 86 { | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 87 printf("Sorry, %s, but the system is too loaded now.\n", whoami); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 88 printf("Try again later. Meanwhile, why not enjoy a%s %s?\n", | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 89 vowelstr(fruit), fruit); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 90 exit(1); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 91 } | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 92 | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 93 if (argc == 2) | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 94 if (!restore(argv[1], envp)) /* Note: restore will never return */ | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 95 exit(1); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 96 | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 97 time(&now); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 98 lowtime = (int) now; | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 99 | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 100 env = getenv("SEED"); | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 101 | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 102 if (env) | 
| 
527e2150eaf0
Import Rogue 3.6 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 103 seed = atoi(env); | 
