Ejemplo n.º 1
0
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
}
Ejemplo n.º 2
0
/* *** 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;
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
0
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);
}
Ejemplo n.º 7
0
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;
}
Ejemplo n.º 8
0
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
}
Ejemplo n.º 9
0
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);
}
Ejemplo n.º 10
0
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);
}
Ejemplo n.º 11
0
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;
}
Ejemplo n.º 12
0
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;
}
Ejemplo n.º 13
0
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
}
Ejemplo n.º 14
0
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;
}
Ejemplo n.º 15
0
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;
}
Ejemplo n.º 16
0
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);
}
Ejemplo n.º 17
0
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;
}
Ejemplo n.º 18
0
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
}
Ejemplo n.º 19
0
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, &degrees)) 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
}
Ejemplo n.º 20
0
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);	   
}
Ejemplo n.º 21
0
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;
}
Ejemplo n.º 22
0
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;
}
Ejemplo n.º 23
0
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);
}
Ejemplo n.º 24
0
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;
}
Ejemplo n.º 25
0
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;
}