#ifdef HAVE_CONFIG_H # include "SctConfig.h" #endif #include "SctVersion.h" #include "ProcCommon.h" #include "JudgeCommon.h" #include "CliCommon.h" #include #include static int sctcli_verbose; /* TODO: 實作 configfile 的功能 */ void sctcli_main(void* configfile, JUDGEINFO* sjdata){ sctcli_verbose = sjdata->procinfo.i_verbose; sjdata->procinfo.i_func_arg = NULL; sjdata->procinfo.f_debug = sctcli_debug_backend; sjdata->procinfo.f_normal = sctcli_normal_backend; sjdata->procinfo.f_err = sctcli_err_backend; sjdata->procinfo.f_monitor = sctcli_monitor; if(configfile == NULL){ sctcli_logger(1, "開始執行檢測工作......\n"); sctcli_logger(2, "%s: Call sctjudge_main() [Judge function]\n", __func__); if(sctjudge_main(sjdata) < 0){ /* 執行檢測工作 */ sctcli_err(NULL, "檢測工作失敗"); return; } }else{ sctcli_err(NULL, "抱歉,設定檔功能尚未實作\n"); return; } } void sctcli_logger(int level, const char* format, ...){ va_list ap; va_start(ap, format); if(sctcli_verbose >= level){ if(level >= 2){ sctcli_debug_backend(NULL, format, ap); }else{ sctcli_normal_backend(NULL, format, ap); } } va_end(ap); } void sctcli_normal_backend(void* data, const char* format, va_list varlist){ vfprintf(stdout, format, varlist); } void sctcli_debug_backend(void* data, const char* format, va_list varlist){ fputs("DEBUG: ", stdout); vfprintf(stdout, format, varlist); } void sctcli_err_backend(void* data, const char* format, va_list varlist){ fputs("錯誤: ", stderr); vfprintf(stderr, format, varlist); } void sctcli_err(const char* format, ...){ va_list ap; va_start(ap, format); sctcli_err_backend(NULL, format, ap); va_end(ap); } void sctcli_monitor(void* data, const PROCMONINFO* moninfo){ return; }