# 2.11BSD#431 - /usr/src/games/sail/pl_main.c

##### Functions

    initialize        X
    pl_main           X

       1: /*
       2:  * Copyright (c) 1983 Regents of the University of California.
       3:  * All rights reserved.  The Berkeley software License Agreement
       4:  * specifies the terms and conditions for redistribution.
       5:  */
       6:
       7: #ifndef lint
       8: static char sccsid[] = "@(#)pl_main.c	5.1 (Berkeley) 5/29/85";
       9: #endif not lint
      10:
      11: #include "player.h"
      12: #include <sys/types.h>
      13: #include <sys/wait.h>
      14:
      15: int choke(), child();
      16:
      17: /*ARGSUSED*/
      18: pl_main()
      19: {
      20:
      21:     if (!SCREENTEST()) {
      22:         printf("Can't sail on this terminal.\n");
      23:         exit(1);
      24:     }
      25:     initialize();
      26:     Signal("Aye aye, Sir", (struct ship *)0);
      27:     play();
      28:     return 0;           /* for lint,  play() never returns */
      29: }
      30:
      31: initialize()
      32: {
      33:     register struct File *fp;
      34:     register struct ship *sp;
      35:     char captain[80];
      36:     char message[60];
      37:     int load;
      38:     register int n;
      39:     char *nameptr;
      40:     int nat[NNATION];
      41:
      42:     if (game < 0) {
      43:         (void) puts("Choose a scenario:\n");
      44:         (void) puts("\n\tNUMBER\tSHIPS\tIN PLAY\tTITLE");
      45:         for (n = 0; n < NSCENE; n++) {
      46:             /* ( */
      47:             printf("\t%d):\t%d\t%s\t%s\n", n, scene[n].vessels,
      48:                 sync_exists(n) ? "YES" : "no",
      49:                 scene[n].name);
      50:         }
      51: reprint:
      52:         printf("\nScenario number? ");
      53:         (void) fflush(stdout);
      54:         (void) scanf("%d", &game);
      55:         while (getchar() != '\n')
      56:             ;
      57:     }
      58:     if (game < 0 || game >= NSCENE) {
      59:         (void) puts("Very funny.");
      60:         exit(1);
      61:     }
      62:     cc = &scene[game];
      63:     ls = SHIP(cc->vessels);
      64:
      65:     for (n = 0; n < NNATION; n++)
      66:         nat[n] = 0;
      67:     foreachship(sp) {
      68:         if (sp->file == NULL &&
      69:             (sp->file = (struct File *)calloc(1, sizeof (struct File))) == NULL) {
      70:             (void) puts("OUT OF MEMORY");
      71:             exit(1);
      72:         }
      73:         sp->file->index = sp - SHIP(0);
      74:         sp->file->stern = nat[sp->nationality]++;
      75:         sp->file->dir = sp->shipdir;
      76:         sp->file->row = sp->shiprow;
      77:         sp->file->col = sp->shipcol;
      78:     }
      79:     windspeed = cc->windspeed;
      80:     winddir = cc->winddir;
      81:
      82:     (void) signal(SIGHUP, choke);
      83:     (void) signal(SIGINT, choke);
      84:
      85:     hasdriver = sync_exists(game);
      86:     if (sync_open() < 0) {
      87:         perror("sail: syncfile");
      88:         exit(1);
      89:     }
      90:
      91:     if (hasdriver) {
      92:         (void) puts("Synchronizing with the other players...");
      93:         (void) fflush(stdout);
      94:         if (Sync() < 0)
      95:             leave(LEAVE_SYNC);
      96:     }
      97:     for (;;) {
      98:         foreachship(sp)
      99:             if (sp->file->captain[0] == 0 && !sp->file->struck
     100:                 && sp->file->captured == 0)
     101:                 break;
     102:         if (sp >= ls) {
     103:             (void) puts("All ships taken in that scenario.");
     104:             foreachship(sp)
     105:                 free((char *)sp->file);
     106:             sync_close(0);
     107:             people = 0;
     108:             goto reprint;
     109:         }
     110:         if (randomize) {
     111:             player = sp - SHIP(0);
     112:         } else {
     113:             printf("%s\n\n", cc->name);
     114:             foreachship(sp)
     115:                 printf("  %2d:  %-10s %-15s  (%-2d pts)   %s\n",
     116:                     sp->file->index,
     117:                     countryname[sp->nationality],
     118:                     sp->shipname,
     119:                     sp->specs->pts,
     120:                     saywhat(sp, 1));
     121:             printf("\nWhich ship (0-%d)? ", cc->vessels-1);
     122:             (void) fflush(stdout);
     123:             if (scanf("%d", &player) != 1 || player < 0
     124:                 || player >= cc->vessels) {
     125:                 while (getchar() != '\n')
     126:                     ;
     127:                 (void) puts("Say what?");
     128:                 player = -1;
     129:             } else
     130:                 while (getchar() != '\n')
     131:                     ;
     132:         }
     133:         if (player < 0)
     134:             continue;
     135:         if (Sync() < 0)
     136:             leave(LEAVE_SYNC);
     137:         fp = SHIP(player)->file;
     138:         if (fp->captain[0] || fp->struck || fp->captured != 0)
     139:             (void) puts("That ship is taken.");
     140:         else
     141:             break;
     142:     }
     143:
     144:     ms = SHIP(player);
     145:     mf = ms->file;
     146:     mc = ms->specs;
     147:
     148:     Write(W_BEGIN, ms, 0, 0, 0, 0, 0);
     149:     if (Sync() < 0)
     150:         leave(LEAVE_SYNC);
     151:
     152:     (void) signal(SIGCHLD, child);
     153:     if (!hasdriver)
     154:         switch (fork()) {
     155:         case 0:
     156:             longjmp(restart, MODE_DRIVER);
     157:             /*NOTREACHED*/
     158:         case -1:
     159:             perror("fork");
     160:             leave(LEAVE_FORK);
     161:             break;
     162:         default:
     163:             hasdriver++;
     164:         }
     165:
     166:     printf("Your ship is the %s, a %d gun %s (%s crew).\n",
     167:         ms->shipname, mc->guns, classname[mc->class],
     168:         qualname[mc->qual]);
     169:     if ((nameptr = (char *) getenv("SAILNAME")) && *nameptr)
     170:         (void) strncpy(captain, nameptr, sizeof captain);
     171:     else {
     172:         (void) printf("Your name, Captain? ");
     173:         (void) fflush(stdout);
     174:         (void) gets(captain);
     175:         if (!*captain)
     176:             (void) strcpy(captain, "no name");
     177:     }
     178:     captain[sizeof captain - 1] = '\0';
     179:     Write(W_CAPTAIN, ms, 1, (int)captain, 0, 0, 0);
     180:     for (n = 0; n < 2; n++) {
     181:         char buf[10];
     182:
     183:         printf("\nInitial broadside %s (grape, chain, round, double): ",
     184:             n ? "right" : "left");
     185:         (void) fflush(stdout);
     186:         (void) scanf("%s", buf);
     187:         switch (*buf) {
     188:         case 'g':
     189:             load = L_GRAPE;
     190:             break;
     191:         case 'c':
     192:             load = L_CHAIN;
     193:             break;
     194:         case 'r':
     195:             load = L_ROUND;
     196:             break;
     197:         case 'd':
     198:             load = L_DOUBLE;
     199:             break;
     200:         default:
     201:             load = L_ROUND;
     202:         }
     203:         if (n) {
     204:             mf->loadR = load;
     205:             mf->readyR = R_LOADED|R_INITIAL;
     206:         } else {
     207:             mf->loadL = load;
     208:             mf->readyL = R_LOADED|R_INITIAL;
     209:         }
     210:     }
     211:
     212:     initscreen();
     213:     draw_board();
     214:     (void) sprintf(message, "Captain %s assuming command", captain);
     215:     Write(W_SIGNAL, ms, 1, (int)message, 0, 0, 0);
     216:     newturn();
     217: }

#### Defined functions

initialize defined in line 31; used 1 times

- in line 25

pl_main defined in line 18; used 1 times

- in /usr/src/games/sail/main.c line 71

#### Defined variables

sccsid defined in line 8; never used

Last modified: 1985-05-30 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 1685 |