121514Smckusick /* 221514Smckusick * Copyright (c) 1980 Regents of the University of California. 333705Sbostic * All rights reserved. 433705Sbostic * 542575Sbostic * %sccs.include.redist.c% 621514Smckusick */ 712571Sarnold 821514Smckusick #ifndef lint 921514Smckusick char copyright[] = 1021514Smckusick "@(#) Copyright (c) 1980 Regents of the University of California.\n\ 1121514Smckusick All rights reserved.\n"; 1233705Sbostic #endif /* not lint */ 1321514Smckusick 1421514Smckusick #ifndef lint 15*46743Sbostic static char sccsid[] = "@(#)crib.c 5.6 (Berkeley) 02/28/91"; 1633705Sbostic #endif /* not lint */ 1721514Smckusick 1841186Sbostic # include <sys/signal.h> 197871Sarnold # include <curses.h> 207871Sarnold # include "deck.h" 217871Sarnold # include "cribbage.h" 227871Sarnold # include "cribcur.h" 2341186Sbostic # include "pathnames.h" 247706Sarnold 257871Sarnold main(argc, argv) 267871Sarnold int argc; 277871Sarnold char *argv[]; 287706Sarnold { 2941186Sbostic extern char *optarg; 3041186Sbostic extern int optind; 317706Sarnold register char *p; 3241186Sbostic int ch; 337706Sarnold BOOLEAN playing; 347706Sarnold char *s; /* for reading arguments */ 357871Sarnold FILE *f; 367871Sarnold FILE *fopen(); 3741186Sbostic char *getline(), *getlogin(); 3841186Sbostic void rint(); 397706Sarnold 4041186Sbostic while ((ch = getopt(argc, argv, "eqr")) != EOF) 4141186Sbostic switch(ch) { 4241186Sbostic case 'e': 437706Sarnold explain = TRUE; 447706Sarnold break; 4541186Sbostic case 'q': 467706Sarnold quiet = TRUE; 477706Sarnold break; 4841186Sbostic case 'r': 497706Sarnold rflag = TRUE; 507706Sarnold break; 5141186Sbostic case '?': 5241186Sbostic default: 5341186Sbostic (void) fprintf(stderr, "usage: cribbage [-eqr]\n"); 5441186Sbostic exit(1); 557706Sarnold } 567871Sarnold 577871Sarnold initscr(); 5841186Sbostic signal(SIGINT, rint); 597871Sarnold crmode(); 607871Sarnold noecho(); 6112315Sarnold Playwin = subwin(stdscr, PLAY_Y, PLAY_X, 0, 0); 6212315Sarnold Tablewin = subwin(stdscr, TABLE_Y, TABLE_X, 0, PLAY_X); 6312315Sarnold Compwin = subwin(stdscr, COMP_Y, COMP_X, 0, TABLE_X + PLAY_X); 6412315Sarnold Msgwin = subwin(stdscr, MSG_Y, MSG_X, Y_MSG_START, SCORE_X + 1); 657871Sarnold leaveok(Playwin, TRUE); 667871Sarnold leaveok(Tablewin, TRUE); 677871Sarnold leaveok(Compwin, TRUE); 6812162Sarnold clearok(stdscr, FALSE); 697871Sarnold 707871Sarnold if (!quiet) { 717871Sarnold msg("Do you need instructions for cribbage? "); 727871Sarnold if (getuchar() == 'Y') { 738071Sarnold endwin(); 7441186Sbostic clear(); 7541186Sbostic mvcur(0, COLS - 1, LINES - 1, 0); 768071Sarnold fflush(stdout); 7741186Sbostic instructions(); 788071Sarnold crmode(); 798071Sarnold noecho(); 808071Sarnold clear(); 818071Sarnold refresh(); 827871Sarnold msg("For the rules of this program, do \"man cribbage\""); 837706Sarnold } 847706Sarnold } 857706Sarnold playing = TRUE; 867871Sarnold do { 8712315Sarnold wclrtobot(Msgwin); 887871Sarnold msg(quiet ? "L or S? " : "Long (to 121) or Short (to 61)? "); 897949Sarnold if (glimit == SGAME) 907949Sarnold glimit = (getuchar() == 'L' ? LGAME : SGAME); 917949Sarnold else 927949Sarnold glimit = (getuchar() == 'S' ? SGAME : LGAME); 937706Sarnold game(); 947871Sarnold msg("Another game? "); 957871Sarnold playing = (getuchar() == 'Y'); 967871Sarnold } while (playing); 977871Sarnold 9841186Sbostic if (f = fopen(_PATH_LOG, "a")) { 9941186Sbostic (void)fprintf(f, "%s: won %5.5d, lost %5.5d\n", 10041186Sbostic getlogin(), cgames, pgames); 10141186Sbostic (void)fclose(f); 1027706Sarnold } 1037871Sarnold bye(); 10441186Sbostic if (!f) { 10541186Sbostic (void)fprintf(stderr, "\ncribbage: can't open %s.\n", 10641186Sbostic _PATH_LOG); 10741186Sbostic exit(1); 10841186Sbostic } 10941186Sbostic exit(0); 1107706Sarnold } 1117706Sarnold 1127871Sarnold /* 1137871Sarnold * makeboard: 1147871Sarnold * Print out the initial board on the screen 1157871Sarnold */ 1167871Sarnold makeboard() 1177871Sarnold { 1187871Sarnold mvaddstr(SCORE_Y + 0, SCORE_X, "+---------------------------------------+"); 11911397Sarnold mvaddstr(SCORE_Y + 1, SCORE_X, "| Score: 0 YOU |"); 1207937Sarnold mvaddstr(SCORE_Y + 2, SCORE_X, "| *.....:.....:.....:.....:.....:..... |"); 1217937Sarnold mvaddstr(SCORE_Y + 3, SCORE_X, "| *.....:.....:.....:.....:.....:..... |"); 1227871Sarnold mvaddstr(SCORE_Y + 4, SCORE_X, "| |"); 1237937Sarnold mvaddstr(SCORE_Y + 5, SCORE_X, "| *.....:.....:.....:.....:.....:..... |"); 1247937Sarnold mvaddstr(SCORE_Y + 6, SCORE_X, "| *.....:.....:.....:.....:.....:..... |"); 12511397Sarnold mvaddstr(SCORE_Y + 7, SCORE_X, "| Score: 0 ME |"); 1267871Sarnold mvaddstr(SCORE_Y + 8, SCORE_X, "+---------------------------------------+"); 1277949Sarnold gamescore(); 1287949Sarnold } 1297949Sarnold 1307949Sarnold /* 1317949Sarnold * gamescore: 1327949Sarnold * Print out the current game score 1337949Sarnold */ 1347949Sarnold gamescore() 1357949Sarnold { 1367949Sarnold extern int Lastscore[]; 1377949Sarnold 1387948Sarnold if (pgames || cgames) { 1397948Sarnold mvprintw(SCORE_Y + 1, SCORE_X + 28, "Games: %3d", pgames); 1407948Sarnold mvprintw(SCORE_Y + 7, SCORE_X + 28, "Games: %3d", cgames); 1417948Sarnold } 1427937Sarnold Lastscore[0] = -1; 1437937Sarnold Lastscore[1] = -1; 1447871Sarnold } 1457871Sarnold 1467706Sarnold /* 1477871Sarnold * game: 1487933Sarnold * Play one game up to glimit points. Actually, we only ASK the 1497933Sarnold * player what card to turn. We do a random one, anyway. 1507706Sarnold */ 1517706Sarnold game() 1527706Sarnold { 1537871Sarnold register int i, j; 1547706Sarnold BOOLEAN flag; 1557706Sarnold BOOLEAN compcrib; 1567706Sarnold 1577949Sarnold makeboard(); 15812162Sarnold refresh(); 1597871Sarnold makedeck(deck); 1607871Sarnold shuffle(deck); 1617871Sarnold if (gamecount == 0) { 1627706Sarnold flag = TRUE; 1637871Sarnold do { 1647933Sarnold if (!rflag) { /* player cuts deck */ 1657871Sarnold msg(quiet ? "Cut for crib? " : 1667871Sarnold "Cut to see whose crib it is -- low card wins? "); 1677933Sarnold getline(); 1687706Sarnold } 1697933Sarnold i = (rand() >> 4) % CARDS; /* random cut */ 1707871Sarnold do { /* comp cuts deck */ 1717871Sarnold j = (rand() >> 4) % CARDS; 1727871Sarnold } while (j == i); 1737871Sarnold addmsg(quiet ? "You cut " : "You cut the "); 1747871Sarnold msgcard(deck[i], FALSE); 1757871Sarnold endmsg(); 1767871Sarnold addmsg(quiet ? "I cut " : "I cut the "); 1777871Sarnold msgcard(deck[j], FALSE); 1787871Sarnold endmsg(); 1797871Sarnold flag = (deck[i].rank == deck[j].rank); 1807871Sarnold if (flag) { 1817871Sarnold msg(quiet ? "We tied..." : 1827871Sarnold "We tied and have to try again..."); 1837871Sarnold shuffle(deck); 1847706Sarnold continue; 1857706Sarnold } 1867871Sarnold else 1877871Sarnold compcrib = (deck[i].rank > deck[j].rank); 1887871Sarnold } while (flag); 1897706Sarnold } 1907871Sarnold else { 1917949Sarnold werase(Tablewin); 1927949Sarnold wrefresh(Tablewin); 1937949Sarnold werase(Compwin); 1947949Sarnold wrefresh(Compwin); 19512315Sarnold msg("Loser (%s) gets first crib", (iwon ? "you" : "me")); 1967706Sarnold compcrib = !iwon; 1977706Sarnold } 1987871Sarnold 1997706Sarnold pscore = cscore = 0; 2007706Sarnold flag = TRUE; 2017871Sarnold do { 2027871Sarnold shuffle(deck); 2037871Sarnold flag = !playhand(compcrib); 2047706Sarnold compcrib = !compcrib; 2057871Sarnold } while (flag); 2067706Sarnold ++gamecount; 2077871Sarnold if (cscore < pscore) { 2087871Sarnold if (glimit - cscore > 60) { 2097871Sarnold msg("YOU DOUBLE SKUNKED ME!"); 2107871Sarnold pgames += 4; 2117706Sarnold } 2127871Sarnold else if (glimit - cscore > 30) { 2137871Sarnold msg("YOU SKUNKED ME!"); 2147871Sarnold pgames += 2; 2157871Sarnold } 2167871Sarnold else { 2177871Sarnold msg("YOU WON!"); 2187706Sarnold ++pgames; 2197706Sarnold } 2207706Sarnold iwon = FALSE; 2217706Sarnold } 2227871Sarnold else { 2237871Sarnold if (glimit - pscore > 60) { 2247871Sarnold msg("I DOUBLE SKUNKED YOU!"); 2257871Sarnold cgames += 4; 2267706Sarnold } 2277871Sarnold else if (glimit - pscore > 30) { 2287871Sarnold msg("I SKUNKED YOU!"); 2297871Sarnold cgames += 2; 2307871Sarnold } 2317871Sarnold else { 2327871Sarnold msg("I WON!"); 2337706Sarnold ++cgames; 2347706Sarnold } 2357706Sarnold iwon = TRUE; 2367706Sarnold } 2377949Sarnold gamescore(); 2387706Sarnold } 2397706Sarnold 2407706Sarnold /* 2417871Sarnold * playhand: 2427871Sarnold * Do up one hand of the game 2437706Sarnold */ 2447871Sarnold playhand(mycrib) 2457871Sarnold BOOLEAN mycrib; 2467871Sarnold { 2477871Sarnold register int deckpos; 2487871Sarnold extern char Msgbuf[]; 2497706Sarnold 2507871Sarnold werase(Compwin); 2517706Sarnold 2527706Sarnold knownum = 0; 2537871Sarnold deckpos = deal(mycrib); 2547871Sarnold sorthand(chand, FULLHAND); 2557871Sarnold sorthand(phand, FULLHAND); 2567871Sarnold makeknown(chand, FULLHAND); 2578073Sarnold prhand(phand, FULLHAND, Playwin, FALSE); 2587871Sarnold discard(mycrib); 2597871Sarnold if (cut(mycrib, deckpos)) 2607871Sarnold return TRUE; 2617871Sarnold if (peg(mycrib)) 2627871Sarnold return TRUE; 2637871Sarnold werase(Tablewin); 2647871Sarnold wrefresh(Tablewin); 2657871Sarnold if (score(mycrib)) 2667871Sarnold return TRUE; 2677871Sarnold return FALSE; 2687706Sarnold } 2697706Sarnold 2707706Sarnold 2717706Sarnold 2727706Sarnold /* 2737706Sarnold * deal cards to both players from deck 2747706Sarnold */ 2757706Sarnold 2767706Sarnold deal( mycrib ) 2777706Sarnold { 2787706Sarnold register int i, j; 2797706Sarnold 2807706Sarnold j = 0; 2817706Sarnold for( i = 0; i < FULLHAND; i++ ) { 2827706Sarnold if( mycrib ) { 2837706Sarnold phand[i] = deck[j++]; 2847706Sarnold chand[i] = deck[j++]; 2857706Sarnold } 2867706Sarnold else { 2877706Sarnold chand[i] = deck[j++]; 2887706Sarnold phand[i] = deck[j++]; 2897706Sarnold } 2907706Sarnold } 2917706Sarnold return( j ); 2927706Sarnold } 2937706Sarnold 2947706Sarnold /* 2957871Sarnold * discard: 2967871Sarnold * Handle players discarding into the crib... 2977871Sarnold * Note: we call cdiscard() after prining first message so player doesn't wait 2987706Sarnold */ 2997871Sarnold discard(mycrib) 3007871Sarnold BOOLEAN mycrib; 3017706Sarnold { 3027871Sarnold register char *prompt; 3037871Sarnold CARD crd; 3047706Sarnold 3057946Sarnold prcrib(mycrib, TRUE); 3067871Sarnold prompt = (quiet ? "Discard --> " : "Discard a card --> "); 3077871Sarnold cdiscard(mycrib); /* puts best discard at end */ 3087871Sarnold crd = phand[infrom(phand, FULLHAND, prompt)]; 309*46743Sbostic cremove(crd, phand, FULLHAND); 3108073Sarnold prhand(phand, FULLHAND, Playwin, FALSE); 3117706Sarnold crib[0] = crd; 3127871Sarnold /* next four lines same as last four except for cdiscard() */ 3137871Sarnold crd = phand[infrom(phand, FULLHAND - 1, prompt)]; 314*46743Sbostic cremove(crd, phand, FULLHAND - 1); 3158073Sarnold prhand(phand, FULLHAND, Playwin, FALSE); 3167706Sarnold crib[1] = crd; 3177706Sarnold crib[2] = chand[4]; 3187706Sarnold crib[3] = chand[5]; 3197871Sarnold chand[4].rank = chand[4].suit = chand[5].rank = chand[5].suit = EMPTY; 3207706Sarnold } 3217706Sarnold 3227706Sarnold /* 3237871Sarnold * cut: 3247933Sarnold * Cut the deck and set turnover. Actually, we only ASK the 3257933Sarnold * player what card to turn. We do a random one, anyway. 3267706Sarnold */ 3277871Sarnold cut(mycrib, pos) 3287871Sarnold BOOLEAN mycrib; 3297871Sarnold int pos; 3307706Sarnold { 3317871Sarnold register int i, cardx; 3327706Sarnold BOOLEAN win = FALSE; 3337706Sarnold 3347871Sarnold if (mycrib) { 3357933Sarnold if (!rflag) { /* random cut */ 3367871Sarnold msg(quiet ? "Cut the deck? " : 3377871Sarnold "How many cards down do you wish to cut the deck? "); 3387933Sarnold getline(); 3397706Sarnold } 3407933Sarnold i = (rand() >> 4) % (CARDS - pos); 3417706Sarnold turnover = deck[i + pos]; 3427871Sarnold addmsg(quiet ? "You cut " : "You cut the "); 3437871Sarnold msgcard(turnover, FALSE); 3447871Sarnold endmsg(); 3457871Sarnold if (turnover.rank == JACK) { 34612315Sarnold msg("I get two for his heels"); 3477871Sarnold win = chkscr(&cscore,2 ); 3487706Sarnold } 3497706Sarnold } 3507871Sarnold else { 3517871Sarnold i = (rand() >> 4) % (CARDS - pos) + pos; 3527706Sarnold turnover = deck[i]; 3537871Sarnold addmsg(quiet ? "I cut " : "I cut the "); 3547871Sarnold msgcard(turnover, FALSE); 3557871Sarnold endmsg(); 3567871Sarnold if (turnover.rank == JACK) { 35712315Sarnold msg("You get two for his heels"); 3587871Sarnold win = chkscr(&pscore, 2); 3597706Sarnold } 3607706Sarnold } 3617871Sarnold makeknown(&turnover, 1); 3627946Sarnold prcrib(mycrib, FALSE); 3637871Sarnold return win; 3647706Sarnold } 3657706Sarnold 3667706Sarnold /* 3677946Sarnold * prcrib: 3687946Sarnold * Print out the turnover card with crib indicator 3697946Sarnold */ 3707946Sarnold prcrib(mycrib, blank) 3717946Sarnold BOOLEAN mycrib, blank; 3727946Sarnold { 37312162Sarnold register int y, cardx; 3747946Sarnold 3757946Sarnold if (mycrib) 3767946Sarnold cardx = CRIB_X; 3777946Sarnold else 37812315Sarnold cardx = 0; 3797946Sarnold 3807946Sarnold mvaddstr(CRIB_Y, cardx + 1, "CRIB"); 3817946Sarnold prcard(stdscr, CRIB_Y + 1, cardx, turnover, blank); 38212162Sarnold 38312162Sarnold if (mycrib) 38412315Sarnold cardx = 0; 38512162Sarnold else 38612162Sarnold cardx = CRIB_X; 38712162Sarnold 38812162Sarnold for (y = CRIB_Y; y <= CRIB_Y + 5; y++) 38912162Sarnold mvaddstr(y, cardx, " "); 3907946Sarnold } 3917946Sarnold 3927946Sarnold /* 3937871Sarnold * peg: 3947871Sarnold * Handle all the pegging... 3957706Sarnold */ 3967706Sarnold 3977871Sarnold static CARD Table[14]; 3987706Sarnold 3997871Sarnold static int Tcnt; 4007871Sarnold 4017871Sarnold peg(mycrib) 4027871Sarnold BOOLEAN mycrib; 4037706Sarnold { 4047871Sarnold static CARD ch[CINHAND], ph[CINHAND]; 4057706Sarnold CARD crd; 4067871Sarnold register int i, j, k; 4078072Sarnold register int l; 4088072Sarnold register int cnum, pnum, sum; 4098072Sarnold register BOOLEAN myturn, mego, ugo, last, played; 4107706Sarnold 4117706Sarnold cnum = pnum = CINHAND; 4127871Sarnold for (i = 0; i < CINHAND; i++) { /* make copies of hands */ 4137706Sarnold ch[i] = chand[i]; 4147706Sarnold ph[i] = phand[i]; 4157706Sarnold } 4167871Sarnold Tcnt = 0; /* index to table of cards played */ 4177706Sarnold sum = 0; /* sum of cards played */ 4187706Sarnold mego = ugo = FALSE; 4197706Sarnold myturn = !mycrib; 4207871Sarnold for (;;) { 4217706Sarnold last = TRUE; /* enable last flag */ 4228073Sarnold prhand(ph, pnum, Playwin, FALSE); 4238073Sarnold prhand(ch, cnum, Compwin, TRUE); 4247871Sarnold prtable(sum); 4257871Sarnold if (myturn) { /* my tyrn to play */ 4267871Sarnold if (!anymove(ch, cnum, sum)) { /* if no card to play */ 4277871Sarnold if (!mego && cnum) { /* go for comp? */ 42812315Sarnold msg("GO"); 4297706Sarnold mego = TRUE; 4307706Sarnold } 4317871Sarnold if (anymove(ph, pnum, sum)) /* can player move? */ 4327706Sarnold myturn = !myturn; 4337871Sarnold else { /* give him his point */ 43412315Sarnold msg(quiet ? "You get one" : "You get one point"); 4357871Sarnold if (chkscr(&pscore, 1)) 4367871Sarnold return TRUE; 4377706Sarnold sum = 0; 4387706Sarnold mego = ugo = FALSE; 4397871Sarnold Tcnt = 0; 4407706Sarnold } 4417706Sarnold } 4427871Sarnold else { 4437706Sarnold played = TRUE; 4447706Sarnold j = -1; 4457706Sarnold k = 0; 4467871Sarnold for (i = 0; i < cnum; i++) { /* maximize score */ 4477871Sarnold l = pegscore(ch[i], Table, Tcnt, sum); 4487871Sarnold if (l > k) { 4497706Sarnold k = l; 4507706Sarnold j = i; 4517706Sarnold } 4527706Sarnold } 4537871Sarnold if (j < 0) /* if nothing scores */ 4547871Sarnold j = cchose(ch, cnum, sum); 4557706Sarnold crd = ch[j]; 456*46743Sbostic cremove(crd, ch, cnum--); 4577871Sarnold sum += VAL(crd.rank); 4587871Sarnold Table[Tcnt++] = crd; 4597871Sarnold if (k > 0) { 4607948Sarnold addmsg(quiet ? "I get %d playing " : 4617948Sarnold "I get %d points playing ", k); 4627871Sarnold msgcard(crd, FALSE); 4637871Sarnold endmsg(); 4647871Sarnold if (chkscr(&cscore, k)) 4657871Sarnold return TRUE; 4667706Sarnold } 4677706Sarnold myturn = !myturn; 4687706Sarnold } 4697706Sarnold } 4707871Sarnold else { 4717871Sarnold if (!anymove(ph, pnum, sum)) { /* can player move? */ 4727871Sarnold if (!ugo && pnum) { /* go for player */ 47312315Sarnold msg("You have a GO"); 4747706Sarnold ugo = TRUE; 4757706Sarnold } 4767871Sarnold if (anymove(ch, cnum, sum)) /* can computer play? */ 4777706Sarnold myturn = !myturn; 4787871Sarnold else { 47912315Sarnold msg(quiet ? "I get one" : "I get one point"); 48012315Sarnold do_wait(); 4817871Sarnold if (chkscr(&cscore, 1)) 4827871Sarnold return TRUE; 4837706Sarnold sum = 0; 4847706Sarnold mego = ugo = FALSE; 4857871Sarnold Tcnt = 0; 4867706Sarnold } 4877706Sarnold } 4887871Sarnold else { /* player plays */ 4897706Sarnold played = FALSE; 4907871Sarnold if (pnum == 1) { 4917706Sarnold crd = ph[0]; 4927871Sarnold msg("You play your last card"); 4937706Sarnold } 4947871Sarnold else 4957871Sarnold for (;;) { 4968073Sarnold prhand(ph, pnum, Playwin, FALSE); 4977871Sarnold crd = ph[infrom(ph, pnum, "Your play: ")]; 4987871Sarnold if (sum + VAL(crd.rank) <= 31) 4997706Sarnold break; 5007871Sarnold else 50112315Sarnold msg("Total > 31 -- try again"); 5027871Sarnold } 5037871Sarnold makeknown(&crd, 1); 504*46743Sbostic cremove(crd, ph, pnum--); 5057871Sarnold i = pegscore(crd, Table, Tcnt, sum); 5067871Sarnold sum += VAL(crd.rank); 5077871Sarnold Table[Tcnt++] = crd; 5087871Sarnold if (i > 0) { 5097871Sarnold msg(quiet ? "You got %d" : "You got %d points", i); 5107871Sarnold if (chkscr(&pscore, i)) 5117871Sarnold return TRUE; 5127706Sarnold } 5137706Sarnold myturn = !myturn; 5147706Sarnold } 5157706Sarnold } 5167871Sarnold if (sum >= 31) { 51712315Sarnold if (!myturn) 51812315Sarnold do_wait(); 5197706Sarnold sum = 0; 5207706Sarnold mego = ugo = FALSE; 5217871Sarnold Tcnt = 0; 5227706Sarnold last = FALSE; /* disable last flag */ 5237706Sarnold } 5247871Sarnold if (!pnum && !cnum) 5257871Sarnold break; /* both done */ 5267871Sarnold } 5278073Sarnold prhand(ph, pnum, Playwin, FALSE); 5288073Sarnold prhand(ch, cnum, Compwin, TRUE); 5298072Sarnold prtable(sum); 5307871Sarnold if (last) 5317871Sarnold if (played) { 5327871Sarnold msg(quiet ? "I get one for last" : "I get one point for last"); 53312315Sarnold do_wait(); 5347871Sarnold if (chkscr(&cscore, 1)) 5357871Sarnold return TRUE; 5367706Sarnold } 5377871Sarnold else { 5387871Sarnold msg(quiet ? "You get one for last" : 5397871Sarnold "You get one point for last"); 5407871Sarnold if (chkscr(&pscore, 1)) 5417871Sarnold return TRUE; 5427706Sarnold } 5437871Sarnold return FALSE; 5447706Sarnold } 5457706Sarnold 5467871Sarnold /* 5477871Sarnold * prtable: 5487871Sarnold * Print out the table with the current score 5497871Sarnold */ 5507871Sarnold prtable(score) 5517871Sarnold int score; 5527871Sarnold { 5538073Sarnold prhand(Table, Tcnt, Tablewin, FALSE); 5547871Sarnold mvwprintw(Tablewin, (Tcnt + 2) * 2, Tcnt + 1, "%2d", score); 5557871Sarnold wrefresh(Tablewin); 5567871Sarnold } 5577706Sarnold 5587706Sarnold /* 5597871Sarnold * score: 5607871Sarnold * Handle the scoring of the hands 5617706Sarnold */ 5627871Sarnold score(mycrib) 5637871Sarnold BOOLEAN mycrib; 5647706Sarnold { 5657871Sarnold sorthand(crib, CINHAND); 5667871Sarnold if (mycrib) { 5677871Sarnold if (plyrhand(phand, "hand")) 5687871Sarnold return TRUE; 5697871Sarnold if (comphand(chand, "hand")) 5707871Sarnold return TRUE; 57112315Sarnold do_wait(); 5727871Sarnold if (comphand(crib, "crib")) 5737871Sarnold return TRUE; 5747706Sarnold } 5757871Sarnold else { 5767871Sarnold if (comphand(chand, "hand")) 5777871Sarnold return TRUE; 5787871Sarnold if (plyrhand(phand, "hand")) 5797871Sarnold return TRUE; 5807871Sarnold if (plyrhand(crib, "crib")) 5817871Sarnold return TRUE; 5827706Sarnold } 5837871Sarnold return FALSE; 5847706Sarnold } 585