static PyObject * typecast_FLOAT_cast(const char *s, Py_ssize_t len, PyObject *curs) { PyObject *str = NULL, *flo = NULL; if (s == NULL) {Py_INCREF(Py_None); return Py_None;} if (!(str = Text_FromUTF8AndSize(s, len))) { return NULL; } #if PY_MAJOR_VERSION < 3 flo = PyFloat_FromString(str, NULL); #else flo = PyFloat_FromString(str); #endif Py_DECREF(str); return flo; }
static PyObject* _create_dict_from_event (SDL_Event *event, int release) { PyObject *val = NULL; PyObject *dict = PyDict_New (); if (!dict) return NULL; if (event->type >= SDL_USEREVENT && event->type < SDL_NUMEVENTS) { if (event->user.code == PYGAME_USEREVENT_CODE && event->user.data1 == (void*)PYGAME_USEREVENT) { /* It comes from pygame, it goes to pygame. */ PyObject *vdict = (PyObject*) event->user.data2; if (PyDict_Update (dict, vdict) == -1) goto failed; if (release) { Py_DECREF (vdict); } return dict; } else { /* It comes from some SDL stuff, it goes to pygame. */ if (!_set_item (dict, "code", PyInt_FromLong (event->user.code))) goto failed; #if PY_VERSION_HEX >= 0x03010000 if (!_set_item (dict, "data1", PyCapsule_New (event->user.data1, "data1", NULL))) goto failed; if (!_set_item (dict, "data2", PyCapsule_New (event->user.data2, "data2", NULL))) goto failed; #else if (!_set_item (dict, "data1", PyCObject_FromVoidPtr (event->user.data1, NULL))) goto failed; if (!_set_item (dict, "data2", PyCObject_FromVoidPtr (event->user.data2, NULL))) goto failed; #endif } return dict; } switch (event->type) { case SDL_ACTIVEEVENT: if (!_set_item (dict, "gain", PyInt_FromLong (event->active.gain))) goto failed; if (!_set_item (dict, "state", PyInt_FromLong (event->active.state))) goto failed; break; case SDL_KEYDOWN: case SDL_KEYUP: if (!_set_item (dict, "state", PyInt_FromLong (event->key.state))) goto failed; if (!_set_item (dict, "scancode", PyInt_FromLong (event->key.keysym.scancode))) goto failed; if (!_set_item (dict, "key", PyLong_FromUnsignedLong (event->key.keysym.sym))) goto failed; if (!_set_item (dict, "sym", PyLong_FromUnsignedLong (event->key.keysym.sym))) goto failed; if (!_set_item (dict, "mod", PyLong_FromUnsignedLong (event->key.keysym.mod))) goto failed; /* if SDL_EnableUNICODE() == 0, unicode will be a 0 character */ if (!_set_item (dict, "unicode", PyUnicode_FromOrdinal (event->key.keysym.unicode))) goto failed; break; case SDL_MOUSEMOTION: if (!_set_item (dict, "state", PyInt_FromLong (event->motion.state))) goto failed; if (!_set_item (dict, "x", PyInt_FromLong (event->motion.x))) goto failed; if (!_set_item (dict, "y", PyInt_FromLong (event->motion.y))) goto failed; if (!_set_item (dict, "xrel", PyInt_FromLong (event->motion.xrel))) goto failed; if (!_set_item (dict, "yrel", PyInt_FromLong (event->motion.yrel))) goto failed; val = Py_BuildValue ("(ii)", event->motion.x, event->motion.y); if (!val) goto failed; if (!_set_item (dict, "pos", val)) goto failed; val = Py_BuildValue ("(ii)", event->motion.xrel, event->motion.yrel); if (!val) goto failed; if (!_set_item (dict, "rel", val)) goto failed; val = PyTuple_New (3); if (!val) return NULL; PyTuple_SET_ITEM (val, 0, PyBool_FromLong (event->motion.state & SDL_BUTTON(1))); PyTuple_SET_ITEM (val, 1, PyBool_FromLong (event->motion.state & SDL_BUTTON(2))); PyTuple_SET_ITEM (val, 2, PyBool_FromLong (event->motion.state & SDL_BUTTON(3))); if (!_set_item (dict, "buttons", val)) goto failed; break; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: if (!_set_item (dict, "button", PyInt_FromLong (event->button.button))) goto failed; if (!_set_item (dict, "x", PyInt_FromLong (event->button.x))) goto failed; if (!_set_item (dict, "y", PyInt_FromLong (event->button.y))) goto failed; val = Py_BuildValue ("(ii)", event->button.x, event->button.y); if (!val) goto failed; if (!_set_item (dict, "pos", val)) goto failed; if (!_set_item (dict, "state", PyInt_FromLong (event->button.state))) goto failed; break; case SDL_JOYAXISMOTION: if (!_set_item (dict, "which", PyInt_FromLong (event->jaxis.which))) goto failed; if (!_set_item (dict, "joy", PyInt_FromLong (event->jaxis.which))) goto failed; if (!_set_item (dict, "axis", PyInt_FromLong (event->jaxis.axis))) goto failed; if (!_set_item (dict, "value", PyInt_FromLong (event->jaxis.value))) goto failed; break; case SDL_JOYBALLMOTION: if (!_set_item (dict, "which", PyInt_FromLong (event->jball.which))) goto failed; if (!_set_item (dict, "joy", PyInt_FromLong (event->jball.which))) goto failed; if (!_set_item (dict, "ball", PyInt_FromLong (event->jball.ball))) goto failed; if (!_set_item (dict, "xrel", PyInt_FromLong (event->jball.xrel))) goto failed; if (!_set_item (dict, "yrel", PyInt_FromLong (event->jball.yrel))) goto failed; val = Py_BuildValue ("(ii)", event->jball.xrel, event->jball.yrel); if (!val) goto failed; if (!_set_item (dict, "rel", val)) goto failed; break; case SDL_JOYHATMOTION: if (!_set_item (dict, "which", PyInt_FromLong (event->jhat.which))) goto failed; if (!_set_item (dict, "joy", PyInt_FromLong (event->jhat.which))) goto failed; if (!_set_item (dict, "hat", PyInt_FromLong (event->jhat.hat))) goto failed; if (!_set_item (dict, "value", PyInt_FromLong (event->jhat.value))) goto failed; break; case SDL_JOYBUTTONDOWN: case SDL_JOYBUTTONUP: if (!_set_item (dict, "which", PyInt_FromLong (event->jbutton.which))) goto failed; if (!_set_item (dict, "joy", PyInt_FromLong (event->jbutton.which))) goto failed; if (!_set_item (dict, "button", PyInt_FromLong (event->jbutton.button))) goto failed; if (!_set_item (dict, "state", PyInt_FromLong (event->jbutton.state))) goto failed; break; case SDL_VIDEORESIZE: if (!_set_item (dict, "w", PyInt_FromLong (event->resize.w))) goto failed; if (!_set_item (dict, "h", PyInt_FromLong (event->resize.h))) goto failed; val = Py_BuildValue ("(ii)", event->resize.w, event->resize.h); if (!val) goto failed; if (!_set_item (dict, "size", val)) goto failed; break; case SDL_SYSWMEVENT: #if defined(SDL_VIDEO_DRIVER_WINDIB) || defined(SDL_VIDEO_DRIVER_DDRAW) || defined(SDL_VIDEO_DRIVER_GAPI) if (!_set_item (dict, "hwnd", PyInt_FromLong ((long) event->syswm.msg->hwnd))) goto failed; if (!_set_item (dict, "msg", PyInt_FromLong (event->syswm.msg->msg))) goto failed; if (!_set_item (dict, "wparam", PyInt_FromLong (event->syswm.msg->wParam))) goto failed; if (!_set_item (dict, "lparam", PyInt_FromLong (event-> syswm.msg->lParam))) goto failed; #elif defined(SDL_VIDEO_DRIVER_X11) if (!_set_item (dict, "event", Text_FromUTF8AndSize ((char*) &(event->syswm.msg->event.xevent), sizeof (XEvent)))) goto failed; #endif break; case SDL_QUIT: break; case SDL_VIDEOEXPOSE: break; default: break; } return dict; failed: Py_XDECREF (val); Py_XDECREF (dict); return NULL; }
PyObject * Bytes_Format(PyObject *format, PyObject *args) { char *fmt, *res; Py_ssize_t arglen, argidx; Py_ssize_t reslen, rescnt, fmtcnt; int args_owned = 0; PyObject *result; PyObject *dict = NULL; if (format == NULL || !Bytes_Check(format) || args == NULL) { PyErr_BadInternalCall(); return NULL; } fmt = Bytes_AS_STRING(format); fmtcnt = Bytes_GET_SIZE(format); reslen = rescnt = fmtcnt + 100; result = Bytes_FromStringAndSize((char *)NULL, reslen); if (result == NULL) return NULL; res = Bytes_AsString(result); if (PyTuple_Check(args)) { arglen = PyTuple_GET_SIZE(args); argidx = 0; } else { arglen = -1; argidx = -2; } if (Py_TYPE(args)->tp_as_mapping && !PyTuple_Check(args) && !PyObject_TypeCheck(args, &Bytes_Type)) dict = args; while (--fmtcnt >= 0) { if (*fmt != '%') { if (--rescnt < 0) { rescnt = fmtcnt + 100; reslen += rescnt; if (_Bytes_Resize(&result, reslen)) return NULL; res = Bytes_AS_STRING(result) + reslen - rescnt; --rescnt; } *res++ = *fmt++; } else { /* Got a format specifier */ Py_ssize_t width = -1; int c = '\0'; PyObject *v = NULL; PyObject *temp = NULL; char *pbuf; Py_ssize_t len; fmt++; if (*fmt == '(') { char *keystart; Py_ssize_t keylen; PyObject *key; int pcount = 1; if (dict == NULL) { PyErr_SetString(PyExc_TypeError, "format requires a mapping"); goto error; } ++fmt; --fmtcnt; keystart = fmt; /* Skip over balanced parentheses */ while (pcount > 0 && --fmtcnt >= 0) { if (*fmt == ')') --pcount; else if (*fmt == '(') ++pcount; fmt++; } keylen = fmt - keystart - 1; if (fmtcnt < 0 || pcount > 0) { PyErr_SetString(PyExc_ValueError, "incomplete format key"); goto error; } key = Text_FromUTF8AndSize(keystart, keylen); if (key == NULL) goto error; if (args_owned) { Py_DECREF(args); args_owned = 0; } args = PyObject_GetItem(dict, key); Py_DECREF(key); if (args == NULL) { goto error; } args_owned = 1; arglen = -1; argidx = -2; } while (--fmtcnt >= 0) { c = *fmt++; break; } if (fmtcnt < 0) { PyErr_SetString(PyExc_ValueError, "incomplete format"); goto error; } if (c != '%') { v = getnextarg(args, arglen, &argidx); if (v == NULL) goto error; } switch (c) { case '%': pbuf = "%"; len = 1; break; case 's': /* only bytes! */ if (!Bytes_CheckExact(v)) { PyErr_Format(PyExc_ValueError, "only bytes values expected, got %s", Py_TYPE(v)->tp_name); goto error; } temp = v; Py_INCREF(v); pbuf = Bytes_AS_STRING(temp); len = Bytes_GET_SIZE(temp); break; default: PyErr_Format(PyExc_ValueError, "unsupported format character '%c' (0x%x) " "at index " FORMAT_CODE_PY_SSIZE_T, c, c, (Py_ssize_t)(fmt - 1 - Bytes_AsString(format))); goto error; } if (width < len) width = len; if (rescnt < width) { reslen -= rescnt; rescnt = width + fmtcnt + 100; reslen += rescnt; if (reslen < 0) { Py_DECREF(result); Py_XDECREF(temp); return PyErr_NoMemory(); } if (_Bytes_Resize(&result, reslen)) { Py_XDECREF(temp); return NULL; } res = Bytes_AS_STRING(result) + reslen - rescnt; } Py_MEMCPY(res, pbuf, len); res += len; rescnt -= len; while (--width >= len) { --rescnt; *res++ = ' '; } if (dict && (argidx < arglen) && c != '%') { PyErr_SetString(PyExc_TypeError, "not all arguments converted during string formatting"); Py_XDECREF(temp); goto error; } Py_XDECREF(temp); } /* '%' */ } /* until end */ if (argidx < arglen && !dict) { PyErr_SetString(PyExc_TypeError, "not all arguments converted during string formatting"); goto error; } if (args_owned) { Py_DECREF(args); } if (_Bytes_Resize(&result, reslen - rescnt)) return NULL; return result; error: Py_DECREF(result); if (args_owned) { Py_DECREF(args); } return NULL; }