--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/symbian-qemu-0.9.1-12/python-2.6.1/Modules/fmmodule.c Fri Jul 31 15:01:17 2009 +0100
@@ -0,0 +1,269 @@
+
+/* Font Manager module */
+
+#include "Python.h"
+
+#include <gl.h>
+#include <device.h>
+#include <fmclient.h>
+
+
+/* Font Handle object implementation */
+
+typedef struct {
+ PyObject_HEAD
+ fmfonthandle fh_fh;
+} fhobject;
+
+static PyTypeObject Fhtype;
+
+#define is_fhobject(v) ((v)->ob_type == &Fhtype)
+
+static PyObject *
+newfhobject(fmfonthandle fh)
+{
+ fhobject *fhp;
+ if (fh == NULL) {
+ PyErr_SetString(PyExc_RuntimeError,
+ "error creating new font handle");
+ return NULL;
+ }
+ fhp = PyObject_New(fhobject, &Fhtype);
+ if (fhp == NULL)
+ return NULL;
+ fhp->fh_fh = fh;
+ return (PyObject *)fhp;
+}
+
+/* Font Handle methods */
+
+static PyObject *
+fh_scalefont(fhobject *self, PyObject *args)
+{
+ double size;
+ if (!PyArg_ParseTuple(args, "d", &size))
+ return NULL;
+ return newfhobject(fmscalefont(self->fh_fh, size));
+}
+
+/* XXX fmmakefont */
+
+static PyObject *
+fh_setfont(fhobject *self)
+{
+ fmsetfont(self->fh_fh);
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+static PyObject *
+fh_getfontname(fhobject *self)
+{
+ char fontname[256];
+ int len;
+ len = fmgetfontname(self->fh_fh, sizeof fontname, fontname);
+ if (len < 0) {
+ PyErr_SetString(PyExc_RuntimeError, "error in fmgetfontname");
+ return NULL;
+ }
+ return PyString_FromStringAndSize(fontname, len);
+}
+
+static PyObject *
+fh_getcomment(fhobject *self)
+{
+ char comment[256];
+ int len;
+ len = fmgetcomment(self->fh_fh, sizeof comment, comment);
+ if (len < 0) {
+ PyErr_SetString(PyExc_RuntimeError, "error in fmgetcomment");
+ return NULL;
+ }
+ return PyString_FromStringAndSize(comment, len);
+}
+
+static PyObject *
+fh_getfontinfo(fhobject *self)
+{
+ fmfontinfo info;
+ if (fmgetfontinfo(self->fh_fh, &info) < 0) {
+ PyErr_SetString(PyExc_RuntimeError, "error in fmgetfontinfo");
+ return NULL;
+ }
+ return Py_BuildValue("(llllllll)",
+ info.printermatched,
+ info.fixed_width,
+ info.xorig,
+ info.yorig,
+ info.xsize,
+ info.ysize,
+ info.height,
+ info.nglyphs);
+}
+
+#if 0
+static PyObject *
+fh_getwholemetrics(fhobject *self, PyObject *args)
+{
+}
+#endif
+
+static PyObject *
+fh_getstrwidth(fhobject *self, PyObject *args)
+{
+ char *str;
+ if (!PyArg_ParseTuple(args, "s", &str))
+ return NULL;
+ return PyInt_FromLong(fmgetstrwidth(self->fh_fh, str));
+}
+
+static PyMethodDef fh_methods[] = {
+ {"scalefont", (PyCFunction)fh_scalefont, METH_VARARGS},
+ {"setfont", (PyCFunction)fh_setfont, METH_NOARGS},
+ {"getfontname", (PyCFunction)fh_getfontname, METH_NOARGS},
+ {"getcomment", (PyCFunction)fh_getcomment, METH_NOARGS},
+ {"getfontinfo", (PyCFunction)fh_getfontinfo, METH_NOARGS},
+#if 0
+ {"getwholemetrics", (PyCFunction)fh_getwholemetrics, METH_VARARGS},
+#endif
+ {"getstrwidth", (PyCFunction)fh_getstrwidth, METH_VARARGS},
+ {NULL, NULL} /* sentinel */
+};
+
+static PyObject *
+fh_getattr(fhobject *fhp, char *name)
+{
+ return Py_FindMethod(fh_methods, (PyObject *)fhp, name);
+}
+
+static void
+fh_dealloc(fhobject *fhp)
+{
+ fmfreefont(fhp->fh_fh);
+ PyObject_Del(fhp);
+}
+
+static PyTypeObject Fhtype = {
+ PyObject_HEAD_INIT(&PyType_Type)
+ 0, /*ob_size*/
+ "fm.font handle", /*tp_name*/
+ sizeof(fhobject), /*tp_size*/
+ 0, /*tp_itemsize*/
+ /* methods */
+ (destructor)fh_dealloc, /*tp_dealloc*/
+ 0, /*tp_print*/
+ (getattrfunc)fh_getattr, /*tp_getattr*/
+ 0, /*tp_setattr*/
+ 0, /*tp_compare*/
+ 0, /*tp_repr*/
+};
+
+
+/* Font Manager functions */
+
+static PyObject *
+fm_init(PyObject *self)
+{
+ fminit();
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+static PyObject *
+fm_findfont(PyObject *self, PyObject *args)
+{
+ char *str;
+ if (!PyArg_ParseTuple(args, "s", &str))
+ return NULL;
+ return newfhobject(fmfindfont(str));
+}
+
+static PyObject *
+fm_prstr(PyObject *self, PyObject *args)
+{
+ char *str;
+ if (!PyArg_ParseTuple(args, "s", &str))
+ return NULL;
+ fmprstr(str);
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+/* XXX This uses a global variable as temporary! Not re-entrant! */
+
+static PyObject *fontlist;
+
+static void
+clientproc(char *fontname)
+{
+ int err;
+ PyObject *v;
+ if (fontlist == NULL)
+ return;
+ v = PyString_FromString(fontname);
+ if (v == NULL)
+ err = -1;
+ else {
+ err = PyList_Append(fontlist, v);
+ Py_DECREF(v);
+ }
+ if (err != 0) {
+ Py_DECREF(fontlist);
+ fontlist = NULL;
+ }
+}
+
+static PyObject *
+fm_enumerate(PyObject *self)
+{
+ PyObject *res;
+ fontlist = PyList_New(0);
+ if (fontlist == NULL)
+ return NULL;
+ fmenumerate(clientproc);
+ res = fontlist;
+ fontlist = NULL;
+ return res;
+}
+
+static PyObject *
+fm_setpath(PyObject *self, PyObject *args)
+{
+ char *str;
+ if (!PyArg_ParseTuple(args, "s", &str))
+ return NULL;
+ fmsetpath(str);
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+static PyObject *
+fm_fontpath(PyObject *self)
+{
+ return PyString_FromString(fmfontpath());
+}
+
+static PyMethodDef fm_methods[] = {
+ {"init", fm_init, METH_NOARGS},
+ {"findfont", fm_findfont, METH_VARARGS},
+ {"enumerate", fm_enumerate, METH_NOARGS},
+ {"prstr", fm_prstr, METH_VARARGS},
+ {"setpath", fm_setpath, METH_VARARGS},
+ {"fontpath", fm_fontpath, METH_NOARGS},
+ {NULL, NULL} /* sentinel */
+};
+
+
+void
+initfm(void)
+{
+
+ if (PyErr_WarnPy3k("the fm module has been removed in "
+ "Python 3.0", 2) < 0)
+ return;
+
+ Py_InitModule("fm", fm_methods);
+ if (m == NULL)
+ return;
+ fminit();
+}