Update of /cvsroot/pure-data/pd/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3418/pd/src
Modified Files: d_misc.c d_soundfile.c d_ugen.c g_array.c g_canvas.c g_canvas.h g_editor.c g_template.c g_text.c m_glob.c m_imp.h m_pd.h makefile notes.txt s_inter.c s_main.c s_midi_alsa.c t_tkcmd.c u_main.tk x_list.c Log Message: Version 0.39-0test5. Bug fixes and more care about closing dirty windows and quitting.
Index: m_pd.h =================================================================== RCS file: /cvsroot/pure-data/pd/src/m_pd.h,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** m_pd.h 18 May 2005 04:28:51 -0000 1.7 --- m_pd.h 19 Aug 2005 23:28:03 -0000 1.8 *************** *** 516,519 **** --- 516,520 ---- EXTERN void canvas_resume_dsp(int oldstate); EXTERN void canvas_update_dsp(void); + EXTERN int canvas_dspstate;
/* up/downsampling */
Index: g_text.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/g_text.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** g_text.c 24 Jul 2005 19:41:14 -0000 1.9 --- g_text.c 19 Aug 2005 23:28:03 -0000 1.10 *************** *** 348,355 **** static void message_adddollar(t_message *x, t_floatarg f) { int n = f; if (n < 0) n = 0; - t_atom a; SETDOLLAR(&a, n); binbuf_add(x->m_text.te_binbuf, 1, &a); --- 348,355 ---- static void message_adddollar(t_message *x, t_floatarg f) { + t_atom a; int n = f; if (n < 0) n = 0; SETDOLLAR(&a, n); binbuf_add(x->m_text.te_binbuf, 1, &a);
Index: d_soundfile.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/d_soundfile.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** d_soundfile.c 29 Jul 2005 19:01:20 -0000 1.7 --- d_soundfile.c 19 Aug 2005 23:28:03 -0000 1.8 *************** *** 1977,1987 **** x->x_fileerror = 0;
! /* if there's already a file open, close it */ if (x->x_fd >= 0) { pthread_mutex_unlock(&x->x_mutex); ! close (x->x_fd); pthread_mutex_lock(&x->x_mutex); x->x_fd = -1; if (x->x_requestcode != REQUEST_BUSY) continue; --- 1977,2008 ---- x->x_fileerror = 0;
! /* if there's already a file open, close it. This ! should never happen since writesf_open() calls stop if ! needed and then waits until we're idle. */ if (x->x_fd >= 0) { + int bytesperframe = x->x_bytespersample * x->x_sfchannels; + int bigendian = x->x_bigendian; + char *filename = x->x_filename; + int fd = x->x_fd; + int filetype = x->x_filetype; + int itemswritten = x->x_itemswritten; + int swap = x->x_swap; pthread_mutex_unlock(&x->x_mutex); ! ! soundfile_finishwrite(x, filename, fd, ! filetype, 0x7fffffff, itemswritten, ! bytesperframe, swap); ! close (fd); ! pthread_mutex_lock(&x->x_mutex); x->x_fd = -1; + #ifdef DEBUG_SOUNDFILE + { + char s[1000]; + sprintf(s, "bug??? ditched %d\n", itemswritten); + pute(s); + } + #endif if (x->x_requestcode != REQUEST_BUSY) continue; *************** *** 2088,2094 **** x->x_itemswritten += sysrtn / (x->x_bytespersample * x->x_sfchannels); - sprintf(boo, "after: head %d, tail %d\n", - x->x_fifohead, x->x_fifotail); #ifdef DEBUG_SOUNDFILE pute(boo); #endif --- 2109,2115 ---- x->x_itemswritten += sysrtn / (x->x_bytespersample * x->x_sfchannels); #ifdef DEBUG_SOUNDFILE + sprintf(boo, "after: head %d, tail %d written %d\n", + x->x_fifohead, x->x_fifotail, x->x_itemswritten); pute(boo); #endif *************** *** 2264,2267 **** --- 2285,2292 ---- long onset, nframes; float samplerate; + if (x->x_state != STATE_IDLE) + { + writesf_stop(x); + } if (soundfiler_writeargparse(x, &argc, &argv, &filesym, &filetype, &bytespersamp, &swap, &bigendian, *************** *** 2277,2280 **** --- 2302,2310 ---- pd_error(x, "extra argument(s) to writesf~: ignored"); pthread_mutex_lock(&x->x_mutex); + while (x->x_requestcode != REQUEST_NOTHING) + { + sfread_cond_signal(&x->x_requestcondition); + sfread_cond_wait(&x->x_answercondition, &x->x_mutex); + } x->x_bytespersample = bytespersamp; x->x_swap = swap;
Index: s_main.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/s_main.c,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** s_main.c 16 Aug 2005 04:06:28 -0000 1.16 --- s_main.c 19 Aug 2005 23:28:03 -0000 1.17 *************** *** 3,7 **** * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
! char pd_version[] = "Pd version 0.39 TEST 4c\n"; char pd_compiletime[] = __TIME__; char pd_compiledate[] = __DATE__; --- 3,7 ---- * WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
! char pd_version[] = "Pd version 0.39 TEST 5\n"; char pd_compiletime[] = __TIME__; char pd_compiledate[] = __DATE__;
Index: u_main.tk =================================================================== RCS file: /cvsroot/pure-data/pd/src/u_main.tk,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** u_main.tk 29 Jul 2005 19:01:21 -0000 1.15 --- u_main.tk 19 Aug 2005 23:28:03 -0000 1.16 *************** *** 43,48 ****
if {$pd_nt == 2} { ! # turn on James Tittle II's fast drawing (wait until I can test this...): ! # set tk::mac::useCGDrawing 1 # set minimum line size for anti-aliasing. If set to 1 or 0, then every # line will be anti-aliased. While this makes connections and circles in --- 43,48 ----
if {$pd_nt == 2} { ! # turn on James Tittle II's fast drawing ! set tk::mac::useCGDrawing 1 # set minimum line size for anti-aliasing. If set to 1 or 0, then every # line will be anti-aliased. While this makes connections and circles in *************** *** 57,72 **** load $pd_guidir/bin/libPdTcl.dylib set pd_tearoff 0 ! ! # tk::mac::OpenDocument is called with the filenames put into the ! # var args whenever docs are either dropped on the Pd.app icon or ! # opened from the Finder. ! # It uses menu_doc_open so it can handles numerous file types. ! proc tk::mac::OpenDocument {args} { ! foreach file $args { ! pd [concat pd open [pdtk_enquote [file tail $file]] \ ! [pdtk_enquote [file dirname $file]] ;] ! menu_doc_open [file dirname $file] [file tail $file] ! } ! } }
--- 57,80 ---- load $pd_guidir/bin/libPdTcl.dylib set pd_tearoff 0 ! global pd_macready ! set pd_macready 0 ! global pd_macdropped ! set pd_macdropped "" ! # tk::mac::OpenDocument is called with the filenames put into the ! # var args whenever docs are either dropped on the Pd.app icon or ! # opened from the Finder. ! # It uses menu_doc_open so it can handles numerous file types. ! proc tk::mac::OpenDocument {args} { ! global pd_macready pd_macdropped ! foreach file $args { ! if {$pd_macready != 0} { ! pd [concat pd open [pdtk_enquote [file tail $file]] \ ! [pdtk_enquote [file dirname $file]] ;] ! menu_doc_open [file dirname $file] [file tail $file] ! } else { ! set pd_macdropped $args ! } ! } ! } }
*************** *** 234,242 **** }
! proc pdtk_check {x message} { ! set answer [tk_messageBox -message $x -type yesno -icon question] ! switch $answer { ! yes {pd $message} } ! # no {tk_messageBox -message "cancelled" -type ok} }
--- 242,250 ---- }
! ##### routine to ask user if OK and, if so, send a message on to Pd ###### ! proc pdtk_check {x message default} { ! set answer [tk_messageBox -message $x -type yesno -default $default \ ! -icon question] ! if {$answer == yes} {pd $message} }
*************** *** 328,332 **** proc menu_really_quit {} {pd {pd quit;}}
! proc menu_quit {} {pdtk_check {Really quit?} {pd quit;}}
######### the "Pd" menu command, which puts the Pd window on top ######## --- 336,340 ---- proc menu_really_quit {} {pd {pd quit;}}
! proc menu_quit {} {pd {pd verifyquit;}}
######### the "Pd" menu command, which puts the Pd window on top ######## *************** *** 570,574 **** proc menu_close {name} { pdtk_canvas_checkgeometry $name ! pd [concat $name menuclose ;] }
--- 578,587 ---- proc menu_close {name} { pdtk_canvas_checkgeometry $name ! pd [concat $name menuclose 0 ;] ! } ! ! proc menu_really_close {name} { ! pdtk_canvas_checkgeometry $name ! pd [concat $name menuclose 1 ;] }
*************** *** 1554,1557 **** --- 1567,1571 ---- if {$shift == 1} { if {$key == "q" || $key == "Q"} {menu_really_quit} + if {$key == "w" || $key == "W"} {menu_really_close $topname} if {$key == "s" || $key == "S"} {menu_saveas $topname} if {$key == "z" || $key == "Z"} {menu_redo $topname} *************** *** 3267,3270 **** --- 3281,3294 ---- menu_addstd .mbar
+ global pd_nt + if {$pd_nt == 2} { + global pd_macdropped pd_macready + set pd_macready 1 + foreach file $pd_macdropped { + pd [concat pd open [pdtk_enquote [file tail $file]] \ + [pdtk_enquote [file dirname $file]] ;] + menu_doc_open [file dirname $file] [file tail $file] + } + } }
*************** *** 4187,4188 **** --- 4211,4213 ---- focus $id.f0 } +
Index: g_canvas.h =================================================================== RCS file: /cvsroot/pure-data/pd/src/g_canvas.h,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** g_canvas.h 16 Aug 2005 04:06:28 -0000 1.10 --- g_canvas.h 19 Aug 2005 23:28:03 -0000 1.11 *************** *** 584,588 **** EXTERN t_template *template_findbyname(t_symbol *s); EXTERN t_canvas *template_findcanvas(t_template *tmpl); ! EXTERN void template_notify(t_template *, t_symbol *s, int argc, t_atom *argv);
--- 584,588 ---- EXTERN t_template *template_findbyname(t_symbol *s); EXTERN t_canvas *template_findcanvas(t_template *tmpl); ! EXTERN void template_notify(t_template *template, t_symbol *s, int argc, t_atom *argv);
*************** *** 595,601 **** EXTERN void template_setsymbol(t_template *x, t_symbol *fieldname, t_word *wp, t_symbol *s, int loud); ! EXTERN t_float fielddesc_getcoord(t_fielddesc *f, t_template *, t_word *wp, int loud); ! EXTERN void fielddesc_setcoord(t_fielddesc *f, t_template *, t_word *wp, float pix, int loud); EXTERN t_float fielddesc_cvttocoord(t_fielddesc *f, float val); --- 595,601 ---- EXTERN void template_setsymbol(t_template *x, t_symbol *fieldname, t_word *wp, t_symbol *s, int loud); ! EXTERN t_float fielddesc_getcoord(t_fielddesc *f, t_template *template, t_word *wp, int loud); ! EXTERN void fielddesc_setcoord(t_fielddesc *f, t_template *template, t_word *wp, float pix, int loud); EXTERN t_float fielddesc_cvttocoord(t_fielddesc *f, float val);
Index: s_inter.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/s_inter.c,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** s_inter.c 29 Jul 2005 19:01:21 -0000 1.12 --- s_inter.c 19 Aug 2005 23:28:03 -0000 1.13 *************** *** 175,179 **** --- 175,185 ---- if (FD_ISSET(sys_fdpoll[i].fdp_fd, &readset)) { + #ifdef THREAD_LOCKING + sys_lock(); + #endif (*sys_fdpoll[i].fdp_fn)(sys_fdpoll[i].fdp_ptr, sys_fdpoll[i].fdp_fd); + #ifdef THREAD_LOCKING + sys_unlock(); + #endif didsomething = 1; } *************** *** 281,288 **** #ifdef _POSIX_MEMLOCK /* tb: force memlock to physical memory { */ ! struct rlimit mlock_limit; ! mlock_limit.rlim_cur=0; ! mlock_limit.rlim_max=0; ! setrlimit(RLIMIT_MEMLOCK,&mlock_limit); /* } tb */ if (mlockall(MCL_FUTURE) != -1) --- 287,296 ---- #ifdef _POSIX_MEMLOCK /* tb: force memlock to physical memory { */ ! { ! struct rlimit mlock_limit; ! mlock_limit.rlim_cur=0; ! mlock_limit.rlim_max=0; ! setrlimit(RLIMIT_MEMLOCK,&mlock_limit); ! } /* } tb */ if (mlockall(MCL_FUTURE) != -1) *************** *** 1088,1092 **** } if (sys_verbose) fprintf(stderr, "%s", sys_guicmd); ! execl("/bin/sh", "sh", "-c", sys_guicmd, 0); perror("pd: exec"); _exit(1); --- 1096,1100 ---- } if (sys_verbose) fprintf(stderr, "%s", sys_guicmd); ! execl("/bin/sh", "sh", "-c", sys_guicmd, (char*)0); perror("pd: exec"); _exit(1); *************** *** 1172,1176 **** sprintf(cmdbuf, "%s/pd-watchdog\n", guidir); if (sys_verbose) fprintf(stderr, "%s", cmdbuf); ! execl("/bin/sh", "sh", "-c", cmdbuf, 0); perror("pd: exec"); _exit(1); --- 1180,1184 ---- sprintf(cmdbuf, "%s/pd-watchdog\n", guidir); if (sys_verbose) fprintf(stderr, "%s", cmdbuf); ! execl("/bin/sh", "sh", "-c", cmdbuf, (char*)0); perror("pd: exec"); _exit(1);
Index: makefile =================================================================== RCS file: /cvsroot/pure-data/pd/src/makefile,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** makefile 16 Aug 2005 04:06:28 -0000 1.17 --- makefile 19 Aug 2005 23:28:03 -0000 1.18 *************** *** 25,29 **** ARCH_CFLAGS = -DPD
! CFLAGS = -Werror $(ARCH_CFLAGS) $(WARN_CFLAGS) $(OPT_CFLAGS) $(MORECFLAGS)
# the sources --- 25,29 ---- ARCH_CFLAGS = -DPD
! CFLAGS = -Werror -Wdeclaration-after-statement $(ARCH_CFLAGS) $(WARN_CFLAGS) $(OPT_CFLAGS) $(MORECFLAGS)
# the sources
Index: g_canvas.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/g_canvas.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** g_canvas.c 16 Aug 2005 04:06:28 -0000 1.9 --- g_canvas.c 19 Aug 2005 23:28:03 -0000 1.10 *************** *** 37,41 **** extern t_pd *newest; t_class *canvas_class; ! static int canvas_dspstate; /* whether DSP is on or off */ t_canvas *canvas_editing; /* last canvas to start text edting */ t_canvas *canvas_whichfind; /* last canvas we did a find in */ --- 37,41 ---- extern t_pd *newest; t_class *canvas_class; ! int canvas_dspstate; /* whether DSP is on or off */ t_canvas *canvas_editing; /* last canvas to start text edting */ t_canvas *canvas_whichfind; /* last canvas we did a find in */
Index: m_imp.h =================================================================== RCS file: /cvsroot/pure-data/pd/src/m_imp.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** m_imp.h 6 Sep 2004 20:20:35 -0000 1.3 --- m_imp.h 19 Aug 2005 23:28:03 -0000 1.4 *************** *** 78,82 **** EXTERN void glob_evalfile(t_pd *ignore, t_symbol *name, t_symbol *dir); EXTERN void glob_initfromgui(void *dummy, t_symbol *s, int argc, t_atom *argv); ! #define __m_imp_h_ #endif /* __m_imp_h_ */ --- 78,82 ---- EXTERN void glob_evalfile(t_pd *ignore, t_symbol *name, t_symbol *dir); EXTERN void glob_initfromgui(void *dummy, t_symbol *s, int argc, t_atom *argv); ! EXTERN void glob_quit(void *dummy); #define __m_imp_h_ #endif /* __m_imp_h_ */
Index: notes.txt =================================================================== RCS file: /cvsroot/pure-data/pd/src/notes.txt,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** notes.txt 16 Aug 2005 04:06:28 -0000 1.18 --- notes.txt 19 Aug 2005 23:28:03 -0000 1.19 *************** *** 21,37 **** bug fix (tcl error messages when starting open dialogs) pointer rewind (also check if send-window documented?) ! ! ! ------------ 0.39 --------- ! problems: ! "list" to signal inlet (e.g., "*~") complains ! "find" doesn't open GOPs correctly save dirty abstractions on close close dirty patches on quit ! stop vis-ing subpatches of abstractions ! when retyping abstractions, offer to save dirty one ! don't filter locked click() through getrect ! better hit detection (getrect is too greedy; try just sending it through) thread-unsafe callbacks from sys_microsleep()
windows: --- 21,34 ---- bug fix (tcl error messages when starting open dialogs) pointer rewind (also check if send-window documented?) ! stop vis-ing subpatches of abstractions save dirty abstractions on close close dirty patches on quit ! "find" fixed to open GOPs correctly ! cheat to speed up mouse motion over arrays ! fix samplerate~ to figure out blocking thread-unsafe callbacks from sys_microsleep() + writesf -- "open" without "0" misses closing the previous file. + + ------------ 0.39 ---------
windows: *************** *** 40,44 **** mac: load libraries first before opening patches on drag-and-drop - writing 3-byte soundfiles distorts???
check: --- 37,40 ---- *************** *** 46,74 **** blechman patch for s_inter.c check what happens when going back and forth between graph-on-parent - array_resize etc., should redraw the array directly? Or should "setsize" - and "garray_resize" do it instead? check it's queued correctly.
doc: document env~ second argument (and why is it no less than 1/10 of first???) vibrato example block resampling arguments document tabwrite~_start
problems: TK commands to nonexistent windows? (occasionally still happens) - array name changes don't show up on parent arrays that don't fit in bounds don't update (same as red rectangle problem?) look in d_resample.pd to understand inlet~ upsampling... - flag for array to suppress printing name - fix samplerate~ to figure out blocking patcher inlets don't deal with scalars (zbug.pd) check if there's a problem loading libs on startup if superuser - tk errors for large tables? - wierdly small hotspot on lines '[' in numbox label breaks it (Yury Sept. 3) - soundfiles with 3-byte samples buzz for the first readsf buffer (bug/x.pd) read xx.txt in "bad" gives warnings - writesf -- "open" without "0" misses closing the previous file. - Also writesf~ acts differently if DSP is off when "open" is sent? qlist - 'next 1' seems not to work Krzysztof's qlist_next reentrancy bug --- 42,67 ---- blechman patch for s_inter.c check what happens when going back and forth between graph-on-parent
doc: + object list document env~ second argument (and why is it no less than 1/10 of first???) vibrato example block resampling arguments document tabwrite~_start + "list" to signal inlet (e.g., "*~") or float inlet (f) complains.
problems: + don't filter locked click() through getrect + better scalar hit detection (getrect is too greedy) + when retyping abstractions, offer to save dirty one + should linux stop grabbing focus on vis? Is there a way to detect whether + the mouse is in a window when it opens? TK commands to nonexistent windows? (occasionally still happens) arrays that don't fit in bounds don't update (same as red rectangle problem?) look in d_resample.pd to understand inlet~ upsampling... patcher inlets don't deal with scalars (zbug.pd) check if there's a problem loading libs on startup if superuser '[' in numbox label breaks it (Yury Sept. 3) read xx.txt in "bad" gives warnings qlist - 'next 1' seems not to work Krzysztof's qlist_next reentrancy bug *************** *** 77,95 **** moving a bang toward top of window creates problem (invisible label) get rid of messages causing renaming; try to prevent patches closing themselves. - dac~/ adc~/ block~ incompatibility scofo reports error on reading score1.txt loading e-mailed patches without removing headers crashes pd pd $1 bug ($1 is saved as it was evaluated, not as '$1') check if _vsnprintf with zero argument in windows works any better...
features: flag to suppress printing array name above graph fix copyright notices - IEM guis to use queued updates pixel font sizes pd to find running ones (pd -new to defeat) rename windowname-pd instead of pd-windowname - "enter" into object box to create new one (also, changing borders? forking?) - tab to jump to a connected object (first one?) (shift-tab to back up?) tables: if there's just one array, don't do stringent hit check. --- 70,86 ---- moving a bang toward top of window creates problem (invisible label) get rid of messages causing renaming; try to prevent patches closing themselves. scofo reports error on reading score1.txt loading e-mailed patches without removing headers crashes pd pd $1 bug ($1 is saved as it was evaluated, not as '$1') check if _vsnprintf with zero argument in windows works any better... + detect adc~ and dac~ reblocking
features: flag to suppress printing array name above graph + flag to suppress scrollbars in canvases fix copyright notices pixel font sizes pd to find running ones (pd -new to defeat) rename windowname-pd instead of pd-windowname tables: if there's just one array, don't do stringent hit check. *************** *** 98,106 **** object to get/set table size; random; quantile flag to hide array names - queued graphics updates for IEMGUIs and scalars think of a way to embed abstractions in a patch make watchdog work for MACOSX search path to include both calling patch and abstraction, if different - abstraction reload shouldn't have to vis everyone pasting should look at current mouse location delete-in-rectangle message to Pds --- 89,95 ---- *************** *** 110,113 **** --- 99,110 ---- expr to parse exponential notation pipe to handle symbols&pointers (just takes floats now???) + editing: + "enter" into object box to create new one (also, change border? forking?) + tab to jump to a connected object (first one?) (shift-tab to back up?) + arrow keys to shift connections left and right + menu item to connect selected objects + highlight connections (and I/Os) on mouse motion + select line and hit "insert" to interpolate an object + option-drag an outlet to make a new, connected object
data: *************** *** 147,154 **** netsend separate thread netreceive (and netsend?) message to set port number - think about x and y scale preservation when changing between graph and object - show outlines of objects even when graph is "open" graph_vis() to decorate graphs when they're toplevel (parent_glist == 0) - get graphs to expand to hold their contents suita.chopin.edu.pl/~czaja/miXed/externs/xeq.html -- MIDI file reader in glist_delete, consider why this can't be just "vis 0" -- why do we need it? --- 144,148 ---- *************** *** 157,175 **** makefile to have make install depend on make local. Float method for random - figure out list, message objects put in something for tilde order forcing extensible "toolbar" so people can add external GUI objects - allow spaces in paths variable send and receive -- check how max/MSP does it? number boxes to darken for typing and/or received messages - dialog to change lib flag and path pique~ and fiddle~ unification (notice pique filtering is different!) new message box look figure out what to do when "pd sym" conflicts with window title as in Pluton? - - MAX compatibilty: - trigger 1 (on Pd, outputs 0; on Max?) - - LATER bonk~ file path handling unify arrays and garrays --- 151,161 ----
Index: g_array.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/g_array.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** g_array.c 16 Aug 2005 04:06:28 -0000 1.8 --- g_array.c 19 Aug 2005 23:28:03 -0000 1.9 *************** *** 430,433 **** --- 430,441 ---- x->x_realname = canvas_realizedollar(x->x_glist, argname); pd_bind(&x->x_gobj.g_pd, x->x_realname); + /* redraw the whole glist, just so the name change shows up */ + if (x->x_glist->gl_havewindow) + canvas_redraw(x->x_glist); + else if (glist_isvisible(x->x_glist->gl_owner)) + { + gobj_vis(&x->x_glist->gl_gobj, x->x_glist->gl_owner, 0); + gobj_vis(&x->x_glist->gl_gobj, x->x_glist->gl_owner, 1); + } } size = fsize; *************** *** 449,453 **** void garray_arrayviewlist_new(t_garray *x) { ! int i, xonset, yonset, type, elemsize; float yval; char cmdbuf[200]; --- 457,461 ---- void garray_arrayviewlist_new(t_garray *x) { ! int i, xonset=0, yonset=0, type=0, elemsize=0; float yval; char cmdbuf[200]; *************** *** 481,485 **** t_float page) { ! int i, xonset, yonset, type, elemsize; float yval; char cmdbuf[200]; --- 489,493 ---- t_float page) { ! int i, xonset=0, yonset=0, type=0, elemsize=0; float yval; char cmdbuf[200]; *************** *** 752,760 **** { float best = 100; ! int incr; ! /* if it has more than 2000 points, just check 300 of them. */ ! if (array->a_n < 2000) ! incr = 1; ! else incr = array->a_n / 300; for (i = 0; i < array->a_n; i += incr) { --- 760,765 ---- { float best = 100; ! /* if it has more than 2000 points, just check 1000 of them. */ ! int incr = (array->a_n <= 2000 ? 1 : array->a_n / 1000); for (i = 0; i < array->a_n; i += incr) {
Index: x_list.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/x_list.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** x_list.c 29 Jul 2005 19:01:22 -0000 1.2 --- x_list.c 19 Aug 2005 23:28:03 -0000 1.3 *************** *** 5,9 **** --- 5,14 ---- #include "m_pd.h" /* #include <string.h> */ + #ifdef MSW + #include <malloc.h> + #else #include <alloca.h> + #endif + extern t_pd *newest;
Index: s_midi_alsa.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/s_midi_alsa.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** s_midi_alsa.c 24 Jul 2005 19:41:14 -0000 1.3 --- s_midi_alsa.c 19 Aug 2005 23:28:03 -0000 1.4 *************** *** 47,50 **** --- 47,51 ---- int client; int i; + snd_seq_client_info_t *alsainfo; alsa_nmidiin = 0; alsa_nmidiout = 0; *************** *** 92,96 ****
if (nmidiout == 0 && nmidiin == 0) return; - snd_seq_client_info_t *alsainfo; snd_seq_client_info_malloc(&alsainfo); snd_seq_get_client_info(midi_handle,alsainfo); --- 93,96 ---- *************** *** 185,189 **** void sys_alsa_poll_midi(void) { ! char buf[20]; int count, alsa_source; int i; --- 185,189 ---- void sys_alsa_poll_midi(void) { ! unsigned char buf[20]; int count, alsa_source; int i;
Index: t_tkcmd.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/t_tkcmd.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** t_tkcmd.c 29 Jul 2005 19:01:21 -0000 1.4 --- t_tkcmd.c 19 Aug 2005 23:28:03 -0000 1.5 *************** *** 433,437 **** fflush(debugfd); #endif ! execl("/bin/sh", "sh", "-c", cmdbuf, 0); perror("pd: exec"); _exit(1); --- 433,437 ---- fflush(debugfd); #endif ! execl("/bin/sh", "sh", "-c", cmdbuf, (char*)0); perror("pd: exec"); _exit(1);
Index: g_editor.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/g_editor.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** g_editor.c 16 Aug 2005 04:06:28 -0000 1.10 --- g_editor.c 19 Aug 2005 23:28:03 -0000 1.11 *************** *** 1044,1048 **** t_gobj *y; int shiftmod, runmode, altmod, doublemod = 0, rightclick; ! int x1, y1, x2, y2, clickreturned = 0;
if (!x->gl_editor) --- 1044,1048 ---- t_gobj *y; int shiftmod, runmode, altmod, doublemod = 0, rightclick; ! int x1=0, y1=0, x2=0, y2=0, clickreturned = 0;
if (!x->gl_editor) *************** *** 1268,1274 **** void canvas_doconnect(t_canvas *x, int xpos, int ypos, int which, int doit) { ! int x11, y11, x12, y12; t_gobj *y1; ! int x21, y21, x22, y22; t_gobj *y2; int xwas = x->gl_editor->e_xwas, --- 1268,1274 ---- void canvas_doconnect(t_canvas *x, int xpos, int ypos, int which, int doit) { ! int x11=0, y11=0, x12=0, y12=0; t_gobj *y1; ! int x21=0, y21=0, x22=0, y22=0; t_gobj *y2; int xwas = x->gl_editor->e_xwas, *************** *** 1629,1640 **** }
! void canvas_menuclose(t_canvas *x, t_floatarg force) { ! if (x->gl_owner) ! canvas_vis(x, 0); ! else if ((force != 0) || (!x->gl_dirty)) pd_free(&x->gl_pd); ! else sys_vgui("pdtk_check {This window has been modified. Close anyway?}\ ! {.x%lx menuclose 1;\n}\n", x); }
--- 1629,1706 ---- }
! /* find a dirty sub-glist, if any, of this one (including itself) */ ! static t_glist *glist_finddirty(t_glist *x) { ! t_gobj *g; ! t_glist *g2; ! if (x->gl_env && x->gl_dirty) ! return (x); ! for (g = x->gl_list; g; g = g->g_next) ! if (pd_class(&g->g_pd) == canvas_class && ! (g2 = glist_finddirty((t_glist *)g))) ! return (g2); ! return (0); ! } ! ! /* quit, after calling glist_finddirty() on all toplevels and verifying ! the user really wants to discard changes */ ! void glob_verifyquit(void *dummy, t_floatarg f) ! { ! t_glist *g, *g2; ! /* find all root canvases */ ! for (g = canvas_list; g; g = g->gl_next) ! if (g2 = glist_finddirty(g)) ! { ! canvas_vis(g2, 1); ! sys_vgui( ! "pdtk_check {Discard changes to this window??} {.x%lx menuclose 3;\n} no\n", ! g2); ! return; ! } ! if (f == 0) ! sys_vgui("pdtk_check {really quit?} {pd quit;\n} yes\n"); ! else glob_quit(0); ! } ! ! /* close a window (or possibly quit Pd), checking for dirty flags. ! The "force" parameter is interpreted as follows: ! 0 - request from GUI to close, verifying whether clean or dirty ! 1 - request from GUI to close, no verification ! 2 - verified - mark this one clean, then continue as in 1 ! 3 - verified - mark this one clean, then verify-and-quit ! */ ! void canvas_menuclose(t_canvas *x, t_floatarg fforce) ! { ! int force = fforce; ! t_glist *g; ! if (x->gl_owner && (force == 0 || force == 1)) ! canvas_vis(x, 0); /* if subpatch, just invis it */ ! else if (force == 0) ! { ! g = glist_finddirty(x); ! if (g) ! { ! canvas_vis(g, 1); ! sys_vgui( ! "pdtk_check {Discard changes to this window??} {.x%lx menuclose 2;\n} no\n", ! g); ! return; ! } ! else pd_free(&x->gl_pd); ! } ! else if (force == 1) pd_free(&x->gl_pd); ! else if (force == 2) ! { ! canvas_dirty(x, 0); ! while (x->gl_owner) ! x = x->gl_owner; ! canvas_menuclose(x, 0); ! } ! else if (force == 3) ! { ! canvas_dirty(x, 0); ! glob_verifyquit(0, 1); ! } }
*************** *** 1675,1679 **** canvas_find_index2 = myindex2; glist_noselect(x); ! canvas_vis(x, 1); canvas_editmode(x, 1.); glist_select(x, y); --- 1741,1745 ---- canvas_find_index2 = myindex2; glist_noselect(x); ! vmess(&x->gl_pd, gensym("menu-open"), ""); canvas_editmode(x, 1.); glist_select(x, y);
Index: d_ugen.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/d_ugen.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** d_ugen.c 28 Nov 2004 21:20:42 -0000 1.4 --- d_ugen.c 19 Aug 2005 23:28:03 -0000 1.5 *************** *** 661,665 **** t_sigoutconnect *oc, *oc2; t_class *class = pd_class(&u->u_obj->ob_pd); ! int i, n; /* suppress creating new signals for the outputs of signal inlets and subpatchs; except in the case we're an inlet and "blocking" --- 661,665 ---- t_sigoutconnect *oc, *oc2; t_class *class = pd_class(&u->u_obj->ob_pd); ! int i, n, totnsig; /* suppress creating new signals for the outputs of signal inlets and subpatchs; except in the case we're an inlet and "blocking" *************** *** 696,700 **** } } ! insig = (t_signal **)getbytes((u->u_nin + u->u_nout) * sizeof(t_signal *)); outsig = insig + u->u_nin; for (sig = insig, uin = u->u_in, i = u->u_nin; i--; sig++, uin++) --- 696,701 ---- } } ! totnsig = u->u_nin + u->u_nout; ! insig = (t_signal **)getbytes((totnsig ? totnsig : 1) * sizeof(t_signal *)); outsig = insig + u->u_nin; for (sig = insig, uin = u->u_in, i = u->u_nin; i--; sig++, uin++) *************** *** 731,734 **** --- 732,740 ---- (*sig)->s_refcount = uout->o_nconnect; } + /* if thre are no input or output signals, supply one fake signal so + the object can learn the sample rate and block size. Used by the + samplerate~ object. */ + if (!totnsig) + insig[0] = signal_new(dc->dc_vecsize, dc->dc_srate); /* now call the DSP scheduling routine for the ugen. This routine must fill in "borrowed" signal outputs in case it's either *************** *** 745,748 **** --- 751,757 ---- signal_makereusable(*sig); } + /* special case: no inputs or outputs: free the fake signal we made */ + if (!totnsig) + signal_makereusable(insig[0]); if (ugen_loud) {
Index: d_misc.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/d_misc.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** d_misc.c 28 Nov 2004 21:20:42 -0000 1.3 --- d_misc.c 19 Aug 2005 23:28:03 -0000 1.4 *************** *** 135,143 **** { t_object x_obj; } t_samplerate;
static void samplerate_tilde_bang(t_samplerate *x) { ! outlet_float(x->x_obj.ob_outlet, sys_getsr()); }
--- 135,156 ---- { t_object x_obj; + float x_sr; } t_samplerate;
static void samplerate_tilde_bang(t_samplerate *x) { ! if (!canvas_dspstate) ! { ! post( ! "NB: samplerate~ momentarily started DSP to learn sample rate"); ! canvas_resume_dsp(1); ! canvas_suspend_dsp(); ! } ! outlet_float(x->x_obj.ob_outlet, x->x_sr); ! } ! ! static void samplerate_tilde_dsp(t_samplerate *x, t_signal **sp) ! { ! x->x_sr = sp[0]->s_sr; }
*************** *** 154,157 **** --- 167,172 ---- (t_newmethod)samplerate_tilde_new, 0, sizeof(t_samplerate), 0, 0); class_addbang(samplerate_tilde_class, samplerate_tilde_bang); + class_addmethod(samplerate_tilde_class, (t_method)samplerate_tilde_dsp, + gensym("dsp"), A_CANT, 0); }
Index: g_template.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/g_template.c,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** g_template.c 16 Aug 2005 04:06:28 -0000 1.11 --- g_template.c 19 Aug 2005 23:28:03 -0000 1.12 *************** *** 1525,1529 **** &xonset, &yonset, &wonset)) { ! for (i = 0, xsum = 0; i < array->a_n; i++) { float usexloc, useyloc; --- 1525,1531 ---- &xonset, &yonset, &wonset)) { ! /* if it has more than 2000 points, just check 1000 of them. */ ! int incr = (array->a_n <= 2000 ? 1 : array->a_n / 1000); ! for (i = 0, xsum = 0; i < array->a_n; i += incr) { float usexloc, useyloc;
Index: m_glob.c =================================================================== RCS file: /cvsroot/pure-data/pd/src/m_glob.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** m_glob.c 16 Jul 2005 01:43:18 -0000 1.5 --- m_glob.c 19 Aug 2005 23:28:03 -0000 1.6 *************** *** 13,17 ****
void glob_setfilename(void *dummy, t_symbol *name, t_symbol *dir); ! void glob_quit(void *dummy); void glob_dsp(void *dummy, t_symbol *s, int argc, t_atom *argv); void glob_meters(void *dummy, t_floatarg f); --- 13,17 ----
void glob_setfilename(void *dummy, t_symbol *name, t_symbol *dir); ! void glob_verifyquit(void *dummy, t_floatarg f); void glob_dsp(void *dummy, t_symbol *s, int argc, t_atom *argv); void glob_meters(void *dummy, t_floatarg f); *************** *** 80,83 **** --- 80,85 ---- A_SYMBOL, A_SYMBOL, 0); class_addmethod(glob_pdobject, (t_method)glob_quit, gensym("quit"), 0); + class_addmethod(glob_pdobject, (t_method)glob_verifyquit, + gensym("verifyquit"), A_DEFFLOAT, 0); class_addmethod(glob_pdobject, (t_method)glob_foo, gensym("foo"), A_GIMME, 0); class_addmethod(glob_pdobject, (t_method)glob_dsp, gensym("dsp"), A_GIMME, 0);