X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/462fca95471224f85b85be911e72faee16cd1597..078475b41e85ca187bfd817cf4aa52efe2a72968:/battlestar/com6.c diff --git a/battlestar/com6.c b/battlestar/com6.c index ddf30d2a..5f4c8562 100644 --- a/battlestar/com6.c +++ b/battlestar/com6.c @@ -1,6 +1,8 @@ +/* $NetBSD: com6.c,v 1.20 2000/09/24 14:20:24 jsm Exp $ */ + /* - * Copyright (c) 1983 Regents of the University of California. - * All rights reserved. + * Copyright (c) 1983, 1993 + * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -31,58 +33,71 @@ * SUCH DAMAGE. */ +#include #ifndef lint -/*static char sccsid[] = "from: @(#)com6.c 5.5 (Berkeley) 6/1/90";*/ -static char rcsid[] = "$Id: com6.c,v 1.2 1993/08/01 18:56:07 mycroft Exp $"; -#endif /* not lint */ +#if 0 +static char sccsid[] = "@(#)com6.c 8.2 (Berkeley) 4/28/95"; +#else +__RCSID("$NetBSD: com6.c,v 1.20 2000/09/24 14:20:24 jsm Exp $"); +#endif +#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!"); @@ -90,100 +105,110 @@ live() exit(0); } -/* - * sigh -- this program thinks "time" is an int. It's easier to not load - * than try and fix it. - */ -#define KERNEL -#include -#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) @@ -192,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."); }