X-Git-Url: https://git.cameronkatri.com/bsdgames-darwin.git/blobdiff_plain/47c4a13aeb96fe1fe49bddec4fb90e77c81cf366..da6a856c31649c6fc011d45d51542876e1b13539:/atc/update.c diff --git a/atc/update.c b/atc/update.c index a1b8aa77..b736624a 100644 --- a/atc/update.c +++ b/atc/update.c @@ -1,4 +1,4 @@ -/* $NetBSD: update.c,v 1.9 1999/07/24 23:58:15 hubertf Exp $ */ +/* $NetBSD: update.c,v 1.27 2015/06/25 05:33:02 dholland Exp $ */ /*- * Copyright (c) 1990, 1993 @@ -15,11 +15,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -50,17 +46,30 @@ #if 0 static char sccsid[] = "@(#)update.c 8.1 (Berkeley) 5/31/93"; #else -__RCSID("$NetBSD: update.c,v 1.9 1999/07/24 23:58:15 hubertf Exp $"); +__RCSID("$NetBSD: update.c,v 1.27 2015/06/25 05:33:02 dholland Exp $"); #endif -#endif not lint +#endif /* not lint */ -#include "include.h" +#include +#include +#include +#include +#include "def.h" +#include "struct.h" +#include "extern.h" +#include "tunable.h" + +static int next_plane(void); +static int too_close(const PLANE *p1, const PLANE *p2, int); +static int dir_deg(int); + +/* ARGSUSED */ void -update(dummy) - int dummy; +update(int dummy __unused) { - int i, dir_diff, unclean; + int dir_diff, unclean; + unsigned i; PLANE *pp, *p1, *p2; #ifdef SYSV @@ -123,7 +132,7 @@ update(dummy) if (pp->delayd && pp->xpos == sp->beacon[pp->delayd_no].x && pp->ypos == sp->beacon[pp->delayd_no].y) { - pp->delayd = 0; + pp->delayd = false; if (pp->status == S_UNMARKED) pp->status = S_MARKED; } @@ -157,7 +166,7 @@ update(dummy) } if (pp->altitude > 9) /* "this is impossible" */ - loser(pp, "exceded flight ceiling."); + loser(pp, "exceeded flight ceiling."); if (pp->altitude <= 0) { for (i = 0; i < sp->num_airports; i++) if (pp->xpos == sp->airport[i].x && @@ -205,7 +214,8 @@ update(dummy) if (too_close(p1, p2, 1)) { static char buf[80]; - (void)sprintf(buf, "collided with plane '%c'.", + (void)snprintf(buf, sizeof(buf), + "collided with plane '%c'.", name(p2)); loser(p1, buf); } @@ -222,40 +232,69 @@ update(dummy) #endif } +void +loser(const PLANE *p, const char *s) +{ + int c; +#ifdef BSD + struct itimerval itv; +#endif + + /* disable timer */ +#ifdef BSD + itv.it_value.tv_sec = 0; + itv.it_value.tv_usec = 0; + (void)setitimer(ITIMER_REAL, &itv, NULL); +#endif +#ifdef SYSV + alarm(0); +#endif + + losermsg(p, s); + while ((c = getAChar()) != EOF && c != ' ') + ; + shutdown_gr(); + (void)log_score(0); + exit(0); +} + const char * -command(pp) - const PLANE *pp; +command(const PLANE *pp) { static char buf[50], *bp, *comm_start; + size_t bpsize; buf[0] = '\0'; bp = buf; - (void)sprintf(bp, "%c%d%c%c%d: ", name(pp), pp->altitude, + bpsize = sizeof(buf); + (void)snprintf(bp, bpsize, "%c%d%c%c%u: ", name(pp), pp->altitude, (pp->fuel < LOWFUEL) ? '*' : ' ', (pp->dest_type == T_AIRPORT) ? 'A' : 'E', pp->dest_no); comm_start = bp = strchr(buf, '\0'); + bpsize = buf + sizeof(buf) - bp; if (pp->altitude == 0) - (void)sprintf(bp, "Holding @ A%d", pp->orig_no); + (void)snprintf(bp, bpsize, "Holding @ A%u", pp->orig_no); else if (pp->new_dir >= MAXDIR || pp->new_dir < 0) - strcpy(bp, "Circle"); + (void)snprintf(bp, bpsize, "Circle"); else if (pp->new_dir != pp->dir) - (void)sprintf(bp, "%d", dir_deg(pp->new_dir)); + (void)snprintf(bp, bpsize, "%d", dir_deg(pp->new_dir)); bp = strchr(buf, '\0'); + bpsize = buf + sizeof(buf) - bp; if (pp->delayd) - (void)sprintf(bp, " @ B%d", pp->delayd_no); + (void)snprintf(bp, bpsize, " @ B%u", pp->delayd_no); bp = strchr(buf, '\0'); + bpsize = buf + sizeof(buf) - bp; if (*comm_start == '\0' && (pp->status == S_UNMARKED || pp->status == S_IGNORED)) - strcpy(bp, "---------"); + (void)snprintf(bp, bpsize, "---------"); return (buf); } char -name(p) - const PLANE *p; +name(const PLANE *p) { if (p->plane_type == 0) return ('A' + p->plane_no); @@ -264,19 +303,18 @@ name(p) } int -number(l) - char l; +number(int l) { - if (l < 'a' && l > 'z' && l < 'A' && l > 'Z') - return (-1); - else if (l >= 'a' && l <= 'z') + if (islower((unsigned char)l)) return (l - 'a'); - else + else if (isupper((unsigned char)l)) return (l - 'A'); + else + return (-1); } -int -next_plane() +static int +next_plane(void) { static int last_plane = -1; PLANE *pp; @@ -299,18 +337,19 @@ next_plane() break; } } while (found && last_plane != start_plane); - if (last_plane == start_plane) + if (found) return (-1); return (last_plane); } -int -addplane() +void +addplane(void) { PLANE p, *pp, *p1; - int i, num_starts, close, rnd, rnd2, pnum; + int isclose, pnum; + unsigned num_starts, rnd, rnd2, i; - memset(&p, 0, sizeof (p)); + (void)memset(&p, 0, sizeof (p)); p.status = S_MARKED; p.plane_type = random() % 2; @@ -338,13 +377,13 @@ addplane() p.ypos = sp->exit[rnd2].y; p.new_dir = p.dir = sp->exit[rnd2].dir; p.altitude = p.new_altitude = 7; - close = 0; + isclose = 0; for (p1 = air.head; p1 != NULL; p1 = p1->next) if (too_close(p1, &p, 4)) { - close++; + isclose++; break; } - if (close) + if (isclose) continue; } else { p.orig_type = T_AIRPORT; @@ -358,28 +397,25 @@ addplane() break; } if (i >= num_starts) - return (-1); + return; pnum = next_plane(); if (pnum < 0) - return (-1); + return; p.plane_no = pnum; pp = newplane(); if (pp == NULL) loser(NULL, "Out of memory!"); - memcpy(pp, &p, sizeof (p)); + (void)memcpy(pp, &p, sizeof (p)); if (pp->orig_type == T_AIRPORT) append(&ground, pp); else append(&air, pp); - - return (pp->dest_type); } -PLANE * -findplane(n) - int n; +PLANE * +findplane(int n) { PLANE *pp; @@ -392,21 +428,19 @@ findplane(n) return (NULL); } -int -too_close(p1, p2, dist) - const PLANE *p1, *p2; - int dist; +static int +too_close(const PLANE *p1, const PLANE *p2, int dist) { if (ABS(p1->altitude - p2->altitude) <= dist && - ABS(p1->xpos - p2->xpos) <= dist && ABS(p1->ypos - p2->ypos) <= dist) + ABS(p1->xpos - p2->xpos) <= dist && + ABS(p1->ypos - p2->ypos) <= dist) return (1); else return (0); } -int -dir_deg(d) - int d; +static int +dir_deg(int d) { switch (d) { case 0: return (0);