61 string ans(getenv(
"HOME"));
95 string ans(getenv(
"HOME"));
97 ans = ans + nam.substr(1);
115 while ( ! feof(inp)) {
117 if (init[0] == key) {
118 char * str = &init[2];
119 return string((
const char *)str);
132 char * rcLin = rcStr;
136 FILE * inp = fopen(iNam.c_str(),
"r+");
141 inp = fopen(iNam.c_str(),
"w");
144 fprintf(inp,
"%c %s\n", key, data.c_str());
145 while (rcLin < (rcStr + len)) {
146 cr = strchr(rcLin,
'\n');
150 fprintf(inp,
"%s", rcLin);
154 rcLin += strlen(rcLin);
161 #define cheapPrintf(val) \
165 *xpos = '0' + (val / 10); \
166 *(xpos+1) = '0' + (val % 10)
175 char * xpos = strstr(fsnam,
"XX");
180 dFile = fopen(fsnam,
"r");
187 logMsg(
"Write to file \"%s\" filename not recognized", fsnam);
189 return string(fsnam);
194 #define UNDEFINED_IN_CRAM // undefine this to compile with CRAM service logging
196 #ifdef UNDEFINED_IN_CRAM
207 #define SWALLOW_CR() \
208 if (format[0] == '\n') { \
209 fprintf(stderr, "\n"); \
232 va_start(args, format);
237 #ifdef FMAK_AR // special printing for FMAK apps
239 #include "FMAKComponent.h"
240 using namespace fmak;
242 extern FMAKComponent * gComp;
246 vsprintf(message, format, args);
247 sprintf(message + strlen(message),
"\n");
248 gComp->printMsg(message);
279 vfprintf(stderr, format, args);
280 fprintf(stderr,
"\n");
290 va_start(args, format);
309 #endif // UNDEFINED_IN_CRAM
317 void usleep(
int usec) {
318 unsigned msec = usec / 1000;
319 unsigned now = Time::getMillisecondCounter();
320 Time::waitForMillisecondCounter(now + msec);
322 float log2f(
float n) {
323 return logf(n) / logf(2.0f);
332 #define TIMER_INTERVAL 0.25f // loop time in sec to check stopNow flag in sleep timers
337 if (dur_in_usec <= 0.0)
return false;
339 int periods = (int) ((dur_in_usec / 1000000.0f) /
TIMER_INTERVAL);
341 interval = (int) dur_in_usec;
352 if ((interval * periods) < dur_in_usec)
353 usleep((
int)(dur_in_usec - (interval * periods)));
364 if (dur_in_msec <= 0.0)
return false;
371 if (dur_in_sec <= 0.0)
return false;
372 return sleepUsec(dur_in_sec * 1000000.0f);
379 return Time::getHighResolutionTicks();
382 gettimeofday(&tv, NULL);
391 return (
float) Time::highResolutionTicksToSeconds(Time::getHighResolutionTicks());
394 gettimeofday(&tv, NULL);
395 return (
float) tv.tv_sec + ((float) tv.tv_usec / 1000000.0f);
406 return((
float) rand() / (
float) RAND_MAX);
418 return (minV + (
fRandZ() * (maxV - minV)));
424 return (base + (
fRandZ() * range * base));
430 return (base + (
fRand1() * range));
444 return (
int)
fRandV((
float) val);
450 return (
int)
fRandM((
float) minV, (
float) maxV);
456 return (
int)
fRandB((
float) base, (
float) range);
475 return (8.17579891564371f * powf(2.0f, (midiKey / 12.0f)));
482 return (
unsigned) (12.0f * log2f(frequency / 8.17579891564371f));
492 mObservers.push_back(o);
493 mHasObservers =
true;
499 mHasObserverMap =
true;
500 mObsMap[o->
mKey].push_back(o);
503 logMsg(
"Model::attachObserver %x", o);
508 int count = mObservers.size();
510 for (i = 0; i < count; i++)
511 if (mObservers[i] == o)
514 mObservers.erase(mObservers.begin() + i);
515 if (mObservers.size() == 0)
516 mHasObservers =
false;
521 logMsg(
"Model::detachObserver");
530 if ( ! mHasObservers)
532 ObserverVector::iterator pos;
534 logMsg(
"Model::update %d", mObservers.size());
539 if (mHasObserverMap) {
540 int key = this->evaluate(argument);
542 for (pos = obs.begin(); pos != obs.end(); ++pos)
543 (* pos)->update(argument);
545 for (pos = mObservers.begin(); pos != mObservers.end(); ++pos)
546 (* pos)->update(argument);