diff options
Diffstat (limited to 'sail/sync.c')
-rw-r--r-- | sail/sync.c | 63 |
1 files changed, 40 insertions, 23 deletions
diff --git a/sail/sync.c b/sail/sync.c index 7bab0f9a..db9f4834 100644 --- a/sail/sync.c +++ b/sail/sync.c @@ -1,4 +1,4 @@ -/* $NetBSD: sync.c,v 1.10 1998/09/11 14:15:46 hubertf Exp $ */ +/* $NetBSD: sync.c,v 1.11 1999/02/10 00:45:46 hubertf Exp $ */ /* * Copyright (c) 1983, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)sync.c 8.2 (Berkeley) 4/28/95"; #else -__RCSID("$NetBSD: sync.c,v 1.10 1998/09/11 14:15:46 hubertf Exp $"); +__RCSID("$NetBSD: sync.c,v 1.11 1999/02/10 00:45:46 hubertf Exp $"); #endif #endif /* not lint */ @@ -121,7 +121,7 @@ makesignal(va_alias) fmtship(format, sizeof(format), fmt, ship); (void) vsprintf(message, format, ap); va_end(ap); - Write(W_SIGNAL, from, 1, (long)message, 0, 0, 0); + Writestr(W_SIGNAL, from, message); } void @@ -146,8 +146,9 @@ makemsg(va_alias) #endif (void) vsprintf(message, fmt, ap); va_end(ap); - Write(W_SIGNAL, from, 1, (long)message, 0, 0, 0); + Writestr(W_SIGNAL, from, message); } + int sync_exists(game) int game; @@ -199,25 +200,37 @@ sync_close(remove) } void -Write(type, ship, isstr, a, b, c, d) +Write(type, ship, a, b, c, d) int type; struct ship *ship; - int isstr; long a, b, c, d; { - if (isstr) - (void) sprintf(sync_bp, "%d %d %d %s\n", - type, ship->file->index, isstr, (char *) a); - else - (void) sprintf(sync_bp, "%d %d %d %ld %ld %ld %ld\n", - type, ship->file->index, isstr, a, b, c, d); + (void) sprintf(sync_bp, "%d %d 0 %ld %ld %ld %ld\n", + type, ship->file->index, a, b, c, d); + while (*sync_bp++) + ; + sync_bp--; + if (sync_bp >= &sync_buf[sizeof sync_buf]) + abort(); + (void) sync_update(type, ship, NULL, a, b, c, d); +} + +void +Writestr(type, ship, a) + int type; + struct ship *ship; + const char *a; +{ + + (void) sprintf(sync_bp, "%d %d 1 %s\n", + type, ship->file->index, a); while (*sync_bp++) ; sync_bp--; if (sync_bp >= &sync_buf[sizeof sync_buf]) abort(); - (void) sync_update(type, ship, a, b, c, d); + (void) sync_update(type, ship, a, 0, 0, 0, 0); } int @@ -226,6 +239,7 @@ Sync() sig_t sighup, sigint; int n; int type, shipnum, isstr; + char *astr; long a, b, c, d; char buf[80]; char erred = 0; @@ -280,19 +294,21 @@ Sync() *p = 0; for (p = buf; *p == ' '; p++) ; - a = (long)p; - b = c = d = 0; - } else + astr = p; + a = b = c = d = 0; + } else { if (fscanf(sync_fp, "%ld%ld%ld%ld", &a, &b, &c, &d) != 4) goto bad; - if (sync_update(type, SHIP(shipnum), a, b, c, d) < 0) + astr = NULL; + } + if (sync_update(type, SHIP(shipnum), astr, a, b, c, d) < 0) goto bad; } bad: erred++; out: if (!erred && sync_bp != sync_buf) { - (void) fseek(sync_fp, 0L, 2); + (void) fseek(sync_fp, 0L, SEEK_END); (void) fwrite(sync_buf, sizeof *sync_buf, sync_bp - sync_buf, sync_fp); (void) fflush(sync_fp); @@ -310,9 +326,10 @@ out: } int -sync_update(type, ship, a, b, c, d) +sync_update(type, ship, astr, a, b, c, d) int type; struct ship *ship; + const char *astr; long a, b, c, d; { switch (type) { @@ -377,9 +394,9 @@ sync_update(type, ship, a, b, c, d) case W_SIGNAL: if (mode == MODE_PLAYER) { if (nobells) - Signal("$$: %s", ship, (char *) a); + Signal("$$: %s", ship, astr); else - Signal("\7$$: %s", ship, (char *) a); + Signal("\7$$: %s", ship, astr); } break; case W_CREW: { @@ -390,7 +407,7 @@ sync_update(type, ship, a, b, c, d) break; } case W_CAPTAIN: - (void) strncpy(ship->file->captain, (char *)a, + (void) strncpy(ship->file->captain, astr, sizeof ship->file->captain - 1); ship->file->captain[sizeof ship->file->captain - 1] = 0; break; @@ -429,7 +446,7 @@ sync_update(type, ship, a, b, c, d) ship->specs->hull = a; break; case W_MOVE: - (void) strncpy(ship->file->movebuf, (char *)a, + (void) strncpy(ship->file->movebuf, astr, sizeof ship->file->movebuf - 1); ship->file->movebuf[sizeof ship->file->movebuf - 1] = 0; break; |