-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbuild.py
115 lines (104 loc) · 2.41 KB
/
build.py
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import cffi
ffi = cffi.FFI()
ffi.set_source("_amzi", None)
ffi.cdef("""
typedef enum
{
pERR = -1,
pATOM,
pINT,
pSTR,
pFLOAT,
pSTRUCT,
pLIST,
pTERM,
pADDR,
pVAR,
pWSTR,
pWATOM,
pREAL
} pTYPE;
typedef enum
{
cAATOM,
cASTR,
cINT,
cLONG,
cSHORT,
cFLOAT,
cDOUBLE,
cADDR,
cTERM,
cWSTR,
cWATOM,
// used to break apart :/2 structures
cMOD,
cGOAL
} cTYPE;
typedef enum
{
CUR_IN,
CUR_OUT,
CUR_ERR,
USER_IN,
USER_OUT,
USER_ERR
} STREAM;
typedef void * VOIDptr;
typedef unsigned short uintCH;
typedef uintCH ARITY;
typedef ARITY * ARITYptr;
typedef void * ENGid;
typedef ENGid * ENGidptr;
typedef void* TERM;
typedef TERM * TERMptr;
typedef int (*ExtPred)(VOIDptr);
typedef struct {
wchar_t* Pname;
ARITY Parity;
ExtPred Pfunc;
} PRED_INITW;
typedef PRED_INITW * PRED_INITWptr;
int lsInitW(ENGidptr, wchar_t*);
int lsLoadW(ENGid, wchar_t*);
int lsCallStrW(ENGid, TERMptr, wchar_t*);
int lsExecStrW(ENGid, TERMptr, wchar_t*);
pTYPE lsGetTermType(ENGid, TERM);
pTYPE lsGetArgType(ENGid, TERM, int);
int lsGetArg(ENGid, TERM, int, cTYPE, VOIDptr);
int lsGetFAW(ENGid, TERM, wchar_t*, ARITYptr);
int lsTermToStrW(ENGid, TERM, wchar_t*, int);
int lsTermToStrQW(ENGid, TERM, wchar_t*, int);
int lsStrToTermW(ENGid, TERMptr, wchar_t*);
int lsGetTerm(ENGid, TERM, cTYPE, VOIDptr);
int lsGetHead(ENGid, TERM, cTYPE, VOIDptr);
int lsClearCall(ENGid);
TERM lsGetTail(ENGid, TERM);
int lsRedo(ENGid);
int lsMain(ENGid);
int lsClose(ENGid);
int lsSetStream(ENGid, STREAM, int);
int lsSetOutputW(ENGid, void *, void *);
int lsAssertzStrW(ENGid, wchar_t*);
int lsAssertaStrW(ENGid, wchar_t*);
int lsInitPredsW(ENGid, PRED_INITWptr);
int lsAddPredW(ENGid, wchar_t*, ARITY, ExtPred, VOIDptr);
int lsGetParm(ENGid, int, cTYPE, VOIDptr);
int lsUnifyParm(ENGid, int, cTYPE, VOIDptr);
int lsUnify(ENGid, TERM, TERM);
int lsMakeAtomW(ENGid, TERMptr, wchar_t*);
int lsMakeStrW(ENGid, TERMptr, wchar_t*);
int lsMakeInt(ENGid, TERMptr, long);
int lsMakeFloat(ENGid, TERMptr, double);
int lsMakeList(ENGid, TERMptr);
int lsPushList(ENGid, TERMptr, TERM);
int lsMakeFAW(ENGid, TERMptr, wchar_t*, ARITY);
int lsUnifyArg(ENGid, TERMptr, int, cTYPE, VOIDptr);
void lsGetExceptMsgW(ENGid, wchar_t*, int);
int lsSetInput(ENGid, void *, void *);
""")
def main():
ffi.compile(verbose=True)
if __name__ == '__main__':
import sys
sys.exit(int(main() or 0))