Update of /cvsroot/pure-data/externals/zexy/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14408/src
Modified Files: msgfile.c Log Message: hopefully fixed a bug discovered by p8r: 1st line was not read (or rather "output"); i guess this has more to do withpd>0=0.39 but you never no...; more testing needs to be done!
Index: msgfile.c =================================================================== RCS file: /cvsroot/pure-data/externals/zexy/src/msgfile.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** msgfile.c 5 Apr 2006 11:27:26 -0000 1.10 --- msgfile.c 7 Jun 2006 15:24:37 -0000 1.11 *************** *** 96,100 ****
t_msglist *cur=x->current; ! if (cur) { t_atom *ap; --- 96,103 ----
t_msglist *cur=x->current; ! if(ac&&av&&A_SYMBOL==av->a_type&&gensym("")==atom_getsymbol(av)){ ! /* ignoring empty symbols! */ ! return; ! } if (cur) { t_atom *ap; *************** *** 235,239 ****
msgfile_goto(x, i); - }
--- 238,241 ---- *************** *** 521,527 ****
int fd; ! long readlength, length; char filnam[MAXPDSTRING], namebuf[MAXPDSTRING]; char buf[MAXPDSTRING], *bufptr, *readbuf; char*dirname=canvas_getdir(x->x_canvas)->s_name;
--- 523,530 ----
int fd; ! long readlength, length, pos; char filnam[MAXPDSTRING], namebuf[MAXPDSTRING]; char buf[MAXPDSTRING], *bufptr, *readbuf; + char *charbinbuf=NULL, *cbb; char*dirname=canvas_getdir(x->x_canvas)->s_name;
*************** *** 543,561 **** return; } - } else { - close (fd); - - namebuf[0] = 0; - if (*buf) - strcat(namebuf, buf), strcat(namebuf, "/"); - strcat(namebuf, bufptr); - - /* open and get length */ - sys_bashfilename(namebuf, filnam); - - if ((fd = open(filnam, rmode)) < 0) { - error("msgfile_read: unable to open %s", filnam); - return; - } }
--- 546,549 ---- *************** *** 572,576 **** case CR_MODE: separator = ' '; ! eol = ' '; break; case CSV_MODE: --- 560,564 ---- case CR_MODE: separator = ' '; ! eol = '\n'; break; case CSV_MODE: *************** *** 579,583 **** break; default: ! separator = ' '; eol = ';'; break; --- 567,571 ---- break; default: ! separator = '\n'; eol = ';'; break; *************** *** 602,623 **** close(fd);
! /* undo separators and eols */ bufptr=readbuf;
while (readlength--) { if (*bufptr == separator) { ! *bufptr = ' '; } ! else if ((*bufptr == eol) && (bufptr[1] == '\n')) *bufptr = ';'; bufptr++; } ! /* convert to binbuf */ ! binbuf_text(bbuf, readbuf, length); msgfile_binbuf2listbuf(x, bbuf);
! binbuf_free(bbuf); t_freebytes(readbuf, length); }
--- 590,640 ---- close(fd);
! /* convert separators and eols to what pd expects in a binbuf*/ bufptr=readbuf;
+ # define MSGFILE_HEADROOM 1024 + + charbinbuf=(char*)getbytes(length+MSGFILE_HEADROOM); + cbb=charbinbuf; + for(pos=0; pos<length+MSGFILE_HEADROOM; pos++)charbinbuf[pos]=0; + + *cbb++=';'; + pos=1; while (readlength--) { + if(pos>=length+MSGFILE_HEADROOM){ + error("msgfile: read error (headroom %d too small!)", MSGFILE_HEADROOM); + goto read_error; + break; + } if (*bufptr == separator) { ! *cbb = ' '; ! } else if (*bufptr==eol) { ! *cbb++=';';pos++; ! *cbb='\n'; } ! else { ! *cbb=*bufptr; ! } ! bufptr++; + cbb++; + pos++; } ! #if 0 ! // if(';'==cbb[-1])cbb[-1]=0; ! pos--; ! while(pos>0&&('\n'==charbinbuf[pos]||';'==charbinbuf[pos]||' '==charbinbuf[pos])){ ! charbinbuf[pos]=0; ! pos--; ! } ! #endif /* convert to binbuf */ ! binbuf_text(bbuf, charbinbuf, length+MSGFILE_HEADROOM); msgfile_binbuf2listbuf(x, bbuf);
! read_error: binbuf_free(bbuf); t_freebytes(readbuf, length); + t_freebytes(charbinbuf, length+MSGFILE_HEADROOM); }