[PD-cvs] pd/src makefile.in, 1.4.4.2.2.21.2.25, 1.4.4.2.2.21.2.26 m_sched.c, 1.5.4.35.2.21.2.4, 1.5.4.35.2.21.2.5 s_loader.c, 1.4.4.5.2.10.2.2, 1.4.4.5.2.10.2.3 s_inter.c, 1.5.4.10.2.25.2.15, 1.5.4.10.2.25.2.16 s_main.c, 1.7.4.17.2.22.2.17, 1.7.4.17.2.22.2.18

Mathieu Bouchard matju at users.sourceforge.net
Thu Jun 28 07:23:34 CEST 2007


Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28387

Modified Files:
      Tag: desiredata
	makefile.in m_sched.c s_loader.c s_inter.c s_main.c 
Log Message:
s_loader.c and m_sched.c go c++


Index: s_inter.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_inter.c,v
retrieving revision 1.5.4.10.2.25.2.15
retrieving revision 1.5.4.10.2.25.2.16
diff -C2 -d -r1.5.4.10.2.25.2.15 -r1.5.4.10.2.25.2.16
*** s_inter.c	28 Jun 2007 04:43:07 -0000	1.5.4.10.2.25.2.15
--- s_inter.c	28 Jun 2007 05:23:32 -0000	1.5.4.10.2.25.2.16
***************
*** 559,563 ****
  
  #ifdef __linux__
! extern "C" void glob_watchdog(t_pd *dummy)
  {
  #ifndef WATCHDOGTHREAD
--- 559,563 ----
  
  #ifdef __linux__
! void glob_watchdog(t_pd *dummy)
  {
  #ifndef WATCHDOGTHREAD

Index: s_loader.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_loader.c,v
retrieving revision 1.4.4.5.2.10.2.2
retrieving revision 1.4.4.5.2.10.2.3
diff -C2 -d -r1.4.4.5.2.10.2.2 -r1.4.4.5.2.10.2.3
*** s_loader.c	20 Dec 2006 08:29:02 -0000	1.4.4.5.2.10.2.2
--- s_loader.c	28 Jun 2007 05:23:32 -0000	1.4.4.5.2.10.2.3
***************
*** 18,22 ****
  #endif
  #include <string.h>
! #include "m_pd.h"
  #include "s_stuff.h"
  #include <stdio.h>
--- 18,22 ----
  #endif
  #include <string.h>
! #include "desire.h"
  #include "s_stuff.h"
  #include <stdio.h>
***************
*** 61,76 ****
  
  static t_loadlist *sys_loaded;
! int sys_onloadlist(char *classname) /* return true if already loaded */
! {
      t_symbol *s = gensym(classname);
      t_loadlist *ll;
      for (ll = sys_loaded; ll; ll = ll->ll_next)
          if (ll->ll_name == s)
!             return (1);
!     return (0);
  }
  
! void sys_putonloadlist(char *classname) /* add to list of loaded modules */
! {
      t_loadlist *ll = (t_loadlist *)getbytes(sizeof(*ll));
      ll->ll_name = gensym(classname);
--- 61,76 ----
  
  static t_loadlist *sys_loaded;
! /* return true if already loaded */
! int sys_onloadlist(char *classname) {
      t_symbol *s = gensym(classname);
      t_loadlist *ll;
      for (ll = sys_loaded; ll; ll = ll->ll_next)
          if (ll->ll_name == s)
!             return 1;
!     return 0;
  }
  
! /* add to list of loaded modules */
! void sys_putonloadlist(char *classname) {
      t_loadlist *ll = (t_loadlist *)getbytes(sizeof(*ll));
      ll->ll_name = gensym(classname);
***************
*** 80,87 ****
  }
  
! void class_set_extern_dir(t_symbol *s);
! 
! static int sys_do_load_lib(t_canvas *canvas, char *objectname)
! {
      char symname[MAXPDSTRING], filename[MAXPDSTRING], dirbuf[MAXPDSTRING], *classname, *nameptr;
      void *dlobj;
--- 80,84 ----
  }
  
! static int sys_do_load_lib(t_canvas *canvas, char *objectname) {
      char symname[MAXPDSTRING], filename[MAXPDSTRING], dirbuf[MAXPDSTRING], *classname, *nameptr;
      void *dlobj;
***************
*** 91,95 ****
      HINSTANCE ntdll;
  #endif
!     if (classname = strrchr(objectname, '/'))
          classname++;
      else classname = objectname;
--- 88,92 ----
      HINSTANCE ntdll;
  #endif
!     if ((classname = strrchr(objectname, '/')))
          classname++;
      else classname = objectname;
***************
*** 97,101 ****
      {
          post("%s: already loaded", objectname);
!         return (1);
      }
      for (i = 0, nameptr = classname; i < MAXPDSTRING-7 && *nameptr; nameptr++)
--- 94,98 ----
      {
          post("%s: already loaded", objectname);
!         return 1;
      }
      for (i = 0, nameptr = classname; i < MAXPDSTRING-7 && *nameptr; nameptr++)
***************
*** 152,156 ****
          dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0)
              goto gotone;
!     return (0);
  gotone:
      close(fd);
--- 149,153 ----
          dirbuf, &nameptr, MAXPDSTRING, 1)) >= 0)
              goto gotone;
!     return 0;
  gotone:
      close(fd);
***************
*** 170,174 ****
          post("%s: %s", filename, dlerror());
          class_set_extern_dir(&s_);
!         return (0);
      }
      makeout = (t_xxx)dlsym(dlobj,  symname);
--- 167,171 ----
          post("%s: %s", filename, dlerror());
          class_set_extern_dir(&s_);
!         return 0;
      }
      makeout = (t_xxx)dlsym(dlobj,  symname);
***************
*** 181,185 ****
          post("%s: couldn't load", filename);
          class_set_extern_dir(&s_);
!         return (0);
      }
      makeout = (t_xxx)GetProcAddress(ntdll, symname);  
--- 178,182 ----
          post("%s: couldn't load", filename);
          class_set_extern_dir(&s_);
!         return 0;
      }
      makeout = (t_xxx)GetProcAddress(ntdll, symname);  
***************
*** 195,199 ****
      class_set_extern_dir(&s_);
      sys_putonloadlist(objectname);
!     return (1);
  }
  
--- 192,196 ----
      class_set_extern_dir(&s_);
      sys_putonloadlist(objectname);
!     return 1;
  }
  

Index: s_main.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_main.c,v
retrieving revision 1.7.4.17.2.22.2.17
retrieving revision 1.7.4.17.2.22.2.18
diff -C2 -d -r1.7.4.17.2.22.2.17 -r1.7.4.17.2.22.2.18
*** s_main.c	28 Jun 2007 04:43:07 -0000	1.7.4.17.2.22.2.17
--- s_main.c	28 Jun 2007 05:23:32 -0000	1.7.4.17.2.22.2.18
***************
*** 35,45 ****
  #endif
  
! extern "C" void pd_init(void);
  extern "C" int sys_argparse(int argc, char **argv);
  void sys_findprogdir(char *progname);
! int sys_startgui(void);
! extern "C" void sys_init_idle_callbacks(void);
! extern "C" int sys_rcfile(void);
! extern "C" int m_scheduler(void);
  void sys_addhelppath(char *p);
  extern "C" void alsa_adddev(char *name);
--- 35,45 ----
  #endif
  
! extern "C" void pd_init();
  extern "C" int sys_argparse(int argc, char **argv);
  void sys_findprogdir(char *progname);
! int sys_startgui();
! void sys_init_idle_callbacks();
! extern "C" int sys_rcfile();
! extern int m_scheduler();
  void sys_addhelppath(char *p);
  extern "C" void alsa_adddev(char *name);
***************
*** 47,51 ****
  
  #ifdef THREADED_SF
! void sys_start_sfthread(void);
  #endif /* THREDED_SF */
  
--- 47,51 ----
  
  #ifdef THREADED_SF
! void sys_start_sfthread();
  #endif /* THREDED_SF */
  
***************
*** 115,119 ****
  /* } jsarlo */
  
! static void sys_afterargparse(void);
  
  EXTERN t_hash *class_table;
--- 115,119 ----
  /* } jsarlo */
  
! static void sys_afterargparse();
  
  EXTERN t_hash *class_table;
***************
*** 150,159 ****
  
      if (sys_argparse(argc-1, argv+1))           /* parse cmd line */
!         return (1);
      sys_afterargparse();                    /* post-argparse settings */
      if (sys_verbose || sys_version) fprintf(stderr, "%scompiled %s %s\n",
          pd_version, pd_compiletime, pd_compiledate);
      if (sys_version)    /* if we were just asked our version, exit here. */
!         return (0);
  
      if (sys_startgui()) return 1;      /* start the gui */
--- 150,159 ----
  
      if (sys_argparse(argc-1, argv+1))           /* parse cmd line */
!         return 1;
      sys_afterargparse();                    /* post-argparse settings */
      if (sys_verbose || sys_version) fprintf(stderr, "%scompiled %s %s\n",
          pd_version, pd_compiletime, pd_compiledate);
      if (sys_version)    /* if we were just asked our version, exit here. */
!         return 0;
  
      if (sys_startgui()) return 1;      /* start the gui */
***************
*** 184,191 ****
          sys_bashfilename(filename, filename);
          ntdll = LoadLibrary(filename);
!         if (!ntdll)
!         {
                post("%s: couldn't load external scheduler lib ", filename);
!               return (0);
          }
          externalmainfunc = (t_externalschedlibmain)GetProcAddress(ntdll,
--- 184,190 ----
          sys_bashfilename(filename, filename);
          ntdll = LoadLibrary(filename);
!         if (!ntdll) {
                post("%s: couldn't load external scheduler lib ", filename);
!               return 0;
          }
          externalmainfunc = (t_externalschedlibmain)GetProcAddress(ntdll,
***************
*** 193,206 ****
          return((*externalmainfunc)(sys_extraflagsstring));
  #else
!         return (0);
  #endif
!     }
!     else
!     {
              /* open audio and MIDI */
          sys_reopen_midi();
          sys_reopen_audio();
              /* run scheduler until it quits */
!         return (m_scheduler());
      }
      /* } jsarlo */
--- 192,203 ----
          return((*externalmainfunc)(sys_extraflagsstring));
  #else
!         return 0;
  #endif
!     } else {
              /* open audio and MIDI */
          sys_reopen_midi();
          sys_reopen_audio();
              /* run scheduler until it quits */
!         return m_scheduler();
      }
      /* } jsarlo */
***************
*** 645,665 ****
              return 1;
      }
!     for (; argc > 0; argc--, argv++)
!         sys_openlist = namelist_append_files(sys_openlist, *argv);
! 
! 
      return 0;
  }
  
! int sys_getblksize(void)
! {
!     return (sys_dacblocksize);
! }
  
      /* stuff to do, once, after calling sys_argparse() -- which may itself
      be called more than once (first from "settings, second from .pdrc, then
      from command-line arguments */
! static void sys_afterargparse(void)
! {
      char sbuf[MAXPDSTRING];
      int i;
--- 642,655 ----
              return 1;
      }
!     for (; argc > 0; argc--, argv++) sys_openlist = namelist_append_files(sys_openlist, *argv);
      return 0;
  }
  
! int sys_getblksize() {return sys_dacblocksize;}
  
      /* stuff to do, once, after calling sys_argparse() -- which may itself
      be called more than once (first from "settings, second from .pdrc, then
      from command-line arguments */
! static void sys_afterargparse() {
      char sbuf[MAXPDSTRING];
      int i;
***************
*** 696,755 ****
      if (sys_listplease)
          sys_listdevs();
!         
!             /* get the current audio parameters.  These are set
!             by the preferences mechanism (sys_loadpreferences()) or
!             else are the default.  Overwrite them with any results
!             of argument parsing, and store them again. */
      sys_get_audio_params(&naudioindev, audioindev, chindev,
  			 &naudiooutdev, audiooutdev, choutdev, &rate, &dacblksize, &advance, &scheduler);
!     if (sys_nchin >= 0)
!     {
          nchindev = sys_nchin;
!         for (i = 0; i < nchindev; i++)
!             chindev[i] = sys_chinlist[i];
!     }
!     else nchindev = naudioindev;
!     if (sys_nsoundin >= 0)
!     {
          naudioindev = sys_nsoundin;
!         for (i = 0; i < naudioindev; i++)
!             audioindev[i] = sys_soundindevlist[i];
      }
!     
!     if (sys_nchout >= 0)
!     {
          nchoutdev = sys_nchout;
!         for (i = 0; i < nchoutdev; i++)
!             choutdev[i] = sys_choutlist[i];
!     }
!     else nchoutdev = naudiooutdev;
!     if (sys_nsoundout >= 0)
!     {
          naudiooutdev = sys_nsoundout;
!         for (i = 0; i < naudiooutdev; i++)
!             audiooutdev[i] = sys_soundoutdevlist[i];
      }
!     if (sys_nmidiin >= 0)
!     {
          nmidiindev = sys_nmidiin;
!         for (i = 0; i < nmidiindev; i++)
!             midiindev[i] = sys_midiindevlist[i];
      }
!     if (sys_nmidiout >= 0)
!     {
          nmidioutdev = sys_nmidiout;
!         for (i = 0; i < nmidioutdev; i++)
!             midioutdev[i] = sys_midioutdevlist[i];
      }
!     if (sys_main_advance)
!         advance = sys_main_advance;
!     if (sys_main_srate)
!         rate = sys_main_srate;
!     if (sys_main_dacblocksize)
!       dacblksize = sys_main_dacblocksize;
      sys_open_audio(naudioindev,  audioindev,  nchindev,  chindev,
! 		   naudiooutdev, audiooutdev, nchoutdev, choutdev, rate, dacblksize, advance, scheduler, 0);
! 
! 
      sys_open_midi(nmidiindev, midiindev, nmidioutdev, midioutdev, 0);
  }
--- 686,726 ----
      if (sys_listplease)
          sys_listdevs();
! 
!     /* get the current audio parameters.  These are set
!        by the preferences mechanism (sys_loadpreferences()) or
!        else are the default.  Overwrite them with any results
!        of argument parsing, and store them again. */
      sys_get_audio_params(&naudioindev, audioindev, chindev,
  			 &naudiooutdev, audiooutdev, choutdev, &rate, &dacblksize, &advance, &scheduler);
!     if (sys_nchin >= 0) {
          nchindev = sys_nchin;
!         for (i=0; i<nchindev; i++) chindev[i] = sys_chinlist[i];
!     } else nchindev = naudioindev;
!     if (sys_nsoundin >= 0) {
          naudioindev = sys_nsoundin;
!         for (i=0; i<naudioindev; i++) audioindev[i] = sys_soundindevlist[i];
      }
!     if (sys_nchout >= 0) {
          nchoutdev = sys_nchout;
!         for (i=0; i<nchoutdev; i++) choutdev[i] = sys_choutlist[i];
!     } else nchoutdev = naudiooutdev;
!     if (sys_nsoundout >= 0) {
          naudiooutdev = sys_nsoundout;
!         for (i=0; i<naudiooutdev; i++) audiooutdev[i] = sys_soundoutdevlist[i];
      }
!     if (sys_nmidiin >= 0) {
          nmidiindev = sys_nmidiin;
!         for (i=0; i<nmidiindev; i++) midiindev[i] = sys_midiindevlist[i];
      }
!     if (sys_nmidiout >= 0) {
          nmidioutdev = sys_nmidiout;
!         for (i=0; i<nmidioutdev; i++) midioutdev[i] = sys_midioutdevlist[i];
      }
!     if (sys_main_advance) advance = sys_main_advance;
!     if (sys_main_srate)      rate = sys_main_srate;
!     if (sys_main_dacblocksize) dacblksize = sys_main_dacblocksize;
      sys_open_audio(naudioindev,  audioindev,  nchindev,  chindev,
! 		   naudiooutdev, audiooutdev, nchoutdev, choutdev,
! 		   rate, dacblksize, advance, scheduler, 0);
      sys_open_midi(nmidiindev, midiindev, nmidioutdev, midioutdev, 0);
  }

Index: m_sched.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/m_sched.c,v
retrieving revision 1.5.4.35.2.21.2.4
retrieving revision 1.5.4.35.2.21.2.5
diff -C2 -d -r1.5.4.35.2.21.2.4 -r1.5.4.35.2.21.2.5
*** m_sched.c	9 Jan 2007 17:14:09 -0000	1.5.4.35.2.21.2.4
--- m_sched.c	28 Jun 2007 05:23:32 -0000	1.5.4.35.2.21.2.5
***************
*** 42,46 ****
  /* tb: }*/
  
! int sys_usecsincelastsleep(void);
  int sys_sleepgrain;
  
--- 42,46 ----
  /* tb: }*/
  
! int sys_usecsincelastsleep ();
  int sys_sleepgrain;
  
***************
*** 113,117 ****
  
  /* OBSOLETE NAME */
! double clock_getsystime(void) {return sys_time;}
  
  /* elapsed time in milliseconds since the given system time */
--- 113,117 ----
  
  /* OBSOLETE NAME */
! double clock_getsystime () {return sys_time;}
  
  /* elapsed time in milliseconds since the given system time */
***************
*** 140,144 ****
  static int sched_diddsp, sched_didpoll, sched_didnothing;
  
! void sys_clearhist(void) {
      unsigned i,j;
      for (i=0; i<NHIST; i++) for (j=0; j<NBIN; j++) sys_histogram[i][j] = 0;
--- 140,144 ----
  static int sched_diddsp, sched_didpoll, sched_didnothing;
  
! void sys_clearhist () {
      unsigned i,j;
      for (i=0; i<NHIST; i++) for (j=0; j<NBIN; j++) sys_histogram[i][j] = 0;
***************
*** 147,151 ****
  }
  
! void sys_printhist(void) {
      unsigned i,j;
      for (i=0; i<NHIST; i++) {
--- 147,151 ----
  }
  
! void sys_printhist () {
      unsigned i,j;
      for (i=0; i<NHIST; i++) {
***************
*** 167,175 ****
      int j, phasewas = sys_histphase;
      double newtime = sys_getrealtime();
!     int msec = (newtime - sys_histtime) * 1000.;
!     for (j = NBIN-1; j >= 0; j--)
!     {
!         if (msec >= sys_bin[j]) 
!         {
              sys_histogram[phasewas][j]++;
              break;
--- 167,173 ----
      int j, phasewas = sys_histphase;
      double newtime = sys_getrealtime();
!     int msec = int((newtime-sys_histtime)*1000.);
!     for (j = NBIN-1; j >= 0; j--) {
!         if (msec >= sys_bin[j]) {
              sys_histogram[phasewas][j]++;
              break;
***************
*** 178,182 ****
      sys_histtime = newtime;
      sys_histphase = phase;
!     return (phasewas);
  }
  
--- 176,180 ----
      sys_histtime = newtime;
      sys_histphase = phase;
!     return phasewas;
  }
  
***************
*** 204,209 ****
  };
  
! void glob_audiostatus(void)
! {
      int nresync, nresyncphase, i;
      nresync = (oss_nresync >= NRESYNC ? NRESYNC : oss_nresync);
--- 202,206 ----
  };
  
! void glob_audiostatus (void *dummy) {
      int nresync, nresyncphase, i;
      nresync = (oss_nresync >= NRESYNC ? NRESYNC : oss_nresync);
***************
*** 248,255 ****
  }
  
! static int sched_lastinclip, sched_lastoutclip,
!     sched_lastindb, sched_lastoutdb;
! 
! void glob_watchdog(t_pd *dummy);
  
  static void sched_pollformeters( void)
--- 245,249 ----
  }
  
! static int sched_lastinclip, sched_lastoutclip, sched_lastindb, sched_lastoutdb;
  
  static void sched_pollformeters( void)
***************
*** 281,286 ****
          float inmax, outmax;
          sys_getmeters(&inmax, &outmax);
!         indb = 0.5 + rmstodb(inmax);
!         outdb = 0.5 + rmstodb(outmax);
          inclip = (inmax > 0.999);
          outclip = (outmax >= 1.0);
--- 275,280 ----
          float inmax, outmax;
          sys_getmeters(&inmax, &outmax);
!         indb = int(0.5 + rmstodb(inmax));
!         outdb = int(0.5 + rmstodb(outmax));
          inclip = (inmax > 0.999);
          outclip = (outmax >= 1.0);
***************
*** 321,325 ****
  #endif
  
! void dsp_tick(void);
  
  static int sched_usedacs = 0;
--- 315,319 ----
  #endif
  
! extern "C" void dsp_tick ();
  
  static int sched_usedacs = 0;
***************
*** 386,415 ****
  void sys_initmidiqueue( void);
  
! int m_scheduler(void)
! {
      int idlecount = 0;
!     sys_time_per_dsp_tick = (TIMEUNITPERSEC) *
!         ((double)sys_schedblocksize) / sys_dacsr;
!     
      /* T.Grill - lock mutex */
      sys_lock();
-     
      sys_clearhist();
- 
      /* tb: adapt sleepgrain with advance */
      sys_update_sleepgrain();
- 
      sched_set_using_dacs(0); /* tb: dsp is switched off */
- 
      sys_initmidiqueue();
! 
!     while (!sys_quit)
!     {
          if (!sys_callbackscheduler || !sched_usedacs)
!             while (sys_keepsched)
!             {
                  int didsomething = 0;
                  int timeforward;
- 
              waitfortick:
                  if (sched_usedacs)
--- 380,398 ----
  void sys_initmidiqueue( void);
  
! int m_scheduler () {
      int idlecount = 0;
!     sys_time_per_dsp_tick = (TIMEUNITPERSEC) * ((double)sys_schedblocksize) / sys_dacsr;
      /* T.Grill - lock mutex */
      sys_lock();
      sys_clearhist();
      /* tb: adapt sleepgrain with advance */
      sys_update_sleepgrain();
      sched_set_using_dacs(0); /* tb: dsp is switched off */
      sys_initmidiqueue();
!     while (!sys_quit) {
          if (!sys_callbackscheduler || !sched_usedacs)
!             while (sys_keepsched) {
                  int didsomething = 0;
                  int timeforward;
              waitfortick:
                  if (sched_usedacs)
***************
*** 429,434 ****
                              if (idlecount == 32)
                                  idletime = sys_getrealtime();
!                             else if (sys_getrealtime() - idletime > 1.)
!                             {
                                  post("audio I/O stuck... closing audio\n");
                                  sys_close_audio();
--- 412,416 ----
                              if (idlecount == 32)
                                  idletime = sys_getrealtime();
!                             else if (sys_getrealtime() - idletime > 1.) {
                                  post("audio I/O stuck... closing audio\n");
                                  sys_close_audio();
***************
*** 438,444 ****
                          }
                      }
!                 }
!                 else
!                 {
                      if (1000. * (sys_getrealtime() - sched_referencerealtime)
                          > clock_gettimesince(sched_referencelogicaltime))
--- 420,424 ----
                          }
                      }
!                 } else {
                      if (1000. * (sys_getrealtime() - sched_referencerealtime)
                          > clock_gettimesince(sched_referencelogicaltime))
***************
*** 447,475 ****
                  }
                  sys_setmiditimediff(0, 1e-6 * sys_schedadvance);
! 
!                 if (timeforward != SENDDACS_NO)
!                 {
                      sched_tick(sys_time + sys_time_per_dsp_tick);
-                 }               
-                 if (timeforward == SENDDACS_YES)
-                     didsomething = 1;
- 
-                 sys_pollmidiqueue();
-                 if (sys_pollgui())
-                 {
-                     didsomething = 1;
                  }
! 
                  /* test for idle; if so, do graphics updates. */
!                 if (!didsomething)
!                 {
! 
                      sched_pollformeters();
- 
                      /* tb: call idle callbacks */
!                     if (timeforward != SENDDACS_SLEPT)
!                     {
!                         run_idle_callbacks(sys_sleepgrain);
!                     }
                  }
              }
--- 427,441 ----
                  }
                  sys_setmiditimediff(0, 1e-6 * sys_schedadvance);
!                 if (timeforward != SENDDACS_NO) {
                      sched_tick(sys_time + sys_time_per_dsp_tick);
                  }
!                 if (timeforward == SENDDACS_YES) didsomething = 1;
!                 sys_pollmidiqueue();
!                 if (sys_pollgui()) didsomething = 1;
                  /* test for idle; if so, do graphics updates. */
!                 if (!didsomething) {
                      sched_pollformeters();
                      /* tb: call idle callbacks */
!                     if (timeforward != SENDDACS_SLEPT) run_idle_callbacks(sys_sleepgrain);
                  }
              }
***************
*** 484,491 ****
                  sys_pollmidiqueue();
                  sys_setmiditimediff(0, 1e-6 * sys_schedadvance);
-                 
                  if (sys_pollgui())
                      continue;
-                 
                  /* do graphics updates and run idle callbacks */
                  sched_pollformeters();
--- 450,455 ----
***************
*** 497,501 ****
      sys_close_audio();
      sys_unlock();
!     return (0);
  }
  
--- 461,465 ----
      sys_close_audio();
      sys_unlock();
!     return 0;
  }
  
***************
*** 508,524 ****
  static pthread_cond_t sys_cond = PTHREAD_COND_INITIALIZER;
  
! void sys_lock(void)
! {
      pthread_mutex_lock(&sys_mutex);
  }
! 
! void sys_unlock(void)
! {
      pthread_mutex_unlock(&sys_mutex);
      pthread_cond_signal(&sys_cond);
  }
! 
! int sys_trylock(void)
! {
      return pthread_mutex_trylock(&sys_mutex);
  }
--- 472,483 ----
  static pthread_cond_t sys_cond = PTHREAD_COND_INITIALIZER;
  
! void sys_lock () {
      pthread_mutex_lock(&sys_mutex);
  }
! void sys_unlock () {
      pthread_mutex_unlock(&sys_mutex);
      pthread_cond_signal(&sys_cond);
  }
! int sys_trylock () {
      return pthread_mutex_trylock(&sys_mutex);
  }
***************
*** 529,545 ****
  #ifdef MSW
  /* gettimeofday isn't available on windoze ... */
! int gettimeofday (struct timeval *tv, void* tz)
! {
      __int64 now; /* time since 1 Jan 1601 in 100ns  */
-     
      GetSystemTimeAsFileTime ((FILETIME*) &now);
      tv->tv_usec = (long) ((now / 10LL) % 1000000LL);
      tv->tv_sec = (long) ((now - 116444736000000000LL) / 10000000LL);
!     return (0);
! } 
  #endif
  
! 
! #if 0 
  /* osx doesn't define a pthread_mutex_timedlock ... maybe someday
     it will ... */
--- 488,501 ----
  #ifdef MSW
  /* gettimeofday isn't available on windoze ... */
! int gettimeofday (struct timeval *tv, void* tz) {
      __int64 now; /* time since 1 Jan 1601 in 100ns  */
      GetSystemTimeAsFileTime ((FILETIME*) &now);
      tv->tv_usec = (long) ((now / 10LL) % 1000000LL);
      tv->tv_sec = (long) ((now - 116444736000000000LL) / 10000000LL);
!     return 0;
! }
  #endif
  
! #if 0
  /* osx doesn't define a pthread_mutex_timedlock ... maybe someday
     it will ... */
***************
*** 549,608 ****
          int ret;
          struct timeval now;
-         
          /* timedlock seems to have a resolution of 1ms */
!         if (microsec < 1e3)
!                 microsec = 1e3;
!         
          gettimeofday(&now,0);
- 
          timeout.tv_sec = now.tv_sec;
          timeout.tv_nsec = (now.tv_usec + microsec) * 1000;
!         
!         while (timeout.tv_nsec > 1e9)
!         {
                  timeout.tv_sec += 1;
                  timeout.tv_nsec -= 1e9;
          }
-         
          ret = pthread_mutex_timedlock(&sys_mutex, &timeout);
! 
!         if (ret)
!             post("timeout, %d", ret);
!         
          return ret;
  }
  #else
  
! int sys_timedlock(int microsec)
! {
      struct timespec timeout;
      int ret;
      struct timeval now;
! 
!     if (sys_trylock() == 0)
!         return 0;
! 
!     if (microsec < 1e3)
!         microsec = 1e3;
!  
!     gettimeofday(&now,0); 
!     
      timeout.tv_sec = now.tv_sec;
      timeout.tv_nsec = (now.tv_usec + microsec) * 1000;
!     
!     while (timeout.tv_nsec > 1e9)
!     {
          timeout.tv_sec += 1;
!         timeout.tv_nsec -= 1e9;
      }
! 
!     
!     /* in case the lock has been released during the system call, try 
         again before waiting for the signal */
!     if (sys_trylock() == 0)
!         return 0;
!     
      ret = pthread_cond_timedwait(&sys_cond, &sys_mutex, &timeout);
-     
      return ret;
  }
--- 505,540 ----
          int ret;
          struct timeval now;
          /* timedlock seems to have a resolution of 1ms */
!         if (microsec < 1000) microsec = 1000;
          gettimeofday(&now,0);
          timeout.tv_sec = now.tv_sec;
          timeout.tv_nsec = (now.tv_usec + microsec) * 1000;
!         while (timeout.tv_nsec > 1e9) {
                  timeout.tv_sec += 1;
                  timeout.tv_nsec -= 1e9;
          }
          ret = pthread_mutex_timedlock(&sys_mutex, &timeout);
!         if (ret) post("timeout, %d", ret);
          return ret;
  }
  #else
  
! int sys_timedlock(int microsec) {
      struct timespec timeout;
      int ret;
      struct timeval now;
!     if (sys_trylock() == 0) return 0;
!     if (microsec < 1000) microsec = 1000;
!     gettimeofday(&now,0);
      timeout.tv_sec = now.tv_sec;
      timeout.tv_nsec = (now.tv_usec + microsec) * 1000;
!     while (timeout.tv_nsec > 1000000000) {
          timeout.tv_sec += 1;
!         timeout.tv_nsec -= 1000000000;
      }
!     /* in case the lock has been released during the system call, try
         again before waiting for the signal */
!     if (sys_trylock() == 0) return 0;
      ret = pthread_cond_timedwait(&sys_cond, &sys_mutex, &timeout);
      return ret;
  }
***************
*** 611,623 ****
  
  #else
! 
! void sys_lock(void) {}
! void sys_unlock(void) {}
! int sys_trylock(void) { return 0; }
! int sys_timedlock(int microsec) { return 0; }
! 
  #endif
  
- 
  /* ------------ soft quit ------------------- */
  /* added by Thomas Grill - 
--- 543,552 ----
  
  #else
! void sys_lock () {}
! void sys_unlock () {}
! int sys_trylock () { return 0; }
! int sys_timedlock (int microsec) { return 0; }
  #endif
  
  /* ------------ soft quit ------------------- */
  /* added by Thomas Grill - 
***************
*** 626,631 ****
  */
  
! void sys_exit(void)
! {
      sys_keepsched = 0;
      sys_quit = 1;
--- 555,559 ----
  */
  
! void sys_exit () {
      sys_keepsched = 0;
      sys_quit = 1;
***************
*** 660,664 ****
  }
  
! void sys_init_idle_callbacks(void) {
      callback_fifo = fifo_init(); /* tb: initialize fifo for idle callbacks */
  }
--- 588,592 ----
  }
  
! void sys_init_idle_callbacks () {
      callback_fifo = fifo_init(); /* tb: initialize fifo for idle callbacks */
  }
***************
*** 666,673 ****
  static t_sched_callback *ringbuffer_head = NULL;
  
! void run_all_idle_callbacks(void) {
      t_sched_callback * new_callback;
      /* append idle callback to ringbuffer */
!     while (new_callback = (t_sched_callback*) fifo_get(callback_fifo)) {
          t_sched_callback *next;
          /* set the next field to 0 ... it might be set in the fifo */
--- 594,601 ----
  static t_sched_callback *ringbuffer_head = NULL;
  
! extern "C" void run_all_idle_callbacks () {
      t_sched_callback * new_callback;
      /* append idle callback to ringbuffer */
!     while ((new_callback = (t_sched_callback*) fifo_get(callback_fifo))) {
          t_sched_callback *next;
          /* set the next field to 0 ... it might be set in the fifo */
***************
*** 713,717 ****
      stop = sys_getrealtime()*1.e6 + (double)microsec;
      /* append idle callback to ringbuffer */
!     while (new_callback = (t_sched_callback*) fifo_get(callback_fifo)) {
          /* set the next field to NULL ... it might be set in the fifo */
          new_callback->next = 0;
--- 641,645 ----
      stop = sys_getrealtime()*1.e6 + (double)microsec;
      /* append idle callback to ringbuffer */
!     while ((new_callback = (t_sched_callback*) fifo_get(callback_fifo))) {
          /* set the next field to NULL ... it might be set in the fifo */
          new_callback->next = 0;
***************
*** 757,761 ****
          if(remain > 0) {
  		sys_unlock();
! 		sys_microsleep(remain);
  		sys_lock();
  	}
--- 685,689 ----
          if(remain > 0) {
  		sys_unlock();
! 		sys_microsleep(int(remain));
  		sys_lock();
  	}
***************
*** 774,778 ****
  }
  
! int sys_getscheduler(void) {
      return sys_callbackscheduler;
  }
--- 702,706 ----
  }
  
! int sys_getscheduler () {
      return sys_callbackscheduler;
  }
***************
*** 785,789 ****
  }
  
! void sys_xrun_notification(void) {
      sys_callback(sys_xrun_notification_callback, 0, 0);
  }
--- 713,717 ----
  }
  
! extern "C" void sys_xrun_notification () {
      sys_callback(sys_xrun_notification_callback, 0, 0);
  }
***************
*** 796,800 ****
  }
  
! void sys_lock_timeout_notification(void) {
      sys_callback(sys_lock_timeout_notification_callback, 0, 0);
  }
--- 724,728 ----
  }
  
! extern "C" void sys_lock_timeout_notification () {
      sys_callback(sys_lock_timeout_notification_callback, 0, 0);
  }

Index: makefile.in
===================================================================
RCS file: /cvsroot/pure-data/pd/src/makefile.in,v
retrieving revision 1.4.4.2.2.21.2.25
retrieving revision 1.4.4.2.2.21.2.26
diff -C2 -d -r1.4.4.2.2.21.2.25 -r1.4.4.2.2.21.2.26
*** makefile.in	28 Jun 2007 04:43:07 -0000	1.4.4.2.2.21.2.25
--- makefile.in	28 Jun 2007 05:23:32 -0000	1.4.4.2.2.21.2.26
***************
*** 21,27 ****
  CFLAGS += -DINSTALL_PREFIX=\"$(prefix)\"
  
! SRCXX = desire.c kernel.c builtins.c builtins_dsp.c s_path.c s_inter.c s_main.c
  SRC = m_fifo.c m_simd.c \
!        m_sched.c s_loader.c s_audio.c s_midi.c \
         d_ugen.c d_mayer_fft.c d_fftroutine.c d_resample.c d_soundfile.c
  
--- 21,28 ----
  CFLAGS += -DINSTALL_PREFIX=\"$(prefix)\"
  
! SRCXX = desire.c kernel.c builtins.c builtins_dsp.c s_path.c s_inter.c s_main.c \
! 	m_sched.c s_loader.c
  SRC = m_fifo.c m_simd.c \
!        s_audio.c s_midi.c \
         d_ugen.c d_mayer_fft.c d_fftroutine.c d_resample.c d_soundfile.c
  





More information about the Pd-cvs mailing list