예제 #1
0
/* -------------------------------------------------------- rtcmix_warn --- */
void
rtcmix_warn(const char *inst_name, const char *format, ...)
{
   if (get_print_option() >= MMP_WARN) {
      char     buf[BUFSIZE];
      va_list  args;

      va_start(args, format);
      vsnprintf(buf, BUFSIZE, format, args);
      va_end(args);

#ifndef MAXMSP
      if (inst_name)
         fprintf(stderr, "\n" PREFIX "WARNING [%s]:  %s\n\n", inst_name, buf);
      else
         fprintf(stderr, "\n" PREFIX "WARNING:  %s\n\n", buf);

#else // MAXMSP
      if (inst_name) {
         int nchars = sprintf(get_mm_print_ptr(), "WARNING [%s]:  %s\n", inst_name, buf);
         set_mm_print_ptr(nchars+1);
      }
      else {
         int nchars = sprintf(get_mm_print_ptr(), "WARNING:  %s\n", buf);
         set_mm_print_ptr(nchars+1);
      }
#endif // MAXMSP
   }
}
예제 #2
0
/* ------------------------------------------------------------------ die --- */
int
die(const char *inst_name, const char *format, ...)
{
   char     buf[BUFSIZE];
   va_list  args;

   va_start(args, format);
   vsnprintf(buf, BUFSIZE, format, args);
   va_end(args);

#ifndef MAXMSP
   if (inst_name)
      fprintf(stderr, PREFIX "FATAL ERROR [%s]:  %s\n", inst_name, buf);
   else
      fprintf(stderr, PREFIX "FATAL ERROR:  %s\n", buf);

#else // MAXMSP
   if (inst_name) {
      int nchars = sprintf(get_mm_print_ptr(), "FATAL ERROR [%s]:  %s\n", inst_name, buf);
      set_mm_print_ptr(nchars+1);
   }
   else {
      int nchars = sprintf(get_mm_print_ptr(), "FATAL ERROR:  %s\n", buf);
   }
#endif // MAXMSP

   if (get_bool_option(kOptionExitOnError)) {
      if (!rtsetparams_was_called())
         closesf_noexit();
      exit(1);
      return 0;	/*NOTREACHED*/
   }
   else
      return DONT_SCHEDULE;
}
예제 #3
0
/* -------------------------------------------------------- rtcmix_advise --- */
void
rtcmix_advise(const char *inst_name, const char *format, ...)
{
   if (get_print_option() >= MMP_ADVISE) {
      char     buf[BUFSIZE];
      va_list  args;

      va_start(args, format);
      vsnprintf(buf, BUFSIZE, format, args);
      va_end(args);

#ifndef MAXMSP
      if (inst_name)
         printf("%s:  %s\n", inst_name, buf);
      else
         printf("%s\n", buf);

#else // MAXMSP
      if (inst_name) {
         int nchars = sprintf(get_mm_print_ptr(), "ADVISE [%s]:  %s\n", inst_name, buf);
         set_mm_print_ptr(nchars+1);
      }
      else {
         int nchars = sprintf(get_mm_print_ptr(), "ADVISE: %s\n", buf);
         set_mm_print_ptr(nchars+1);
      }
#endif // MAXMSP
   }
}
예제 #4
0
/* -------------------------------------------------------------- rterror --- */
void
rterror(const char *inst_name, const char *format, ...)
{
   char     buf[BUFSIZE];
   va_list  args;

	if (get_print_option() < MMP_RTERRORS) return;

   va_start(args, format);
   vsnprintf(buf, BUFSIZE, format, args);
   va_end(args);

#ifndef MAXMSP
   if (inst_name)
      fprintf(stderr, PREFIX "ERROR [%s]: %s\n", inst_name, buf);
   else
      fprintf(stderr, PREFIX "ERROR: %s\n", buf);

#else // MAXMSP
   if (inst_name) {
      int nchars = sprintf(get_mm_print_ptr(), "ERROR [%s]: %s\n", inst_name, buf);
      set_mm_print_ptr(nchars+1);
   }
   else {
      int nchars = sprintf(get_mm_print_ptr(), "ERROR: %s\n", buf);
      set_mm_print_ptr(nchars+1);
   }
#endif // MAXMSP
}
예제 #5
0
MincFloat
_minc_printf(const MincValue args[], const int nargs)
{
   int n;
   const char *p;
	int nchars;

	if (get_print_option() < MMP_PRINTS) return 0.0;

   if (args[0].dataType() != MincStringType) {
      minc_warn("printf: first argument must be format string");
      goto err;
   }

   n = 1;
   p = (MincString) args[0];
   while (*p) {
      switch (*p) {
         case '%':
            p++;
            if (n >= nargs) {
               minc_warn("printf: not enough arguments for format string");
               goto err;
            }
            switch (*p) {
               case 'd':      /* print float object as integer */
                  if (args[n].dataType() != MincFloatType) {
                     minc_warn("printf: wrong argument type for format");
                     goto err;
                  }
                  nchars = snprintf(get_mm_print_ptr(), get_mm_print_space(), "%d", (int) (MincFloat)args[n]);
                  break;
               case 'f':      /* print float object */
                  if (args[n].dataType() != MincFloatType) {
                     minc_warn("printf: wrong argument type for format");
                     goto err;
                  }
                  nchars = snprintf(get_mm_print_ptr(), get_mm_print_space(), "%.12g", (MincFloat)args[n]);
                  break;
               case 'l':      /* print list object */
                  if (args[n].dataType() != MincListType) {
                     minc_warn("printf: wrong argument type for format");
                     goto err;
                  }
                  nchars = snprintf(get_mm_print_ptr(), get_mm_print_space(), "%s", "[");
                  set_mm_print_ptr(nchars);
				  _do_print(((MincList *)args[n])->data, ((MincList *)args[n])->len);
                  nchars = snprintf(get_mm_print_ptr(), get_mm_print_space(), "%s", "]");
                  set_mm_print_ptr(nchars);
                  break;
               case 's':      /* print string object */
                  if (args[n].dataType() != MincStringType) {
                     minc_warn("printf: wrong argument type for format");
                     goto err;
                  }
                  nchars = snprintf(get_mm_print_ptr(), get_mm_print_space(), "%s", (MincString)args[n]);
                  break;
               case 't':      /* print type of object */
                  {
                     char *tstr = (char *) _make_type_string(args[n].dataType());
	                  nchars = snprintf(get_mm_print_ptr(), get_mm_print_space(), "%s", tstr);
                     free(tstr);
                  }
                  break;
               case 'z':      /* print as appropriate for type */
                  _do_print(&args[n], 1);
                  break;
               case '\0':
                  minc_warn("printf: premature end of format string");
                  goto err;
                  break;
               default:
                  minc_warn("printf: invalid format specifier");
                  goto err;
                  break;
            }
            n++;
            p++;
            break;
         case '\\':
            p++;
            switch (*p) {
               case 'n':
						nchars = snprintf(get_mm_print_ptr(), get_mm_print_space(), "\n");
                  break;
               case 't':
						nchars = snprintf(get_mm_print_ptr(), get_mm_print_space(), "\t");
                  break;
//FIXME: currently, minc.l can't handle escaped quotes in strings
               case '\'':
						nchars = snprintf(get_mm_print_ptr(), get_mm_print_space(), "'");
                  break;
               case '"':
						nchars = snprintf(get_mm_print_ptr(), get_mm_print_space(), "\"");
                  break;
               case '\0':
                  minc_warn("printf: premature end of format string");
                  goto err;
                  break;
               default:
                  minc_warn("printf: invalid escape character");
                  goto err;
                  break;
            }
            p++;
            break;
         default:
			nchars = snprintf(get_mm_print_ptr(), get_mm_print_space(), "%.1s", p);
            p++;
            break;
      }
		set_mm_print_ptr(nchars);
   }
	set_mm_print_ptr(1);
   return 0.0;
err:
	nchars = snprintf(get_mm_print_ptr(), get_mm_print_space(), "\n");
	set_mm_print_ptr(nchars+1);
   return -1.0;
}