aboutsummaryrefslogtreecommitdiffstats
path: root/src/JudgeCommon.h
blob: 19b4eef8235f91da41b19161a6229eb77f7b42c9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#ifndef SCTJUDGE_JUDGE_COMMON
#define SCTJUDGE_JUDGE_COMMON

#include "ProcCommon.h"

/* 這裡的東西記得和 ProcCommon.h 與 SctMain.c 連動 */
#define JUDGEINFO_RESULT_OK    PROCINFO_RESULT_OK
#define JUDGEINFO_RESULT_RE    PROCINFO_RESULT_RE  
#define JUDGEINFO_RESULT_TLE   PROCINFO_RESULT_TLE
#define JUDGEINFO_RESULT_OLE   PROCINFO_RESULT_OLE
#define JUDGEINFO_RESULT_SLE   PROCINFO_RESULT_SLE
#define JUDGEINFO_RESULT_AB    PROCINFO_RESULT_AB
#define JUDGEINFO_RESULT_UD    PROCINFO_RESULT_UD
#define JUDGEINFO_RESULT_WA    (PROCINFO_RESULT_MAX + 0)
#define JUDGEINFO_RESULT_PE    (PROCINFO_RESULT_MAX + 1)
#define JUDGEINFO_RESULT_AC    (PROCINFO_RESULT_MAX + 2)
#define JUDGEINFO_RESULT_MAX   (PROCINFO_RESULT_MAX + 3)

/* --- JudgeMain.c --- */

/* 全域常數,表示 JUDGEINFO 中 result 的值 */
extern const char* sctjudge_result_text[][2];
#define JUDGEINFO_GET_RESULT_ABBR(n) (sctjudge_result_text[(n)][0])
#define JUDGEINFO_GET_RESULT_TEXT(n) (sctjudge_result_text[(n)][1])

typedef struct sctjudge_judgeinfo{
    PROCINFO procinfo;  /* 交給 Proc 系列函式的參數和結果 */
    int procmain;       /* ProcMain 回傳的東西 */
    int flag;           /* 與 Judge 相關的參數,但不會傳到 Proc */
    int pedetect;       /* 偵測 PE 的方法 */
    int result;         /* Judge 的結果 */
    /* 未完待續...... (special judge ?) */
} JUDGEINFO;

/* JUDGEINFO 裡面 judgeflag 的值 */
#define JUDGEINFO_FLAG_COPY     0x00000001  /* chroot 所以要複製執行檔 */

/* sctjudge_main 的回傳值,0 表示正常 */
#define SCTJUDGE_JUDGE_EXIT_SUCCESS    0
#define SCTJUDGE_JUDGE_EXIT_MAX        (SCTJUDGE_PROC_EXIT_MAX + 0)

int sctjudge_main(JUDGEINFO*);
void sctjudge_setdefault(JUDGEINFO*);
void sctjudge_freestring(JUDGEINFO*);
void sctjudge_logger(int, const char*, ...);
void sctjudge_err(const char*, ...);

#endif