diff options
author | Willian Padovani Germano <wpgermano@gmail.com> | 2004-01-23 22:24:45 +0300 |
---|---|---|
committer | Willian Padovani Germano <wpgermano@gmail.com> | 2004-01-23 22:24:45 +0300 |
commit | 23a3a51e16c72d347f15790ed9e4d7bdc2d4f44a (patch) | |
tree | dd3279b095031344d2bc4bb19eee263d5b1ef6bc /source/blender/python/api2_2x/Sys.c | |
parent | 5aad4bfceb454974e0800bfab08271c8b3baaff3 (diff) |
Blender's debug mode only worked on startup:
- G.f's G_DEBUG flag was being erased in blenkernel/intern/blender.c's
setup_app_data:
G.f= bfd->globalf
// added a line above it to fix this:
if (G.f & G_DEBUG) bfd->globalf |=G_DEBUG;
G.f= bfd->globalf;
BPython:
- debug info now only shown if Blender is started with '-d' option
- added ~/.blender/scripts to modules sys.path
- added two new functions to Blender.sys: basename and splitext
- added doc for Blender.sys, updated other docs
Diffstat (limited to 'source/blender/python/api2_2x/Sys.c')
-rw-r--r-- | source/blender/python/api2_2x/Sys.c | 141 |
1 files changed, 109 insertions, 32 deletions
diff --git a/source/blender/python/api2_2x/Sys.c b/source/blender/python/api2_2x/Sys.c index 29c54785595..99b5d3488b5 100644 --- a/source/blender/python/api2_2x/Sys.c +++ b/source/blender/python/api2_2x/Sys.c @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. * All rights reserved. @@ -29,65 +29,142 @@ * ***** END GPL/BL DUAL LICENSE BLOCK ***** */ +#include "BKE_utildefines.h" + #include "Sys.h" static PyObject *g_sysmodule = NULL; /* pointer to Blender.sys module */ PyObject *sys_Init (void) { - PyObject *submodule, *dict, *sep; + PyObject *submodule, *dict, *sep; - submodule = Py_InitModule3("Blender.sys", M_sys_methods, M_sys_doc); + submodule = Py_InitModule3("Blender.sys", M_sys_methods, M_sys_doc); - g_sysmodule = submodule; + g_sysmodule = submodule; - dict = PyModule_GetDict(submodule); + dict = PyModule_GetDict(submodule); #ifdef WIN32 - sep = Py_BuildValue("s", "\\"); + sep = Py_BuildValue("s", "\\"); #else - sep = Py_BuildValue("s", "/"); + sep = Py_BuildValue("s", "/"); #endif - if (sep) { - Py_INCREF(sep); - PyDict_SetItemString(dict, "dirsep" , sep); - PyDict_SetItemString(dict, "sep" , sep); - } + if (sep) { + Py_INCREF(sep); + PyDict_SetItemString(dict, "dirsep" , sep); + PyDict_SetItemString(dict, "sep" , sep); + } + + return submodule; +} + +static PyObject *M_sys_basename (PyObject *self, PyObject *args) +{ + PyObject *c; + + char *name, *p, basename[FILE_MAXFILE]; + char sep; + int n, len; + + if (!PyArg_ParseTuple(args, "s", &name)) + return EXPP_ReturnPyObjError (PyExc_TypeError, + "expected string argument"); - return submodule; + len = strlen(name); + + c = PyObject_GetAttrString (g_sysmodule, "dirsep"); + sep = PyString_AsString(c)[0]; + Py_DECREF(c); + + p = strrchr(name, sep); + + if (p) { + n = name + len - p - 1; /* - 1 because we don't want the sep */ + + if (n > FILE_MAXFILE) + return EXPP_ReturnPyObjError(PyExc_RuntimeError, "path too long"); + + strncpy(basename, p+1, n); /* + 1 to skip the sep */ + basename[n] = 0; + return Py_BuildValue("s", basename); + } + + return Py_BuildValue("s", name); } static PyObject *M_sys_dirname (PyObject *self, PyObject *args) { - PyObject *c; + PyObject *c; - char *name, *p, dirname[256]; - char sep; - int n; + char *name, *p, dirname[FILE_MAXDIR]; + char sep; + int n; - if (!PyArg_ParseTuple(args, "s", &name)) - return EXPP_ReturnPyObjError (PyExc_TypeError, - "expected string argument"); + if (!PyArg_ParseTuple(args, "s", &name)) + return EXPP_ReturnPyObjError (PyExc_TypeError, + "expected string argument"); - c = PyObject_GetAttrString (g_sysmodule, "dirsep"); - sep = PyString_AsString(c)[0]; - Py_DECREF(c); + c = PyObject_GetAttrString (g_sysmodule, "dirsep"); + sep = PyString_AsString(c)[0]; + Py_DECREF(c); - p = strrchr(name, sep); + p = strrchr(name, sep); - if (p) { + if (p) { n = p - name; - if (n > 255) { - PyErr_SetString(PyExc_RuntimeError, "path too long"); - return 0; - } + if (n > FILE_MAXDIR) + return EXPP_ReturnPyObjError (PyExc_RuntimeError, "path too long"); - strncpy(dirname, name, n); - dirname[n] = 0; - return Py_BuildValue("s", dirname); + strncpy(dirname, name, n); + dirname[n] = 0; + return Py_BuildValue("s", dirname); } return Py_BuildValue("s", "."); /* XXX need to fix this? (is crossplatform?)*/ } + +static PyObject *M_sys_splitext (PyObject *self, PyObject *args) +{ + PyObject *c; + + char *name, *dot, *p, path[FILE_MAXFILE], ext[FILE_MAXFILE]; + char sep; + int n, len; + + if (!PyArg_ParseTuple(args, "s", &name)) + return EXPP_ReturnPyObjError (PyExc_TypeError, + "expected string argument"); + + len = strlen(name); + + c = PyObject_GetAttrString (g_sysmodule, "dirsep"); + sep = PyString_AsString(c)[0]; + Py_DECREF(c); + + dot = strrchr(name, '.'); + + if (!dot) return Py_BuildValue("ss", name, ""); + + p = strrchr(name, sep); + + if (p) { + if (p > dot) return Py_BuildValue("ss", name, ""); + } + + n = name + len - dot; + + /* loong extensions are supported -- foolish, but Python's os.path.splitext + * supports them, so ... */ + if (n > FILE_MAXFILE || (len - n ) > FILE_MAXFILE) + EXPP_ReturnPyObjError(PyExc_RuntimeError, "path too long"); + + strncpy(ext, dot, n); + ext[n] = 0; + strncpy(path, name, dot - name); + path[dot - name] = 0; + + return Py_BuildValue("ss", path, ext); +} |