Update of /cvsroot/pure-data/externals/zexy/src
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9317
Modified Files:
fwriteln.c
Log Message:
made the best out of "fwriteln": now accepts also arguments "f" "g" and "e" as floating point formats and is verbose in case of erroneous usage.
Index: fwriteln.c
===================================================================
RCS file: /cvsroot/pure-data/externals/zexy/src/fwriteln.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** fwriteln.c 23 Sep 2007 10:54:56 -0000 1.8
--- fwriteln.c 23 Sep 2007 19:14:54 -0000 1.9
***************
*** 45,50 ****
char linebreak_chr[3];
char format_string_afloats[10];
- int width;
- int precision;
} t_fwriteln;
--- 45,48 ----
***************
*** 120,125 ****
switch (argv->a_type) {
case A_FLOAT:
! snprintf(text,MAXPDSTRING,x->format_string_afloats,
! x->width,x->precision,atom_getfloat(argv));
text[MAXPDSTRING-1]=0;
length=strlen(text);
--- 118,123 ----
switch (argv->a_type) {
case A_FLOAT:
! snprintf(text,MAXPDSTRING,x->format_string_afloats,
! atom_getfloat(argv));
text[MAXPDSTRING-1]=0;
length=strlen(text);
***************
*** 187,215 ****
{
int k;
t_fwriteln *x = (t_fwriteln *)pd_new(fwriteln_class);
x->x_filename=0;
x->x_file=0;
x->x_textbuf=0;
- x->width=5;
- x->precision=2;
- strcpy(x->format_string_afloats,"%*.*g ");
for (k=0; k<argc; k++) {
! if ((atom_getsymbol(&argv[k])==gensym("p"))&&(k+1<argc)) {
! x->precision=atom_getint(&argv[++k]);
! x->precision=(x->precision<0)?0:x->precision;
! x->precision=(x->precision>30)?30:x->precision;
}
! else if ((atom_getsymbol(&argv[k])==gensym("w"))&&(k+1<argc)) {
! x->width=atom_getint(&argv[++k]);
! x->width=(x->width<1)?1:x->width;
! x->width=(x->width>40)?40:x->width;
}
else if (atom_getsymbol(&argv[k])==gensym("-")) {
! strcpy(x->format_string_afloats,"%-*.*g ");
}
else if (atom_getsymbol(&argv[k])==gensym("+")) {
! strcpy(x->format_string_afloats,"%+*.*g ");
}
}
return (void *)x;
}
--- 185,243 ----
{
int k;
+ int width;
+ int precision;
+ char float_format[3]="g ";
+ char width_str[3]="";
+ char precision_str[4]="";
+ char prefix[2]="%";
t_fwriteln *x = (t_fwriteln *)pd_new(fwriteln_class);
x->x_filename=0;
x->x_file=0;
x->x_textbuf=0;
for (k=0; k<argc; k++) {
! if (atom_getsymbol(&argv[k])==gensym("p")) {
! if ((k+1>=argc)||(argv[k+1].a_type!=A_FLOAT)) {
! post("fwriteln: no value given for precision!");
! }
! else {
! precision=atom_getint(&argv[++k]);
! precision=(precision<0)?0:precision;
! precision=(precision>30)?30:precision;
! snprintf(precision_str,4,".%d",precision);
! }
}
! else if (atom_getsymbol(&argv[k])==gensym("w")) {
! if ((k+1>=argc)||(argv[k+1].a_type!=A_FLOAT)) {
! post("fwriteln: no value given for width!");
! }
! else {
! width=atom_getint(&argv[++k]);
! width=(width<1)?1:width;
! width=(width>40)?40:width;
! snprintf(width_str,3,"%d",width);
! }
! }
! else if (atom_getsymbol(&argv[k])==gensym("g")) {
! float_format[0]='g';
! }
! else if (atom_getsymbol(&argv[k])==gensym("f")) {
! float_format[0]='f';
! }
! else if (atom_getsymbol(&argv[k])==gensym("e")) {
! float_format[0]='e';
}
else if (atom_getsymbol(&argv[k])==gensym("-")) {
! strcpy(prefix,"%-");
}
else if (atom_getsymbol(&argv[k])==gensym("+")) {
! strcpy(prefix,"%+");
}
}
+ x->format_string_afloats[0]='\0';
+ strncat(x->format_string_afloats,prefix,2);
+ strncat(x->format_string_afloats,width_str,2);
+ strncat(x->format_string_afloats,precision_str,3);
+ strncat(x->format_string_afloats,float_format,2);
+ //post("format string: \"%s\"\n",x->format_string_afloats);
return (void *)x;
}