|
|
1.1 root 1: /*
2: * setup.c - set up all files for Phantasia
3: */
4: #include "include.h"
5: #include <sys/types.h>
6: #include <sys/stat.h>
7: /**/
8: /************************************************************************
9: /
10: / FUNCTION NAME: main()
11: /
12: / FUNCTION: setup files for Phantasia 3.3.2
13: /
14: / AUTHOR: E. A. Estes, 12/4/85
15: /
16: / ARGUMENTS: none
17: /
18: / RETURN VALUE: none
19: /
20: / MODULES CALLED: time(), exit(), stat(), Error(), creat(), close(), fopen(),
21: / fgets(), floor(), srandom(), umask(), drandom(), strcpy(), getuid(),
22: / unlink(), fwrite(), fclose(), sscanf(), printf(), strlen(), fprintf()
23: /
24: / GLOBAL INPUTS: Curmonster, _iob[], Databuf[], *Monstfp, Enrgyvoid
25: /
26: / GLOBAL OUTPUTS: Curmonster, Databuf[], *Monstfp, Enrgyvoid
27: /
28: / DESCRIPTION:
29: /
30: / This program tries to verify the parameters specified in
31: / the Makefile.
32: /
33: / Create all necessary files. Note that nothing needs to be
34: / put in these files.
35: / Also, the monster binary data base is created here.
36: /
37: /************************************************************************/
38:
39: main()
40: {
41: FILE *fp; /* for opening files */
42: struct stat fbuf; /* for getting files statistics */
43: register char **filename; /* for pointing to file names */
44: register int fd; /* file descriptor */
45: static char *files[] = /* all files to create */
46: {
47: _PATH_MONST,
48: _PATH_PEOPLE,
49: _PATH_MESS,
50: _PATH_LASTDEAD,
51: _PATH_MOTD,
52: _PATH_GOLD,
53: _PATH_VOID,
54: _PATH_SCORE,
55: (char *) NULL
56: };
57:
58: srandom((unsigned) time((long *) NULL)); /* prime random numbers */
59:
60: umask(0117); /* only owner can read/write created files */
61:
62: /* try to create data files */
63: filename = &files[0];
64: while (*filename != NULL)
65: /* create each file */
66: {
67: if (stat(*filename, &fbuf) == 0)
68: /* file exists; remove it */
69: {
70: if (!strcmp(*filename, _PATH_PEOPLE))
71: /* do not reset character file if it already exists */
72: {
73: ++filename;
74: continue;
75: }
76:
77: if (unlink(*filename) < 0)
78: Error("Cannot unlink %s.\n", *filename);
79: /*NOTREACHED*/
80: }
81:
82: if ((fd = creat(*filename, 0660)) < 0)
83: Error("Cannot create %s.\n", *filename);
84: /*NOTREACHED*/
85:
86: close(fd); /* close newly created file */
87:
88: ++filename; /* process next file */
89: }
90:
91: /* put holy grail info into energy void file */
92: Enrgyvoid.ev_active = TRUE;
93: Enrgyvoid.ev_x = ROLL(-1.0e6, 2.0e6);
94: Enrgyvoid.ev_y = ROLL(-1.0e6, 2.0e6);
95: if ((fp = fopen(_PATH_VOID, "w")) == NULL)
96: Error("Cannot update %s.\n", _PATH_VOID);
97: else
98: {
99: fwrite(&Enrgyvoid, SZ_VOIDSTRUCT, 1, fp);
100: fclose(fp);
101: }
102:
103: /* create binary monster data base */
104: if ((Monstfp = fopen(_PATH_MONST, "w")) == NULL)
105: Error("Cannot update %s.\n", _PATH_MONST);
106: else
107: {
108: if ((fp = fopen("monsters.asc", "r")) == NULL)
109: {
110: fclose(Monstfp);
111: Error("cannot open %s to create monster database.\n", "monsters.asc");
112: }
113: else
114: {
115: Curmonster.m_o_strength =
116: Curmonster.m_o_speed =
117: Curmonster.m_maxspeed =
118: Curmonster.m_o_energy =
119: Curmonster.m_melee =
120: Curmonster.m_skirmish = 0.0;
121:
122: while (fgets(Databuf, SZ_DATABUF, fp) != NULL)
123: /* read in text file, convert to binary */
124: {
125: sscanf(&Databuf[24], "%lf%lf%lf%lf%lf%d%d%lf",
126: &Curmonster.m_strength, &Curmonster.m_brains,
127: &Curmonster.m_speed, &Curmonster.m_energy,
128: &Curmonster.m_experience, &Curmonster.m_treasuretype,
129: &Curmonster.m_type, &Curmonster.m_flock);
130: Databuf[24] = '\0';
131: strcpy(Curmonster.m_name, Databuf);
132: fwrite((char *) &Curmonster, SZ_MONSTERSTRUCT, 1, Monstfp);
133: }
134: fclose(fp);
135: fclose(Monstfp);
136: }
137: }
138:
139: #ifdef MAKE_INSTALLS_THIS_AND_DOESNT_WANT_TO_HEAR_ABOUT_IT
140: /* write to motd file */
141: printf("One line 'motd' ? ");
142: if (fgets(Databuf, SZ_DATABUF, stdin) == NULL)
143: Databuf[0] = '\0';
144: if ((fp = fopen(_PATH_MOTD, "w")) == NULL)
145: Error("Cannot update %s.\n", _PATH_MOTD);
146: else
147: {
148: fwrite(Databuf, sizeof(char), strlen(Databuf), fp);
149: fclose(fp);
150: }
151:
152: /* report compile-time options */
153: printf("Compiled options:\n\n");
154: printf("Phantasia destination directory: %s\n", _PATH_PHANTDIR);
155: printf("Wizard: root UID: 0\n");
156:
157: #ifdef BSD41
158: printf("Compiled for BSD 4.1\n");
159: #endif
160:
161: #ifdef BSD42
162: printf("Compiled for BSD 4.2\n");
163: #endif
164:
165: #ifdef SYS3
166: printf("Compiled for System III\n");
167: #endif
168:
169: #ifdef SYS5
170: printf("Compiled for System V\n");
171: #endif
172: #endif
173:
174: exit(0);
175: /*NOTREACHED*/
176: }
177: /**/
178: /************************************************************************
179: /
180: / FUNCTION NAME: Error()
181: /
182: / FUNCTION: print an error message, and exit
183: /
184: / AUTHOR: E. A. Estes, 12/4/85
185: /
186: / ARGUMENTS:
187: / char *str - format string for printf()
188: / char *file - file which caused error
189: /
190: / RETURN VALUE: none
191: /
192: / MODULES CALLED: exit(), perror(), fprintf()
193: /
194: / GLOBAL INPUTS: _iob[]
195: /
196: / GLOBAL OUTPUTS: none
197: /
198: / DESCRIPTION:
199: / Print an error message, then exit.
200: /
201: /************************************************************************/
202:
203: Error(str, file)
204: char *str, *file;
205: {
206: fprintf(stderr, "Error: ");
207: fprintf(stderr, str, file);
208: perror(file);
209: exit(1);
210: /*NOTREACHED*/
211: }
212: /**/
213: /************************************************************************
214: /
215: / FUNCTION NAME: drandom()
216: /
217: / FUNCTION: return a random number
218: /
219: / AUTHOR: E. A. Estes, 2/7/86
220: /
221: / ARGUMENTS: none
222: /
223: / RETURN VALUE: none
224: /
225: / MODULES CALLED: random()
226: /
227: / GLOBAL INPUTS: none
228: /
229: / GLOBAL OUTPUTS: none
230: /
231: / DESCRIPTION:
232: /
233: /************************************************************************/
234:
235: double
236: drandom()
237: {
238: if (sizeof(int) != 2)
239: return((double) (random() & 0x7fff) / 32768.0);
240: else
241: return((double) random() / 32768.0);
242: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.