summaryrefslogtreecommitdiffstats
path: root/sail/sync.c
diff options
context:
space:
mode:
Diffstat (limited to 'sail/sync.c')
-rw-r--r--sail/sync.c63
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;