Implemented enough functionality to actually execute Python from within
authorMichel Selten <michel@mselten.demon.nl>
Wed, 26 Feb 2003 19:22:24 +0000 (19:22 +0000)
committerMichel Selten <michel@mselten.demon.nl>
Wed, 26 Feb 2003 19:22:24 +0000 (19:22 +0000)
Blender.
* Moved api2_2x/interface.c to ./BPY_interface.c
  This will be the general api layer from which all variants of the Blender
  api. Currently only the 2.2x variant is initialised.
* Used swig (www.swig.org) to create Python wrappers for a couple of dummy
  functions.
* Started implementation of the Blender and Blender.Object modules.

Michel

source/blender/python/BPY_extern.h
source/blender/python/BPY_interface.c [new file with mode: 0644]
source/blender/python/api2_2x/Blender.c [new file with mode: 0644]
source/blender/python/api2_2x/Blender.i [new file with mode: 0644]
source/blender/python/api2_2x/Blender_wrap.c [new file with mode: 0644]
source/blender/python/api2_2x/Object.c [new file with mode: 0644]
source/blender/python/api2_2x/Object.i [new file with mode: 0644]
source/blender/python/api2_2x/Object_wrap.c [new file with mode: 0644]
source/blender/python/api2_2x/interface.c
source/blender/python/api2_2x/interface.h [new file with mode: 0644]
source/blender/python/api2_2x/modules.h [new file with mode: 0644]

index 02eeaf6963c404d10c1fcc03fcdf7c45c3c0dc4e..b2747ef0ce6f8fe5889cfe149221a5b87bb6e9d0 100644 (file)
  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
  * All rights reserved.
  *
- * The Original Code is: all of this file.
+ * The Original Code is: source/blender/bpyton/include/BPY_extern.h
  *
- * Contributor(s): none yet.
+ * Contributor(s): Michel Selten
  *
  * ***** END GPL/BL DUAL LICENSE BLOCK *****
  */
 
-struct Text;
-struct ID;
-struct ScriptLink;
-struct ListBase;
-struct SpaceText;
+struct Text;       /* defined in DNA_text_types.h        */
+struct ID;         /* defined in DNA_ID.h                */
+struct ScriptLink; /* defined in DNA_scriptlink_types.h  */
+struct ListBase;   /* defined in DNA_listBase.h          */
+struct SpaceText;  /* defined in DNA_space_types.h       */
+/*
 struct _object;  // forward declaration for PyObject !
-
+*/
 
 void BPY_start_python(void);
 void BPY_end_python(void);
diff --git a/source/blender/python/BPY_interface.c b/source/blender/python/BPY_interface.c
new file mode 100644 (file)
index 0000000..87acc18
--- /dev/null
@@ -0,0 +1,270 @@
+/* 
+ *
+ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License.  See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * This is a new part of Blender.
+ *
+ * Contributor(s): Michel Selten
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+#include <Python.h>
+#include <stdio.h>
+
+#include <BKE_text.h>
+#include <DNA_ID.h>
+#include <DNA_space_types.h>
+#include <DNA_text_types.h>
+
+#include <BPY_extern.h>
+
+#include "api2_2x/interface.h"
+
+/*
+ * Structure definitions
+ */
+#define FILENAME_LENGTH 24
+typedef struct _ScriptError {
+       char filename[FILENAME_LENGTH];
+       int lineno;
+} ScriptError;
+
+/*
+ * Global variables
+ */
+ScriptError g_script_error;
+
+/*
+ * Function prototypes
+ */
+PyObject * RunPython(Text *text, PyObject *globaldict);
+char *     GetName(Text *text);
+
+/*
+ * Description: This function will initialise Python and all the implemented
+ *              api variations.
+ * Notes:       Currently only the api for 2.2x will be initialised.
+ */   
+void BPY_start_python(void)
+{
+       printf ("In BPY_start_python\n");
+/* TODO: Shouldn't "blender" be replaced by PACKAGE ?? (config.h) */
+       Py_SetProgramName("blender");
+
+       Py_Initialize ();
+
+       initBlenderApi2_2x ();
+
+       return;
+}
+
+/*
+ * Description:
+ * Notes:       Not implemented yet
+ */   
+void BPY_end_python(void)
+{
+       printf ("In BPY_end_python\n");
+       return;
+}
+
+/*
+ * Description: This function will return the linenumber on which an error
+ *              has occurred in the Python script.
+ */   
+int BPY_Err_getLinenumber(void)
+{
+       printf ("In BPY_Err_getLinenumber\n");
+       return g_script_error.lineno;
+}
+
+/*
+ * Description: This function will return the filename of the python script.
+ */   
+const char *BPY_Err_getFilename(void)
+{
+       printf ("In BPY_Err_getFilename\n");
+       return g_script_error.filename;
+}
+
+/*
+ * Description: This function executes the script passed by st.
+ * Notes:       Currently, the script is compiled each time it is executed,
+ *              This should be optimized to store the compiled bytecode as has
+ *              been done by the previous implementation.
+ */   
+struct _object *BPY_txt_do_python(struct SpaceText* st)
+{
+       PyObject *      dict;
+       PyObject *      ret;
+       printf ("In BPY_txt_do_python\n");
+
+       if (!st->text)
+       {
+               return NULL;
+       }
+
+       dict = PyModule_GetDict(PyImport_AddModule("__main__"));
+       /* dict = newGlobalDictionary(); */
+       ret = RunPython (st->text, dict);
+
+       return dict;
+}
+
+/*
+ * Description:
+ * Notes:       Not implemented yet
+ */   
+void BPY_free_compiled_text(struct Text* text)
+{
+       printf ("In BPY_free_compiled_text\n");
+       return;
+}
+
+/*
+ * Description:
+ * Notes:       Not implemented yet
+ */   
+void BPY_clear_bad_scriptlinks(struct Text *byebye)
+{
+       printf ("In BPY_clear_bad_scriptlinks\n");
+       return;
+}
+
+/*
+ * Description:
+ * Notes:       Not implemented yet
+ */   
+void BPY_do_all_scripts(short event)
+{
+       printf ("In BPY_do_all_scripts(event=%d)\n",event);
+       return;
+}
+
+/*
+ * Description:
+ * Notes:       Not implemented yet
+ */   
+void BPY_do_pyscript(struct ID *id, short event)
+{
+       printf ("In BPY_do_pyscript(id=?, event=%d)\n",event);
+       return;
+}
+
+/*
+ * Description:
+ * Notes:       Not implemented yet
+ */   
+void BPY_free_scriptlink(struct ScriptLink *slink)
+{
+       printf ("In BPY_free_scriptlink\n");
+       return;
+}
+
+/*
+ * Description:
+ * Notes:       Not implemented yet
+ */   
+void BPY_copy_scriptlink(struct ScriptLink *scriptlink)
+{
+       printf ("In BPY_copy_scriptlink\n");
+       return;
+}
+
+/*
+ * Description:
+ * Notes:       Not implemented yet
+ */   
+int BPY_call_importloader(char *name)
+{
+       printf ("In BPY_call_importloader(name=%s)\n",name);
+       return (0);
+}
+
+/*
+ * Description:
+ * Notes:       Not implemented yet
+ */   
+int BPY_spacetext_is_pywin(struct SpaceText *st)
+{
+       /* No printf is done here because it is called with every mouse move */
+       return (0);
+}
+
+/*
+ * Description:
+ * Notes:       Not implemented yet
+ */   
+void BPY_spacetext_do_pywin_draw(struct SpaceText *st)
+{
+       printf ("In BPY_spacetext_do_pywin_draw\n");
+       return;
+}
+
+/*
+ * Description:
+ * Notes:       Not implemented yet
+ */   
+void BPY_spacetext_do_pywin_event(struct SpaceText *st,
+                                  unsigned short event,
+                                  short val)
+{
+       printf ("In BPY_spacetext_do_pywin_event(st=?, event=%d, val=%d)\n",
+               event, val);
+       return;
+}
+
+/*
+ * Private functions
+ */
+
+/*
+ * Description: This function executes the python script passed by text.
+ *              The Python dictionary containing global variables needs to
+ *              be passed in globaldict.
+ */   
+PyObject * RunPython(Text *text, PyObject *globaldict)
+{
+       PyObject * ret;
+       char     * buf;
+
+       printf("Run Python script \"%s\" ...\n", GetName(text));
+       buf = txt_to_buf(text);
+       ret = PyRun_String (buf, Py_file_input, globaldict, globaldict);
+
+       MEM_freeN (buf);
+       return ret;
+}
+
+/*
+ * Description: This function returns the value of the name field of the
+ *              given Text struct.
+ */   
+char * GetName(Text *text)
+{
+       return (text->id.name+2);
+}
+
diff --git a/source/blender/python/api2_2x/Blender.c b/source/blender/python/api2_2x/Blender.c
new file mode 100644 (file)
index 0000000..c4f9f1b
--- /dev/null
@@ -0,0 +1,41 @@
+/* 
+ *
+ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License.  See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * This is a new part of Blender.
+ *
+ * Contributor(s): Michel Selten
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+*/
+
+#include <stdio.h>
+
+void BlenderCopy (void)
+{
+       printf ("self.copy\n");
+}
+/* The following line has to be copied to Blender_wrap.c each time swig is
+   called to generate new wrapper functions.
+       PyDict_SetItemString (d, "Object", initObject());
+*/
diff --git a/source/blender/python/api2_2x/Blender.i b/source/blender/python/api2_2x/Blender.i
new file mode 100644 (file)
index 0000000..3f3a9b4
--- /dev/null
@@ -0,0 +1,34 @@
+/* 
+ *
+ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License.  See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * This is a new part of Blender.
+ *
+ * Contributor(s): Michel Selten
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+*/
+
+%module Blender
+
+void copy (void);
diff --git a/source/blender/python/api2_2x/Blender_wrap.c b/source/blender/python/api2_2x/Blender_wrap.c
new file mode 100644 (file)
index 0000000..5cd2fe6
--- /dev/null
@@ -0,0 +1,680 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.10u-20030216-1639
+ * 
+ * This file is not intended to be easily readable and contains a number of 
+ * coding conventions designed to improve portability and efficiency. Do not make
+ * changes to this file unless you know what you are doing--modify the SWIG 
+ * interface file instead. 
+ * ----------------------------------------------------------------------------- */
+
+#define SWIGPYTHON
+/***********************************************************************
+ * common.swg
+ *
+ *     This file contains generic SWIG runtime support for pointer
+ *     type checking as well as a few commonly used macros to control
+ *     external linkage.
+ *
+ * Author : David Beazley (beazley@cs.uchicago.edu)
+ *
+ * Copyright (c) 1999-2000, The University of Chicago
+ * 
+ * This file may be freely redistributed without license or fee provided
+ * this copyright message remains intact.
+ ************************************************************************/
+
+#include <string.h>
+
+#if defined(_WIN32) || defined(__WIN32__)
+#       if defined(_MSC_VER)
+#               if defined(STATIC_LINKED)
+#                       define SWIGEXPORT(a) a
+#               else
+#                       define SWIGEXPORT(a) __declspec(dllexport) a
+#               endif
+#       else
+#               if defined(__BORLANDC__)
+#                       define SWIGEXPORT(a) a _export
+#               else
+#                       define SWIGEXPORT(a) a
+#       endif
+#endif
+#else
+#       define SWIGEXPORT(a) a
+#endif
+
+#ifdef SWIG_GLOBAL
+#define SWIGRUNTIME(a) SWIGEXPORT(a)
+#else
+#define SWIGRUNTIME(a) static a
+#endif
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void *(*swig_converter_func)(void *);
+
+typedef struct swig_type_info {
+  const char             *name;                 
+  swig_converter_func     converter;
+  const char             *str;
+  struct swig_type_info  *next;
+  struct swig_type_info  *prev;
+  void                   *clientdata;  
+} swig_type_info;
+
+#ifdef SWIG_NOINCLUDE
+SWIGEXPORT(swig_type_info *) SWIG_TypeRegister(swig_type_info *);
+SWIGEXPORT(swig_type_info *) SWIG_TypeCheck(char *c, swig_type_info *);
+SWIGEXPORT(void *) SWIG_TypeCast(swig_type_info *, void *);
+SWIGEXPORT(swig_type_info *) SWIG_TypeQuery(const char *);
+SWIGEXPORT(void) SWIG_TypeClientData(swig_type_info *, void *);
+#else
+
+static swig_type_info *swig_type_list = 0;
+
+/* Register a type mapping with the type-checking */
+SWIGRUNTIME(swig_type_info *)
+SWIG_TypeRegister(swig_type_info *ti)
+{
+  swig_type_info *tc, *head, *ret, *next;
+  /* Check to see if this type has already been registered */
+  tc = swig_type_list;
+  while (tc) {
+    if (strcmp(tc->name, ti->name) == 0) {
+      /* Already exists in the table.  Just add additional types to the list */
+      head = tc;
+      next = tc->next;
+      goto l1;
+    }
+    tc = tc->prev;
+  }
+  head = ti;
+  next = 0;
+
+  /* Place in list */
+  ti->prev = swig_type_list;
+  swig_type_list = ti;
+
+  /* Build linked lists */
+ l1:
+  ret = head;
+  tc = ti + 1;
+  /* Patch up the rest of the links */
+  while (tc->name) {
+    head->next = tc;
+    tc->prev = head;
+    head = tc;
+    tc++;
+  }
+  head->next = next;
+  return ret;
+}
+
+/* Check the typename */
+SWIGRUNTIME(swig_type_info *) 
+SWIG_TypeCheck(char *c, swig_type_info *ty)
+{
+  swig_type_info *s;
+  if (!ty) return 0;        /* Void pointer */
+  s = ty->next;             /* First element always just a name */
+  while (s) {
+    if (strcmp(s->name,c) == 0) {
+      if (s == ty->next) return s;
+      /* Move s to the top of the linked list */
+      s->prev->next = s->next;
+      if (s->next) {
+       s->next->prev = s->prev;
+      }
+      /* Insert s as second element in the list */
+      s->next = ty->next;
+      if (ty->next) ty->next->prev = s;
+      ty->next = s;
+      return s;
+    }
+    s = s->next;
+  }
+  return 0;
+}
+
+/* Cast a pointer (needed for C++ inheritance */
+SWIGRUNTIME(void *) 
+SWIG_TypeCast(swig_type_info *ty, void *ptr) 
+{
+  if ((!ty) || (!ty->converter)) return ptr;
+  return (*ty->converter)(ptr);
+}
+
+/* Search for a swig_type_info structure */
+SWIGRUNTIME(swig_type_info *)
+SWIG_TypeQuery(const char *name) {
+  swig_type_info *ty = swig_type_list;
+  while (ty) {
+    if (ty->str && (strcmp(name,ty->str) == 0)) return ty;
+    if (ty->name && (strcmp(name,ty->name) == 0)) return ty;
+    ty = ty->prev;
+  }
+  return 0;
+}
+
+/* Set the clientdata field for a type */
+SWIGRUNTIME(void)
+SWIG_TypeClientData(swig_type_info *ti, void *clientdata) {
+  swig_type_info *tc, *equiv;
+  if (ti->clientdata) return;
+  ti->clientdata = clientdata;
+  equiv = ti->next;
+  while (equiv) {
+    if (!equiv->converter) {
+      tc = swig_type_list;
+      while (tc) {
+       if ((strcmp(tc->name, equiv->name) == 0))
+         SWIG_TypeClientData(tc,clientdata);
+       tc = tc->prev;
+      }
+    }
+    equiv = equiv->next;
+  }
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+
+/***********************************************************************
+ * python.swg
+ *
+ *     This file contains the runtime support for Python modules
+ *     and includes code for managing global variables and pointer
+ *     type checking.
+ *
+ * Author : David Beazley (beazley@cs.uchicago.edu)
+ ************************************************************************/
+
+#include <stdlib.h>
+#include "Python.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SWIG_PY_INT     1
+#define SWIG_PY_FLOAT   2
+#define SWIG_PY_STRING  3
+#define SWIG_PY_POINTER 4
+#define SWIG_PY_BINARY  5
+
+/* Constant information structure */
+typedef struct swig_const_info {
+    int type;
+    char *name;
+    long lvalue;
+    double dvalue;
+    void   *pvalue;
+    swig_type_info **ptype;
+} swig_const_info;
+
+#ifdef SWIG_NOINCLUDE
+
+SWIGEXPORT(PyObject *)        SWIG_newvarlink();
+SWIGEXPORT(void)              SWIG_addvarlink(PyObject *, char *, PyObject *(*)(void), int (*)(PyObject *));
+SWIGEXPORT(int)               SWIG_ConvertPtr(PyObject *, void **, swig_type_info *, int);
+SWIGEXPORT(int)               SWIG_ConvertPacked(PyObject *, void *, int sz, swig_type_info *, int);
+SWIGEXPORT(char *)            SWIG_PackData(char *c, void *, int);
+SWIGEXPORT(char *)            SWIG_UnpackData(char *c, void *, int);
+SWIGEXPORT(PyObject *)        SWIG_NewPointerObj(void *, swig_type_info *,int own);
+SWIGEXPORT(PyObject *)        SWIG_NewPackedObj(void *, int sz, swig_type_info *);
+SWIGEXPORT(void)              SWIG_InstallConstants(PyObject *d, swig_const_info constants[]);
+SWIGEXPORT(PyObject *)        SWIG_MakeShadow(PyObject *robj, swig_type_info *type, int own);
+#else
+
+/* -----------------------------------------------------------------------------
+ * global variable support code.
+ * ----------------------------------------------------------------------------- */
+
+typedef struct swig_globalvar {   
+  char       *name;                  /* Name of global variable */
+  PyObject *(*get_attr)(void);       /* Return the current value */
+  int       (*set_attr)(PyObject *); /* Set the value */
+  struct swig_globalvar *next;
+} swig_globalvar;
+
+typedef struct swig_varlinkobject {
+  PyObject_HEAD
+  swig_globalvar *vars;
+} swig_varlinkobject;
+
+static PyObject *
+swig_varlink_repr(swig_varlinkobject *v) {
+  v = v;
+  return PyString_FromString("<Global variables>");
+}
+
+static int
+swig_varlink_print(swig_varlinkobject *v, FILE *fp, int flags) {
+  swig_globalvar  *var;
+  flags = flags;
+  fprintf(fp,"Global variables { ");
+  for (var = v->vars; var; var=var->next) {
+    fprintf(fp,"%s", var->name);
+    if (var->next) fprintf(fp,", ");
+  }
+  fprintf(fp," }\n");
+  return 0;
+}
+
+static PyObject *
+swig_varlink_getattr(swig_varlinkobject *v, char *n) {
+  swig_globalvar *var = v->vars;
+  while (var) {
+    if (strcmp(var->name,n) == 0) {
+      return (*var->get_attr)();
+    }
+    var = var->next;
+  }
+  PyErr_SetString(PyExc_NameError,"Unknown C global variable");
+  return NULL;
+}
+
+static int
+swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) {
+  swig_globalvar *var = v->vars;
+  while (var) {
+    if (strcmp(var->name,n) == 0) {
+      return (*var->set_attr)(p);
+    }
+    var = var->next;
+  }
+  PyErr_SetString(PyExc_NameError,"Unknown C global variable");
+  return 1;
+}
+
+statichere PyTypeObject varlinktype = {
+  PyObject_HEAD_INIT(0)              
+  0,
+  (char *)"swigvarlink",                      /* Type name    */
+  sizeof(swig_varlinkobject),         /* Basic size   */
+  0,                                  /* Itemsize     */
+  0,                                  /* Deallocator  */ 
+  (printfunc) swig_varlink_print,     /* Print        */
+  (getattrfunc) swig_varlink_getattr, /* get attr     */
+  (setattrfunc) swig_varlink_setattr, /* Set attr     */
+  0,                                  /* tp_compare   */
+  (reprfunc) swig_varlink_repr,       /* tp_repr      */    
+  0,                                  /* tp_as_number */
+  0,                                  /* tp_as_mapping*/
+  0,                                  /* tp_hash      */
+};
+
+/* Create a variable linking object for use later */
+SWIGRUNTIME(PyObject *)
+SWIG_newvarlink(void) {
+  swig_varlinkobject *result = 0;
+  result = PyMem_NEW(swig_varlinkobject,1);
+  varlinktype.ob_type = &PyType_Type;    /* Patch varlinktype into a PyType */
+  result->ob_type = &varlinktype;
+  result->vars = 0;
+  result->ob_refcnt = 0;
+  Py_XINCREF((PyObject *) result);
+  return ((PyObject*) result);
+}
+
+SWIGRUNTIME(void)
+SWIG_addvarlink(PyObject *p, char *name,
+          PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) {
+  swig_varlinkobject *v;
+  swig_globalvar *gv;
+  v= (swig_varlinkobject *) p;
+  gv = (swig_globalvar *) malloc(sizeof(swig_globalvar));
+  gv->name = (char *) malloc(strlen(name)+1);
+  strcpy(gv->name,name);
+  gv->get_attr = get_attr;
+  gv->set_attr = set_attr;
+  gv->next = v->vars;
+  v->vars = gv;
+}
+
+/* Pack binary data into a string */
+SWIGRUNTIME(char *)
+SWIG_PackData(char *c, void *ptr, int sz) {
+  static char hex[17] = "0123456789abcdef";
+  int i;
+  unsigned char *u = (unsigned char *) ptr;
+  register unsigned char uu;
+  for (i = 0; i < sz; i++,u++) {
+    uu = *u;
+    *(c++) = hex[(uu & 0xf0) >> 4];
+    *(c++) = hex[uu & 0xf];
+  }
+  return c;
+}
+
+/* Unpack binary data from a string */
+SWIGRUNTIME(char *)
+SWIG_UnpackData(char *c, void *ptr, int sz) {
+  register unsigned char uu;
+  register int d;
+  unsigned char *u = (unsigned char *) ptr;
+  int i;
+  for (i = 0; i < sz; i++, u++) {
+    d = *(c++);
+    if ((d >= '0') && (d <= '9'))
+      uu = ((d - '0') << 4);
+    else if ((d >= 'a') && (d <= 'f'))
+      uu = ((d - ('a'-10)) << 4);
+    d = *(c++);
+    if ((d >= '0') && (d <= '9'))
+      uu |= (d - '0');
+    else if ((d >= 'a') && (d <= 'f'))
+      uu |= (d - ('a'-10));
+    *u = uu;
+  }
+  return c;
+}
+
+/* Convert a pointer value */
+SWIGRUNTIME(int)
+SWIG_ConvertPtr(PyObject *obj, void **ptr, swig_type_info *ty, int flags) {
+  swig_type_info *tc;
+  char  *c;
+  static PyObject *SWIG_this = 0;
+  int    newref = 0;
+
+  if (!obj) return 0;
+  if (obj == Py_None) {
+    *ptr = 0;
+    return 0;
+  }
+#ifdef SWIG_COBJECT_TYPES
+  if (!(PyCObject_Check(obj))) {
+    if (!SWIG_this)
+      SWIG_this = PyString_InternFromString("this");
+    obj = PyObject_GetAttr(obj,SWIG_this);
+    newref = 1;
+    if (!obj) goto type_error;
+    if (!PyCObject_Check(obj)) {
+      Py_DECREF(obj);
+      goto type_error;
+    }
+  } 
+  *ptr = PyCObject_AsVoidPtr(obj);
+  c = (char *) PyCObject_GetDesc(obj);
+  if (newref) Py_DECREF(obj);
+  goto cobject;
+#else
+  if (!(PyString_Check(obj))) {
+    if (!SWIG_this)
+      SWIG_this = PyString_InternFromString("this");
+    obj = PyObject_GetAttr(obj,SWIG_this);
+    newref = 1;
+    if (!obj) goto type_error;
+    if (!PyString_Check(obj)) {
+      Py_DECREF(obj);
+      goto type_error;
+    }
+  } 
+  c = PyString_AsString(obj);
+  /* Pointer values must start with leading underscore */
+  if (*c != '_') {
+    *ptr = (void *) 0;
+    if (strcmp(c,"NULL") == 0) {
+      if (newref) Py_DECREF(obj);
+      return 0;
+    } else {
+      if (newref) Py_DECREF(obj);
+      goto type_error;
+    }
+  }
+  c++;
+  c = SWIG_UnpackData(c,ptr,sizeof(void *));
+  if (newref) Py_DECREF(obj);
+#endif
+
+#ifdef SWIG_COBJECT_TYPES
+cobject:
+#endif
+
+  if (ty) {
+    tc = SWIG_TypeCheck(c,ty);
+    if (!tc) goto type_error;
+    *ptr = SWIG_TypeCast(tc,(void*) *ptr);
+  }
+  return 0;
+
+type_error:
+  if (flags) {
+    if (ty) {
+      char *temp = (char *) malloc(64+strlen(ty->name));
+      sprintf(temp,"Type error. Expected %s", ty->name);
+      PyErr_SetString(PyExc_TypeError, temp);
+      free((char *) temp);
+    } else {
+      PyErr_SetString(PyExc_TypeError,"Expected a pointer");
+    }
+  }
+  return -1;
+}
+
+/* Convert a packed value value */
+SWIGRUNTIME(int)
+SWIG_ConvertPacked(PyObject *obj, void *ptr, int sz, swig_type_info *ty, int flags) {
+  swig_type_info *tc;
+  char  *c;
+
+  if ((!obj) || (!PyString_Check(obj))) goto type_error;
+  c = PyString_AsString(obj);
+  /* Pointer values must start with leading underscore */
+  if (*c != '_') goto type_error;
+  c++;
+  c = SWIG_UnpackData(c,ptr,sz);
+  if (ty) {
+    tc = SWIG_TypeCheck(c,ty);
+    if (!tc) goto type_error;
+  }
+  return 0;
+
+type_error:
+
+  if (flags) {
+    if (ty) {
+      char *temp = (char *) malloc(64+strlen(ty->name));
+      sprintf(temp,"Type error. Expected %s", ty->name);
+      PyErr_SetString(PyExc_TypeError, temp);
+      free((char *) temp);
+    } else {
+      PyErr_SetString(PyExc_TypeError,"Expected a pointer");
+    }
+  }
+  return -1;
+}
+
+/* Create a new pointer object */
+SWIGRUNTIME(PyObject *)
+SWIG_NewPointerObj(void *ptr, swig_type_info *type, int own) {
+  PyObject *robj;
+  if (!ptr) {
+    Py_INCREF(Py_None);
+    return Py_None;
+  }
+#ifdef SWIG_COBJECT_TYPES
+  robj = PyCObject_FromVoidPtrAndDesc((void *) ptr, (char *) type->name, NULL);
+#else
+  {
+    char result[512];
+    char *r = result;
+    *(r++) = '_';
+    r = SWIG_PackData(r,&ptr,sizeof(void *));
+    strcpy(r,type->name);
+    robj = PyString_FromString(result);
+  }
+#endif
+  if (!robj || (robj == Py_None)) return robj;
+  if (type->clientdata) {
+    PyObject *inst;
+    PyObject *args = Py_BuildValue((char*)"(O)", robj);
+    Py_DECREF(robj);
+    inst = PyObject_CallObject((PyObject *) type->clientdata, args);
+    Py_DECREF(args);
+    if (own) {
+      PyObject *n = PyInt_FromLong(1);
+      PyObject_SetAttrString(inst,(char*)"thisown",n);
+      Py_DECREF(n);
+    }
+    robj = inst;
+  }
+  return robj;
+}
+
+SWIGRUNTIME(PyObject *)
+SWIG_MakeShadow(PyObject *robj, swig_type_info *type, int own) {
+  if (!robj || (robj == Py_None)) return robj;
+  if (type->clientdata) {
+    PyInstanceObject *inst;
+    inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
+    if (!inst) return robj;
+    inst->in_dict = PyDict_New();
+    inst->in_class = (PyClassObject *) type->clientdata;
+    Py_INCREF(inst->in_class);
+    PyObject_SetAttrString((PyObject *)inst,(char*)"this",robj);
+    Py_DECREF(robj);
+    if (own) {
+      PyObject *n = PyInt_FromLong(1);
+      PyObject_SetAttrString((PyObject *)inst,(char*)"thisown",n);
+      Py_DECREF(n);
+    }
+    robj = (PyObject *) inst;
+    Py_INCREF(robj);
+  }
+  return robj;
+}
+
+SWIGRUNTIME(PyObject *)
+SWIG_NewPackedObj(void *ptr, int sz, swig_type_info *type) {
+  char result[1024];
+  char *r = result;
+  if ((2*sz + 1 + strlen(type->name)) > 1000) return 0;
+  *(r++) = '_';
+  r = SWIG_PackData(r,ptr,sz);
+  strcpy(r,type->name);
+  return PyString_FromString(result);
+}
+
+/* Install Constants */
+SWIGRUNTIME(void)
+SWIG_InstallConstants(PyObject *d, swig_const_info constants[]) {
+  int i;
+  PyObject *obj;
+  for (i = 0; constants[i].type; i++) {
+    switch(constants[i].type) {
+    case SWIG_PY_INT:
+      obj = PyInt_FromLong(constants[i].lvalue);
+      break;
+    case SWIG_PY_FLOAT:
+      obj = PyFloat_FromDouble(constants[i].dvalue);
+      break;
+    case SWIG_PY_STRING:
+      obj = PyString_FromString((char *) constants[i].pvalue);
+      break;
+    case SWIG_PY_POINTER:
+      obj = SWIG_NewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0);
+      break;
+    case SWIG_PY_BINARY:
+      obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype));
+      break;
+    default:
+      obj = 0;
+      break;
+    }
+    if (obj) {
+      PyDict_SetItemString(d,constants[i].name,obj);
+      Py_DECREF(obj);
+    }
+  }
+}
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+
+
+
+
+
+/* -------- TYPES TABLE (BEGIN) -------- */
+
+static swig_type_info *swig_types[1];
+
+/* -------- TYPES TABLE (END) -------- */
+
+#define SWIG_init    initBlender
+
+#define SWIG_name    "Blender"
+#ifdef __cplusplus
+extern "C" {
+#endif
+static PyObject *_wrap_copy(PyObject *self, PyObject *args) {
+    PyObject *resultobj;
+    
+    if(!PyArg_ParseTuple(args,(char *)":copy")) return NULL;
+    BlenderCopy();
+    
+    Py_INCREF(Py_None); resultobj = Py_None;
+    return resultobj;
+}
+
+
+static PyMethodDef SwigMethods[] = {
+        { (char *)"copy", _wrap_copy, METH_VARARGS },
+        { NULL, NULL }
+};
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
+
+
+static swig_type_info *swig_types_initial[] = {
+0
+};
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */
+
+static swig_const_info swig_const_table[] = {
+{0}};
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef __cplusplus
+extern "C"
+#endif
+SWIGEXPORT(void) SWIG_init(void) {
+    static PyObject *SWIG_globals = 0;
+    PyObject *m, *d;
+    int       i;
+    SWIG_globals = SWIG_newvarlink();
+    m = Py_InitModule((char *) SWIG_name, SwigMethods);
+    d = PyModule_GetDict(m);
+       PyDict_SetItemString (d, "Object", initObject());
+    
+    for (i = 0; swig_types_initial[i]; i++) {
+        swig_types[i] = SWIG_TypeRegister(swig_types_initial[i]);
+    }
+    SWIG_InstallConstants(d,swig_const_table);
+    
+}
+
diff --git a/source/blender/python/api2_2x/Object.c b/source/blender/python/api2_2x/Object.c
new file mode 100644 (file)
index 0000000..bd897e8
--- /dev/null
@@ -0,0 +1,48 @@
+/* 
+ *
+ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License.  See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * This is a new part of Blender.
+ *
+ * Contributor(s): Michel Selten
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+*/
+
+#include <stdio.h>
+
+void copy (void)
+{
+       printf ("Object.copy\n");
+}
+
+void shareFrom (int object)
+{
+       printf ("Object.shareFrom(%d)\n", object);
+}
+
+int getMatrix (void)
+{
+       printf ("Object.getMatrix\n");
+       return (0);
+}
diff --git a/source/blender/python/api2_2x/Object.i b/source/blender/python/api2_2x/Object.i
new file mode 100644 (file)
index 0000000..e84970d
--- /dev/null
@@ -0,0 +1,39 @@
+/* 
+ *
+ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License.  See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * This is a new part of Blender.
+ *
+ * Contributor(s): Michel Selten
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+*/
+
+%module Object
+
+%{
+#include "modules.h"
+%}
+void copy (void);
+void shareFrom (int object);
+int getMatrix (void);
diff --git a/source/blender/python/api2_2x/Object_wrap.c b/source/blender/python/api2_2x/Object_wrap.c
new file mode 100644 (file)
index 0000000..ff6877d
--- /dev/null
@@ -0,0 +1,706 @@
+/* ----------------------------------------------------------------------------
+ * This file was automatically generated by SWIG (http://www.swig.org).
+ * Version 1.3.10u-20030216-1639
+ * 
+ * This file is not intended to be easily readable and contains a number of 
+ * coding conventions designed to improve portability and efficiency. Do not make
+ * changes to this file unless you know what you are doing--modify the SWIG 
+ * interface file instead. 
+ * ----------------------------------------------------------------------------- */
+
+#define SWIGPYTHON
+/***********************************************************************
+ * common.swg
+ *
+ *     This file contains generic SWIG runtime support for pointer
+ *     type checking as well as a few commonly used macros to control
+ *     external linkage.
+ *
+ * Author : David Beazley (beazley@cs.uchicago.edu)
+ *
+ * Copyright (c) 1999-2000, The University of Chicago
+ * 
+ * This file may be freely redistributed without license or fee provided
+ * this copyright message remains intact.
+ ************************************************************************/
+
+#include <string.h>
+
+#if defined(_WIN32) || defined(__WIN32__)
+#       if defined(_MSC_VER)
+#               if defined(STATIC_LINKED)
+#                       define SWIGEXPORT(a) a
+#               else
+#                       define SWIGEXPORT(a) __declspec(dllexport) a
+#               endif
+#       else
+#               if defined(__BORLANDC__)
+#                       define SWIGEXPORT(a) a _export
+#               else
+#                       define SWIGEXPORT(a) a
+#       endif
+#endif
+#else
+#       define SWIGEXPORT(a) a
+#endif
+
+#ifdef SWIG_GLOBAL
+#define SWIGRUNTIME(a) SWIGEXPORT(a)
+#else
+#define SWIGRUNTIME(a) static a
+#endif
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef void *(*swig_converter_func)(void *);
+
+typedef struct swig_type_info {
+  const char             *name;                 
+  swig_converter_func     converter;
+  const char             *str;
+  struct swig_type_info  *next;
+  struct swig_type_info  *prev;
+  void                   *clientdata;  
+} swig_type_info;
+
+#ifdef SWIG_NOINCLUDE
+SWIGEXPORT(swig_type_info *) SWIG_TypeRegister(swig_type_info *);
+SWIGEXPORT(swig_type_info *) SWIG_TypeCheck(char *c, swig_type_info *);
+SWIGEXPORT(void *) SWIG_TypeCast(swig_type_info *, void *);
+SWIGEXPORT(swig_type_info *) SWIG_TypeQuery(const char *);
+SWIGEXPORT(void) SWIG_TypeClientData(swig_type_info *, void *);
+#else
+
+static swig_type_info *swig_type_list = 0;
+
+/* Register a type mapping with the type-checking */
+SWIGRUNTIME(swig_type_info *)
+SWIG_TypeRegister(swig_type_info *ti)
+{
+  swig_type_info *tc, *head, *ret, *next;
+  /* Check to see if this type has already been registered */
+  tc = swig_type_list;
+  while (tc) {
+    if (strcmp(tc->name, ti->name) == 0) {
+      /* Already exists in the table.  Just add additional types to the list */
+      head = tc;
+      next = tc->next;
+      goto l1;
+    }
+    tc = tc->prev;
+  }
+  head = ti;
+  next = 0;
+
+  /* Place in list */
+  ti->prev = swig_type_list;
+  swig_type_list = ti;
+
+  /* Build linked lists */
+ l1:
+  ret = head;
+  tc = ti + 1;
+  /* Patch up the rest of the links */
+  while (tc->name) {
+    head->next = tc;
+    tc->prev = head;
+    head = tc;
+    tc++;
+  }
+  head->next = next;
+  return ret;
+}
+
+/* Check the typename */
+SWIGRUNTIME(swig_type_info *) 
+SWIG_TypeCheck(char *c, swig_type_info *ty)
+{
+  swig_type_info *s;
+  if (!ty) return 0;        /* Void pointer */
+  s = ty->next;             /* First element always just a name */
+  while (s) {
+    if (strcmp(s->name,c) == 0) {
+      if (s == ty->next) return s;
+      /* Move s to the top of the linked list */
+      s->prev->next = s->next;
+      if (s->next) {
+       s->next->prev = s->prev;
+      }
+      /* Insert s as second element in the list */
+      s->next = ty->next;
+      if (ty->next) ty->next->prev = s;
+      ty->next = s;
+      return s;
+    }
+    s = s->next;
+  }
+  return 0;
+}
+
+/* Cast a pointer (needed for C++ inheritance */
+SWIGRUNTIME(void *) 
+SWIG_TypeCast(swig_type_info *ty, void *ptr) 
+{
+  if ((!ty) || (!ty->converter)) return ptr;
+  return (*ty->converter)(ptr);
+}
+
+/* Search for a swig_type_info structure */
+SWIGRUNTIME(swig_type_info *)
+SWIG_TypeQuery(const char *name) {
+  swig_type_info *ty = swig_type_list;
+  while (ty) {
+    if (ty->str && (strcmp(name,ty->str) == 0)) return ty;
+    if (ty->name && (strcmp(name,ty->name) == 0)) return ty;
+    ty = ty->prev;
+  }
+  return 0;
+}
+
+/* Set the clientdata field for a type */
+SWIGRUNTIME(void)
+SWIG_TypeClientData(swig_type_info *ti, void *clientdata) {
+  swig_type_info *tc, *equiv;
+  if (ti->clientdata) return;
+  ti->clientdata = clientdata;
+  equiv = ti->next;
+  while (equiv) {
+    if (!equiv->converter) {
+      tc = swig_type_list;
+      while (tc) {
+       if ((strcmp(tc->name, equiv->name) == 0))
+         SWIG_TypeClientData(tc,clientdata);
+       tc = tc->prev;
+      }
+    }
+    equiv = equiv->next;
+  }
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+
+/***********************************************************************
+ * python.swg
+ *
+ *     This file contains the runtime support for Python modules
+ *     and includes code for managing global variables and pointer
+ *     type checking.
+ *
+ * Author : David Beazley (beazley@cs.uchicago.edu)
+ ************************************************************************/
+
+#include <stdlib.h>
+#include "Python.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define SWIG_PY_INT     1
+#define SWIG_PY_FLOAT   2
+#define SWIG_PY_STRING  3
+#define SWIG_PY_POINTER 4
+#define SWIG_PY_BINARY  5
+
+/* Constant information structure */
+typedef struct swig_const_info {
+    int type;
+    char *name;
+    long lvalue;
+    double dvalue;
+    void   *pvalue;
+    swig_type_info **ptype;
+} swig_const_info;
+
+#ifdef SWIG_NOINCLUDE
+
+SWIGEXPORT(PyObject *)        SWIG_newvarlink();
+SWIGEXPORT(void)              SWIG_addvarlink(PyObject *, char *, PyObject *(*)(void), int (*)(PyObject *));
+SWIGEXPORT(int)               SWIG_ConvertPtr(PyObject *, void **, swig_type_info *, int);
+SWIGEXPORT(int)               SWIG_ConvertPacked(PyObject *, void *, int sz, swig_type_info *, int);
+SWIGEXPORT(char *)            SWIG_PackData(char *c, void *, int);
+SWIGEXPORT(char *)            SWIG_UnpackData(char *c, void *, int);
+SWIGEXPORT(PyObject *)        SWIG_NewPointerObj(void *, swig_type_info *,int own);
+SWIGEXPORT(PyObject *)        SWIG_NewPackedObj(void *, int sz, swig_type_info *);
+SWIGEXPORT(void)              SWIG_InstallConstants(PyObject *d, swig_const_info constants[]);
+SWIGEXPORT(PyObject *)        SWIG_MakeShadow(PyObject *robj, swig_type_info *type, int own);
+#else
+
+/* -----------------------------------------------------------------------------
+ * global variable support code.
+ * ----------------------------------------------------------------------------- */
+
+typedef struct swig_globalvar {   
+  char       *name;                  /* Name of global variable */
+  PyObject *(*get_attr)(void);       /* Return the current value */
+  int       (*set_attr)(PyObject *); /* Set the value */
+  struct swig_globalvar *next;
+} swig_globalvar;
+
+typedef struct swig_varlinkobject {
+  PyObject_HEAD
+  swig_globalvar *vars;
+} swig_varlinkobject;
+
+static PyObject *
+swig_varlink_repr(swig_varlinkobject *v) {
+  v = v;
+  return PyString_FromString("<Global variables>");
+}
+
+static int
+swig_varlink_print(swig_varlinkobject *v, FILE *fp, int flags) {
+  swig_globalvar  *var;
+  flags = flags;
+  fprintf(fp,"Global variables { ");
+  for (var = v->vars; var; var=var->next) {
+    fprintf(fp,"%s", var->name);
+    if (var->next) fprintf(fp,", ");
+  }
+  fprintf(fp," }\n");
+  return 0;
+}
+
+static PyObject *
+swig_varlink_getattr(swig_varlinkobject *v, char *n) {
+  swig_globalvar *var = v->vars;
+  while (var) {
+    if (strcmp(var->name,n) == 0) {
+      return (*var->get_attr)();
+    }
+    var = var->next;
+  }
+  PyErr_SetString(PyExc_NameError,"Unknown C global variable");
+  return NULL;
+}
+
+static int
+swig_varlink_setattr(swig_varlinkobject *v, char *n, PyObject *p) {
+  swig_globalvar *var = v->vars;
+  while (var) {
+    if (strcmp(var->name,n) == 0) {
+      return (*var->set_attr)(p);
+    }
+    var = var->next;
+  }
+  PyErr_SetString(PyExc_NameError,"Unknown C global variable");
+  return 1;
+}
+
+statichere PyTypeObject varlinktype = {
+  PyObject_HEAD_INIT(0)              
+  0,
+  (char *)"swigvarlink",                      /* Type name    */
+  sizeof(swig_varlinkobject),         /* Basic size   */
+  0,                                  /* Itemsize     */
+  0,                                  /* Deallocator  */ 
+  (printfunc) swig_varlink_print,     /* Print        */
+  (getattrfunc) swig_varlink_getattr, /* get attr     */
+  (setattrfunc) swig_varlink_setattr, /* Set attr     */
+  0,                                  /* tp_compare   */
+  (reprfunc) swig_varlink_repr,       /* tp_repr      */    
+  0,                                  /* tp_as_number */
+  0,                                  /* tp_as_mapping*/
+  0,                                  /* tp_hash      */
+};
+
+/* Create a variable linking object for use later */
+SWIGRUNTIME(PyObject *)
+SWIG_newvarlink(void) {
+  swig_varlinkobject *result = 0;
+  result = PyMem_NEW(swig_varlinkobject,1);
+  varlinktype.ob_type = &PyType_Type;    /* Patch varlinktype into a PyType */
+  result->ob_type = &varlinktype;
+  result->vars = 0;
+  result->ob_refcnt = 0;
+  Py_XINCREF((PyObject *) result);
+  return ((PyObject*) result);
+}
+
+SWIGRUNTIME(void)
+SWIG_addvarlink(PyObject *p, char *name,
+          PyObject *(*get_attr)(void), int (*set_attr)(PyObject *p)) {
+  swig_varlinkobject *v;
+  swig_globalvar *gv;
+  v= (swig_varlinkobject *) p;
+  gv = (swig_globalvar *) malloc(sizeof(swig_globalvar));
+  gv->name = (char *) malloc(strlen(name)+1);
+  strcpy(gv->name,name);
+  gv->get_attr = get_attr;
+  gv->set_attr = set_attr;
+  gv->next = v->vars;
+  v->vars = gv;
+}
+
+/* Pack binary data into a string */
+SWIGRUNTIME(char *)
+SWIG_PackData(char *c, void *ptr, int sz) {
+  static char hex[17] = "0123456789abcdef";
+  int i;
+  unsigned char *u = (unsigned char *) ptr;
+  register unsigned char uu;
+  for (i = 0; i < sz; i++,u++) {
+    uu = *u;
+    *(c++) = hex[(uu & 0xf0) >> 4];
+    *(c++) = hex[uu & 0xf];
+  }
+  return c;
+}
+
+/* Unpack binary data from a string */
+SWIGRUNTIME(char *)
+SWIG_UnpackData(char *c, void *ptr, int sz) {
+  register unsigned char uu;
+  register int d;
+  unsigned char *u = (unsigned char *) ptr;
+  int i;
+  for (i = 0; i < sz; i++, u++) {
+    d = *(c++);
+    if ((d >= '0') && (d <= '9'))
+      uu = ((d - '0') << 4);
+    else if ((d >= 'a') && (d <= 'f'))
+      uu = ((d - ('a'-10)) << 4);
+    d = *(c++);
+    if ((d >= '0') && (d <= '9'))
+      uu |= (d - '0');
+    else if ((d >= 'a') && (d <= 'f'))
+      uu |= (d - ('a'-10));
+    *u = uu;
+  }
+  return c;
+}
+
+/* Convert a pointer value */
+SWIGRUNTIME(int)
+SWIG_ConvertPtr(PyObject *obj, void **ptr, swig_type_info *ty, int flags) {
+  swig_type_info *tc;
+  char  *c;
+  static PyObject *SWIG_this = 0;
+  int    newref = 0;
+
+  if (!obj) return 0;
+  if (obj == Py_None) {
+    *ptr = 0;
+    return 0;
+  }
+#ifdef SWIG_COBJECT_TYPES
+  if (!(PyCObject_Check(obj))) {
+    if (!SWIG_this)
+      SWIG_this = PyString_InternFromString("this");
+    obj = PyObject_GetAttr(obj,SWIG_this);
+    newref = 1;
+    if (!obj) goto type_error;
+    if (!PyCObject_Check(obj)) {
+      Py_DECREF(obj);
+      goto type_error;
+    }
+  } 
+  *ptr = PyCObject_AsVoidPtr(obj);
+  c = (char *) PyCObject_GetDesc(obj);
+  if (newref) Py_DECREF(obj);
+  goto cobject;
+#else
+  if (!(PyString_Check(obj))) {
+    if (!SWIG_this)
+      SWIG_this = PyString_InternFromString("this");
+    obj = PyObject_GetAttr(obj,SWIG_this);
+    newref = 1;
+    if (!obj) goto type_error;
+    if (!PyString_Check(obj)) {
+      Py_DECREF(obj);
+      goto type_error;
+    }
+  } 
+  c = PyString_AsString(obj);
+  /* Pointer values must start with leading underscore */
+  if (*c != '_') {
+    *ptr = (void *) 0;
+    if (strcmp(c,"NULL") == 0) {
+      if (newref) Py_DECREF(obj);
+      return 0;
+    } else {
+      if (newref) Py_DECREF(obj);
+      goto type_error;
+    }
+  }
+  c++;
+  c = SWIG_UnpackData(c,ptr,sizeof(void *));
+  if (newref) Py_DECREF(obj);
+#endif
+
+#ifdef SWIG_COBJECT_TYPES
+cobject:
+#endif
+
+  if (ty) {
+    tc = SWIG_TypeCheck(c,ty);
+    if (!tc) goto type_error;
+    *ptr = SWIG_TypeCast(tc,(void*) *ptr);
+  }
+  return 0;
+
+type_error:
+  if (flags) {
+    if (ty) {
+      char *temp = (char *) malloc(64+strlen(ty->name));
+      sprintf(temp,"Type error. Expected %s", ty->name);
+      PyErr_SetString(PyExc_TypeError, temp);
+      free((char *) temp);
+    } else {
+      PyErr_SetString(PyExc_TypeError,"Expected a pointer");
+    }
+  }
+  return -1;
+}
+
+/* Convert a packed value value */
+SWIGRUNTIME(int)
+SWIG_ConvertPacked(PyObject *obj, void *ptr, int sz, swig_type_info *ty, int flags) {
+  swig_type_info *tc;
+  char  *c;
+
+  if ((!obj) || (!PyString_Check(obj))) goto type_error;
+  c = PyString_AsString(obj);
+  /* Pointer values must start with leading underscore */
+  if (*c != '_') goto type_error;
+  c++;
+  c = SWIG_UnpackData(c,ptr,sz);
+  if (ty) {
+    tc = SWIG_TypeCheck(c,ty);
+    if (!tc) goto type_error;
+  }
+  return 0;
+
+type_error:
+
+  if (flags) {
+    if (ty) {
+      char *temp = (char *) malloc(64+strlen(ty->name));
+      sprintf(temp,"Type error. Expected %s", ty->name);
+      PyErr_SetString(PyExc_TypeError, temp);
+      free((char *) temp);
+    } else {
+      PyErr_SetString(PyExc_TypeError,"Expected a pointer");
+    }
+  }
+  return -1;
+}
+
+/* Create a new pointer object */
+SWIGRUNTIME(PyObject *)
+SWIG_NewPointerObj(void *ptr, swig_type_info *type, int own) {
+  PyObject *robj;
+  if (!ptr) {
+    Py_INCREF(Py_None);
+    return Py_None;
+  }
+#ifdef SWIG_COBJECT_TYPES
+  robj = PyCObject_FromVoidPtrAndDesc((void *) ptr, (char *) type->name, NULL);
+#else
+  {
+    char result[512];
+    char *r = result;
+    *(r++) = '_';
+    r = SWIG_PackData(r,&ptr,sizeof(void *));
+    strcpy(r,type->name);
+    robj = PyString_FromString(result);
+  }
+#endif
+  if (!robj || (robj == Py_None)) return robj;
+  if (type->clientdata) {
+    PyObject *inst;
+    PyObject *args = Py_BuildValue((char*)"(O)", robj);
+    Py_DECREF(robj);
+    inst = PyObject_CallObject((PyObject *) type->clientdata, args);
+    Py_DECREF(args);
+    if (own) {
+      PyObject *n = PyInt_FromLong(1);
+      PyObject_SetAttrString(inst,(char*)"thisown",n);
+      Py_DECREF(n);
+    }
+    robj = inst;
+  }
+  return robj;
+}
+
+SWIGRUNTIME(PyObject *)
+SWIG_MakeShadow(PyObject *robj, swig_type_info *type, int own) {
+  if (!robj || (robj == Py_None)) return robj;
+  if (type->clientdata) {
+    PyInstanceObject *inst;
+    inst = PyObject_NEW(PyInstanceObject, &PyInstance_Type);
+    if (!inst) return robj;
+    inst->in_dict = PyDict_New();
+    inst->in_class = (PyClassObject *) type->clientdata;
+    Py_INCREF(inst->in_class);
+    PyObject_SetAttrString((PyObject *)inst,(char*)"this",robj);
+    Py_DECREF(robj);
+    if (own) {
+      PyObject *n = PyInt_FromLong(1);
+      PyObject_SetAttrString((PyObject *)inst,(char*)"thisown",n);
+      Py_DECREF(n);
+    }
+    robj = (PyObject *) inst;
+    Py_INCREF(robj);
+  }
+  return robj;
+}
+
+SWIGRUNTIME(PyObject *)
+SWIG_NewPackedObj(void *ptr, int sz, swig_type_info *type) {
+  char result[1024];
+  char *r = result;
+  if ((2*sz + 1 + strlen(type->name)) > 1000) return 0;
+  *(r++) = '_';
+  r = SWIG_PackData(r,ptr,sz);
+  strcpy(r,type->name);
+  return PyString_FromString(result);
+}
+
+/* Install Constants */
+SWIGRUNTIME(void)
+SWIG_InstallConstants(PyObject *d, swig_const_info constants[]) {
+  int i;
+  PyObject *obj;
+  for (i = 0; constants[i].type; i++) {
+    switch(constants[i].type) {
+    case SWIG_PY_INT:
+      obj = PyInt_FromLong(constants[i].lvalue);
+      break;
+    case SWIG_PY_FLOAT:
+      obj = PyFloat_FromDouble(constants[i].dvalue);
+      break;
+    case SWIG_PY_STRING:
+      obj = PyString_FromString((char *) constants[i].pvalue);
+      break;
+    case SWIG_PY_POINTER:
+      obj = SWIG_NewPointerObj(constants[i].pvalue, *(constants[i]).ptype,0);
+      break;
+    case SWIG_PY_BINARY:
+      obj = SWIG_NewPackedObj(constants[i].pvalue, constants[i].lvalue, *(constants[i].ptype));
+      break;
+    default:
+      obj = 0;
+      break;
+    }
+    if (obj) {
+      PyDict_SetItemString(d,constants[i].name,obj);
+      Py_DECREF(obj);
+    }
+  }
+}
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+
+
+
+
+
+/* -------- TYPES TABLE (BEGIN) -------- */
+
+static swig_type_info *swig_types[1];
+
+/* -------- TYPES TABLE (END) -------- */
+
+#define SWIG_init    initObject
+
+#define SWIG_name    "Object"
+#ifdef __cplusplus
+extern "C" {
+#endif
+static PyObject *_wrap_copy(PyObject *self, PyObject *args) {
+    PyObject *resultobj;
+    
+    if(!PyArg_ParseTuple(args,(char *)":copy")) return NULL;
+    copy();
+    
+    Py_INCREF(Py_None); resultobj = Py_None;
+    return resultobj;
+}
+
+
+static PyObject *_wrap_shareFrom(PyObject *self, PyObject *args) {
+    PyObject *resultobj;
+    int arg1 ;
+    
+    if(!PyArg_ParseTuple(args,(char *)"i:shareFrom",&arg1)) return NULL;
+    shareFrom(arg1);
+    
+    Py_INCREF(Py_None); resultobj = Py_None;
+    return resultobj;
+}
+
+
+static PyObject *_wrap_getMatrix(PyObject *self, PyObject *args) {
+    PyObject *resultobj;
+    int result;
+    
+    if(!PyArg_ParseTuple(args,(char *)":getMatrix")) return NULL;
+    result = (int )getMatrix();
+    
+    resultobj = PyInt_FromLong((long)result);
+    return resultobj;
+}
+
+
+static PyMethodDef SwigMethods[] = {
+        { (char *)"copy", _wrap_copy, METH_VARARGS },
+        { (char *)"shareFrom", _wrap_shareFrom, METH_VARARGS },
+        { (char *)"getMatrix", _wrap_getMatrix, METH_VARARGS },
+        { NULL, NULL }
+};
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */
+
+
+static swig_type_info *swig_types_initial[] = {
+0
+};
+
+
+/* -------- TYPE CONVERSION AND EQUIVALENCE RULES (END) -------- */
+
+static swig_const_info swig_const_table[] = {
+{0}};
+
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef __cplusplus
+extern "C"
+#endif
+SWIGEXPORT(PyObject*) SWIG_init(void) {
+    static PyObject *SWIG_globals = 0;
+    PyObject *m, *d;
+    int       i;
+    SWIG_globals = SWIG_newvarlink();
+    m = Py_InitModule((char *) SWIG_name, SwigMethods);
+    d = PyModule_GetDict(m);
+    
+    for (i = 0; swig_types_initial[i]; i++) {
+        swig_types[i] = SWIG_TypeRegister(swig_types_initial[i]);
+    }
+    SWIG_InstallConstants(d,swig_const_table);
+    
+       return (m);
+}
+
index 0bb0945879ecc7146d42fb2ccf3d73cf1b7317c0..c827e5432fac56437c81db4bcebbb1fee3f72e86 100644 (file)
  *
  * ***** END GPL/BL DUAL LICENSE BLOCK *****
 */
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
 
-#include <BPY_extern.h>
+#include "modules.h"
 
-#include <stdio.h>
-
-void BPY_start_python(void)
-{
-       return;
-}
-
-void BPY_end_python(void)
-{
-       return;
-}
-
-int BPY_Err_getLinenumber(void)
-{
-       return (0);
-}
-
-const char *BPY_Err_getFilename(void)
-{
-       return (NULL);
-}
-
-struct _object *BPY_txt_do_python(struct SpaceText* st)
-{
-       return (NULL);
-}
-
-void BPY_free_compiled_text(struct Text* text)
-{
-       return;
-}
-
-void BPY_clear_bad_scriptlinks(struct Text *byebye)
-{
-       return;
-}
-
-void BPY_do_all_scripts(short event)
-{
-       return;
-}
-
-void BPY_do_pyscript(struct ID *id, short event)
-{
-       return;
-}
-
-void BPY_free_scriptlink(struct ScriptLink *slink)
-{
-       return;
-}
-
-void BPY_copy_scriptlink(struct ScriptLink *scriptlink)
-{
-       return;
-}
-
-int BPY_call_importloader(char *name)
-{
-       return (0);
-}
-
-int BPY_spacetext_is_pywin(struct SpaceText *st)
-{
-       return (0);
-}
-
-void BPY_spacetext_do_pywin_draw(struct SpaceText *st)
-{
-       return;
-}
-
-void BPY_spacetext_do_pywin_event(struct SpaceText *st, unsigned short event, short val)
+void initBlenderApi2_2x (void)
 {
-       return;
+       printf ("initBlenderApi2_2x\n");
+       initBlender ();
 }
 
diff --git a/source/blender/python/api2_2x/interface.h b/source/blender/python/api2_2x/interface.h
new file mode 100644 (file)
index 0000000..d77a8b9
--- /dev/null
@@ -0,0 +1,33 @@
+/* 
+ *
+ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License.  See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * This is a new part of Blender.
+ *
+ * Contributor(s): Michel Selten
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+*/
+
+void initBlenderApi2_2x (void);
+
diff --git a/source/blender/python/api2_2x/modules.h b/source/blender/python/api2_2x/modules.h
new file mode 100644 (file)
index 0000000..08d3061
--- /dev/null
@@ -0,0 +1,35 @@
+/* 
+ *
+ * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. The Blender
+ * Foundation also sells licenses for use in proprietary software under
+ * the Blender License.  See http://www.blender.org/BL/ for information
+ * about this.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * 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.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * This is a new part of Blender.
+ *
+ * Contributor(s): Michel Selten
+ *
+ * ***** END GPL/BL DUAL LICENSE BLOCK *****
+*/
+#include <Python.h>
+
+void initBlender (void);
+PyObject* initObject (void);
+