(linenum→info "unix/slp.c:2238")

bsd-games/2.17/mille/print.c

    1: /*      $NetBSD: print.c,v 1.11 2003/08/07 09:37:26 agc Exp $        */
    2: 
    3: /*
    4:  * Copyright (c) 1982, 1993
    5:  *      The Regents of the University of California.  All rights reserved.
    6:  *
    7:  * Redistribution and use in source and binary forms, with or without
    8:  * modification, are permitted provided that the following conditions
    9:  * are met:
   10:  * 1. Redistributions of source code must retain the above copyright
   11:  *    notice, this list of conditions and the following disclaimer.
   12:  * 2. Redistributions in binary form must reproduce the above copyright
   13:  *    notice, this list of conditions and the following disclaimer in the
   14:  *    documentation and/or other materials provided with the distribution.
   15:  * 3. Neither the name of the University nor the names of its contributors
   16:  *    may be used to endorse or promote products derived from this software
   17:  *    without specific prior written permission.
   18:  *
   19:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   20:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   21:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   22:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   23:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   24:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   25:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   26:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   27:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   28:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   29:  * SUCH DAMAGE.
   30:  */
   31: 
   32: #include <sys/cdefs.h>
   33: #ifndef lint
   34: #if 0
   35: static char sccsid[] = "@(#)print.c     8.1 (Berkeley) 5/31/93";
   36: #else
   37: __RCSID("$NetBSD: print.c,v 1.11 2003/08/07 09:37:26 agc Exp $");
   38: #endif
   39: #endif /* not lint */
   40: 
   41: # include       "mille.h"
   42: 
   43: /*
   44:  * @(#)print.c  1.1 (Berkeley) 4/1/82
   45:  */
   46: 
   47: # define        COMP_STRT      20
   48: # define        CARD_STRT      2
   49: 
   50: void
   51: prboard()
   52: {
   53:         PLAY   *pp;
   54:         int    i, j, k, temp;
   55: 
   56:         for (k = 0; k < 2; k++) {
   57:                 pp = &Player[k];
   58:                 temp = k * COMP_STRT + CARD_STRT;
   59:                 for (i = 0; i < NUM_SAFE; i++)
   60:                         if (pp->safety[i] == S_PLAYED && !pp->sh_safety[i]) {
   61:                                 mvaddstr(i, temp, C_name[i + S_CONV]);
   62:                                 if (pp->coups[i])
   63:                                         mvaddch(i, temp - CARD_STRT, '*');
   64:                                 pp->sh_safety[i] = TRUE;
   65:                         }
   66:                 show_card(14, temp, pp->battle, &pp->sh_battle);
   67:                 show_card(16, temp, pp->speed, &pp->sh_speed);
   68:                 for (i = C_25; i <= C_200; i++) {
   69:                         const char   *name;
   70:                         int  end;
   71: 
   72:                         if (pp->nummiles[i] == pp->sh_nummiles[i])
   73:                                 continue;
   74: 
   75:                         name = C_name[i];
   76:                         temp = k * 40;
   77:                         end = pp->nummiles[i];
   78:                         for (j = pp->sh_nummiles[i]; j < end; j++)
   79:                                 mvwaddstr(Miles, i + 1, (j << 2) + temp, name);
   80:                         pp->sh_nummiles[i] = end;
   81:                 }
   82:         }
   83:         prscore(TRUE);
   84:         temp = CARD_STRT;
   85:         pp = &Player[PLAYER];
   86:         for (i = 0; i < HAND_SZ; i++)
   87:                 show_card(i + 6, temp, pp->hand[i], &pp->sh_hand[i]);
   88:         mvprintw(6, COMP_STRT + CARD_STRT, "%2ld", (long)(Topcard - Deck));
   89:         show_card(8, COMP_STRT + CARD_STRT, Discard, &Sh_discard);
   90:         if (End == 1000) {
   91:                 move(EXT_Y, EXT_X);
   92:                 standout();
   93:                 addstr("Extension");
   94:                 standend();
   95:         }
   96:         wrefresh(Board);
   97:         wrefresh(Miles);
   98:         wrefresh(Score);
   99: }
  100: 
  101: /*
  102:  * show_card:
  103:  *      Show the given card if it is different from the last one shown
  104:  */
  105: void
  106: show_card(y, x, c, lc)
  107:         int    y, x;
  108:         CARD   c, *lc;
  109: {
  110:         if (c == *lc)
  111:                 return;
  112: 
  113:         mvprintw(y, x, C_fmt, C_name[c]);
  114:         *lc = c;
  115: }
  116: 
  117: static char     Score_fmt[] = "%4d";
  118: 
  119: void
  120: prscore(for_real)
  121: #ifdef EXTRAP
  122:         bool   for_real;
  123: #else
  124:         bool   for_real __attribute__((__unused__));
  125: #endif
  126: {
  127:         PLAY   *pp;
  128:         int    x;
  129: 
  130:         stdscr = Score;
  131:         for (pp = Player; pp < &Player[2]; pp++) {
  132:                 x = (pp - Player) * 6 + 21;
  133:                 show_score(1, x, pp->mileage, &pp->sh_mileage);
  134:                 if (pp->safescore != pp->sh_safescore) {
  135:                         mvprintw(2, x, Score_fmt, pp->safescore);
  136:                         if (pp->safescore == 400)
  137:                                 mvaddstr(3, x + 1, "300");
  138:                         else
  139:                                 mvaddstr(3, x + 1, "  0");
  140:                         mvprintw(4, x, Score_fmt, pp->coupscore);
  141:                         pp->sh_safescore = pp->safescore;
  142:                 }
  143:                 if (Window == W_FULL || Finished) {
  144: #ifdef EXTRAP
  145:                         if (for_real)
  146:                                 finalscore(pp);
  147:                         else
  148:                                 extrapolate(pp);
  149: #else
  150:                         finalscore(pp);
  151: #endif
  152:                         show_score(11, x, pp->hand_tot, &pp->sh_hand_tot);
  153:                         show_score(13, x, pp->total, &pp->sh_total);
  154:                         show_score(14, x, pp->games, &pp->sh_games);
  155:                 }
  156:                 else {
  157:                         show_score(6, x, pp->hand_tot, &pp->sh_hand_tot);
  158:                         show_score(8, x, pp->total, &pp->sh_total);
  159:                         show_score(9, x, pp->games, &pp->sh_games);
  160:                 }
  161:         }
  162:         stdscr = Board;
  163: }
  164: 
  165: /*
  166:  * show_score:
  167:  *      Show a score value if it is different from the last time we
  168:  *      showed it.
  169:  */
  170: void
  171: show_score(y, x, s, ls)
  172:         int    y, x;
  173:         int    s, *ls;
  174: {
  175:         if (s == *ls)
  176:                 return;
  177: 
  178:         mvprintw(y, x, Score_fmt, s);
  179:         *ls = s;
  180: }
Syntax (Markdown)