static void parseArgs(int argc, char **argv) { int i, c; for (i = 1; i < argc; ++i) { if (!strcmp(argv[i], "-low")) gLow = 1; else if (!strcmp(argv[i], "-hl")) gHighLow = 1; else { if (Deck_stringToCard(argv[i], &c) == 0) goto error; if (!CardMask_CARD_IS_SET(gCards, c)) { CardMask_SET(gCards, c); ++gNCards; }; }; } return; error: fprintf(stderr, "Usage: eval [ -low ] [ -hl ] cards \n"); exit(0); }
static int PyList2CardMask(PyObject* object, CardMask* cardsp) { CardMask cards; int cards_size = 0; int valid_cards_size = 0; if(!PyList_Check(object)) { PyErr_SetString(PyExc_TypeError, "expected a list of cards"); return -1; } valid_cards_size = cards_size = PyList_Size(object); CardMask_RESET(cards); int card; int i; for(i = 0; i < cards_size; i++) { card = -1; PyObject* pycard = PyList_GetItem(object, i); if(PyErr_Occurred()) return -1; if(PyString_Check(pycard)) { char* card_string = PyString_AsString(pycard); if(!strcmp(card_string, "__")) { card = 255; } else { if(Deck_stringToCard(card_string, &card) == 0) { PyErr_Format(PyExc_RuntimeError, "card %s is not a valid card name", card_string); return -1; } } } else if(PyInt_Check(pycard)) { card = PyInt_AsLong(pycard); if(card != NOCARD && (card < 0 || card > StdDeck_N_CARDS)) { PyErr_Format(PyExc_TypeError, "card value (%d) must be in the range [0-%d]", card, StdDeck_N_CARDS); return -1; } } else { PyErr_SetString(PyExc_TypeError, "card must be a string or an int"); return -1; } if(card == NOCARD) valid_cards_size--; else CardMask_SET(cards, card); } *cardsp = cards; return valid_cards_size; }
static CardMask Strings2CardMask(int strings_count, char* strings[]) { CardMask cards; CardMask dead; CardMask_RESET(cards); CardMask_RESET(dead); int card; int i; for(i = 0; i < strings_count; i++) { card = -1; assert(Deck_stringToCard(strings[i], &card) != 0); assert(StdDeck_CardMask_CARD_IS_SET(dead, card) == 0); StdDeck_CardMask_SET(cards, card); } return cards; }
static PyObject* string2card(PyObject* self, PyObject *args) { char* card_string = 0; if (!PyArg_ParseTuple(args, "s", &card_string)) return NULL; { int card = 0; if(!strcmp(card_string, "__")) { card = 255; } else { if(Deck_stringToCard(card_string, &card) == 0) { PyErr_Format(PyExc_RuntimeError, "card %s is not a valid card name", card_string); return NULL; } } return Py_BuildValue("b", (unsigned char)card); } }
static int rbList2CardMask(VALUE object, CardMask* cardsp) { CardMask cards; int cards_size = 0; int valid_cards_size = 0; if (TYPE(object) != T_ARRAY) { rb_fatal("expected a list of cards"); } valid_cards_size = cards_size = RARRAY_LENINT(object); CardMask_RESET(cards); int card; int i; for(i = 0; i < cards_size; i++) { card = -1; char* card_string = RSTRING_PTR(rb_ary_entry(object, i)); if(!strcmp(card_string, "__")) card = 255; else if(Deck_stringToCard(card_string, &card) == 0) rb_fatal("card %s is not a valid card name", card_string); if(card == NOCARD) valid_cards_size--; else CardMask_SET(cards, card); } *cardsp = cards; return valid_cards_size; }