]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - larn/tok.c
Comment out debugging build (it still randomly crashes though) pointed out
[bsdgames-darwin.git] / larn / tok.c
index 9bacaed46e5204913d1e096793d8a2fb5f887d10..6bab595e457876faaab1322438892d00661555ea 100644 (file)
@@ -1,9 +1,9 @@
-/*     $NetBSD: tok.c,v 1.5 1997/10/18 20:03:54 christos Exp $ */
+/*     $NetBSD: tok.c,v 1.11 2012/06/19 05:30:44 dholland Exp $        */
 
 /* tok.c               Larn is copyrighted 1986 by Noah Morgan. */
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: tok.c,v 1.5 1997/10/18 20:03:54 christos Exp $");
+__RCSID("$NetBSD: tok.c,v 1.11 2012/06/19 05:30:44 dholland Exp $");
 #endif                         /* not lint */
 
 #include <sys/types.h>
@@ -12,11 +12,15 @@ __RCSID("$NetBSD: tok.c,v 1.5 1997/10/18 20:03:54 christos Exp $");
 #include <stdlib.h>
 #include <unistd.h>
 #include <sys/wait.h>
+#include <ctype.h>
 #include "header.h"
 #include "extern.h"
 
+/* Keystrokes (roughly) between checkpoints */
+#define CHECKPOINT_INTERVAL    400
+
 static char     lastok = 0;
-int             yrepcount = 0, dayplay = 0;
+int             yrepcount = 0;
 #ifndef FLUSHNO
 #define FLUSHNO 5
 #endif /* FLUSHNO */
@@ -31,7 +35,7 @@ static u_char     usermpoint = 0;     /* the user monster pointer */
        lexical analyzer for larn
  */
 int
-yylex()
+yylex(void)
 {
        char            cc;
        int             ic;
@@ -52,9 +56,9 @@ yylex()
        lflush();
        while (1) {
                c[BYTESIN]++;
+               /* check for periodic checkpointing */
                if (ckpflag)
-                       if ((c[BYTESIN] % 400) == 0) {  /* check for periodic
-                                                        * checkpointing */
+                       if ((c[BYTESIN] % CHECKPOINT_INTERVAL) == 0) {
 #ifndef DOCHECKPOINTS
                                savegame(ckpfile);
 #else
@@ -65,22 +69,6 @@ yylex()
                                        exit();
                                }
 #endif
-
-
-#ifdef TIMECHECK
-                               if (dayplay == 0)
-                                       if (playable()) {
-                                               cursor(1, 19);
-                                               lprcat("\nSorry, but it is now time for work.  Your game has been saved.\n");
-                                               beep();
-                                               lflush();
-                                               savegame(savefilename);
-                                               wizard = nomove = 1;
-                                               sleep(4);
-                                               died(-257);
-                                       }
-#endif /* TIMECHECK */
-
                        }
                do {            /* if keyboard input buffer is too big, flush
                                 * some of it */
@@ -98,7 +86,7 @@ yylex()
                        clear();/* scrolling region, home, clear, no
                                 * attributes */
                        if ((ic = fork()) == 0) {       /* child */
-                               execl("/bin/csh", 0);
+                               execl("/bin/csh", "/bin/csh", NULL);
                                exit(1);
                        }
                        wait(0);
@@ -123,7 +111,7 @@ yylex()
  *     flushall()              Function to flush all type-ahead in the input buffer
  */
 void
-flushall()
+flushall(void)
 {
        char            cc;
        int             ic;
@@ -144,10 +132,11 @@ flushall()
        enter with hard= -1 for default hardness, else any desired hardness
  */
 void
-sethard(hard)
-       int             hard;
+sethard(int hard)
 {
        int    j, k, i;
+       struct monst *mp;
+
        j = c[HARDGAME];
        hashewon();
        if (restorflag == 0) {  /* don't set c[HARDGAME] if restoring game */
@@ -159,16 +148,17 @@ sethard(hard)
 
        if ((k = c[HARDGAME]) != 0)
                for (j = 0; j <= MAXMONST + 8; j++) {
-                       i = ((6 + k) * monster[j].hitpoints + 1) / 6;
-                       monster[j].hitpoints = (i < 0) ? 32767 : i;
-                       i = ((6 + k) * monster[j].damage + 1) / 5;
-                       monster[j].damage = (i > 127) ? 127 : i;
-                       i = (10 * monster[j].gold) / (10 + k);
-                       monster[j].gold = (i > 32767) ? 32767 : i;
-                       i = monster[j].armorclass - k;
-                       monster[j].armorclass = (i < -127) ? -127 : i;
-                       i = (7 * monster[j].experience) / (7 + k) + 1;
-                       monster[j].experience = (i <= 0) ? 1 : i;
+                       mp = &monster[j];
+                       i = ((6 + k) * mp->hitpoints + 1) / 6;
+                       mp->hitpoints = (i < 0) ? 32767 : i;
+                       i = ((6 + k) * mp->damage + 1) / 5;
+                       mp->damage = (i > 127) ? 127 : i;
+                       i = (10 * mp->gold) / (10 + k);
+                       mp->gold = (i > 32767) ? 32767 : i;
+                       i = mp->armorclass - k;
+                       mp->armorclass = (i < -127) ? -127 : i;
+                       i = (7 * mp->experience) / (7 + k) + 1;
+                       mp->experience = (i <= 0) ? 1 : i;
                }
 }
 
@@ -176,98 +166,69 @@ sethard(hard)
        function to read and process the larn options file
  */
 void
-readopts()
+readopts(void)
 {
-       char  *i;
+       const char  *i;
        int    j, k;
        int             flag;
-       flag = 1;               /* set to 0 if he specifies a name for his
-                                * character */
+
+       flag = 1;               /* set to 0 if a name is specified */
+
        if (lopen(optsfile) < 0) {
                strcpy(logname, loginname);
                return;         /* user name if no character name */
        }
        i = " ";
        while (*i) {
-               if ((i = (char *) lgetw()) == 0)
+               if ((i = lgetw()) == NULL)
                        break;  /* check for EOF */
                while ((*i == ' ') || (*i == '\t'))
                        i++;    /* eat leading whitespace */
-               switch (*i) {
-               case 'b':
-                       if (strcmp(i, "bold-objects") == 0)
-                               boldon = 1;
-                       break;
-
-               case 'e':
-                       if (strcmp(i, "enable-checkpointing") == 0)
-                               ckpflag = 1;
-                       break;
 
-               case 'i':
-                       if (strcmp(i, "inverse-objects") == 0)
-                               boldon = 0;
-                       break;
-
-               case 'f':
-                       if (strcmp(i, "female") == 0)
-                               sex = 0;        /* male or female */
-                       break;
-
-               case 'm':
-                       if (strcmp(i, "monster:") == 0) {       /* name favorite monster */
-                               if ((i = lgetw()) == 0)
-                                       break;
-                               if (strlen(i) >= MAXMNAME)
-                                       i[MAXMNAME - 1] = 0;
-                               strcpy(usermonster[usermpoint], i);
-                               if (usermpoint >= MAXUM)
-                                       break;  /* defined all of em */
-                               if (isalpha(j = usermonster[usermpoint][0])) {
-                                       for (k = 1; k < MAXMONST + 8; k++)      /* find monster */
-                                               if (monstnamelist[k] == j) {
-                                                       monster[k].name = &usermonster[usermpoint++][0];
-                                                       break;
-                                               }
-                               }
-                       } else if (strcmp(i, "male") == 0)
-                               sex = 1;
-                       break;
-
-               case 'n':
-                       if (strcmp(i, "name:") == 0) {  /* defining players name */
-                               if ((i = lgetw()) == 0)
-                                       break;
-                               if (strlen(i) >= LOGNAMESIZE)
-                                       i[LOGNAMESIZE - 1] = 0;
-                               strcpy(logname, i);
-                               flag = 0;
-                       } else if (strcmp(i, "no-introduction") == 0)
-                               nowelcome = 1;
-                       else if (strcmp(i, "no-beep") == 0)
-                               nobeep = 1;
-                       break;
-
-               case 'p':
-                       if (strcmp(i, "process-name:") == 0) {
-                               if ((i = lgetw()) == 0)
-                                       break;
-                               if (strlen(i) >= PSNAMESIZE)
-                                       i[PSNAMESIZE - 1] = 0;
-                               strcpy(psname, i);
-                       } else if (strcmp(i, "play-day-play") == 0)
-                               dayplay = 1;
-                       break;
-
-               case 's':
-                       if (strcmp(i, "savefile:") == 0) {      /* defining savefilename */
-                               if ((i = lgetw()) == 0)
-                                       break;
-                               strcpy(savefilename, i);
-                               flag = 0;
+               if (strcmp(i, "bold-objects") == 0)
+                       boldon = 1;
+               else if (strcmp(i, "enable-checkpointing") == 0)
+                       ckpflag = 1;
+               else if (strcmp(i, "inverse-objects") == 0)
+                       boldon = 0;
+               else if (strcmp(i, "female") == 0)
+                       sex = 0;        /* male or female */
+               else if (strcmp(i, "monster:") == 0) {  /* name favorite monster */
+                       if ((i = lgetw()) == 0)
+                               break;
+                       strlcpy(usermonster[usermpoint], i, MAXMNAME);
+                       if (usermpoint >= MAXUM)
+                               continue;       /* defined all of em */
+                       if (isalpha(j = usermonster[usermpoint][0])) {
+                               for (k = 1; k < MAXMONST + 8; k++)      /* find monster */
+                                       if (monstnamelist[k] == j) {
+                                               monster[k].name = &usermonster[usermpoint++][0];
+                                               break;
+                                       }
                        }
-                       break;
-               };
+               } else if (strcmp(i, "male") == 0)
+                       sex = 1;
+               else if (strcmp(i, "name:") == 0) {     /* defining players name */
+                       if ((i = lgetw()) == 0)
+                               break;
+                       strlcpy(logname, i, LOGNAMESIZE);
+                       flag = 0;
+               } else if (strcmp(i, "no-introduction") == 0)
+                       nowelcome = 1;
+               else if (strcmp(i, "no-beep") == 0)
+                       nobeep = 1;
+               else if (strcmp(i, "process-name:") == 0) {
+                       if ((i = lgetw()) == 0)
+                               break;
+                       strlcpy(psname, i, PSNAMESIZE);
+               } else if (strcmp(i, "play-day-play") == 0) {
+                       /* bypass time restrictions: ignored */
+               } else if (strcmp(i, "savefile:") == 0) {       /* defining savefilename */
+                       if ((i = lgetw()) == 0)
+                               break;
+                       strcpy(savefilename, i);
+                       flag = 0;
+               }
        }
        if (flag)
                strcpy(logname, loginname);