int ged_log(struct ged *gedp, int argc, const char *argv[]) { static char *usage = "get|start|stop"; GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR); GED_CHECK_READ_ONLY(gedp, GED_ERROR); GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR); /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); /* must be wanting help */ if (argc == 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_HELP; } if (argc != 2) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } if (argv[1][0] == 'g' && BU_STR_EQUAL(argv[1], "get")) { bu_vls_vlscatzap(gedp->ged_result_str, gedp->ged_log); return GED_OK; } if (argv[1][0] == 's' && BU_STR_EQUAL(argv[1], "start")) { bu_log_add_hook(log_hook, (void *)gedp->ged_log); return GED_OK; } if (argv[1][0] == 's' && BU_STR_EQUAL(argv[1], "stop")) { bu_log_delete_hook(log_hook, (void *)gedp->ged_log); return GED_OK; } bu_log("Usage: %s %s ", argv[0], usage); return GED_ERROR; }
/* * Sets up hooks to bu_log so that all output is caught in the given vls. * */ void start_catching_output(struct bu_vls *vp) { bu_log_add_hook(output_catch, (void *)vp); }