]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - battlestar/com6.c
Use defined constant FINAL instead of hardcoded 275. From OpenBSD.
[bsdgames-darwin.git] / battlestar / com6.c
index 6b8dc6361f5a681ce9eeb90dbbf9a51965b169da..5f4c8562e5f61fe9d8f4b496942a0a326768142b 100644 (file)
@@ -1,4 +1,4 @@
-/*     $NetBSD: com6.c,v 1.4 1995/03/28 17:20:22 jtc Exp $     */
+/*     $NetBSD: com6.c,v 1.20 2000/09/24 14:20:24 jsm Exp $    */
 
 /*
  * Copyright (c) 1983, 1993
  * SUCH DAMAGE.
  */
 
+#include <sys/cdefs.h>
 #ifndef lint
 #if 0
-static char sccsid[] = "@(#)com6.c     8.1 (Berkeley) 5/31/93";
+static char sccsid[] = "@(#)com6.c     8.2 (Berkeley) 4/28/95";
 #else
-static char rcsid[] = "$NetBSD: com6.c,v 1.4 1995/03/28 17:20:22 jtc Exp $";
+__RCSID("$NetBSD: com6.c,v 1.20 2000/09/24 14:20:24 jsm Exp $");
 #endif
-#endif /* not lint */
+#endif                         /* not lint */
 
-#include "externs.h"
+#include "extern.h"
 #include "pathnames.h"
 
+int
 launch()
 {
-       if (testbit(location[position].objects,VIPER) && !notes[CANTLAUNCH]){
-               if (fuel > 4){
-                       clearbit(location[position].objects,VIPER);
+       if (testbit(location[position].objects, VIPER) && !notes[CANTLAUNCH]) {
+               if (fuel > 4) {
+                       clearbit(location[position].objects, VIPER);
                        position = location[position].up;
                        notes[LAUNCHED] = 1;
-                       time++;
+                       ourtime++;
                        fuel -= 4;
                        puts("You climb into the viper and prepare for launch.");
                        puts("With a touch of your thumb the turbo engines ignite, thrusting you back into\nyour seat.");
-                       return(1);
-               }
-               else
+                       return (1);
+               } else
                        puts("Not enough fuel to launch.");
-        }
-        else
+       } else
                puts("Can't launch.");
-        return(0);
+       return (0);
 }
 
+int
 land()
 {
-       if (notes[LAUNCHED] && testbit(location[position].objects,LAND) && location[position].down){
+       if (notes[LAUNCHED] && testbit(location[position].objects, LAND) &&
+           location[position].down) {
                notes[LAUNCHED] = 0;
                position = location[position].down;
-               setbit(location[position].objects,VIPER);
+               setbit(location[position].objects, VIPER);
                fuel -= 2;
-               time++;
+               ourtime++;
                puts("You are down.");
-               return(1);
-       }
-       else
+               return (1);
+       } else
                puts("You can't land here.");
-       return(0);
+       return (0);
 }
 
-die()          /* endgame */
-{
+void
+die()
+{                              /* endgame */
        printf("bye.\nYour rating was %s.\n", rate());
        post(' ');
        exit(0);
 }
 
+void
+diesig(dummy)
+       int     dummy __attribute__((__unused__));
+{
+       die();
+}
+
+void
 live()
 {
        puts("\nYou win!");
@@ -95,100 +105,110 @@ live()
        exit(0);
 }
 
-/*
- * sigh -- this program thinks "time" is an int.  It's easier to not load
- * <time.h> than try and fix it.
- */
-#define _KERNEL
-#include <sys/time.h>
-#undef _KERNEL
+static FILE *score_fp;
+
+void
+open_score_file()
+{
+       score_fp = fopen(_PATH_SCORE, "a");
+       if (score_fp == NULL)
+               warn("open %s for append", _PATH_SCORE);
+       if (score_fp != NULL && fileno(score_fp) < 3)
+               exit(1);
+}
 
+void
 post(ch)
-char ch;
+       char    ch;
 {
-       FILE *fp;
-       struct timeval tv;
-       char *date, *ctime();
-       int s = sigblock(sigmask(SIGINT));
+       time_t tv;
+       char   *date;
+       sigset_t sigset, osigset;
 
-       gettimeofday(&tv, (struct timezone *)0);        /* can't call time */
-       date = ctime(&tv.tv_sec);
+       sigemptyset(&sigset);
+       sigaddset(&sigset, SIGINT);
+       sigprocmask(SIG_BLOCK, &sigset, &osigset);
+       tv = time(NULL);
+       date = ctime(&tv);
        date[24] = '\0';
-       if (fp = fopen(_PATH_SCORE,"a")) {
-               fprintf(fp, "%s  %8s  %c%20s", date, uname, ch, rate());
+       if (score_fp != NULL) {
+               fprintf(score_fp, "%s  %8s  %c%20s", date, username, ch, rate());
                if (wiz)
-                       fprintf(fp, "   wizard\n");
-               else if (tempwiz)
-                       fprintf(fp, "   WIZARD!\n");
+                       fprintf(score_fp, "   wizard\n");
                else
-                       fprintf(fp, "\n");
-       } else
-               perror(_PATH_SCORE);
-       sigsetmask(s);
+                       if (tempwiz)
+                               fprintf(score_fp, "   WIZARD!\n");
+                       else
+                               fprintf(score_fp, "\n");
+       }
+       sigprocmask(SIG_SETMASK, &osigset, (sigset_t *) 0);
 }
 
-char *
+const char   *
 rate()
 {
-       int score;
+       int     score;
 
-       score = max(max(pleasure,power),ego);
-       if (score == pleasure){
+       score = max(max(pleasure, power), ego);
+       if (score == pleasure) {
                if (score < 5)
-                       return("novice");
+                       return ("novice");
                else if (score < 20)
-                       return("junior voyeur");
+                       return ("junior voyeur");
                else if (score < 35)
-                       return("Don Juan");
-               else return("Marquis De Sade");
-       }
-       else if (score == power){
+                       return ("Don Juan");
+               else
+                       return ("Marquis De Sade");
+       } else if (score == power) {
                if (score < 5)
-                       return("serf");
+                       return ("serf");
                else if (score < 8)
-                       return("Samurai");
+                       return ("Samurai");
                else if (score < 13)
-                       return("Klingon");
+                       return ("Klingon");
                else if (score < 22)
-                       return("Darth Vader");
-               else return("Sauron the Great");
-       }
-       else{
+                       return ("Darth Vader");
+               else
+                       return ("Sauron the Great");
+       } else {
                if (score < 5)
-                       return("Polyanna");
+                       return ("Polyanna");
                else if (score < 10)
-                       return("philanthropist");
+                       return ("philanthropist");
                else if (score < 20)
-                       return("Tattoo");
-               else return("Mr. Roarke");
+                       return ("Tattoo");
+               else
+                       return ("Mr. Roarke");
        }
 }
 
+int
 drive()
 {
-       if (testbit(location[position].objects,CAR)){
+       if (testbit(location[position].objects, CAR)) {
                puts("You hop in the car and turn the key.  There is a perceptible grating noise,");
                puts("and an explosion knocks you unconscious...");
-               clearbit(location[position].objects,CAR);
-               setbit(location[position].objects,CRASH);
+               clearbit(location[position].objects, CAR);
+               setbit(location[position].objects, CRASH);
                injuries[5] = injuries[6] = injuries[7] = injuries[8] = 1;
-               time += 15;
+               ourtime += 15;
                zzz();
-               return(0);
-       }
-       else
+               return (0);
+       } else
                puts("There is nothing to drive here.");
-       return(-1);
+       return (-1);
 }
 
+int
 ride()
 {
-       if (testbit(location[position].objects,HORSE)){
+       if (testbit(location[position].objects, HORSE)) {
                puts("You climb onto the stallion and kick it in the guts.  The stupid steed launches");
-               puts("forward through bush and fern.  You are thrown and the horse gallups off.");
-               clearbit(location[position].objects,HORSE);
-               while (!(position = rnd(NUMOFROOMS+1)) || !OUTSIDE || !beenthere[position] || location[position].flyhere);
-               setbit(location[position].objects,HORSE);
+               puts("forward through bush and fern.  You are thrown and the horse gallops off.");
+               clearbit(location[position].objects, HORSE);
+               while (!(position = rnd(NUMOFROOMS + 1)) || !OUTSIDE || !beenthere[position] || location[position].flyhere)
+                       continue;
+               setbit(location[position].objects, HORSE);
                if (location[position].north)
                        position = location[position].north;
                else if (location[position].south)
@@ -197,23 +217,58 @@ ride()
                        position = location[position].east;
                else
                        position = location[position].west;
-               return(0);
-       }
-       else puts("There is no horse here.");
-       return(-1);
+               return (0);
+       } else
+               puts("There is no horse here.");
+       return (-1);
 }
 
-light()                /* synonyms = {strike, smoke} */
-{              /* for matches, cigars */
-       if (testbit(inven,MATCHES) && matchcount){
+void
+light()
+{                              /* synonyms = {strike, smoke} *//* for
+                                * matches, cigars */
+       if (testbit(inven, MATCHES) && matchcount) {
                puts("Your match splutters to life.");
-               time++;
+               ourtime++;
                matchlight = 1;
                matchcount--;
-               if (position == 217){
+               if (position == 217) {
                        puts("The whole bungalow explodes with an intense blast.");
                        die();
                }
-       }
-       else puts("You're out of matches.");
+       } else
+               puts("You're out of matches.");
+}
+
+void
+dooropen()
+{                              /* synonyms = {open, unlock} */
+       wordnumber++;
+       if (wordnumber <= wordcount && wordtype[wordnumber] == NOUNS
+           && wordvalue[wordnumber] == DOOR) {
+               switch(position) {
+               case 189:
+               case 231:
+                       if (location[189].north == 231)
+                               puts("The door is already open.");
+                       else
+                               puts("The door does not budge.");
+                       break;
+               case 30:
+                       if (location[30].west == 25)
+                               puts("The door is gone.");
+                       else
+                               puts("The door is locked tight.");
+                       break;
+               case 31:
+                       puts("That's one immovable door.");
+                       break;
+               case 20:
+                       puts("The door is already ajar.");
+                       break;
+               default:
+                       puts("What door?");
+               }
+       } else
+               puts("That doesn't open.");
 }