#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
#include "poker_defs.h"
#include "inlines/eval.h"
#include "deck_std.h"
#include "rules_std.h"
int parse_cards(char *handstr, StdDeck_CardMask* cards) {
char *p;
int c = 0;
int ncards = 0;
char str[80];
StdDeck_CardMask_RESET(*cards);
strcpy(str, handstr);
p = strtok(str, " ");
do {
if (DstringToCard(StdDeck, p, &c) == 0)
return 0;
if (!StdDeck_CardMask_CARD_IS_SET(*cards, c)) {
StdDeck_CardMask_SET(*cards, c);
++ncards;
};
} while ((p = strtok(NULL, " ")) != NULL);
return ncards;
}
MODULE = Games::Poker::HandEvaluator PACKAGE = Games::Poker::HandEvaluator
int
_evaluate( hand );
char* hand;
PREINIT:
StdDeck_CardMask cards;
int ncards;
CODE:
ncards = parse_cards(hand, &cards);
if (ncards)
RETVAL = StdDeck_StdRules_EVAL_N(cards, ncards);
else
RETVAL = 0;
OUTPUT:
RETVAL
char*
handval( hval )
int hval;
PREINIT:
char buf[80];
int n;
CODE:
StdRules_HandVal_toString(hval, buf);
RETVAL = buf; /* Hopefully Perl copies this... */
OUTPUT:
RETVAL