1 /* $OpenBSD: init.c,v 1.18 2022/08/08 17:57:05 op Exp $ */
2 /* $NetBSD: init.c,v 1.4 1995/03/21 15:07:35 cgd Exp $ */
3
4 /*
5 * Copyright (c) 1983, 1993
6 * The Regents of the University of California. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. Neither the name of the University nor the names of its contributors
17 * may be used to endorse or promote products derived from this software
18 * without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
31 */
32
33 #include <err.h>
34 #include <signal.h>
35 #include <stdio.h>
36 #include <stdlib.h>
37 #include <string.h>
38 #include <unistd.h>
39
40 #include "extern.h"
41
42 static const char *getutmp(void);
43
44 void
initialize(const char * filename)45 initialize(const char *filename)
46 {
47 const struct objs *p;
48 char *savefile;
49
50 puts("Version 4.2, fall 1984.");
51 puts("First Adventure game written by His Lordship, the honorable");
52 puts("Admiral D.W. Riggle\n");
53 location = dayfile;
54 username = getutmp();
55 if (username == NULL)
56 errx(1, "Don't know who you are.");
57 wordinit();
58 if (filename == NULL) {
59 direction = NORTH;
60 ourtime = 0;
61 snooze = CYCLE * 1.5;
62 position = 22;
63 SetBit(wear, PAJAMAS);
64 fuel = TANKFULL;
65 torps = TORPEDOES;
66 for (p = dayobjs; p->room != 0; p++)
67 SetBit(location[p->room].objects, p->obj);
68 } else {
69 savefile = save_file_name(filename);
70 restore(savefile);
71 free(savefile);
72 }
73 signal(SIGINT, die);
74 }
75
76 static const char *
getutmp(void)77 getutmp(void)
78 {
79 const char *name;
80
81 name = getenv("LOGNAME");
82 if (name == NULL || *name == 0)
83 name = getenv("USER");
84 if (name == NULL || *name == 0)
85 name = getlogin();
86 if (name == NULL || *name == 0)
87 name = " ??? ";
88
89 return(strdup(name));
90 }
91