billr@saab.CNA.TEK.COM (Bill Randle) (09/15/90)
Submitted-by: Robert Steven Glickstein <bobg+@andrew.cmu.edu>
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 <file", e.g.. If this archive is complete, you
# will see the following message at the end:
# "End of archive 2 (of 2)."
# Contents: crapslib.c crapslib.h
# Wrapped by billr@saab on Fri Sep 14 14:36:34 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'crapslib.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'crapslib.c'\"
else
echo shar: Extracting \"'crapslib.c'\" \(29974 characters\)
sed "s/^X//" >'crapslib.c' <<'END_OF_FILE'
X#include <crapslib.h>
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