Hallo, Claude Heiland-Allen hat gesagt: // Claude Heiland-Allen wrote:
But, I'm using [pack s s s], and as the attached patch shows the real type of each atom in the list is preserved as it should be, it's only when it reaches sendOSC that the 'reinterpretation' occurs.
Anyway, I rewrote the receiving program to accept numbers instead of strings, because I had that option, but this won't always be possible, so my conclusion is that sendOSC is broken.
Okay, I now checked the source code, and indeed, when typetags are on, numeric values are converted inside to be INT or FLOAT. The check is here:
typedArg ParseToken(char *token) { char *p = token; typedArg returnVal;
/* It might be an int, a float, or a string */
if (*p == '-') p++;
if (isdigit(*p) || *p == '.') { while (isdigit(*p)) p++; if (*p == '\0') { returnVal.type = INT_osc; returnVal.datum.i = atoi(token); return returnVal; } if (*p == '.') { p++; while (isdigit(*p)) p++; if (*p == '\0') { returnVal.type = FLOAT_osc; returnVal.datum.f = atof(token); return returnVal; } } }
returnVal.type = STRING_osc; returnVal.datum.s = token; return returnVal; }
Every element in the "send"-list will get passed through ParseToken(), and the isdigit()-checks will of course match the numeric values and set the types to INT_osc ("i") or FLOAT_osc ("f").
Well, I don't know what to do about this.
Ciao