resolve some compiler warnings with intel c/c++ compiler
[blender-staging.git] / source / blender / python / BPY_interface.c
index c91aabc4a024ce63c2ebaa692f8d07d6b238cd08..59b72702c504dcbfcbfd0427be95e7eff417041b 100644 (file)
@@ -100,7 +100,7 @@ PyObject *bpy_orig_syspath_List = NULL;
  *    creates list in __main__ module dict 
  */
   
-int setup_armature_weakrefs()
+static int setup_armature_weakrefs()
 {
        PyObject *maindict;
        PyObject *main_module;
@@ -159,19 +159,18 @@ ScriptError g_script_error;
 /***************************************************************************
 * Function prototypes 
 ***************************************************************************/
-PyObject *RunPython( Text * text, PyObject * globaldict );
-PyObject *CreateGlobalDictionary( void );
-void ReleaseGlobalDictionary( PyObject * dict );
-void DoAllScriptsFromList( ListBase * list, short event );
+static PyObject *RunPython( Text * text, PyObject * globaldict );
+static PyObject *CreateGlobalDictionary( void );
+static void ReleaseGlobalDictionary( PyObject * dict );
+static void DoAllScriptsFromList( ListBase * list, short event );
 static PyObject *importText( char *name );
-void init_ourImport( void );
-void init_ourReload( void );
-PyObject *blender_import( PyObject * self, PyObject * args );
-PyObject *RunPython2( Text * text, PyObject * globaldict, PyObject *localdict );
+static void init_ourImport( void );
+static void init_ourReload( void );
+static PyObject *blender_import( PyObject * self, PyObject * args );
 
 
-void BPY_Err_Handle( char *script_name );
-PyObject *traceback_getFilename( PyObject * tb );
+static void BPY_Err_Handle( char *script_name );
+static PyObject *traceback_getFilename( PyObject * tb );
 
 /****************************************************************************
 * Description: This function will start the interpreter and load all modules
@@ -507,7 +506,7 @@ const char *BPY_Err_getFilename( void )
 /*****************************************************************************/
 /* Description: Return PyString filename from a traceback object           */
 /*****************************************************************************/
-PyObject *traceback_getFilename( PyObject * tb )
+static PyObject *traceback_getFilename( PyObject * tb )
 {
        PyObject *v = NULL;
 
@@ -531,7 +530,7 @@ PyObject *traceback_getFilename( PyObject * tb )
 * Description: Blender Python error handler. This catches the error and        
 * stores filename and line number in a global  
 *****************************************************************************/
-void BPY_Err_Handle( char *script_name )
+static void BPY_Err_Handle( char *script_name )
 {
        PyObject *exception, *err, *tb, *v;
 
@@ -720,13 +719,23 @@ int BPY_txt_do_python_Text( struct Text *text )
 * automatically. The script can be a file or a Blender Text in the current 
 * .blend.
 ****************************************************************************/
-void BPY_run_python_script( char *fn )
+void BPY_run_python_script( const char *fn )
 {
+       char filename[FILE_MAXDIR + FILE_MAXFILE];
        Text *text = NULL;
        int is_blender_text = 0;
-
-       if (!BLI_exists(fn)) {  /* if there's no such filename ... */
-               text = G.main->text.first;      /* try an already existing Blender Text */
+       
+       BLI_strncpy(filename, fn, FILE_MAXDIR + FILE_MAXFILE);
+       
+       if (!BLI_exists(filename))
+               BLI_convertstringcwd(filename);
+               
+       if (!BLI_exists(filename)) {    /* if there's no such filename ... */
+               /* try an already existing Blender Text.
+                * use 'fn' rather then filename for this since were looking for
+                * internal text
+                */
+               text = G.main->text.first;
 
                while (text) {
                        if (!strcmp(fn, text->id.name + 2)) break;
@@ -741,11 +750,14 @@ void BPY_run_python_script( char *fn )
        }
 
        else {
-               text = add_text(fn);
+               /* use filename here since we know it exists,
+                * 'fn' may have been a relative path
+                */
+               text = add_text(filename);
 
                if (text == NULL) {
                        printf("\nError in BPY_run_python_script:\n"
-                               "couldn't create Blender text from %s\n", fn);
+                               "couldn't create Blender text from \"%s\"\n", filename);
                /* Chris: On Windows if I continue I just get a segmentation
                 * violation.  To get a baseline file I exit here. */
                exit(2);
@@ -762,13 +774,8 @@ void BPY_run_python_script( char *fn )
                /* We can't simply free the text, since the script might have called
                 * Blender.Load() to load a new .blend, freeing previous data.
                 * So we check if the pointer is still valid. */
-               Text *txtptr = G.main->text.first;
-               while (txtptr) {
-                       if (txtptr == text) {
-                               free_libblock(&G.main->text, text);
-                               break;
-                       }
-                       txtptr = txtptr->id.next;
+               if (BLI_findindex(&G.main->text, text) != -1) {
+                       free_libblock(&G.main->text, text);
                }
        }
 }
@@ -2155,8 +2162,14 @@ void BPY_clear_bad_scriptlinks( struct Text *byebye )
 *      For the scene, only the current active scene the scripts are 
 *      executed (if any).
 *****************************************************************************/
-void BPY_do_all_scripts( short event )
+void BPY_do_all_scripts( short event, short anim )
 {
+       /* during stills rendering we disable FRAMECHANGED events */
+       static char disable_frame_changed = 0;
+
+       if ((event == SCRIPT_FRAMECHANGED) && disable_frame_changed)
+               return;
+
        DoAllScriptsFromList( &( G.main->object ), event );
        DoAllScriptsFromList( &( G.main->lamp ), event );
        DoAllScriptsFromList( &( G.main->camera ), event );
@@ -2172,9 +2185,12 @@ void BPY_do_all_scripts( short event )
         * "import sys; sys.setcheckinterval(sys.maxint)" */
        if (event == SCRIPT_RENDER) {
                _Py_CheckInterval = PyInt_GetMax();
+               if (!anim)
+                       disable_frame_changed = 1;
        }
        else if (event == SCRIPT_POSTRENDER) {
                _Py_CheckInterval = 100; /* Python default */
+               disable_frame_changed = 0;
        }
 
        return;
@@ -2458,7 +2474,7 @@ int BPY_add_spacehandler(Text *text, ScrArea *sa, char spacetype)
 }
 
 int BPY_do_spacehandlers( ScrArea *sa, unsigned short event,
-       unsigned short space_event )
+       short eventValue, unsigned short space_event )
 {
        ScriptLink *scriptlink;
        int retval = 0;
@@ -2498,8 +2514,9 @@ int BPY_do_spacehandlers( ScrArea *sa, unsigned short event,
                PyDict_SetItemString(g_blenderdict, "bylink", Py_True);
                /* unlike normal scriptlinks, here Blender.link is int (space event type) */
                EXPP_dict_set_item_str(g_blenderdict, "link", PyInt_FromLong(space_event));
-               /* note: DRAW space_events set event to 0 */
+               /* note: DRAW space_events set event and val to 0 */
                EXPP_dict_set_item_str(g_blenderdict, "event", PyInt_FromLong(event));
+               EXPP_dict_set_item_str(g_blenderdict, "eventValue", PyInt_FromLong(eventValue));
                /* now run all assigned space handlers for this space and space_event */
                for( index = 0; index < scriptlink->totscript; index++ ) {
                        
@@ -2695,7 +2712,7 @@ int BPY_call_importloader( char *name )
 *              The Python dictionary containing global variables needs to
 *              be passed in globaldict.
 *****************************************************************************/
-PyObject *RunPython( Text * text, PyObject * globaldict )
+static PyObject *RunPython( Text * text, PyObject * globaldict )
 {
        char *buf = NULL;
 
@@ -2723,7 +2740,7 @@ PyObject *RunPython( Text * text, PyObject * globaldict )
 /*****************************************************************************
 * Description: This function creates a new Python dictionary object.
 *****************************************************************************/
-PyObject *CreateGlobalDictionary( void )
+static PyObject *CreateGlobalDictionary( void )
 {
        PyObject *dict = PyDict_New(  );
 
@@ -2737,7 +2754,7 @@ PyObject *CreateGlobalDictionary( void )
 /*****************************************************************************
 * Description: This function deletes a given Python dictionary object.
 *****************************************************************************/
-void ReleaseGlobalDictionary( PyObject * dict )
+static void ReleaseGlobalDictionary( PyObject * dict )
 {
        PyDict_Clear( dict );
        Py_DECREF( dict );      /* Release dictionary. */
@@ -2750,7 +2767,7 @@ void ReleaseGlobalDictionary( PyObject * dict )
 *              list argument. The event by which the function has been 
 *              called, is passed in the event argument.
 *****************************************************************************/
-void DoAllScriptsFromList( ListBase * list, short event )
+static void DoAllScriptsFromList( ListBase * list, short event )
 {
        ID *id;
 
@@ -2803,7 +2820,7 @@ static PyMethodDef bimport[] = {
        {"blimport", blender_import, METH_VARARGS, "our own import"}
 };
 
-PyObject *blender_import( PyObject * self, PyObject * args )
+static PyObject *blender_import( PyObject * self, PyObject * args )
 {
        PyObject *exception, *err, *tb;
        char *name;
@@ -2834,7 +2851,7 @@ PyObject *blender_import( PyObject * self, PyObject * args )
        return m;
 }
 
-void init_ourImport( void )
+static void init_ourImport( void )
 {
        PyObject *m, *d;
        PyObject *import = PyCFunction_New( bimport, NULL );
@@ -2935,7 +2952,7 @@ static PyMethodDef breload[] = {
        {"blreload", blender_reload, METH_VARARGS, "our own reload"}
 };
 
-void init_ourReload( void )
+static void init_ourReload( void )
 {
        PyObject *m, *d;
        PyObject *reload = PyCFunction_New( breload, NULL );