From bacchus.pa.dec.com!deccrl!decvax.dec.com!mcnc!rutgers!cs.utexas.edu!uunet!zephyr.ens.tek.com!tekred!saab!billr Sat Sep 15 17:10:40 PDT 1990 Article 1089 of comp.sources.games: Path: bacchus.pa.dec.com!deccrl!decvax.dec.com!mcnc!rutgers!cs.utexas.edu!uunet!zephyr.ens.tek.com!tekred!saab!billr From: billr@saab.CNA.TEK.COM (Bill Randle) Newsgroups: comp.sources.games Subject: v11i049: vcraps2 - display-oriented craps game (Ver. 2), Part02/02 Message-ID: <6310@tekred.CNA.TEK.COM> Date: 14 Sep 90 21:40:44 GMT Sender: news@tekred.CNA.TEK.COM Lines: 1375 Approved: billr@saab.CNA.TEK.COM Submitted-by: Robert Steven Glickstein Posting-number: Volume 11, Issue 49 Archive-name: vcraps2/Part02 Supersedes: vcraps: Volume 11, Issue 34-35 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh 'crapslib.c' <<'END_OF_FILE' X#include X X#define ComeOutP(t) (((t)->point)==0) X Xint CrapsErrorDatum; X Xextern void Craps_ReportPayoff(); Xextern void Craps_ReportReturn(); Xextern void Craps_ReportCollect(); Xextern void Craps_ReportCommission(); Xextern void Craps_ReportMove(); X Xvoid Craps_GetPayoff(t, which, buf) XCrapsTable_t *t; XCrapsBet_t which; XCrapsPayoff_t *buf; X{ X int a = 1, b = 1; /* Default payoff */ X X switch (which) { X case craps_PassLineOdds: X switch (t->point) { X case 4: X case 10: X a = 2; X break; X case 5: X case 9: X a = 3; X b = 2; X break; X case 6: X case 8: X a = 6; X b = 5; X break; X } X break; X case craps_ComeOdds4: X case craps_ComeOdds10: X a = 2; X break; X case craps_ComeOdds5: X case craps_ComeOdds9: X a = 3; X b = 2; X break; X case craps_ComeOdds6: X case craps_ComeOdds8: X a = 6; X b = 5; X break; X case craps_DontPassOdds: X switch (t->point) { X case 4: X case 10: X b = 2; X break; X case 5: X case 9: X a = 2; X b = 3; X break; X case 6: X case 8: X a = 5; X b = 6; X break; X } X break; X case craps_DontComeOdds4: X case craps_DontComeOdds10: X b = 2; X break; X case craps_DontComeOdds5: X case craps_DontComeOdds9: X a = 2; X b = 3; X break; X case craps_DontComeOdds6: X case craps_DontComeOdds8: X a = 5; X b = 6; X break; X case craps_Place4: X if (t->bought4) X a = 2; X else { X a = 9; X b = 5; X } X break; X case craps_Place5: X case craps_Place9: X a = 7; X b = 5; X break; X case craps_Place6: X case craps_Place8: X a = 7; X b = 6; X break; X case craps_Place10: X if (t->bought10) X a = 2; X else { X a = 9; X b = 5; X } X break; X case craps_DontPlace4: X case craps_DontPlace10: X b = 2; X break; X case craps_DontPlace5: X case craps_DontPlace9: X a = 2; X b = 3; X break; X case craps_DontPlace6: X case craps_DontPlace8: X a = 5; X b = 6; X break; X case craps_Field: X switch (t->die1 + t->die2) { X case 2: X a = t->field2payoff.numerator; X b = t->field2payoff.denominator; X break; X case 12: X a = t->field12payoff.numerator; X b = t->field12payoff.denominator; X break; X } X break; X case craps_Big6: X a = t->big6payoff.numerator; X b = t->big6payoff.denominator; X break; X case craps_Big8: X a = t->big8payoff.numerator; X b = t->big8payoff.denominator; X break; X case craps_Hard4: X case craps_Hard10: X a = 7; X break; X case craps_Hard6: X case craps_Hard8: X a = 9; X break; X case craps_Any7: X a = 4; X break; X case craps_AnyCraps: X a = 7; X break; X case craps_OneRoll2: X a = t->oneroll2payoff.numerator; X b = t->oneroll2payoff.denominator; X break; X case craps_OneRoll3: X a = t->oneroll3payoff.numerator; X b = t->oneroll3payoff.denominator; X break; X case craps_OneRoll11: X a = t->oneroll11payoff.numerator; X b = t->oneroll11payoff.denominator; X break; X case craps_OneRoll12: X a = t->oneroll12payoff.numerator; X b = t->oneroll12payoff.denominator; X break; X } X buf->numerator = a; X buf->denominator = b; X} X Xstatic void Payoff(t, which) XCrapsTable_t *t; XCrapsBet_t which; X{ X if (t->bets[(int) which]) { X CrapsPayoff_t payoff; X int win; X X Craps_GetPayoff(t, which, &payoff); X win = (t->bets[(int) which] / payoff.denominator) * payoff.numerator; X Craps_ReportPayoff(t, which, &payoff, win); X t->bankroll += (t->bets[(int) which] + win); X t->bets[(int) which] = 0; X } X} X Xstatic void Return(t, which) XCrapsTable_t *t; XCrapsBet_t which; X{ X if (t->bets[(int) which]) { X Craps_ReportReturn(t, which); X t->bankroll += t->bets[(int) which]; X t->bets[(int) which] = 0; X } X} X Xstatic void Collect(t, which) XCrapsTable_t *t; XCrapsBet_t which; X{ X if (t->bets[(int) which]) { X Craps_ReportCollect(t, which); X t->bets[(int) which] = 0; X } X} X Xvoid Craps_Init(t) XCrapsTable_t *t; X{ X int i; X X t->bankroll = 0; X t->point = 0; X t->die1 = 5; X t->die2 = 6; X t->bought4 = t->bought10 = 0; X t->doublep = 1; X t->field2payoff.numerator = 2; X t->field2payoff.denominator = 1; X t->field12payoff.numerator = 2; X t->field12payoff.denominator = 1; X t->big6payoff.numerator = t->big6payoff.denominator = 1; X t->big8payoff.numerator = t->big8payoff.denominator = 1; X t->oneroll2payoff.numerator = 29; X t->oneroll2payoff.denominator = 1; X t->oneroll3payoff.numerator = 14; X t->oneroll3payoff.denominator = 1; X t->oneroll11payoff.numerator = 14; X t->oneroll11payoff.denominator = 1; X t->oneroll12payoff.numerator = 29; X t->oneroll12payoff.denominator = 1; X for (i = 0; i < (int) craps_Bets; ++i) X t->bets[i] = 0; X} X Xstatic void Decr(t, which, amt) XCrapsTable_t *t; XCrapsBet_t which; Xint amt; X{ X t->bets[(int) which] += amt; X t->bankroll -= amt; X} X Xvoid Craps_Update(t, die1, die2) XCrapsTable_t *t; Xint die1, die2; X{ X t->die1 = die1; X t->die2 = die2; X switch (die1 + die2) { X case 2: X if (ComeOutP(t)) X Collect(t, craps_PassLine); X Collect(t, craps_ComeBox); X if (ComeOutP(t)) X Payoff(t, craps_DontPass); X Payoff(t, craps_DontComeBox); X Payoff(t, craps_Field); X Collect(t, craps_Any7); X Payoff(t, craps_AnyCraps); X Payoff(t, craps_OneRoll2); X Collect(t, craps_OneRoll3); X Collect(t, craps_OneRoll11); X Collect(t, craps_OneRoll12); X break; X case 3: X if (ComeOutP(t)) X Collect(t, craps_PassLine); X Collect(t, craps_ComeBox); X if (ComeOutP(t)) X Payoff(t, craps_DontPass); X Payoff(t, craps_DontComeBox); X Payoff(t, craps_Field); X Collect(t, craps_Any7); X Payoff(t, craps_AnyCraps); X Collect(t, craps_OneRoll2); X Payoff(t, craps_OneRoll3); X Collect(t, craps_OneRoll11); X Collect(t, craps_OneRoll12); X break; X case 4: X if (t->point == 4) { X Payoff(t, craps_PassLine); X Payoff(t, craps_PassLineOdds); X } X Payoff(t, craps_Come4); X if (ComeOutP(t)) X Return(t, craps_ComeOdds4); X else X Payoff(t, craps_ComeOdds4); X if (t->point == 4) { X Collect(t, craps_DontPass); X Collect(t, craps_DontPassOdds); X } X Collect(t, craps_DontCome4); X Collect(t, craps_DontComeOdds4); X if (t->point) { X Payoff(t, craps_Place4); X t->bought4 = 0; X } X Collect(t, craps_DontPlace4); X Payoff(t, craps_Field); X if (die1 == die2) X Payoff(t, craps_Hard4); X else X Collect(t, craps_Hard4); X Collect(t, craps_Any7); X Collect(t, craps_AnyCraps); X Collect(t, craps_OneRoll2); X Collect(t, craps_OneRoll3); X Collect(t, craps_OneRoll11); X Collect(t, craps_OneRoll12); X if (t->bets[(int) craps_ComeBox]) { X Craps_ReportMove(t, craps_ComeBox, craps_Come4); X t->bets[(int) craps_Come4] = t->bets[(int) craps_ComeBox]; X t->bets[(int) craps_ComeBox] = 0; X } X if (t->bets[(int) craps_DontComeBox]) { X Craps_ReportMove(t, craps_DontComeBox, craps_DontCome4); X t->bets[(int) craps_DontCome4] = t->bets[(int) craps_DontComeBox]; X t->bets[(int) craps_DontComeBox] = 0; X } X if (ComeOutP(t)) X t->point = 4; X else X if (t->point == 4) X t->point = 0; X break; X case 5: X if (t->point == 5) { X Payoff(t, craps_PassLine); X Payoff(t, craps_PassLineOdds); X } X Payoff(t, craps_Come5); X if (ComeOutP(t)) X Return(t, craps_ComeOdds5); X else X Payoff(t, craps_ComeOdds5); X if (t->point == 5) { X Collect(t, craps_DontPass); X Collect(t, craps_DontPassOdds); X } X Collect(t, craps_DontCome5); X Collect(t, craps_DontComeOdds5); X if (t->point) X Payoff(t, craps_Place5); X Collect(t, craps_DontPlace5); X Collect(t, craps_Field); X Collect(t, craps_Any7); X Collect(t, craps_AnyCraps); X Collect(t, craps_OneRoll2); X Collect(t, craps_OneRoll3); X Collect(t, craps_OneRoll11); X Collect(t, craps_OneRoll12); X if (t->bets[(int) craps_ComeBox]) { X Craps_ReportMove(t, craps_ComeBox, craps_Come5); X t->bets[(int) craps_Come5] = t->bets[(int) craps_ComeBox]; X t->bets[(int) craps_ComeBox] = 0; X } X if (t->bets[(int) craps_DontComeBox]) { X Craps_ReportMove(t, craps_DontComeBox, craps_DontCome5); X t->bets[(int) craps_DontCome5] = t->bets[(int) craps_DontComeBox]; X t->bets[(int) craps_DontComeBox] = 0; X } X if (ComeOutP(t)) X t->point = 5; X else X if (t->point == 5) X t->point = 0; X break; X case 6: X if (t->point == 6) { X Payoff(t, craps_PassLine); X Payoff(t, craps_PassLineOdds); X } X Payoff(t, craps_Come6); X if (ComeOutP(t)) X Return(t, craps_ComeOdds6); X else X Payoff(t, craps_ComeOdds6); X if (t->point == 6) { X Collect(t, craps_DontPass); X Collect(t, craps_DontPassOdds); X } X Collect(t, craps_DontCome6); X Collect(t, craps_DontComeOdds6); X if (t->point) X Payoff(t, craps_Place6); X Collect(t, craps_DontPlace6); X Collect(t, craps_Field); X Payoff(t, craps_Big6); X if (die1 == die2) X Payoff(t, craps_Hard6); X else X Collect(t, craps_Hard6); X Collect(t, craps_Any7); X Collect(t, craps_AnyCraps); X Collect(t, craps_OneRoll2); X Collect(t, craps_OneRoll3); X Collect(t, craps_OneRoll11); X Collect(t, craps_OneRoll12); X if (t->bets[(int) craps_ComeBox]) { X Craps_ReportMove(t, craps_ComeBox, craps_Come6); X t->bets[(int) craps_Come6] = t->bets[(int) craps_ComeBox]; X t->bets[(int) craps_ComeBox] = 0; X } X if (t->bets[(int) craps_DontComeBox]) { X Craps_ReportMove(t, craps_DontComeBox, craps_DontCome6); X t->bets[(int) craps_DontCome6] = t->bets[(int) craps_DontComeBox]; X t->bets[(int) craps_DontComeBox] = 0; X } X if (ComeOutP(t)) X t->point = 6; X else X if (t->point == 6) X t->point = 0; X break; X case 7: X if (ComeOutP(t)) X Payoff(t, craps_PassLine); X else { X Collect(t, craps_PassLine); X Collect(t, craps_PassLineOdds); X } X Payoff(t, craps_ComeBox); X Collect(t, craps_Come4); X Collect(t, craps_Come5); X Collect(t, craps_Come6); X Collect(t, craps_Come8); X Collect(t, craps_Come9); X Collect(t, craps_Come10); X if (ComeOutP(t)) { X Return(t, craps_ComeOdds4); X Return(t, craps_ComeOdds5); X Return(t, craps_ComeOdds6); X Return(t, craps_ComeOdds8); X Return(t, craps_ComeOdds9); X Return(t, craps_ComeOdds10); X Collect(t, craps_DontPass); X } X else { X Collect(t, craps_ComeOdds4); X Collect(t, craps_ComeOdds5); X Collect(t, craps_ComeOdds6); X Collect(t, craps_ComeOdds8); X Collect(t, craps_ComeOdds9); X Collect(t, craps_ComeOdds10); X Payoff(t, craps_DontPass); X } X Payoff(t, craps_DontPassOdds); X Collect(t, craps_DontComeBox); X Payoff(t, craps_DontCome4); X Payoff(t, craps_DontComeOdds4); X Payoff(t, craps_DontCome5); X Payoff(t, craps_DontComeOdds5); X Payoff(t, craps_DontCome6); X Payoff(t, craps_DontComeOdds6); X Payoff(t, craps_DontCome8); X Payoff(t, craps_DontComeOdds8); X Payoff(t, craps_DontCome9); X Payoff(t, craps_DontComeOdds9); X Payoff(t, craps_DontCome10); X Payoff(t, craps_DontComeOdds10); X if (t->point) { X Collect(t, craps_Place4); X Collect(t, craps_Place5); X Collect(t, craps_Place6); X Collect(t, craps_Place8); X Collect(t, craps_Place9); X Collect(t, craps_Place10); X t->bought4 = t->bought10 = 0; X } X Payoff(t, craps_DontPlace4); X Payoff(t, craps_DontPlace5); X Payoff(t, craps_DontPlace6); X Payoff(t, craps_DontPlace8); X Payoff(t, craps_DontPlace9); X Payoff(t, craps_DontPlace10); X Collect(t, craps_Field); X Collect(t, craps_Big6); X Collect(t, craps_Big8); X Collect(t, craps_Hard4); X Collect(t, craps_Hard6); X Collect(t, craps_Hard8); X Collect(t, craps_Hard10); X Payoff(t, craps_Any7); X Collect(t, craps_AnyCraps); X Collect(t, craps_OneRoll2); X Collect(t, craps_OneRoll3); X Collect(t, craps_OneRoll11); X Collect(t, craps_OneRoll12); X if (t->point) X t->point = 0; X break; X case 8: X if (t->point == 8) { X Payoff(t, craps_PassLine); X Payoff(t, craps_PassLineOdds); X } X Payoff(t, craps_Come8); X if (ComeOutP(t)) X Return(t, craps_ComeOdds8); X else X Payoff(t, craps_ComeOdds8); X if (t->point == 8) { X Collect(t, craps_DontPass); X Collect(t, craps_DontPassOdds); X } X Collect(t, craps_DontCome8); X Collect(t, craps_DontComeOdds8); X if (t->point) X Payoff(t, craps_Place8); X Collect(t, craps_DontPlace8); X Collect(t, craps_Field); X Payoff(t, craps_Big8); X if (die1 == die2) X Payoff(t, craps_Hard8); X else X Collect(t, craps_Hard8); X Collect(t, craps_Any7); X Collect(t, craps_AnyCraps); X Collect(t, craps_OneRoll2); X Collect(t, craps_OneRoll3); X Collect(t, craps_OneRoll11); X Collect(t, craps_OneRoll12); X if (t->bets[(int) craps_ComeBox]) { X Craps_ReportMove(t, craps_ComeBox, craps_Come8); X t->bets[(int) craps_Come8] = t->bets[(int) craps_ComeBox]; X t->bets[(int) craps_ComeBox] = 0; X } X if (t->bets[(int) craps_DontComeBox]) { X Craps_ReportMove(t, craps_DontComeBox, craps_DontCome8); X t->bets[(int) craps_DontCome8] = t->bets[(int) craps_DontComeBox]; X t->bets[(int) craps_DontComeBox] = 0; X } X if (ComeOutP(t)) X t->point = 8; X else X if (t->point == 8) X t->point = 0; X break; X case 9: X if (t->point == 9) { X Payoff(t, craps_PassLine); X Payoff(t, craps_PassLineOdds); X } X Payoff(t, craps_Come9); X if (ComeOutP(t)) X Return(t, craps_ComeOdds9); X else X Payoff(t, craps_ComeOdds9); X if (t->point == 9) { X Collect(t, craps_DontPass); X Collect(t, craps_DontPassOdds); X } X Collect(t, craps_DontCome9); X Collect(t, craps_DontComeOdds9); X if (t->point) X Payoff(t, craps_Place9); X Collect(t, craps_DontPlace9); X Payoff(t, craps_Field); X Collect(t, craps_Any7); X Collect(t, craps_AnyCraps); X Collect(t, craps_OneRoll2); X Collect(t, craps_OneRoll3); X Collect(t, craps_OneRoll11); X Collect(t, craps_OneRoll12); X if (t->bets[(int) craps_ComeBox]) { X Craps_ReportMove(t, craps_ComeBox, craps_Come9); X t->bets[(int) craps_Come9] = t->bets[(int) craps_ComeBox]; X t->bets[(int) craps_ComeBox] = 0; X } X if (t->bets[(int) craps_DontComeBox]) { X Craps_ReportMove(t, craps_DontComeBox, craps_DontCome9); X t->bets[(int) craps_DontCome9] = t->bets[(int) craps_DontComeBox]; X t->bets[(int) craps_DontComeBox] = 0; X } X if (ComeOutP(t)) X t->point = 9; X else X if (t->point == 9) X t->point = 0; X break; X case 10: X if (t->point == 10) { X Payoff(t, craps_PassLine); X Payoff(t, craps_PassLineOdds); X } X Payoff(t, craps_Come10); X if (ComeOutP(t)) X Return(t, craps_ComeOdds10); X else X Payoff(t, craps_ComeOdds10); X if (t->point == 10) { X Collect(t, craps_DontPass); X Collect(t, craps_DontPassOdds); X } X Collect(t, craps_DontCome10); X Collect(t, craps_DontComeOdds10); X if (t->point) { X Payoff(t, craps_Place10); X t->bought10 = 0; X } X Collect(t, craps_DontPlace10); X Payoff(t, craps_Field); X if (die1 == die2) X Payoff(t, craps_Hard10); X else X Collect(t, craps_Hard10); X Collect(t, craps_Any7); X Collect(t, craps_AnyCraps); X Collect(t, craps_OneRoll2); X Collect(t, craps_OneRoll3); X Collect(t, craps_OneRoll11); X Collect(t, craps_OneRoll12); X if (t->bets[(int) craps_ComeBox]) { X Craps_ReportMove(t, craps_ComeBox, craps_Come10); X t->bets[(int) craps_Come10] = t->bets[(int) craps_ComeBox]; X t->bets[(int) craps_ComeBox] = 0; X } X if (t->bets[(int) craps_DontComeBox]) { X Craps_ReportMove(t, craps_DontComeBox, craps_DontCome10); X t->bets[(int) craps_DontCome10] = t->bets[(int) craps_DontComeBox]; X t->bets[(int) craps_DontComeBox] = 0; X } X if (ComeOutP(t)) X t->point = 10; X else X if (t->point == 10) X t->point = 0; X break; X case 11: X if (ComeOutP(t)) X Payoff(t, craps_PassLine); X Payoff(t, craps_ComeBox); X if (ComeOutP(t)) X Collect(t, craps_DontPass); X Collect(t, craps_DontComeBox); X Payoff(t, craps_Field); X Collect(t, craps_Any7); X Collect(t, craps_AnyCraps); X Collect(t, craps_OneRoll2); X Collect(t, craps_OneRoll3); X Payoff(t, craps_OneRoll11); X Collect(t, craps_OneRoll12); X break; X case 12: X if (ComeOutP(t)) X Collect(t, craps_PassLine); X Collect(t, craps_ComeBox); X Payoff(t, craps_Field); X Collect(t, craps_Any7); X Payoff(t, craps_AnyCraps); X Collect(t, craps_OneRoll2); X Collect(t, craps_OneRoll3); X Collect(t, craps_OneRoll11); X Payoff(t, craps_OneRoll12); X break; X } X} X XCrapsError_t Craps_Bet(t, which, bet) XCrapsTable_t *t; XCrapsBet_t which; Xint bet; X{ X int amount = bet - t->bets[(int) which], max, orig, commission; X CrapsPayoff_t payoff; X X if (bet <= 0) X return (crapserr_Nonpositive); X if (amount > t->bankroll) X return (crapserr_InsufficientFunds); X switch (which) { X case craps_PassLine: X if (ComeOutP(t)) X Decr(t, which, amount); X else X return (crapserr_NotComeOut); X break; X case craps_PassLineOdds: X if (ComeOutP(t)) X return (crapserr_ComeOut); X else { X Craps_GetPayoff(t, which, &payoff); X orig = t->bets[(int) craps_PassLine]; X if (t->doublep) X orig *= 2; X if (orig % payoff.denominator) X max = (orig - (orig % payoff.denominator)) + payoff.denominator; X else X max = orig; X if (!max) X return (crapserr_NoBet); X if (bet > max) { X CrapsErrorDatum = max; X return (crapserr_TooMuch); X } X if (bet % payoff.denominator) { X CrapsErrorDatum = payoff.denominator; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X } X break; X case craps_ComeBox: X if (ComeOutP(t)) X return (crapserr_ComeOut); X Decr(t, which, amount); X break; X case craps_ComeOdds4: X if (!(max = t->bets[(int) craps_Come4])) X return (crapserr_NoBet); X if (t->doublep) X max *= 2; X if (bet > max) { X CrapsErrorDatum = max; X return (crapserr_TooMuch); X } X Decr(t, which, amount); X break; X case craps_ComeOdds10: X if (!(max = t->bets[(int) craps_Come10])) X return (crapserr_NoBet); X if (t->doublep) X max *= 2; X if (bet > max) { X CrapsErrorDatum = max; X return (crapserr_TooMuch); X } X Decr(t, which, amount); X break; X case craps_ComeOdds5: X if (!(max = t->bets[(int) craps_Come5])) X return (crapserr_NoBet); X if (t->doublep) X max *= 2; X if (max % 2) X ++max; X if (bet > max) { X CrapsErrorDatum = max; X return (crapserr_TooMuch); X } X if (bet % 2) { X CrapsErrorDatum = 2; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X break; X case craps_ComeOdds9: X if (!(max = t->bets[(int) craps_Come9])) X return (crapserr_NoBet); X if (t->doublep) X max *= 2; X if (max % 2) X ++max; X if (bet > max) { X CrapsErrorDatum = max; X return (crapserr_TooMuch); X } X if (bet % 2) { X CrapsErrorDatum = 2; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X break; X case craps_ComeOdds6: X if (!(orig = t->bets[(int) craps_Come6])) X return (crapserr_NoBet); X if (t->doublep) X orig *= 2; X if (orig % 5) X max = (orig - (orig % 5)) + 5; X else X max = orig; X if (bet > max) { X CrapsErrorDatum = max; X return (crapserr_TooMuch); X } X if (bet % 5) { X CrapsErrorDatum = 5; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X break; X case craps_ComeOdds8: X if (!(orig = t->bets[(int) craps_Come8])) X return (crapserr_NoBet); X if (t->doublep) X orig *= 2; X if (orig % 5) X max = (orig - (orig % 5)) + 5; X else X max = orig; X if (bet > max) { X CrapsErrorDatum = max; X return (crapserr_TooMuch); X } X if (bet % 5) { X CrapsErrorDatum = 5; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X break; X case craps_DontPass: X if (ComeOutP(t)) X Decr(t, which, amount); X else X return (crapserr_NotComeOut); X break; X case craps_DontPassOdds: X if (ComeOutP(t)) X return (crapserr_ComeOut); X if (!(orig = t->bets[(int) craps_DontPass])) X return (crapserr_NoBet); X if (t->doublep) X orig *= 2; X Craps_GetPayoff(t, which, &payoff); X if (orig % payoff.numerator) X max = (orig - (orig % payoff.numerator)) + payoff.numerator; X else X max = orig; X max /= payoff.numerator; X max *= payoff.denominator; X if (bet > max) { X CrapsErrorDatum = max; X return (crapserr_TooMuch); X } X if (bet % payoff.denominator) { X CrapsErrorDatum = payoff.denominator; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X break; X case craps_DontComeBox: X if (ComeOutP(t)) X return (crapserr_ComeOut); X Decr(t, which, amount); X break; X case craps_DontComeOdds4: X if (!(orig = t->bets[(int) craps_DontCome4])) X return (crapserr_NoBet); X if (t->doublep) X orig *= 2; X max = orig * 2; X if (bet > max) { X CrapsErrorDatum = max; X return (crapserr_TooMuch); X } X if (bet % 2) { X CrapsErrorDatum = 2; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X break; X case craps_DontComeOdds10: X if (!(orig = t->bets[(int) craps_DontCome10])) X return (crapserr_NoBet); X if (t->doublep) X orig *= 2; X max = orig * 2; X if (bet > max) { X CrapsErrorDatum = max; X return (crapserr_TooMuch); X } X if (bet % 2) { X CrapsErrorDatum = 2; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X break; X case craps_DontComeOdds5: X if (!(orig = t->bets[(int) craps_DontCome5])) X return (crapserr_NoBet); X if (t->doublep) X orig *= 2; X max = (orig % 2) ? (orig + 1) : orig; X max /= 2; X max *= 3; X if (bet > max) { X CrapsErrorDatum = max; X return (crapserr_TooMuch); X } X if (bet % 3) { X CrapsErrorDatum = 3; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X break; X case craps_DontComeOdds9: X if (!(orig = t->bets[(int) craps_DontCome9])) X return (crapserr_NoBet); X if (t->doublep) X orig *= 2; X max = (orig % 2) ? (orig + 1) : orig; X max /= 2; X max *= 3; X if (bet > max) { X CrapsErrorDatum = max; X return (crapserr_TooMuch); X } X if (bet % 3) { X CrapsErrorDatum = 3; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X break; X case craps_DontComeOdds6: X if (!(orig = t->bets[(int) craps_DontCome6])) X return (crapserr_NoBet); X if (t->doublep) X orig *= 2; X if (orig % 5) X max = (orig - (orig % 5)) + 5; X else X max = orig; X max /= 5; X max *= 6; X if (bet > max) { X CrapsErrorDatum = max; X return (crapserr_TooMuch); X } X if (bet % 6) { X CrapsErrorDatum = 6; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X break; X case craps_DontComeOdds8: X if (!(orig = t->bets[(int) craps_DontCome8])) X return (crapserr_NoBet); X if (t->doublep) X orig *= 2; X if (orig % 5) X max = (orig - (orig % 5)) + 5; X else X max = orig; X max /= 5; X max *= 6; X if (bet > max) { X CrapsErrorDatum = max; X return (crapserr_TooMuch); X } X if (bet % 6) { X CrapsErrorDatum = 6; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X break; X case craps_Place4: X if (ComeOutP(t)) X return (crapserr_ComeOut); X if (bet % 5) { X CrapsErrorDatum = 5; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X t->bought4 = 0; X break; X case craps_Place5: X if (ComeOutP(t)) X return (crapserr_ComeOut); X if (bet % 5) { X CrapsErrorDatum = 5; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X break; X case craps_Place6: X if (ComeOutP(t)) X return (crapserr_ComeOut); X if (bet % 6) { X CrapsErrorDatum = 6; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X break; X case craps_Place8: X if (ComeOutP(t)) X return (crapserr_ComeOut); X if (bet % 6) { X CrapsErrorDatum = 6; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X break; X case craps_Place9: X if (ComeOutP(t)) X return (crapserr_ComeOut); X if (bet % 5) { X CrapsErrorDatum = 5; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X break; X case craps_Place10: X if (ComeOutP(t)) X return (crapserr_ComeOut); X if (bet % 5) { X CrapsErrorDatum = 5; X return (crapserr_NotDivisible); X } X Decr(t, which, amount); X t->bought10 = 0; X break; X case craps_DontPlace4: X if (ComeOutP(t)) X return (crapserr_ComeOut); X if (bet % 40) { X CrapsErrorDatum = 40; X return (crapserr_NotDivisible); X } X commission = bet / 40; X if ((amount + commission) > t->bankroll) X return (crapserr_InsufficientFunds); X Craps_ReportCommission(t, commission); X t->bankroll -= commission; X Decr(t, which, amount); X break; X case craps_DontPlace10: X if (ComeOutP(t)) X return (crapserr_ComeOut); X if (bet % 40) { X CrapsErrorDatum = 40; X return (crapserr_NotDivisible); X } X commission = bet / 40; X if ((amount + commission) > t->bankroll) X return (crapserr_InsufficientFunds); X Craps_ReportCommission(t, commission); X t->bankroll -= commission; X Decr(t, which, amount); X break; X case craps_DontPlace5: X if (ComeOutP(t)) X return (crapserr_ComeOut); X if (bet % 30) { X CrapsErrorDatum = 30; X return (crapserr_NotDivisible); X } X commission = bet / 30; X if ((amount + commission) > t->bankroll) X return (crapserr_InsufficientFunds); X Craps_ReportCommission(t, commission); X t->bankroll -= commission; X Decr(t, which, amount); X break; X case craps_DontPlace9: X if (ComeOutP(t)) X return (crapserr_ComeOut); X if (bet % 30) { X CrapsErrorDatum = 30; X return (crapserr_NotDivisible); X } X commission = bet / 30; X if ((amount + commission) > t->bankroll) X return (crapserr_InsufficientFunds); X Craps_ReportCommission(t, commission); X t->bankroll -= commission; X Decr(t, which, amount); X break; X case craps_DontPlace6: X if (ComeOutP(t)) X return (crapserr_ComeOut); X if (bet % 24) { X CrapsErrorDatum = 24; X return (crapserr_NotDivisible); X } X commission = bet / 24; X if ((amount + commission) > t->bankroll) X return (crapserr_InsufficientFunds); X Craps_ReportCommission(t, commission); X t->bankroll -= commission; X Decr(t, which, amount); X break; X case craps_DontPlace8: X if (ComeOutP(t)) X return (crapserr_ComeOut); X if (bet % 24) { X CrapsErrorDatum = 24; X return (crapserr_NotDivisible); X } X commission = bet / 24; X if ((amount + commission) > t->bankroll) X return (crapserr_InsufficientFunds); X Craps_ReportCommission(t, commission); X t->bankroll -= commission; X Decr(t, which, amount); X break; X default: X Decr(t, which, amount); X break; X } X return (crapserr_OK); X} X XCrapsError_t Craps_Buy(t, which) XCrapsTable_t *t; Xint which; X{ X int orig, commission; X X switch (which) { X case 4: X if (t->bought4) X return (crapserr_AlreadyBought); X if (!(orig = t->bets[(int) craps_Place4])) X return (crapserr_NoBet); X if (orig % 20) { X CrapsErrorDatum = 20; X return (crapserr_NotDivisible); X } X if ((commission = orig / 20) > t->bankroll) X return (crapserr_InsufficientFunds); X Craps_ReportCommission(t, commission); X t->bankroll -= commission; X t->bought4 = 1; X break; X case 10: X if (t->bought10) X return (crapserr_AlreadyBought); X if (!(orig = t->bets[(int) craps_Place10])) X return (crapserr_NoBet); X if (orig % 20) { X CrapsErrorDatum = 20; X return (crapserr_NotDivisible); X } X if ((commission = orig / 20) > t->bankroll) X return (crapserr_InsufficientFunds); X Craps_ReportCommission(t, commission); X t->bankroll -= commission; X t->bought10 = 1; X break; X } X return (crapserr_OK); X} X XCrapsError_t Craps_TakeDown(t, which) XCrapsTable_t *t; XCrapsBet_t which; X{ X switch (which) { X case craps_PassLine: X if (ComeOutP(t)) X Return(t, which); X else X return (crapserr_NoReturn); X break; X case craps_PassLineOdds: X case craps_ComeBox: X Return(t, which); X break; X case craps_Come4: X case craps_Come5: X case craps_Come6: X case craps_Come8: X case craps_Come9: X case craps_Come10: X return (crapserr_NoReturn); X case craps_ComeOdds4: X case craps_ComeOdds5: X case craps_ComeOdds6: X case craps_ComeOdds8: X case craps_ComeOdds9: X case craps_ComeOdds10: X Return(t, which); X break; X case craps_DontPass: X if (ComeOutP(t)) X Return(t, which); X else X return (crapserr_NoReturn); X break; X case craps_DontPassOdds: X case craps_DontComeBox: X Return(t, which); X break; X case craps_DontCome4: X case craps_DontCome5: X case craps_DontCome6: X case craps_DontCome8: X case craps_DontCome9: X case craps_DontCome10: X return (crapserr_NoReturn); X case craps_Place4: X Return(t, which); X t->bought4 = 0; X break; X case craps_Place10: X Return(t, which); X t->bought10 = 0; X break; X case craps_DontComeOdds4: X case craps_DontComeOdds5: X case craps_DontComeOdds6: X case craps_DontComeOdds8: X case craps_DontComeOdds9: X case craps_DontComeOdds10: X case craps_Place5: X case craps_Place6: X case craps_Place8: X case craps_Place9: X case craps_DontPlace4: X case craps_DontPlace5: X case craps_DontPlace6: X case craps_DontPlace8: X case craps_DontPlace9: X case craps_DontPlace10: X case craps_Field: X case craps_Big6: X case craps_Big8: X case craps_Hard4: X case craps_Hard6: X case craps_Hard8: X case craps_Hard10: X case craps_Any7: X case craps_AnyCraps: X case craps_OneRoll2: X case craps_OneRoll3: X case craps_OneRoll11: X case craps_OneRoll12: X Return(t, which); X break; X } X return (crapserr_OK); X} END_OF_FILE if test 29974 -ne `wc -c <'crapslib.c'`; then echo shar: \"'crapslib.c'\" unpacked with wrong size! fi # end of 'crapslib.c' fi if test -f 'crapslib.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'crapslib.h'\" else echo shar: Extracting \"'crapslib.h'\" \(3047 characters\) sed "s/^X//" >'crapslib.h' <<'END_OF_FILE' X#define CRAPSLIB_VERSION (2) X#define CRAPSLIB_PATCHLEVEL (0) X Xtypedef enum { X craps_PassLine = 0, craps_PassLineOdds, X craps_ComeBox, craps_Come4, craps_Come5, craps_Come6, X craps_Come8, craps_Come9, craps_Come10, X craps_ComeOdds4, craps_ComeOdds5, craps_ComeOdds6, X craps_ComeOdds8, craps_ComeOdds9, craps_ComeOdds10, X craps_DontPass, craps_DontPassOdds, X craps_DontComeBox, craps_DontCome4, craps_DontCome5, X craps_DontCome6, craps_DontCome8, craps_DontCome9, X craps_DontCome10, X craps_DontComeOdds4, craps_DontComeOdds5, craps_DontComeOdds6, X craps_DontComeOdds8, craps_DontComeOdds9, craps_DontComeOdds10, X craps_Place4, craps_Place5, craps_Place6, craps_Place8, X craps_Place9, craps_Place10, X craps_DontPlace4, craps_DontPlace5, craps_DontPlace6, X craps_DontPlace8, craps_DontPlace9, craps_DontPlace10, X craps_Field, craps_Big6, craps_Big8, X craps_Hard4, craps_Hard6, craps_Hard8, craps_Hard10, X craps_Any7, craps_AnyCraps, X craps_OneRoll2, craps_OneRoll3, craps_OneRoll11, craps_OneRoll12, X craps_Bets X} CrapsBet_t; X Xtypedef enum { X crapserr_OK, X crapserr_NoReturn, X crapserr_AlreadyBought, X crapserr_Nonpositive, X crapserr_NoBet, X crapserr_InsufficientFunds, X crapserr_NotComeOut, X crapserr_ComeOut, X crapserr_TooMuch, X crapserr_NotDivisible X} CrapsError_t; X Xtypedef struct { X int numerator, denominator; X} CrapsPayoff_t; X Xtypedef struct { X int bankroll, point, die1, die2; X int bought4, bought10; /* booleans */ X /* Configuration: */ X int doublep; X CrapsPayoff_t field2payoff, field12payoff, big6payoff; X CrapsPayoff_t big8payoff, oneroll2payoff, oneroll3payoff; X CrapsPayoff_t oneroll11payoff, oneroll12payoff; X /* Bets: */ X int bets[(int) craps_Bets]; X} CrapsTable_t; X X#define Craps_Bankroll(t) ((t)->bankroll) X#define Craps_Point(t) ((t)->point) X#define Craps_Die1(t) ((t)->die1) X#define Craps_Die2(t) ((t)->die2) X#define Craps_Bought4(t) ((t)->bought4) X#define Craps_Bought10(t) ((t)->bought10) X#define Craps_Doublep(t) ((t)->doublep) X#define Craps_Field2Payoff(t) (&((t)->field2payoff)) X#define Craps_Field12Payoff(t) (&((t)->field12payoff)) X#define Craps_Big6Payoff(t) (&((t)->big6payoff)) X#define Craps_Big8Payoff(t) (&((t)->big8payoff)) X#define Craps_OneRoll2Payoff(t) (&((t)->oneroll2payoff)) X#define Craps_OneRoll3Payoff(t) (&((t)->oneroll3payoff)) X#define Craps_OneRoll11Payoff(t) (&((t)->oneroll11payoff)) X#define Craps_OneRoll12Payoff(t) (&((t)->oneroll12payoff)) X#define Craps_GetBet(t,type) ((t)->bets[(int)(type)]) X X#define Craps_SetBankroll(t,b) (((t)->bankroll)=(b)) X#define Craps_SetDouble(t,d) (((t)->doublep)=(d)) X X#define Craps_IncrBankroll(t,amt) (((t)->bankroll)+=(amt)) X Xextern CrapsError_t Craps_Bet(); Xextern CrapsError_t Craps_Buy(); Xextern void Craps_GetPayoff(); Xextern void Craps_Init(); Xextern CrapsError_t Craps_TakeDown(); Xextern void Craps_Update(); END_OF_FILE if test 3047 -ne `wc -c <'crapslib.h'`; then echo shar: \"'crapslib.h'\" unpacked with wrong size! fi # end of 'crapslib.h' fi echo shar: End of archive 2 \(of 2\). cp /dev/null ark2isdone MISSING="" for I in 1 2 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked both archives. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0