예제 #1
0
void print_usage(char* progname, int argc, char* argv[]) {
    progname = basename(progname);
    if (!plugins) return;

    if (argc >= 1) {
        CFStringRef name = cfstr(argv[0]);
        const DBPlugin* plugin = DBGetPluginWithName(name);
        if (plugin) {
            _DBPluginSetCurrentPlugin(plugin);
            CFStringRef usage = plugin->usage();
            cfprintf(stderr, "usage: %s [-f db] [-b build] %@ %@\n", progname, name, usage);
            CFRelease(usage);
            return;
        } else {
            cfprintf(stderr, "%s: no such command: %@\n", progname, name);
        }
    }

    cfprintf(stderr, "usage: %s [-f db] [-b build] <command> ...\n", progname);
    cfprintf(stderr, "commands:\n");

    CFArrayRef pluginNames = dictionaryGetSortedKeys(plugins);
    CFIndex i, count = CFArrayGetCount(pluginNames);
    for (i = 0; i < count; ++i) {
        CFStringRef name = CFArrayGetValueAtIndex(pluginNames, i);
        const DBPlugin* plugin = DBGetPluginWithName(name);
        _DBPluginSetCurrentPlugin(plugin);
        CFStringRef usage = plugin->usage();
        cfprintf(stderr, "\t%@ %@\n", name, usage);
        CFRelease(usage);
    }
}
예제 #2
0
// Debug an object with extra verbosity, displaying non-enumerable properties.
void
fh_debug_verbose(FILE *stream, js_val *val, int indent)
{
  switch (val->type) {
    case T_BOOLEAN:
      fprintf(stream, "Boolean: (%s)", !val->boolean.val ? "false" : "true");
      break;
    case T_NUMBER:
      debug_num(stream, val);
      break;
    case T_STRING:
      cfprintf(stream, ANSI_YELLOW, "String: '%s'", val->string.ptr);
      break;
    case T_NULL:
      cfprintf(stream, ANSI_GRAY, "null");
      break;
    case T_UNDEF:
      cfprintf(stream, ANSI_GRAY, "undefined");
      break;
    case T_OBJECT:
      if (IS_ARR(val))
        fprintf(stream, "Array: ");
      else if (IS_FUNC(val))
        cfprintf(stream, ANSI_BLUE, "Function: ");
      else
        fprintf(stream, "Object: ");
      break;
  }

  if (IS_OBJ(val))
    debug_obj(stream, val, indent, true);

  fprintf(stream, "\n");
}
예제 #3
0
void
fh_debug(FILE *stream, js_val *val, int indent, bool newline)
{
  switch (val->type) {
    case T_BOOLEAN:
      fprintf(stream, "%s", !val->boolean.val ? "false" : "true");
      break;
    case T_NUMBER:
      debug_num(stream, val);
      break;
    case T_STRING:
      if (fh->opt_interactive)
        cfprintf(stream, ANSI_YELLOW, "'%s'", val->string.ptr);
      else
        fprintf(stream, "%s", val->string.ptr);
      break;
    case T_NULL:
      cfprintf(stream, ANSI_GRAY, "null");
      break;
    case T_UNDEF:
      cfprintf(stream, ANSI_GRAY, "undefined");
      break;
    case T_OBJECT:
      if (IS_ARR(val))
        debug_arr(stream, val, indent);
      else if (IS_FUNC(val))
        cfprintf(stream, ANSI_BLUE, "[Function]");
      else if (IS_DATE(val))
        fprintf(stream, "[Date %ld]", (long)val->object.primitive->number.val);
      else
        debug_obj(stream, val, indent, false);
      break;
  }
  if (newline) fprintf(stream, "\n");
}
예제 #4
0
void lprintf(logType t, const char *f, ...)
{
    char output[MAX_STRLEN] = {0};
    va_list args;
    va_start(args, f);

    vsprintf(output, f, args);

    switch (t) {
        case LOG_INFO:
            cfprintf(stdout, "^0[^gINFO^0]    %s\n", output);
            break;

        case LOG_SCRIPT:
            cfprintf(stdout, "^0[^cSCRIPT^0]  %s\n", output);
            break;

        case LOG_WARNING:
            cfprintf(stdout, "^0[^yWARNING^0] %s\n", output);
            break;

        case LOG_ERROR:
            cfprintf(stderr, "^0[^rERROR^0]   %s\n", output);
            break;
    }

    va_end(args);
}
예제 #5
0
파일: files.c 프로젝트: kilobyte/kbtin
void deathlog_command(const char *arg, struct session *ses)
{
    FILE *fh;
    char fname[BUFFER_SIZE], text[BUFFER_SIZE], temp[BUFFER_SIZE], lfname[BUFFER_SIZE];

    if (*arg)
    {
        arg = get_arg_in_braces(arg, temp, 0);
        arg = get_arg_in_braces(arg, text, 1);
        substitute_vars(temp, fname);
        substitute_myvars(fname, temp, ses);
        expand_filename(temp, fname, lfname);
        substitute_vars(text, temp);
        substitute_myvars(temp, text, ses);
        if ((fh = fopen(lfname, "a")))
        {
            cfprintf(fh, "%s\n", text);
            fclose(fh);
        }
        else
            tintin_eprintf(ses, "#ERROR: COULDN'T OPEN FILE {%s}.", fname);
    }
    else
        tintin_eprintf(ses, "#ERROR: valid syntax is: #deathlog <file> <text>");
}
예제 #6
0
static void
debug_num(FILE *stream, js_val *num)
{
  if (num->number.is_nan)
    cfprintf(stream, ANSI_ORANGE, "NaN");
  else if (num->number.is_inf) 
    cfprintf(stream, ANSI_ORANGE, "%sInfinity", num->number.is_neg ? "-" : "");
  else {
    char *fmt = "%f";
    if (fmod(num->number.val, 1) == 0) 
      fmt = "%.0f";
    if (fabs(num->number.val) > 1e21)
      fmt = "%g";
    cfprintf(stream, ANSI_ORANGE, fmt, num->number.val);
  }
}
예제 #7
0
static void
debug_arr(FILE *stream, js_val *arr, int indent)
{
  if (arr->object.length == 0) {
    fprintf(stream, "[]");
    return;
  }
  fprintf(stream, "[ ");

  bool first = true;
  js_prop *prop;
  unsigned long i;

  for (i = 0; i < arr->object.length; i++) {
    prop = fh_get_prop(arr, JSNUMKEY(i)->string.ptr);

    if (!first) 
      fprintf(stream, ", ");
    else
      first = false;

    if (!prop) continue;

    if (prop->circular)
      cfprintf(stream, ANSI_BLUE, "[Circular]");
    else
      fh_debug(stream, prop->ptr, 0, false);
  }

  fprintf(stream, " ]");
}
예제 #8
0
static void
debug_obj(FILE *stream, js_val *obj, int indent, bool force_enum)
{
  js_prop *x;
  bool first = true;

  OBJ_ITER(obj, x) {
    if (!x->enumerable && !force_enum) continue;
    if (first) {
      if (indent) fprintf(stream, "%*s", indent, " ");
      fprintf(stream, "{");
      first = false;
    }
    else {
      fprintf(stream, ",\n");
      fprintf(stream, "%*s", indent + 1, " ");
    }
    fprintf(stream, " %s: ", x->name);
    if (x->circular)
      cfprintf(stream, ANSI_BLUE, "[Circular]");
    else
      fh_debug(stream, x->ptr, indent + 3, false);
  };

  fprintf(stream, first ? "{}" : " }");
}
예제 #9
0
static int run(CFArrayRef argv) {
	if (CFArrayGetCount(argv) > 1)  return -1;
	CFStringRef build = DBGetCurrentBuild();
	CFStringRef project = NULL;
	CFDictionaryRef projectEnv = NULL;
	CFDictionaryRef globalEnv = DBCopyPropDictionary(build, NULL, CFSTR("environment"));
	if (CFArrayGetCount(argv) == 1) {
		project = CFArrayGetValueAtIndex(argv, 0);
		projectEnv = DBCopyPropDictionary(build, project, CFSTR("environment"));
	}
	
	CFMutableDictionaryRef env = NULL;
	
	if (globalEnv && projectEnv) {
		env = (CFMutableDictionaryRef)mergeDictionaries(projectEnv, globalEnv);
	} else if (globalEnv) {
		env = (CFMutableDictionaryRef)globalEnv;
	} else if (projectEnv) {
		env = (CFMutableDictionaryRef)projectEnv;
	} else {
		return 0;
	}

	// Auto-generate some variables based on RC_ARCHS and RC_NONARCH_CFLAGS
	// RC_CFLAGS=$RC_NONARCH_CFLAGS -arch ${arch}
	// RC_${arch}=YES
	CFStringRef str = CFDictionaryGetValue(env, CFSTR("RC_NONARCH_CFLAGS"));
	if (!str) str = CFSTR("");
	CFMutableStringRef cflags = CFStringCreateMutableCopy(NULL, 0, str);
	str = CFDictionaryGetValue(env, CFSTR("RC_ARCHS"));
	if (str) {
		CFMutableStringRef trimmed = CFStringCreateMutableCopy(NULL, 0, str);
		CFStringTrimWhitespace(trimmed);
		CFArrayRef archs = tokenizeString(trimmed);
		CFIndex i, count = CFArrayGetCount(archs);
		for (i = 0; i < count; ++i) {
			CFStringRef arch = CFArrayGetValueAtIndex(archs, i);
			// -arch ${arch}
			CFStringAppendFormat(cflags, NULL, CFSTR(" -arch %@"), arch);
			
			// RC_${arch}=YES
			CFStringRef name = CFStringCreateWithFormat(NULL, NULL, CFSTR("RC_%@"), arch);
			CFDictionarySetValue(env, name, CFSTR("YES"));
			CFRelease(name);
		}
		CFRelease(trimmed);
	}
	CFDictionarySetValue(env, CFSTR("RC_CFLAGS"), cflags);
	
	// print variables to stdout
	CFArrayRef keys = dictionaryGetSortedKeys(env);
	CFIndex i, count = CFArrayGetCount(keys);
	for (i = 0; i < count; ++i) {
		CFStringRef name = CFArrayGetValueAtIndex(keys, i);
		CFStringRef value = CFDictionaryGetValue(env, name);
		cfprintf(stdout, "%@=%@\n", name, value);
	}
	return 0;
}
예제 #10
0
int main(void) {
  /*
   * Print colors on stderr
   */
  const char* text = "A random text";
  fprintf(stderr, "\e[35m%s\e[m\n", text);
  cfprintf(stderr, MAGENTA, NORMAL, NOBOLD, "%s\n", text);
  return 0;
}
예제 #11
0
int DBPluginPropertyDefaultRun(CFArrayRef argv) {
    DBPlugin* plugin = _DBPluginGetCurrentPlugin();
    assert(plugin != NULL);
    assert(plugin->name != NULL);

    CFStringRef build = DBGetCurrentBuild();
    CFIndex argc = CFArrayGetCount(argv);
    CFStringRef project = (argc > 0) ? CFArrayGetValueAtIndex(argv, 0) : NULL;

    // kDBPluginProjectPropertyType must have project argument,
    // kDBPluginBuildPropertyType must not have project argument,
    // kDBPluginPropertyType may have project argument.
    if (plugin->type == kDBPluginProjectPropertyType && argc != 1) return -1;
    if (plugin->type == kDBPluginBuildPropertyType && argc != 0) return -1;
    if (plugin->type == kDBPluginPropertyType && argc != 0 && argc != 1) return -1;

    if (plugin->datatype == CFStringGetTypeID()) {
        CFStringRef value = DBCopyPropString(build, project, plugin->name);
        // kDBPluginPropertyType: if no value in project, look in build.
        if (!value && project) value = DBCopyPropString(build, NULL, plugin->name);
        if (value) cfprintf(stdout, "%@\n", value);

    } else if (plugin->datatype == CFArrayGetTypeID()) {
        CFArrayRef value = DBCopyPropArray(build, project, plugin->name);
        CFIndex i, count = value ? CFArrayGetCount(value) : 0;
        // kDBPluginPropertyType: if no value in project, look in build.
        if ((!value || !count) && project) {
            value = DBCopyPropArray(build, NULL, plugin->name);
            count = value ? CFArrayGetCount(value) : 0;
        }
        for (i = 0; i < count; ++i) {
            cfprintf(stdout, "%@\n", CFArrayGetValueAtIndex(value, i));
        }

    } else {
        fprintf(stderr, "internal error: no default handler for CFDictionary type\n");
        return -1;
    }
    return 0;
}
예제 #12
0
파일: diag.c 프로젝트: tavianator/bfs
void bfs_warning_prefix(const struct cmdline *cmdline) {
	cfprintf(cmdline->cerr, "${bld}%s:${rs} ${wr}warning:${rs} ", xbasename(cmdline->argv[0]));
}
예제 #13
0
파일: diag.c 프로젝트: tavianator/bfs
void bfs_error_prefix(const struct cmdline *cmdline) {
	cfprintf(cmdline->cerr, "${bld}%s:${rs} ${er}error:${rs} ", xbasename(cmdline->argv[0]));
}