[Bf-committers] Wondering about the review of the command port patch...
Dietrich Bollmann
diresu at web.de
Mon Sep 22 07:13:29 CEST 2008
Hi Ton,
Sorry for replying late and again...
What is a
On Fri, 2008-09-19 at 09:56 +0200, Ton Roosendaal wrote:
> [...]. blackmail version of a feature request. :)
?
Have to learn that for my next attempts to help out :)
Thanks,
Dietrich
On Fri, 2008-09-19 at 09:56 +0200, Ton Roosendaal wrote:
> Hi,
>
> You can reply in the tracker if you have questions.
>
> The fact that patch submitters do so much work is unfortunately not a
> guarantee we do the the same for them... that's just not practical with
> 100+ open patches to look at.
> I'm also not impressed or intimidated by coding work in itself. A patch
> should never be a blackmail version of a feature request. :)
>
> I wanted to go over almost all open patches, and then come with a
> proposal for more clear guidelines, so submitters know better what they
> can expect, and to have active Blender developers involved with reviews
> without them feeling obliged to spend hours on reviews.
>
> Further I'm also human and can make mistakes! Maybe your patch is
> great, but then try to find people in the active developer/user
> community to review and use it?
>
> -Ton-
>
> ------------------------------------------------------------------------
> Ton Roosendaal Blender Foundation ton at blender.org www.blender.org
> Blender Institute BV Entrepotdok 57A 1018AD Amsterdam The Netherlands
>
> On 19 Sep, 2008, at 5:30, Dietrich Bollmann wrote:
>
> > Hi Ton,
> >
> >> Comment By: Ton Roosendaal (ton)
> >> Date: 2008-09-18 19:49
> >>
> >> Message:
> >> A review gave following considerations;
> >>
> >> It's basically a good idea, but the patch is gigantic, changing a lot
> >> of internals,
> >> which is unknown if that's going to be maintained. For an option that
> >> not many people
> >> will use too problematic. My reason to close this one for now.
> >
> > No, the changes to the internals are minimal.
> >
> > It is the NEW functionality in dir source/blender/commandport which is
> > huge.
> >
> > I think the reviewer currently is too busy to look at the patch itself
> > and just wanted to get rid of an item in his todo list. Probably he
> > was
> > scared away by the number of lines and decided before looking into the
> > code itself. What exactly did he write and who is he? I would like to
> > have a chance to react to his comments.
> >
> > Even if somehow disappointed about the way my patch was treated from
> > the
> > beginning, of course I accept if you don't want it. But I would like
> > to
> > have it rejected with arguments which are motivated by the code itself
> > and not by the fact of everybody being very busy - which I understand
> > of
> > course very well!
> >
> > Please do not understand me wrong. I know that everybody is very busy
> > and I know that everybody has to manage his time. Sometimes it is good
> > to follow the first impression. Still I would be happier with real
> > arguments - at least I could learn what exactly the blender coders
> > didn't like about my code.
> >
> > Here is a list of the c source files which have been manipulated:
> >
> > egrep '^Index: .*\.c'
> > blender-command-port-patch.2008-07-12.2.46.r15538.txt \
> > | egrep -v 'source/blender/commandport'
> >
> > Index: source/creator/creator.c
> > Index: source/blender/python/BPY_interface.c
> > Index: source/blender/src/mainqueue.c
> > Index: source/blender/src/editscreen.c
> > Index: source/blender/src/usiblender.c
> > Index: source/blender/src/eventdebug.c
> >
> > I append the corresponding diffs.
> >
> > Thanks for your understanding,
> >
> > Sincerely, Dietrich
> >
> >> The good news is that a similar functionality (commandline python
> >> editing) is on
> >> the wishlist in Blender itself. After that, an external console
> >> should be easy.
> >
> > If it was the patch would be shorter :)
> >
> >
> > =======================================================================
> > =========
> > Index: source/creator/creator.c
> > ===================================================================
> > --- source/creator/creator.c (revision 15538)
> > +++ source/creator/creator.c (working copy)
> > @@ -22,7 +22,7 @@
> > *
> > * The Original Code is: all of this file.
> > *
> > - * Contributor(s): none yet.
> > + * Contributor(s): Dietrich Bollmann.
> > *
> > * ***** END GPL LICENSE BLOCK *****
> > */
> > @@ -83,6 +83,10 @@
> > #include "nla.h"
> > #include "datatoc.h"
> >
> > +#ifdef WITH_COMMAND_PORT
> > +#include "commandport.h" /* Blender command port (dietrich) */
> > +#endif
> > +
> > /* for passing information between creator and gameengine */
> > #include "SYS_System.h"
> >
> > @@ -108,6 +112,9 @@
> >
> > /* Local Function prototypes */
> > static void print_help();
> > +#ifdef WITH_COMMAND_PORT
> > +static void print_debug_command_port_help(); /* (dietrich) */
> > +#endif
> > static void print_version();
> >
> >
> > @@ -224,6 +231,13 @@
> > #ifdef WIN32
> > printf (" -R\t\tRegister .blend extension\n");
> > #endif
> > +#ifdef WITH_COMMAND_PORT
> > + printf (" -c <port number> | --command-port <port number>\n" /*
> > (dietrich) */
> > + " \t\tStart the Command Port using port <port number>\n");
> > + printf (" --debug-command-port <debug level>\tTurn debug mode on
> > for the command port.\n"); /* (dietrich) */
> > + printf (" \t\tFour different debug levels are defined: 1, 2, 3 and
> > 4.\n");
> > + printf (" \t\tFor more information try --debug-command-port
> > help.\n");
> > +#endif
> > printf (" -v\t\tPrint Blender version and exit\n");
> > printf (" --\t\tEnds option processing. Following arguments are
> > \n");
> > printf (" \t\t passed unchanged. Access via Python's
> > sys.argv\n");
> > @@ -252,7 +266,37 @@
> > printf (" \"blender -b test.blend -o /tmp -f 1\" works as
> > expected.\n\n");
> > }
> >
> > +#ifdef WITH_COMMAND_PORT
> > +/**
> > + help message for the command port debug mode
> >
> > + (dietrich)
> > +*/
> > +static void print_debug_command_port_help()
> > +{
> > + printf("\n"
> > + "* Command Port Debug Mode\n"
> > + "\n"
> > + "Usage:\n"
> > + "\n"
> > + " blender --command-port <port number> --debug-command-port
> > <debug level> [more options]\n"
> > + "\n"
> > + "Print messages for debugging the command port functionality.\n"
> > + "This mode is very useful when developing new command port
> > client applications.\n"
> > + "\n"
> > + "Four different debug levels are defined:\n"
> > + "\n"
> > + " 1 - Print general command port debug messages.\n"
> > + " 2 - Print more detailed information about the evaluation of
> > received commands,\n"
> > + " the command packages received from a Blender client and
> > the result packages\n"
> > + " sent back to the client after evaluating the commands.\n"
> > + " 3 - Hexdump the received packages before processing them.\n"
> > + " 4 - Hexdump the received packages without processing them.\n"
> > + "\n"
> > + );
> > +}
> > +#endif
> > +
> > double PIL_check_seconds_timer(void);
> > extern void winlay_get_screensize(int *width_r, int *height_r);
> >
> > @@ -269,6 +313,10 @@
> > {
> > int a, i, stax=0, stay=0, sizx, sizy, scr_init = 0;
> > SYS_SystemHandle syshandle;
> > +#ifdef WITH_COMMAND_PORT
> > + unsigned short port; /* command port */
> > + int command_port_debug_level; /* command port debug level */
> > +#endif
> >
> > #if defined(WIN32) || defined (__linux__)
> > int audio = 1;
> > @@ -554,6 +602,61 @@
> > for(a=1; a<argc; a++) {
> > if (G.afbreek==1) break;
> >
> > +#ifdef WITH_COMMAND_PORT
> > +
> > + /* handle command port option */
> > + if (!strcmp(argv[a], "-c") ||
> > + !strcmp(argv[a], "--command-port")) {
> > +
> > + /* get port number */
> > + if ((argc - a) < 2) {
> > + printf("\nERROR: A port number has to be specified "
> > + "after the command port option!\n");
> > + exit(1);
> > + }
> > + a++;
> > + port = (unsigned short) atoi(argv[a]);
> > +
> > + /* init the command port */
> > + commandport_init(port);
> > +
> > + /* continue with next option */
> > + continue;
> > +
> > + } else
> > +
> > + /* handle command port debug level option */
> > + if (!strcmp(argv[a], "--debug-command-port")) {
> > +
> > + /* debug level */
> > + if ((argc - a) < 2) {
> > + printf("\nERROR: A debug level has to be specified "
> > + "as value of the command port debug level option!\n");
> > + exit(1);
> > + }
> > + a++;
> > +
> > + /* check if help was requested */
> > + if (!strcmp(argv[a], "help")) {
> > +
> > + /* print command port debug help and exit */
> > + print_debug_command_port_help();
> > + exit(0);
> > + }
> > +
> > + /* get the debug level */
> > + command_port_debug_level = (unsigned short) atoi(argv[a]);
> > +
> > + /* init the command port debug level */
> > + commandport_set_debug_level(command_port_debug_level);
> > +
> > + /* continue with next option */
> > + continue;
> > +
> > + } else
> > +
> > +#endif
> > +
> > if(argv[a][0] == '-') {
> > switch(argv[a][1]) {
> > case '-': /* -- ends argument processing */
> >
> > =======================================================================
> > =========
> > Index: source/blender/python/BPY_interface.c
> > ===================================================================
> > --- source/blender/python/BPY_interface.c (revision 15538)
> > +++ source/blender/python/BPY_interface.c (working copy)
> > @@ -100,7 +100,7 @@
> > * creates list in __main__ module dict
> > */
> >
> > -int setup_armature_weakrefs()
> > +int BPY_setup_armature_weakrefs()
> > {
> > PyObject *maindict;
> > PyObject *main_module;
> > @@ -123,7 +123,7 @@
> > if (PyDict_SetItemString(maindict,
> > list_name,
> > PyList_New(0)) == -1){
> > - printf("Oops - setup_armature_weakrefs()\n");
> > + printf("Oops - BPY_setup_armature_weakrefs()\n");
> >
> > return 0;
> > }
> > @@ -674,7 +674,7 @@
> >
> > py_dict = CreateGlobalDictionary( );
> >
> > - if( !setup_armature_weakrefs()){
> > + if( !BPY_setup_armature_weakrefs()){
> > printf("Oops - weakref dict\n");
> > PyGILState_Release(gilstate);
> > return 0;
> > @@ -857,7 +857,7 @@
> >
> > script->py_globaldict = py_dict;
> >
> > - if( !setup_armature_weakrefs()){
> > + if( !BPY_setup_armature_weakrefs()){
> > printf("Oops - weakref dict\n");
> > free_libblock( &G.main->script, script );
> > ReleaseGlobalDictionary( py_dict );
> > @@ -1539,7 +1539,7 @@
> > PyList_SET_ITEM(tarmats, index, tarmat);
> > }
> >
> > - if (!setup_armature_weakrefs()) {
> > + if (!BPY_setup_armature_weakrefs()) {
> > fprintf(stderr, "Oops - weakref dict setup\n");
> > PyGILState_Release(gilstate);
> >
> > @@ -1707,7 +1707,7 @@
> > tarmat = newMatrixObject((float *)ct->matrix, 4, 4, Py_NEW);
> > idprop = BPy_Wrap_IDProperty( NULL, con->prop, NULL);
> >
> > - if (!setup_armature_weakrefs()) {
> > + if (!BPY_setup_armature_weakrefs()) {
> > fprintf(stderr, "Oops - weakref dict setup\n");
> > PyGILState_Release(gilstate);
> > return;
> > @@ -2021,7 +2021,7 @@
> >
> > setitem_retval = EXPP_dict_set_item_str(bpy_pydriver_Dict, "self",
> > bpy_ob);
> >
> > - if( !setup_armature_weakrefs()){
> > + if( !BPY_setup_armature_weakrefs()){
> > fprintf( stderr, "Oops - weakref dict setup\n");
> > PyGILState_Release(gilstate);
> > return result;
> > @@ -2108,7 +2108,7 @@
> > }
> >
> >
> > - if( !setup_armature_weakrefs()){
> > + if( !BPY_setup_armature_weakrefs()){
> > fprintf(stderr, "Oops - weakref dict\n");
> > PyGILState_Release(gilstate);
> > return -1;
> > @@ -2262,7 +2262,7 @@
> >
> > gilstate = PyGILState_Ensure();
> >
> > - if( !setup_armature_weakrefs()){
> > + if( !BPY_setup_armature_weakrefs()){
> > printf("Oops - weakref dict, this is a bug\n");
> > PyGILState_Release(gilstate);
> > return;
> > @@ -2504,7 +2504,7 @@
> >
> > gilstate = PyGILState_Ensure();
> >
> > - if( !setup_armature_weakrefs()){
> > + if( !BPY_setup_armature_weakrefs()){
> > printf("Oops - weakref dict, this is a bug\n");
> > PyGILState_Release(gilstate);
> > return 0;
> > =======================================================================
> > =========
> > Index: source/blender/src/mainqueue.c
> > ===================================================================
> > --- source/blender/src/mainqueue.c (revision 15538)
> > +++ source/blender/src/mainqueue.c (working copy)
> > @@ -22,7 +22,10 @@
> > *
> > * The Original Code is: all of this file.
> > *
> > - * Contributor(s): none yet.
> > + * Contributor(s):
> > + * - Dietrich Bollmann
> > + * - added thread protection (mainqueue_mutex) for main queue.
> > + * - added the new parameter 'args' to pass an argument struct
> > pointer
> > *
> > * ***** END GPL LICENSE BLOCK *****
> > *
> > @@ -32,16 +35,58 @@
> >
> > #include <stdlib.h>
> > #include <string.h>
> > +
> > +#ifdef WITH_MULTI_THREADING_SUPPORT
> > +#include <pthread.h>
> > +#endif
> > +#include <stdio.h>
> > +
> > #include "BIF_mainqueue.h"
> >
> > #ifdef HAVE_CONFIG_H
> > #include <config.h>
> > #endif
> >
> > +
> > +#ifdef WITH_MULTI_THREADING_SUPPORT
> > +/**
> > + Using a mutex to protect the mainqueue against simultaneous access
> > + by different threads:
> > +*/
> > +pthread_mutex_t mainqueue_mutex = PTHREAD_MUTEX_INITIALIZER;
> > +
> > +/**
> > + Locking the mutex
> > + protecting the mainqueue against access by multiple threads.
> > +*/
> > +void lock_mainqueue_mutex()
> > +{
> > + if ( pthread_mutex_lock( &mainqueue_mutex ) ) {
> > + perror( "Error: couldn't lock the mainqueue mutex!" );
> > + exit( 1 );
> > + }
> > +}
> > +
> > +/**
> > + Unlocking the mutex
> > + protecting the mainqueue against access by multiple threads.
> > +*/
> > +void unlock_mainqueue_mutex()
> > +{
> > + if ( pthread_mutex_unlock( &mainqueue_mutex ) ) {
> > + perror( "Error: couldn't unlock the mainqueue mutex!" );
> > + exit( 1 );
> > + }
> > +}
> > +#endif
> > +
> > typedef struct {
> > - unsigned short event;
> > - short val;
> > - char ascii;
> > + unsigned short event;
> > + short val;
> > + char ascii;
> > +#ifdef WITH_COMMAND_PORT
> > + void* args;
> > +#endif
> > } QEvent;
> >
> > static QEvent mainqueue[MAXQUEUE];
> > @@ -49,51 +94,154 @@
> >
> > unsigned short mainqread(short *val, char *ascii)
> > {
> > + void* dummy;
> > + return mainqread_args(val, ascii
> > +#ifdef WITH_COMMAND_PORT
> > + , &dummy
> > +#endif
> > + );
> > +}
> > +
> > +unsigned short mainqread_args(short *val, char *ascii
> > +#ifdef WITH_COMMAND_PORT
> > + , void** args
> > +#endif
> > + )
> > +{
> > + unsigned short event = 0;
> > +
> > +
> > +#ifdef WITH_MULTI_THREADING_SUPPORT
> > + lock_mainqueue_mutex();
> > + /* begin of critical section */
> > +#endif
> > +
> > if (nevents) {
> > nevents--;
> >
> > - *val= mainqueue[nevents].val;
> > - *ascii= mainqueue[nevents].ascii;
> > + *val = mainqueue[nevents].val;
> > + *ascii = mainqueue[nevents].ascii;
> > +#ifdef WITH_COMMAND_PORT
> > + *args = mainqueue[nevents].args;
> > +#endif
> > if((*ascii<32)||(*ascii==127)) *ascii=0;
> > - return mainqueue[nevents].event;
> > - } else
> > - return 0;
> > + event = mainqueue[nevents].event;
> > + }
> > +
> > +
> > +#ifdef WITH_MULTI_THREADING_SUPPORT
> > + /* end of critical section */
> > + unlock_mainqueue_mutex();
> > +#endif
> > +
> > + return event;
> > }
> >
> > void mainqenter(unsigned short event, short val)
> > {
> > - mainqenter_ext(event, val, 0);
> > + mainqenter_args(event, val, 0
> > +#ifdef WITH_COMMAND_PORT
> > + , NULL
> > +#endif
> > + );
> > }
> >
> > void mainqenter_ext(unsigned short event, short val, char ascii)
> > {
> > + mainqenter_args(event, val, ascii
> > +#ifdef WITH_COMMAND_PORT
> > + , NULL
> > +#endif
> > + );
> > +}
> > +
> > +void mainqenter_args(unsigned short event, short val, char ascii
> > +#ifdef WITH_COMMAND_PORT
> > + , void* args
> > +#endif
> > + )
> > +{
> > if (!event)
> > return;
> >
> > +#ifdef WITH_MULTI_THREADING_SUPPORT
> > + lock_mainqueue_mutex();
> > + /* begin of critical section */
> > +#endif
> > +
> > if (nevents<MAXQUEUE) {
> > +
> > memmove(mainqueue+1, mainqueue, sizeof(*mainqueue)*nevents);
> > - mainqueue[0].event= event;
> > - mainqueue[0].val= val;
> > - mainqueue[0].ascii= ascii;
> > + mainqueue[0].event = event;
> > + mainqueue[0].val = val;
> > + mainqueue[0].ascii = ascii;
> > +#ifdef WITH_COMMAND_PORT
> > + mainqueue[0].args = args;
> > +#endif
> >
> > nevents++;
> > }
> > +
> > +#ifdef WITH_MULTI_THREADING_SUPPORT
> > + /* end of critical section */
> > + unlock_mainqueue_mutex();
> > +#endif
> > }
> >
> > void mainqpushback(unsigned short event, short val, char ascii)
> > {
> > + mainqpushback_args(event, val, ascii
> > +#ifdef WITH_COMMAND_PORT
> > + , NULL
> > +#endif
> > + );
> > +}
> > +
> > +void mainqpushback_args(unsigned short event, short val, char ascii
> > +#ifdef WITH_COMMAND_PORT
> > + , void* args
> > +#endif
> > + )
> > +{
> > +#ifdef WITH_MULTI_THREADING_SUPPORT
> > + lock_mainqueue_mutex();
> > + /* begin of critical section */
> > +#endif
> > +
> > if (nevents<MAXQUEUE) {
> > - mainqueue[nevents].event= event;
> > - mainqueue[nevents].val= val;
> > - mainqueue[nevents].ascii= ascii;
> > + mainqueue[nevents].event = event;
> > + mainqueue[nevents].val = val;
> > + mainqueue[nevents].ascii = ascii;
> > +#ifdef WITH_COMMAND_PORT
> > + mainqueue[nevents].args = args;
> > +#endif
> > nevents++;
> > }
> > +
> > +#ifdef WITH_MULTI_THREADING_SUPPORT
> > + /* end of critical section */
> > + unlock_mainqueue_mutex();
> > +#endif
> > }
> >
> > unsigned short mainqtest()
> > {
> > + unsigned short event = 0;
> > +
> > +#ifdef WITH_MULTI_THREADING_SUPPORT
> > + lock_mainqueue_mutex();
> > + /* begin of critical section */
> > +#endif
> > +
> > if (nevents)
> > - return mainqueue[nevents-1].event;
> > - else
> > - return 0;
> > + event = mainqueue[nevents-1].event;
> > +
> > +#ifdef WITH_MULTI_THREADING_SUPPORT
> > + /* end of critical section */
> > + unlock_mainqueue_mutex();
> > +#endif
> > +
> > + return event;
> > }
> > +
> > +/* fin */
> > =======================================================================
> > =========
> > Index: source/blender/src/editscreen.c
> > ===================================================================
> > --- source/blender/src/editscreen.c (revision 15538)
> > +++ source/blender/src/editscreen.c (working copy)
> > @@ -22,7 +22,8 @@
> > *
> > * The Original Code is: all of this file.
> > *
> > - * Contributor(s): none yet.
> > + * Contributor(s):
> > + * - Dietrich Bollmann - added command port functionality.
> > *
> > * ***** END GPL LICENSE BLOCK *****
> > * All screen functions that are related to the interface
> > @@ -108,6 +109,10 @@
> > #include "mydevice.h"
> > #include "blendef.h"
> >
> > +#ifdef WITH_COMMAND_PORT
> > +#include "commandport.h" /* the Blender command port (dietrich) */
> > +#endif
> > +
> > #include "winlay.h"
> >
> > /* TIPS:
> > @@ -138,6 +143,12 @@
> > /* prototypes -------------------*/
> > int afterqtest(short win, unsigned short evt);
> > unsigned short screen_qread(short *val, char *ascii);
> > +unsigned short screen_qread_args(short *val, char *ascii
> > +#ifdef WITH_COMMAND_PORT
> > + , void** args /* (dietrich) */
> > +#endif
> > + );
> > +unsigned short filter_event(unsigned short event, short val);
> > void add_to_mainqueue(Window *win, void *user_data, short evt, short
> > val, char ascii);
> > static void drawscredge_area(ScrArea *sa);
> >
> > @@ -938,35 +949,88 @@
> > return 0;
> > }
> >
> > +/**
> > + busy waiting for new events.
> > +
> > + Note: The blocking GHOST event processing is
> > + implemented in the same way using busy waiting (polling)
> > + on the GHOST event queue. Doing the same on the Blender
> > + event queue makes it possible to also react to events
> > + inserted into the Blender main event queue by parallel
> > + threads - for example the Blender command port thread.
> > +
> > + Added to make the command port work :)
> > + (dietrich)
> > +*/
> > +static void wait_for_event()
> > +{
> > + while (!mainqtest()) {
> > + PIL_sleep_ms(5); /* sleep for 5 milliseconds */
> > + winlay_process_events(0); /* if there are events in the GHOST queue,
> > + (non-blocking polling of GHOST events)
> > + preprocess them and copy them over
> > + into the Blender main event queue.
> > + */
> > + }
> > +}
> > +
> > +/*
> > + Original version - not reacting on events inserted into the
> > + Blender main event by other threads.
> > +
> > static void wait_for_event(void)
> > {
> > while (!mainqtest()) {
> > winlay_process_events(1);
> > }
> > }
> > +*/
> >
> > -unsigned short screen_qread(short *val, char *ascii)
> > +unsigned short screen_qread(short* val, char* ascii)
> > {
> > + void* dummy;
> > + return screen_qread_args(val, ascii
> > +#ifdef WITH_COMMAND_PORT
> > + , &dummy
> > +#endif
> > + );
> > +}
> > +
> > +unsigned short screen_qread_args(short* val, char* ascii
> > +#ifdef WITH_COMMAND_PORT
> > + , void** args
> > +#endif
> > + )
> > +{
> > unsigned short event;
> >
> > wait_for_event();
> >
> > - event= mainqread(val, ascii);
> > + event = mainqread_args(val, ascii
> > +#ifdef WITH_COMMAND_PORT
> > + , args
> > +#endif
> > + );
> >
> > + return filter_event(event, *val);
> > +}
> > +
> > +unsigned short filter_event(unsigned short event, short val)
> > +{
> > if(event==RIGHTSHIFTKEY || event==LEFTSHIFTKEY) {
> > - if(*val) G.qual |= LR_SHIFTKEY;
> > + if (val) G.qual |= LR_SHIFTKEY;
> > else G.qual &= ~LR_SHIFTKEY;
> > }
> > else if(event==RIGHTALTKEY || event==LEFTALTKEY) {
> > - if(*val) G.qual |= LR_ALTKEY;
> > + if (val) G.qual |= LR_ALTKEY;
> > else G.qual &= ~LR_ALTKEY;
> > }
> > else if(event==RIGHTCTRLKEY || event==LEFTCTRLKEY) {
> > - if(*val) G.qual |= LR_CTRLKEY;
> > + if (val) G.qual |= LR_CTRLKEY;
> > else G.qual &= ~LR_CTRLKEY;
> > }
> > else if(event==COMMANDKEY) { // OSX
> > - if(*val) G.qual |= LR_COMMANDKEY;
> > + if (val) G.qual |= LR_COMMANDKEY;
> > else G.qual &= ~LR_COMMANDKEY;
> > }
> >
> > @@ -1274,19 +1338,38 @@
> > int firsttime = 1;
> > int onload_script = 0;
> >
> > +#ifdef WITH_COMMAND_PORT
> > + /* Start the command port.
> > +
> > + Note: The command port will be started only if the option
> > + -c <port> or --bcp <port>
> > + was specified on the command line.
> > +
> > + (dietrich)
> > + */
> > + commandport_start();
> > +#endif
> > +
> > window_make_active(mainwin);
> >
> > while (1) {
> > unsigned short event;
> > short val, towin;
> > char ascii;
> > +#ifdef WITH_COMMAND_PORT
> > + void* args;
> > +#endif
> >
> > flush_extqd_events();
> > if (nafterqitems && !qtest()) {
> > append_afterqueue();
> > event= val= ascii= 0;
> > } else {
> > - event= screen_qread(&val, &ascii);
> > + event= screen_qread_args(&val, &ascii
> > +#ifdef WITH_COMMAND_PORT
> > + , &args
> > +#endif
> > + );
> > }
> >
> > // window_make_active(mainwin); // (only for inputchange, removed,
> > (ton))
> > @@ -1375,6 +1458,12 @@
> > BIF_read_file(ext_load_str);
> > sound_initialize_sounds();
> > }
> > +#ifdef WITH_COMMAND_PORT
> > + else if (event == COMMAND_PORT_INPUT) {
> > + /* handle Blender command port input (dietrich) */
> > + commandport_handle_input_allocate(args);
> > + }
> > +#endif
> > else if ((event==ONLOAD_SCRIPT) && BPY_has_onload_script()) {
> > /* event queued in setup_app_data() in blender.c, where G.f is
> > checked */
> > onload_script = 1;
> > @@ -2124,10 +2213,10 @@
> > void BIF_wait_for_statechange(void)
> > {
> > if (!statechanged) {
> > - /* Safety, don't wait more than 0.1 seconds */
> > + /* Safety, don't wait more than 0.1 seconds */
> > double stime= PIL_check_seconds_timer();
> > while (!statechanged) {
> > - winlay_process_events(1);
> > + wait_for_event();
> > if ((PIL_check_seconds_timer()-stime)>0.1) break;
> > }
> > statechanged= 0;
> > =======================================================================
> > =========
> > Index: source/blender/src/usiblender.c
> > ===================================================================
> > --- source/blender/src/usiblender.c (revision 15538)
> > +++ source/blender/src/usiblender.c (working copy)
> > @@ -22,7 +22,7 @@
> > *
> > * The Original Code is: all of this file.
> > *
> > - * Contributor(s): none yet.
> > + * Contributor(s): Dietrich Bollmann.
> > *
> > * ***** END GPL LICENSE BLOCK *****
> > */
> > @@ -143,6 +143,10 @@
> > #include "radio.h"
> > #include "datatoc.h"
> >
> > +#ifdef WITH_COMMAND_PORT
> > +#include "commandport.h" /* Blender command port (dietrich) */
> > +#endif
> > +
> > #include "SYS_System.h"
> >
> > #include "PIL_time.h"
> > @@ -1054,6 +1058,11 @@
> > {
> > struct TmpFont *tf;
> >
> > +#ifdef WITH_COMMAND_PORT
> > + /* cleanup the command port (dietrich) */
> > + commandport_destroy();
> > +#endif
> > +
> > BIF_clear_tempfiles();
> >
> > tf= G.ttfdata.first;
> > =======================================================================
> > =========
> > Index: source/blender/src/eventdebug.c
> > ===================================================================
> > --- source/blender/src/eventdebug.c (revision 15538)
> > +++ source/blender/src/eventdebug.c (working copy)
> > @@ -187,6 +187,9 @@
> > smap(ENDKEY);
> > smap(REDRAWNLA);
> > smap(ONLOAD_SCRIPT);
> > +#ifdef WITH_COMMAND_PORT
> > + smap(COMMAND_PORT_INPUT); /* (dietrich) */
> > +#endif
> > }
> > #undef smap
> > }
> > =======================================================================
> > =========
> > =======================================================================
> > =========
> >
> >
> > _______________________________________________
> > Bf-committers mailing list
> > Bf-committers at blender.org
> > http://lists.blender.org/mailman/listinfo/bf-committers
> >
>
More information about the Bf-committers
mailing list