17871Sarnold # include <curses.h> 27871Sarnold # include <signal.h> 37871Sarnold # include "deck.h" 47871Sarnold # include "cribbage.h" 57871Sarnold # include "cribcur.h" 67706Sarnold 77706Sarnold 87871Sarnold # define LOGFILE "/usr/games/lib/criblog" 97871Sarnold # define INSTRCMD "ul /usr/games/lib/crib.instr | more -f" 107706Sarnold 117706Sarnold 127871Sarnold main(argc, argv) 137871Sarnold int argc; 147871Sarnold char *argv[]; 157706Sarnold { 167706Sarnold register char *p; 177706Sarnold BOOLEAN playing; 187706Sarnold char *s; /* for reading arguments */ 197706Sarnold char bust; /* flag for arg reader */ 207871Sarnold FILE *f; 217871Sarnold FILE *fopen(); 227871Sarnold char *getline(); 237871Sarnold int bye(); 247706Sarnold 257871Sarnold while (--argc > 0) { 267871Sarnold if ((*++argv)[0] != '-') { 277871Sarnold fprintf(stderr, "\n\ncribbage: usage is 'cribbage [-eqr]'\n"); 287871Sarnold exit(1); 297706Sarnold } 307706Sarnold bust = FALSE; 317871Sarnold for (s = argv[0] + 1; *s != NULL; s++) { 327871Sarnold switch (*s) { 337871Sarnold case 'e': 347706Sarnold explain = TRUE; 357706Sarnold break; 367871Sarnold case 'q': 377706Sarnold quiet = TRUE; 387706Sarnold break; 397871Sarnold case 'r': 407706Sarnold rflag = TRUE; 417706Sarnold break; 427706Sarnold default: 437871Sarnold fprintf(stderr, "\n\ncribbage: usage is 'cribbage [-eqr]'\n"); 447871Sarnold exit(2); 457706Sarnold break; 467706Sarnold } 477871Sarnold if (bust) 487871Sarnold break; 497706Sarnold } 507706Sarnold } 517871Sarnold 527871Sarnold initscr(); 537871Sarnold signal(SIGINT, bye); 547871Sarnold crmode(); 557871Sarnold noecho(); 567871Sarnold Playwin = subwin(stdscr, PLAY_Y, PLAY_X, 0, 0); 577871Sarnold Tablewin = subwin(stdscr, TABLE_Y, TABLE_X, 0, PLAY_X); 587871Sarnold Compwin = subwin(stdscr, COMP_Y, COMP_X, 0, TABLE_X + PLAY_X); 597871Sarnold leaveok(Playwin, TRUE); 607871Sarnold leaveok(Tablewin, TRUE); 617871Sarnold leaveok(Compwin, TRUE); 627871Sarnold 637871Sarnold if (!quiet) { 647871Sarnold msg("Do you need instructions for cribbage? "); 657871Sarnold if (getuchar() == 'Y') { 667871Sarnold system(INSTRCMD); 677871Sarnold msg("For the rules of this program, do \"man cribbage\""); 687706Sarnold } 697706Sarnold } 707706Sarnold playing = TRUE; 717871Sarnold do { 727871Sarnold msg(quiet ? "L or S? " : "Long (to 121) or Short (to 61)? "); 73*7949Sarnold if (glimit == SGAME) 74*7949Sarnold glimit = (getuchar() == 'L' ? LGAME : SGAME); 75*7949Sarnold else 76*7949Sarnold glimit = (getuchar() == 'S' ? SGAME : LGAME); 777706Sarnold game(); 787871Sarnold msg("Another game? "); 797871Sarnold playing = (getuchar() == 'Y'); 807871Sarnold } while (playing); 817871Sarnold 827871Sarnold if ((f = fopen(LOGFILE, "a")) != NULL) { 837871Sarnold fprintf(f, "Won %5.5d, Lost %5.5d\n", cgames, pgames); 847871Sarnold fclose(f); 857706Sarnold } 867871Sarnold 877871Sarnold bye(); 887706Sarnold } 897706Sarnold 907871Sarnold /* 917871Sarnold * bye: 927871Sarnold * Leave the program, cleaning things up as we go. 937871Sarnold */ 947871Sarnold bye() 957871Sarnold { 967871Sarnold signal(SIGINT, SIG_IGN); 977871Sarnold mvcur(0, COLS - 1, LINES - 1, 0); 987871Sarnold fflush(stdout); 997871Sarnold endwin(); 1007871Sarnold putchar('\n'); 1017871Sarnold exit(1); 1027871Sarnold } 1037706Sarnold 1047871Sarnold /* 1057871Sarnold * makeboard: 1067871Sarnold * Print out the initial board on the screen 1077871Sarnold */ 1087871Sarnold makeboard() 1097871Sarnold { 1107871Sarnold mvaddstr(SCORE_Y + 0, SCORE_X, "+---------------------------------------+"); 1117948Sarnold mvaddstr(SCORE_Y + 1, SCORE_X, "| YOU |"); 1127937Sarnold mvaddstr(SCORE_Y + 2, SCORE_X, "| *.....:.....:.....:.....:.....:..... |"); 1137937Sarnold mvaddstr(SCORE_Y + 3, SCORE_X, "| *.....:.....:.....:.....:.....:..... |"); 1147871Sarnold mvaddstr(SCORE_Y + 4, SCORE_X, "| |"); 1157937Sarnold mvaddstr(SCORE_Y + 5, SCORE_X, "| *.....:.....:.....:.....:.....:..... |"); 1167937Sarnold mvaddstr(SCORE_Y + 6, SCORE_X, "| *.....:.....:.....:.....:.....:..... |"); 1177948Sarnold mvaddstr(SCORE_Y + 7, SCORE_X, "| ME |"); 1187871Sarnold mvaddstr(SCORE_Y + 8, SCORE_X, "+---------------------------------------+"); 119*7949Sarnold gamescore(); 120*7949Sarnold } 121*7949Sarnold 122*7949Sarnold /* 123*7949Sarnold * gamescore: 124*7949Sarnold * Print out the current game score 125*7949Sarnold */ 126*7949Sarnold gamescore() 127*7949Sarnold { 128*7949Sarnold extern int Lastscore[]; 129*7949Sarnold 1307948Sarnold if (pgames || cgames) { 1317948Sarnold mvprintw(SCORE_Y + 1, SCORE_X + 28, "Games: %3d", pgames); 1327948Sarnold mvprintw(SCORE_Y + 7, SCORE_X + 28, "Games: %3d", cgames); 1337948Sarnold } 1347937Sarnold Lastscore[0] = -1; 1357937Sarnold Lastscore[1] = -1; 1367871Sarnold } 1377871Sarnold 1387706Sarnold /* 1397871Sarnold * game: 1407933Sarnold * Play one game up to glimit points. Actually, we only ASK the 1417933Sarnold * player what card to turn. We do a random one, anyway. 1427706Sarnold */ 1437706Sarnold game() 1447706Sarnold { 1457871Sarnold register int i, j; 1467706Sarnold BOOLEAN flag; 1477706Sarnold BOOLEAN compcrib; 1487706Sarnold 149*7949Sarnold makeboard(); 1507871Sarnold makedeck(deck); 1517871Sarnold shuffle(deck); 1527871Sarnold if (gamecount == 0) { 1537706Sarnold flag = TRUE; 1547871Sarnold do { 1557933Sarnold if (!rflag) { /* player cuts deck */ 1567871Sarnold msg(quiet ? "Cut for crib? " : 1577871Sarnold "Cut to see whose crib it is -- low card wins? "); 1587933Sarnold getline(); 1597706Sarnold } 1607933Sarnold i = (rand() >> 4) % CARDS; /* random cut */ 1617871Sarnold do { /* comp cuts deck */ 1627871Sarnold j = (rand() >> 4) % CARDS; 1637871Sarnold } while (j == i); 1647871Sarnold addmsg(quiet ? "You cut " : "You cut the "); 1657871Sarnold msgcard(deck[i], FALSE); 1667871Sarnold endmsg(); 1677871Sarnold addmsg(quiet ? "I cut " : "I cut the "); 1687871Sarnold msgcard(deck[j], FALSE); 1697871Sarnold endmsg(); 1707871Sarnold flag = (deck[i].rank == deck[j].rank); 1717871Sarnold if (flag) { 1727871Sarnold msg(quiet ? "We tied..." : 1737871Sarnold "We tied and have to try again..."); 1747871Sarnold shuffle(deck); 1757706Sarnold continue; 1767706Sarnold } 1777871Sarnold else 1787871Sarnold compcrib = (deck[i].rank > deck[j].rank); 1797871Sarnold } while (flag); 1807706Sarnold } 1817871Sarnold else { 182*7949Sarnold werase(Tablewin); 183*7949Sarnold wrefresh(Tablewin); 184*7949Sarnold werase(Compwin); 185*7949Sarnold wrefresh(Compwin); 1867871Sarnold msg("Loser (%s) gets first crib.", (iwon ? "you" : "me")); 1877706Sarnold compcrib = !iwon; 1887706Sarnold } 1897871Sarnold 1907706Sarnold pscore = cscore = 0; 1917706Sarnold flag = TRUE; 1927871Sarnold do { 1937871Sarnold shuffle(deck); 1947871Sarnold flag = !playhand(compcrib); 1957706Sarnold compcrib = !compcrib; 1967871Sarnold msg("You have %d points, I have %d.", pscore, cscore); 1977871Sarnold } while (flag); 1987706Sarnold ++gamecount; 1997871Sarnold if (cscore < pscore) { 2007871Sarnold if (glimit - cscore > 60) { 2017871Sarnold msg("YOU DOUBLE SKUNKED ME!"); 2027871Sarnold pgames += 4; 2037706Sarnold } 2047871Sarnold else if (glimit - cscore > 30) { 2057871Sarnold msg("YOU SKUNKED ME!"); 2067871Sarnold pgames += 2; 2077871Sarnold } 2087871Sarnold else { 2097871Sarnold msg("YOU WON!"); 2107706Sarnold ++pgames; 2117706Sarnold } 2127706Sarnold iwon = FALSE; 2137706Sarnold } 2147871Sarnold else { 2157871Sarnold if (glimit - pscore > 60) { 2167871Sarnold msg("I DOUBLE SKUNKED YOU!"); 2177871Sarnold cgames += 4; 2187706Sarnold } 2197871Sarnold else if (glimit - pscore > 30) { 2207871Sarnold msg("I SKUNKED YOU!"); 2217871Sarnold cgames += 2; 2227871Sarnold } 2237871Sarnold else { 2247871Sarnold msg("I WON!"); 2257706Sarnold ++cgames; 2267706Sarnold } 2277706Sarnold iwon = TRUE; 2287706Sarnold } 229*7949Sarnold gamescore(); 2307706Sarnold } 2317706Sarnold 2327706Sarnold /* 2337871Sarnold * playhand: 2347871Sarnold * Do up one hand of the game 2357706Sarnold */ 2367871Sarnold playhand(mycrib) 2377871Sarnold BOOLEAN mycrib; 2387871Sarnold { 2397871Sarnold register int deckpos; 2407871Sarnold extern char Msgbuf[]; 2417706Sarnold 2427871Sarnold werase(Compwin); 2437871Sarnold wrefresh(Compwin); 2447871Sarnold move(CRIB_Y, 0); 2457871Sarnold clrtobot(); 2467871Sarnold mvaddstr(LINES - 1, 0, Msgbuf); 2477706Sarnold 2487706Sarnold knownum = 0; 2497871Sarnold deckpos = deal(mycrib); 2507871Sarnold sorthand(chand, FULLHAND); 2517871Sarnold sorthand(phand, FULLHAND); 2527871Sarnold makeknown(chand, FULLHAND); 2537871Sarnold prhand(phand, FULLHAND, Playwin); 2547871Sarnold discard(mycrib); 2557871Sarnold if (cut(mycrib, deckpos)) 2567871Sarnold return TRUE; 2577871Sarnold if (peg(mycrib)) 2587871Sarnold return TRUE; 2597871Sarnold werase(Tablewin); 2607871Sarnold wrefresh(Tablewin); 2617871Sarnold if (score(mycrib)) 2627871Sarnold return TRUE; 2637871Sarnold return FALSE; 2647706Sarnold } 2657706Sarnold 2667706Sarnold 2677706Sarnold 2687706Sarnold /* 2697706Sarnold * deal cards to both players from deck 2707706Sarnold */ 2717706Sarnold 2727706Sarnold deal( mycrib ) 2737706Sarnold { 2747706Sarnold register int i, j; 2757706Sarnold 2767706Sarnold j = 0; 2777706Sarnold for( i = 0; i < FULLHAND; i++ ) { 2787706Sarnold if( mycrib ) { 2797706Sarnold phand[i] = deck[j++]; 2807706Sarnold chand[i] = deck[j++]; 2817706Sarnold } 2827706Sarnold else { 2837706Sarnold chand[i] = deck[j++]; 2847706Sarnold phand[i] = deck[j++]; 2857706Sarnold } 2867706Sarnold } 2877706Sarnold return( j ); 2887706Sarnold } 2897706Sarnold 2907706Sarnold /* 2917871Sarnold * discard: 2927871Sarnold * Handle players discarding into the crib... 2937871Sarnold * Note: we call cdiscard() after prining first message so player doesn't wait 2947706Sarnold */ 2957871Sarnold discard(mycrib) 2967871Sarnold BOOLEAN mycrib; 2977706Sarnold { 2987871Sarnold register char *prompt; 2997871Sarnold CARD crd; 3007706Sarnold 3017946Sarnold prcrib(mycrib, TRUE); 3027871Sarnold prompt = (quiet ? "Discard --> " : "Discard a card --> "); 3037871Sarnold cdiscard(mycrib); /* puts best discard at end */ 3047871Sarnold crd = phand[infrom(phand, FULLHAND, prompt)]; 3057871Sarnold remove(crd, phand, FULLHAND); 3067871Sarnold prhand(phand, FULLHAND, Playwin); 3077706Sarnold crib[0] = crd; 3087871Sarnold /* next four lines same as last four except for cdiscard() */ 3097871Sarnold crd = phand[infrom(phand, FULLHAND - 1, prompt)]; 3107871Sarnold remove(crd, phand, FULLHAND - 1); 3117871Sarnold prhand(phand, FULLHAND, Playwin); 3127706Sarnold crib[1] = crd; 3137706Sarnold crib[2] = chand[4]; 3147706Sarnold crib[3] = chand[5]; 3157871Sarnold chand[4].rank = chand[4].suit = chand[5].rank = chand[5].suit = EMPTY; 3167706Sarnold } 3177706Sarnold 3187706Sarnold /* 3197871Sarnold * cut: 3207933Sarnold * Cut the deck and set turnover. Actually, we only ASK the 3217933Sarnold * player what card to turn. We do a random one, anyway. 3227706Sarnold */ 3237871Sarnold cut(mycrib, pos) 3247871Sarnold BOOLEAN mycrib; 3257871Sarnold int pos; 3267706Sarnold { 3277871Sarnold register int i, cardx; 3287706Sarnold BOOLEAN win = FALSE; 3297706Sarnold 3307871Sarnold if (mycrib) { 3317933Sarnold if (!rflag) { /* random cut */ 3327871Sarnold msg(quiet ? "Cut the deck? " : 3337871Sarnold "How many cards down do you wish to cut the deck? "); 3347933Sarnold getline(); 3357706Sarnold } 3367933Sarnold i = (rand() >> 4) % (CARDS - pos); 3377706Sarnold turnover = deck[i + pos]; 3387871Sarnold addmsg(quiet ? "You cut " : "You cut the "); 3397871Sarnold msgcard(turnover, FALSE); 3407871Sarnold endmsg(); 3417871Sarnold if (turnover.rank == JACK) { 3427871Sarnold msg("I get two for his heels."); 3437871Sarnold win = chkscr(&cscore,2 ); 3447706Sarnold } 3457706Sarnold } 3467871Sarnold else { 3477871Sarnold i = (rand() >> 4) % (CARDS - pos) + pos; 3487706Sarnold turnover = deck[i]; 3497871Sarnold addmsg(quiet ? "I cut " : "I cut the "); 3507871Sarnold msgcard(turnover, FALSE); 3517871Sarnold endmsg(); 3527871Sarnold if (turnover.rank == JACK) { 3537871Sarnold msg("You get two for his heels."); 3547871Sarnold win = chkscr(&pscore, 2); 3557706Sarnold } 3567706Sarnold } 3577871Sarnold makeknown(&turnover, 1); 3587946Sarnold prcrib(mycrib, FALSE); 3597871Sarnold return win; 3607706Sarnold } 3617706Sarnold 3627706Sarnold /* 3637946Sarnold * prcrib: 3647946Sarnold * Print out the turnover card with crib indicator 3657946Sarnold */ 3667946Sarnold prcrib(mycrib, blank) 3677946Sarnold BOOLEAN mycrib, blank; 3687946Sarnold { 3697946Sarnold register int cardx; 3707946Sarnold 3717946Sarnold if (mycrib) 3727946Sarnold cardx = CRIB_X; 3737946Sarnold else 3747946Sarnold cardx = 0; 3757946Sarnold 3767946Sarnold mvaddstr(CRIB_Y, cardx + 1, "CRIB"); 3777946Sarnold prcard(stdscr, CRIB_Y + 1, cardx, turnover, blank); 3787946Sarnold } 3797946Sarnold 3807946Sarnold /* 3817871Sarnold * peg: 3827871Sarnold * Handle all the pegging... 3837706Sarnold */ 3847706Sarnold 3857871Sarnold static CARD Table[14]; 3867706Sarnold 3877871Sarnold static int Tcnt; 3887871Sarnold 3897871Sarnold peg(mycrib) 3907871Sarnold BOOLEAN mycrib; 3917706Sarnold { 3927871Sarnold static CARD ch[CINHAND], ph[CINHAND]; 3937706Sarnold CARD crd; 3947871Sarnold register int i, j, k; 3957706Sarnold int l; 3967871Sarnold int cnum, pnum, sum; 3977706Sarnold BOOLEAN myturn, mego, ugo, last, played; 3987706Sarnold 3997706Sarnold cnum = pnum = CINHAND; 4007871Sarnold for (i = 0; i < CINHAND; i++) { /* make copies of hands */ 4017706Sarnold ch[i] = chand[i]; 4027706Sarnold ph[i] = phand[i]; 4037706Sarnold } 4047871Sarnold Tcnt = 0; /* index to table of cards played */ 4057706Sarnold sum = 0; /* sum of cards played */ 4067706Sarnold mego = ugo = FALSE; 4077706Sarnold myturn = !mycrib; 4087871Sarnold for (;;) { 4097706Sarnold last = TRUE; /* enable last flag */ 4107871Sarnold prtable(sum); 4117871Sarnold prhand(ph, pnum, Playwin); 4127871Sarnold if (myturn) { /* my tyrn to play */ 4137871Sarnold if (!anymove(ch, cnum, sum)) { /* if no card to play */ 4147871Sarnold if (!mego && cnum) { /* go for comp? */ 4157871Sarnold msg("GO."); 4167706Sarnold mego = TRUE; 4177706Sarnold } 4187871Sarnold if (anymove(ph, pnum, sum)) /* can player move? */ 4197706Sarnold myturn = !myturn; 4207871Sarnold else { /* give him his point */ 4217871Sarnold msg(quiet ? "You get one." : "You get one point."); 4227871Sarnold if (chkscr(&pscore, 1)) 4237871Sarnold return TRUE; 4247706Sarnold sum = 0; 4257706Sarnold mego = ugo = FALSE; 4267871Sarnold Tcnt = 0; 4277871Sarnold Hasread = FALSE; 4287706Sarnold } 4297706Sarnold } 4307871Sarnold else { 4317706Sarnold played = TRUE; 4327706Sarnold j = -1; 4337706Sarnold k = 0; 4347871Sarnold for (i = 0; i < cnum; i++) { /* maximize score */ 4357871Sarnold l = pegscore(ch[i], Table, Tcnt, sum); 4367871Sarnold if (l > k) { 4377706Sarnold k = l; 4387706Sarnold j = i; 4397706Sarnold } 4407706Sarnold } 4417871Sarnold if (j < 0) /* if nothing scores */ 4427871Sarnold j = cchose(ch, cnum, sum); 4437706Sarnold crd = ch[j]; 4447871Sarnold remove(crd, ch, cnum--); 4457871Sarnold sum += VAL(crd.rank); 4467871Sarnold Table[Tcnt++] = crd; 4477871Sarnold if (k > 0) { 4487948Sarnold addmsg(quiet ? "I get %d playing " : 4497948Sarnold "I get %d points playing ", k); 4507871Sarnold msgcard(crd, FALSE); 4517871Sarnold endmsg(); 4527871Sarnold if (chkscr(&cscore, k)) 4537871Sarnold return TRUE; 4547706Sarnold } 4557706Sarnold myturn = !myturn; 4567706Sarnold } 4577706Sarnold } 4587871Sarnold else { 4597871Sarnold if (!anymove(ph, pnum, sum)) { /* can player move? */ 4607871Sarnold if (!ugo && pnum) { /* go for player */ 4617871Sarnold msg("You have a GO."); 4627706Sarnold ugo = TRUE; 4637706Sarnold } 4647871Sarnold if (anymove(ch, cnum, sum)) /* can computer play? */ 4657706Sarnold myturn = !myturn; 4667871Sarnold else { 4677871Sarnold msg(quiet ? "I get one." : "I get one point."); 4687871Sarnold if (chkscr(&cscore, 1)) 4697871Sarnold return TRUE; 4707706Sarnold sum = 0; 4717706Sarnold mego = ugo = FALSE; 4727871Sarnold Tcnt = 0; 4737871Sarnold Hasread = FALSE; 4747706Sarnold } 4757706Sarnold } 4767871Sarnold else { /* player plays */ 4777706Sarnold played = FALSE; 4787871Sarnold if (pnum == 1) { 4797706Sarnold crd = ph[0]; 4807871Sarnold msg("You play your last card"); 4817706Sarnold } 4827871Sarnold else 4837871Sarnold for (;;) { 4847871Sarnold prhand(ph, pnum, Playwin); 4857871Sarnold crd = ph[infrom(ph, pnum, "Your play: ")]; 4867871Sarnold if (sum + VAL(crd.rank) <= 31) 4877706Sarnold break; 4887871Sarnold else 4897871Sarnold msg("Total > 31 -- try again."); 4907871Sarnold } 4917871Sarnold makeknown(&crd, 1); 4927871Sarnold remove(crd, ph, pnum--); 4937871Sarnold i = pegscore(crd, Table, Tcnt, sum); 4947871Sarnold sum += VAL(crd.rank); 4957871Sarnold Table[Tcnt++] = crd; 4967871Sarnold if (i > 0) { 4977871Sarnold msg(quiet ? "You got %d" : "You got %d points", i); 4987871Sarnold if (chkscr(&pscore, i)) 4997871Sarnold return TRUE; 5007706Sarnold } 5017706Sarnold myturn = !myturn; 5027706Sarnold } 5037706Sarnold } 5047871Sarnold if (sum >= 31) { 5057706Sarnold sum = 0; 5067706Sarnold mego = ugo = FALSE; 5077871Sarnold Tcnt = 0; 5087706Sarnold last = FALSE; /* disable last flag */ 5097871Sarnold Hasread = FALSE; 5107706Sarnold } 5117871Sarnold if (!pnum && !cnum) 5127871Sarnold break; /* both done */ 5137871Sarnold } 5147871Sarnold if (last) 5157871Sarnold if (played) { 5167871Sarnold msg(quiet ? "I get one for last" : "I get one point for last"); 5177871Sarnold if (chkscr(&cscore, 1)) 5187871Sarnold return TRUE; 5197706Sarnold } 5207871Sarnold else { 5217871Sarnold msg(quiet ? "You get one for last" : 5227871Sarnold "You get one point for last"); 5237871Sarnold if (chkscr(&pscore, 1)) 5247871Sarnold return TRUE; 5257706Sarnold } 5267871Sarnold return FALSE; 5277706Sarnold } 5287706Sarnold 5297871Sarnold /* 5307871Sarnold * prtable: 5317871Sarnold * Print out the table with the current score 5327871Sarnold */ 5337871Sarnold prtable(score) 5347871Sarnold int score; 5357871Sarnold { 5367871Sarnold prhand(Table, Tcnt, Tablewin); 5377871Sarnold mvwprintw(Tablewin, (Tcnt + 2) * 2, Tcnt + 1, "%2d", score); 5387871Sarnold wrefresh(Tablewin); 5397871Sarnold } 5407706Sarnold 5417706Sarnold /* 5427871Sarnold * score: 5437871Sarnold * Handle the scoring of the hands 5447706Sarnold */ 5457871Sarnold score(mycrib) 5467871Sarnold BOOLEAN mycrib; 5477706Sarnold { 5487871Sarnold sorthand(crib, CINHAND); 5497871Sarnold if (mycrib) { 5507871Sarnold if (plyrhand(phand, "hand")) 5517871Sarnold return TRUE; 5527871Sarnold if (comphand(chand, "hand")) 5537871Sarnold return TRUE; 5547871Sarnold if (comphand(crib, "crib")) 5557871Sarnold return TRUE; 5567706Sarnold } 5577871Sarnold else { 5587871Sarnold if (comphand(chand, "hand")) 5597871Sarnold return TRUE; 5607871Sarnold if (plyrhand(phand, "hand")) 5617871Sarnold return TRUE; 5627871Sarnold if (plyrhand(crib, "crib")) 5637871Sarnold return TRUE; 5647706Sarnold } 5657871Sarnold return FALSE; 5667706Sarnold } 567