Update of /cvsroot/pure-data/pd/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30927
Modified Files:
Tag: desiredata
makefile.in s_path.c
Log Message:
more C++
Index: makefile.in
===================================================================
RCS file: /cvsroot/pure-data/pd/src/makefile.in,v
retrieving revision 1.4.4.2.2.21.2.22
retrieving revision 1.4.4.2.2.21.2.23
diff -C2 -d -r1.4.4.2.2.21.2.22 -r1.4.4.2.2.21.2.23
*** makefile.in 3 Jan 2007 20:46:57 -0000 1.4.4.2.2.21.2.22
--- makefile.in 16 Jan 2007 00:27:17 -0000 1.4.4.2.2.21.2.23
***************
*** 21,27 ****
CFLAGS += -DINSTALL_PREFIX=\"$(prefix)\"
! SRCXX = desire.c kernel.c builtins.c builtins_dsp.c
SRC = m_fifo.c m_simd.c \
! m_sched.c s_main.c s_inter.c s_loader.c s_path.c s_audio.c s_midi.c \
d_ugen.c d_mayer_fft.c d_fftroutine.c d_resample.c d_soundfile.c
--- 21,27 ----
CFLAGS += -DINSTALL_PREFIX=\"$(prefix)\"
! SRCXX = desire.c kernel.c builtins.c builtins_dsp.c s_path.c
SRC = m_fifo.c m_simd.c \
! m_sched.c s_main.c s_inter.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
Index: s_path.c
===================================================================
RCS file: /cvsroot/pure-data/pd/src/s_path.c,v
retrieving revision 1.3.4.6.2.8.2.6
retrieving revision 1.3.4.6.2.8.2.7
diff -C2 -d -r1.3.4.6.2.8.2.6 -r1.3.4.6.2.8.2.7
*** s_path.c 20 Dec 2006 04:20:39 -0000 1.3.4.6.2.8.2.6
--- s_path.c 16 Jan 2007 00:27:17 -0000 1.3.4.6.2.8.2.7
***************
*** 29,42 ****
#include <ctype.h>
! t_namelist *sys_externlist;
t_namelist *sys_searchpath;
t_namelist *sys_helppath;
! /* change '/' characters to the system's native file separator */
! void sys_bashfilename(const char *from, char *to)
! {
char c;
! while (c = *from++)
! {
#ifdef MSW
if (c == '/') c = '\\';
--- 29,40 ----
#include <ctype.h>
! extern t_namelist *sys_externlist;
t_namelist *sys_searchpath;
t_namelist *sys_helppath;
! /* change '/' characters to the system's native file separator */
! void sys_bashfilename(const char *from, char *to) {
char c;
! while ((c = *from++)) {
#ifdef MSW
if (c == '/') c = '\\';
***************
*** 47,56 ****
}
! /* change the system's native file separator to '/' characters */
! void sys_unbashfilename(const char *from, char *to)
! {
char c;
! while (c = *from++)
! {
#ifdef MSW
if (c == '\\') c = '/';
--- 45,52 ----
}
! /* change the system's native file separator to '/' characters */
! void sys_unbashfilename(const char *from, char *to) {
char c;
! while ((c = *from++)) {
#ifdef MSW
if (c == '\\') c = '/';
***************
*** 66,109 ****
/* if it was the last substring, return NULL */
! static const char* strtokcpy(char *to, const char *from, int delim)
! {
int size = 0;
!
! while (from[size] != (char)delim && from[size] != '\0')
! size++;
!
strncpy(to,from,size);
to[size] = '\0';
if (from[size] == '\0') return NULL;
! if (size) return from+size+1;
! else return NULL;
}
/* add a single item to a namelist. If "allowdup" is true, duplicates
may be added; othewise they're dropped. */
!
! t_namelist *namelist_append(t_namelist *listwas, const char *s, int allowdup)
! {
t_namelist *nl, *nl2;
nl2 = (t_namelist *)(getbytes(sizeof(*nl)));
nl2->nl_next = 0;
! nl2->nl_string = (char *)getbytes(strlen(s) + 1);
! strcpy(nl2->nl_string, s);
sys_unbashfilename(nl2->nl_string, nl2->nl_string);
! if (!listwas)
! return (nl2);
! else
! {
! for (nl = listwas; ;)
! {
! if (!allowdup && !strcmp(nl->nl_string, s))
! return (listwas);
! if (!nl->nl_next)
! break;
! nl = nl->nl_next;
! }
! nl->nl_next = nl2;
}
! return (listwas);
}
--- 62,90 ----
/* if it was the last substring, return NULL */
! static const char* strtokcpy(char *to, const char *from, int delim) {
int size = 0;
! while (from[size] != (char)delim && from[size] != '\0') size++;
strncpy(to,from,size);
to[size] = '\0';
if (from[size] == '\0') return NULL;
! return size ? from+size+1 : 0;
}
/* add a single item to a namelist. If "allowdup" is true, duplicates
may be added; othewise they're dropped. */
! t_namelist *namelist_append(t_namelist *listwas, const char *s, int allowdup) {
t_namelist *nl, *nl2;
nl2 = (t_namelist *)(getbytes(sizeof(*nl)));
nl2->nl_next = 0;
! nl2->nl_string = strdup(s);
sys_unbashfilename(nl2->nl_string, nl2->nl_string);
! if (!listwas) return nl2;
! for (nl = listwas; ;) {
! if (!allowdup && !strcmp(nl->nl_string, s)) return listwas;
! if (!nl->nl_next) break;
! nl = nl->nl_next;
}
! nl->nl_next = nl2;
! return listwas;
}
***************
*** 116,154 ****
#endif
! t_namelist *namelist_append_files(t_namelist *listwas, const char *s)
! {
! const char *npos;
char temp[MAXPDSTRING];
! t_namelist *nl = listwas, *rtn = listwas;
!
! npos = s;
! do
! {
npos = strtokcpy(temp, npos, SEPARATOR);
! if (! *temp) continue;
nl = namelist_append(nl, temp, 0);
! }
! while (npos);
! return (nl);
}
! void namelist_free(t_namelist *listwas)
! {
! t_namelist *nl, *nl2;
! for (nl = listwas; nl; nl = nl2)
! {
nl2 = nl->nl_next;
! t_freebytes(nl->nl_string, strlen(nl->nl_string) + 1);
! t_freebytes(nl, sizeof(*nl));
}
}
! char *namelist_get(t_namelist *namelist, int n)
! {
! int i;
! t_namelist *nl;
! for (i = 0, nl = namelist; i < n && nl; i++, nl = nl->nl_next)
! ;
! return (nl ? nl->nl_string : 0);
}
--- 97,125 ----
#endif
! t_namelist *namelist_append_files(t_namelist *listwas, const char *s) {
char temp[MAXPDSTRING];
! const char *npos = s;
! t_namelist *nl = listwas;
! do {
npos = strtokcpy(temp, npos, SEPARATOR);
! if (!*temp) continue;
nl = namelist_append(nl, temp, 0);
! } while (npos);
! return nl;
}
! void namelist_free(t_namelist *listwas) {
! t_namelist *nl2;
! for (t_namelist *nl = listwas; nl; nl = nl2) {
nl2 = nl->nl_next;
! free(nl->nl_string);
! free(nl);
}
}
! char *namelist_get(t_namelist *namelist, int n) {
! int i=0;
! for (t_namelist *nl = namelist; i < n && nl; nl = nl->nl_next) {if (i==n) return nl->nl_string; else i++;}
! return 0;
}
***************
*** 157,162 ****
int sys_usestdpath = 1;
! void sys_setextrapath(const char *p)
! {
namelist_free(pd_extrapath);
pd_extrapath = namelist_append(0, p, 0);
--- 128,132 ----
int sys_usestdpath = 1;
! void sys_setextrapath(const char *p) {
namelist_free(pd_extrapath);
pd_extrapath = namelist_append(0, p, 0);
***************
*** 180,234 ****
{
int fd;
! if (strlen(dir) + strlen(name) + strlen(ext) + 4 > size)
! return (-1);
strcpy(dirresult, dir);
! if (*dirresult && dirresult[strlen(dirresult)-1] != '/')
! strcat(dirresult, "/");
strcat(dirresult, name);
strcat(dirresult, ext);
sys_bashfilename(dirresult, dirresult);
-
DEBUG(post("looking for %s",dirresult));
! /* see if we can open the file for reading */
! if ((fd=open(dirresult,O_RDONLY | MSWOPENFLAG(bin))) >= 0)
! {
! /* in unix, further check that it's not a directory */
#ifdef UNISTD
struct stat statbuf;
! int ok = ((fstat(fd, &statbuf) >= 0) &&
! !S_ISDIR(statbuf.st_mode));
! if (!ok)
! {
! if (sys_verbose) post("tried %s; stat failed or directory",
! dirresult);
close (fd);
fd = -1;
! }
! else
#endif
{
- char *slash;
if (sys_verbose) post("tried %s and succeeded", dirresult);
sys_unbashfilename(dirresult, dirresult);
! slash = strrchr(dirresult, '/');
! if (slash)
! {
*slash = 0;
*nameresult = slash + 1;
! }
! else *nameresult = dirresult;
!
! return (fd);
}
! }
! else
! {
if (sys_verbose) post("tried %s and failed", dirresult);
}
! return (-1);
}
! /* check if we were given an absolute pathname, if so try to open it
! and return 1 to signal the caller to cancel any path searches */
int sys_open_absolute(const char *name, const char* ext,
char *dirresult, char **nameresult, unsigned int size, int bin, int *fdp)
--- 150,190 ----
{
int fd;
! if (strlen(dir) + strlen(name) + strlen(ext) + 4 > size) return -1;
strcpy(dirresult, dir);
! if (*dirresult && dirresult[strlen(dirresult)-1] != '/') strcat(dirresult, "/");
strcat(dirresult, name);
strcat(dirresult, ext);
sys_bashfilename(dirresult, dirresult);
DEBUG(post("looking for %s",dirresult));
! /* see if we can open the file for reading */
! if ((fd=open(dirresult,O_RDONLY | MSWOPENFLAG(bin))) >= 0) {
! /* in unix, further check that it's not a directory */
#ifdef UNISTD
struct stat statbuf;
! int ok = (fstat(fd, &statbuf) >= 0) && !S_ISDIR(statbuf.st_mode);
! if (!ok) {
! if (sys_verbose) post("tried %s; stat failed or directory", dirresult);
close (fd);
fd = -1;
! } else
#endif
{
if (sys_verbose) post("tried %s and succeeded", dirresult);
sys_unbashfilename(dirresult, dirresult);
! char *slash = strrchr(dirresult, '/');
! if (slash) {
*slash = 0;
*nameresult = slash + 1;
! } else *nameresult = dirresult;
! return fd;
}
! } else {
if (sys_verbose) post("tried %s and failed", dirresult);
}
! return -1;
}
! /* check if we were given an absolute pathname, if so try to open it
! and return 1 to signal the caller to cancel any path searches */
int sys_open_absolute(const char *name, const char* ext,
char *dirresult, char **nameresult, unsigned int size, int bin, int *fdp)
***************
*** 238,254 ****
|| (name[1] == ':' && name[2] == '/')
#endif
! )
! {
char dirbuf[MAXPDSTRING];
! int dirlen = (strrchr(name, '/') - name);
! if (dirlen > MAXPDSTRING-1)
! dirlen = MAXPDSTRING-1;
strncpy(dirbuf, name, dirlen);
dirbuf[dirlen] = 0;
! *fdp = sys_trytoopenone(dirbuf, name+(dirlen+1), ext,
! dirresult, nameresult, size, bin);
! return (1);
! }
! else return (0);
}
--- 194,206 ----
|| (name[1] == ':' && name[2] == '/')
#endif
! ) {
char dirbuf[MAXPDSTRING];
! int dirlen = strrchr(name, '/') - name;
! if (dirlen > MAXPDSTRING-1) dirlen = MAXPDSTRING-1;
strncpy(dirbuf, name, dirlen);
dirbuf[dirlen] = 0;
! *fdp = sys_trytoopenone(dirbuf, name+(dirlen+1), ext, dirresult, nameresult, size, bin);
! return 1;
! } else return 0;
}
***************
*** 270,306 ****
t_namelist *nl;
int fd = -1;
!
! /* first check if "name" is absolute (and if so, try to open) */
! if (sys_open_absolute(name, ext, dirresult, nameresult, size, bin, &fd))
! return (fd);
!
! /* otherwise "name" is relative; try the directory "dir" first. */
! if ((fd = sys_trytoopenone(dir, name, ext,
! dirresult, nameresult, size, bin)) >= 0)
! return (fd);
!
! /* next go through the search path */
for (nl = searchpath; nl; nl = nl->nl_next)
! if ((fd = sys_trytoopenone(nl->nl_string, name, ext,
! dirresult, nameresult, size, bin)) >= 0)
! return (fd);
!
! /* next look in "extra" */
if (sys_usestdpath &&
! (fd = sys_trytoopenone(pd_extrapath->nl_string, name, ext,
! dirresult, nameresult, size, bin)) >= 0)
! return (fd);
!
*dirresult = 0;
*nameresult = dirresult;
! return (-1);
}
/* open via path, using the global search path. */
! int open_via_path(const char *dir, const char *name, const char *ext,
char *dirresult, char **nameresult, unsigned int size, int bin)
{
! return (do_open_via_path(dir, name, ext, dirresult, nameresult,
! size, bin, sys_searchpath));
}
--- 222,247 ----
t_namelist *nl;
int fd = -1;
! /* first check if "name" is absolute (and if so, try to open) */
! if (sys_open_absolute(name, ext, dirresult, nameresult, size, bin, &fd)) return fd;
! /* otherwise "name" is relative; try the directory "dir" first. */
! if ((fd = sys_trytoopenone(dir, name, ext, dirresult, nameresult, size, bin)) >= 0) return fd;
! /* next go through the search path */
for (nl = searchpath; nl; nl = nl->nl_next)
! if ((fd = sys_trytoopenone(nl->nl_string, name, ext, dirresult, nameresult, size, bin)) >= 0) return fd;
! /* next look in "extra" */
if (sys_usestdpath &&
! (fd = sys_trytoopenone(pd_extrapath->nl_string, name, ext, dirresult, nameresult, size, bin)) >= 0)
! return fd;
*dirresult = 0;
*nameresult = dirresult;
! return -1;
}
/* open via path, using the global search path. */
! extern "C" int open_via_path(const char *dir, const char *name, const char *ext,
char *dirresult, char **nameresult, unsigned int size, int bin)
{
! return do_open_via_path(dir, name, ext, dirresult, nameresult,
! size, bin, sys_searchpath);
}
***************
*** 308,344 ****
suffix here, even though we have to tear it back off for one of the
search attempts. */
! void open_via_helppath(const char *name, const char *dir)
! {
char realname[MAXPDSTRING], dirbuf[MAXPDSTRING], *basename;
/* make up a silly "dir" if none is supplied */
- const char *usedir = (*dir ? dir : "./");
int fd;
!
! /* 1. "objectname-help.pd" */
strncpy(realname, name, MAXPDSTRING-10);
realname[MAXPDSTRING-10] = 0;
! if (strlen(realname) > 3 && !strcmp(realname+strlen(realname)-3, ".pd"))
! realname[strlen(realname)-3] = 0;
strcat(realname, "-help.pd");
! if ((fd = do_open_via_path(dir, realname, "", dirbuf, &basename,
! MAXPDSTRING, 0, sys_helppath)) >= 0)
goto gotone;
!
! /* 2. "help-objectname.pd" */
strcpy(realname, "help-");
strncat(realname, name, MAXPDSTRING-10);
realname[MAXPDSTRING-1] = 0;
! if ((fd = do_open_via_path(dir, realname, "", dirbuf, &basename,
! MAXPDSTRING, 0, sys_helppath)) >= 0)
goto gotone;
!
! /* 3. "objectname.pd" */
! if ((fd = do_open_via_path(dir, name, "", dirbuf, &basename,
! MAXPDSTRING, 0, sys_helppath)) >= 0)
goto gotone;
post("sorry, couldn't find help patch for \"%s\"", name);
return;
gotone:
! close (fd);
glob_evalfile(0, gensym((char*)basename), gensym(dirbuf));
}
--- 249,276 ----
suffix here, even though we have to tear it back off for one of the
search attempts. */
! extern "C" void open_via_helppath(const char *name, const char *dir) {
char realname[MAXPDSTRING], dirbuf[MAXPDSTRING], *basename;
/* make up a silly "dir" if none is supplied */
int fd;
! /* 1. "objectname-help.pd" */
strncpy(realname, name, MAXPDSTRING-10);
realname[MAXPDSTRING-10] = 0;
! if (strlen(realname) > 3 && !strcmp(realname+strlen(realname)-3, ".pd")) realname[strlen(realname)-3] = 0;
strcat(realname, "-help.pd");
! if ((fd = do_open_via_path(dir, realname, "", dirbuf, &basename, MAXPDSTRING, 0, sys_helppath)) >= 0)
goto gotone;
! /* 2. "help-objectname.pd" */
strcpy(realname, "help-");
strncat(realname, name, MAXPDSTRING-10);
realname[MAXPDSTRING-1] = 0;
! if ((fd = do_open_via_path(dir, realname, "", dirbuf, &basename, MAXPDSTRING, 0, sys_helppath)) >= 0)
goto gotone;
! /* 3. "objectname.pd" */
! if ((fd = do_open_via_path(dir, name, "", dirbuf, &basename, MAXPDSTRING, 0, sys_helppath)) >= 0)
goto gotone;
post("sorry, couldn't find help patch for \"%s\"", name);
return;
gotone:
! close(fd);
glob_evalfile(0, gensym((char*)basename), gensym(dirbuf));
}
***************
*** 347,507 ****
deprecated in favor of the "settings" mechanism */
! int sys_argparse(int argc, char **argv);
#define NUMARGS 1000
! int sys_parsercfile(char*filename)
! {
! FILE* file;
int i;
- int k;
int rcargc;
char* rcargv[NUMARGS];
! char* buffer;
! char buf[1000];
! char c[MAXPDSTRING];
! int retval = 1; /* that's what we will return at the end; for now, let's think it'll be an error */
!
! /* initialize rc-arg-array so we can safely clean up at the end */
! for (i = 1; i < NUMARGS-1; i++)
! rcargv[i]=0;
!
!
/* parse a startup file */
!
! if (!(file = fopen(filename, "r")))
! return 1;
!
post("reading startup file: %s", filename);
-
rcargv[0] = "."; /* this no longer matters to sys_argparse() */
!
! /* tb: comments in pdrc file { */
! i=1;
! while ( (fgets(c,MAXPDSTRING,file)) != 0)
! {
! if ( c[strlen(c)-1] !='\n')
! {
! //it is unlikely that this is ever the case
! fprintf(stderr, "startup file contains a line that's too long\n");
! while ( fgetc(file) != '\n');
! }
!
! if (c[0] != '#')
! {
! long n;
! while (sscanf(c,"%999s%ln",buf,&n) != EOF)
! {
! buf[999] = 0;
! if (!(rcargv[i] = (char *)malloc(strlen(buf) + 1)))
! goto cleanup;
! strcpy(rcargv[i], buf);
! strcpy(buf,c+n);
! strcpy(c,buf);
! ++i;
! }
}
}
! /* } tb */
! if (i >= NUMARGS-1)
! fprintf(stderr, "startup file too long; extra args dropped\n");
rcargv[i] = 0;
-
rcargc = i;
-
/* parse the options */
-
fclose(file);
! if (sys_verbose)
! {
! if (rcargv)
! {
post("startup args from RC file:");
! for (i = 1; i < rcargc; i++)
! post("%s", rcargv[i]);
! }
! else post("no RC file arguments found");
}
! if (sys_argparse(rcargc-1, rcargv+1))
! {
post("error parsing RC arguments");
! goto cleanup;
}
! retval=0; /* we made it without an error */
!
! cleanup: /* prevent memleak */
! for (i = 1; i < NUMARGS-1; i++)
! if(rcargv[i])free(rcargv[i]);
!
! return(retval);
}
-
#ifndef MSW
-
#define STARTUPNAME ".pdrc"
!
! int sys_rcfile(void)
! {
! char fname[MAXPDSTRING], *home = getenv("HOME");
!
! // parse a startup file */
! *fname = '\0';
!
! strncat(fname, home? home : ".", MAXPDSTRING-10);
! strcat(fname, "/");
!
! strcat(fname, STARTUPNAME);
!
! return sys_parsercfile(fname);
}
-
-
#endif /* MSW */
! void sys_doflags( void)
! {
! int i, beginstring = 0, state = 0, len = strlen(sys_flags->s_name);
int rcargc = 0;
char *rcargv[MAXPDSTRING];
!
! if (len > MAXPDSTRING)
! {
post("flags: %s: too long", sys_flags->s_name);
return;
}
! for (i = 0; i < len+1; i++)
! {
int c = sys_flags->s_name[i];
! if (state == 0)
! {
! if (c && !isspace(c))
! {
beginstring = i;
state = 1;
}
! }
! else
! {
! if (!c || isspace(c))
! {
char *foo = (char *)malloc(i - beginstring + 1);
! if (!foo)
! return;
strncpy(foo, sys_flags->s_name + beginstring, i - beginstring);
foo[i - beginstring] = 0;
rcargv[rcargc] = foo;
rcargc++;
! if (rcargc >= MAXPDSTRING)
! break;
state = 0;
}
}
}
! if (sys_argparse(rcargc, rcargv))
! post("error parsing startup arguments");
}
! void glob_update_path (void) {
t_namelist *nl;
sys_vgui("global pd_path; set pd_path {");
--- 279,387 ----
deprecated in favor of the "settings" mechanism */
! extern "C" int sys_argparse(int argc, char **argv);
#define NUMARGS 1000
! extern "C" int sys_parsercfile(char*filename) {
int i;
int rcargc;
char* rcargv[NUMARGS];
! char buf[1000];
! char c[MAXPDSTRING];
! int retval = 1; /* that's what we will return at the end; for now, let's think it'll be an error */
! /* initialize rc-arg-array so we can safely clean up at the end */
! for (i = 1; i < NUMARGS-1; i++) rcargv[i]=0;
/* parse a startup file */
! FILE* file = fopen(filename, "r");
! if (!file) return 1;
post("reading startup file: %s", filename);
rcargv[0] = "."; /* this no longer matters to sys_argparse() */
! /* tb: comments in pdrc file { */
! i=1;
! while ((fgets(c,MAXPDSTRING,file)) != 0) {
! if ( c[strlen(c)-1] !='\n') {
! //it is unlikely that this is ever the case
! fprintf(stderr, "startup file contains a line that's too long\n");
! while(fgetc(file) != '\n') {}
! }
! if (c[0] != '#') {
! long n;
! while (sscanf(c,"%999s%ln",buf,&n) != EOF) {
! buf[999] = 0;
! if (!(rcargv[i] = (char *)malloc(strlen(buf) + 1))) goto cleanup;
! strcpy(rcargv[i], buf);
! strcpy(buf,c+n);
! strcpy(c,buf);
! ++i;
}
+ }
}
! /* } tb */
! if (i >= NUMARGS-1) fprintf(stderr, "startup file too long; extra args dropped\n");
rcargv[i] = 0;
rcargc = i;
/* parse the options */
fclose(file);
! if (sys_verbose) {
! if (rcargv) {
post("startup args from RC file:");
! for (i = 1; i < rcargc; i++) post("%s", rcargv[i]);
! } else post("no RC file arguments found");
}
! if (sys_argparse(rcargc-1, rcargv+1)) {
post("error parsing RC arguments");
! goto cleanup;
}
! retval=0; /* we made it without an error */
! cleanup: /* prevent memleak */
! for (i=1; i<NUMARGS-1; i++) if (rcargv[i]) free(rcargv[i]);
! return retval;
}
#ifndef MSW
#define STARTUPNAME ".pdrc"
! extern "C" int sys_rcfile(void) {
! char fname[MAXPDSTRING], *home = getenv("HOME");
! // parse a startup file */
! *fname = '\0';
! strncat(fname, home? home : ".", MAXPDSTRING-10);
! strcat(fname, "/");
! strcat(fname, STARTUPNAME);
! return sys_parsercfile(fname);
}
#endif /* MSW */
! void sys_doflags(void) {
! int beginstring = 0, state = 0, len = strlen(sys_flags->s_name);
int rcargc = 0;
char *rcargv[MAXPDSTRING];
! if (len > MAXPDSTRING) {
post("flags: %s: too long", sys_flags->s_name);
return;
}
! for (int i=0; i<len+1; i++) {
int c = sys_flags->s_name[i];
! if (state == 0) {
! if (c && !isspace(c)) {
beginstring = i;
state = 1;
}
! } else {
! if (!c || isspace(c)) {
char *foo = (char *)malloc(i - beginstring + 1);
! if (!foo) return;
strncpy(foo, sys_flags->s_name + beginstring, i - beginstring);
foo[i - beginstring] = 0;
rcargv[rcargc] = foo;
rcargc++;
! if (rcargc >= MAXPDSTRING) break;
state = 0;
}
}
}
! if (sys_argparse(rcargc, rcargv)) post("error parsing startup arguments");
}
! extern "C" void glob_update_path (void) {
t_namelist *nl;
sys_vgui("global pd_path; set pd_path {");