rearranged player and screen stuff
authorEdward Wang <edward@ucbvax.Berkeley.EDU>
Sat, 29 Oct 1983 11:23:41 +0000 (03:23 -0800)
committerEdward Wang <edward@ucbvax.Berkeley.EDU>
Sat, 29 Oct 1983 11:23:41 +0000 (03:23 -0800)
SCCS-vsn: games/sail/Makefile 1.13
SCCS-vsn: games/sail/pl_1.c 1.14
SCCS-vsn: games/sail/pl_2.c 1.8
SCCS-vsn: games/sail/pl_3.c 1.5
SCCS-vsn: games/sail/pl_4.c 1.6
SCCS-vsn: games/sail/sync.c 1.5

usr/src/games/sail/Makefile
usr/src/games/sail/pl_1.c
usr/src/games/sail/pl_2.c
usr/src/games/sail/pl_3.c
usr/src/games/sail/pl_4.c
usr/src/games/sail/sync.c

index 9bf7394..8d71f4e 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Sail - Wooden Ships And Iron Men
 #
 #
 # Sail - Wooden Ships And Iron Men
 #
-# Makefile     @(#)Makefile    1.12 83/10/10
+# Makefile     @(#)Makefile    1.13 83/10/28
 #
 CC= cc
 CTAGS= ctags -w
 #
 CC= cc
 CTAGS= ctags -w
@@ -9,8 +9,10 @@ CFLAGS= -O
 
 DFILES= driver1.c driver2.c driver3.c grap.c boarders.c
 DOBJS= driver1.o driver2.o driver3.o grap.o boarders.o
 
 DFILES= driver1.c driver2.c driver3.c grap.c boarders.c
 DOBJS= driver1.o driver2.o driver3.o grap.o boarders.o
-PFILES= player1.c player2.c player3.c player4.c version.c
-POBJS= player1.o player2.o player3.o player4.o version.o
+PFILES= player1.c player2.c player3.c player4.c player5.c player6.c player7.c \
+       version.c
+POBJS= player1.o player2.o player3.o player4.o player5.o player6.o player7.o \
+       version.o
 COMMONFILES= assorted.c game.c globals.c misc.c parties.c sync.c
 COMMONOBJS= assorted.o game.o globals.o misc.o parties.o sync.o
 LFILES= sail.log.c
 COMMONFILES= assorted.c game.c globals.c misc.c parties.c sync.c
 COMMONOBJS= assorted.o game.o globals.o misc.o parties.o sync.o
 LFILES= sail.log.c
index 563d464..e246657 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)pl_1.c      1.13 83/10/14";
+static char *sccsid = "@(#)pl_1.c      1.14 83/10/28";
 #endif
 
 #include "player.h"
 #endif
 
 #include "player.h"
@@ -13,12 +13,7 @@ main(argc, argv)
 int argc;
 char **argv;
 {
 int argc;
 char **argv;
 {
-       register struct ship *sp;
-       int ta;
-       char aheadfirst;
-       int ma;
        char nodrive = 0, randomize = 0, debug = 0;
        char nodrive = 0, randomize = 0, debug = 0;
-       char *badstring();
        extern char _sobuf[];
 
        setbuf(stdout, _sobuf);
        extern char _sobuf[];
 
        setbuf(stdout, _sobuf);
@@ -45,105 +40,7 @@ char **argv;
                game = -1;
        initialize(nodrive, randomize, debug);
        Signal("Aye aye, Sir", (struct ship *)0);
                game = -1;
        initialize(nodrive, randomize, debug);
        Signal("Aye aye, Sir", (struct ship *)0);
-       for (;;) {
-               switch (sgetch("~\b", (struct ship *)0, 0)) {
-               case 'm':
-                       if (mc->crew3 && !snagged(ms)
-                           && windspeed != 0) {
-                               ta = maxturns(ms, &aheadfirst);
-                               ma = maxmove(ms, mf->dir, 0);
-                               acceptmove(ma, ta, aheadfirst);
-                       } else
-                               Signal("Unable to move", (struct ship *)0);
-                       break;
-               case 's':
-                       acceptsignal();
-                       break;
-               case 'g':
-                       grapungrap();
-                       break;
-               case 'u':
-                       unfoulplayer();
-                       break;
-               case 'v':
-                       Signal("%s", (struct ship *)0, version);
-                       break;
-               case 'b':
-                       doboarding();
-                       break;
-               case 'f':
-                       acceptcombat();
-                       break;
-               case 'l':
-                       loadplayer();
-                       break;
-               case 'c':
-                       changesail();
-                       break;
-               case 'r':
-                       repair();
-                       break;
-               case 'B':
-                       Signal("'Hands to stations!'", (struct ship *)0);
-                       unboard(ms, ms, 1);     /* cancel DBP's */
-                       unboard(ms, ms, 0);     /* cancel offense */
-                       break;
-               case '\f':
-                       centerview();
-                       board();
-                       screen();
-                       break;
-               case 'L':
-                       mf->loadL = L_EMPTY;
-                       mf->loadR = L_EMPTY;
-                       mf->readyL = R_EMPTY;
-                       mf->readyR = R_EMPTY;
-                       Signal("Broadsides unloaded", (struct ship *)0);
-                       break;
-               case 'q':
-                       Signal("Type 'Q' to quit", (struct ship *)0);
-                       break;
-               case 'Q':
-                       leave(LEAVE_QUIT);
-                       break;
-               case 'I':
-                       foreachship(sp)
-                               if (sp != ms)
-                                       eyeball(sp);
-                       break;
-               case 'i':
-                       eyeball(closestenemy(ms, 0, 1));
-                       break;
-               case 'C':
-                       centerview();
-                       draw_view();
-                       break;
-               case 'U':
-                       upview();
-                       draw_view();
-                       break;
-               case 'D':
-               case 'N':
-                       downview();
-                       draw_view();
-                       break;
-               case 'H':
-                       leftview();
-                       draw_view();
-                       break;
-               case 'J':
-                       rightview();
-                       draw_view();
-                       break;
-               case 'F':
-                       lookout();
-                       break;
-               case 'S':
-                       dont_adjust = !dont_adjust;
-                       break;
-               }
-               lost();
-       }
+       play();
 }
 
 initialize(nodriver, randomize, debug)
 }
 
 initialize(nodriver, randomize, debug)
@@ -331,7 +228,7 @@ reprint:
 
        initscreen();
 
 
        initscreen();
 
-       board();
+       draw_board();
        (void) sprintf(message, "Captain %s assuming command", captain);
        Write(W_SIGNAL, ms, 1, (int)message, 0, 0, 0);
 
        (void) sprintf(message, "Captain %s assuming command", captain);
        Write(W_SIGNAL, ms, 1, (int)message, 0, 0, 0);
 
@@ -393,7 +290,6 @@ int conditions;
                        (void) fclose(fp);
                }
                if (done_curses) {
                        (void) fclose(fp);
                }
                if (done_curses) {
-                       screen();
                        Signal("It looks like you've had it!",
                                (struct ship *)0);
                        switch (conditions) {
                        Signal("It looks like you've had it!",
                                (struct ship *)0);
                        switch (conditions) {
@@ -415,19 +311,20 @@ int conditions;
                                        (struct ship *)0, conditions);
                        }
                } else {
                                        (struct ship *)0, conditions);
                        }
                } else {
-                       if (conditions == LEAVE_DRIVER)
+                       switch (conditions) {
+                       case LEAVE_QUIT:
+                               break;
+                       case LEAVE_DRIVER:
                                printf("The driver died.\n");
                                printf("The driver died.\n");
-                       else
-                               printf("leave: unknown code %d\n", conditions);
+                               break;
+                       default:
+                               printf("A funny thing happened (%d).\n",
+                                       conditions);
+                       }
                }
                Sync();
        }
                }
                Sync();
        }
-       if (done_curses) {
-               lastline();
-               nocrmode();
-               echo();
-               endwin();
-       }
+       cleanupscreen();
        exit(0);
 }
 
        exit(0);
 }
 
index 4f56a23..3138d3c 100644 (file)
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)pl_2.c      1.7 83/10/14";
+static char *sccsid = "@(#)pl_2.c      1.8 83/10/28";
 #endif
 
 #include "player.h"
 
 #endif
 
 #include "player.h"
 
-#define turnfirst(x) (*x == 'r' || *x == 'l')
-
-lost()
+play()
 {
 {
-       if (mf->struck)
-               leave(LEAVE_QUIT);
-       if (mf->captured != 0)
-               leave(LEAVE_CAPTURED);
-       if (windspeed == 7)
-               leave(LEAVE_HURRICAN);
-       if (mf->FS && (!mc->rig1 || windspeed == 6))
-               Write(W_FS, ms, 0, 0, 0, 0, 0);
-}
-
-acceptmove(ma, ta, af)
-int ma, ta, af;
-{
-       int moved = 0;
-       int vma, dir;
-       char prompt[60];
-       char buf[60], last = '\0';
-       register char *p;
+       register struct ship *sp;
 
 
-       if (*movebuf) {
-               Signal("Already moved.", (struct ship *)0);
-               return;
-       }
-       (void) sprintf(prompt, "move (%d,%c%d): ", ma, af ? '\'' : ' ', ta);
-       sgetstr(prompt, buf, sizeof buf);
-       dir = mf->dir;
-       vma = ma;
-       for (p = buf; *p; p++)
-               switch (*p) {
-               case 'l':
-                       dir -= 2;
-               case 'r':
-                       if (++dir == 0)
-                               dir = 8;
-                       else if (dir == 9)
-                               dir = 1;
-                       if (last == 't') {
-                               Signal("Ship can't turn that fast.",
-                                       (struct ship *)0);
-                               *p-- = '\0';
-                       }
-                       last = 't';
-                       ma--;
-                       ta--;
-                       vma = min(ma, maxmove(ms, dir, 0));
-                       if (ta < 0 && moved || vma < 0 && moved)
-                               *p-- = '\0';
+       for (;;) {
+               switch (sgetch("~\b", (struct ship *)0, 0)) {
+               case 'm':
+                       acceptmove();
                        break;
                        break;
-               case 'b':
-                       ma--;
-                       vma--;
-                       last = 'b';
-                       if (ta < 0 && moved || vma < 0 && moved)
-                               *p-- = '\0';
+               case 's':
+                       acceptsignal();
                        break;
                        break;
-               case '0':
-               case 'd':
-                       *p-- = '\0';
+               case 'g':
+                       grapungrap();
                        break;
                        break;
-               case '\n':
-                       *p-- = '\0';
+               case 'u':
+                       unfoulplayer();
                        break;
                        break;
-               case '1': case '2': case '3': case '4':
-               case '5': case '6': case '7':
-                       if (last == '0') {
-                               Signal("Can't move that fast.",
-                                       (struct ship *)0);
-                               *p-- = '\0';
-                       }
-                       last = '0';
-                       moved = 1;
-                       ma -= *p - '0';
-                       vma -= *p - '0';
-                       if (ta < 0 && moved || vma < 0 && moved)
-                               *p-- = '\0';
+               case 'v':
+                       Signal("%s", (struct ship *)0, version);
                        break;
                        break;
-               default:
-                       if (!isspace(*p)) {
-                               Signal("Input error.", (struct ship *)0);
-                               *p-- = '\0';
-                       }
-               }
-       if (ta < 0 && moved || vma < 0 && moved
-           || af && turnfirst(buf) && moved) {
-               Signal("Movement error.", (struct ship *)0);
-               if (ta < 0 && moved) {
-                       if (mf->FS == 1) {
-                               Write(W_FS, ms, 0, 0, 0, 0, 0);
-                               Signal("No hands to set full sails.",
-                                       (struct ship *)0);
-                       }
-               } else if (ma >= 0)
-                       buf[1] = '\0';
-       }
-       if (af && !moved) {
-               if (mf->FS == 1) {
-                       Write(W_FS, ms, 0, 0, 0, 0, 0);
-                       Signal("No hands to set full sails.",
-                               (struct ship *)0);
-               }
-       }
-       if (*buf)
-               (void) strcpy(movebuf, buf);
-       else
-               (void) strcpy(movebuf, "d");
-       Write(W_LAST, ms, 1, (int)movebuf, 0, 0, 0);
-       Signal("Helm: %s.", (struct ship *)0, movebuf);
-}
-
-doboarding()
-{
-       register struct ship *sp;
-       register int n;
-       int crew[3];
-       int men = 0;
-       char c;
-
-       crew[0] = mc->crew1;
-       crew[1] = mc->crew2;
-       crew[2] = mc->crew3;
-       for (n = 0; n < NBP; n++) {
-               if (mf->OBP[n].turnsent)
-                           men += mf->OBP[n].turnsent;
-       }
-       for (n = 0; n < NBP; n++) {
-               if (mf->DBP[n].turnsent)
-                           men += mf->DBP[n].turnsent;
-       }
-       if (men) {
-               crew[0] = men/100 ? 0 : crew[0] != 0;
-               crew[1] = (men%100)/10 ? 0 : crew[1] != 0;
-               crew[2] = men%10 ? 0 : crew[2] != 0;
-       } else {
-               crew[0] = crew[0] != 0;
-               crew[1] = crew[1] != 0;
-               crew[2] = crew[2] != 0;
-       }
-       foreachship(sp) {
-               if (sp == ms || sp->file->dir == 0 || range(ms, sp) > 1)
-                       continue;
-               if (ms->nationality == capship(sp)->nationality)
-                       continue;
-               if (meleeing(ms, sp) && crew[2]) {
-                       c = sgetch("How many more to board the %s (%c%c)? ",
-                               sp, 1);
-                       parties(crew, sp, 0, c);
-               } else if ((fouled2(ms, sp) || grappled2(ms, sp)) && crew[2]) {
-                       c = sgetch("Crew sections to board the %s (%c%c) (3 max) ?", sp, 1);
-                       parties(crew, sp, 0, c);
-               }
-       }
-       if (crew[2]) {
-               c = sgetch("How many sections to repel boarders? ",
-                       (struct ship *)0, 1);
-               parties(crew, ms, 1, c);
-       }
-}
-
-parties(crew, to, isdefense, buf)
-register struct ship *to;
-int crew[3];
-char isdefense;
-char buf;
-{
-       register int k, j, men; 
-       struct BP *ptr;
-       int temp[3];
-
-       for (k = 0; k < 3; k++)
-               temp[k] = crew[k];
-       if (isdigit(buf)) {
-               ptr = isdefense ? to->file->DBP : to->file->OBP; 
-               for (j = 0; j < NBP && ptr[j].turnsent; j++)
-                       ;
-               if (!ptr[j].turnsent && buf > '0') {
-                       men = 0;
-                       for (k=0; k < 3 && buf > '0'; k++) {
-                               men += crew[k] * power(10, 2-k);
-                               crew[k] = 0;
-                               if (men)
-                                       buf -= 1;
-                       }
-                       if (buf > '0')
-                               Signal("Sending all crew sections.",
-                                       (struct ship *)0);
-                       Write(isdefense ? W_DBP : W_OBP, ms, 0,
-                               j, turn, to-SHIP(0), men);
-                       if (isdefense) {
-                               (void) wmove(slot_w, 2, 0);
-                               for (k=0; k < NBP; k++)
-                                       if (temp[k] && !crew[k])
-                                               (void) waddch(slot_w, k + '1');
-                                       else
-                                               (void) wmove(slot_w, 2, 1 + k);
-                               (void) mvwaddstr(slot_w, 3, 0, "DBP");
-                               makesignal(ms, "repelling boarders",
-                                       (struct ship *)0);
-                       } else {
-                               (void) wmove(slot_w, 0, 0);
-                               for (k=0; k < NBP; k++)
-                                       if (temp[k] && !crew[k])
-                                               (void) waddch(slot_w, k + '1');
-                                       else
-                                               (void) wmove(slot_w, 0, 1 + k);
-                               (void) mvwaddstr(slot_w, 1, 0, "OBP");
-                               makesignal(ms, "boarding the %s (%c%c)", to);
-                       }
-                       (void) wrefresh(slot_w);
-               } else
-                       Signal("Sending no crew sections.", (struct ship *)0);
-       }
-}
-
-power(base, exp)
-int base, exp;
-{
-       switch (exp) {
-               case 0:
-                       return 1;
-               case 1:
-                       return base;
-               case 2:
-                       return base * base;
-       }
-       return 0;
-}
-
-repair()
-{
-       char c;
-       char *repairs;
-       struct shipspecs *ptr;
-
-       if (repaired || loaded || fired || changed || turned()) {
-               Signal("No hands free to repair", (struct ship *)0);
-               return;
-       }
-       ptr = mc;
-       c = sgetch("Repair (hull, guns, rigging)? ", (struct ship *)0, 1);
-       switch (c) {
-               case 'h':
-                       repairs = &mf->RH;
+               case 'b':
+                       acceptboard();
                        break;
                        break;
-               case 'g':
-                       repairs = &mf->RG;
+               case 'f':
+                       acceptcombat();
+                       break;
+               case 'l':
+                       loadplayer();
+                       break;
+               case 'c':
+                       changesail();
                        break;
                case 'r':
                        break;
                case 'r':
-                       repairs = &mf->RR;
+                       repair();
                        break;
                        break;
-               default:
-                       Signal("Avast heaving!", (struct ship *)0);
-                       return;
-       }
-       repaired = 1;
-       if (++*repairs >= 3) {
-               *repairs = 0;
-               switch (c) {
-               case 'h':
-                       if (ptr->hull < ptr->guns/4)
-                               Write(W_HULL, ms, 0,
-                                       ptr->hull + 2, 0, 0, 0);
-                       else
-                               c = 0;
+               case 'B':
+                       Signal("'Hands to stations!'", (struct ship *)0);
+                       unboard(ms, ms, 1);     /* cancel DBP's */
+                       unboard(ms, ms, 0);     /* cancel offense */
                        break;
                        break;
-               case 'g':
-                       if (ptr->gunL < ptr->gunR) {
-                               if (ptr->gunL + ptr->carL < ptr->guns/5)
-                                       Write(W_GUNL, ms, 0,
-                                               ptr->gunL + 2, ptr->carL, 0, 0);
-                               else
-                                       c = 0;
-                       } else
-                               if (ptr->gunR + ptr->carR < ptr->guns/5)
-                                       Write(W_GUNR, ms, 0,
-                                               ptr->gunR + 2, ptr->carR, 0, 0);
-                               else
-                                       c = 0;
+               case '\f':
+                       centerview();
+                       draw_board();
+                       draw_screen();
                        break;
                        break;
-               case 'r':
-                       if (!ptr->rig4)
-                               Write(W_RIG4, ms, 0,
-                                       ptr->rig4 + 2, 0, 0, 0);
-                       else if (!ptr->rig3)
-                               Write(W_RIG3, ms, 0, 2, 0, 0, 0);
-                       else if (!ptr->rig2)
-                               Write(W_RIG2, ms, 0, 2, 0, 0, 0);
-                       else if (ptr->rig1 < 4)
-                               Write(W_RIG1, ms, 0, 2, 0, 0, 0);
+               case 'L':
+                       mf->loadL = L_EMPTY;
+                       mf->loadR = L_EMPTY;
+                       mf->readyL = R_EMPTY;
+                       mf->readyR = R_EMPTY;
+                       Signal("Broadsides unloaded", (struct ship *)0);
+                       break;
+               case 'q':
+                       Signal("Type 'Q' to quit", (struct ship *)0);
+                       break;
+               case 'Q':
+                       leave(LEAVE_QUIT);
+                       break;
+               case 'I':
+                       foreachship(sp)
+                               if (sp != ms)
+                                       eyeball(sp);
+                       break;
+               case 'i':
+                       if ((sp = closestenemy(ms, 0, 1)) == 0)
+                               Signal("No more ships left.");
                        else
                        else
-                               c = 0;
+                               eyeball(sp);
                        break;
                        break;
-               }
-               if (!c)
-                       Signal("Repairs completed.", (struct ship *)0);
-       }
-}
-
-turned()
-{
-       register char *p;
-
-       for (p = movebuf; *p; p++)
-               if (*p == 'r' || *p == 'l')
-                       return 1;
-       return 0;
-}
-
-loadplayer()
-{
-       char c;
-       register loadL, loadR, ready, load;
-
-       if (!mc->crew3) {
-               Signal("Out of crew", (struct ship *)0);
-               return;
-       }
-       loadL = mf->loadL;
-       loadR = mf->loadR;
-       if (!loadL && !loadR) {
-               c = sgetch("Load which broadside (left or right)? ",
-                       (struct ship *)0, 1);
-               if (c == 'r')
-                       loadL = 1;
-               else
-                       loadR = 1;
-       }
-       if (!loadL && loadR || loadL && !loadR) {
-               c = sgetch("Reload with (round, double, chain, grape)? ",
-                       (struct ship *)0, 1);
-               switch (c) {
-               case 'r':
-                       load = L_ROUND;
-                       ready = 0;
+               case 'C':
+                       centerview();
+                       draw_view();
                        break;
                        break;
-               case 'd':
-                       load = L_DOUBLE;
-                       ready = R_DOUBLE;
+               case 'U':
+                       upview();
+                       draw_view();
                        break;
                        break;
-               case 'c':
-                       load = L_CHAIN;
-                       ready = 0;
+               case 'D':
+               case 'N':
+                       downview();
+                       draw_view();
                        break;
                        break;
-               case 'g':
-                       load = L_GRAPE;
-                       ready = 0;
+               case 'H':
+                       leftview();
+                       draw_view();
+                       break;
+               case 'J':
+                       rightview();
+                       draw_view();
+                       break;
+               case 'F':
+                       lookout();
+                       break;
+               case 'S':
+                       dont_adjust = !dont_adjust;
                        break;
                        break;
-               default:
-                       Signal("Broadside not loaded.",
-                               (struct ship *)0);
-                       return;
-               }
-               if (!loadR) {
-                       mf->loadR = load;
-                       mf->readyR = ready|R_LOADING;
-               } else {
-                       mf->loadL = load;
-                       mf->readyL = ready|R_LOADING;
                }
                }
-               loaded = 1;
        }
 }
        }
 }
index b15a4f9..00b1bb6 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)pl_3.c      1.4 83/10/14";
+static char *sccsid = "@(#)pl_3.c      1.5 83/10/28";
 #endif
 
 #include "player.h"
 #endif
 
 #include "player.h"
@@ -251,58 +251,3 @@ unfoulplayer()
                }
        }
 }
                }
        }
 }
-
-lookout()
-{
-       register struct ship *sp;
-       char buf[3];
-       register char c;
-
-       sgetstr("What ship? ", buf, sizeof buf);
-       foreachship(sp) {
-               c = *countryname[sp->nationality];
-               if ((c == *buf || tolower(c) == *buf || colours(sp) == *buf)
-                   && (sp->file->stern == buf[1] || sterncolour(sp) == buf[1]))
-               {
-                       eyeball(sp);
-                       return;
-               }
-       }
-       Signal("No such ship.", (struct ship *)0);
-}
-
-char *
-saywhat(sp, flag)
-register struct ship *sp;
-char flag;
-{
-       if (sp->file->captain[0])
-               return sp->file->captain;
-       else if (sp->file->struck)
-               return "(struck)";
-       else if (sp->file->captured != 0)
-               return "(captured)";
-       else if (flag)
-               return "(available)";
-       else
-               return "(computer)";
-}
-
-eyeball(ship)
-register struct ship *ship;
-{
-       int i;
-
-       if (ship == 0)
-               Signal("No more ships left.", (struct ship *)0);
-       else if (ship->file->dir != 0) {
-               Signal("Sail ho! (range %d, %s)",
-                       (struct ship *)0, range(ms, ship), saywhat(ship, 0));
-               i = portside(ms, ship, 1) - mf->dir;
-               if (i <= 0)
-                       i += 8;
-               Signal("%s (%c%c) %s %s %s.",
-                       ship, countryname[ship->nationality],
-                       classname[ship->specs->class], directionname[i]);
-       }
-}
index 2ca4ba1..6372b54 100644 (file)
@@ -1,14 +1,9 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)pl_4.c      1.5 83/10/14";
+static char *sccsid = "@(#)pl_4.c      1.6 83/10/28";
 #endif
 
 #include "player.h"
 
 #endif
 
 #include "player.h"
 
-static char sc_hasprompt;
-static char *sc_prompt;
-static char *sc_buf;
-static int sc_line;
-
 changesail()
 {
        int rig, full;
 changesail()
 {
        int rig, full;
@@ -48,387 +43,53 @@ acceptsignal()
        Write(W_SIGNAL, ms, 1, (int)buf, 0, 0, 0);
 }
 
        Write(W_SIGNAL, ms, 1, (int)buf, 0, 0, 0);
 }
 
-/*VARARGS2*/
-Signal(fmt, ship, a, b, c, d)
-char *fmt;
-register struct ship *ship;
-int a, b, c, d;
-{
-       if (ship == 0)
-               (void) wprintw(scroll_w, fmt, a, b, c, d);
-       else
-               (void) wprintw(scroll_w, fmt, ship->shipname, colours(ship),
-                       sterncolour(ship), a, b, c, d);
-       Scroll();
-}
-
-Scroll()
-{
-       if (++sc_line >= SCROLL_Y)
-               sc_line = 0;
-       (void) wmove(scroll_w, sc_line, 0);
-       (void) wclrtoeol(scroll_w);
-       (void) wrefresh(scroll_w);
-}
-
-lastline()
-{
-       (void) wmove(scroll_w, SCROLL_Y-1, 0);
-       (void) wclrtoeol(scroll_w);
-       (void) wrefresh(scroll_w);
-}
-
-prompt(p, ship)
-register char *p;
-struct ship *ship;
-{
-       static char buf[60];
-
-       if (ship != 0)
-               p = sprintf(buf, p, ship->shipname, colours(ship),
-                       sterncolour(ship));
-       sc_prompt = p;
-       sc_buf = "";
-       sc_hasprompt = 1;
-       (void) waddstr(scroll_w, p);
-       (void) wrefresh(scroll_w);
-}
-
-endprompt(flag)
-char flag;
-{
-       sc_hasprompt = 0;
-       if (flag)
-               Scroll();
-}
-
-sgetch(p, ship, flag)
-char *p;
-struct ship *ship;
-char flag;
-{
-       register c;
-
-       prompt(p, ship);
-       while ((c = wgetch(scroll_w)) == EOF)
-               ;
-       if (flag && c >= ' ' && c < 0x7f)
-               (void) waddch(scroll_w, c);
-       endprompt(flag);
-       return c;
-}
-
-sgetstr(pr, buf, n)
-char *pr;
-register char *buf;
-register n;
-{
-       register c;
-       register char *p = buf;
-
-       prompt(pr, (struct ship *)0);
-       sc_buf = buf;
-       for (;;) {
-               *p = 0;
-               (void) wrefresh(scroll_w);
-               while ((c = wgetch(scroll_w)) == EOF)
-                       ;
-               switch (c) {
-               case '\n':
-               case '\r':
-                       endprompt(1);
-                       return;
-               case '\b':
-                       if (p > buf) {
-                               (void) waddstr(scroll_w, "\b \b");
-                               p--;
-                       }
-                       break;
-               default:
-                       if (c >= ' ' && c < 0x7f && p < buf + n - 1) {
-                               *p++ = c;
-                               (void) waddch(scroll_w, c);
-                       } else
-                               (void) putchar(CTRL(g));
-               }
-       }
-}
-
-newturn()
-{
-       repaired = loaded = fired = changed = 0;
-       movebuf[0] = '\0';
-
-       (void) alarm(0);
-       if (mf->readyL & R_LOADING)
-               if (mf->readyL & R_DOUBLE)
-                       mf->readyL = R_LOADING;
-               else
-                       mf->readyL = R_LOADED;
-       if (mf->readyR & R_LOADING)
-               if (mf->readyR & R_DOUBLE)
-                       mf->readyR = R_LOADING;
-               else
-                       mf->readyR = R_LOADED;
-
-       if (sc_hasprompt) {
-               (void) wmove(scroll_w, sc_line, 0);
-               (void) wclrtoeol(scroll_w);
-       }
-       Sync();
-       if (sc_hasprompt)
-               (void) wprintw(scroll_w, "%s%s", sc_prompt, sc_buf);
-
-       if (turn % 50 == 0)             /* still playing */
-               Write(W_ALIVE, SHIP(0), 0, 0, 0, 0, 0); /* XXX */
-       if (mf->FS == 1)
-               Write(W_FS, ms, 0, 2, 0, 0, 0);
-       adjustview();
-
-       screen();
-
-       (void) signal(SIGALRM, newturn);
-       (void) alarm(7);
-}
-
-screen()
-{
-       draw_view();
-       draw_turn();
-       draw_stat();
-       draw_slot();
-       (void) wrefresh(scroll_w);
-}
-
-draw_view()
+lookout()
 {
        register struct ship *sp;
 {
        register struct ship *sp;
+       char buf[3];
+       register char c;
 
 
-       (void) werase(view_w);
+       sgetstr("What ship? ", buf, sizeof buf);
        foreachship(sp) {
        foreachship(sp) {
-               if (sp->file->dir
-                   && sp->file->row > viewrow
-                   && sp->file->row < viewrow + VIEW_Y
-                   && sp->file->col > viewcol
-                   && sp->file->col < viewcol + VIEW_X) {
-                       (void) wmove(view_w, sp->file->row - viewrow,
-                               sp->file->col - viewcol);
-                       (void) waddch(view_w, colours(sp));
-                       (void) wmove(view_w,
-                               sternrow(sp) - viewrow,
-                               sterncol(sp) - viewcol);
-                       (void) waddch(view_w, sterncolour(sp));
+               c = *countryname[sp->nationality];
+               if ((c == *buf || tolower(c) == *buf || colours(sp) == *buf)
+                   && (sp->file->stern == buf[1] || sterncolour(sp) == buf[1]
+                       || buf[1] == '?')) {
+                       eyeball(sp);
                }
        }
                }
        }
-       (void) wrefresh(view_w);
-}
-
-draw_turn()
-{
-       (void) wmove(turn_w, 0, 0);
-       (void) wprintw(turn_w, "Turn %d", turn);
-       (void) wrefresh(turn_w);
-}
-
-draw_stat()
-{
-       (void) wmove(stat_w, STAT_1, 0);
-       (void) wprintw(stat_w, "Points  %3d\n", mf->points);
-       (void) wprintw(stat_w, "Fouls    %2d\n", fouled(ms));
-       (void) wprintw(stat_w, "Grapples %2d\n", grappled(ms));
-
-       (void) wmove(stat_w, STAT_2, 0);
-       (void) wprintw(stat_w, "    0 %c(%c)\n",
-               maxmove(ms, winddir + 3, -1) + '0',
-               maxmove(ms, winddir + 3, 1) + '0');
-       (void) waddstr(stat_w, "   \\|/\n");
-       (void) wprintw(stat_w, "   -^-%c(%c)\n",
-               maxmove(ms, winddir + 2, -1) + '0',
-               maxmove(ms, winddir + 2, 1) + '0');
-       (void) waddstr(stat_w, "   /|\\\n");
-       (void) wprintw(stat_w, "    | %c(%c)\n",
-               maxmove(ms, winddir + 1, -1) + '0',
-               maxmove(ms, winddir + 1, 1) + '0');
-       (void) wprintw(stat_w, "   %c(%c)\n",
-               maxmove(ms, winddir, -1) + '0',
-               maxmove(ms, winddir, 1) + '0');
-
-       (void) wmove(stat_w, STAT_3, 0);
-       (void) wprintw(stat_w, "Load  %c%c %c%c\n",
-               loadname[mf->loadL], readyname(mf->readyL),
-               loadname[mf->loadR], readyname(mf->readyR));
-       (void) wprintw(stat_w, "Hull %2d\n", mc->hull);
-       (void) wprintw(stat_w, "Crew %2d %2d %2d\n",
-               mc->crew1, mc->crew2, mc->crew3);
-       (void) wprintw(stat_w, "Guns %2d %2d\n", mc->gunL, mc->gunR);
-       (void) wprintw(stat_w, "Carr %2d %2d\n", mc->carR, mc->carL);
-       (void) wprintw(stat_w, "Rigg %d %d %d ", mc->rig1, mc->rig2, mc->rig3);
-       if (mc->rig4 < 0)
-               (void) waddch(stat_w, '-');
-       else
-               (void) wprintw(stat_w, "%d", mc->rig4);
-       (void) wrefresh(stat_w);
 }
 
 }
 
-draw_slot()
+char *
+saywhat(sp, flag)
+register struct ship *sp;
+char flag;
 {
 {
-       if (!boarding(ms, 0)) {
-               (void) mvwaddstr(slot_w, 0, 0, "   ");
-               (void) mvwaddstr(slot_w, 1, 0, "   ");
-       } else
-               (void) mvwaddstr(slot_w, 1, 0, "OBP");
-       if (!boarding(ms, 1)) {
-               (void) mvwaddstr(slot_w, 2, 0, "   ");
-               (void) mvwaddstr(slot_w, 3, 0, "   ");
-       } else
-               (void) mvwaddstr(slot_w, 3, 0, "DBP");
-
-       (void) wmove(slot_w, SLOT_Y-4, 0);
-       if (mf->RH)
-               (void) wprintw(slot_w, "%dRH", mf->RH);
-       else
-               (void) waddstr(slot_w, "   ");
-       (void) wmove(slot_w, SLOT_Y-3, 0);
-       if (mf->RG)
-               (void) wprintw(slot_w, "%dRG", mf->RG);
+       if (sp->file->captain[0])
+               return sp->file->captain;
+       else if (sp->file->struck)
+               return "(struck)";
+       else if (sp->file->captured != 0)
+               return "(captured)";
+       else if (flag)
+               return "(available)";
        else
        else
-               (void) waddstr(slot_w, "   ");
-       (void) wmove(slot_w, SLOT_Y-2, 0);
-       if (mf->RR)
-               (void) wprintw(slot_w, "%dRR", mf->RR);
-       else
-               (void) waddstr(slot_w, "   ");
-
-#define Y      (SLOT_Y/2)
-       (void) wmove(slot_w, 7, 1);
-       (void) wprintw(slot_w,"%d", windspeed);
-       (void) mvwaddch(slot_w, Y, 0, ' ');
-       (void) mvwaddch(slot_w, Y, 2, ' ');
-       (void) mvwaddch(slot_w, Y-1, 0, ' ');
-       (void) mvwaddch(slot_w, Y-1, 1, ' ');
-       (void) mvwaddch(slot_w, Y-1, 2, ' ');
-       (void) mvwaddch(slot_w, Y+1, 0, ' ');
-       (void) mvwaddch(slot_w, Y+1, 1, ' ');
-       (void) mvwaddch(slot_w, Y+1, 2, ' ');
-       (void) wmove(slot_w, Y - dr[winddir], 1 - dc[winddir]);
-       switch (winddir) {
-       case 1:
-       case 5:
-               (void) waddch(slot_w, '|');
-               break;
-       case 2:
-       case 6:
-               (void) waddch(slot_w, '/');
-               break;
-       case 3:
-       case 7:
-               (void) waddch(slot_w, '-');
-               break;
-       case 4:
-       case 8:
-               (void) waddch(slot_w, '\\');
-               break;
-       }
-       (void) mvwaddch(slot_w, Y + dr[winddir], 1 + dc[winddir], '+');
-       (void) wrefresh(slot_w);
+               return "(computer)";
 }
 
 }
 
-board()
+eyeball(ship)
+register struct ship *ship;
 {
 {
-       register int n;
-
-       (void) clear();
-       (void) werase(view_w);
-       (void) werase(slot_w);
-       (void) werase(scroll_w);
-       (void) werase(stat_w);
-       (void) werase(turn_w);
-
-       sc_line = 0;
-
-       (void) move(BOX_T, BOX_L);
-       for (n = 0; n < BOX_X; n++)
-               (void) addch('-');
-       (void) move(BOX_B, BOX_L);
-       for (n = 0; n < BOX_X; n++)
-               (void) addch('-');
-       for (n = BOX_T+1; n < BOX_B; n++) {
-               (void) mvaddch(n, BOX_L, '|');
-               (void) mvaddch(n, BOX_R, '|');
+       int i;
+
+       if (ship->file->dir != 0) {
+               Signal("Sail ho! (range %d, %s)",
+                       (struct ship *)0, range(ms, ship), saywhat(ship, 0));
+               i = portside(ms, ship, 1) - mf->dir;
+               if (i <= 0)
+                       i += 8;
+               Signal("%s (%c%c) %s %s %s.",
+                       ship, countryname[ship->nationality],
+                       classname[ship->specs->class], directionname[i]);
        }
        }
-       (void) mvaddch(BOX_T, BOX_L, '+');
-       (void) mvaddch(BOX_T, BOX_R, '+');
-       (void) mvaddch(BOX_B, BOX_L, '+');
-       (void) mvaddch(BOX_B, BOX_R, '+');
-       (void) refresh();
-
-#define WSaIM "Wooden Ships & Iron Men"
-       (void) wmove(view_w, 2, (VIEW_X - sizeof WSaIM - 1) / 2);
-       (void) waddstr(view_w, WSaIM);
-       (void) wmove(view_w, 4, (VIEW_X - strlen(cc->name)) / 2);
-       (void) waddstr(view_w, cc->name);
-       (void) wrefresh(view_w);
-
-       (void) move(LINE_T, LINE_L);
-       (void) printw("Class %d %s (%d guns) '%s' (%c%c)",
-               mc->class,
-               classname[mc->class],
-               mc->guns,
-               ms->shipname,
-               colours(ms),
-               sterncolour(ms));
-       (void) refresh();
-}
-
-initscreen()
-{
-       (void) initscr();
-       view_w = newwin(VIEW_Y, VIEW_X, VIEW_T, VIEW_L);
-       slot_w = newwin(SLOT_Y, SLOT_X, SLOT_T, SLOT_L);
-       scroll_w = newwin(SCROLL_Y, SCROLL_X, SCROLL_T, SCROLL_L);
-       stat_w = newwin(STAT_Y, STAT_X, STAT_T, STAT_L);
-       turn_w = newwin(TURN_Y, TURN_X, TURN_T, TURN_L);
-       done_curses++;
-       noecho();
-       crmode();
-}
-
-centerview()
-{
-       viewrow = mf->row - VIEW_Y / 2;
-       viewcol = mf->col - VIEW_X / 2;
-}
-
-upview()
-{
-       viewrow -= VIEW_Y / 3;
-}
-
-downview()
-{
-       viewrow += VIEW_Y / 3;
-}
-
-leftview()
-{
-       viewcol -= VIEW_X / 5;
-}
-
-rightview()
-{
-       viewcol += VIEW_X / 5;
-}
-
-adjustview()
-{
-       if (dont_adjust)
-               return;                 /* don't adjust if out of sight */
-       if (mf->row < viewrow + VIEW_Y/4)
-               viewrow = mf->row - (VIEW_Y - VIEW_Y/4);
-       else if (mf->row > viewrow + (VIEW_Y - VIEW_Y/4))
-               viewrow = mf->row - VIEW_Y/4;
-       if (mf->col < viewcol + VIEW_X/8)
-               viewcol = mf->col - (VIEW_X - VIEW_X/8);
-       else if (mf->col > viewcol + (VIEW_X - VIEW_X/8))
-               viewcol = mf->col - VIEW_X/8;
 }
 }
index fbafca2..5215b51 100644 (file)
@@ -1,5 +1,5 @@
 #ifndef lint
 #ifndef lint
-static char *sccsid = "@(#)sync.c      1.4 83/10/14";
+static char *sccsid = "@(#)sync.c      1.5 83/10/28";
 #endif
 
 #include "externs.h"
 #endif
 
 #include "externs.h"
@@ -168,8 +168,7 @@ int a, b, c, d;
                }
        case W_SIGNAL:
                if (isplayer) {
                }
        case W_SIGNAL:
                if (isplayer) {
-                       (void) putchar('\7');
-                       Signal("%s (%c%c): %s", ship, a);
+                       Signal("\7%s (%c%c): %s", ship, a);
                }
                break;
        case W_CREW: {
                }
                break;
        case W_CREW: {