-/* $NetBSD: main.c,v 1.6 1999/08/18 01:39:16 hubertf Exp $ */
+/* $NetBSD: main.c,v 1.17 2008/08/08 16:10:47 drochner Exp $ */
/*
* Phantasia 3.3.2 -- Interterminal fantasy game
* AT&T is in no way connected with this game.
*/
+#include <sys/stat.h>
#include <sys/types.h>
#include <pwd.h>
*/
#include "include.h"
+#undef bool
+#include <curses.h>
-int main __P((int, char **));
+int main(int, char **);
int
main(argc, argv)
void
initialstate()
{
+ struct stat sb;
+
Beyond = FALSE;
Marsh = FALSE;
Throne = FALSE;
if ((Playersfp = fopen(_PATH_PEOPLE, "r+")) == NULL)
error(_PATH_PEOPLE);
/* NOTREACHED */
+ if (fileno(Playersfp) < 3)
+ exit(1);
if ((Monstfp = fopen(_PATH_MONST, "r+")) == NULL)
error(_PATH_MONST);
if ((Energyvoidfp = fopen(_PATH_VOID, "r+")) == NULL)
error(_PATH_VOID);
+ if (fstat(fileno(Energyvoidfp), &sb) == -1)
+ error("stat");
+ if (sb.st_size == 0) {
+ /* initialize grail to new location */
+ Enrgyvoid.ev_active = TRUE;
+ Enrgyvoid.ev_x = ROLL(-1.0e6, 2.0e6);
+ Enrgyvoid.ev_y = ROLL(-1.0e6, 2.0e6);
+ writevoid(&Enrgyvoid, 0L);
+ }
+
/* NOTREACHED */
srandom((unsigned) time(NULL)); /* prime random numbers */
fclose(fp);
}
/* search for king */
- fseek(Playersfp, 0L, 0);
+ fseek(Playersfp, 0L, SEEK_SET);
while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1)
if (Other.p_specialtype == SC_KING &&
Other.p_status != S_NOTUSED)
mvaddstr(4, 24, "There is no ruler at this time.");
/* search for valar */
- fseek(Playersfp, 0L, 0);
+ fseek(Playersfp, 0L, SEEK_SET);
while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1)
if (Other.p_specialtype == SC_VALAR && Other.p_status != S_NOTUSED)
/* found the valar */
break;
}
/* search for council of the wise */
- fseek(Playersfp, 0L, 0);
+ fseek(Playersfp, 0L, SEEK_SET);
Lines = 10;
while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1)
if (Other.p_specialtype == SC_COUNCIL && Other.p_status != S_NOTUSED)
hiexp = 0.0;
nxtlvl = hilvl = 0;
- fseek(Playersfp, 0L, 0);
+ fseek(Playersfp, 0L, SEEK_SET);
while (fread((char *) &Other, SZ_PLAYERSTRUCT, 1, Playersfp) == 1)
if (Other.p_experience > hiexp && Other.p_specialtype <= SC_KING && Other.p_status != S_NOTUSED)
/* highest found so far */
&& fgets(Databuf, SZ_DATABUF, fp) != NULL) {
mvaddstr(19, 25, "The last character to die was:");
mvaddstr(20, 40 - strlen(Databuf) / 2, Databuf);
- fclose(fp);
}
+ if (fp)
+ fclose(fp);
refresh();
}
int type;
{
int subscript; /* used for subscripting into Stattable */
- struct charstats *statptr; /* for pointing into Stattable */
+ const struct charstats *statptr; /* for pointing into Stattable */
subscript = type - '1';
signal(SIGPIPE, ill_sig);
#endif
- initscr(); /* turn on curses */
+ if (!initscr()) { /* turn on curses */
+ fprintf(stderr, "couldn't initialize screen\n");
+ exit (0);
+ }
noecho(); /* do not echo input */
- crmode(); /* do not process erase, kill */
+ cbreak(); /* do not process erase, kill */
clear();
refresh();
Windows = TRUE; /* mark the state */
if (Windows) {
move(LINES - 2, 0);
refresh();
- nocrmode();
+ nocbreak();
endwin();
}
- fclose(Playersfp);
- fclose(Monstfp);
- fclose(Messagefp);
- fclose(Energyvoidfp);
+ if (Playersfp)
+ fclose(Playersfp);
+ if (Monstfp)
+ fclose(Monstfp);
+ if (Messagefp)
+ fclose(Messagefp);
+ if (Energyvoidfp)
+ fclose(Energyvoidfp);
if (doexit)
exit(0);