| @@ -41,6 +41,8 @@ | |||
| #include "OSC/Endpoint.H" | |||
| #include "string_util.h" | |||
| Module *Module::_copied_module_empty = 0; | |||
| @@ -243,12 +245,11 @@ Module::Port::generate_osc_path () | |||
| else | |||
| asprintf( &path, "/strip/%s/%s/%s", module()->chain()->name(), p->module()->label(), p->name() ); | |||
| // Hack to keep spaces out of OSC URL... Probably need to handle other special characters similarly. | |||
| for ( int i = strlen( path ); i--; ) | |||
| { | |||
| if ( path[i] == ' ' || path[i] == ',' ) | |||
| path[i] = '_'; | |||
| } | |||
| char *s = escape_url( path ); | |||
| free( path ); | |||
| path = s; | |||
| return path; | |||
| } | |||
| @@ -0,0 +1,85 @@ | |||
| /*******************************************************************************/ | |||
| /* Copyright (C) 2012 Jonathan Moore Liles */ | |||
| /* */ | |||
| /* This program is free software; you can redistribute it and/or modify it */ | |||
| /* under the terms of the GNU General Public License as published by the */ | |||
| /* Free Software Foundation; either version 2 of the License, or (at your */ | |||
| /* option) any later version. */ | |||
| /* */ | |||
| /* This program is distributed in the hope that it will be useful, but WITHOUT */ | |||
| /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ | |||
| /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */ | |||
| /* more details. */ | |||
| /* */ | |||
| /* You should have received a copy of the GNU General Public License along */ | |||
| /* with This program; see the file COPYING. If not,write to the Free Software */ | |||
| /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
| /*******************************************************************************/ | |||
| #include <string.h> | |||
| #include <stdio.h> | |||
| void unescape_url ( char *url ) | |||
| { | |||
| char *r, *w; | |||
| r = w = url; | |||
| for ( ; *r; r++, w++ ) | |||
| { | |||
| if ( *r == '%' ) | |||
| { | |||
| char data[3] = { *(r + 1), *(r + 2), 0 }; | |||
| int c; | |||
| sscanf( data, "%2X", &c ); | |||
| *w = c; | |||
| r += 2; | |||
| } | |||
| else | |||
| *w = *r; | |||
| } | |||
| *w = 0; | |||
| } | |||
| char *escape_url ( const char *url ) | |||
| { | |||
| const char *s; | |||
| char *w; | |||
| char r[1024]; | |||
| s = url; | |||
| w = r; | |||
| for ( ; *s && w < r + sizeof( r ); s++, w++ ) | |||
| { | |||
| switch ( *s ) | |||
| { | |||
| case ' ': | |||
| case '<': | |||
| case '>': | |||
| case '%': | |||
| case '#': | |||
| case '*': | |||
| case ',': | |||
| sprintf( w, "%%%2X", *s ); | |||
| w += 2; | |||
| break; | |||
| default: | |||
| *w = *s; | |||
| break; | |||
| } | |||
| } | |||
| *w = 0; | |||
| return strdup( r ); | |||
| } | |||
| @@ -0,0 +1,21 @@ | |||
| /*******************************************************************************/ | |||
| /* Copyright (C) 2012 Jonathan Moore Liles */ | |||
| /* */ | |||
| /* This program is free software; you can redistribute it and/or modify it */ | |||
| /* under the terms of the GNU General Public License as published by the */ | |||
| /* Free Software Foundation; either version 2 of the License, or (at your */ | |||
| /* option) any later version. */ | |||
| /* */ | |||
| /* This program is distributed in the hope that it will be useful, but WITHOUT */ | |||
| /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ | |||
| /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for */ | |||
| /* more details. */ | |||
| /* */ | |||
| /* You should have received a copy of the GNU General Public License along */ | |||
| /* with This program; see the file COPYING. If not,write to the Free Software */ | |||
| /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ | |||
| /*******************************************************************************/ | |||
| void unescape_url ( char *url ); | |||
| char * escape_url ( const char *url ); | |||
| @@ -40,6 +40,8 @@ using namespace std; | |||
| #include <unistd.h> // for symlink() | |||
| #include "string_util.h" | |||
| Audio_Sequence::Audio_Sequence ( Track *track, const char *name ) : Sequence( track ) | |||
| @@ -130,35 +132,6 @@ Audio_Sequence::set ( Log_Entry &e ) | |||
| } | |||
| static | |||
| void | |||
| deurlify ( char *url ) | |||
| { | |||
| char *r, *w; | |||
| r = w = url; | |||
| for ( ; *r; r++, w++ ) | |||
| { | |||
| if ( *r == '%' ) | |||
| { | |||
| char data[3] = { *(r + 1), *(r + 2), 0 }; | |||
| int c; | |||
| sscanf( data, "%2X", &c ); | |||
| *w = c; | |||
| r += 2; | |||
| } | |||
| else | |||
| *w = *r; | |||
| } | |||
| *w = 0; | |||
| } | |||
| void | |||
| Audio_Sequence::handle_widget_change ( nframes_t start, nframes_t length ) | |||
| { | |||
| @@ -280,7 +253,7 @@ Audio_Sequence::handle ( int m ) | |||
| return 0; | |||
| } | |||
| deurlify( file ); | |||
| unescape_url( file ); | |||
| printf( "pasted file \"%s\"\n", file ); | |||
| @@ -34,6 +34,8 @@ using std::list; | |||
| #include "OSC/Endpoint.H" | |||
| #include "string_util.h" | |||
| bool Control_Sequence::draw_with_gradient = true; | |||
| @@ -234,6 +236,12 @@ Control_Sequence::mode ( Mode m ) | |||
| { | |||
| char *path; | |||
| asprintf( &path, "/track/%s/control/%i", track()->name(), track()->ncontrols() ); | |||
| char *s = escape_url( path ); | |||
| free( path ); | |||
| path = s; | |||
| _osc_output = timeline->osc->add_signal( path, OSC::Signal::Output, 0, 1, 0, NULL, NULL ); | |||
| @@ -536,12 +544,21 @@ Control_Sequence::peer_callback( const char *name, const OSC::Signal *sig ) | |||
| sig->parameter_limits().max == 1.0 ) ) | |||
| return; | |||
| asprintf( &s, "%s/%s%s", peer_prefix, name, sig->path() ); | |||
| assert( sig->path() ); | |||
| char *path = strdup( sig->path() ); | |||
| unescape_url( path ); | |||
| asprintf( &s, "%s/%s%s", peer_prefix, name, path ); | |||
| peer_menu->add( s, 0, NULL, (void*)( sig ), | |||
| FL_MENU_TOGGLE | | |||
| ( _osc_output->is_connected_to( sig ) ? FL_MENU_VALUE : 0 ) ); | |||
| free( path ); | |||
| free( s ); | |||
| connect_osc(); | |||