uint32_t hash_value(value_t val) { #if NANTAG if (IS_PTR(val)) { return hash_ptr(AS_PTR(val)); } else { value_conv_t data; data.bits = val; return hash_number(data.bits); } #else // ! NANTAG switch (val.type) { case V_NIL: return 0; case V_TRUE: return 1; case V_FALSE: return 2; case V_UNDEFINED: return 3; case V_NUM: return hash_number(AS_NUM(val)); case V_PTR: return hash_ptr(AS_PTR(val)); default: return 0; } #endif // NANTAG }
/* *** equality *** */ bool val_equal(value_t a, value_t b) { if (val_eq(a, b)) { return true; } if (IS_VAL(a) || IS_VAL(b)) { // if both are only plain values, // they should have been equal by <eq?> return false; } ptrvalue_t *pa = AS_PTR(a); ptrvalue_t *pb = AS_PTR(b); if (pa->type != pb->type) { return false; } if (pa->type == T_CONS) { cons_t *consa = (cons_t *) pa; cons_t *consb = (cons_t *) pb; return val_equal(consa->car, consb->car) && val_equal(consa->cdr, consb->cdr); } else if (pa->type == T_STRING) { string_t *stra = (string_t *) pa; string_t *strb = (string_t *) pb; return stra->len == strb->len && stra->hash == strb->hash && memcmp(stra->value, strb->value, stra->len * sizeof(char)) == 0; } else if (pa->type == T_SYMBOL) { symbol_t *syma = (symbol_t *) pa; symbol_t *symb = (symbol_t *) pb; if ((syma->len == symb->len) && (memcmp(syma->name, symb->name, syma->len * sizeof(char)) == 0)) { // we should never get here! - two symbols with same name are eq? fprintf(stderr, "Error: symbol not interned!"); } return false; } else if (pa->type == T_VECTOR) { vector_t *veca = (vector_t *) pa; vector_t *vecb = (vector_t *) pb; if (veca->count != vecb->count) { return false; } for (uint32_t i = 0; i < veca->count; i++) { if (!val_equal(veca->data[i], vecb->data[i])) { return false; } } return true; } return false; }
PyObject * _wrap_smpeg_new (PyObject *self, PyObject *args) { PyObject *py_e; PyObject *py_v; char *filename; int audio; if (!PyArg_ParseTuple (args, "OOsi:new", &py_e, &py_v, &filename, &audio)) return NULL; GLASSERT (py_e && py_e != Py_None); GLASSERT (py_v && py_v != Py_None); GLASSERT (filename); KrEngine *engine = AS_PTR(KrEngine, py_e); GLASSERT (engine); SDL_Surface *surface = AS_PTR(SDL_Surface, py_v); GLASSERT (surface); SMPEG_Info info; SMPEG *smpeg = SMPEG_new (filename, &info, 0); GLASSERT (smpeg); if (audio) { SDL_AudioSpec spec; SMPEG_enableaudio (smpeg, 0); Mix_QuerySpec (&spec.freq, &spec.format, (int *)&spec.channels); SMPEG_actualSpec(smpeg, &spec); Mix_HookMusic (SMPEG_playAudioSDL, smpeg); SMPEG_enableaudio (smpeg, 1); } else { SMPEG_enableaudio (smpeg, 0); } SMPEG_setdisplay (smpeg, surface, NULL, NULL); return PyCObject_FromVoidPtr (smpeg, NULL); }
PyObject * _wrap_smpeg_render_final (PyObject *self, PyObject *args) { PyObject *py_s; PyObject *py_v; int x, y; if (!PyArg_ParseTuple (args, "OOii:render_final", &py_s, &py_v, &x, &y)) return NULL; GLASSERT (py_s && py_s != Py_None); GLASSERT (py_v && py_v != Py_None); SMPEG *smpeg = AS_PTR(SMPEG, py_s); GLASSERT (smpeg); SDL_Surface *surface = AS_PTR(SDL_Surface, py_v); GLASSERT (surface); SMPEG_renderFinal (smpeg, surface, x, y); RETURN_NONE; }
PyObject * _wrap_video_del (PyObject *self, PyObject *args) { PyObject *py_v; if (!PyArg_ParseTuple (args, "O:del", &py_v)) return NULL; SDL_Surface *s = AS_PTR (SDL_Surface, py_v); GLASSERT (s); SDL_Quit (); RETURN_NONE; }
PyObject * _wrap_tile_size (PyObject *self, PyObject *args) { PyObject *py_r; if (!PyArg_ParseTuple (args, "O:size", &py_r)) return NULL; KrTile *t = AS_PTR (KrTile, py_r); GLASSERT (t); int size = t->Size(); return PyInt_FromLong (size); }
PyObject * _wrap_smpeg_stop (PyObject *self, PyObject *args) { PyObject *py_s; if (!PyArg_ParseTuple (args, "O:stop", &py_s)) return NULL; GLASSERT (py_s && py_s != Py_None); SMPEG *smpeg = AS_PTR(SMPEG, py_s); GLASSERT (smpeg); SMPEG_stop (smpeg); RETURN_NONE; }
PyObject * _wrap_sprite_do_step (PyObject *self, PyObject *args) { PyObject *py_r; if (!PyArg_ParseTuple (args, "O:do_step", &py_r)) return NULL; GLASSERT (py_r && py_r != Py_None); KrSprite *r = AS_PTR (KrSprite, py_r); GLASSERT (r); r->DoStep(); RETURN_NONE }
PyObject * _wrap_sprite_num_frame (PyObject *self, PyObject *args) { PyObject *py_r; if (!PyArg_ParseTuple (args, "O:frame", &py_r)) return NULL; GLASSERT (py_r && py_r != Py_None); KrSprite *r = AS_PTR (KrSprite, py_r); GLASSERT (r); int frame = r->NumFrames(); return PyInt_FromLong (frame); }
PyObject * _wrap_smpeg_status (PyObject *self, PyObject *args) { PyObject *py_s; if (!PyArg_ParseTuple (args, "O:status", &py_s)) return NULL; GLASSERT (py_s && py_s != Py_None); SMPEG *smpeg = AS_PTR(SMPEG, py_s); GLASSERT (smpeg); int status = SMPEG_status (smpeg); return PyInt_FromLong (status); }
PyObject * _wrap_tile_set_rotation (PyObject *self, PyObject *args) { PyObject *py_r; int angle; if (!PyArg_ParseTuple (args, "Oi:set_rotation", &py_r, &angle)) return NULL; KrTile *t = AS_PTR (KrTile, py_r); GLASSERT (t); t->SetRotation(angle); RETURN_NONE; }
PyObject * _wrap_video_set_title (PyObject *self, PyObject *args) { PyObject *py_v; char *title; if (!PyArg_ParseTuple (args, "Os:set_title", &py_v, &title)) return NULL; GLASSERT(title); SDL_Surface *s = AS_PTR (SDL_Surface, py_v); GLASSERT (s); SDL_WM_SetCaption (title, NULL); RETURN_NONE; }
PyObject * _wrap_sprite_set_frame (PyObject *self, PyObject *args) { PyObject *py_r; int frame; if (!PyArg_ParseTuple (args, "Oi:set_frame", &py_r, &frame)) return NULL; GLASSERT (py_r && py_r != Py_None); KrSprite *r = AS_PTR (KrSprite, py_r); GLASSERT (r); r->SetFrame(frame); RETURN_NONE }
PyObject * _wrap_smpeg_seek (PyObject *self, PyObject *args) { PyObject *py_s; int bytes; if (!PyArg_ParseTuple (args, "Oi:seek", &py_s, &bytes)) return NULL; GLASSERT (py_s && py_s != Py_None); SMPEG *smpeg = AS_PTR(SMPEG, py_s); GLASSERT (smpeg); SMPEG_seek (smpeg, bytes); RETURN_NONE; }
PyObject * _wrap_smpeg_skip (PyObject *self, PyObject *args) { PyObject *py_s; float seconds; if (!PyArg_ParseTuple (args, "Of:rewind", &py_s, &seconds)) return NULL; GLASSERT (py_s && py_s != Py_None); SMPEG *smpeg = AS_PTR(SMPEG, py_s); GLASSERT (smpeg); SMPEG_skip (smpeg, seconds); RETURN_NONE; }
PyObject * _wrap_sprite_get_action (PyObject *self, PyObject *args) { PyObject *py_r; if (!PyArg_ParseTuple (args, "O:get_action", &py_r)) return NULL; GLASSERT (py_r && py_r != Py_None); KrSprite *r = AS_PTR (KrSprite, py_r); GLASSERT (r); KrAction *action = r->GetAction(); GLASSERT (action); return PyCObject_FromVoidPtr (action, NULL); }
PyObject * _wrap_smpeg_set_loop (PyObject *self, PyObject *args) { PyObject *py_s; int repeat; if (!PyArg_ParseTuple (args, "Oi:loop", &py_s, &repeat)) return NULL; GLASSERT (py_s && py_s != Py_None); SMPEG *smpeg = AS_PTR(SMPEG, py_s); GLASSERT (smpeg); SMPEG_loop (smpeg, repeat); RETURN_NONE; }
PyObject * _wrap_sprite_set_action (PyObject *self, PyObject *args) { PyObject *py_r; char *action; if (!PyArg_ParseTuple (args, "Os:set_action", &py_r, &action)) return NULL; GLASSERT (py_r && py_r != Py_None); GLASSERT (action); KrSprite *r = AS_PTR (KrSprite, py_r); GLASSERT (r); r->SetAction(action); RETURN_NONE }
PyObject * _wrap_sprite_set_action_rotated (PyObject *self, PyObject *args) { PyObject *py_r; char *action; int degrees; if (!PyArg_ParseTuple (args, "Osi:set_action_rotated", &py_r, &action, °rees)) return NULL; GLASSERT (py_r && py_r != Py_None); GLASSERT (action); KrSprite *r = AS_PTR (KrSprite, py_r); GLASSERT (r); r->SetActionRotated (action, degrees); RETURN_NONE }
PyObject * _wrap_tile_new (PyObject *self, PyObject *args) { PyObject *py_r; if (!PyArg_ParseTuple (args, "O:new", &py_r)) return NULL; GLASSERT (py_r && py_r != Py_None); KrTileResource *r = AS_PTR (KrTileResource, py_r); GLASSERT (r); KrTile *t = new KrTile (r); GLASSERT (t); t->SetUserData (KrTile_TYPE); return PyCObject_FromVoidPtr (t, NULL); }
PyObject * _wrap_tile_del (PyObject *self, PyObject *args) { PyObject *py_r; if (!PyArg_ParseTuple (args, "O:del", &py_r)) return NULL; KrTile *t = AS_PTR (KrTile, py_r); GLASSERT (t); if (t->GetUserData() != KrTile_TYPE) { RETURN_NONE; } delete t; RETURN_1; }
PyObject * _wrap_sprite_del (PyObject *self, PyObject *args) { PyObject *py_r; if (!PyArg_ParseTuple (args, "O:del", &py_r)) return NULL; KrSprite *r = AS_PTR (KrSprite, py_r); GLASSERT (r); if (r->GetUserData() != KrSprite_TYPE) { RETURN_NONE; } delete r; RETURN_1; }
PyObject * _wrap_sprite_new (PyObject *self, PyObject *args) { PyObject *py_r; if (!PyArg_ParseTuple (args, "O:new", &py_r)) return NULL; GLASSERT (py_r && py_r != Py_None); KrSpriteResource *r = AS_PTR (KrSpriteResource, py_r); GLASSERT (r); KrSprite *s = new KrSprite (r); GLASSERT (s); s->SetUserData (KrSprite_TYPE); return PyCObject_FromVoidPtr (s, NULL); }
PyObject * _wrap_image_del (PyObject *self, PyObject *args) { PyObject *py_i; if (!PyArg_ParseTuple (args, "O:del", &py_i)) return NULL; GLASSERT (py_i && py_i != Py_None); KrImage *i = AS_PTR (KrImage, py_i); GLASSERT (i != NULL); if (i->GetUserData() != KrImage_TYPE) { RETURN_NONE; } delete i; RETURN_1; }
PyObject * _wrap_sprite_get_bounding_box (PyObject *self, PyObject *args) { PyObject *py_e; int window; if (!PyArg_ParseTuple (args, "Oi:get_bounding_box", &py_e, &window)) return NULL; KrSprite *e = AS_PTR (KrSprite, py_e); GLASSERT (e); KrRect rect; e->GetBoundingBox(&rect, window); PyObject *t = PyTuple_New (4); PyTuple_SetItem (t, 0, PyInt_FromLong (rect.xmin)); PyTuple_SetItem (t, 1, PyInt_FromLong (rect.ymin)); PyTuple_SetItem (t, 2, PyInt_FromLong (rect.xmax)); PyTuple_SetItem (t, 3, PyInt_FromLong (rect.ymax)); return t; }