android debugging plus clean-ups
This commit is contained in:
parent
d1a230eb56
commit
ef586e264e
@ -3,7 +3,7 @@
|
|||||||
* Yap Prolog *
|
* Yap Prolog *
|
||||||
* *
|
* *
|
||||||
* Yap Prolog was developed at NCCUP - Universidade do Porto *
|
* Yap Prolog was developed at NCCUP - Universidade do Porto *
|
||||||
* *
|
* \z *
|
||||||
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
|
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
|
||||||
* *
|
* *
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
|
@ -6518,7 +6518,7 @@ p_nth_instance( USES_REGS1 )
|
|||||||
}
|
}
|
||||||
CurSlot = Yap_StartSlots( );
|
CurSlot = Yap_StartSlots( );
|
||||||
/* I have pe and n */
|
/* I have pe and n */
|
||||||
sl4 = Yap_InitSlot( ARG4 PASS_REGS );
|
sl4 = Yap_InitSlot( ARG4 );
|
||||||
/* in case we have to index or to expand code */
|
/* in case we have to index or to expand code */
|
||||||
for (i = 1; i <= pe->ArityOfPE; i++) {
|
for (i = 1; i <= pe->ArityOfPE; i++) {
|
||||||
XREGS[i] = MkVarTerm();
|
XREGS[i] = MkVarTerm();
|
||||||
@ -6527,7 +6527,7 @@ p_nth_instance( USES_REGS1 )
|
|||||||
IPred(pe, 0, CP);
|
IPred(pe, 0, CP);
|
||||||
}
|
}
|
||||||
cl0 = Yap_NthClause(pe, Count);
|
cl0 = Yap_NthClause(pe, Count);
|
||||||
ARG4 = Yap_GetFromSlot( sl4 PASS_REGS );
|
ARG4 = Yap_GetFromSlot( sl4 );
|
||||||
LOCAL_CurSlot = CurSlot;
|
LOCAL_CurSlot = CurSlot;
|
||||||
if (cl0 == NULL) {
|
if (cl0 == NULL) {
|
||||||
UNLOCK(pe->PELock);
|
UNLOCK(pe->PELock);
|
||||||
@ -6761,4 +6761,3 @@ Yap_InitCdMgr(void)
|
|||||||
Yap_InitCPred("$predicate_live_cps", 4, p_predicate_lu_cps, 0L);
|
Yap_InitCPred("$predicate_live_cps", 4, p_predicate_lu_cps, 0L);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
}
|
}
|
||||||
s = name->StrOfAE;
|
s = name->StrOfAE;
|
||||||
|
|
||||||
__android_log_print(ANDROID_LOG_INFO, "YAP", " %s ", s);
|
LOG( " %s ", s);
|
||||||
#endif
|
#endif
|
||||||
check_trail(TR);
|
check_trail(TR);
|
||||||
if (!(PREG->y_u.Osbpp.p->PredFlags & (SafePredFlag|NoTracePredFlag|HiddenPredFlag))) {
|
if (!(PREG->y_u.Osbpp.p->PredFlags & (SafePredFlag|NoTracePredFlag|HiddenPredFlag))) {
|
||||||
|
16
C/iopreds.c
16
C/iopreds.c
@ -574,7 +574,7 @@ Yap_read_term(term_t t0, IOSTREAM *inp_stream, struct read_data_t *rd)
|
|||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
rd->varnames = 0;
|
rd->varnames = 0;
|
||||||
rd->singles = 0;
|
rd->singles = 0;
|
||||||
return Yap_unify_constant( Yap_GetFromSlot( t0 PASS_REGS), MkAtomTerm (AtomEof));
|
return Yap_unify_constant( Yap_GetFromSlot( t0), MkAtomTerm (AtomEof));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
repeat_cycle:
|
repeat_cycle:
|
||||||
@ -620,7 +620,7 @@ Yap_read_term(term_t t0, IOSTREAM *inp_stream, struct read_data_t *rd)
|
|||||||
|
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
rd->has_exception = TRUE;
|
rd->has_exception = TRUE;
|
||||||
rd->exception = Yap_InitSlot(terror PASS_REGS);
|
rd->exception = Yap_InitSlot(terror);
|
||||||
CurrentModule = OCurrentModule;
|
CurrentModule = OCurrentModule;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -630,9 +630,9 @@ Yap_read_term(term_t t0, IOSTREAM *inp_stream, struct read_data_t *rd)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!Yap_unify(t, Yap_GetFromSlot( t0 PASS_REGS)))
|
if (!Yap_unify(t, Yap_GetFromSlot( t0)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (store_comments && !Yap_unify(LOCAL_Comments, Yap_GetFromSlot( rd->comments PASS_REGS)))
|
if (store_comments && !Yap_unify(LOCAL_Comments, Yap_GetFromSlot( rd->comments )))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (rd->varnames) {
|
if (rd->varnames) {
|
||||||
Term v;
|
Term v;
|
||||||
@ -656,7 +656,7 @@ Yap_read_term(term_t t0, IOSTREAM *inp_stream, struct read_data_t *rd)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOCAL_VarNames = v;
|
LOCAL_VarNames = v;
|
||||||
if (!Yap_unify(v, Yap_GetFromSlot( rd->varnames PASS_REGS ))) {
|
if (!Yap_unify(v, Yap_GetFromSlot( rd->varnames ))) {
|
||||||
CurrentModule = OCurrentModule;
|
CurrentModule = OCurrentModule;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -683,7 +683,7 @@ Yap_read_term(term_t t0, IOSTREAM *inp_stream, struct read_data_t *rd)
|
|||||||
TR = old_TR;
|
TR = old_TR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!Yap_unify(v, Yap_GetFromSlot( rd->variables PASS_REGS ) )) {
|
if (!Yap_unify(v, Yap_GetFromSlot( rd->variables ) )) {
|
||||||
CurrentModule = OCurrentModule;
|
CurrentModule = OCurrentModule;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -711,11 +711,11 @@ Yap_read_term(term_t t0, IOSTREAM *inp_stream, struct read_data_t *rd)
|
|||||||
}
|
}
|
||||||
if (rd->singles == 1) {
|
if (rd->singles == 1) {
|
||||||
if (IsPairTerm(v))
|
if (IsPairTerm(v))
|
||||||
rd->singles = Yap_InitSlot( v PASS_REGS);
|
rd->singles = Yap_InitSlot( v );
|
||||||
else
|
else
|
||||||
rd->singles = FALSE;
|
rd->singles = FALSE;
|
||||||
} else if (rd->singles) {
|
} else if (rd->singles) {
|
||||||
if (!Yap_unify( v, Yap_GetFromSlot( rd->singles PASS_REGS ))) {
|
if (!Yap_unify( v, Yap_GetFromSlot( rd->singles ))) {
|
||||||
CurrentModule = OCurrentModule;
|
CurrentModule = OCurrentModule;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -848,7 +848,7 @@ case Var_tok:
|
|||||||
tn = Yap_MkNewApplTerm(SWIFunctorToFunctor(FUNCTOR_quasi_quotation4), 4);
|
tn = Yap_MkNewApplTerm(SWIFunctorToFunctor(FUNCTOR_quasi_quotation4), 4);
|
||||||
tnp = RepAppl(tn) + 1;
|
tnp = RepAppl(tn) + 1;
|
||||||
tnp[0] = MkAtomTerm(at);
|
tnp[0] = MkAtomTerm(at);
|
||||||
if (!get_quasi_quotation(Yap_InitSlot(ArgOfTerm(2, tn) PASS_REGS),
|
if (!get_quasi_quotation(Yap_InitSlot(ArgOfTerm(2, tn)),
|
||||||
&qq->text,
|
&qq->text,
|
||||||
qq->text + strlen((const char *)qq->text), rd))
|
qq->text + strlen((const char *)qq->text), rd))
|
||||||
FAIL;
|
FAIL;
|
||||||
@ -857,7 +857,7 @@ case Var_tok:
|
|||||||
intptr_t qqend = qq->end.charno;
|
intptr_t qqend = qq->end.charno;
|
||||||
|
|
||||||
// set_range_position(positions, -1, qqend PASS_LD);
|
// set_range_position(positions, -1, qqend PASS_LD);
|
||||||
if (!PL_unify_term(Yap_InitSlot(ArgOfTerm(2, t) PASS_REGS), PL_FUNCTOR,
|
if (!PL_unify_term(Yap_InitSlot(ArgOfTerm(2, t) ), PL_FUNCTOR,
|
||||||
FUNCTOR_minus2, PL_INTPTR,
|
FUNCTOR_minus2, PL_INTPTR,
|
||||||
qq->mid.charno + 2, /* end of | token */
|
qq->mid.charno + 2, /* end of | token */
|
||||||
PL_INTPTR, qqend - 2)) /* end minus "|}" */
|
PL_INTPTR, qqend - 2)) /* end minus "|}" */
|
||||||
@ -865,12 +865,12 @@ case Var_tok:
|
|||||||
}
|
}
|
||||||
|
|
||||||
tnp[2] =
|
tnp[2] =
|
||||||
Yap_GetFromSlot(rd->varnames PASS_REGS); /* Arg 3: the var dictionary */
|
Yap_GetFromSlot(rd->varnames); /* Arg 3: the var dictionary */
|
||||||
/* Arg 4: the result */
|
/* Arg 4: the result */
|
||||||
t = ArgOfTerm(4, tn);
|
t = ArgOfTerm(4, tn);
|
||||||
if (!(to = PL_new_term_ref()) ||
|
if (!(to = PL_new_term_ref()) ||
|
||||||
!PL_unify_list(rd->qq_tail, to, rd->qq_tail) ||
|
!PL_unify_list(rd->qq_tail, to, rd->qq_tail) ||
|
||||||
!PL_unify(to, Yap_InitSlot(tn PASS_REGS)))
|
!PL_unify(to, Yap_InitSlot(tn )))
|
||||||
FAIL;
|
FAIL;
|
||||||
}
|
}
|
||||||
NextToken;
|
NextToken;
|
||||||
|
45
C/pl-yap.c
45
C/pl-yap.c
@ -208,7 +208,7 @@ int
|
|||||||
valueExpression(term_t t, Number r ARG_LD)
|
valueExpression(term_t t, Number r ARG_LD)
|
||||||
{
|
{
|
||||||
REGS_FROM_LD
|
REGS_FROM_LD
|
||||||
YAP_Term t0 = Yap_Eval(Yap_GetFromSlot(t PASS_REGS) PASS_REGS);
|
YAP_Term t0 = Yap_Eval(Yap_GetFromSlot(t ) PASS_REGS);
|
||||||
if (YAP_IsIntTerm(t0)) {
|
if (YAP_IsIntTerm(t0)) {
|
||||||
r->type = V_INTEGER;
|
r->type = V_INTEGER;
|
||||||
r->value.i = YAP_IntOfTerm(t0);
|
r->value.i = YAP_IntOfTerm(t0);
|
||||||
@ -313,7 +313,7 @@ _PL_unify_atomic(term_t t, PL_atomic_t a)
|
|||||||
{
|
{
|
||||||
GET_LD
|
GET_LD
|
||||||
if (IsApplTerm(a) || IsAtomTerm(a))
|
if (IsApplTerm(a) || IsAtomTerm(a))
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS), a);
|
return Yap_unify(Yap_GetFromSlot(t ), a);
|
||||||
return PL_unify_atom(t, a);
|
return PL_unify_atom(t, a);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -321,7 +321,7 @@ int
|
|||||||
_PL_unify_string(term_t t, word w)
|
_PL_unify_string(term_t t, word w)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS), w);
|
return Yap_unify(Yap_GetFromSlot(t ), w);
|
||||||
}
|
}
|
||||||
|
|
||||||
Atom lookupAtom(const char *s, size_t len)
|
Atom lookupAtom(const char *s, size_t len)
|
||||||
@ -863,7 +863,7 @@ Yap_TermToString(Term t, char *s, size_t sz, size_t *length, int *encoding, int
|
|||||||
yhandle_t CurSlot = Yap_StartSlots();
|
yhandle_t CurSlot = Yap_StartSlots();
|
||||||
|
|
||||||
Yap_StartSlots( );
|
Yap_StartSlots( );
|
||||||
l = Yap_InitSlot(t PASS_REGS );
|
l = Yap_InitSlot(t );
|
||||||
|
|
||||||
{ IOENC encodings[3];
|
{ IOENC encodings[3];
|
||||||
IOENC *enc;
|
IOENC *enc;
|
||||||
@ -935,22 +935,15 @@ Yap_HandleToString(term_t l, size_t sz, size_t *length, int *encoding, int flags
|
|||||||
size_t size = 4096, total = size;
|
size_t size = 4096, total = size;
|
||||||
IOSTREAM *fd;
|
IOSTREAM *fd;
|
||||||
|
|
||||||
total = size;
|
total = size+1;
|
||||||
buf = malloc(total);
|
buf = malloc(total);
|
||||||
#ifdef DEBUG
|
buf[0]='\0';
|
||||||
{CACHE_REGS
|
|
||||||
__android_log_print(ANDROID_LOG_ERROR, __FUNCTION__, "text %p \n", buf);}
|
|
||||||
#endif
|
|
||||||
while ( (fd = Sopenmem(&buf, &size, "w")) == NULL ||
|
while ( (fd = Sopenmem(&buf, &size, "w")) == NULL ||
|
||||||
(( fd->encoding = ENC_UTF8) && FALSE) ||
|
(( fd->encoding = ENC_UTF8) && FALSE) ||
|
||||||
(PL_write_term(fd, l, 1200, flags) == 0) ||
|
(PL_write_term(fd, l, 1200, flags) == 0) ||
|
||||||
Sputcode(EOS, fd) < 0 ||
|
Sputcode(EOS, fd) < 0 ||
|
||||||
Sflush(fd) < 0 ) /* failure */
|
Sflush(fd) < 0 ) /* failure */
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
|
||||||
{CACHE_REGS
|
|
||||||
__android_log_print(ANDROID_LOG_ERROR, __FUNCTION__, "fd %p, %x buf=%s\n", fd, LOCAL_SlotBase[28], buf);}
|
|
||||||
#endif
|
|
||||||
Sclose(fd);
|
Sclose(fd);
|
||||||
if (!fd)
|
if (!fd)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -960,10 +953,6 @@ Yap_HandleToString(term_t l, size_t sz, size_t *length, int *encoding, int flags
|
|||||||
return NULL;
|
return NULL;
|
||||||
Sclose(fd);
|
Sclose(fd);
|
||||||
}
|
}
|
||||||
#ifdef DEBUG
|
|
||||||
{CACHE_REGS
|
|
||||||
__android_log_print(ANDROID_LOG_ERROR, __FUNCTION__, "text done %s", buf);}
|
|
||||||
#endif
|
|
||||||
Sclose(fd);
|
Sclose(fd);
|
||||||
/* success */
|
/* success */
|
||||||
return buf;
|
return buf;
|
||||||
@ -1082,7 +1071,7 @@ PL_dispatch(int fd, int wait)
|
|||||||
X_API int _PL_get_arg__LD(int index, term_t ts, term_t a ARG_LD)
|
X_API int _PL_get_arg__LD(int index, term_t ts, term_t a ARG_LD)
|
||||||
{
|
{
|
||||||
REGS_FROM_LD
|
REGS_FROM_LD
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
if ( !YAP_IsApplTerm(t) ) {
|
if ( !YAP_IsApplTerm(t) ) {
|
||||||
if (YAP_IsPairTerm(t)) {
|
if (YAP_IsPairTerm(t)) {
|
||||||
if (index == 1){
|
if (index == 1){
|
||||||
@ -1104,7 +1093,7 @@ X_API int _PL_get_arg__LD(int index, term_t ts, term_t a ARG_LD)
|
|||||||
int PL_get_atom__LD(term_t ts, atom_t *a ARG_LD)
|
int PL_get_atom__LD(term_t ts, atom_t *a ARG_LD)
|
||||||
{
|
{
|
||||||
REGS_FROM_LD
|
REGS_FROM_LD
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
if ( !IsAtomTerm(t))
|
if ( !IsAtomTerm(t))
|
||||||
return 0;
|
return 0;
|
||||||
*a = YAP_SWIAtomFromAtom(AtomOfTerm(t));
|
*a = YAP_SWIAtomFromAtom(AtomOfTerm(t));
|
||||||
@ -1121,42 +1110,42 @@ X_API int PL_put_atom__LD(term_t t, atom_t a ARG_LD)
|
|||||||
int PL_put_term__LD(term_t d, term_t s ARG_LD)
|
int PL_put_term__LD(term_t d, term_t s ARG_LD)
|
||||||
{
|
{
|
||||||
REGS_FROM_LD
|
REGS_FROM_LD
|
||||||
Yap_PutInSlot(d,Yap_GetFromSlot(s PASS_REGS) PASS_REGS);
|
Yap_PutInSlot(d,Yap_GetFromSlot(s) PASS_REGS);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
term_t PL_new_term_ref__LD(ARG1_LD)
|
term_t PL_new_term_ref__LD(ARG1_LD)
|
||||||
{
|
{
|
||||||
REGS_FROM_LD
|
REGS_FROM_LD
|
||||||
term_t to = Yap_NewSlots(1 PASS_REGS);
|
term_t to = Yap_NewSlots(1);
|
||||||
return to;
|
return to;
|
||||||
}
|
}
|
||||||
|
|
||||||
int PL_is_atom__LD(term_t ts ARG_LD)
|
int PL_is_atom__LD(term_t ts ARG_LD)
|
||||||
{
|
{
|
||||||
REGS_FROM_LD
|
REGS_FROM_LD
|
||||||
Term t = Yap_GetFromSlot(ts PASS_REGS);
|
Term t = Yap_GetFromSlot(ts);
|
||||||
return !IsVarTerm(t) && IsAtomTerm(t);
|
return !IsVarTerm(t) && IsAtomTerm(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
int PL_is_variable__LD(term_t ts ARG_LD)
|
int PL_is_variable__LD(term_t ts ARG_LD)
|
||||||
{
|
{
|
||||||
REGS_FROM_LD
|
REGS_FROM_LD
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
return IsVarTerm(t);
|
return IsVarTerm(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_unify__LD(term_t t1, term_t t2 ARG_LD)
|
X_API int PL_unify__LD(term_t t1, term_t t2 ARG_LD)
|
||||||
{
|
{
|
||||||
REGS_FROM_LD
|
REGS_FROM_LD
|
||||||
return Yap_unify(Yap_GetFromSlot(t1 PASS_REGS),Yap_GetFromSlot(t2 PASS_REGS));
|
return Yap_unify(Yap_GetFromSlot(t1),Yap_GetFromSlot(t2));
|
||||||
}
|
}
|
||||||
|
|
||||||
int PL_unify_atom__LD(term_t t, atom_t at ARG_LD)
|
int PL_unify_atom__LD(term_t t, atom_t at ARG_LD)
|
||||||
{
|
{
|
||||||
REGS_FROM_LD
|
REGS_FROM_LD
|
||||||
YAP_Term cterm = MkAtomTerm(YAP_AtomFromSWIAtom(at));
|
YAP_Term cterm = MkAtomTerm(YAP_AtomFromSWIAtom(at));
|
||||||
return YAP_Unify(Yap_GetFromSlot(t PASS_REGS),cterm);
|
return YAP_Unify(Yap_GetFromSlot(t),cterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SWI: int PL_unify_integer(term_t ?t, long n)
|
/* SWI: int PL_unify_integer(term_t ?t, long n)
|
||||||
@ -1165,7 +1154,7 @@ int PL_unify_integer__LD(term_t t, intptr_t i ARG_LD)
|
|||||||
{
|
{
|
||||||
REGS_FROM_LD
|
REGS_FROM_LD
|
||||||
Term iterm = MkIntegerTerm(i);
|
Term iterm = MkIntegerTerm(i);
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS),iterm);
|
return Yap_unify(Yap_GetFromSlot(t),iterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SWI: int PL_unify_integer(term_t ?t, long n)
|
/* SWI: int PL_unify_integer(term_t ?t, long n)
|
||||||
@ -1175,7 +1164,7 @@ X_API int PL_unify_int64__LD(term_t t, int64_t n ARG_LD)
|
|||||||
REGS_FROM_LD
|
REGS_FROM_LD
|
||||||
#if SIZEOF_INT_P==8
|
#if SIZEOF_INT_P==8
|
||||||
Term iterm = MkIntegerTerm(n);
|
Term iterm = MkIntegerTerm(n);
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS),iterm);
|
return Yap_unify(Yap_GetFromSlot(t),iterm);
|
||||||
#elif USE_GMP
|
#elif USE_GMP
|
||||||
YAP_Term iterm;
|
YAP_Term iterm;
|
||||||
char s[64];
|
char s[64];
|
||||||
@ -1190,7 +1179,7 @@ X_API int PL_unify_int64__LD(term_t t, int64_t n ARG_LD)
|
|||||||
#endif
|
#endif
|
||||||
mpz_init_set_str (&rop, s, 10);
|
mpz_init_set_str (&rop, s, 10);
|
||||||
iterm = YAP_MkBigNumTerm((void *)&rop);
|
iterm = YAP_MkBigNumTerm((void *)&rop);
|
||||||
return YAP_Unify(Yap_GetFromSlot(t PASS_REGS),iterm);
|
return YAP_Unify(Yap_GetFromSlot(t),iterm);
|
||||||
#else
|
#else
|
||||||
if ((long)n == n)
|
if ((long)n == n)
|
||||||
return PL_unify_integer(t, n);
|
return PL_unify_integer(t, n);
|
||||||
|
33
C/qlyr.c
33
C/qlyr.c
@ -77,6 +77,7 @@ Yap_AlwaysAllocCodeSpace(UInt size)
|
|||||||
static void
|
static void
|
||||||
QLYR_ERROR(qlfr_err_t my_err)
|
QLYR_ERROR(qlfr_err_t my_err)
|
||||||
{
|
{
|
||||||
|
// __android_log_print(ANDROID_LOG_INFO, "YAP ", "error %s in saved state %s",GLOBAL_RestoreFile, qlyr_error[my_err]);
|
||||||
Yap_Error(SAVED_STATE_ERROR,TermNil,"error %s in saved state %s",GLOBAL_RestoreFile, qlyr_error[my_err]);
|
Yap_Error(SAVED_STATE_ERROR,TermNil,"error %s in saved state %s",GLOBAL_RestoreFile, qlyr_error[my_err]);
|
||||||
Yap_exit(1);
|
Yap_exit(1);
|
||||||
}
|
}
|
||||||
@ -95,6 +96,7 @@ LookupAtom(Atom oat)
|
|||||||
}
|
}
|
||||||
a = a->next;
|
a = a->next;
|
||||||
}
|
}
|
||||||
|
// __android_log_print(ANDROID_LOG_INFO, "YAP ", "error %p in saved state ", oat);
|
||||||
QLYR_ERROR(UNKNOWN_ATOM);
|
QLYR_ERROR(UNKNOWN_ATOM);
|
||||||
return NIL;
|
return NIL;
|
||||||
}
|
}
|
||||||
@ -900,9 +902,9 @@ ReadHash(IOSTREAM *stream)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
read_clauses(IOSTREAM *stream, PredEntry *pp, UInt nclauses, UInt flags) {
|
read_clauses(IOSTREAM *stream, PredEntry *pp, UInt nclauses, pred_flags_t flags) {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
if (pp->PredFlags & LogUpdatePredFlag) {
|
if (flags & LogUpdatePredFlag) {
|
||||||
/* first, clean up whatever was there */
|
/* first, clean up whatever was there */
|
||||||
if (pp->cs.p_code.NOfClauses) {
|
if (pp->cs.p_code.NOfClauses) {
|
||||||
LogUpdClause *cl;
|
LogUpdClause *cl;
|
||||||
@ -934,7 +936,7 @@ read_clauses(IOSTREAM *stream, PredEntry *pp, UInt nclauses, UInt flags) {
|
|||||||
RestoreLUClause(cl, pp PASS_REGS);
|
RestoreLUClause(cl, pp PASS_REGS);
|
||||||
Yap_AssertzClause(pp, cl->ClCode);
|
Yap_AssertzClause(pp, cl->ClCode);
|
||||||
}
|
}
|
||||||
} else if (pp->PredFlags & MegaClausePredFlag) {
|
} else if (flags & MegaClausePredFlag) {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
char *base = (void *)read_UInt(stream);
|
char *base = (void *)read_UInt(stream);
|
||||||
UInt mask = read_UInt(stream);
|
UInt mask = read_UInt(stream);
|
||||||
@ -964,7 +966,7 @@ read_clauses(IOSTREAM *stream, PredEntry *pp, UInt nclauses, UInt flags) {
|
|||||||
/* This must be set for restoremegaclause */
|
/* This must be set for restoremegaclause */
|
||||||
pp->cs.p_code.NOfClauses = nclauses;
|
pp->cs.p_code.NOfClauses = nclauses;
|
||||||
RestoreMegaClause(cl PASS_REGS);
|
RestoreMegaClause(cl PASS_REGS);
|
||||||
} else if (pp->PredFlags & DynamicPredFlag) {
|
} else if (flags & DynamicPredFlag) {
|
||||||
UInt i;
|
UInt i;
|
||||||
|
|
||||||
for (i = 0; i < nclauses; i++) {
|
for (i = 0; i < nclauses; i++) {
|
||||||
@ -983,7 +985,7 @@ read_clauses(IOSTREAM *stream, PredEntry *pp, UInt nclauses, UInt flags) {
|
|||||||
UInt i;
|
UInt i;
|
||||||
|
|
||||||
|
|
||||||
if (pp->PredFlags & SYSTEM_PRED_FLAGS) {
|
if (flags & SYSTEM_PRED_FLAGS) {
|
||||||
if (nclauses) {
|
if (nclauses) {
|
||||||
QLYR_ERROR(INCONSISTENT_CPRED);
|
QLYR_ERROR(INCONSISTENT_CPRED);
|
||||||
}
|
}
|
||||||
@ -1005,8 +1007,8 @@ read_clauses(IOSTREAM *stream, PredEntry *pp, UInt nclauses, UInt flags) {
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
read_pred(IOSTREAM *stream, Term mod) {
|
read_pred(IOSTREAM *stream, Term mod) {
|
||||||
UInt flags;
|
pred_flags_t flags, fl1;
|
||||||
UInt nclauses, fl1;
|
UInt nclauses;
|
||||||
PredEntry *ap;
|
PredEntry *ap;
|
||||||
|
|
||||||
ap = LookupPredEntry((PredEntry *)read_UInt(stream));
|
ap = LookupPredEntry((PredEntry *)read_UInt(stream));
|
||||||
@ -1015,17 +1017,24 @@ read_pred(IOSTREAM *stream, Term mod) {
|
|||||||
if (ap->PredFlags & IndexedPredFlag) {
|
if (ap->PredFlags & IndexedPredFlag) {
|
||||||
Yap_RemoveIndexation(ap);
|
Yap_RemoveIndexation(ap);
|
||||||
}
|
}
|
||||||
/* if (ap->ArityOfPE && ap->ModuleOfPred != IDB_MODULE) */
|
#if 0
|
||||||
|
if (ap->ArityOfPE && ap->ModuleOfPred != IDB_MODULE)
|
||||||
|
__android_log_print(ANDROID_LOG_INFO, "YAP ", " %s/%ld %lx\n", NameOfFunctor(ap->FunctorOfPred)->StrOfAE, ap->ArityOfPE, flags);
|
||||||
/* printf(" %s/%ld %lx\n", NameOfFunctor(ap->FunctorOfPred)->StrOfAE, ap->ArityOfPE, flags); */
|
/* printf(" %s/%ld %lx\n", NameOfFunctor(ap->FunctorOfPred)->StrOfAE, ap->ArityOfPE, flags); */
|
||||||
/* else if (ap->ModuleOfPred != IDB_MODULE) */
|
else if (ap->ModuleOfPred != IDB_MODULE)
|
||||||
|
__android_log_print(ANDROID_LOG_INFO, "YAP "," %s/%ld %lx\n", ((Atom)(ap->FunctorOfPred))->StrOfAE, ap->ArityOfPE, flags);
|
||||||
/* printf(" %s/%ld %lx\n", ((Atom)(ap->FunctorOfPred))->StrOfAE, ap->ArityOfPE, flags); */
|
/* printf(" %s/%ld %lx\n", ((Atom)(ap->FunctorOfPred))->StrOfAE, ap->ArityOfPE, flags); */
|
||||||
fl1 = flags & ((UInt)STATIC_PRED_FLAGS|(UInt)EXTRA_PRED_FLAGS);
|
else
|
||||||
|
__android_log_print(ANDROID_LOG_INFO, "YAP "," number\n");
|
||||||
|
#endif
|
||||||
|
fl1 = flags & ((pred_flags_t)STATIC_PRED_FLAGS|(UInt)EXTRA_PRED_FLAGS);
|
||||||
ap->PredFlags &= ~((UInt)STATIC_PRED_FLAGS|(UInt)EXTRA_PRED_FLAGS);
|
ap->PredFlags &= ~((UInt)STATIC_PRED_FLAGS|(UInt)EXTRA_PRED_FLAGS);
|
||||||
ap->PredFlags |= fl1;
|
ap->PredFlags |= fl1;
|
||||||
if (flags & NumberDBPredFlag) {
|
if (flags & NumberDBPredFlag) {
|
||||||
ap->src.IndxId = read_UInt(stream);
|
ap->src.IndxId = read_UInt(stream);
|
||||||
} else {
|
} else {
|
||||||
ap->src.OwnerFile = (Atom)read_UInt(stream);
|
ap->src.OwnerFile = (Atom)read_UInt(stream);
|
||||||
|
|
||||||
if (ap->src.OwnerFile) {
|
if (ap->src.OwnerFile) {
|
||||||
ap->src.OwnerFile = AtomAdjust(ap->src.OwnerFile);
|
ap->src.OwnerFile = AtomAdjust(ap->src.OwnerFile);
|
||||||
}
|
}
|
||||||
@ -1035,7 +1044,9 @@ read_pred(IOSTREAM *stream, Term mod) {
|
|||||||
if (flags & MultiFileFlag && ap->ModuleOfPred == PROLOG_MODULE) {
|
if (flags & MultiFileFlag && ap->ModuleOfPred == PROLOG_MODULE) {
|
||||||
ap->ModuleOfPred = TermProlog;
|
ap->ModuleOfPred = TermProlog;
|
||||||
}
|
}
|
||||||
|
if (nclauses)
|
||||||
read_clauses(stream, ap, nclauses, flags);
|
read_clauses(stream, ap, nclauses, flags);
|
||||||
|
|
||||||
if (flags & HiddenPredFlag) {
|
if (flags & HiddenPredFlag) {
|
||||||
Yap_HidePred(ap);
|
Yap_HidePred(ap);
|
||||||
}
|
}
|
||||||
@ -1146,6 +1157,7 @@ Yap_Restore(char *s, char *lib_dir)
|
|||||||
read_module(stream);
|
read_module(stream);
|
||||||
Sclose( stream );
|
Sclose( stream );
|
||||||
GLOBAL_RestoreFile = NULL;
|
GLOBAL_RestoreFile = NULL;
|
||||||
|
CurrentModule = USER_MODULE;
|
||||||
return DO_ONLY_CODE;
|
return DO_ONLY_CODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1160,4 +1172,3 @@ void Yap_InitQLYR(void)
|
|||||||
restore_codes();
|
restore_codes();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
13
C/save.c
13
C/save.c
@ -249,19 +249,6 @@ open_file(char *my_file, int flag)
|
|||||||
char flags[6];
|
char flags[6];
|
||||||
int i=0;
|
int i=0;
|
||||||
|
|
||||||
#if __ANDROID__
|
|
||||||
if (strstr(my_file, "/assets/") == my_file) {
|
|
||||||
if (flag == O_RDONLY) {
|
|
||||||
my_file += strlen("/assets/");
|
|
||||||
AAsset* asset = AAssetManager_open(GLOBAL_assetManager, my_file, AASSET_MODE_UNKNOWN);
|
|
||||||
if (!asset)
|
|
||||||
return NULL;
|
|
||||||
AAsset_close( asset );
|
|
||||||
return NULL; // usually the file will be compressed, so there is no point in actually trying to open it.
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (flag & O_RDONLY) {
|
if (flag & O_RDONLY) {
|
||||||
flags[i++] = 'r';
|
flags[i++] = 'r';
|
||||||
}
|
}
|
||||||
|
122
C/stdpreds.c
Normal file → Executable file
122
C/stdpreds.c
Normal file → Executable file
@ -877,61 +877,69 @@ static Int
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static PropEntry *
|
||||||
|
fetchPredFromListOfProps (PropEntry *p)
|
||||||
|
{
|
||||||
|
while (p) {
|
||||||
|
if (p->KindOfPE == PEProp) {
|
||||||
|
// found our baby..
|
||||||
|
return p;
|
||||||
|
} else if (p->KindOfPE == FunctorProperty) {
|
||||||
|
// go to list of properties in functor..
|
||||||
|
PropEntry *q;
|
||||||
|
FunctorEntry *f = RepFunctorProp(p);
|
||||||
|
if ((q = fetchPredFromListOfProps( f->PropsOfFE ))) {
|
||||||
|
return q;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
p = p->NextOfPE;
|
||||||
|
}
|
||||||
|
return NIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PropEntry *
|
||||||
|
nextPredForAtom (PropEntry *p)
|
||||||
|
{
|
||||||
|
PredEntry *pe;
|
||||||
|
if (p == NIL)
|
||||||
|
return NIL;
|
||||||
|
pe = RepPredProp(p);
|
||||||
|
if (pe->ArityOfPE == 0) {
|
||||||
|
// if atom prop, search atom list
|
||||||
|
return fetchPredFromListOfProps(p->NextOfPE);
|
||||||
|
} else {
|
||||||
|
FunctorEntry *f = pe->FunctorOfPred;
|
||||||
|
// first search remainder of functor list
|
||||||
|
if ((p = fetchPredFromListOfProps(p->NextOfPE))) {
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
// if that fails, follow the functor
|
||||||
|
return fetchPredFromListOfProps( f->NextOfPE );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static Int cont_current_predicate(USES_REGS1) {
|
static Int cont_current_predicate(USES_REGS1) {
|
||||||
PredEntry *pp = NULL;
|
PredEntry *pp = NULL;
|
||||||
|
PropEntry *n;
|
||||||
UInt Arity;
|
UInt Arity;
|
||||||
Term name;
|
Term name;
|
||||||
Term t1 = Deref(ARG1), t2 = Deref(ARG2), t3;
|
Term t1 = Deref(ARG1), t2 = Deref(ARG2), t3;
|
||||||
bool is_det = false, rc;
|
bool rc;
|
||||||
Functor f;
|
Functor f;
|
||||||
|
|
||||||
if (IsNonVarTerm(t1)) {
|
if (IsNonVarTerm(t1)) {
|
||||||
|
// current_pred(A, M, P)
|
||||||
PropEntry *p = AddressOfTerm(EXTRA_CBACK_ARG(4, 1));
|
PropEntry *p = AddressOfTerm(EXTRA_CBACK_ARG(4, 1));
|
||||||
PropEntry *q = AddressOfTerm(EXTRA_CBACK_ARG(4, 2));
|
|
||||||
// restart inner loop
|
// restart inner loop
|
||||||
for (; q; q = q->NextOfPE) {
|
|
||||||
if (q->KindOfPE == PEProp) {
|
|
||||||
pp = RepPredProp(q);
|
|
||||||
q = q->NextOfPE;
|
|
||||||
if (q == NIL)
|
|
||||||
p = p->NextOfPE;
|
|
||||||
if (!p)
|
|
||||||
is_det = true;
|
|
||||||
// we are done with this loop.
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!pp && p) {
|
|
||||||
// try using outer loop
|
|
||||||
for (; p; p = p->NextOfPE) {
|
|
||||||
if (p->KindOfPE == PEProp) {
|
|
||||||
q = NULL;
|
|
||||||
pp = RepPredProp(p);
|
pp = RepPredProp(p);
|
||||||
p = p->NextOfPE;
|
n = nextPredForAtom (p);
|
||||||
if (!p)
|
if (n == NIL) {
|
||||||
is_det = true;
|
YAP_cut_up();
|
||||||
break;
|
} else {
|
||||||
} else if (p->KindOfPE == FunctorProperty) {
|
EXTRA_CBACK_ARG(4, 1) = MkAddressTerm(n);
|
||||||
// looping on p/n
|
|
||||||
for (q = RepFunctorProp(p)->PropsOfFE; q; q = q->NextOfPE) {
|
|
||||||
if (q->KindOfPE == PEProp) {
|
|
||||||
pp = RepPredProp(q);
|
|
||||||
q = q->NextOfPE;
|
|
||||||
if (!q && !p->NextOfPE)
|
|
||||||
is_det = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (pp == NULL) // nothing more
|
|
||||||
cut_fail();
|
|
||||||
if (!is_det) {
|
|
||||||
EXTRA_CBACK_ARG(4, 1) = MkAddressTerm(p);
|
|
||||||
EXTRA_CBACK_ARG(4, 2) = MkAddressTerm(q);
|
|
||||||
B->cp_h = HR;
|
B->cp_h = HR;
|
||||||
|
|
||||||
}
|
}
|
||||||
} else if (IsNonVarTerm(t2)) {
|
} else if (IsNonVarTerm(t2)) {
|
||||||
// operating within the same module.
|
// operating within the same module.
|
||||||
@ -946,7 +954,7 @@ static Int cont_current_predicate(USES_REGS1) {
|
|||||||
EXTRA_CBACK_ARG(4, 1) = MkAddressTerm(npp);
|
EXTRA_CBACK_ARG(4, 1) = MkAddressTerm(npp);
|
||||||
B->cp_h = HR;
|
B->cp_h = HR;
|
||||||
} else {
|
} else {
|
||||||
is_det = true;
|
YAP_cut_up();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
pp = AddressOfTerm(EXTRA_CBACK_ARG(4, 1));
|
pp = AddressOfTerm(EXTRA_CBACK_ARG(4, 1));
|
||||||
@ -964,10 +972,12 @@ static Int cont_current_predicate(USES_REGS1) {
|
|||||||
} // we found a new answer
|
} // we found a new answer
|
||||||
if (!pp)
|
if (!pp)
|
||||||
cut_fail();
|
cut_fail();
|
||||||
else
|
else {
|
||||||
EXTRA_CBACK_ARG(4, 1) = MkAddressTerm(pp->NextPredOfModule);
|
EXTRA_CBACK_ARG(4, 1) = MkAddressTerm(pp->NextPredOfModule);
|
||||||
B->cp_h = HR;
|
B->cp_h = HR;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (pp->ModuleOfPred != IDB_MODULE) {
|
if (pp->ModuleOfPred != IDB_MODULE) {
|
||||||
f = pp->FunctorOfPred;
|
f = pp->FunctorOfPred;
|
||||||
Arity = pp->ArityOfPE;
|
Arity = pp->ArityOfPE;
|
||||||
@ -996,14 +1006,10 @@ static Int cont_current_predicate(USES_REGS1) {
|
|||||||
t3 = name;
|
t3 = name;
|
||||||
}
|
}
|
||||||
rc = (!(pp->PredFlags & HiddenPredFlag)) &&
|
rc = (!(pp->PredFlags & HiddenPredFlag)) &&
|
||||||
Yap_unify(ARG2, ModToTerm(pp->ModuleOfPred)) && Yap_unify(ARG1, name) &&
|
Yap_unify(ARG2, ModToTerm(pp->ModuleOfPred)) &&
|
||||||
Yap_unify(ARG3, t3) && Yap_unify(ARG4, MkIntegerTerm(pp->PredFlags));
|
Yap_unify(ARG1, name) &&
|
||||||
if (is_det) {
|
Yap_unify(ARG3, t3) &&
|
||||||
if (rc)
|
Yap_unify(ARG4, MkIntegerTerm(pp->PredFlags));
|
||||||
cut_succeed();
|
|
||||||
else
|
|
||||||
cut_fail();
|
|
||||||
}
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1015,6 +1021,9 @@ static Int init_current_predicate(USES_REGS1) {
|
|||||||
PredEntry *pp = NULL;
|
PredEntry *pp = NULL;
|
||||||
ModEntry *m = NULL;
|
ModEntry *m = NULL;
|
||||||
|
|
||||||
|
t1 = Yap_StripModule(t1, &t2);
|
||||||
|
t3 = Yap_StripModule(t3, &t2);
|
||||||
|
|
||||||
// check term
|
// check term
|
||||||
if (!IsVarTerm(t3)) {
|
if (!IsVarTerm(t3)) {
|
||||||
t3 = Yap_StripModule(t3, &t2);
|
t3 = Yap_StripModule(t3, &t2);
|
||||||
@ -1076,15 +1085,10 @@ static Int init_current_predicate(USES_REGS1) {
|
|||||||
Yap_Error(TYPE_ERROR_ATOM, t1, "current_predicate/2");
|
Yap_Error(TYPE_ERROR_ATOM, t1, "current_predicate/2");
|
||||||
cut_fail();
|
cut_fail();
|
||||||
} else {
|
} else {
|
||||||
PropEntry *p = RepAtom(AtomOfTerm(t1))->PropsOfAE, *q = NIL;
|
PropEntry *p = fetchPredFromListOfProps(RepAtom(AtomOfTerm(t1))->PropsOfAE);
|
||||||
while (p && p->KindOfPE == FunctorProperty &&
|
|
||||||
(q = RepFunctorProp(p)->PropsOfFE) == NIL) {
|
|
||||||
p = p->NextOfPE;
|
|
||||||
}
|
|
||||||
if (!p)
|
if (!p)
|
||||||
cut_fail();
|
cut_fail();
|
||||||
EXTRA_CBACK_ARG(4, 1) = MkAddressTerm(p);
|
EXTRA_CBACK_ARG(4, 1) = MkAddressTerm(p);
|
||||||
EXTRA_CBACK_ARG(4, 2) = MkAddressTerm(q);
|
|
||||||
B->cp_h = HR;
|
B->cp_h = HR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
335
C/sysbits.c
335
C/sysbits.c
@ -107,6 +107,7 @@ static char SccsId[] = "%W% %G%";
|
|||||||
#include <readline/readline.h>
|
#include <readline/readline.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/// File Error Handler
|
||||||
static void
|
static void
|
||||||
Yap_FileError(yap_error_number type, Term where, const char *format,...)
|
Yap_FileError(yap_error_number type, Term where, const char *format,...)
|
||||||
{
|
{
|
||||||
@ -123,6 +124,7 @@ Yap_FileError(yap_error_number type, Term where, const char *format,...)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void InitTime(int);
|
static void InitTime(int);
|
||||||
static void InitWTime(void);
|
static void InitWTime(void);
|
||||||
static Int p_sh( USES_REGS1 );
|
static Int p_sh( USES_REGS1 );
|
||||||
@ -141,24 +143,6 @@ static int chdir(char *);
|
|||||||
/* #define signal skel_signal */
|
/* #define signal skel_signal */
|
||||||
#endif /* MACYAP */
|
#endif /* MACYAP */
|
||||||
|
|
||||||
#if DEBUG
|
|
||||||
|
|
||||||
void
|
|
||||||
LOG(const char *fmt, ...);
|
|
||||||
|
|
||||||
void
|
|
||||||
LOG(const char *fmt, ...)
|
|
||||||
{
|
|
||||||
FILE * fd;
|
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
fd = fopen("c:\\cygwin\\Log.txt", "a");
|
|
||||||
va_start(ap, fmt);
|
|
||||||
vfprintf(fd, fmt, ap);
|
|
||||||
va_end(ap);
|
|
||||||
fclose( fd );
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void exit(int);
|
void exit(int);
|
||||||
|
|
||||||
@ -180,12 +164,118 @@ Yap_WinError(char *yap_error)
|
|||||||
#define is_valid_env_char(C) ( ((C) >= 'a' && (C) <= 'z') || ((C) >= 'A' && \
|
#define is_valid_env_char(C) ( ((C) >= 'a' && (C) <= 'z') || ((C) >= 'A' && \
|
||||||
(C) <= 'Z') || (C) == '_' )
|
(C) <= 'Z') || (C) == '_' )
|
||||||
|
|
||||||
|
#if __ANDROID__
|
||||||
|
|
||||||
|
AAssetManager * Yap_assetManager;
|
||||||
|
|
||||||
|
|
||||||
|
void *
|
||||||
|
Yap_openAssetFile( const char *path ) {
|
||||||
|
AAssetDir *d;
|
||||||
|
LOG("openA %s %p", path, path);
|
||||||
|
|
||||||
|
const char * p = path+8;
|
||||||
|
AAsset* asset = AAssetManager_open(Yap_assetManager, p, AASSET_MODE_UNKNOWN);
|
||||||
|
return asset;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
Yap_isAsset( const char *path )
|
||||||
|
{
|
||||||
|
return path[0] == '/'&&
|
||||||
|
path[1] == 'a'&&
|
||||||
|
path[2] == 's'&&
|
||||||
|
path[3] == 's'&&
|
||||||
|
path[4] == 'e'&&
|
||||||
|
path[5] == 't'&&
|
||||||
|
path[6] == 's'&&
|
||||||
|
(path[7] == '/' || path[7] == '\0');
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
Yap_AccessAsset( const char *name, int mode )
|
||||||
|
{
|
||||||
|
AAssetManager* mgr = Yap_assetManager;
|
||||||
|
const char *bufp=name+7;
|
||||||
|
if (bufp[0] == '/')
|
||||||
|
bufp++;
|
||||||
|
if ((mode & W_OK) == W_OK) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// check if file is a directory.
|
||||||
|
AAssetDir *assetDir = AAssetManager_openDir(mgr, bufp);
|
||||||
|
if (assetDir) {
|
||||||
|
AAssetDir_close(assetDir);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
Yap_AssetIsFile( const char *name )
|
||||||
|
{
|
||||||
|
AAssetManager* mgr = Yap_assetManager;
|
||||||
|
const char *bufp=name+7;
|
||||||
|
if (bufp[0] == '/')
|
||||||
|
bufp++;
|
||||||
|
// check if file is a directory.
|
||||||
|
AAsset *asset = AAssetManager_open(mgr, bufp, AASSET_MODE_UNKNOWN);
|
||||||
|
if (!asset)
|
||||||
|
return false;
|
||||||
|
AAsset_close(asset);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
Yap_AssetIsDir( const char *name )
|
||||||
|
{
|
||||||
|
AAssetManager* mgr = Yap_assetManager;
|
||||||
|
const char *bufp=name+7;
|
||||||
|
if (bufp[0] == '/')
|
||||||
|
bufp++;
|
||||||
|
// check if file is a directory.
|
||||||
|
AAssetDir *assetDir = AAssetManager_openDir(mgr, bufp);
|
||||||
|
if (!assetDir) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
AAssetDir_close(assetDir);
|
||||||
|
AAsset *asset = AAssetManager_open(mgr, bufp, AASSET_MODE_UNKNOWN);
|
||||||
|
if (!asset)
|
||||||
|
return true;
|
||||||
|
AAsset_close(asset);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
Yap_AssetSize( const char *name )
|
||||||
|
{
|
||||||
|
AAssetManager* mgr = Yap_assetManager;
|
||||||
|
const char *bufp=name+7;
|
||||||
|
if (bufp[0] == '/')
|
||||||
|
bufp++;
|
||||||
|
AAsset *asset = AAssetManager_open(mgr, bufp, AASSET_MODE_UNKNOWN);
|
||||||
|
if (!asset)
|
||||||
|
return -1;
|
||||||
|
off64_t len = AAsset_getLength64(asset);
|
||||||
|
AAsset_close(asset);
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// is_directory: verifies whether an expanded file name
|
/// is_directory: verifies whether an expanded file name
|
||||||
/// points at a readable directory
|
/// points at a readable directory
|
||||||
static bool
|
static bool
|
||||||
is_directory(const char *FileName)
|
is_directory(const char *FileName)
|
||||||
{
|
{
|
||||||
|
#ifdef __ANDROID__
|
||||||
|
if (Yap_isAsset(FileName)) {
|
||||||
|
return Yap_AssetIsDir(FileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __WINDOWS__
|
#ifdef __WINDOWS__
|
||||||
DWORD dwAtts = GetFileAttributes( FileName );
|
DWORD dwAtts = GetFileAttributes( FileName );
|
||||||
if (dwAtts == INVALID_FILE_ATTRIBUTES)
|
if (dwAtts == INVALID_FILE_ATTRIBUTES)
|
||||||
@ -211,7 +301,12 @@ is_directory(const char *FileName)
|
|||||||
static bool
|
static bool
|
||||||
has_access(const char *FileName, int mode)
|
has_access(const char *FileName, int mode)
|
||||||
{
|
{
|
||||||
#if HAS_ACCESS
|
#ifdef __ANDROID__
|
||||||
|
if (Yap_isAsset(FileName)) {
|
||||||
|
return Yap_AccessAsset(FileName, mode);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if HAVE_ACCESS
|
||||||
if (access( FileName, mode ) == 0)
|
if (access( FileName, mode ) == 0)
|
||||||
return true;
|
return true;
|
||||||
if (errno == EINVAL) {
|
if (errno == EINVAL) {
|
||||||
@ -269,12 +364,112 @@ IsAbsolutePath(const char *p)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define isValidEnvChar(C) ( ((C) >= 'a' && (C) <= 'z') || ((C) >= 'A' && \
|
||||||
|
(C) <= 'Z') || (C) == '_' )
|
||||||
|
|
||||||
|
// this is necessary because
|
||||||
|
// support for ~expansion at the beginning
|
||||||
|
// systems like Android do not do this.
|
||||||
|
static char *
|
||||||
|
yapExpandVars (const char *source, char *result)
|
||||||
|
{
|
||||||
|
const char *src = source;
|
||||||
|
char *res = result;
|
||||||
|
|
||||||
|
|
||||||
|
if (strlen(source) >= YAP_FILENAME_MAX) {
|
||||||
|
Yap_Error(OPERATING_SYSTEM_ERROR, TermNil, "%s in true_file-name is larger than the buffer size (%d bytes)", source, strlen(source));
|
||||||
|
}
|
||||||
|
/* step 1: eating home information */
|
||||||
|
if (source[0] == '~') {
|
||||||
|
if (dir_separator(source[1]) || source[1] == '\0')
|
||||||
|
{
|
||||||
|
char *s;
|
||||||
|
src++;
|
||||||
|
#if defined(_WIN32)
|
||||||
|
s = getenv("HOMEDRIVE");
|
||||||
|
if (s != NULL)
|
||||||
|
strncpy (result, getenv ("HOMEDRIVE"), YAP_FILENAME_MAX);
|
||||||
|
s = getenv("HOMEPATH");
|
||||||
|
if (s != NULL)
|
||||||
|
strncpy (result, s, YAP_FILENAME_MAX);
|
||||||
|
#else
|
||||||
|
s = getenv ("HOME");
|
||||||
|
if (s != NULL)
|
||||||
|
strncpy (result, s, YAP_FILENAME_MAX);
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
#if HAVE_GETPWNAM
|
||||||
|
struct passwd *user_passwd;
|
||||||
|
|
||||||
|
src++;
|
||||||
|
while (!dir_separator((*res = *src)) && *res != '\0')
|
||||||
|
res++, src++;
|
||||||
|
res[0] = '\0';
|
||||||
|
if ((user_passwd = getpwnam (result)) == NULL) {
|
||||||
|
Yap_FileError(OPERATING_SYSTEM_ERROR, MkAtomTerm(Yap_LookupAtom(source)),"User %s does not exist in %s", result, source);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
strncpy (result, user_passwd->pw_dir, YAP_FILENAME_MAX);
|
||||||
|
#else
|
||||||
|
Yap_FileError(OPERATING_SYSTEM_ERROR, MkAtomTerm(Yap_LookupAtom(source)),"User %s cannot be found in %s, missing getpwnam", result, source);
|
||||||
|
return NULL;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
strncat (result, src, YAP_FILENAME_MAX);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#if !HAVE_WORDEXP
|
||||||
|
// do VARIABLE expansion
|
||||||
|
else if (source[0] == '$') {
|
||||||
|
/* follow SICStus expansion rules */
|
||||||
|
int ch;
|
||||||
|
char *s;
|
||||||
|
src = source+1;
|
||||||
|
if (src[0] == '{') {
|
||||||
|
src++;
|
||||||
|
while ((*res++ = (ch = *src++)) && isValidEnvChar (ch) && ch != '}') {
|
||||||
|
res++;
|
||||||
|
}
|
||||||
|
if (ch == '}') {
|
||||||
|
// {...}
|
||||||
|
// done
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
while ((*res++ = (ch = *src++)) && isValidEnvChar (ch) && ch != '}') {
|
||||||
|
res++;
|
||||||
|
}
|
||||||
|
src--;
|
||||||
|
}
|
||||||
|
res[0] = '\0';
|
||||||
|
if ((s = (char *) getenv (result))) {
|
||||||
|
strncpy (result, s, YAP_FILENAME_MAX);
|
||||||
|
} else {
|
||||||
|
result[0] = '\0';
|
||||||
|
}
|
||||||
|
strncat (result, src, YAP_FILENAME_MAX);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
else {
|
||||||
|
strncpy (result, source, YAP_FILENAME_MAX);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
char *
|
char *
|
||||||
expandVars(const char *pattern, char *expanded, int maxlen)
|
expandVars(const char *pattern, char *expanded, int maxlen)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
char tmp[YAP_FILENAME_MAX+1];
|
||||||
|
if ((pattern = yapExpandVars(pattern, tmp)) == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
#if __WIN32 || __MINGW32__
|
#if __WIN32 || __MINGW32__
|
||||||
DWORD retval=0;
|
DWORD retval=0;
|
||||||
// notice that the file does not need to exist1
|
// notice that the file does not need to exist1
|
||||||
|
if (ini == NULL) {
|
||||||
|
ini = malloc(strlen(w)+1);
|
||||||
|
}
|
||||||
retval = ExpandEnvironmentStrings(pattern,
|
retval = ExpandEnvironmentStrings(pattern,
|
||||||
expanded,
|
expanded,
|
||||||
maxlen);
|
maxlen);
|
||||||
@ -286,7 +481,7 @@ expandVars(const char *pattern, char *expanded, int maxlen)
|
|||||||
}
|
}
|
||||||
return expanded;
|
return expanded;
|
||||||
#elif HAVE_WORDEXP
|
#elif HAVE_WORDEXP
|
||||||
wordexp_t result;
|
wordexp_t result;
|
||||||
|
|
||||||
/* Expand the string for the program to run. */
|
/* Expand the string for the program to run. */
|
||||||
switch (wordexp (pattern, &result, 0))
|
switch (wordexp (pattern, &result, 0))
|
||||||
@ -297,6 +492,9 @@ wordexp_t result;
|
|||||||
return NULL;
|
return NULL;
|
||||||
} else {
|
} else {
|
||||||
char *w = result.we_wordv[0];
|
char *w = result.we_wordv[0];
|
||||||
|
if (expanded == NULL) {
|
||||||
|
expanded = malloc(strlen(w)+1);
|
||||||
|
}
|
||||||
strncpy( expanded, w, maxlen );
|
strncpy( expanded, w, maxlen );
|
||||||
wordfree (&result);
|
wordfree (&result);
|
||||||
return expanded;
|
return expanded;
|
||||||
@ -309,8 +507,15 @@ wordexp_t result;
|
|||||||
default: /* Some other error. */
|
default: /* Some other error. */
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
// just use basic
|
||||||
|
if (expanded == NULL) {
|
||||||
|
expanded = malloc(strlen(pattern)+1);
|
||||||
|
}
|
||||||
|
strcpy(expanded, pattern);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
return NULL;
|
return expanded;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if _WIN32 || defined(__MINGW32__)
|
#if _WIN32 || defined(__MINGW32__)
|
||||||
@ -378,15 +583,17 @@ PrologPath(const char *p, char *buf, size_t len)
|
|||||||
|
|
||||||
char *
|
char *
|
||||||
OsPath(const char *p, char *buf)
|
OsPath(const char *p, char *buf)
|
||||||
{ strcpy(buf, p);
|
{
|
||||||
|
if()z
|
||||||
|
trcpy(buf, p);
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
char *
|
char *
|
||||||
OsPath(const char *X, char *Y) {
|
OsPath(const char *X, char *Y) {
|
||||||
if (X!=Y && Y) strcpy(Y,X);
|
//if (X!=Y && Y) strcpy(Y,X);
|
||||||
return Y;
|
return (char *)X ;
|
||||||
}
|
}
|
||||||
#endif /* O_XOS */
|
#endif /* O_XOS */
|
||||||
|
|
||||||
@ -400,6 +607,29 @@ bool ChDir(const char *path) {
|
|||||||
bool rc = false;
|
bool rc = false;
|
||||||
char *qpath = AbsoluteFile(path, NULL);
|
char *qpath = AbsoluteFile(path, NULL);
|
||||||
|
|
||||||
|
#ifdef __ANDROID__
|
||||||
|
if (GLOBAL_AssetsWD) {
|
||||||
|
free( GLOBAL_AssetsWD );
|
||||||
|
GLOBAL_AssetsWD = NULL;
|
||||||
|
}
|
||||||
|
if (Yap_isAsset(qpath) ) {
|
||||||
|
AAssetManager* mgr = Yap_assetManager;
|
||||||
|
const char *ptr = qpath+8;
|
||||||
|
AAssetDir* d;
|
||||||
|
if (ptr[0] == '/')
|
||||||
|
ptr++;
|
||||||
|
d = AAssetManager_openDir(mgr, ptr);
|
||||||
|
if (d) {
|
||||||
|
GLOBAL_AssetsWD = malloc( strlen(qpath) + 1 );
|
||||||
|
strcpy( GLOBAL_AssetsWD, qpath );
|
||||||
|
AAssetDir_close( d );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
GLOBAL_AssetsWD = NULL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#if _WIN32 || defined(__MINGW32__)
|
#if _WIN32 || defined(__MINGW32__)
|
||||||
GET_LD
|
GET_LD
|
||||||
if ((rc = (SetCurrentDirectory(qpath) != 0)) == 0)
|
if ((rc = (SetCurrentDirectory(qpath) != 0)) == 0)
|
||||||
@ -488,16 +718,14 @@ char *
|
|||||||
{
|
{
|
||||||
GET_LD
|
GET_LD
|
||||||
char *rc;
|
char *rc;
|
||||||
char *qpath0;
|
#if HAVE_WORDEXP
|
||||||
|
char o[YAP_FILENAME_MAX+1];
|
||||||
#if _WIN32 || defined(__MINGW32__)
|
#elif _WIN32 || defined(__MINGW32__)
|
||||||
char *o = malloc(YAP_FILENAME_MAX+1);
|
char u[YAP_FILENAME_MAX+1];
|
||||||
if (!o)
|
|
||||||
return NULL;
|
|
||||||
// first pass, remove Unix style stuff
|
// first pass, remove Unix style stuff
|
||||||
if (unix2win(spec, o, YAP_FILENAME_MAX) == NULL)
|
if (unix2win(spec, u, YAP_FILENAME_MAX) == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
spec = (const char *)o;
|
spec = (const char *)u;
|
||||||
#endif
|
#endif
|
||||||
if (tmp == NULL) {
|
if (tmp == NULL) {
|
||||||
tmp = malloc(YAP_FILENAME_MAX+1);
|
tmp = malloc(YAP_FILENAME_MAX+1);
|
||||||
@ -507,24 +735,13 @@ char *
|
|||||||
}
|
}
|
||||||
if ( truePrologFlag(PLFLAG_FILEVARS) )
|
if ( truePrologFlag(PLFLAG_FILEVARS) )
|
||||||
{
|
{
|
||||||
qpath0 = malloc(YAP_FILENAME_MAX+1);
|
|
||||||
#if HAVE_WORDEXP
|
#if HAVE_WORDEXP
|
||||||
qpath0=expandVars(spec,qpath0,YAP_FILENAME_MAX);
|
spec=expandVars(spec,o,YAP_FILENAME_MAX);
|
||||||
#endif
|
#endif
|
||||||
#if _WIN32 || defined(__MINGW32__)
|
|
||||||
free((char *)spec);
|
|
||||||
#endif
|
|
||||||
spec = qpath0;
|
|
||||||
}
|
}
|
||||||
#if HAVE_REALPATH
|
#if HAVE_REALPATH
|
||||||
rc = myrealpath(spec, tmp);
|
rc = myrealpath(spec, tmp);
|
||||||
#endif
|
#endif
|
||||||
if (spec == qpath0
|
|
||||||
#if _WIN32 || defined(__MINGW32__)
|
|
||||||
|| true
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
free((char *)spec);
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2103,10 +2320,10 @@ Yap_volume_header(char *file)
|
|||||||
|
|
||||||
char * PL_cwd(char *cwd, size_t cwdlen)
|
char * PL_cwd(char *cwd, size_t cwdlen)
|
||||||
{
|
{
|
||||||
return Yap_getcwd( cwd, cwdlen );
|
return (char *)Yap_getcwd( (const char *)cwd, cwdlen );
|
||||||
}
|
}
|
||||||
|
|
||||||
char * Yap_getcwd(const char *cwd, size_t cwdlen)
|
const char * Yap_getcwd(const char *cwd, size_t cwdlen)
|
||||||
{
|
{
|
||||||
#if _WIN32 || defined(__MINGW32__)
|
#if _WIN32 || defined(__MINGW32__)
|
||||||
if (GetCurrentDirectory(cwdlen, (char *)cwd) == 0)
|
if (GetCurrentDirectory(cwdlen, (char *)cwd) == 0)
|
||||||
@ -2116,7 +2333,13 @@ Yap_volume_header(char *file)
|
|||||||
}
|
}
|
||||||
return (char *)cwd;
|
return (char *)cwd;
|
||||||
#else
|
#else
|
||||||
return getcwd(cwd, cwdlen);
|
#if __ANDROID__
|
||||||
|
if (GLOBAL_AssetsWD) {
|
||||||
|
return strncpy( (char *)cwd, (const char *)GLOBAL_AssetsWD, cwdlen);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
return getcwd((char *)cwd, cwdlen);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2127,6 +2350,7 @@ Yap_volume_header(char *file)
|
|||||||
char *work;
|
char *work;
|
||||||
char ares1[YAP_FILENAME_MAX+1];
|
char ares1[YAP_FILENAME_MAX+1];
|
||||||
|
|
||||||
|
|
||||||
work = expandVars( source, ares1, YAP_FILENAME_MAX);
|
work = expandVars( source, ares1, YAP_FILENAME_MAX);
|
||||||
// expand names first
|
// expand names first
|
||||||
if (root && !IsAbsolutePath( source ) ) {
|
if (root && !IsAbsolutePath( source ) ) {
|
||||||
@ -2163,8 +2387,7 @@ TrueFileName (char *isource, char *root, char *result, int in_lib, int expand_ro
|
|||||||
#if HAVE_GETENV
|
#if HAVE_GETENV
|
||||||
{
|
{
|
||||||
char *yap_env = getenv("YAPLIBDIR");
|
char *yap_env = getenv("YAPLIBDIR");
|
||||||
if (yap_env &&
|
if (yap_env && exists((work = expandWithPrefix( source, yap_env, result ))))
|
||||||
exists((work = expandWithPrefix( source, yap_env, result ))))
|
|
||||||
return true; // done
|
return true; // done
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2287,14 +2510,14 @@ p_sh ( USES_REGS1 )
|
|||||||
|
|
||||||
/** shell(+Command:text, -Status:integer) is det.
|
/** shell(+Command:text, -Status:integer) is det.
|
||||||
|
|
||||||
Run an external command and wait for its completion.
|
Run an external command and wait for its completion.
|
||||||
*/
|
*/
|
||||||
static Int
|
static Int
|
||||||
p_shell ( USES_REGS1 )
|
p_shell ( USES_REGS1 )
|
||||||
{ /* '$shell'(+SystCommand) */
|
{ /* '$shell'(+SystCommand) */
|
||||||
#if _MSC_VER || defined(__MINGW32__)
|
#if _MSC_VER || defined(__MINGW32__)
|
||||||
char *cmd;
|
char *cmd;
|
||||||
term_t A1 = Yap_InitSlot(ARG1 PASS_REGS);
|
term_t A1 = Yap_InitSlot(ARG1);
|
||||||
if ( PL_get_chars(A1, &cmd, CVT_ALL|REP_FN|CVT_EXCEPTION) )
|
if ( PL_get_chars(A1, &cmd, CVT_ALL|REP_FN|CVT_EXCEPTION) )
|
||||||
{ int rval = System(cmd);
|
{ int rval = System(cmd);
|
||||||
|
|
||||||
@ -2373,7 +2596,7 @@ p_system ( USES_REGS1 )
|
|||||||
{ /* '$system'(+SystCommand) */
|
{ /* '$system'(+SystCommand) */
|
||||||
#if _MSC_VER || defined(__MINGW32__)
|
#if _MSC_VER || defined(__MINGW32__)
|
||||||
char *cmd;
|
char *cmd;
|
||||||
term_t A1 = Yap_InitSlot(ARG1 PASS_REGS);
|
term_t A1 = Yap_InitSlot(ARG1);
|
||||||
if ( PL_get_chars(A1, &cmd, CVT_ALL|REP_FN|CVT_EXCEPTION) )
|
if ( PL_get_chars(A1, &cmd, CVT_ALL|REP_FN|CVT_EXCEPTION) )
|
||||||
{ STARTUPINFO si;
|
{ STARTUPINFO si;
|
||||||
PROCESS_INFORMATION pi;
|
PROCESS_INFORMATION pi;
|
||||||
@ -2935,11 +3158,7 @@ p_yap_paths( USES_REGS1 ) {
|
|||||||
strncat(destdir, "/" YAP_SHAREDIR, YAP_FILENAME_MAX );
|
strncat(destdir, "/" YAP_SHAREDIR, YAP_FILENAME_MAX );
|
||||||
out2 = MkAtomTerm(Yap_LookupAtom(destdir));
|
out2 = MkAtomTerm(Yap_LookupAtom(destdir));
|
||||||
} else {
|
} else {
|
||||||
#if __ANDROID__
|
|
||||||
out2 = MkAtomTerm(Yap_LookupAtom("/assets/share/Yap"));
|
|
||||||
#else
|
|
||||||
out2 = MkAtomTerm(Yap_LookupAtom(YAP_SHAREDIR));
|
out2 = MkAtomTerm(Yap_LookupAtom(YAP_SHAREDIR));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
if (env_destdir) {
|
if (env_destdir) {
|
||||||
strncat(destdir, env_destdir, YAP_FILENAME_MAX );
|
strncat(destdir, env_destdir, YAP_FILENAME_MAX );
|
||||||
@ -2973,9 +3192,7 @@ p_log_event( USES_REGS1 ) {
|
|||||||
#endif
|
#endif
|
||||||
if (IsWideAtom(at) || IsBlob(at))
|
if (IsWideAtom(at) || IsBlob(at))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
#if __ANDROID__
|
LOG( " %s ",RepAtom(at)->StrOfAE);
|
||||||
__android_log_print(ANDROID_LOG_INFO, "YAP", " %s ",RepAtom(at)->StrOfAE);
|
|
||||||
#endif
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
3
C/text.c
3
C/text.c
@ -537,7 +537,7 @@ read_Text( void *buf, seq_tv_t *inp, encoding_t *enc, int *minimal, size_t *leng
|
|||||||
CurSlot = Yap_StartSlots();
|
CurSlot = Yap_StartSlots();
|
||||||
fd = Sopenmem(&s, &sz, "w");
|
fd = Sopenmem(&s, &sz, "w");
|
||||||
fd->encoding = ENC_UTF8;
|
fd->encoding = ENC_UTF8;
|
||||||
if ( ! PL_write_term(fd, Yap_InitSlot(inp->val.t PASS_REGS), 1200, 0) ||
|
if ( ! PL_write_term(fd, Yap_InitSlot(inp->val.t), 1200, 0) ||
|
||||||
Sputcode(EOS, fd) < 0 ||
|
Sputcode(EOS, fd) < 0 ||
|
||||||
Sflush(fd) < 0 ) {
|
Sflush(fd) < 0 ) {
|
||||||
AUX_ERROR( inp->val.t, LOCAL_MAX_SIZE, s, char);
|
AUX_ERROR( inp->val.t, LOCAL_MAX_SIZE, s, char);
|
||||||
@ -1463,4 +1463,3 @@ Yap_Splice_Text( int n, size_t cuts[], seq_tv_t *inp, encoding_t encv[], seq_tv
|
|||||||
}
|
}
|
||||||
return (void *)outv;;
|
return (void *)outv;;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
14
C/tracer.c
14
C/tracer.c
@ -144,6 +144,20 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args)
|
|||||||
Int arity;
|
Int arity;
|
||||||
/* extern int gc_calls; */
|
/* extern int gc_calls; */
|
||||||
vsc_count++;
|
vsc_count++;
|
||||||
|
#if __ANDROID__
|
||||||
|
PredEntry *ap = pred;
|
||||||
|
if (pred && port == enter_pred) {
|
||||||
|
UInt flags = ap->PredFlags;
|
||||||
|
if (ap->ArityOfPE && ap->ModuleOfPred != IDB_MODULE)
|
||||||
|
__android_log_print(ANDROID_LOG_INFO, "YAP ", " %s/%ld %lx\n", NameOfFunctor(ap->FunctorOfPred)->StrOfAE, ap->ArityOfPE, flags);
|
||||||
|
/* printf(" %s/%ld %lx\n", NameOfFunctor(ap->FunctorOfPred)->StrOfAE, ap->ArityOfPE, flags); */
|
||||||
|
else if (ap->ModuleOfPred != IDB_MODULE)
|
||||||
|
__android_log_print(ANDROID_LOG_INFO, "YAP "," %s/%ld %lx\n", ((Atom)(ap->FunctorOfPred))->StrOfAE, ap->ArityOfPE, flags);
|
||||||
|
/* printf(" %s/%ld %lx\n", ((Atom)(ap->FunctorOfPred))->StrOfAE, ap->ArityOfPE, flags); */
|
||||||
|
__android_log_print(ANDROID_LOG_INFO, "YAP "," %x ", ap->src.OwnerFile);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
|
||||||
// if (!worker_id) return;
|
// if (!worker_id) return;
|
||||||
LOCK(Yap_heap_regs->low_level_trace_lock);
|
LOCK(Yap_heap_regs->low_level_trace_lock);
|
||||||
|
@ -694,8 +694,8 @@ static Term from_pointer(CELL *ptr0, struct rewind_term *rwt,
|
|||||||
if (wglb->Keep_terms) {
|
if (wglb->Keep_terms) {
|
||||||
struct rewind_term *x = rwt->parent;
|
struct rewind_term *x = rwt->parent;
|
||||||
|
|
||||||
rwt->u_sd.s.old = Yap_InitSlot(t PASS_REGS);
|
rwt->u_sd.s.old = Yap_InitSlot(t);
|
||||||
rwt->u_sd.s.ptr = Yap_InitSlot((CELL)ptr0 PASS_REGS);
|
rwt->u_sd.s.ptr = Yap_InitSlot((CELL)ptr0);
|
||||||
|
|
||||||
if (!IsAtomicTerm(t) && !IsVarTerm(t)) {
|
if (!IsAtomicTerm(t) && !IsVarTerm(t)) {
|
||||||
while (x) {
|
while (x) {
|
||||||
@ -785,7 +785,7 @@ static Term check_infinite_loop(Term t, struct rewind_term *x,
|
|||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
if (wglb->Keep_terms) {
|
if (wglb->Keep_terms) {
|
||||||
while (x) {
|
while (x) {
|
||||||
if (Yap_GetFromSlot(x->u_sd.s.old PASS_REGS) == t)
|
if (Yap_GetFromSlot(x->u_sd.s.old) == t)
|
||||||
return TermFoundVar;
|
return TermFoundVar;
|
||||||
x = x->parent;
|
x = x->parent;
|
||||||
}
|
}
|
||||||
|
@ -167,11 +167,7 @@ int
|
|||||||
YAP_parse_yap_arguments(int argc, char *argv[], YAP_init_args *iap)
|
YAP_parse_yap_arguments(int argc, char *argv[], YAP_init_args *iap)
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
#ifdef USE_SYSTEM_MALLOC
|
|
||||||
int BootMode = YAP_FULL_BOOT_FROM_PROLOG;
|
|
||||||
#else
|
|
||||||
int BootMode = YAP_BOOT_FROM_SAVED_CODE;
|
int BootMode = YAP_BOOT_FROM_SAVED_CODE;
|
||||||
#endif
|
|
||||||
unsigned long int *ssize;
|
unsigned long int *ssize;
|
||||||
|
|
||||||
iap->SavedState = NULL;
|
iap->SavedState = NULL;
|
||||||
@ -554,5 +550,6 @@ YAP_parse_yap_arguments(int argc, char *argv[], YAP_init_args *iap)
|
|||||||
}
|
}
|
||||||
GD->cmdline.appl_argc = argc;
|
GD->cmdline.appl_argc = argc;
|
||||||
GD->cmdline.appl_argv = argv;
|
GD->cmdline.appl_argv = argv;
|
||||||
|
//___androidlog_print(ANDROID_LOG_INFO, "YAP ", "boot mode %d", BootMode);
|
||||||
return BootMode;
|
return BootMode;
|
||||||
}
|
}
|
||||||
|
49
CXX/yapdb.hh
49
CXX/yapdb.hh
@ -118,14 +118,34 @@ protected:
|
|||||||
PredEntry *ap;
|
PredEntry *ap;
|
||||||
|
|
||||||
/// auxiliary routine to find a predicate in the current module.
|
/// auxiliary routine to find a predicate in the current module.
|
||||||
PredEntry *getPred( Term t, Term* &outp ) ;
|
PredEntry *getPred( Term &t, Term* &outp ) ;
|
||||||
|
|
||||||
/// String constructor for predicates
|
/// String constructor for predicates
|
||||||
///
|
///
|
||||||
/// It also communicates the array of arguments t[]
|
/// It also communicates the array of arguments t[]
|
||||||
/// and the array of variables
|
/// and the array of variables
|
||||||
/// back to yapquery
|
/// back to yapquery
|
||||||
YAPPredicate(const char *s, Term* &out, Term& vnames ) throw (int);
|
YAPPredicate(const char *s, Term &out, yhandle_t &vnames ) {
|
||||||
|
CACHE_REGS
|
||||||
|
BACKUP_MACHINE_REGS();
|
||||||
|
Term *outp;
|
||||||
|
char ns[strlen(s)+1];
|
||||||
|
memcpy(ns, s, strlen(s)+1);
|
||||||
|
LOG("iPP=%d %d %d", strlen(s), s[0], s[1]);
|
||||||
|
LOG("iPP=%s", s);
|
||||||
|
vnames = Yap_NewSlots(1);
|
||||||
|
out = Yap_StringToTerm(ns, strlen(s)+1, vnames ) ;
|
||||||
|
LOG("iP2=%s", s);
|
||||||
|
//extern char *s0;
|
||||||
|
//fprintf(stderr,"ap=%p arity=%d text=%s", ap, ap->ArityOfPE, s);
|
||||||
|
// Yap_DebugPlWrite(out);
|
||||||
|
// delete [] ns;
|
||||||
|
if (out == 0L)
|
||||||
|
throw YAPError::YAP_SYNTAX_ERROR;
|
||||||
|
ap = getPred( out, outp);
|
||||||
|
RECOVER_MACHINE_REGS();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Term constructor for predicates
|
/// Term constructor for predicates
|
||||||
///
|
///
|
||||||
@ -185,30 +205,6 @@ public:
|
|||||||
YAPPredicate(YAPAtom at, arity_t arity);
|
YAPPredicate(YAPAtom at, arity_t arity);
|
||||||
|
|
||||||
|
|
||||||
/// String constructor for predicates.
|
|
||||||
///
|
|
||||||
/// String is a Prolog term, we extract the main functor after considering the module qualifiers.
|
|
||||||
inline YAPPredicate(const char *s) throw (int) {
|
|
||||||
Term t, tp;
|
|
||||||
t = YAP_ReadBuffer(s,&tp);
|
|
||||||
if (t == 0L)
|
|
||||||
throw YAPError::YAP_SYNTAX_ERROR;
|
|
||||||
CELL * v;
|
|
||||||
ap = getPred( t, v);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// String constructor for predicates, also keeps arguments in tp[]
|
|
||||||
///
|
|
||||||
/// String is a Prolog term, we extract the main functor after considering the module qualifiers.
|
|
||||||
inline YAPPredicate(const char *s, Term* outp) throw (int) {
|
|
||||||
Term t, tp;
|
|
||||||
t = YAP_ReadBuffer(s,&tp);
|
|
||||||
if (t == 0L)
|
|
||||||
throw YAPError::YAP_SYNTAX_ERROR;
|
|
||||||
ap = getPred( t, outp );
|
|
||||||
}
|
|
||||||
|
|
||||||
/// module of a predicate
|
/// module of a predicate
|
||||||
///
|
///
|
||||||
/// notice that modules are currently treated as atoms, this should change.
|
/// notice that modules are currently treated as atoms, this should change.
|
||||||
@ -315,4 +311,3 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
222
CXX/yapi.cpp
222
CXX/yapi.cpp
@ -136,23 +136,23 @@ YAPStringTerm::YAPStringTerm(wchar_t *s, size_t len) : YAPTerm() { // build stri
|
|||||||
|
|
||||||
|
|
||||||
YAPApplTerm::YAPApplTerm(YAPFunctor f, YAPTerm ts[]) : YAPTerm() {
|
YAPApplTerm::YAPApplTerm(YAPFunctor f, YAPTerm ts[]) : YAPTerm() {
|
||||||
BACKUP_MACHINE_REGS();
|
BACKUP_H();
|
||||||
UInt arity = ArityOfFunctor(f.f);
|
UInt arity = ArityOfFunctor(f.f);
|
||||||
mk ( Yap_MkApplTerm( f.f, arity, (Term *)ts) );
|
mk ( Yap_MkApplTerm( f.f, arity, (Term *)ts) );
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_H();
|
||||||
}
|
}
|
||||||
|
|
||||||
YAPApplTerm::YAPApplTerm(YAPFunctor f) : YAPTerm() {
|
YAPApplTerm::YAPApplTerm(YAPFunctor f) : YAPTerm() {
|
||||||
BACKUP_MACHINE_REGS();
|
BACKUP_H();
|
||||||
UInt arity = ArityOfFunctor(f.f);
|
UInt arity = ArityOfFunctor(f.f);
|
||||||
mk ( Yap_MkNewApplTerm( f.f, arity) );
|
mk ( Yap_MkNewApplTerm( f.f, arity) );
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_H();
|
||||||
}
|
}
|
||||||
|
|
||||||
YAPTerm YAPApplTerm::getArg(int arg) {
|
YAPTerm YAPApplTerm::getArg(int arg) {
|
||||||
BACKUP_MACHINE_REGS();
|
BACKUP_H();
|
||||||
YAPTerm to = YAPTerm( ArgOfTerm(arg, gt() ) );
|
YAPTerm to = YAPTerm( ArgOfTerm(arg, gt() ) );
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_H();
|
||||||
return to;
|
return to;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,20 +162,20 @@ YAPFunctor YAPApplTerm::getFunctor() {
|
|||||||
|
|
||||||
YAPPairTerm::YAPPairTerm(YAPTerm th, YAPTerm tl) : YAPTerm() {
|
YAPPairTerm::YAPPairTerm(YAPTerm th, YAPTerm tl) : YAPTerm() {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
BACKUP_MACHINE_REGS();
|
BACKUP_H();
|
||||||
mk ( MkPairTerm( th.term(), tl.term() ) );
|
mk ( MkPairTerm( th.term(), tl.term() ) );
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_H();
|
||||||
}
|
}
|
||||||
|
|
||||||
YAPPairTerm::YAPPairTerm() : YAPTerm() {
|
YAPPairTerm::YAPPairTerm() : YAPTerm() {
|
||||||
BACKUP_MACHINE_REGS();
|
BACKUP_H();
|
||||||
t = Yap_MkNewPairTerm( );
|
t = Yap_MkNewPairTerm( );
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_H();
|
||||||
}
|
}
|
||||||
|
|
||||||
void YAPTerm::mk(Term t0) { CACHE_REGS t = Yap_InitSlot( t0 PASS_REGS); }
|
void YAPTerm::mk(Term t0) { CACHE_REGS t = Yap_InitSlot( t0 ); }
|
||||||
|
|
||||||
Term YAPTerm::gt() { CACHE_REGS return Yap_GetFromSlot( t PASS_REGS); }
|
Term YAPTerm::gt() { CACHE_REGS return Yap_GetFromSlot( t ); }
|
||||||
|
|
||||||
YAP_tag_t YAPTerm::tag() {
|
YAP_tag_t YAPTerm::tag() {
|
||||||
Term tt = gt( );
|
Term tt = gt( );
|
||||||
@ -296,20 +296,9 @@ const char *YAPTerm::text() {
|
|||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *YAPQuery::text() {
|
const char *YAPQuery::text() {
|
||||||
size_t sze = 4096, length;
|
|
||||||
char *os;
|
|
||||||
int enc;
|
|
||||||
|
|
||||||
{ CACHE_REGS __android_log_print(ANDROID_LOG_ERROR, __FUNCTION__, "I t=(%d) %lx", *q_g) ; }
|
return goal.text();
|
||||||
BACKUP_MACHINE_REGS();
|
|
||||||
if (!(os = Yap_HandleToString(*q_g, sze, &length, &enc, 0))) {
|
|
||||||
RECOVER_MACHINE_REGS();
|
|
||||||
return (char *)NULL;
|
|
||||||
}
|
|
||||||
{ CACHE_REGS __android_log_print(ANDROID_LOG_ERROR, __FUNCTION__, "II %s", os) ; }
|
|
||||||
RECOVER_MACHINE_REGS();
|
|
||||||
return os;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -335,7 +324,7 @@ YAPTerm::YAPTerm(intptr_t i) { CACHE_REGS Term tn = MkIntegerTerm( i ); mk( tn )
|
|||||||
YAPTerm YAPListTerm::car()
|
YAPTerm YAPListTerm::car()
|
||||||
{
|
{
|
||||||
Term to = gt();
|
Term to = gt();
|
||||||
{ CACHE_REGS __android_log_print(ANDROID_LOG_ERROR, __FUNCTION__, "to=%p", to) ; }
|
{ LOG( "to=%lx", to) ; }
|
||||||
if (IsPairTerm(to))
|
if (IsPairTerm(to))
|
||||||
return YAPTerm(HeadOfTerm(to));
|
return YAPTerm(HeadOfTerm(to));
|
||||||
else
|
else
|
||||||
@ -395,51 +384,80 @@ char *YAPAtom::getName(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void YAPQuery::initOpenQ() {
|
||||||
|
CACHE_REGS
|
||||||
|
oq = LOCAL_execution;
|
||||||
|
LOCAL_execution = this;
|
||||||
|
q_open=1;
|
||||||
|
q_state=0;
|
||||||
|
q_flags = PL_Q_PASS_EXCEPTION;
|
||||||
|
|
||||||
|
q_p = P;
|
||||||
|
q_cp = CP;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
YAPQuery::initQuery( Term *ts )
|
YAPQuery::initQuery( Term t )
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
this->oq = (YAPQuery *)LOCAL_execution;
|
BACKUP_MACHINE_REGS();
|
||||||
LOCAL_execution = (struct open_query_struct *)this;
|
size_t arity = ap->ArityOfPE;
|
||||||
this->q_open=1;
|
LOG("iQ=%d", arity);
|
||||||
this->q_state=0;
|
goal = YAPTerm( t );
|
||||||
this->q_flags = PL_Q_PASS_EXCEPTION;
|
if (arity) {
|
||||||
this->q_g = ts;
|
q_g = Yap_NewSlots( arity );
|
||||||
this->q_p = P;
|
for (size_t i=0; i < arity; i++) {
|
||||||
this->q_cp = CP;
|
Yap_PutInSlot(q_g+i, ArgOfTerm(i+1, t) PASS_REGS);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
q_g = 0;
|
||||||
|
}
|
||||||
|
initOpenQ();
|
||||||
|
RECOVER_MACHINE_REGS();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
YAPQuery::initQuery( YAPTerm t[], arity_t arity )
|
YAPQuery::initQuery( YAPTerm ts[], arity_t arity )
|
||||||
{
|
{
|
||||||
Term *ts = new Term[arity];
|
CACHE_REGS
|
||||||
for (arity_t i = 0; i < arity; i++)
|
|
||||||
ts[i] = t[i].term();
|
|
||||||
|
|
||||||
return initQuery( ts );
|
BACKUP_MACHINE_REGS();
|
||||||
|
if (arity) {
|
||||||
|
q_g = Yap_NewSlots( arity );
|
||||||
|
for (size_t i=0; i < arity; i++) {
|
||||||
|
Yap_PutInSlot(q_g+i, ts[i].term() PASS_REGS);
|
||||||
|
}
|
||||||
|
Term t = Yap_MkApplTerm(ap->FunctorOfPred, ap->ArityOfPE, Yap_AddressFromSlot(q_g));
|
||||||
|
goal = YAPTerm( t );
|
||||||
|
} else {
|
||||||
|
q_g = 0;
|
||||||
|
goal = YAPTerm( MkAtomTerm((Atom)ap->FunctorOfPred) );
|
||||||
|
}
|
||||||
|
initOpenQ();
|
||||||
|
RECOVER_MACHINE_REGS();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
YAPQuery::YAPQuery(YAPFunctor f, YAPTerm mod, YAPTerm t[]): YAPPredicate(f, mod)
|
YAPQuery::YAPQuery(YAPFunctor f, YAPTerm mod, YAPTerm ts[]): YAPPredicate(f, mod)
|
||||||
{
|
{
|
||||||
/* ignore flags for now */
|
/* ignore flags for now */
|
||||||
initQuery( t , f.arity());
|
initQuery( ts , f.arity());
|
||||||
}
|
}
|
||||||
|
|
||||||
YAPQuery::YAPQuery(YAPFunctor f, YAPTerm t[]): YAPPredicate(f)
|
YAPQuery::YAPQuery(YAPFunctor f, YAPTerm ts[]): YAPPredicate(f)
|
||||||
{
|
{
|
||||||
/* ignore flags for now */
|
/* ignore flags for now */
|
||||||
initQuery( t , f.arity());
|
initQuery( ts , f.arity());
|
||||||
}
|
}
|
||||||
|
|
||||||
YAPQuery::YAPQuery(YAPPredicate p, YAPTerm t[]): YAPPredicate(p.ap)
|
YAPQuery::YAPQuery(YAPPredicate p, YAPTerm ts[]): YAPPredicate(p.ap)
|
||||||
{
|
{
|
||||||
initQuery( t , p.ap->ArityOfPE);
|
initQuery( ts , p.ap->ArityOfPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
YAPListTerm YAPQuery::namedVars() {
|
YAPListTerm YAPQuery::namedVars() {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term o = Yap_GetFromSlot( this->vnames.t PASS_REGS );
|
Term o = Yap_GetFromSlot( vnames );
|
||||||
return YAPListTerm( o );
|
return YAPListTerm( o );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -448,24 +466,23 @@ bool YAPQuery::next()
|
|||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
|
BACKUP_MACHINE_REGS();
|
||||||
if (q_open != 1) return false;
|
if (q_open != 1) return false;
|
||||||
if (setjmp(((YAPQuery *)LOCAL_execution)->q_env))
|
if (setjmp(q_env))
|
||||||
return false;
|
return false;
|
||||||
// don't forget, on success these guys must create slots
|
// don't forget, on success these guys must create slots
|
||||||
if (q_state == 0) {
|
if (this->q_state == 0) {
|
||||||
// extern void toggle_low_level_trace(void);
|
|
||||||
//toggle_low_level_trace();
|
|
||||||
result = (bool)YAP_EnterGoal((YAP_PredEntryPtr)ap, q_g, &q_h);
|
result = (bool)YAP_EnterGoal((YAP_PredEntryPtr)ap, q_g, &q_h);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
LOCAL_AllowRestart = this->q_open;
|
LOCAL_AllowRestart = q_open;
|
||||||
result = (bool)YAP_RetryGoal(&q_h);
|
result = (bool)YAP_RetryGoal(&q_h);
|
||||||
}
|
}
|
||||||
this->q_state = 1;
|
q_state = 1;
|
||||||
if (!result) {
|
if (!result) {
|
||||||
YAP_LeaveGoal(FALSE, &q_h);
|
YAP_LeaveGoal(FALSE, &q_h);
|
||||||
this->q_open = 0;
|
q_open = 0;
|
||||||
}
|
}
|
||||||
|
RECOVER_MACHINE_REGS();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -473,26 +490,31 @@ void YAPQuery::cut()
|
|||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
|
|
||||||
if (this->q_open != 1 || this->q_state == 0) return;
|
BACKUP_MACHINE_REGS();
|
||||||
YAP_LeaveGoal(FALSE, &this->q_h);
|
if (q_open != 1 || q_state == 0) return;
|
||||||
this->q_open = 0;
|
YAP_LeaveGoal(FALSE, &q_h);
|
||||||
LOCAL_execution = (struct open_query_struct *)this->oq;
|
q_open = 0;
|
||||||
|
LOCAL_execution = this;
|
||||||
|
RECOVER_MACHINE_REGS();
|
||||||
}
|
}
|
||||||
|
|
||||||
void YAPQuery::close()
|
void YAPQuery::close()
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
|
|
||||||
if (EX && !(this->q_flags & (PL_Q_CATCH_EXCEPTION))) {
|
RECOVER_MACHINE_REGS();
|
||||||
|
if (EX && !(q_flags & (PL_Q_CATCH_EXCEPTION))) {
|
||||||
EX = (struct DB_TERM *)NULL;
|
EX = (struct DB_TERM *)NULL;
|
||||||
}
|
}
|
||||||
/* need to implement backtracking here */
|
/* need to implement backtracking here */
|
||||||
if (this->q_open != 1 || this->q_state == 0) {
|
if (q_open != 1 || q_state == 0) {
|
||||||
|
RECOVER_MACHINE_REGS();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
YAP_LeaveGoal(FALSE, &this->q_h);
|
YAP_LeaveGoal(FALSE, &q_h);
|
||||||
this->q_open = 0;
|
q_open = 0;
|
||||||
LOCAL_execution = (struct open_query_struct *)this->oq;
|
LOCAL_execution = this;
|
||||||
|
RECOVER_MACHINE_REGS();
|
||||||
}
|
}
|
||||||
|
|
||||||
static YAPEngine *curren;
|
static YAPEngine *curren;
|
||||||
@ -502,7 +524,16 @@ static YAPEngine *curren;
|
|||||||
#include <jni.h>
|
#include <jni.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
extern AAssetManager *assetManager;
|
JNIEnv *Yap_jenv;
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved) {
|
||||||
|
JNIEnv* env;
|
||||||
|
if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
Yap_jenv = env;
|
||||||
|
return JNI_VERSION_1_6;
|
||||||
|
}
|
||||||
|
|
||||||
extern char *Yap_AndroidBufp;
|
extern char *Yap_AndroidBufp;
|
||||||
static size_t Yap_AndroidMax, Yap_AndroidSz;
|
static size_t Yap_AndroidMax, Yap_AndroidSz;
|
||||||
@ -530,6 +561,19 @@ displayWithJava(int c)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" void Java_pt_up_fc_dcc_yap_JavaYap_load(JNIEnv *env0, jobject obj, jobject mgr);
|
||||||
|
|
||||||
|
extern "C" void Java_pt_up_fc_dcc_yap_JavaYap_load
|
||||||
|
(JNIEnv *env0, jobject obj, jobject asset_manager)
|
||||||
|
{
|
||||||
|
AAssetManager *mgr = AAssetManager_fromJava(Yap_jenv, asset_manager);
|
||||||
|
if (mgr == NULL) {
|
||||||
|
LOG( "we're doomed, mgr = 0; bip bip bip");
|
||||||
|
} else {
|
||||||
|
Yap_assetManager = mgr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -548,8 +592,6 @@ YAPEngine::YAPEngine( char *savedState,
|
|||||||
YAPCallback *cb): _callback(0)
|
YAPCallback *cb): _callback(0)
|
||||||
{ // a single engine can be active
|
{ // a single engine can be active
|
||||||
#if __ANDROID__
|
#if __ANDROID__
|
||||||
if (GLOBAL_assetManager == (AAssetManager *)NULL)
|
|
||||||
return;
|
|
||||||
Yap_DisplayWithJava = displayWithJava;
|
Yap_DisplayWithJava = displayWithJava;
|
||||||
Yap_AndroidBufp = (char *)malloc(Yap_AndroidMax = 4096);
|
Yap_AndroidBufp = (char *)malloc(Yap_AndroidMax = 4096);
|
||||||
Yap_AndroidBufp[0] = '\0';
|
Yap_AndroidBufp[0] = '\0';
|
||||||
@ -573,22 +615,6 @@ YAPEngine::YAPEngine( char *savedState,
|
|||||||
YAP_Init( &init_args );
|
YAP_Init( &init_args );
|
||||||
}
|
}
|
||||||
|
|
||||||
YAPQuery *YAPEngine::query( char *s ) {
|
|
||||||
YAPQuery *n = new YAPQuery( s );
|
|
||||||
return n;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
YAPPredicate::YAPPredicate(const char *s, Term* &outp, Term &vnames) throw (int) {
|
|
||||||
CACHE_REGS
|
|
||||||
yhandle_t sl = Yap_NewSlots(1 PASS_REGS);
|
|
||||||
Term t = Yap_StringToTerm(s, strlen(s)+1, sl );
|
|
||||||
if (t == 0L)
|
|
||||||
throw YAPError::YAP_SYNTAX_ERROR;
|
|
||||||
vnames = Yap_GetFromSlot( sl PASS_REGS );
|
|
||||||
ap = getPred( t, outp );
|
|
||||||
}
|
|
||||||
|
|
||||||
YAPPredicate::YAPPredicate(YAPAtom at) {
|
YAPPredicate::YAPPredicate(YAPAtom at) {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
@ -606,25 +632,24 @@ YAPPredicate::YAPPredicate(YAPAtom at, arity_t arity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// auxiliary routine to find a predicate in the current module.
|
/// auxiliary routine to find a predicate in the current module.
|
||||||
PredEntry *YAPPredicate::getPred( Term t, Term* &outp ) {
|
PredEntry *YAPPredicate::getPred( Term &t, Term* &outp ) {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term m = CurrentModule ;
|
Term m = CurrentModule ;
|
||||||
{ CACHE_REGS __android_log_print(ANDROID_LOG_ERROR, __FUNCTION__, "H= %p, outp=%p", HR, outp) ; }
|
t = Yap_StripModule(t, &m);
|
||||||
t = Yap_StripModule(t, &m);
|
|
||||||
if (IsVarTerm(t) || IsNumTerm(t)) {
|
if (IsVarTerm(t) || IsNumTerm(t)) {
|
||||||
ap = (PredEntry *)NULL;
|
ap = (PredEntry *)NULL;
|
||||||
outp = (Term *)NULL;
|
outp = (Term *)NULL;
|
||||||
|
return ap;
|
||||||
}
|
}
|
||||||
if (IsAtomTerm(t)) {
|
if (IsAtomTerm(t)) {
|
||||||
ap = RepPredProp(PredPropByAtom(AtomOfTerm(t), m));
|
ap = RepPredProp(PredPropByAtom(AtomOfTerm(t), m));
|
||||||
if (outp) outp = (Term *)NULL;
|
outp = (Term *)NULL;
|
||||||
|
return ap;
|
||||||
} else if (IsPairTerm(t)) {
|
} else if (IsPairTerm(t)) {
|
||||||
ap = RepPredProp(PredPropByFunc(FunctorCsult, PROLOG_MODULE));
|
Term ts[1];
|
||||||
outp = HR;
|
ts[0] = t;
|
||||||
HR[0] = RepPair(t)[0];
|
t = Yap_MkApplTerm(FunctorCsult, 1, ts);
|
||||||
HR[1] = m;
|
}
|
||||||
HR+=2;
|
|
||||||
} else {
|
|
||||||
Functor f = FunctorOfTerm(t);
|
Functor f = FunctorOfTerm(t);
|
||||||
if (IsExtensionFunctor(f)) {
|
if (IsExtensionFunctor(f)) {
|
||||||
ap = (PredEntry *)NULL;
|
ap = (PredEntry *)NULL;
|
||||||
@ -633,8 +658,6 @@ t = Yap_StripModule(t, &m);
|
|||||||
ap = RepPredProp(PredPropByFunc(f, m));
|
ap = RepPredProp(PredPropByFunc(f, m));
|
||||||
outp = RepAppl(t)+1;
|
outp = RepAppl(t)+1;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
{ CACHE_REGS __android_log_print(ANDROID_LOG_ERROR, __FUNCTION__, "done H= %p, outp=%p", HR, outp) ; }
|
|
||||||
return ap;
|
return ap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -711,15 +734,20 @@ YAPPrologPredicate::YAPPrologPredicate(YAPAtom name,
|
|||||||
void *YAPPrologPredicate::assertClause( YAPTerm clause, bool last, YAPTerm source) {
|
void *YAPPrologPredicate::assertClause( YAPTerm clause, bool last, YAPTerm source) {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
|
|
||||||
|
RECOVER_MACHINE_REGS();
|
||||||
Term tt = clause.gt();
|
Term tt = clause.gt();
|
||||||
Term sourcet = source.gt();
|
Term sourcet = source.gt();
|
||||||
yamop *codeaddr = Yap_cclause(tt, PP->ArityOfPE, CurrentModule, sourcet); /* vsc: give the number of arguments
|
yamop *codeaddr = Yap_cclause(tt, PP->ArityOfPE, CurrentModule, sourcet); /* vsc: give the number of arguments
|
||||||
to cclause in case there is overflow */
|
to cclause in case there is overflow */
|
||||||
Term ntt = clause.gt();
|
Term ntt = clause.gt();
|
||||||
if (LOCAL_ErrorMessage)
|
if (LOCAL_ErrorMessage) {
|
||||||
|
RECOVER_MACHINE_REGS();
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
Term *tref = &ntt;
|
Term *tref = &ntt;
|
||||||
if (Yap_addclause(ntt, codeaddr, (last ? 0 : 2), CurrentModule, tref))
|
if (Yap_addclause(ntt, codeaddr, (last ? 0 : 2), CurrentModule, tref)) {
|
||||||
|
RECOVER_MACHINE_REGS();
|
||||||
|
}
|
||||||
return tref;
|
return tref;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,6 @@ extern "C" {
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// taken from yap_structs.h
|
// taken from yap_structs.h
|
||||||
#include "iopreds.h"
|
#include "iopreds.h"
|
||||||
|
|
||||||
|
43
CXX/yapq.hh
43
CXX/yapq.hh
@ -5,25 +5,22 @@
|
|||||||
Queries and engines
|
Queries and engines
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
static const char *s0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Queries
|
* @brief Queries
|
||||||
*
|
*
|
||||||
* interface to a YAP Query;
|
* interface to a YAP Query;
|
||||||
* uses an SWI-like status info internally.
|
* uses an SWI-like status info internally.
|
||||||
*/
|
*/
|
||||||
class YAPQuery: public YAPPredicate {
|
class YAPQuery: public YAPPredicate, open_query_struct {
|
||||||
int q_open;
|
yhandle_t vnames;
|
||||||
int q_state;
|
YAPTerm goal;
|
||||||
Term *q_g;
|
Term t;
|
||||||
yamop *q_p, *q_cp;
|
|
||||||
jmp_buf q_env;
|
void initOpenQ();
|
||||||
int q_flags;
|
void initQuery( Term t );
|
||||||
Term vs;
|
void initQuery( YAPTerm ts[], arity_t arity );
|
||||||
YAP_dogoalinfo q_h;
|
|
||||||
YAPQuery *oq;
|
|
||||||
YAPTerm vnames;
|
|
||||||
void initQuery( Term ts[] );
|
|
||||||
void initQuery( YAPTerm t[], arity_t arity );
|
|
||||||
public:
|
public:
|
||||||
/// main constructor, uses a predicate and an array of terms
|
/// main constructor, uses a predicate and an array of terms
|
||||||
///
|
///
|
||||||
@ -43,12 +40,11 @@ public:
|
|||||||
/// string constructor without varnames
|
/// string constructor without varnames
|
||||||
///
|
///
|
||||||
/// It is given a string, calls the parser and obtains a Prolog term that should be a callable
|
/// It is given a string, calls the parser and obtains a Prolog term that should be a callable
|
||||||
/// goal. It does not ask for a list of variables.
|
/// goal.
|
||||||
inline YAPQuery(const char *s): YAPPredicate(s, q_g, vs)
|
inline YAPQuery(const char *s): YAPPredicate(s, t, vnames)
|
||||||
{
|
{
|
||||||
vnames = YAPTerm( vs );
|
initQuery( t );
|
||||||
initQuery( q_g );
|
};
|
||||||
}
|
|
||||||
|
|
||||||
/// set flags for query execution, currently only for exception handling
|
/// set flags for query execution, currently only for exception handling
|
||||||
void setFlag(int flag) {q_flags |= flag; }
|
void setFlag(int flag) {q_flags |= flag; }
|
||||||
@ -62,7 +58,7 @@ public:
|
|||||||
/// same call for every solution
|
/// same call for every solution
|
||||||
bool next();
|
bool next();
|
||||||
/// represent the top-goal
|
/// represent the top-goal
|
||||||
char *text();
|
const char *text();
|
||||||
/// remove alternatives in the current search space, and finish the current query
|
/// remove alternatives in the current search space, and finish the current query
|
||||||
void cut();
|
void cut();
|
||||||
/// finish the current query: undo all bindings.
|
/// finish the current query: undo all bindings.
|
||||||
@ -77,8 +73,8 @@ public:
|
|||||||
/// class that actually implements the callback.
|
/// class that actually implements the callback.
|
||||||
class YAPCallback {
|
class YAPCallback {
|
||||||
public:
|
public:
|
||||||
virtual ~YAPCallback() { printf("~YAPCallback\n"); }
|
virtual ~YAPCallback() { }
|
||||||
virtual void run() { __android_log_print(ANDROID_LOG_INFO, __FUNCTION__, "callback"); }
|
virtual void run() { LOG("callback"); }
|
||||||
virtual void run(char *s) { }
|
virtual void run(char *s) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -119,7 +115,10 @@ public:
|
|||||||
/// execute the callback with a text argument.
|
/// execute the callback with a text argument.
|
||||||
YAPError hasError( ) { return yerror; }
|
YAPError hasError( ) { return yerror; }
|
||||||
/// build a query on the engine
|
/// build a query on the engine
|
||||||
YAPQuery *query( char *s );
|
YAPQuery *query( const char *s ) {
|
||||||
|
s0=s;
|
||||||
|
return new YAPQuery( s );
|
||||||
|
};
|
||||||
/// current module for the engine
|
/// current module for the engine
|
||||||
YAPModule currentModule( ) { return YAPModule( ) ; }
|
YAPModule currentModule( ) { return YAPModule( ) ; }
|
||||||
};
|
};
|
||||||
|
35
CXX/yapt.hh
35
CXX/yapt.hh
@ -18,7 +18,7 @@ protected:
|
|||||||
void mk(Term t0); /// internal method to convert from term to handle
|
void mk(Term t0); /// internal method to convert from term to handle
|
||||||
Term gt(); /// get handle and obtain term
|
Term gt(); /// get handle and obtain term
|
||||||
public:
|
public:
|
||||||
~YAPTerm() {};
|
virtual ~YAPTerm() {};
|
||||||
YAPTerm(Term tn) { mk( tn ); } /// private method to convert from Term (internal YAP representation) to YAPTerm
|
YAPTerm(Term tn) { mk( tn ); } /// private method to convert from Term (internal YAP representation) to YAPTerm
|
||||||
// do nothing constructor
|
// do nothing constructor
|
||||||
YAPTerm() { mk(TermNil); }
|
YAPTerm() { mk(TermNil); }
|
||||||
@ -32,7 +32,7 @@ public:
|
|||||||
YAP_tag_t tag();
|
YAP_tag_t tag();
|
||||||
/// copy the term ( term copy )
|
/// copy the term ( term copy )
|
||||||
YAPTerm deepCopy();
|
YAPTerm deepCopy();
|
||||||
inline Term term() { return gt(); } /// private method to convert from YAPTerm to Term (internal YAP representation)
|
inline Term term() { return gt(); } /// from YAPTerm to Term (internal YAP representation)
|
||||||
//const YAPTerm *vars();
|
//const YAPTerm *vars();
|
||||||
/// this term is == to t1
|
/// this term is == to t1
|
||||||
bool exactlyEqual(YAPTerm t1);
|
bool exactlyEqual(YAPTerm t1);
|
||||||
@ -67,7 +67,7 @@ public:
|
|||||||
tf = YAPTerm((Term)0);
|
tf = YAPTerm((Term)0);
|
||||||
}
|
}
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
//{ CACHE_REGS __android_log_print(ANDROID_LOG_ERROR, __FUNCTION__, "after getArg H= %p, i=%d", HR, tf.gt()) ; }
|
REGS_LOG( "after getArg H= %p, i=%d", HR, tf.gt()) ;
|
||||||
return tf;
|
return tf;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* @brief Variable Term
|
* @brief Variable Term
|
||||||
*/
|
*/
|
||||||
class YAPVarTerm: private YAPTerm {
|
class YAPVarTerm: public YAPTerm {
|
||||||
YAPVarTerm(Term t) { if (IsVarTerm(t)) mk( t ); }
|
YAPVarTerm(Term t) { if (IsVarTerm(t)) mk( t ); }
|
||||||
public:
|
public:
|
||||||
/// constructor
|
/// constructor
|
||||||
@ -103,7 +103,7 @@ public:
|
|||||||
* @brief Atom Term
|
* @brief Atom Term
|
||||||
* Term Representation of an Atom
|
* Term Representation of an Atom
|
||||||
*/
|
*/
|
||||||
class YAPAtomTerm: YAPTerm {
|
class YAPAtomTerm: public YAPTerm {
|
||||||
friend class YAPModule;
|
friend class YAPModule;
|
||||||
// Constructor: receives a C-atom;
|
// Constructor: receives a C-atom;
|
||||||
YAPAtomTerm(Atom a) { mk( MkAtomTerm(a) ); }
|
YAPAtomTerm(Atom a) { mk( MkAtomTerm(a) ); }
|
||||||
@ -140,7 +140,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* @brief Compound Term
|
* @brief Compound Term
|
||||||
*/
|
*/
|
||||||
class YAPApplTerm: YAPTerm {
|
class YAPApplTerm: public YAPTerm {
|
||||||
friend class YAPTerm;
|
friend class YAPTerm;
|
||||||
YAPApplTerm(Term t0) { mk(t0); }
|
YAPApplTerm(Term t0) { mk(t0); }
|
||||||
public:
|
public:
|
||||||
@ -164,7 +164,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* @brief List Constructor Term
|
* @brief List Constructor Term
|
||||||
*/
|
*/
|
||||||
class YAPPairTerm: YAPTerm {
|
class YAPPairTerm: public YAPTerm {
|
||||||
friend class YAPTerm;
|
friend class YAPTerm;
|
||||||
YAPPairTerm(Term t0) { if (IsPairTerm(t0)) mk( t0 ); else mk(0); }
|
YAPPairTerm(Term t0) { if (IsPairTerm(t0)) mk( t0 ); else mk(0); }
|
||||||
public:
|
public:
|
||||||
@ -174,15 +174,24 @@ public:
|
|||||||
YAPTerm getTail() { return YAPTerm(TailOfTerm( gt() )); }
|
YAPTerm getTail() { return YAPTerm(TailOfTerm( gt() )); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Number Term
|
||||||
|
*/
|
||||||
|
|
||||||
|
class YAPNumberTerm: public YAPTerm {
|
||||||
|
public:
|
||||||
|
YAPNumberTerm() {};
|
||||||
|
bool isTagged() { return IsIntTerm( gt() ); }
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Integer Term
|
* @brief Integer Term
|
||||||
*/
|
*/
|
||||||
|
|
||||||
class YAPIntegerTerm: YAPTerm {
|
class YAPIntegerTerm: public YAPNumberTerm {
|
||||||
public:
|
public:
|
||||||
YAPIntegerTerm(intptr_t i);
|
YAPIntegerTerm(intptr_t i);
|
||||||
intptr_t getInteger() { return IntegerOfTerm( gt() ); }
|
intptr_t getInteger() { return IntegerOfTerm( gt() ); }
|
||||||
bool isTagged() { return IsIntTerm( gt() ); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class YAPListTerm: public YAPTerm {
|
class YAPListTerm: public YAPTerm {
|
||||||
@ -218,15 +227,15 @@ public:
|
|||||||
return YAPListTerm(TailOfTerm( to ));
|
return YAPListTerm(TailOfTerm( to ));
|
||||||
else if ( to == TermNil)
|
else if ( to == TermNil)
|
||||||
return YAPListTerm( );
|
return YAPListTerm( );
|
||||||
/* error */;
|
/* error */
|
||||||
|
throw YAPError::YAP_TYPE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check if the list is empty.
|
/// Check if the list is empty.
|
||||||
///
|
///
|
||||||
/// @param[in] the list
|
/// @param[in] the list
|
||||||
inline bool nil() {
|
inline bool nil() {
|
||||||
CACHE_REGS
|
{ LOG( "II %x %x", gt(), TermNil) ; }
|
||||||
{ CACHE_REGS __android_log_print(ANDROID_LOG_ERROR, __FUNCTION__, "II %x %x", gt(), TermNil) ; }
|
|
||||||
return gt() == TermNil;
|
return gt() == TermNil;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -236,7 +245,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* @brief String Term
|
* @brief String Term
|
||||||
*/
|
*/
|
||||||
class YAPStringTerm: private YAPTerm {
|
class YAPStringTerm: public YAPTerm {
|
||||||
public:
|
public:
|
||||||
/// your standard constructor
|
/// your standard constructor
|
||||||
YAPStringTerm(char *s) ;
|
YAPStringTerm(char *s) ;
|
||||||
|
@ -126,7 +126,7 @@ typedef struct PropEntryStruct
|
|||||||
|
|
||||||
typedef CELL arity_t;
|
typedef CELL arity_t;
|
||||||
|
|
||||||
#define FunctorProperty ((PropFlags)(0xbb00))
|
#define FunctorProperty ((PropFlags)(0xbb00))
|
||||||
|
|
||||||
/* functor property */
|
/* functor property */
|
||||||
typedef struct FunctorEntryStruct
|
typedef struct FunctorEntryStruct
|
||||||
|
49
H/Yap.h
49
H/Yap.h
@ -1,4 +1,4 @@
|
|||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* *
|
* *
|
||||||
* YAP Prolog %W% %G% *
|
* YAP Prolog %W% %G% *
|
||||||
* Yap Prolog was developed at NCCUP - Universidade do Porto *
|
* Yap Prolog was developed at NCCUP - Universidade do Porto *
|
||||||
@ -505,16 +505,19 @@ extern int Yap_output_msg;
|
|||||||
|
|
||||||
|
|
||||||
#if __ANDROID__
|
#if __ANDROID__
|
||||||
|
#include <jni.h>
|
||||||
#include <android/asset_manager.h>
|
#include <android/asset_manager.h>
|
||||||
#include <android/asset_manager_jni.h>
|
#include <android/asset_manager_jni.h>
|
||||||
#include <android/log.h>
|
#include <android/log.h>
|
||||||
#else
|
|
||||||
static inline char * __android_log_print(int i,const char *loc,const char *msg,...) {
|
extern AAssetManager * Yap_assetManager;
|
||||||
return NULL;
|
|
||||||
}
|
extern void *Yap_openAssetFile( const char *path ) ;
|
||||||
#define ANDROID_LOG_INFO 0
|
extern bool Yap_isAsset( const char *path );
|
||||||
#define ANDROID_LOG_ERROR 0
|
extern bool Yap_AccessAsset( const char *name , int mode);
|
||||||
#define ANDROID_LOG_DEBUG 0
|
extern bool Yap_AssetIsFile( const char *name );
|
||||||
|
extern bool Yap_AssetIsDir( const char *name );
|
||||||
|
extern int64_t Yap_AssetSize( const char *name );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -858,4 +861,34 @@ Global variables for JIT
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if DEBUGX
|
||||||
|
inline static void
|
||||||
|
LOG0(const char *f, int l, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
va_start(ap, fmt);
|
||||||
|
#if __ANDROID__
|
||||||
|
__android_log_print(ANDROID_LOG_INFO, "YAP ", fmt, ap);
|
||||||
|
#else __WINDOWS__
|
||||||
|
FILE * fd;
|
||||||
|
fd = fopen("c:\\cygwin\\Log.txt", "a");
|
||||||
|
vfprintf(fd, fmt, ap);
|
||||||
|
fclose(fd);
|
||||||
|
#endif
|
||||||
|
vfprintf(stderr, fmt, ap);
|
||||||
|
va_end(ap);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define LOG0( ... )
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __ANDROID__
|
||||||
|
#define __android_log_print( ... )
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define LOG( ... ) LOG0( __FILE__, __LINE__, __VA_ARGS__ )
|
||||||
|
|
||||||
|
#define REGS_LOG( ... ) CACHE_REGS LOG0( __FILE__, __LINE__, __VA_ARGS__ )
|
||||||
|
|
||||||
|
|
||||||
#endif /* YAP_H */
|
#endif /* YAP_H */
|
||||||
|
@ -87,9 +87,10 @@ Yap_CurrentSlot( USES_REGS1 ) {
|
|||||||
return LOCAL_CurSlot;
|
return LOCAL_CurSlot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define Yap_GetFromSlot(slot) Yap_GetFromSlot__(slot PASS_REGS)
|
||||||
/// @brief read from a slot.
|
/// @brief read from a slot.
|
||||||
static inline Term
|
static inline Term
|
||||||
Yap_GetFromSlot(yhandle_t slot USES_REGS)
|
Yap_GetFromSlot__(yhandle_t slot USES_REGS)
|
||||||
{
|
{
|
||||||
return(Deref(LOCAL_SlotBase[slot]));
|
return(Deref(LOCAL_SlotBase[slot]));
|
||||||
}
|
}
|
||||||
@ -142,9 +143,11 @@ ensure_slots(int N USES_REGS)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define Yap_InitSlot( t ) Yap_InitSlot__( t PASS_REGS )
|
||||||
|
|
||||||
/// @brief create a new slot with term t
|
/// @brief create a new slot with term t
|
||||||
static inline Int
|
static inline yhandle_t
|
||||||
Yap_InitSlot(Term t USES_REGS)
|
Yap_InitSlot__(Term t USES_REGS)
|
||||||
{
|
{
|
||||||
yhandle_t old_slots = LOCAL_CurSlot;
|
yhandle_t old_slots = LOCAL_CurSlot;
|
||||||
|
|
||||||
@ -154,9 +157,11 @@ Yap_InitSlot(Term t USES_REGS)
|
|||||||
return old_slots;
|
return old_slots;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define Yap_NewSlots( n ) Yap_NewSlots__( n PASS_REGS )
|
||||||
|
|
||||||
/// @brief allocate n empty new slots
|
/// @brief allocate n empty new slots
|
||||||
static inline yhandle_t
|
static inline yhandle_t
|
||||||
Yap_NewSlots(int n USES_REGS)
|
Yap_NewSlots__(int n USES_REGS)
|
||||||
{
|
{
|
||||||
yhandle_t old_slots = LOCAL_CurSlot;
|
yhandle_t old_slots = LOCAL_CurSlot;
|
||||||
int i;
|
int i;
|
||||||
|
10
H/Yapproto.h
10
H/Yapproto.h
@ -371,7 +371,13 @@ int Yap_signal_index(const char *);
|
|||||||
#ifdef MAC
|
#ifdef MAC
|
||||||
void Yap_SetTextFile(char *);
|
void Yap_SetTextFile(char *);
|
||||||
#endif
|
#endif
|
||||||
char *Yap_getcwd(const char *, size_t);
|
#if __ANDROIDD__
|
||||||
|
extern AAssetManager * Yap_assetManager;
|
||||||
|
|
||||||
|
extern void *Yap_openAssetFile( const char *path ) ;
|
||||||
|
extern bool Yap_isAsset( const char *path );
|
||||||
|
#endif
|
||||||
|
const char *Yap_getcwd(const char *, size_t);
|
||||||
void Yap_cputime_interval(Int *,Int *);
|
void Yap_cputime_interval(Int *,Int *);
|
||||||
void Yap_systime_interval(Int *,Int *);
|
void Yap_systime_interval(Int *,Int *);
|
||||||
void Yap_walltime_interval(Int *,Int *);
|
void Yap_walltime_interval(Int *,Int *);
|
||||||
@ -465,5 +471,3 @@ gc_P(yamop *p, yamop *cp)
|
|||||||
{
|
{
|
||||||
return (p->opc == Yap_opcode(_execute_cpred) ? cp : p);
|
return (p->opc == Yap_opcode(_execute_cpred) ? cp : p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -754,7 +754,7 @@ typedef enum {
|
|||||||
will not be aligned on RISC machines */
|
will not be aligned on RISC machines */
|
||||||
profile_data StatisticsForPred; /* enable profiling for predicate */
|
profile_data StatisticsForPred; /* enable profiling for predicate */
|
||||||
struct pred_entry *NextPredOfModule; /* next pred for same module */
|
struct pred_entry *NextPredOfModule; /* next pred for same module */
|
||||||
} PredEntry;
|
} PredEntry;
|
||||||
#define PEProp ((PropFlags)(0x0000))
|
#define PEProp ((PropFlags)(0x0000))
|
||||||
|
|
||||||
#if USE_OFFSETS_IN_PROPS
|
#if USE_OFFSETS_IN_PROPS
|
||||||
@ -1898,4 +1898,3 @@ AddPropToAtom(AtomEntry *ae, PropEntry *p)
|
|||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1089,8 +1089,6 @@ extern void **Yap_ABSMI_OPCODES;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if DEPTH_LIMIT
|
#if DEPTH_LIMIT
|
||||||
/*
|
/*
|
||||||
Make this into an even number so that the system will know
|
Make this into an even number so that the system will know
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* *
|
* *
|
||||||
* YAP Prolog *
|
* YAP Prolog *
|
||||||
* *
|
* *
|
||||||
@ -25,4 +25,3 @@ typedef struct array_access_struct {
|
|||||||
Term indx; /* index in array, for now
|
Term indx; /* index in array, for now
|
||||||
keep it as an integer! */
|
keep it as an integer! */
|
||||||
} array_access;
|
} array_access;
|
||||||
|
|
||||||
|
@ -301,6 +301,7 @@ LogUpdClause *Yap_FollowIndexingCode(PredEntry *,yamop *, Term *, yamop *,yamop
|
|||||||
yamop *Yap_ExoLookup(PredEntry *ap USES_REGS);
|
yamop *Yap_ExoLookup(PredEntry *ap USES_REGS);
|
||||||
CELL Yap_NextExo(choiceptr cpt, struct index_t *it);
|
CELL Yap_NextExo(choiceptr cpt, struct index_t *it);
|
||||||
|
|
||||||
|
#
|
||||||
#if USE_THREADED_CODE
|
#if USE_THREADED_CODE
|
||||||
|
|
||||||
#define OP_HASH_SIZE 2048
|
#define OP_HASH_SIZE 2048
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
#if __ANDROID__
|
#if __ANDROID__
|
||||||
|
|
||||||
#define GLOBAL_assetManager Yap_global->assetManager_
|
#define GLOBAL_assetManager Yap_global->assetManager_
|
||||||
|
#define GLOBAL_AssetsWD Yap_global->AssetsWD_
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if THREADS
|
#if THREADS
|
||||||
|
@ -38,6 +38,7 @@ typedef struct global_data {
|
|||||||
#if __ANDROID__
|
#if __ANDROID__
|
||||||
|
|
||||||
struct AAssetManager* assetManager_;
|
struct AAssetManager* assetManager_;
|
||||||
|
char* AssetsWD_;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if THREADS
|
#if THREADS
|
||||||
|
@ -37,7 +37,8 @@ static void InitGlobal(void) {
|
|||||||
GLOBAL_AGCHook = NULL;
|
GLOBAL_AGCHook = NULL;
|
||||||
#if __ANDROID__
|
#if __ANDROID__
|
||||||
|
|
||||||
GLOBAL_assetManager = GLOBAL_assetManager;
|
GLOBAL_assetManager = NULL;
|
||||||
|
GLOBAL_AssetsWD = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if THREADS
|
#if THREADS
|
||||||
|
@ -33,14 +33,14 @@ CLOSE_SEQ_STRING(Word p, Word p0, term_t tail, term_t term, term_t l) {
|
|||||||
p--;
|
p--;
|
||||||
if (tail) {
|
if (tail) {
|
||||||
RESET_VARIABLE(p);
|
RESET_VARIABLE(p);
|
||||||
if (Yap_unify(Yap_GetFromSlot(l PASS_REGS), Yap_GetFromSlot(term PASS_REGS))) {
|
if (Yap_unify(Yap_GetFromSlot(l), Yap_GetFromSlot(term))) {
|
||||||
Yap_PutInSlot(tail, (CELL)(p) PASS_REGS);
|
Yap_PutInSlot(tail, (CELL)(p) PASS_REGS);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} else {
|
} else {
|
||||||
p[0] = TermNil;
|
p[0] = TermNil;
|
||||||
return Yap_unify(Yap_GetFromSlot(l PASS_REGS), Yap_GetFromSlot(term PASS_REGS));
|
return Yap_unify(Yap_GetFromSlot(l), Yap_GetFromSlot(term ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,6 +188,7 @@ typedef struct {
|
|||||||
int optimise; /* -O: optimised compilation */
|
int optimise; /* -O: optimised compilation */
|
||||||
} cmdline;
|
} cmdline;
|
||||||
|
|
||||||
|
#if 0
|
||||||
struct
|
struct
|
||||||
{ //char * CWDdir;
|
{ //char * CWDdir;
|
||||||
//size_t CWDlen;
|
//size_t CWDlen;
|
||||||
@ -196,6 +197,7 @@ typedef struct {
|
|||||||
char * module; /* argv[0] module passed */
|
char * module; /* argv[0] module passed */
|
||||||
#endif
|
#endif
|
||||||
} paths;
|
} paths;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{ ExtensionCell _ext_head; /* head of registered extensions */
|
{ ExtensionCell _ext_head; /* head of registered extensions */
|
||||||
@ -411,4 +413,3 @@ typedef struct PL_local_data {
|
|||||||
extern PL_local_data_t lds;
|
extern PL_local_data_t lds;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -242,7 +242,7 @@ users foreign language code.
|
|||||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||||
|
|
||||||
#define NOTRACE PL_FA_NOTRACE
|
#define NOTRACE PL_FA_NOTRACE
|
||||||
#define META PL_FA_TRANSPARENT
|
#define METAP PL_FA_TRANSPARENT
|
||||||
#define NDET PL_FA_NONDETERMINISTIC
|
#define NDET PL_FA_NONDETERMINISTIC
|
||||||
#define VA PL_FA_VARARGS
|
#define VA PL_FA_VARARGS
|
||||||
#define CREF PL_FA_CREF
|
#define CREF PL_FA_CREF
|
||||||
|
@ -75,7 +75,7 @@ COMMON(word) pl_writeq(term_t term);
|
|||||||
static inline int
|
static inline int
|
||||||
get_procedure(term_t descr, predicate_t *proc, term_t he, int f) {
|
get_procedure(term_t descr, predicate_t *proc, term_t he, int f) {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t = Yap_GetFromSlot(descr PASS_REGS);
|
Term t = Yap_GetFromSlot(descr );
|
||||||
|
|
||||||
if (IsVarTerm(t)) return FALSE;
|
if (IsVarTerm(t)) return FALSE;
|
||||||
if (IsAtomTerm(t))
|
if (IsAtomTerm(t))
|
||||||
@ -143,7 +143,7 @@ atomName(Atom atom)
|
|||||||
Procedure resolveProcedure(functor_t f, Module module);
|
Procedure resolveProcedure(functor_t f, Module module);
|
||||||
|
|
||||||
#define charEscapeWriteOption(A) FALSE // VSC: to implement
|
#define charEscapeWriteOption(A) FALSE // VSC: to implement
|
||||||
#define wordToTermRef(A) Yap_InitSlot(*(A) PASS_REGS)
|
#define wordToTermRef(A) Yap_InitSlot(*(A))
|
||||||
#define isTaggedInt(A) IsIntegerTerm(A)
|
#define isTaggedInt(A) IsIntegerTerm(A)
|
||||||
#define valInt(A) IntegerOfTerm(A)
|
#define valInt(A) IntegerOfTerm(A)
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@ static void RestoreGlobal(void) {
|
|||||||
#if __ANDROID__
|
#if __ANDROID__
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if THREADS
|
#if THREADS
|
||||||
|
69
Makefile.in
69
Makefile.in
@ -18,19 +18,21 @@ YAPLIBDIR=@libdir@/Yap
|
|||||||
#
|
#
|
||||||
# where YAP should look for architecture-independent Prolog libraries
|
# where YAP should look for architecture-independent Prolog libraries
|
||||||
#
|
#
|
||||||
SHAREDIR=$(ROOTDIR)/share
|
DATAROOTDIR=@datarootdir@
|
||||||
|
#
|
||||||
|
SHAREDIR=$(DATAROOTDIR)
|
||||||
#
|
#
|
||||||
# where the includes should be stored
|
# where the includes should be stored
|
||||||
#
|
#
|
||||||
INCLUDEDIR=$(ROOTDIR)/include/Yap
|
INCLUDEDIR=@includedir@/Yap
|
||||||
#
|
#
|
||||||
# where to store info files
|
# where to store info files
|
||||||
#
|
#
|
||||||
INFODIR=$(SHAREDIR)/info
|
INFODIR=$(DATAROOTDIR)/info
|
||||||
#
|
#
|
||||||
# where to store documentation files
|
# where to store documentation files
|
||||||
#
|
#
|
||||||
DOCSDIR=$(SHAREDIR)/doc/Yap
|
DOCSDIR=$(SHAREDIR)/doc/yap
|
||||||
|
|
||||||
#
|
#
|
||||||
# Add this flag to YAP_EXTRAS if you need the extension:
|
# Add this flag to YAP_EXTRAS if you need the extension:
|
||||||
@ -413,8 +415,8 @@ JIT_OBJECTS = \
|
|||||||
@JITDEBUGPREDS@ \
|
@JITDEBUGPREDS@ \
|
||||||
@JITSTATISTICPREDS@
|
@JITSTATISTICPREDS@
|
||||||
|
|
||||||
MYDDAS_OBJECTS = \
|
MYDDAS_ALL_OBJECTS = \
|
||||||
@INCLUDE_MYDDAS@ myddas_initialization.o \
|
myddas_initialization.o \
|
||||||
myddas_mysql.o \
|
myddas_mysql.o \
|
||||||
myddas_odbc.o \
|
myddas_odbc.o \
|
||||||
myddas_postgres.o \
|
myddas_postgres.o \
|
||||||
@ -424,6 +426,8 @@ MYDDAS_OBJECTS = \
|
|||||||
myddas_util.o \
|
myddas_util.o \
|
||||||
myddas_wkb2prolog.o
|
myddas_wkb2prolog.o
|
||||||
|
|
||||||
|
MYDDAS_OBJECTS = @OBJECTS_MYDDAS@
|
||||||
|
|
||||||
LIBTAI_OBJECTS = \
|
LIBTAI_OBJECTS = \
|
||||||
tai_add.o tai_now.o tai_pack.o \
|
tai_add.o tai_now.o tai_pack.o \
|
||||||
tai_sub.o tai_unpack.o taia_add.o taia_approx.o \
|
tai_sub.o tai_unpack.o taia_add.o taia_approx.o \
|
||||||
@ -465,7 +469,15 @@ PLCONS_OBJECTS = \
|
|||||||
pl-ntmain.o \
|
pl-ntmain.o \
|
||||||
yapres.o
|
yapres.o
|
||||||
|
|
||||||
all: startup.yss @WINDOWS@ yap-win@EXEC_SUFFIX@
|
all: "$(STARTUP_ANDROID)android-setup startup.yss windowsi
|
||||||
|
|
||||||
|
xandroid-setup:
|
||||||
|
( cd packages/swig && make android/jni/Android.mk )
|
||||||
|
|
||||||
|
android-setup:
|
||||||
|
|
||||||
|
windowsi:
|
||||||
|
@WINDOWS@ yap-win@EXEC_SUFFIX@
|
||||||
|
|
||||||
Makefile: Makefile.in
|
Makefile: Makefile.in
|
||||||
|
|
||||||
@ -507,7 +519,7 @@ save.o: C/save.c
|
|||||||
%.o: BEAM/%.c config.h
|
%.o: BEAM/%.c config.h
|
||||||
$(CC) -c $(CFLAGS) $< -o $@
|
$(CC) -c $(CFLAGS) $< -o $@
|
||||||
|
|
||||||
yapi.o: CXX/yapi.cpp CXX/yapi.hh config.h
|
yapi.o: CXX/yapi.cpp CXX/yapi.hh CXX/yapq.hh CXX/yapt.hh CXX/yapdb.hh CXX/yapie.hh CXX/yapa.hh config.h
|
||||||
$(CXX) -c $(CXXFLAGS) $< -o $@
|
$(CXX) -c $(CXXFLAGS) $< -o $@
|
||||||
|
|
||||||
sys.o: library/system/sys.c config.h
|
sys.o: library/system/sys.c config.h
|
||||||
@ -640,34 +652,27 @@ libYap.a: $(LIB_OBJECTS) yapi.o
|
|||||||
done
|
done
|
||||||
|
|
||||||
@STARTUP_ANDROID@startup.yss: yap@EXEC_SUFFIX@ @DYNYAPLIB@ $(PL_SOURCES) $(SWI_LIB_SOURCES)
|
@STARTUP_ANDROID@startup.yss: yap@EXEC_SUFFIX@ @DYNYAPLIB@ $(PL_SOURCES) $(SWI_LIB_SOURCES)
|
||||||
adb shell rm -rf /data/yap
|
\rm -rf data/yap
|
||||||
adb shell mkdir -p /data/yap
|
mkdir -p data/yap/packages
|
||||||
adb shell mkdir -p /data/yap/pl
|
mkdir -p data/yap/swi
|
||||||
adb shell mkdir -p /data/yap/swi/library
|
cp -a yap data/yap
|
||||||
adb shell mkdir -p /data/yap/packages/chr
|
cp -a @DYNYAPLIB@ data/yap
|
||||||
adb shell mkdir -p /data/yap/packages/clib
|
|
||||||
adb shell mkdir -p /data/yap/packages/myddas
|
|
||||||
adb shell mkdir -p /data/yap/assets/myddas
|
|
||||||
adb shell mkdir -p /data/yap/assets/lib
|
|
||||||
adb shell mkdir -p /data/yap/assets/share
|
|
||||||
adb push yap /data/yap/
|
|
||||||
adb push @DYNYAPLIB@ /data/yap/
|
|
||||||
for p in $(EXTRAYAPLIBS); do \
|
for p in $(EXTRAYAPLIBS); do \
|
||||||
adb shell $(LN_S) /data/yap/@DYNYAPLIB@ /data/yap/$$p; \
|
(cd data/yap && $(LN_S) @DYNYAPLIB@ $$p ); \
|
||||||
done
|
done
|
||||||
adb push $(GMPDIR)/lib/libgmp.so /data/yap
|
cp -a ../../gmp-android/lib/libgmp.so data/yap
|
||||||
adb push $(SQLITE3DIR)/lib/libsqliteX.so /data/yap
|
cp -a ../../sqlite3-android/lib/libsqliteX.so data/yap
|
||||||
#adb push packages/clib/*.so /data/yap
|
cp -a $(srcdir)/pl data/yap
|
||||||
#adb push library/system/*.so /data/yap
|
cp -a $(srcdir)/library data/yap
|
||||||
adb push $(srcdir)/swi/library /data/yap/swi/library
|
cp -a $(srcdir)/swi/library data/yap/swi
|
||||||
adb push $(srcdir)/pl /data/yap/pl/
|
cp -a $(srcdir)/packages/clib data/yap/packages
|
||||||
adb push $(srcdir)/library /data/yap/library/
|
cp -a $(srcdir)/packages/chr data/yap/packages
|
||||||
adb push $(srcdir)/packages/myddas /data/yap/packages/myddas/
|
cp -a $(srcdir)/packages/myddas data/yap/packages
|
||||||
adb push $(srcdir)/packages/chr /data/yap/packages/chr/
|
\rm -rf data/yap/packages/*/.git
|
||||||
adb push $(srcdir)/packages/clib /data/yap/packages/clib/
|
adb push data/yap /data/yap >/dev/null 2>&1
|
||||||
adb shell "echo \"bootstrap('/data/yap/pl/init.yap'). module(user). qsave_program('/data/yap/startup.yss').\" | LD_LIBRARY_PATH=/data/yap /data/yap/yap@EXEC_SUFFIX@ -b /data/yap/pl/boot.yap"
|
adb shell "echo \"bootstrap('/data/yap/pl/init.yap'). module(user). qsave_program('/data/yap/startup.yss').\" | LD_LIBRARY_PATH=/data/yap /data/yap/yap@EXEC_SUFFIX@ -b /data/yap/pl/boot.yap"
|
||||||
adb pull /data/yap/startup.yss
|
adb pull /data/yap/startup.yss
|
||||||
#adb shell rm -rf /data/yap
|
|
||||||
|
|
||||||
install: @INSTALL_COMMAND@ install_startup install_common
|
install: @INSTALL_COMMAND@ install_startup install_common
|
||||||
|
|
||||||
|
37
config.h.in
37
config.h.in
@ -1,8 +1,5 @@
|
|||||||
/* config.h.in. Generated from configure.in by autoheader. */
|
/* config.h.in. Generated from configure.in by autoheader. */
|
||||||
|
|
||||||
/* Define if building universal (internal helper macro) */
|
|
||||||
#undef AC_APPLE_UNIVERSAL_BUILD
|
|
||||||
|
|
||||||
/* longs should be in addresses that are multiple of four. */
|
/* longs should be in addresses that are multiple of four. */
|
||||||
#undef ALIGN_LONGS
|
#undef ALIGN_LONGS
|
||||||
|
|
||||||
@ -331,9 +328,6 @@
|
|||||||
/* Define to 1 if you have the <gmp.h> header file. */
|
/* Define to 1 if you have the <gmp.h> header file. */
|
||||||
#undef HAVE_GMP_H
|
#undef HAVE_GMP_H
|
||||||
|
|
||||||
/* Define to 1 if you have the `gmtime' function. */
|
|
||||||
#undef HAVE_GMTIME
|
|
||||||
|
|
||||||
/* Define of h_errno is provided */
|
/* Define of h_errno is provided */
|
||||||
#undef HAVE_H_ERRNO
|
#undef HAVE_H_ERRNO
|
||||||
|
|
||||||
@ -475,9 +469,6 @@
|
|||||||
/* Define to 1 if you have the `localtime' function. */
|
/* Define to 1 if you have the `localtime' function. */
|
||||||
#undef HAVE_LOCALTIME
|
#undef HAVE_LOCALTIME
|
||||||
|
|
||||||
/* Define to 1 if the system has the type `long long'. */
|
|
||||||
#undef HAVE_LONG_LONG
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `lstat' function. */
|
/* Define to 1 if you have the `lstat' function. */
|
||||||
#undef HAVE_LSTAT
|
#undef HAVE_LSTAT
|
||||||
|
|
||||||
@ -743,12 +734,6 @@
|
|||||||
/* Define to 1 if you have the <sqlite3.h> header file. */
|
/* Define to 1 if you have the <sqlite3.h> header file. */
|
||||||
#undef HAVE_SQLITE3_H
|
#undef HAVE_SQLITE3_H
|
||||||
|
|
||||||
/* Define to 1 if the system has the type `SQLLEN'. */
|
|
||||||
#undef HAVE_SQLLEN
|
|
||||||
|
|
||||||
/* Define to 1 if the system has the type `SQLULEN'. */
|
|
||||||
#undef HAVE_SQLULEN
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sql.h> header file. */
|
/* Define to 1 if you have the <sql.h> header file. */
|
||||||
#undef HAVE_SQL_H
|
#undef HAVE_SQL_H
|
||||||
|
|
||||||
@ -884,9 +869,6 @@
|
|||||||
/* Define to 1 if you have the `time' function. */
|
/* Define to 1 if you have the `time' function. */
|
||||||
#undef HAVE_TIME
|
#undef HAVE_TIME
|
||||||
|
|
||||||
/* Define to 1 if you have the `timegm' function. */
|
|
||||||
#undef HAVE_TIMEGM
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `times' function. */
|
/* Define to 1 if you have the `times' function. */
|
||||||
#undef HAVE_TIMES
|
#undef HAVE_TIMES
|
||||||
|
|
||||||
@ -1067,9 +1049,6 @@
|
|||||||
/* The size of `short int', as computed by sizeof. */
|
/* The size of `short int', as computed by sizeof. */
|
||||||
#undef SIZEOF_SHORT_INT
|
#undef SIZEOF_SHORT_INT
|
||||||
|
|
||||||
/* The size of `SQLWCHAR', as computed by sizeof. */
|
|
||||||
#undef SIZEOF_SQLWCHAR
|
|
||||||
|
|
||||||
/* The size of `void*', as computed by sizeof. */
|
/* The size of `void*', as computed by sizeof. */
|
||||||
#undef SIZEOF_VOIDP
|
#undef SIZEOF_VOIDP
|
||||||
|
|
||||||
@ -1130,18 +1109,6 @@
|
|||||||
/* Define to name of the UUID header file. */
|
/* Define to name of the UUID header file. */
|
||||||
#undef UUID_H
|
#undef UUID_H
|
||||||
|
|
||||||
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
|
|
||||||
significant byte first (like Motorola and SPARC, unlike Intel). */
|
|
||||||
#if defined AC_APPLE_UNIVERSAL_BUILD
|
|
||||||
# if defined __BIG_ENDIAN__
|
|
||||||
# define WORDS_BIGENDIAN 1
|
|
||||||
# endif
|
|
||||||
#else
|
|
||||||
# ifndef WORDS_BIGENDIAN
|
|
||||||
# undef WORDS_BIGENDIAN
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* architecture */
|
/* architecture */
|
||||||
#undef YAP_ARCH
|
#undef YAP_ARCH
|
||||||
|
|
||||||
@ -1157,13 +1124,13 @@
|
|||||||
/* numerical version */
|
/* numerical version */
|
||||||
#undef YAP_NUMERIC_VERSION
|
#undef YAP_NUMERIC_VERSION
|
||||||
|
|
||||||
/* where to look for Prolog sources */
|
/* where YAP lives */
|
||||||
#undef YAP_PL_SRCDIR
|
#undef YAP_PL_SRCDIR
|
||||||
|
|
||||||
/* where YAP lives */
|
/* where YAP lives */
|
||||||
#undef YAP_ROOTDIR
|
#undef YAP_ROOTDIR
|
||||||
|
|
||||||
/* where to look for the Prolog library */
|
/* where YAP lives */
|
||||||
#undef YAP_SHAREDIR
|
#undef YAP_SHAREDIR
|
||||||
|
|
||||||
/* saved state file */
|
/* saved state file */
|
||||||
|
774
configure
vendored
774
configure
vendored
@ -690,16 +690,12 @@ CPLINT_LIBS
|
|||||||
CUDD_CPPFLAGS
|
CUDD_CPPFLAGS
|
||||||
CUDD_LIBS
|
CUDD_LIBS
|
||||||
PKG_BDDLIB
|
PKG_BDDLIB
|
||||||
ODBC_LIBS
|
|
||||||
ODBC_LDFLAGS
|
|
||||||
ODBC_CFLAGS
|
|
||||||
ODBC_PLTARGETS
|
|
||||||
ODBC_TARGETS
|
|
||||||
ARCHIVE_LDFLAGS
|
ARCHIVE_LDFLAGS
|
||||||
ARCHIVE_CPPFLAGS
|
ARCHIVE_CPPFLAGS
|
||||||
ARCHIVE_LIBS
|
ARCHIVE_LIBS
|
||||||
ARCHIVE_PLTARGETS
|
ARCHIVE_PLTARGETS
|
||||||
ARCHIVE_TARGETS
|
ARCHIVE_TARGETS
|
||||||
|
CLIB_CPPFLAGS
|
||||||
CLIB_LIBUUID
|
CLIB_LIBUUID
|
||||||
CLIB_CRYPTOBJ
|
CLIB_CRYPTOBJ
|
||||||
CLIB_CRYPTLIBS
|
CLIB_CRYPTLIBS
|
||||||
@ -725,7 +721,7 @@ JITFLAGS
|
|||||||
LLVM_CONFIG
|
LLVM_CONFIG
|
||||||
MYDDAS_LIBS
|
MYDDAS_LIBS
|
||||||
MYDDAS_CPPFLAGS
|
MYDDAS_CPPFLAGS
|
||||||
INCLUDE_MYDDAS
|
OBJECTS_MYDDAS
|
||||||
PKG_MYDDAS
|
PKG_MYDDAS
|
||||||
EXTRA_LIBS_FOR_SWIDLLS
|
EXTRA_LIBS_FOR_SWIDLLS
|
||||||
CLIB_PTHREADS
|
CLIB_PTHREADS
|
||||||
@ -1613,7 +1609,6 @@ Optional Packages:
|
|||||||
|
|
||||||
--without-time Exclude alarm library
|
--without-time Exclude alarm library
|
||||||
--with-libarchive=DIR libarchive package
|
--with-libarchive=DIR libarchive package
|
||||||
--with-odbc=<dir> Location of ODBC include/lib
|
|
||||||
--with-cudd=DIR use CUDD package in DIR
|
--with-cudd=DIR use CUDD package in DIR
|
||||||
--with-cplint=DIR with the cplint library using the CUDD library in DIR/lib
|
--with-cplint=DIR with the cplint library using the CUDD library in DIR/lib
|
||||||
--with-zlib=DIR zlib compression library
|
--with-zlib=DIR zlib compression library
|
||||||
@ -7259,13 +7254,6 @@ else
|
|||||||
PKG_LIBARCHIVE=""
|
PKG_LIBARCHIVE=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -e "$srcdir"/packages/odbc/Makefile.in
|
|
||||||
then
|
|
||||||
PKG_ODBC="packages/odbc"
|
|
||||||
else
|
|
||||||
PKG_ODBC=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$use_chr" = no
|
if test "$use_chr" = no
|
||||||
then
|
then
|
||||||
PKG_CHR=""
|
PKG_CHR=""
|
||||||
@ -11219,11 +11207,11 @@ else
|
|||||||
ENABLE_MYDDAS=""
|
ENABLE_MYDDAS=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
INCLUDE_MYDDAS="#"
|
OBJECTS_MYDDAS="#"
|
||||||
if test x"$ENABLE_MYDDAS" = x -a x"$STARTUP_ANDROID" = x
|
if test x"$ENABLE_MYDDAS" = x -a x"$STARTUP_ANDROID" = x
|
||||||
then
|
then
|
||||||
#in Android we have to actually include myddas in the binary
|
#in Android we have to actually include myddas in the binary
|
||||||
INCLUDE_MYDDAS=""
|
OBJECTS_MYDDAS="$(ALL_MYDDAS_OBJECTS)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
@ -12215,6 +12203,7 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLIB_TARGETS="socket.$SO cgi.$SO memfile.$SO files.$SO mime.$SO crypt.$SO time.$SO"
|
CLIB_TARGETS="socket.$SO cgi.$SO memfile.$SO files.$SO mime.$SO crypt.$SO time.$SO"
|
||||||
|
|
||||||
case "$PLARCH" in
|
case "$PLARCH" in
|
||||||
@ -12394,7 +12383,69 @@ fi
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
dl to be installed in various places.
|
||||||
|
|
||||||
|
# brew in OSX
|
||||||
|
if test -d /usr/local/opt/ossp-uuid; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I /usr/local/opt/ossp-uuid/include"
|
||||||
|
UUID_LIB_PATH="-L /usr/local/opt/ossp-uuid/lib"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# /opt
|
||||||
|
if test -d /opt/include/ossp; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I /opt/include"
|
||||||
|
UUID_LIB_PATH="-L /opt/lib"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# /usr/local
|
||||||
|
if test -d /opt/include/ossp; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I /opt/include"
|
||||||
|
UUID_LIB_PATH="-L /opt/lib"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test x"$UUID_H" = "x"; then
|
||||||
|
ac_fn_c_check_header_compile "$LINENO" "ossp/uuid.h" "ac_cv_header_ossp_uuid_h" "/*first*/
|
||||||
|
"
|
||||||
|
if test "x$ac_cv_header_ossp_uuid_h" = xyes; then :
|
||||||
|
UUID_H=ossp/uuid.h
|
||||||
|
has_uuid=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
if test x"$UUID_H" = "x" -a ! -d /usr/include/uuid; then
|
||||||
|
ac_fn_c_check_header_compile "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "/*first*/
|
||||||
|
"
|
||||||
|
if test "x$ac_cv_header_uuid_uuid_h" = xyes; then :
|
||||||
|
UUID_H=uuid/uuid.h
|
||||||
|
has_uuid=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
if test x"$UUID_H" = "x"; then
|
||||||
|
ac_fn_c_check_header_compile "$LINENO" "uuid.h" "ac_cv_header_uuid_h" "/*first*/
|
||||||
|
"
|
||||||
|
if test "x$ac_cv_header_uuid_h" = xyes; then :
|
||||||
|
UUID_H=uuid.h
|
||||||
|
has_uuid=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
if test x"$UUID_H" = "x"; then
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find uuid.h -- dropping uuid.pl" >&5
|
||||||
|
$as_echo "$as_me: WARNING: Cannot find uuid.h -- dropping uuid.pl" >&2;}
|
||||||
|
else
|
||||||
|
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define UUID_H <$UUID_H>
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
has_uuid=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test x"$has_uuid" != "x"; then
|
||||||
ac_fn_c_check_func "$LINENO" "uuid_create" "ac_cv_func_uuid_create"
|
ac_fn_c_check_func "$LINENO" "uuid_create" "ac_cv_func_uuid_create"
|
||||||
if test "x$ac_cv_func_uuid_create" = xyes; then :
|
if test "x$ac_cv_func_uuid_create" = xyes; then :
|
||||||
has_uuid=true
|
has_uuid=true
|
||||||
@ -12438,7 +12489,7 @@ fi
|
|||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_create" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_create" >&5
|
||||||
$as_echo "$ac_cv_lib_uuid_uuid_create" >&6; }
|
$as_echo "$ac_cv_lib_uuid_uuid_create" >&6; }
|
||||||
if test "x$ac_cv_lib_uuid_uuid_create" = xyes; then :
|
if test "x$ac_cv_lib_uuid_uuid_create" = xyes; then :
|
||||||
CLIB_LIBUUID=-luuid
|
CLIB_LIBUUID="$UUID_LIB_PATH -luuid"
|
||||||
has_uuid=true
|
has_uuid=true
|
||||||
|
|
||||||
fi
|
fi
|
||||||
@ -12452,45 +12503,6 @@ $as_echo "$as_me: WARNING: Cannot find libossp-uuid or libuuid -- dropping uuid
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test x"$has_uuid" != "x"; then
|
|
||||||
if test x"$UUID_H" = "x"; then
|
|
||||||
ac_fn_c_check_header_compile "$LINENO" "ossp/uuid.h" "ac_cv_header_ossp_uuid_h" "/*first*/
|
|
||||||
"
|
|
||||||
if test "x$ac_cv_header_ossp_uuid_h" = xyes; then :
|
|
||||||
UUID_H=ossp/uuid.h
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
fi
|
|
||||||
if test x"$UUID_H" = "x" -a ! -d /usr/include/uuid; then
|
|
||||||
ac_fn_c_check_header_compile "$LINENO" "uuid/uuid.h" "ac_cv_header_uuid_uuid_h" "/*first*/
|
|
||||||
"
|
|
||||||
if test "x$ac_cv_header_uuid_uuid_h" = xyes; then :
|
|
||||||
UUID_H=uuid/uuid.h
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
fi
|
|
||||||
if test x"$UUID_H" = "x"; then
|
|
||||||
ac_fn_c_check_header_compile "$LINENO" "uuid.h" "ac_cv_header_uuid_h" "/*first*/
|
|
||||||
"
|
|
||||||
if test "x$ac_cv_header_uuid_h" = xyes; then :
|
|
||||||
UUID_H=uuid.h
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
fi
|
|
||||||
if test x"$UUID_H" = "x"; then
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find uuid.h -- dropping uuid.pl" >&5
|
|
||||||
$as_echo "$as_me: WARNING: Cannot find uuid.h -- dropping uuid.pl" >&2;}
|
|
||||||
else
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
|
||||||
#define UUID_H <$UUID_H>
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
CLIB_TARGETS="$CLIB_TARGETS uuid.$SO"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
@ -12835,6 +12847,7 @@ if echo "$CLIB_PLTARGETS" | grep socket.pl 2>&1 >/dev/null; then
|
|||||||
CLIB_PLTARGETS="$CLIB_PLTARGETS streampool.pl"
|
CLIB_PLTARGETS="$CLIB_PLTARGETS streampool.pl"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
CLIB_CPPFLAGS="$CPPFLAGS"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -13024,608 +13037,6 @@ fi
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$PKG_ODBC" != ""; then
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Check whether --with-odbc was given.
|
|
||||||
if test "${with_odbc+set}" = set; then :
|
|
||||||
withval=$with_odbc; case $withval in
|
|
||||||
no|yes) echo 'Specify dir for ODBC please';
|
|
||||||
exit 1 ;;
|
|
||||||
*) ODBC_DIR=${withval}
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if test ! -z "$ODBC_DIR"; then
|
|
||||||
ODBC_CFLAGS="-I${ODBC_DIR}/include"
|
|
||||||
ODBC_LDFLAGS="-L${ODBC_DIR}/lib"
|
|
||||||
CFLAGS="-I${ODBC_DIR}/include ${CFLAGS}"
|
|
||||||
CPPFLAGS="-I${ODBC_DIR}/include ${CPPFLAGS}"
|
|
||||||
CIFLAGS="-I${ODBC_DIR}/include ${CIFLAGS}"
|
|
||||||
LDFLAGS="-L${ODBC_DIR}/lib ${LDFLAGS}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
havelib=no
|
|
||||||
case "$PLARCH" in
|
|
||||||
*-win32|*-win64)
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lodbc32" >&5
|
|
||||||
$as_echo_n "checking for main in -lodbc32... " >&6; }
|
|
||||||
if ${ac_cv_lib_odbc32_main+:} false; then :
|
|
||||||
$as_echo_n "(cached) " >&6
|
|
||||||
else
|
|
||||||
ac_check_lib_save_LIBS=$LIBS
|
|
||||||
LIBS="-lodbc32 $LIBS"
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
return main ();
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
if ac_fn_c_try_link "$LINENO"; then :
|
|
||||||
ac_cv_lib_odbc32_main=yes
|
|
||||||
else
|
|
||||||
ac_cv_lib_odbc32_main=no
|
|
||||||
fi
|
|
||||||
rm -f core conftest.err conftest.$ac_objext \
|
|
||||||
conftest$ac_exeext conftest.$ac_ext
|
|
||||||
LIBS=$ac_check_lib_save_LIBS
|
|
||||||
fi
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_odbc32_main" >&5
|
|
||||||
$as_echo "$ac_cv_lib_odbc32_main" >&6; }
|
|
||||||
if test "x$ac_cv_lib_odbc32_main" = xyes; then :
|
|
||||||
ODBC_LIBS="-lodbc32 $LIBS"
|
|
||||||
havelib=yes
|
|
||||||
fi
|
|
||||||
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
if test $havelib = no; then
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLAllocEnv in -lodbc" >&5
|
|
||||||
$as_echo_n "checking for SQLAllocEnv in -lodbc... " >&6; }
|
|
||||||
if ${ac_cv_lib_odbc_SQLAllocEnv+:} false; then :
|
|
||||||
$as_echo_n "(cached) " >&6
|
|
||||||
else
|
|
||||||
ac_check_lib_save_LIBS=$LIBS
|
|
||||||
LIBS="-lodbc $LIBS"
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
|
|
||||||
/* Override any GCC internal prototype to avoid an error.
|
|
||||||
Use char because int might match the return type of a GCC
|
|
||||||
builtin and then its argument prototype would still apply. */
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C"
|
|
||||||
#endif
|
|
||||||
char SQLAllocEnv ();
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
return SQLAllocEnv ();
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
if ac_fn_c_try_link "$LINENO"; then :
|
|
||||||
ac_cv_lib_odbc_SQLAllocEnv=yes
|
|
||||||
else
|
|
||||||
ac_cv_lib_odbc_SQLAllocEnv=no
|
|
||||||
fi
|
|
||||||
rm -f core conftest.err conftest.$ac_objext \
|
|
||||||
conftest$ac_exeext conftest.$ac_ext
|
|
||||||
LIBS=$ac_check_lib_save_LIBS
|
|
||||||
fi
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_odbc_SQLAllocEnv" >&5
|
|
||||||
$as_echo "$ac_cv_lib_odbc_SQLAllocEnv" >&6; }
|
|
||||||
if test "x$ac_cv_lib_odbc_SQLAllocEnv" = xyes; then :
|
|
||||||
ODBC_LIBS="-lodbc $LIBS"
|
|
||||||
havelib=yes
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test $havelib = no; then
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SQLAllocEnv in -liodbc" >&5
|
|
||||||
$as_echo_n "checking for SQLAllocEnv in -liodbc... " >&6; }
|
|
||||||
if ${ac_cv_lib_iodbc_SQLAllocEnv+:} false; then :
|
|
||||||
$as_echo_n "(cached) " >&6
|
|
||||||
else
|
|
||||||
ac_check_lib_save_LIBS=$LIBS
|
|
||||||
LIBS="-liodbc $LIBS"
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
|
|
||||||
/* Override any GCC internal prototype to avoid an error.
|
|
||||||
Use char because int might match the return type of a GCC
|
|
||||||
builtin and then its argument prototype would still apply. */
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C"
|
|
||||||
#endif
|
|
||||||
char SQLAllocEnv ();
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
return SQLAllocEnv ();
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
if ac_fn_c_try_link "$LINENO"; then :
|
|
||||||
ac_cv_lib_iodbc_SQLAllocEnv=yes
|
|
||||||
else
|
|
||||||
ac_cv_lib_iodbc_SQLAllocEnv=no
|
|
||||||
fi
|
|
||||||
rm -f core conftest.err conftest.$ac_objext \
|
|
||||||
conftest$ac_exeext conftest.$ac_ext
|
|
||||||
LIBS=$ac_check_lib_save_LIBS
|
|
||||||
fi
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_iodbc_SQLAllocEnv" >&5
|
|
||||||
$as_echo "$ac_cv_lib_iodbc_SQLAllocEnv" >&6; }
|
|
||||||
if test "x$ac_cv_lib_iodbc_SQLAllocEnv" = xyes; then :
|
|
||||||
ODBC_LIBS="-liodbc $LIBS"
|
|
||||||
havelib=yes
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
esac
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
|
|
||||||
$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
|
|
||||||
if ${ac_cv_c_bigendian+:} false; then :
|
|
||||||
$as_echo_n "(cached) " >&6
|
|
||||||
else
|
|
||||||
ac_cv_c_bigendian=unknown
|
|
||||||
# See if we're dealing with a universal compiler.
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
#ifndef __APPLE_CC__
|
|
||||||
not a universal capable compiler
|
|
||||||
#endif
|
|
||||||
typedef int dummy;
|
|
||||||
|
|
||||||
_ACEOF
|
|
||||||
if ac_fn_c_try_compile "$LINENO"; then :
|
|
||||||
|
|
||||||
# Check for potential -arch flags. It is not universal unless
|
|
||||||
# there are at least two -arch flags with different values.
|
|
||||||
ac_arch=
|
|
||||||
ac_prev=
|
|
||||||
for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
|
|
||||||
if test -n "$ac_prev"; then
|
|
||||||
case $ac_word in
|
|
||||||
i?86 | x86_64 | ppc | ppc64)
|
|
||||||
if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
|
|
||||||
ac_arch=$ac_word
|
|
||||||
else
|
|
||||||
ac_cv_c_bigendian=universal
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
ac_prev=
|
|
||||||
elif test "x$ac_word" = "x-arch"; then
|
|
||||||
ac_prev=arch
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
||||||
if test $ac_cv_c_bigendian = unknown; then
|
|
||||||
# See if sys/param.h defines the BYTE_ORDER macro.
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/param.h>
|
|
||||||
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
|
|
||||||
&& defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
|
|
||||||
&& LITTLE_ENDIAN)
|
|
||||||
bogus endian macros
|
|
||||||
#endif
|
|
||||||
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
if ac_fn_c_try_compile "$LINENO"; then :
|
|
||||||
# It does; now see whether it defined to BIG_ENDIAN or not.
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/param.h>
|
|
||||||
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
#if BYTE_ORDER != BIG_ENDIAN
|
|
||||||
not big endian
|
|
||||||
#endif
|
|
||||||
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
if ac_fn_c_try_compile "$LINENO"; then :
|
|
||||||
ac_cv_c_bigendian=yes
|
|
||||||
else
|
|
||||||
ac_cv_c_bigendian=no
|
|
||||||
fi
|
|
||||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
||||||
fi
|
|
||||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
||||||
fi
|
|
||||||
if test $ac_cv_c_bigendian = unknown; then
|
|
||||||
# See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
#include <limits.h>
|
|
||||||
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
|
|
||||||
bogus endian macros
|
|
||||||
#endif
|
|
||||||
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
if ac_fn_c_try_compile "$LINENO"; then :
|
|
||||||
# It does; now see whether it defined to _BIG_ENDIAN or not.
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
#include <limits.h>
|
|
||||||
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
#ifndef _BIG_ENDIAN
|
|
||||||
not big endian
|
|
||||||
#endif
|
|
||||||
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
if ac_fn_c_try_compile "$LINENO"; then :
|
|
||||||
ac_cv_c_bigendian=yes
|
|
||||||
else
|
|
||||||
ac_cv_c_bigendian=no
|
|
||||||
fi
|
|
||||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
||||||
fi
|
|
||||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
||||||
fi
|
|
||||||
if test $ac_cv_c_bigendian = unknown; then
|
|
||||||
# Compile a test program.
|
|
||||||
if test "$cross_compiling" = yes; then :
|
|
||||||
# Try to guess by grepping values from an object file.
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
short int ascii_mm[] =
|
|
||||||
{ 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
|
|
||||||
short int ascii_ii[] =
|
|
||||||
{ 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
|
|
||||||
int use_ascii (int i) {
|
|
||||||
return ascii_mm[i] + ascii_ii[i];
|
|
||||||
}
|
|
||||||
short int ebcdic_ii[] =
|
|
||||||
{ 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
|
|
||||||
short int ebcdic_mm[] =
|
|
||||||
{ 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
|
|
||||||
int use_ebcdic (int i) {
|
|
||||||
return ebcdic_mm[i] + ebcdic_ii[i];
|
|
||||||
}
|
|
||||||
extern int foo;
|
|
||||||
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
return use_ascii (foo) == use_ebcdic (foo);
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
if ac_fn_c_try_compile "$LINENO"; then :
|
|
||||||
if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
|
|
||||||
ac_cv_c_bigendian=yes
|
|
||||||
fi
|
|
||||||
if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
|
|
||||||
if test "$ac_cv_c_bigendian" = unknown; then
|
|
||||||
ac_cv_c_bigendian=no
|
|
||||||
else
|
|
||||||
# finding both strings is unlikely to happen, but who knows?
|
|
||||||
ac_cv_c_bigendian=unknown
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
||||||
else
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
$ac_includes_default
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
|
|
||||||
/* Are we little or big endian? From Harbison&Steele. */
|
|
||||||
union
|
|
||||||
{
|
|
||||||
long int l;
|
|
||||||
char c[sizeof (long int)];
|
|
||||||
} u;
|
|
||||||
u.l = 1;
|
|
||||||
return u.c[sizeof (long int) - 1] == 1;
|
|
||||||
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
if ac_fn_c_try_run "$LINENO"; then :
|
|
||||||
ac_cv_c_bigendian=no
|
|
||||||
else
|
|
||||||
ac_cv_c_bigendian=yes
|
|
||||||
fi
|
|
||||||
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
|
|
||||||
conftest.$ac_objext conftest.beam conftest.$ac_ext
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
|
|
||||||
$as_echo "$ac_cv_c_bigendian" >&6; }
|
|
||||||
case $ac_cv_c_bigendian in #(
|
|
||||||
yes)
|
|
||||||
$as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
|
|
||||||
;; #(
|
|
||||||
no)
|
|
||||||
;; #(
|
|
||||||
universal)
|
|
||||||
|
|
||||||
$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
|
|
||||||
|
|
||||||
;; #(
|
|
||||||
*)
|
|
||||||
as_fn_error $? "unknown endianness
|
|
||||||
presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
|
||||||
for ac_header in malloc.h time.h
|
|
||||||
do :
|
|
||||||
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
|
||||||
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
|
|
||||||
if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
|
||||||
#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
for ac_header in sql.h
|
|
||||||
do :
|
|
||||||
ac_fn_c_check_header_compile "$LINENO" "sql.h" "ac_cv_header_sql_h" "
|
|
||||||
#ifdef __WINDOWS__
|
|
||||||
#include <windef.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
"
|
|
||||||
if test "x$ac_cv_header_sql_h" = xyes; then :
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
|
||||||
#define HAVE_SQL_H 1
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
for ac_func in localtime mktime gmtime timegm
|
|
||||||
do :
|
|
||||||
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
|
|
||||||
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
|
|
||||||
if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
|
||||||
#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
ac_fn_c_check_type "$LINENO" "long long" "ac_cv_type_long_long" "$ac_includes_default"
|
|
||||||
if test "x$ac_cv_type_long_long" = xyes; then :
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
|
||||||
#define HAVE_LONG_LONG 1
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
# The cast to long int works around a bug in the HP C Compiler
|
|
||||||
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
|
|
||||||
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
|
|
||||||
# This bug is HP SR number 8606223364.
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5
|
|
||||||
$as_echo_n "checking size of long... " >&6; }
|
|
||||||
if ${ac_cv_sizeof_long+:} false; then :
|
|
||||||
$as_echo_n "(cached) " >&6
|
|
||||||
else
|
|
||||||
if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then :
|
|
||||||
|
|
||||||
else
|
|
||||||
if test "$ac_cv_type_long" = yes; then
|
|
||||||
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
|
|
||||||
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
|
|
||||||
as_fn_error 77 "cannot compute sizeof (long)
|
|
||||||
See \`config.log' for more details" "$LINENO" 5; }
|
|
||||||
else
|
|
||||||
ac_cv_sizeof_long=0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5
|
|
||||||
$as_echo "$ac_cv_sizeof_long" >&6; }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
|
||||||
#define SIZEOF_LONG $ac_cv_sizeof_long
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
|
|
||||||
# The cast to long int works around a bug in the HP C Compiler
|
|
||||||
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
|
|
||||||
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
|
|
||||||
# This bug is HP SR number 8606223364.
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of SQLWCHAR" >&5
|
|
||||||
$as_echo_n "checking size of SQLWCHAR... " >&6; }
|
|
||||||
if ${ac_cv_sizeof_SQLWCHAR+:} false; then :
|
|
||||||
$as_echo_n "(cached) " >&6
|
|
||||||
else
|
|
||||||
if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (SQLWCHAR))" "ac_cv_sizeof_SQLWCHAR" "
|
|
||||||
#ifdef __WINDOWS__
|
|
||||||
#include <windef.h>
|
|
||||||
#endif
|
|
||||||
#include <sql.h>
|
|
||||||
|
|
||||||
"; then :
|
|
||||||
|
|
||||||
else
|
|
||||||
if test "$ac_cv_type_SQLWCHAR" = yes; then
|
|
||||||
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
|
|
||||||
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
|
|
||||||
as_fn_error 77 "cannot compute sizeof (SQLWCHAR)
|
|
||||||
See \`config.log' for more details" "$LINENO" 5; }
|
|
||||||
else
|
|
||||||
ac_cv_sizeof_SQLWCHAR=0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_SQLWCHAR" >&5
|
|
||||||
$as_echo "$ac_cv_sizeof_SQLWCHAR" >&6; }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
|
||||||
#define SIZEOF_SQLWCHAR $ac_cv_sizeof_SQLWCHAR
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
|
|
||||||
# The cast to long int works around a bug in the HP C Compiler
|
|
||||||
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
|
|
||||||
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
|
|
||||||
# This bug is HP SR number 8606223364.
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of wchar_t" >&5
|
|
||||||
$as_echo_n "checking size of wchar_t... " >&6; }
|
|
||||||
if ${ac_cv_sizeof_wchar_t+:} false; then :
|
|
||||||
$as_echo_n "(cached) " >&6
|
|
||||||
else
|
|
||||||
if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (wchar_t))" "ac_cv_sizeof_wchar_t" "$ac_includes_default"; then :
|
|
||||||
|
|
||||||
else
|
|
||||||
if test "$ac_cv_type_wchar_t" = yes; then
|
|
||||||
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
|
|
||||||
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
|
|
||||||
as_fn_error 77 "cannot compute sizeof (wchar_t)
|
|
||||||
See \`config.log' for more details" "$LINENO" 5; }
|
|
||||||
else
|
|
||||||
ac_cv_sizeof_wchar_t=0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_wchar_t" >&5
|
|
||||||
$as_echo "$ac_cv_sizeof_wchar_t" >&6; }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
|
||||||
#define SIZEOF_WCHAR_T $ac_cv_sizeof_wchar_t
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
|
|
||||||
ac_fn_c_check_type "$LINENO" "SQLLEN" "ac_cv_type_SQLLEN" "
|
|
||||||
#ifdef __WINDOWS__
|
|
||||||
#include <windef.h>
|
|
||||||
#endif
|
|
||||||
#include <sql.h>
|
|
||||||
|
|
||||||
"
|
|
||||||
if test "x$ac_cv_type_SQLLEN" = xyes; then :
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
|
||||||
#define HAVE_SQLLEN 1
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
|
|
||||||
fi
|
|
||||||
ac_fn_c_check_type "$LINENO" "SQLULEN" "ac_cv_type_SQLULEN" "
|
|
||||||
#ifdef __WINDOWS__
|
|
||||||
#include <windef.h>
|
|
||||||
#endif
|
|
||||||
#include <sql.h>
|
|
||||||
|
|
||||||
"
|
|
||||||
if test "x$ac_cv_type_SQLULEN" = xyes; then :
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
|
||||||
#define HAVE_SQLULEN 1
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if test "$havelib" = yes &&
|
|
||||||
test "$ac_cv_header_sql_h" = yes; then
|
|
||||||
ODBC_TARGETS="odbc4pl.$SO"
|
|
||||||
else
|
|
||||||
echo "ERROR: Cannot find odbc library or the header sql.h"
|
|
||||||
echo "WARNING: ODBC interface will not be built"
|
|
||||||
ODBC_TARGETS=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
ODBC_PLTARGETS=`echo $ODBC_TARGETS | sed "s/4pl\.$SO/.pl/g"`
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if test "$ODBC_TARGETS" = "nolib"
|
|
||||||
then
|
|
||||||
PKG_ODBC=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
|
||||||
ODBC_TARGETS=nolib
|
|
||||||
ODBC_PLTARGETS=odbc.pl
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Check whether --with-cudd was given.
|
# Check whether --with-cudd was given.
|
||||||
@ -14731,7 +14142,7 @@ else
|
|||||||
JAVA_TEST=Test.java
|
JAVA_TEST=Test.java
|
||||||
CLASS_TEST=Test.class
|
CLASS_TEST=Test.class
|
||||||
cat << \EOF > $JAVA_TEST
|
cat << \EOF > $JAVA_TEST
|
||||||
/* #line 14734 "configure" */
|
/* #line 14145 "configure" */
|
||||||
public class Test {
|
public class Test {
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
@ -14907,7 +14318,7 @@ EOF
|
|||||||
if uudecode$EXEEXT Test.uue; then
|
if uudecode$EXEEXT Test.uue; then
|
||||||
ac_cv_prog_uudecode_base64=yes
|
ac_cv_prog_uudecode_base64=yes
|
||||||
else
|
else
|
||||||
echo "configure: 14910: uudecode had trouble decoding base 64 file 'Test.uue'" >&5
|
echo "configure: 14321: uudecode had trouble decoding base 64 file 'Test.uue'" >&5
|
||||||
echo "configure: failed file was:" >&5
|
echo "configure: failed file was:" >&5
|
||||||
cat Test.uue >&5
|
cat Test.uue >&5
|
||||||
ac_cv_prog_uudecode_base64=no
|
ac_cv_prog_uudecode_base64=no
|
||||||
@ -15038,7 +14449,7 @@ else
|
|||||||
JAVA_TEST=Test.java
|
JAVA_TEST=Test.java
|
||||||
CLASS_TEST=Test.class
|
CLASS_TEST=Test.class
|
||||||
cat << \EOF > $JAVA_TEST
|
cat << \EOF > $JAVA_TEST
|
||||||
/* #line 15041 "configure" */
|
/* #line 14452 "configure" */
|
||||||
public class Test {
|
public class Test {
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
@ -15073,7 +14484,7 @@ JAVA_TEST=Test.java
|
|||||||
CLASS_TEST=Test.class
|
CLASS_TEST=Test.class
|
||||||
TEST=Test
|
TEST=Test
|
||||||
cat << \EOF > $JAVA_TEST
|
cat << \EOF > $JAVA_TEST
|
||||||
/* [#]line 15076 "configure" */
|
/* [#]line 14487 "configure" */
|
||||||
public class Test {
|
public class Test {
|
||||||
public static void main (String args[]) {
|
public static void main (String args[]) {
|
||||||
System.exit (0);
|
System.exit (0);
|
||||||
@ -16054,7 +15465,6 @@ LTLIBOBJS=$ac_ltlibobjs
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
: "${CONFIG_STATUS=./config.status}"
|
: "${CONFIG_STATUS=./config.status}"
|
||||||
ac_write_fail=0
|
ac_write_fail=0
|
||||||
ac_clean_files_save=$ac_clean_files
|
ac_clean_files_save=$ac_clean_files
|
||||||
@ -17741,10 +17151,11 @@ fi
|
|||||||
|
|
||||||
if test "$PKG_SWIG" != ""; then
|
if test "$PKG_SWIG" != ""; then
|
||||||
|
|
||||||
|
mkdir -p packages/swig/android
|
||||||
|
mkdir -p packages/swig/android/usr
|
||||||
mkdir -p packages/swig/python
|
mkdir -p packages/swig/python
|
||||||
mkdir -p packages/swig/R
|
mkdir -p packages/swig/R
|
||||||
mkdir -p packages/swig/java
|
mkdir -p packages/swig/java
|
||||||
mkdir -p packages/swig/fli
|
|
||||||
mkdir -p packages/swig/jni
|
mkdir -p packages/swig/jni
|
||||||
|
|
||||||
|
|
||||||
@ -18208,6 +17619,10 @@ yap_timestamp=`date`
|
|||||||
yap_nversion=`expr $YAP_MAJOR_VERSION \* 10000 + $YAP_MINOR_VERSION \* 100 + $YAP_POINT_VERSION`
|
yap_nversion=`expr $YAP_MAJOR_VERSION \* 10000 + $YAP_MINOR_VERSION \* 100 + $YAP_POINT_VERSION`
|
||||||
yap_startup=startup.yss
|
yap_startup=startup.yss
|
||||||
|
|
||||||
|
BINDIR=$bindir
|
||||||
|
DATAROOTDIR="$prefix"/share
|
||||||
|
BINDIR="$bindir"
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
#define YAP_STARTUP "$yap_startup"
|
#define YAP_STARTUP "$yap_startup"
|
||||||
@ -18255,7 +17670,7 @@ _ACEOF
|
|||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
#define YAP_BINDIR "$prefix/bin"
|
#define YAP_BINDIR "$BINDIR"
|
||||||
_ACEOF
|
_ACEOF
|
||||||
|
|
||||||
|
|
||||||
@ -18265,7 +17680,7 @@ _ACEOF
|
|||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
#define YAP_LIBDIR "$prefix/lib/Yap"
|
#define YAP_LIBDIR "$LIBDIR/Yap"
|
||||||
_ACEOF
|
_ACEOF
|
||||||
|
|
||||||
|
|
||||||
@ -18274,18 +17689,18 @@ cat >>confdefs.h <<_ACEOF
|
|||||||
_ACEOF
|
_ACEOF
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
|
||||||
#define YAP_PL_SRCDIR "$prefix/share/Yap/pl"
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
#define YAP_ROOTDIR "$prefix"
|
#define YAP_ROOTDIR "$prefix"
|
||||||
_ACEOF
|
_ACEOF
|
||||||
|
|
||||||
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
cat >>confdefs.h <<_ACEOF
|
||||||
#define YAP_SHAREDIR "$prefix/share"
|
#define YAP_SHAREDIR "$DATAROOTDIR"
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define YAP_PL_SRCDIR "$DATAROOTDIR/Yap/pl"
|
||||||
_ACEOF
|
_ACEOF
|
||||||
|
|
||||||
|
|
||||||
@ -18347,7 +17762,6 @@ mkdir -p packages/prism/src/c/up
|
|||||||
mkdir -p packages/prism/src/prolog
|
mkdir -p packages/prism/src/prolog
|
||||||
mkdir -p packages/ProbLog
|
mkdir -p packages/ProbLog
|
||||||
mkdir -p packages/ProbLog/simplecudd
|
mkdir -p packages/ProbLog/simplecudd
|
||||||
mkdir -p packages/prosqlite
|
|
||||||
mkdir -p packages/R
|
mkdir -p packages/R
|
||||||
mkdir -p packages/RDF
|
mkdir -p packages/RDF
|
||||||
mkdir -p packages/real
|
mkdir -p packages/real
|
||||||
@ -18468,12 +17882,6 @@ ac_config_files="$ac_config_files packages/archive/Makefile"
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$PKG_ODBC" != ""; then
|
|
||||||
ac_config_files="$ac_config_files packages/odbc/Makefile"
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if test "$PKG_MINISAT" != ""; then
|
if test "$PKG_MINISAT" != ""; then
|
||||||
ac_config_files="$ac_config_files packages/swi-minisat2/Makefile"
|
ac_config_files="$ac_config_files packages/swi-minisat2/Makefile"
|
||||||
|
|
||||||
@ -18507,11 +17915,6 @@ ac_config_files="$ac_config_files packages/prism/src/prolog/Makefile"
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$PKG_PROSQLITE" != ""; then
|
|
||||||
ac_config_files="$ac_config_files packages/prosqlite/Makefile"
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$PKG_WINCONSOLE" != ""; then
|
if test "$PKG_WINCONSOLE" != ""; then
|
||||||
ac_config_files="$ac_config_files swi/console/Makefile"
|
ac_config_files="$ac_config_files swi/console/Makefile"
|
||||||
|
|
||||||
@ -18630,7 +18033,6 @@ LTLIBOBJS=$ac_ltlibobjs
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
: "${CONFIG_STATUS=./config.status}"
|
: "${CONFIG_STATUS=./config.status}"
|
||||||
ac_write_fail=0
|
ac_write_fail=0
|
||||||
ac_clean_files_save=$ac_clean_files
|
ac_clean_files_save=$ac_clean_files
|
||||||
@ -19262,7 +18664,6 @@ do
|
|||||||
"packages/sgml/Makefile") CONFIG_FILES="$CONFIG_FILES packages/sgml/Makefile" ;;
|
"packages/sgml/Makefile") CONFIG_FILES="$CONFIG_FILES packages/sgml/Makefile" ;;
|
||||||
"packages/zlib/Makefile") CONFIG_FILES="$CONFIG_FILES packages/zlib/Makefile" ;;
|
"packages/zlib/Makefile") CONFIG_FILES="$CONFIG_FILES packages/zlib/Makefile" ;;
|
||||||
"packages/archive/Makefile") CONFIG_FILES="$CONFIG_FILES packages/archive/Makefile" ;;
|
"packages/archive/Makefile") CONFIG_FILES="$CONFIG_FILES packages/archive/Makefile" ;;
|
||||||
"packages/odbc/Makefile") CONFIG_FILES="$CONFIG_FILES packages/odbc/Makefile" ;;
|
|
||||||
"packages/swi-minisat2/Makefile") CONFIG_FILES="$CONFIG_FILES packages/swi-minisat2/Makefile" ;;
|
"packages/swi-minisat2/Makefile") CONFIG_FILES="$CONFIG_FILES packages/swi-minisat2/Makefile" ;;
|
||||||
"packages/swi-minisat2/C/Makefile") CONFIG_FILES="$CONFIG_FILES packages/swi-minisat2/C/Makefile" ;;
|
"packages/swi-minisat2/C/Makefile") CONFIG_FILES="$CONFIG_FILES packages/swi-minisat2/C/Makefile" ;;
|
||||||
"packages/real/Makefile") CONFIG_FILES="$CONFIG_FILES packages/real/Makefile" ;;
|
"packages/real/Makefile") CONFIG_FILES="$CONFIG_FILES packages/real/Makefile" ;;
|
||||||
@ -19272,7 +18673,6 @@ do
|
|||||||
"packages/CLPBN/horus/Makefile") CONFIG_FILES="$CONFIG_FILES packages/CLPBN/horus/Makefile" ;;
|
"packages/CLPBN/horus/Makefile") CONFIG_FILES="$CONFIG_FILES packages/CLPBN/horus/Makefile" ;;
|
||||||
"packages/prism/src/c/Makefile") CONFIG_FILES="$CONFIG_FILES packages/prism/src/c/Makefile" ;;
|
"packages/prism/src/c/Makefile") CONFIG_FILES="$CONFIG_FILES packages/prism/src/c/Makefile" ;;
|
||||||
"packages/prism/src/prolog/Makefile") CONFIG_FILES="$CONFIG_FILES packages/prism/src/prolog/Makefile" ;;
|
"packages/prism/src/prolog/Makefile") CONFIG_FILES="$CONFIG_FILES packages/prism/src/prolog/Makefile" ;;
|
||||||
"packages/prosqlite/Makefile") CONFIG_FILES="$CONFIG_FILES packages/prosqlite/Makefile" ;;
|
|
||||||
"swi/console/Makefile") CONFIG_FILES="$CONFIG_FILES swi/console/Makefile" ;;
|
"swi/console/Makefile") CONFIG_FILES="$CONFIG_FILES swi/console/Makefile" ;;
|
||||||
"packages/yap-lbfgs/Makefile") CONFIG_FILES="$CONFIG_FILES packages/yap-lbfgs/Makefile" ;;
|
"packages/yap-lbfgs/Makefile") CONFIG_FILES="$CONFIG_FILES packages/yap-lbfgs/Makefile" ;;
|
||||||
|
|
||||||
|
44
configure.in
44
configure.in
@ -793,13 +793,6 @@ else
|
|||||||
PKG_LIBARCHIVE=""
|
PKG_LIBARCHIVE=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -e "$srcdir"/packages/odbc/Makefile.in
|
|
||||||
then
|
|
||||||
PKG_ODBC="packages/odbc"
|
|
||||||
else
|
|
||||||
PKG_ODBC=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$use_chr" = no
|
if test "$use_chr" = no
|
||||||
then
|
then
|
||||||
PKG_CHR=""
|
PKG_CHR=""
|
||||||
@ -2038,21 +2031,6 @@ fi
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$PKG_ODBC" != ""; then
|
|
||||||
|
|
||||||
m4_include([packages/odbc/configure.in])
|
|
||||||
|
|
||||||
if test "$ODBC_TARGETS" = "nolib"
|
|
||||||
then
|
|
||||||
PKG_ODBC=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
|
||||||
ODBC_TARGETS=nolib
|
|
||||||
ODBC_PLTARGETS=odbc.pl
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
m4_include([packages/bdd/configure.in])
|
m4_include([packages/bdd/configure.in])
|
||||||
|
|
||||||
m4_include([packages/cplint/configure.in])
|
m4_include([packages/cplint/configure.in])
|
||||||
@ -2131,6 +2109,10 @@ yap_timestamp=`date`
|
|||||||
yap_nversion=`expr $YAP_MAJOR_VERSION \* 10000 + $YAP_MINOR_VERSION \* 100 + $YAP_POINT_VERSION`
|
yap_nversion=`expr $YAP_MAJOR_VERSION \* 10000 + $YAP_MINOR_VERSION \* 100 + $YAP_POINT_VERSION`
|
||||||
yap_startup=startup.yss
|
yap_startup=startup.yss
|
||||||
|
|
||||||
|
BINDIR=$bindir
|
||||||
|
DATAROOTDIR="$prefix"/share
|
||||||
|
BINDIR="$bindir"
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED(YAP_STARTUP, [ "$yap_startup" ], [saved state file])
|
AC_DEFINE_UNQUOTED(YAP_STARTUP, [ "$yap_startup" ], [saved state file])
|
||||||
AC_DEFINE_UNQUOTED( C_CC, [ "$CC" ], [c-compiler used])
|
AC_DEFINE_UNQUOTED( C_CC, [ "$CC" ], [c-compiler used])
|
||||||
AC_DEFINE_UNQUOTED( C_CFLAGS, ["$CFLAGS $YAP_EXTRAS $ -D_YAP_NOT_INSTALLED_=1 $CPPFLAGS -I. -I$srcdir/H -I$srcdir/include -I$srcdir/os -I$srcdir/OPTYap -I$srcdir/BEAM" ], [compilation flags])
|
AC_DEFINE_UNQUOTED( C_CFLAGS, ["$CFLAGS $YAP_EXTRAS $ -D_YAP_NOT_INSTALLED_=1 $CPPFLAGS -I. -I$srcdir/H -I$srcdir/include -I$srcdir/os -I$srcdir/OPTYap -I$srcdir/BEAM" ], [compilation flags])
|
||||||
@ -2140,13 +2122,13 @@ AC_DEFINE_UNQUOTED( C_LIBPLSO, [ "$LIBS $EXTRA_LIBS_FOR_DLLS" ], [libs for linki
|
|||||||
AC_DEFINE_UNQUOTED( SO_EXT, [ "$SO" ], [relocable objects])
|
AC_DEFINE_UNQUOTED( SO_EXT, [ "$SO" ], [relocable objects])
|
||||||
AC_DEFINE_UNQUOTED( SO_PATH, [ "$SOPATH" ], [library search variable])
|
AC_DEFINE_UNQUOTED( SO_PATH, [ "$SOPATH" ], [library search variable])
|
||||||
AC_DEFINE_UNQUOTED( YAP_ARCH, [ "$ARCH" ], [architecture])
|
AC_DEFINE_UNQUOTED( YAP_ARCH, [ "$ARCH" ], [architecture])
|
||||||
AC_DEFINE_UNQUOTED( YAP_BINDIR, [ "$prefix/bin" ], [where the yap executable lives])
|
AC_DEFINE_UNQUOTED( YAP_BINDIR, [ "$BINDIR" ], [where the yap executable lives])
|
||||||
AC_DEFINE_UNQUOTED( YAP_FULL_VERSION, [ "YAP $YAP_VERSION ($ARCH): $yap_timestamp" ], [YAP version string])
|
AC_DEFINE_UNQUOTED( YAP_FULL_VERSION, [ "YAP $YAP_VERSION ($ARCH): $yap_timestamp" ], [YAP version string])
|
||||||
AC_DEFINE_UNQUOTED( YAP_LIBDIR, [ "$prefix/lib/Yap" ], [where to look for shared libraries])
|
AC_DEFINE_UNQUOTED( YAP_LIBDIR, [ "$LIBDIR/Yap" ], [where to look for shared libraries])
|
||||||
AC_DEFINE_UNQUOTED( YAP_NUMERIC_VERSION, [ $yap_nversion ], [numerical version])
|
AC_DEFINE_UNQUOTED( YAP_NUMERIC_VERSION, [ $yap_nversion ], [numerical version])
|
||||||
AC_DEFINE_UNQUOTED( YAP_PL_SRCDIR, [ "$prefix/share/Yap/pl" ], [where to look for Prolog sources])
|
|
||||||
AC_DEFINE_UNQUOTED( YAP_ROOTDIR, [ "$prefix" ], [where YAP lives])
|
AC_DEFINE_UNQUOTED( YAP_ROOTDIR, [ "$prefix" ], [where YAP lives])
|
||||||
AC_DEFINE_UNQUOTED( YAP_SHAREDIR, [ "$prefix/share" ], [where to look for the Prolog library])
|
AC_DEFINE_UNQUOTED( YAP_SHAREDIR, [ "$DATAROOTDIR" ], [where YAP lives])
|
||||||
|
AC_DEFINE_UNQUOTED( YAP_PL_SRCDIR, [ "$DATAROOTDIR/Yap/pl" ], [where YAP lives])
|
||||||
AC_DEFINE_UNQUOTED( YAP_TIMESTAMP, [ "$yap_timestamp" ], [date of compilation])
|
AC_DEFINE_UNQUOTED( YAP_TIMESTAMP, [ "$yap_timestamp" ], [date of compilation])
|
||||||
AC_DEFINE_UNQUOTED( YAP_VERSION, [ "$YAP_VERSION" ], [yap version])
|
AC_DEFINE_UNQUOTED( YAP_VERSION, [ "$YAP_VERSION" ], [yap version])
|
||||||
AC_DEFINE_UNQUOTED( YAP_YAPLIB, [ "$YAPLIB" ], [name of YAP library])
|
AC_DEFINE_UNQUOTED( YAP_YAPLIB, [ "$YAPLIB" ], [name of YAP library])
|
||||||
@ -2194,7 +2176,6 @@ mkdir -p packages/prism/src/c/up
|
|||||||
mkdir -p packages/prism/src/prolog
|
mkdir -p packages/prism/src/prolog
|
||||||
mkdir -p packages/ProbLog
|
mkdir -p packages/ProbLog
|
||||||
mkdir -p packages/ProbLog/simplecudd
|
mkdir -p packages/ProbLog/simplecudd
|
||||||
mkdir -p packages/prosqlite
|
|
||||||
mkdir -p packages/R
|
mkdir -p packages/R
|
||||||
mkdir -p packages/RDF
|
mkdir -p packages/RDF
|
||||||
mkdir -p packages/real
|
mkdir -p packages/real
|
||||||
@ -2281,11 +2262,6 @@ if test "$PKG_LIBARCHIVE" != ""; then
|
|||||||
AC_CONFIG_FILES([packages/archive/Makefile])
|
AC_CONFIG_FILES([packages/archive/Makefile])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$PKG_ODBC" != ""; then
|
|
||||||
AC_CONFIG_FILES([packages/odbc/Makefile])
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if test "$PKG_MINISAT" != ""; then
|
if test "$PKG_MINISAT" != ""; then
|
||||||
AC_CONFIG_FILES([packages/swi-minisat2/Makefile])
|
AC_CONFIG_FILES([packages/swi-minisat2/Makefile])
|
||||||
AC_CONFIG_FILES([packages/swi-minisat2/C/Makefile])
|
AC_CONFIG_FILES([packages/swi-minisat2/C/Makefile])
|
||||||
@ -2310,10 +2286,6 @@ AC_CONFIG_FILES([packages/prism/src/c/Makefile])
|
|||||||
AC_CONFIG_FILES([packages/prism/src/prolog/Makefile])
|
AC_CONFIG_FILES([packages/prism/src/prolog/Makefile])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$PKG_PROSQLITE" != ""; then
|
|
||||||
AC_CONFIG_FILES([packages/prosqlite/Makefile])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$PKG_WINCONSOLE" != ""; then
|
if test "$PKG_WINCONSOLE" != ""; then
|
||||||
AC_CONFIG_FILES([swi/console/Makefile])
|
AC_CONFIG_FILES([swi/console/Makefile])
|
||||||
fi
|
fi
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#define _YAPDEFS_H 1
|
#define _YAPDEFS_H 1
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <setjmp.h>
|
||||||
|
|
||||||
#ifdef YAP_H
|
#ifdef YAP_H
|
||||||
|
|
||||||
@ -285,13 +286,27 @@ Int Yap_InitDefaults( YAP_init_args *init_args, char saved_state[] );
|
|||||||
/* this should be opaque to the user */
|
/* this should be opaque to the user */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
unsigned long b; //> choice-point at entry
|
unsigned long b; //> choice-point at entry
|
||||||
YAP_Int CurSlot; //> variables at entry
|
YAP_handle_t CurSlot; //> variables at entry
|
||||||
YAP_Int EndSlot; //> variables at successful execution
|
YAP_handle_t EndSlot; //> variables at successful execution
|
||||||
struct yami *p; //> Program Counter at entry
|
struct yami *p; //> Program Counter at entry
|
||||||
struct yami *cp; //> Continuation PC at entry
|
struct yami *cp; //> Continuation PC at entry
|
||||||
} YAP_dogoalinfo;
|
} YAP_dogoalinfo;
|
||||||
|
|
||||||
|
|
||||||
|
// query manipulation support
|
||||||
|
|
||||||
|
typedef struct open_query_struct {
|
||||||
|
int q_open;
|
||||||
|
int q_state;
|
||||||
|
YAP_handle_t q_g;
|
||||||
|
struct pred_entry *q_pe;
|
||||||
|
struct yami *q_p, *q_cp;
|
||||||
|
jmp_buf q_env;
|
||||||
|
int q_flags;
|
||||||
|
YAP_dogoalinfo q_h;
|
||||||
|
struct open_query_struct *oq;
|
||||||
|
} YAP_openQuery;
|
||||||
|
|
||||||
typedef void (*YAP_halt_hook)(int exit_code, void *closure);
|
typedef void (*YAP_halt_hook)(int exit_code, void *closure);
|
||||||
|
|
||||||
typedef YAP_Int YAP_opaque_tag_t;
|
typedef YAP_Int YAP_opaque_tag_t;
|
||||||
|
@ -1848,7 +1848,7 @@ extern X_API YAP_PredEntryPtr YAP_FunctorToPredInModule(YAP_Functor, YAP_Module)
|
|||||||
extern X_API YAP_PredEntryPtr YAP_AtomToPredInModule(YAP_Atom, YAP_Module);
|
extern X_API YAP_PredEntryPtr YAP_AtomToPredInModule(YAP_Atom, YAP_Module);
|
||||||
|
|
||||||
/* int YAP_EnterGoal(void) */
|
/* int YAP_EnterGoal(void) */
|
||||||
extern X_API YAP_Bool YAP_EnterGoal(YAP_PredEntryPtr, YAP_Term *, YAP_dogoalinfo *);
|
extern X_API YAP_Bool YAP_EnterGoal(YAP_PredEntryPtr, YAP_handle_t, YAP_dogoalinfo *);
|
||||||
|
|
||||||
/* int YAP_RetryGoal(void) */
|
/* int YAP_RetryGoal(void) */
|
||||||
extern X_API YAP_Bool YAP_RetryGoal(YAP_dogoalinfo *);
|
extern X_API YAP_Bool YAP_RetryGoal(YAP_dogoalinfo *);
|
||||||
|
@ -47,7 +47,7 @@ PL_EXPORT(int)
|
|||||||
PL_is_blob(term_t t, PL_blob_t **type)
|
PL_is_blob(term_t t, PL_blob_t **type)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term yt = Yap_GetFromSlot(t PASS_REGS);
|
Term yt = Yap_GetFromSlot(t);
|
||||||
Atom a;
|
Atom a;
|
||||||
BlobPropEntry *b;
|
BlobPropEntry *b;
|
||||||
|
|
||||||
@ -144,7 +144,7 @@ PL_unify_blob(term_t t, void *blob, size_t len, PL_blob_t *type)
|
|||||||
if (type->acquire) {
|
if (type->acquire) {
|
||||||
type->acquire(AtomToSWIAtom(AbsAtom(ae)));
|
type->acquire(AtomToSWIAtom(AbsAtom(ae)));
|
||||||
}
|
}
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS), MkAtomTerm(AbsAtom(ae)));
|
return Yap_unify(Yap_GetFromSlot(t), MkAtomTerm(AbsAtom(ae)));
|
||||||
}
|
}
|
||||||
|
|
||||||
PL_EXPORT(int)
|
PL_EXPORT(int)
|
||||||
@ -175,7 +175,7 @@ PL_get_blob(term_t t, void **blob, size_t *len, PL_blob_t **type)
|
|||||||
Term tt;
|
Term tt;
|
||||||
AtomEntry *ae;
|
AtomEntry *ae;
|
||||||
|
|
||||||
tt = Yap_GetFromSlot(t PASS_REGS);
|
tt = Yap_GetFromSlot(t);
|
||||||
if (IsVarTerm(tt))
|
if (IsVarTerm(tt))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!IsAtomTerm(tt))
|
if (!IsAtomTerm(tt))
|
||||||
|
@ -192,7 +192,7 @@ X_API char* PL_atom_nchars(atom_t a, size_t *len) /* SAM check type */
|
|||||||
X_API term_t PL_copy_term_ref(term_t from)
|
X_API term_t PL_copy_term_ref(term_t from)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
return Yap_InitSlot(Yap_GetFromSlot(from PASS_REGS) PASS_REGS);
|
return Yap_InitSlot(Yap_GetFromSlot(from));
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @brief create a new term reference
|
/** @brief create a new term reference
|
||||||
@ -202,7 +202,7 @@ X_API term_t PL_new_term_ref(void)
|
|||||||
{
|
{
|
||||||
|
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
term_t to = Yap_NewSlots(1 PASS_REGS);
|
term_t to = Yap_NewSlots(1);
|
||||||
return to;
|
return to;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,7 +213,7 @@ X_API term_t PL_new_term_ref(void)
|
|||||||
X_API term_t PL_new_term_refs(int n)
|
X_API term_t PL_new_term_refs(int n)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
term_t to = Yap_NewSlots(n PASS_REGS);
|
term_t to = Yap_NewSlots(n);
|
||||||
return to;
|
return to;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -223,7 +223,7 @@ X_API term_t PL_new_term_refs(int n)
|
|||||||
X_API void PL_reset_term_refs(term_t after)
|
X_API void PL_reset_term_refs(term_t after)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
term_t new = Yap_NewSlots(1 PASS_REGS);
|
term_t new = Yap_NewSlots(1);
|
||||||
Yap_RecoverSlots(after-new, new PASS_REGS);
|
Yap_RecoverSlots(after-new, new PASS_REGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,7 +247,7 @@ X_API void PL_reset_term_refs(term_t after)
|
|||||||
X_API int PL_get_name_arity(term_t ts, atom_t *name, int *arity)
|
X_API int PL_get_name_arity(term_t ts, atom_t *name, int *arity)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
if (IsAtomTerm(t)) {
|
if (IsAtomTerm(t)) {
|
||||||
*name = AtomToSWIAtom(AtomOfTerm(t));
|
*name = AtomToSWIAtom(AtomOfTerm(t));
|
||||||
*arity = 0;
|
*arity = 0;
|
||||||
@ -277,7 +277,7 @@ X_API int PL_get_name_arity(term_t ts, atom_t *name, int *arity)
|
|||||||
X_API int PL_get_arg(int index, term_t ts, term_t a)
|
X_API int PL_get_arg(int index, term_t ts, term_t a)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts );
|
||||||
if (IsVarTerm( t ))
|
if (IsVarTerm( t ))
|
||||||
return 0;
|
return 0;
|
||||||
if ( !IsApplTerm(t) ) {
|
if ( !IsApplTerm(t) ) {
|
||||||
@ -308,7 +308,7 @@ X_API int PL_get_arg(int index, term_t ts, term_t a)
|
|||||||
X_API int PL_get_compound_name_arity(term_t ts, atom_t *ap, int *ip)
|
X_API int PL_get_compound_name_arity(term_t ts, atom_t *ap, int *ip)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
if ( !YAP_IsApplTerm(t) ) {
|
if ( !YAP_IsApplTerm(t) ) {
|
||||||
if (YAP_IsPairTerm(t)) {
|
if (YAP_IsPairTerm(t)) {
|
||||||
if (ip)
|
if (ip)
|
||||||
@ -337,7 +337,7 @@ X_API int PL_get_compound_name_arity(term_t ts, atom_t *ap, int *ip)
|
|||||||
X_API int PL_get_atom(term_t ts, atom_t *a)
|
X_API int PL_get_atom(term_t ts, atom_t *a)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
if ( !IsAtomTerm(t))
|
if ( !IsAtomTerm(t))
|
||||||
return 0;
|
return 0;
|
||||||
*a = AtomToSWIAtom(AtomOfTerm(t));
|
*a = AtomToSWIAtom(AtomOfTerm(t));
|
||||||
@ -352,7 +352,7 @@ X_API int PL_get_atom(term_t ts, atom_t *a)
|
|||||||
X_API int PL_get_integer(term_t ts, int *i)
|
X_API int PL_get_integer(term_t ts, int *i)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts );
|
||||||
if (IsVarTerm(t) || !IsIntegerTerm(t) )
|
if (IsVarTerm(t) || !IsIntegerTerm(t) )
|
||||||
return 0;
|
return 0;
|
||||||
*i = (int)IntegerOfTerm(t);
|
*i = (int)IntegerOfTerm(t);
|
||||||
@ -365,7 +365,7 @@ X_API int PL_get_integer(term_t ts, int *i)
|
|||||||
X_API int PL_get_long(term_t ts, long *i)
|
X_API int PL_get_long(term_t ts, long *i)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
if (!YAP_IsIntTerm(t) ) {
|
if (!YAP_IsIntTerm(t) ) {
|
||||||
if (YAP_IsFloatTerm(t)) {
|
if (YAP_IsFloatTerm(t)) {
|
||||||
double dbl = YAP_FloatOfTerm(t);
|
double dbl = YAP_FloatOfTerm(t);
|
||||||
@ -385,7 +385,7 @@ X_API int PL_get_long(term_t ts, long *i)
|
|||||||
X_API int PL_get_bool(term_t ts, int *i)
|
X_API int PL_get_bool(term_t ts, int *i)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
Atom at;
|
Atom at;
|
||||||
|
|
||||||
if (!IsAtomTerm(t) )
|
if (!IsAtomTerm(t) )
|
||||||
@ -408,7 +408,7 @@ X_API int PL_get_bool(term_t ts, int *i)
|
|||||||
X_API int PL_get_int64(term_t ts, int64_t *i)
|
X_API int PL_get_int64(term_t ts, int64_t *i)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
if (!YAP_IsIntTerm(t) ) {
|
if (!YAP_IsIntTerm(t) ) {
|
||||||
if (YAP_IsFloatTerm(t)) {
|
if (YAP_IsFloatTerm(t)) {
|
||||||
double dbl = YAP_FloatOfTerm(t);
|
double dbl = YAP_FloatOfTerm(t);
|
||||||
@ -458,7 +458,7 @@ X_API int PL_get_int64(term_t ts, int64_t *i)
|
|||||||
X_API int PL_get_intptr(term_t ts, intptr_t *a)
|
X_API int PL_get_intptr(term_t ts, intptr_t *a)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t = Yap_GetFromSlot(ts PASS_REGS);
|
Term t = Yap_GetFromSlot(ts);
|
||||||
if ( !IsIntegerTerm(t) )
|
if ( !IsIntegerTerm(t) )
|
||||||
return 0;
|
return 0;
|
||||||
*a = (intptr_t)(IntegerOfTerm(t));
|
*a = (intptr_t)(IntegerOfTerm(t));
|
||||||
@ -471,7 +471,7 @@ X_API int PL_get_intptr(term_t ts, intptr_t *a)
|
|||||||
X_API int PL_get_uintptr(term_t ts, uintptr_t *a)
|
X_API int PL_get_uintptr(term_t ts, uintptr_t *a)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t = Yap_GetFromSlot(ts PASS_REGS);
|
Term t = Yap_GetFromSlot(ts);
|
||||||
if ( !IsIntegerTerm(t) )
|
if ( !IsIntegerTerm(t) )
|
||||||
return 0;
|
return 0;
|
||||||
*a = (uintptr_t)(IntegerOfTerm(t));
|
*a = (uintptr_t)(IntegerOfTerm(t));
|
||||||
@ -484,7 +484,7 @@ X_API int PL_get_uintptr(term_t ts, uintptr_t *a)
|
|||||||
X_API int _PL_get_arg(int index, term_t ts, term_t a)
|
X_API int _PL_get_arg(int index, term_t ts, term_t a)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
if ( !YAP_IsApplTerm(t) ) {
|
if ( !YAP_IsApplTerm(t) ) {
|
||||||
if (YAP_IsPairTerm(t)) {
|
if (YAP_IsPairTerm(t)) {
|
||||||
if (index == 1){
|
if (index == 1){
|
||||||
@ -508,7 +508,7 @@ X_API int _PL_get_arg(int index, term_t ts, term_t a)
|
|||||||
X_API int PL_get_atom_chars(term_t ts, char **a) /* SAM check type */
|
X_API int PL_get_atom_chars(term_t ts, char **a) /* SAM check type */
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t = Yap_GetFromSlot(ts PASS_REGS);
|
Term t = Yap_GetFromSlot(ts);
|
||||||
if (!IsAtomTerm(t) || IsWideAtom(AtomOfTerm(t)))
|
if (!IsAtomTerm(t) || IsWideAtom(AtomOfTerm(t)))
|
||||||
return 0;
|
return 0;
|
||||||
*a = RepAtom(AtomOfTerm(t))->StrOfAE;
|
*a = RepAtom(AtomOfTerm(t))->StrOfAE;
|
||||||
@ -521,7 +521,7 @@ X_API int PL_get_atom_chars(term_t ts, char **a) /* SAM check type */
|
|||||||
X_API int PL_get_atom_nchars(term_t ts, size_t *len, char **s) /* SAM check type */
|
X_API int PL_get_atom_nchars(term_t ts, size_t *len, char **s) /* SAM check type */
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t = Yap_GetFromSlot(ts PASS_REGS);
|
Term t = Yap_GetFromSlot(ts);
|
||||||
if (!IsAtomTerm(t))
|
if (!IsAtomTerm(t))
|
||||||
return 0;
|
return 0;
|
||||||
*s = RepAtom(AtomOfTerm(t))->StrOfAE;
|
*s = RepAtom(AtomOfTerm(t))->StrOfAE;
|
||||||
@ -564,7 +564,7 @@ X_API int PL_get_atom_nchars(term_t ts, size_t *len, char **s) /* SAM check typ
|
|||||||
X_API int PL_get_functor(term_t ts, functor_t *f)
|
X_API int PL_get_functor(term_t ts, functor_t *f)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t = Yap_GetFromSlot(ts PASS_REGS);
|
Term t = Yap_GetFromSlot(ts);
|
||||||
if ( IsAtomTerm(t)) {
|
if ( IsAtomTerm(t)) {
|
||||||
*f = t;
|
*f = t;
|
||||||
} else {
|
} else {
|
||||||
@ -579,7 +579,7 @@ X_API int PL_get_functor(term_t ts, functor_t *f)
|
|||||||
X_API int PL_get_float(term_t ts, double *f) /* SAM type check*/
|
X_API int PL_get_float(term_t ts, double *f) /* SAM type check*/
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
if ( IsFloatTerm(t)) {
|
if ( IsFloatTerm(t)) {
|
||||||
*f = FloatOfTerm(t);
|
*f = FloatOfTerm(t);
|
||||||
} else if ( IsIntegerTerm(t)) {
|
} else if ( IsIntegerTerm(t)) {
|
||||||
@ -600,7 +600,7 @@ X_API int PL_get_float(term_t ts, double *f) /* SAM type check*/
|
|||||||
X_API int PL_get_string_chars(term_t t, char **s, size_t *len)
|
X_API int PL_get_string_chars(term_t t, char **s, size_t *len)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term tt = Yap_GetFromSlot(t PASS_REGS);
|
Term tt = Yap_GetFromSlot(t);
|
||||||
if (!IsStringTerm(tt)) {
|
if (!IsStringTerm(tt)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -616,7 +616,7 @@ X_API int PL_get_string_chars(term_t t, char **s, size_t *len)
|
|||||||
X_API int PL_get_list(term_t ts, term_t h, term_t tl)
|
X_API int PL_get_list(term_t ts, term_t h, term_t tl)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts );
|
||||||
if (IsVarTerm(t) || !IsPairTerm(t) ) {
|
if (IsVarTerm(t) || !IsPairTerm(t) ) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -632,7 +632,7 @@ X_API int PL_get_list(term_t ts, term_t h, term_t tl)
|
|||||||
X_API int PL_get_head(term_t ts, term_t h)
|
X_API int PL_get_head(term_t ts, term_t h)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
if (!YAP_IsPairTerm(t) ) {
|
if (!YAP_IsPairTerm(t) ) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -667,7 +667,7 @@ X_API int PL_unify_bool(term_t t, int a)
|
|||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term iterm = (a ? MkAtomTerm(AtomTrue) : MkAtomTerm(AtomFalse) );
|
Term iterm = (a ? MkAtomTerm(AtomTrue) : MkAtomTerm(AtomFalse) );
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS),iterm);
|
return Yap_unify(Yap_GetFromSlot(t ),iterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -680,7 +680,7 @@ X_API int PL_unify_bool(term_t t, int a)
|
|||||||
X_API int PL_get_mpz(term_t t, mpz_t mpz)
|
X_API int PL_get_mpz(term_t t, mpz_t mpz)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t0 = Yap_GetFromSlot(t PASS_REGS);
|
Term t0 = Yap_GetFromSlot(t);
|
||||||
|
|
||||||
return Yap_term_to_existing_big(t0, mpz);
|
return Yap_term_to_existing_big(t0, mpz);
|
||||||
}
|
}
|
||||||
@ -689,13 +689,13 @@ X_API int PL_unify_mpz(term_t t, mpz_t mpz)
|
|||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term iterm = Yap_MkBigIntTerm(mpz);
|
Term iterm = Yap_MkBigIntTerm(mpz);
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS),iterm);
|
return Yap_unify(Yap_GetFromSlot(t),iterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_get_mpq(term_t t, mpq_t mpz)
|
X_API int PL_get_mpq(term_t t, mpq_t mpz)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t0 = Yap_GetFromSlot(t PASS_REGS);
|
Term t0 = Yap_GetFromSlot(t);
|
||||||
|
|
||||||
return Yap_term_to_existing_rat(t0, mpz);
|
return Yap_term_to_existing_rat(t0, mpz);
|
||||||
}
|
}
|
||||||
@ -704,7 +704,7 @@ X_API int PL_unify_mpq(term_t t, mpq_t mpq)
|
|||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term iterm = Yap_MkBigRatTerm(mpq);
|
Term iterm = Yap_MkBigRatTerm(mpq);
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS),iterm);
|
return Yap_unify(Yap_GetFromSlot(t),iterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -713,7 +713,7 @@ X_API int PL_unify_mpq(term_t t, mpq_t mpq)
|
|||||||
X_API int PL_get_module(term_t ts, module_t *m)
|
X_API int PL_get_module(term_t ts, module_t *m)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
if (!IsAtomTerm(t) )
|
if (!IsAtomTerm(t) )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
*m = Yap_GetModuleEntry(t);
|
*m = Yap_GetModuleEntry(t);
|
||||||
@ -737,7 +737,7 @@ X_API module_t PL_new_module(atom_t swiat)
|
|||||||
X_API int PL_get_nil(term_t ts)
|
X_API int PL_get_nil(term_t ts)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t = Yap_GetFromSlot(ts PASS_REGS);
|
Term t = Yap_GetFromSlot(ts );
|
||||||
return ( t == TermNil );
|
return ( t == TermNil );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -747,7 +747,7 @@ X_API int PL_get_nil(term_t ts)
|
|||||||
X_API int PL_get_pointer(term_t ts, void **i)
|
X_API int PL_get_pointer(term_t ts, void **i)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
if (IsVarTerm(t) || !IsIntegerTerm(t) )
|
if (IsVarTerm(t) || !IsIntegerTerm(t) )
|
||||||
return 0;
|
return 0;
|
||||||
*i = (void *)IntegerOfTerm(t);
|
*i = (void *)IntegerOfTerm(t);
|
||||||
@ -757,7 +757,7 @@ X_API int PL_get_pointer(term_t ts, void **i)
|
|||||||
X_API int PL_get_tail(term_t ts, term_t tl)
|
X_API int PL_get_tail(term_t ts, term_t tl)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts );
|
||||||
if (!YAP_IsPairTerm(t) ) {
|
if (!YAP_IsPairTerm(t) ) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -889,7 +889,7 @@ X_API int PL_cons_functor(term_t d, functor_t f,...)
|
|||||||
}
|
}
|
||||||
va_start (ap, f);
|
va_start (ap, f);
|
||||||
for (i = 0; i < arity; i++) {
|
for (i = 0; i < arity; i++) {
|
||||||
Yap_unify(tmp[i],Yap_GetFromSlot(va_arg(ap, term_t) PASS_REGS));
|
Yap_unify(tmp[i],Yap_GetFromSlot(va_arg(ap, term_t)));
|
||||||
}
|
}
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
Yap_PutInSlot(d,t PASS_REGS);
|
Yap_PutInSlot(d,t PASS_REGS);
|
||||||
@ -921,7 +921,7 @@ X_API int PL_cons_functor_v(term_t d, functor_t f, term_t a0)
|
|||||||
tmp = RepAppl(t)+1;
|
tmp = RepAppl(t)+1;
|
||||||
}
|
}
|
||||||
for (i = 0; i < arity; i++) {
|
for (i = 0; i < arity; i++) {
|
||||||
Yap_unify(tmp[i] , Yap_GetFromSlot(a0 PASS_REGS) );
|
Yap_unify(tmp[i] , Yap_GetFromSlot(a0 ) );
|
||||||
a0++;
|
a0++;
|
||||||
}
|
}
|
||||||
Yap_PutInSlot(d,t PASS_REGS);
|
Yap_PutInSlot(d,t PASS_REGS);
|
||||||
@ -937,7 +937,7 @@ X_API int PL_cons_list(term_t d, term_t h, term_t t)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Yap_PutInSlot(d,MkPairTerm(Yap_GetFromSlot(h PASS_REGS),Yap_GetFromSlot(t PASS_REGS)) PASS_REGS);
|
Yap_PutInSlot(d,MkPairTerm(Yap_GetFromSlot(h),Yap_GetFromSlot(t)) PASS_REGS);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1103,7 +1103,7 @@ X_API int PL_put_string_nchars(term_t t, size_t len, const char *chars)
|
|||||||
X_API int PL_put_term(term_t d, term_t s)
|
X_API int PL_put_term(term_t d, term_t s)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Yap_PutInSlot(d,Yap_GetFromSlot(s PASS_REGS) PASS_REGS);
|
Yap_PutInSlot(d,Yap_GetFromSlot(s ) PASS_REGS);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1123,14 +1123,14 @@ X_API int PL_put_variable(term_t t)
|
|||||||
X_API int PL_raise_exception(term_t exception)
|
X_API int PL_raise_exception(term_t exception)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
EX = Yap_StoreTermInDB(Yap_GetFromSlot(exception PASS_REGS),0);
|
EX = Yap_StoreTermInDB(Yap_GetFromSlot(exception),0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_throw(term_t exception)
|
X_API int PL_throw(term_t exception)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Throw(Yap_GetFromSlot(exception PASS_REGS));
|
YAP_Throw(Yap_GetFromSlot(exception));
|
||||||
if (LOCAL_execution)
|
if (LOCAL_execution)
|
||||||
longjmp(LOCAL_execution->q_env, 0);
|
longjmp(LOCAL_execution->q_env, 0);
|
||||||
return 0;
|
return 0;
|
||||||
@ -1158,7 +1158,7 @@ X_API int PL_warning(const char *msg, ...) {
|
|||||||
X_API int PL_unify(term_t t1, term_t t2)
|
X_API int PL_unify(term_t t1, term_t t2)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
return Yap_unify(Yap_GetFromSlot(t1 PASS_REGS),Yap_GetFromSlot(t2 PASS_REGS));
|
return Yap_unify(Yap_GetFromSlot(t1 ),Yap_GetFromSlot(t2 ));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SWI: int PL_unify_atom(term_t ?t, atom *at)
|
/* SWI: int PL_unify_atom(term_t ?t, atom *at)
|
||||||
@ -1167,7 +1167,7 @@ X_API int PL_unify_atom(term_t t, atom_t at)
|
|||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term cterm = MkAtomTerm(SWIAtomToAtom(at));
|
YAP_Term cterm = MkAtomTerm(SWIAtomToAtom(at));
|
||||||
return YAP_Unify(Yap_GetFromSlot(t PASS_REGS),cterm);
|
return YAP_Unify(Yap_GetFromSlot(t),cterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SWI: int PL_unify_atom_chars(term_t ?t, const char *chars)
|
/* SWI: int PL_unify_atom_chars(term_t ?t, const char *chars)
|
||||||
@ -1181,7 +1181,7 @@ X_API int PL_unify_atom_chars(term_t t, const char *s)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
Yap_AtomIncreaseHold(at);
|
Yap_AtomIncreaseHold(at);
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS), MkAtomTerm(at));
|
return Yap_unify(Yap_GetFromSlot(t), MkAtomTerm(at));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SWI: int PL_unify_atom_chars(term_t ?t, const char *chars)
|
/* SWI: int PL_unify_atom_chars(term_t ?t, const char *chars)
|
||||||
@ -1195,7 +1195,7 @@ X_API int PL_unify_atom_nchars(term_t t, size_t len, const char *s)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
Yap_AtomIncreaseHold(at);
|
Yap_AtomIncreaseHold(at);
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS), MkAtomTerm(at));
|
return Yap_unify(Yap_GetFromSlot(t), MkAtomTerm(at));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SWI: int PL_unify_float(term_t ?t, double f)
|
/* SWI: int PL_unify_float(term_t ?t, double f)
|
||||||
@ -1204,7 +1204,7 @@ X_API int PL_unify_float(term_t t, double f)
|
|||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term fterm = MkFloatTerm(f);
|
Term fterm = MkFloatTerm(f);
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS),fterm);
|
return Yap_unify(Yap_GetFromSlot(t),fterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SWI: int PL_unify_integer(term_t ?t, long n)
|
/* SWI: int PL_unify_integer(term_t ?t, long n)
|
||||||
@ -1213,21 +1213,21 @@ X_API int PL_unify_integer(term_t t, long n)
|
|||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term iterm = MkIntegerTerm(n);
|
Term iterm = MkIntegerTerm(n);
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS),iterm);
|
return Yap_unify(Yap_GetFromSlot(t),iterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_unify_intptr(term_t t, intptr_t n)
|
X_API int PL_unify_intptr(term_t t, intptr_t n)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term iterm = MkIntegerTerm(n);
|
Term iterm = MkIntegerTerm(n);
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS),iterm);
|
return Yap_unify(Yap_GetFromSlot(t),iterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_unify_uintptr(term_t t, uintptr_t n)
|
X_API int PL_unify_uintptr(term_t t, uintptr_t n)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term iterm = MkIntegerTerm(n);
|
Term iterm = MkIntegerTerm(n);
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS),iterm);
|
return Yap_unify(Yap_GetFromSlot(t),iterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SWI: int PL_unify_integer(term_t ?t, long n)
|
/* SWI: int PL_unify_integer(term_t ?t, long n)
|
||||||
@ -1235,7 +1235,7 @@ X_API int PL_unify_uintptr(term_t t, uintptr_t n)
|
|||||||
X_API int PL_unify_functor(term_t t, functor_t f)
|
X_API int PL_unify_functor(term_t t, functor_t f)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term tt = Yap_GetFromSlot(t PASS_REGS);
|
Term tt = Yap_GetFromSlot(t);
|
||||||
Functor ff = SWIFunctorToFunctor(f);
|
Functor ff = SWIFunctorToFunctor(f);
|
||||||
if (IsVarTerm(tt)) {
|
if (IsVarTerm(tt)) {
|
||||||
if (Unsigned(HR)+ArityOfFunctor(ff) > Unsigned(ASP)-CreepFlag) {
|
if (Unsigned(HR)+ArityOfFunctor(ff) > Unsigned(ASP)-CreepFlag) {
|
||||||
@ -1259,7 +1259,7 @@ X_API int PL_unify_int64(term_t t, int64_t n)
|
|||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
#if SIZEOF_INT_P==8
|
#if SIZEOF_INT_P==8
|
||||||
Term iterm = MkIntegerTerm(n);
|
Term iterm = MkIntegerTerm(n);
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS),iterm);
|
return Yap_unify(Yap_GetFromSlot(t),iterm);
|
||||||
#elif USE_GMP
|
#elif USE_GMP
|
||||||
YAP_Term iterm;
|
YAP_Term iterm;
|
||||||
char s[64];
|
char s[64];
|
||||||
@ -1274,7 +1274,7 @@ X_API int PL_unify_int64(term_t t, int64_t n)
|
|||||||
#endif
|
#endif
|
||||||
mpz_init_set_str (&rop, s, 10);
|
mpz_init_set_str (&rop, s, 10);
|
||||||
iterm = YAP_MkBigNumTerm((void *)&rop);
|
iterm = YAP_MkBigNumTerm((void *)&rop);
|
||||||
return YAP_Unify(Yap_GetFromSlot(t PASS_REGS),iterm);
|
return YAP_Unify(Yap_GetFromSlot(t ),iterm);
|
||||||
#else
|
#else
|
||||||
if ((long)n == n)
|
if ((long)n == n)
|
||||||
return PL_unify_integer(t, n);
|
return PL_unify_integer(t, n);
|
||||||
@ -1302,7 +1302,7 @@ X_API int PL_unify_list(term_t tt, term_t h, term_t tail)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
t = Deref(Yap_GetFromSlot(tt PASS_REGS));
|
t = Deref(Yap_GetFromSlot(tt));
|
||||||
if (IsVarTerm(t)) {
|
if (IsVarTerm(t)) {
|
||||||
Term pairterm = Yap_MkNewPairTerm();
|
Term pairterm = Yap_MkNewPairTerm();
|
||||||
Yap_unify(t, pairterm);
|
Yap_unify(t, pairterm);
|
||||||
@ -1321,7 +1321,7 @@ X_API int PL_unify_list(term_t tt, term_t h, term_t tail)
|
|||||||
X_API int PL_unify_arg(int index, term_t tt, term_t arg)
|
X_API int PL_unify_arg(int index, term_t tt, term_t arg)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t = Deref(Yap_GetFromSlot(tt PASS_REGS)), to;
|
Term t = Deref(Yap_GetFromSlot(tt )), to;
|
||||||
if (index < 0)
|
if (index < 0)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (IsVarTerm(t) || IsAtomOrIntTerm(t)) {
|
if (IsVarTerm(t) || IsAtomOrIntTerm(t)) {
|
||||||
@ -1341,7 +1341,7 @@ X_API int PL_unify_arg(int index, term_t tt, term_t arg)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
to = ArgOfTerm(index, t);
|
to = ArgOfTerm(index, t);
|
||||||
}
|
}
|
||||||
return Yap_unify(Yap_GetFromSlot(arg PASS_REGS),to);
|
return Yap_unify(Yap_GetFromSlot(arg),to);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SWI: int PL_unify_list(term_t ?t, term_t +h, term_t -t)
|
/* SWI: int PL_unify_list(term_t ?t, term_t +h, term_t -t)
|
||||||
@ -1354,7 +1354,7 @@ X_API int PL_unify_list_chars(term_t t, const char *chars)
|
|||||||
if (LOCAL_Error_TYPE && !Yap_SWIHandleError( "PL_unify_list_chars" ))
|
if (LOCAL_Error_TYPE && !Yap_SWIHandleError( "PL_unify_list_chars" ))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS), chterm);
|
return Yap_unify(Yap_GetFromSlot(t), chterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SWI: int PL_unify_list(term_t ?t, term_t +h, term_t -t)
|
/* SWI: int PL_unify_list(term_t ?t, term_t +h, term_t -t)
|
||||||
@ -1367,7 +1367,7 @@ X_API int PL_unify_list_ncodes(term_t t, size_t len, const char *chars)
|
|||||||
if (LOCAL_Error_TYPE && !Yap_SWIHandleError( "PL_unify_list_ncodes" ))
|
if (LOCAL_Error_TYPE && !Yap_SWIHandleError( "PL_unify_list_ncodes" ))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS), chterm);
|
return Yap_unify(Yap_GetFromSlot(t), chterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int
|
X_API int
|
||||||
@ -1379,7 +1379,7 @@ PL_unify_list_codes(term_t t, const char *chars)
|
|||||||
if (LOCAL_Error_TYPE && !Yap_SWIHandleError( "PL_unify_list_codes" ))
|
if (LOCAL_Error_TYPE && !Yap_SWIHandleError( "PL_unify_list_codes" ))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS), chterm);
|
return Yap_unify(Yap_GetFromSlot(t), chterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SWI: int PL_unify_nil(term_t ?l)
|
/* SWI: int PL_unify_nil(term_t ?l)
|
||||||
@ -1387,7 +1387,7 @@ PL_unify_list_codes(term_t t, const char *chars)
|
|||||||
X_API int PL_unify_nil(term_t t)
|
X_API int PL_unify_nil(term_t t)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS), TermNil);
|
return Yap_unify(Yap_GetFromSlot(t), TermNil);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SWI: int PL_unify_pointer(term_t ?t, void *ptr)
|
/* SWI: int PL_unify_pointer(term_t ?t, void *ptr)
|
||||||
@ -1397,7 +1397,7 @@ X_API int PL_unify_pointer(term_t t, void *ptr)
|
|||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term ptrterm = YAP_MkIntTerm((YAP_Int)ptr);
|
YAP_Term ptrterm = YAP_MkIntTerm((YAP_Int)ptr);
|
||||||
return YAP_Unify(Yap_GetFromSlot(t PASS_REGS), ptrterm);
|
return YAP_Unify(Yap_GetFromSlot(t ), ptrterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SWI: int PL_unify_list(term_t ?t, term_t +h, term_t -t)
|
/* SWI: int PL_unify_list(term_t ?t, term_t +h, term_t -t)
|
||||||
@ -1410,7 +1410,7 @@ X_API int PL_unify_string_chars(term_t t, const char *chars)
|
|||||||
if (LOCAL_Error_TYPE && !Yap_SWIHandleError( "PL_unify_list_ncodes" ))
|
if (LOCAL_Error_TYPE && !Yap_SWIHandleError( "PL_unify_list_ncodes" ))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS), chterm);
|
return Yap_unify(Yap_GetFromSlot(t), chterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_unify_string_nchars(term_t t, size_t len, const char *chars)
|
X_API int PL_unify_string_nchars(term_t t, size_t len, const char *chars)
|
||||||
@ -1421,7 +1421,7 @@ X_API int PL_unify_string_nchars(term_t t, size_t len, const char *chars)
|
|||||||
if (LOCAL_Error_TYPE && !Yap_SWIHandleError( "PL_unify_list_ncodes" ))
|
if (LOCAL_Error_TYPE && !Yap_SWIHandleError( "PL_unify_list_ncodes" ))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS), chterm);
|
return Yap_unify(Yap_GetFromSlot(t), chterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SWI: int PL_unify_wchars(term_t ?t, int type, size_t len,, const pl_wchar_t *s)
|
/* SWI: int PL_unify_wchars(term_t ?t, int type, size_t len,, const pl_wchar_t *s)
|
||||||
@ -1440,24 +1440,24 @@ X_API int PL_unify_wchars(term_t t, int type, size_t len, const pl_wchar_t *char
|
|||||||
if (at) {
|
if (at) {
|
||||||
Yap_AtomIncreaseHold(at);
|
Yap_AtomIncreaseHold(at);
|
||||||
chterm = MkAtomTerm(at);
|
chterm = MkAtomTerm(at);
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS), chterm);
|
return Yap_unify(Yap_GetFromSlot(t), chterm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PL_UTF8_STRING:
|
case PL_UTF8_STRING:
|
||||||
case PL_STRING:
|
case PL_STRING:
|
||||||
if ((chterm = Yap_NWCharsToString(chars, len PASS_REGS)) != 0) {
|
if ((chterm = Yap_NWCharsToString(chars, len PASS_REGS)) != 0) {
|
||||||
return YAP_Unify(Yap_GetFromSlot(t PASS_REGS), chterm);
|
return YAP_Unify(Yap_GetFromSlot(t ), chterm);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PL_CODE_LIST:
|
case PL_CODE_LIST:
|
||||||
if ((chterm = Yap_NWCharsToListOfCodes(chars, len PASS_REGS)) != 0) {
|
if ((chterm = Yap_NWCharsToListOfCodes(chars, len PASS_REGS)) != 0) {
|
||||||
return YAP_Unify(Yap_GetFromSlot(t PASS_REGS), chterm);
|
return YAP_Unify(Yap_GetFromSlot(t), chterm);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PL_CHAR_LIST:
|
case PL_CHAR_LIST:
|
||||||
if ((chterm = Yap_NWCharsToListOfAtoms(chars, len PASS_REGS)) != 0) {
|
if ((chterm = Yap_NWCharsToListOfAtoms(chars, len PASS_REGS)) != 0) {
|
||||||
return YAP_Unify(Yap_GetFromSlot(t PASS_REGS), chterm);
|
return YAP_Unify(Yap_GetFromSlot(t), chterm);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -1609,7 +1609,7 @@ int PL_unify_termv(term_t l, va_list ap)
|
|||||||
break;
|
break;
|
||||||
case PL_TERM:
|
case PL_TERM:
|
||||||
{
|
{
|
||||||
Term t = Yap_GetFromSlot(va_arg(ap, size_t) PASS_REGS);
|
Term t = Yap_GetFromSlot(va_arg(ap, size_t));
|
||||||
if (IsVarTerm(t) && VarOfTerm(t) >= ASP && VarOfTerm(t) < LCL0) {
|
if (IsVarTerm(t) && VarOfTerm(t) >= ASP && VarOfTerm(t) < LCL0) {
|
||||||
Yap_unify(*pt++, t);
|
Yap_unify(*pt++, t);
|
||||||
}
|
}
|
||||||
@ -1754,7 +1754,7 @@ int PL_unify_termv(term_t l, va_list ap)
|
|||||||
nels = stack[depth-1].nels;
|
nels = stack[depth-1].nels;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
res = Yap_unify(Yap_GetFromSlot(l PASS_REGS),a[0]);
|
res = Yap_unify(Yap_GetFromSlot(l),a[0]);
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@ -1791,7 +1791,7 @@ X_API int PL_term_type(term_t t)
|
|||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
/* YAP_ does not support strings as different objects */
|
/* YAP_ does not support strings as different objects */
|
||||||
YAP_Term v = Yap_GetFromSlot(t PASS_REGS);
|
YAP_Term v = Yap_GetFromSlot(t );
|
||||||
if (IsVarTerm(v)) {
|
if (IsVarTerm(v)) {
|
||||||
return PL_VARIABLE;
|
return PL_VARIABLE;
|
||||||
} else if (IsAtomTerm(v)) {
|
} else if (IsAtomTerm(v)) {
|
||||||
@ -1810,25 +1810,25 @@ X_API int PL_term_type(term_t t)
|
|||||||
X_API int PL_is_atom(term_t t)
|
X_API int PL_is_atom(term_t t)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
return IsAtomTerm(Yap_GetFromSlot(t PASS_REGS));
|
return IsAtomTerm(Yap_GetFromSlot(t));
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_is_ground(term_t t)
|
X_API int PL_is_ground(term_t t)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
return Yap_IsGroundTerm(Yap_GetFromSlot(t PASS_REGS));
|
return Yap_IsGroundTerm(Yap_GetFromSlot(t));
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_is_acyclic(term_t t)
|
X_API int PL_is_acyclic(term_t t)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
return Yap_IsAcyclicTerm(Yap_GetFromSlot(t PASS_REGS));
|
return Yap_IsAcyclicTerm(Yap_GetFromSlot(t));
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_is_callable(term_t t)
|
X_API int PL_is_callable(term_t t)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t1 = Yap_GetFromSlot(t PASS_REGS);
|
YAP_Term t1 = Yap_GetFromSlot(t);
|
||||||
if (IsVarTerm(t1))
|
if (IsVarTerm(t1))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (IsAtomTerm(t1) || IsPairTerm(t1))
|
if (IsAtomTerm(t1) || IsPairTerm(t1))
|
||||||
@ -1841,21 +1841,21 @@ X_API int PL_is_callable(term_t t)
|
|||||||
X_API int PL_is_atomic(term_t ts)
|
X_API int PL_is_atomic(term_t ts)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
return !IsVarTerm(t) || !IsApplTerm(t) || !IsPairTerm(t);
|
return !IsVarTerm(t) || !IsApplTerm(t) || !IsPairTerm(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_is_compound(term_t ts)
|
X_API int PL_is_compound(term_t ts)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
return (IsApplTerm(t) || IsPairTerm(t));
|
return (IsApplTerm(t) || IsPairTerm(t));
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_is_functor(term_t ts, functor_t f)
|
X_API int PL_is_functor(term_t ts, functor_t f)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
Functor ff = SWIFunctorToFunctor(f);
|
Functor ff = SWIFunctorToFunctor(f);
|
||||||
if (YAP_IsApplTerm(t)) {
|
if (YAP_IsApplTerm(t)) {
|
||||||
return FunctorOfTerm(t) == (Functor)ff;
|
return FunctorOfTerm(t) == (Functor)ff;
|
||||||
@ -1868,14 +1868,14 @@ X_API int PL_is_functor(term_t ts, functor_t f)
|
|||||||
X_API int PL_is_float(term_t ts)
|
X_API int PL_is_float(term_t ts)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
return !IsVarTerm(t) && IsFloatTerm(t);
|
return !IsVarTerm(t) && IsFloatTerm(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_is_integer(term_t ts)
|
X_API int PL_is_integer(term_t ts)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts );
|
||||||
if (IsVarTerm(t)) return FALSE;
|
if (IsVarTerm(t)) return FALSE;
|
||||||
if (IsIntTerm(t)) return TRUE;
|
if (IsIntTerm(t)) return TRUE;
|
||||||
if (IsApplTerm(t)) {
|
if (IsApplTerm(t)) {
|
||||||
@ -1893,14 +1893,14 @@ X_API int PL_is_integer(term_t ts)
|
|||||||
X_API int PL_is_list(term_t ts)
|
X_API int PL_is_list(term_t ts)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts );
|
||||||
return !IsVarTerm(t) && (t == TermNil || IsPairTerm(t));
|
return !IsVarTerm(t) && (t == TermNil || IsPairTerm(t));
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_is_pair(term_t ts)
|
X_API int PL_is_pair(term_t ts)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
return !IsVarTerm(t) && IsPairTerm(t);
|
return !IsVarTerm(t) && IsPairTerm(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1916,7 +1916,7 @@ PL_skip_list(term_t list, term_t tail, size_t *len)
|
|||||||
if ( len )
|
if ( len )
|
||||||
*len = length;
|
*len = length;
|
||||||
if ( tail )
|
if ( tail )
|
||||||
{ Term t2 = Yap_GetFromSlot(tail PASS_REGS);
|
{ Term t2 = Yap_GetFromSlot(tail);
|
||||||
|
|
||||||
Yap_unify(t2, *t);
|
Yap_unify(t2, *t);
|
||||||
}
|
}
|
||||||
@ -1935,29 +1935,29 @@ PL_skip_list(term_t list, term_t tail, size_t *len)
|
|||||||
X_API int PL_is_number(term_t ts)
|
X_API int PL_is_number(term_t ts)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
return IsIntegerTerm(t) || IsBigIntTerm(t) || IsFloatTerm(t);
|
return IsIntegerTerm(t) || IsBigIntTerm(t) || IsFloatTerm(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_is_string(term_t ts)
|
X_API int PL_is_string(term_t ts)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t = Yap_GetFromSlot(ts PASS_REGS);
|
Term t = Yap_GetFromSlot(ts);
|
||||||
return IsStringTerm(t);
|
return IsStringTerm(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_is_variable(term_t ts)
|
X_API int PL_is_variable(term_t ts)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t = Yap_GetFromSlot(ts PASS_REGS);
|
YAP_Term t = Yap_GetFromSlot(ts);
|
||||||
return YAP_IsVarTerm(t);
|
return YAP_IsVarTerm(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API int PL_compare(term_t ts1, term_t ts2)
|
X_API int PL_compare(term_t ts1, term_t ts2)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term t1 = Yap_GetFromSlot(ts1 PASS_REGS);
|
YAP_Term t1 = Yap_GetFromSlot(ts1);
|
||||||
YAP_Term t2 = Yap_GetFromSlot(ts2 PASS_REGS);
|
YAP_Term t2 = Yap_GetFromSlot(ts2);
|
||||||
return YAP_CompareTerms(t1, t2);
|
return YAP_CompareTerms(t1, t2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1966,7 +1966,7 @@ PL_record_external
|
|||||||
(term_t ts, size_t *sz)
|
(term_t ts, size_t *sz)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t = Yap_GetFromSlot(ts PASS_REGS);
|
Term t = Yap_GetFromSlot(ts);
|
||||||
size_t len = 512, nsz;
|
size_t len = 512, nsz;
|
||||||
char *s;
|
char *s;
|
||||||
|
|
||||||
@ -2015,7 +2015,7 @@ X_API record_t
|
|||||||
PL_record(term_t ts)
|
PL_record(term_t ts)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t = Yap_GetFromSlot(ts PASS_REGS);
|
Term t = Yap_GetFromSlot(ts);
|
||||||
return (record_t)YAP_Record(t);
|
return (record_t)YAP_Record(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2102,7 +2102,7 @@ PL_exception(qid_t q)
|
|||||||
YAP_Term t;
|
YAP_Term t;
|
||||||
if (YAP_GoalHasException(&t)) {
|
if (YAP_GoalHasException(&t)) {
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
term_t to = Yap_NewSlots(1 PASS_REGS);
|
term_t to = Yap_NewSlots(1);
|
||||||
Yap_PutInSlot(to,t PASS_REGS);
|
Yap_PutInSlot(to,t PASS_REGS);
|
||||||
return to;
|
return to;
|
||||||
} else {
|
} else {
|
||||||
@ -2179,7 +2179,7 @@ PL_strip_module(term_t raw, module_t *m, term_t plain)
|
|||||||
m0 = MkAtomTerm(AtomProlog);
|
m0 = MkAtomTerm(AtomProlog);
|
||||||
} else
|
} else
|
||||||
m0 = USER_MODULE;
|
m0 = USER_MODULE;
|
||||||
t = Yap_StripModule(Yap_GetFromSlot(raw PASS_REGS), &m0);
|
t = Yap_StripModule(Yap_GetFromSlot(raw), &m0);
|
||||||
if (!t)
|
if (!t)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
*m = Yap_GetModuleEntry(m0);
|
*m = Yap_GetModuleEntry(m0);
|
||||||
@ -2259,7 +2259,7 @@ X_API int PL_unify_predicate(term_t head, predicate_t pred, int how)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
nt = Yap_MkApplTerm(FunctorModule, 2, ts);
|
nt = Yap_MkApplTerm(FunctorModule, 2, ts);
|
||||||
return Yap_unify(Yap_GetFromSlot(head PASS_REGS),nt);
|
return Yap_unify(Yap_GetFromSlot(head),nt);
|
||||||
}
|
}
|
||||||
|
|
||||||
X_API void PL_predicate_info(predicate_t p,atom_t *name, int *arity, module_t *m)
|
X_API void PL_predicate_info(predicate_t p,atom_t *name, int *arity, module_t *m)
|
||||||
@ -2379,9 +2379,6 @@ PL_discard_foreign_frame(fid_t f)
|
|||||||
X_API qid_t PL_open_query(module_t ctx, int flags, predicate_t p, term_t t0)
|
X_API qid_t PL_open_query(module_t ctx, int flags, predicate_t p, term_t t0)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
YAP_Term *t = NULL;
|
|
||||||
if (t0)
|
|
||||||
t = Yap_AddressFromSlot(t0);
|
|
||||||
|
|
||||||
/* ignore flags and module for now */
|
/* ignore flags and module for now */
|
||||||
qid_t new = (qid_t)Yap_AllocCodeSpace(sizeof(struct open_query_struct));
|
qid_t new = (qid_t)Yap_AllocCodeSpace(sizeof(struct open_query_struct));
|
||||||
@ -2391,7 +2388,7 @@ X_API qid_t PL_open_query(module_t ctx, int flags, predicate_t p, term_t t0)
|
|||||||
new->q_state=0;
|
new->q_state=0;
|
||||||
new->q_flags = flags;
|
new->q_flags = flags;
|
||||||
new->q_pe = (PredEntry *)p;
|
new->q_pe = (PredEntry *)p;
|
||||||
new->q_g = t;
|
new->q_g = t0;
|
||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2475,7 +2472,7 @@ X_API int PL_call(term_t tp, module_t m)
|
|||||||
|
|
||||||
Term t[2], g;
|
Term t[2], g;
|
||||||
t[0] = SWIModuleToModule(m);
|
t[0] = SWIModuleToModule(m);
|
||||||
t[1] = Yap_GetFromSlot(tp PASS_REGS);
|
t[1] = Yap_GetFromSlot(tp );
|
||||||
g = Yap_MkApplTerm(FunctorModule,2,t);
|
g = Yap_MkApplTerm(FunctorModule,2,t);
|
||||||
out = YAP_RunGoal(g);
|
out = YAP_RunGoal(g);
|
||||||
|
|
||||||
@ -2554,7 +2551,7 @@ X_API void PL_load_extensions(const PL_extension *ptr)
|
|||||||
X_API int PL_is_inf(term_t st)
|
X_API int PL_is_inf(term_t st)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t = Deref(Yap_GetFromSlot(st PASS_REGS));
|
Term t = Deref(Yap_GetFromSlot(st));
|
||||||
if (IsVarTerm(t)) return FALSE;
|
if (IsVarTerm(t)) return FALSE;
|
||||||
if (!IsFloatTerm(t)) return FALSE;
|
if (!IsFloatTerm(t)) return FALSE;
|
||||||
#if HAVE_ISINF
|
#if HAVE_ISINF
|
||||||
@ -2638,7 +2635,7 @@ X_API int PL_unify_thread_id(term_t t, int i)
|
|||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term iterm = MkIntegerTerm(i);
|
Term iterm = MkIntegerTerm(i);
|
||||||
return Yap_unify(Yap_GetFromSlot(t PASS_REGS),iterm);
|
return Yap_unify(Yap_GetFromSlot(t),iterm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2821,7 +2818,7 @@ X_API int
|
|||||||
PL_eval_expression_to_int64_ex(term_t t, int64_t *val)
|
PL_eval_expression_to_int64_ex(term_t t, int64_t *val)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term res = Yap_Eval(Yap_GetFromSlot(t PASS_REGS));
|
Term res = Yap_Eval(Yap_GetFromSlot(t));
|
||||||
if (!res) {
|
if (!res) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -3126,7 +3123,7 @@ Int Yap_StreamToFileNo(Term t) {
|
|||||||
IOSTREAM *s;
|
IOSTREAM *s;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if ( (rc=PL_get_stream_handle(Yap_InitSlot(t PASS_REGS), &s)) ) {
|
if ( (rc=PL_get_stream_handle(Yap_InitSlot(t), &s)) ) {
|
||||||
return Sfileno(s);
|
return Sfileno(s);
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
@ -3138,7 +3135,7 @@ FILE *Yap_FileDescriptorFromStream(Term t)
|
|||||||
IOSTREAM *s;
|
IOSTREAM *s;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if ( (rc=PL_get_stream_handle(Yap_InitSlot(t PASS_REGS), &s)) ) {
|
if ( (rc=PL_get_stream_handle(Yap_InitSlot(t), &s)) ) {
|
||||||
fprintf(stderr,"Unimplemented\n");
|
fprintf(stderr,"Unimplemented\n");
|
||||||
// return Sfileno(s);
|
// return Sfileno(s);
|
||||||
}
|
}
|
||||||
@ -3183,7 +3180,7 @@ extern term_t Yap_CvtTerm(term_t ts);
|
|||||||
term_t Yap_CvtTerm(term_t ts)
|
term_t Yap_CvtTerm(term_t ts)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t = Yap_GetFromSlot(ts PASS_REGS);
|
Term t = Yap_GetFromSlot(ts);
|
||||||
if (IsVarTerm(t)) return ts;
|
if (IsVarTerm(t)) return ts;
|
||||||
if (IsPairTerm(t)) return ts;
|
if (IsPairTerm(t)) return ts;
|
||||||
if (IsAtomTerm(t)) return ts;
|
if (IsAtomTerm(t)) return ts;
|
||||||
@ -3207,7 +3204,7 @@ term_t Yap_CvtTerm(term_t ts)
|
|||||||
ta[1] = Yap_MkBigIntTerm(mpq_denref(b));
|
ta[1] = Yap_MkBigIntTerm(mpq_denref(b));
|
||||||
if (ta[1] == TermNil)
|
if (ta[1] == TermNil)
|
||||||
return ts;
|
return ts;
|
||||||
return Yap_InitSlot(Yap_MkApplTerm(FunctorRDiv, 2, ta) PASS_REGS);
|
return Yap_InitSlot(Yap_MkApplTerm(FunctorRDiv, 2, ta));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
case EMPTY_ARENA:
|
case EMPTY_ARENA:
|
||||||
@ -3215,14 +3212,14 @@ term_t Yap_CvtTerm(term_t ts)
|
|||||||
case ARRAY_FLOAT:
|
case ARRAY_FLOAT:
|
||||||
case CLAUSE_LIST:
|
case CLAUSE_LIST:
|
||||||
case EXTERNAL_BLOB:
|
case EXTERNAL_BLOB:
|
||||||
return Yap_InitSlot(MkIntTerm(0) PASS_REGS);
|
return Yap_InitSlot(MkIntTerm(0));
|
||||||
default:
|
default:
|
||||||
return ts;
|
return ts;
|
||||||
}
|
}
|
||||||
} else if (f == FunctorDBRef) {
|
} else if (f == FunctorDBRef) {
|
||||||
Term ta[0];
|
Term ta[0];
|
||||||
ta[0] = MkIntegerTerm((Int)DBRefOfTerm(t));
|
ta[0] = MkIntegerTerm((Int)DBRefOfTerm(t));
|
||||||
return Yap_InitSlot(Yap_MkApplTerm(FunctorDBREF, 1, ta) PASS_REGS);
|
return Yap_InitSlot(Yap_MkApplTerm(FunctorDBREF, 1, ta));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3233,4 +3230,3 @@ term_t Yap_CvtTerm(term_t ts)
|
|||||||
* @}
|
* @}
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -37,18 +37,6 @@
|
|||||||
void Yap_swi_install(void);
|
void Yap_swi_install(void);
|
||||||
void Yap_install_blobs(void);
|
void Yap_install_blobs(void);
|
||||||
|
|
||||||
typedef struct open_query_struct {
|
|
||||||
int q_open;
|
|
||||||
int q_state;
|
|
||||||
YAP_Term *q_g;
|
|
||||||
PredEntry *q_pe;
|
|
||||||
yamop *q_p, *q_cp;
|
|
||||||
jmp_buf q_env;
|
|
||||||
int q_flags;
|
|
||||||
YAP_dogoalinfo q_h;
|
|
||||||
struct open_query_struct *oq;
|
|
||||||
} open_query;
|
|
||||||
|
|
||||||
#define addr_hash(V) (((CELL) (V)) >> 4 & (N_SWI_HASH-1))
|
#define addr_hash(V) (((CELL) (V)) >> 4 & (N_SWI_HASH-1))
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
|
@ -1099,4 +1099,3 @@ pages = {14--17}
|
|||||||
Data Representation in the BinWAM. {\em Proc.~of Programming
|
Data Representation in the BinWAM. {\em Proc.~of Programming
|
||||||
Languages Implementation and Logic Programming (PLILP'94)}, LNCS
|
Languages Implementation and Logic Programming (PLILP'94)}, LNCS
|
||||||
844, Madrid 1994.
|
844, Madrid 1994.
|
||||||
|
|
||||||
|
@ -39,7 +39,8 @@ Agc_hook AGCHook =NULL
|
|||||||
|
|
||||||
#if __ANDROID__
|
#if __ANDROID__
|
||||||
// no need to perform initialization, it is done before we start the Prolog engine.
|
// no need to perform initialization, it is done before we start the Prolog engine.
|
||||||
struct AAssetManager* assetManager =GLOBAL_assetManager
|
struct AAssetManager* assetManager =NULL
|
||||||
|
char* AssetsWD =NULL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* multi-thread support */
|
/* multi-thread support */
|
||||||
|
@ -130,23 +130,33 @@ startemulator () {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
androidize () {
|
||||||
|
cd packages/swig
|
||||||
|
mkdir -p "$ANDROID_NDK_ROOT"/build/core/lib
|
||||||
|
make install-android
|
||||||
|
cd ../..
|
||||||
|
}
|
||||||
|
|
||||||
cd $BUILDDROID
|
cd $BUILDDROID
|
||||||
|
|
||||||
if test x$1 = xmake
|
export HOST="$ANDROID_ARCH"-linux-androideabi
|
||||||
then
|
export CPP="$HOST"-cpp
|
||||||
./config.status
|
export DESTDIR=`pwd`/packages/swig/android
|
||||||
make -j install
|
export PATH="$PATH":/usr/local/bin
|
||||||
rm -r packages/swig/android
|
|
||||||
elif test x$1 = xenv
|
if test x$1 = xenv
|
||||||
then
|
then
|
||||||
return 0
|
return 0
|
||||||
elif test x$1 = xdmake
|
elif test x$1 = xdmake
|
||||||
then
|
then
|
||||||
make
|
make
|
||||||
elif test x$1 = xgo
|
elif test x$1 = xmake
|
||||||
then
|
then
|
||||||
echo "In make I believe"
|
pushd packages/swig
|
||||||
|
make clean
|
||||||
|
popd
|
||||||
|
./config.status
|
||||||
|
CFLAGS="-g" make -j install
|
||||||
elif test x$1 = xeclipse
|
elif test x$1 = xeclipse
|
||||||
then
|
then
|
||||||
startemulator
|
startemulator
|
||||||
@ -156,24 +166,21 @@ else
|
|||||||
startemulator
|
startemulator
|
||||||
rm -rf "$BUILDDROID"/*
|
rm -rf "$BUILDDROID"/*
|
||||||
cd "$BUILDDROID"
|
cd "$BUILDDROID"
|
||||||
export HOST="$ANDROID_ARCH"-linux-androideabi
|
|
||||||
export CPP="$HOST"-cpp
|
|
||||||
"$YAP_SRC"/configure \
|
"$YAP_SRC"/configure \
|
||||||
--host="$HOST" \
|
--host="$HOST" \
|
||||||
--prefix=`pwd` \
|
|
||||||
--enable-low-level-tracer \
|
--enable-low-level-tracer \
|
||||||
--enable-debug-yap \
|
--enable-debug-yap \
|
||||||
--enable-dynamic-loading \
|
--enable-dynamic-loading \
|
||||||
|
--bindir=/usr/bin \
|
||||||
|
--prefix=/assets \
|
||||||
|
--enable-dynamic-loading \
|
||||||
--with-swig \
|
--with-swig \
|
||||||
--with-gmp=$GMPDIR \
|
--with-gmp="$GMPDIR" \
|
||||||
--with-sqlite3=$SQLITE3DIR #\
|
--with-sqlite3="$SQLITE3DIR"
|
||||||
|
|
||||||
|
#\
|
||||||
#--enable-chr=yes #--enable-threads
|
#--enable-chr=yes #--enable-threads
|
||||||
make depend
|
make depend
|
||||||
make -j install
|
CFLAGS="-g" make -j install
|
||||||
fi
|
fi
|
||||||
cd packages/swig
|
androidize
|
||||||
mkdir -p "$ANDROID_NDK_ROOT"/build/core/lib
|
|
||||||
make android
|
|
||||||
make install-android
|
|
||||||
adb uninstall pt.up.fc.dcc.yap
|
|
||||||
adb install android/bin/JavaYap-debug.apk
|
|
||||||
|
@ -369,9 +369,6 @@ PL_EXPORT(int) StryLock(IOSTREAM *s);
|
|||||||
PL_EXPORT(int) Sunlock(IOSTREAM *s);
|
PL_EXPORT(int) Sunlock(IOSTREAM *s);
|
||||||
PL_EXPORT(IOSTREAM *) Snew(void *handle, int flags, IOFUNCTIONS *functions);
|
PL_EXPORT(IOSTREAM *) Snew(void *handle, int flags, IOFUNCTIONS *functions);
|
||||||
PL_EXPORT(IOSTREAM *) Sopen_file(const char *path, const char *how);
|
PL_EXPORT(IOSTREAM *) Sopen_file(const char *path, const char *how);
|
||||||
#ifdef ANDROID_ASSET_MANAGER_H
|
|
||||||
PL_EXPORT(IOSTREAM *) Sopen_asset(char *bufp, const char *how, AAssetManager* mgr);
|
|
||||||
#endif
|
|
||||||
PL_EXPORT(IOSTREAM *) Sfdopen(int fd, const char *type);
|
PL_EXPORT(IOSTREAM *) Sfdopen(int fd, const char *type);
|
||||||
PL_EXPORT(int) Sfileno(IOSTREAM *s);
|
PL_EXPORT(int) Sfileno(IOSTREAM *s);
|
||||||
PL_EXPORT(IOSTREAM *) Sopen_pipe(const char *command, const char *type);
|
PL_EXPORT(IOSTREAM *) Sopen_pipe(const char *command, const char *type);
|
||||||
|
54
os/pl-file.c
54
os/pl-file.c
@ -3533,15 +3533,6 @@ openStream(term_t file, term_t mode, term_t options)
|
|||||||
#endif /*HAVE_POPEN*/
|
#endif /*HAVE_POPEN*/
|
||||||
if ( PL_get_file_name(file, &path, 0) )
|
if ( PL_get_file_name(file, &path, 0) )
|
||||||
{
|
{
|
||||||
#if __ANDROID__
|
|
||||||
if (strstr(path,"/assets/")) {
|
|
||||||
if (!(s=Sopen_asset(path+8, "r", GLOBAL_assetManager)))
|
|
||||||
{ PL_error(NULL, 0, OsError(), ERR_FILE_OPERATION,
|
|
||||||
ATOM_open, ATOM_source_sink, file);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
} else
|
|
||||||
#endif
|
|
||||||
if ( !(s = Sopen_file(path, how)) )
|
if ( !(s = Sopen_file(path, how)) )
|
||||||
{ PL_error(NULL, 0, OsError(), ERR_FILE_OPERATION,
|
{ PL_error(NULL, 0, OsError(), ERR_FILE_OPERATION,
|
||||||
ATOM_open, ATOM_source_sink, file);
|
ATOM_open, ATOM_source_sink, file);
|
||||||
@ -5327,13 +5318,13 @@ peek(term_t stream, term_t chr, int how ARG_LD)
|
|||||||
|
|
||||||
if ( how == PL_BYTE )
|
if ( how == PL_BYTE )
|
||||||
{ IOPOS pos = s->posbuf;
|
{ IOPOS pos = s->posbuf;
|
||||||
|
|
||||||
c = Sgetc(s);
|
c = Sgetc(s);
|
||||||
if ( c != EOF )
|
if ( c != EOF ){
|
||||||
Sungetc(c, s);
|
Sungetc(c, s);
|
||||||
|
}
|
||||||
s->posbuf = pos;
|
s->posbuf = pos;
|
||||||
} else
|
} else {
|
||||||
{ c = Speekcode(s);
|
c = Speekcode(s);
|
||||||
}
|
}
|
||||||
if ( Sferror(s) )
|
if ( Sferror(s) )
|
||||||
return streamStatus(s);
|
return streamStatus(s);
|
||||||
@ -5755,7 +5746,7 @@ BeginPredDefs(file)
|
|||||||
PRED_DEF("get0", 1, get_code1, 0)
|
PRED_DEF("get0", 1, get_code1, 0)
|
||||||
PRED_DEF("ttyflush", 0, ttyflush, 0)
|
PRED_DEF("ttyflush", 0, ttyflush, 0)
|
||||||
PRED_DEF("prompt", 2, prompt, 0)
|
PRED_DEF("prompt", 2, prompt, 0)
|
||||||
PRED_DEF("tab", 2, tab2, 0)
|
PRED_DEF("tab", 2, tab2, 0)
|
||||||
PRED_DEF("tab", 1, tab1, 0)
|
PRED_DEF("tab", 1, tab1, 0)
|
||||||
/* Quintus IO */
|
/* Quintus IO */
|
||||||
PRED_DEF("byte_count", 2, byte_count, 0)
|
PRED_DEF("byte_count", 2, byte_count, 0)
|
||||||
@ -5883,20 +5874,20 @@ static const PL_extension foreigns[] = {
|
|||||||
FRG("print", 1, pl_print, 0),
|
FRG("print", 1, pl_print, 0),
|
||||||
FRG("writeln", 1, pl_writeln, 0),
|
FRG("writeln", 1, pl_writeln, 0),
|
||||||
FRG("nl", 1, pl_nl1, ISO),
|
FRG("nl", 1, pl_nl1, ISO),
|
||||||
FRG("format", 2, pl_format, META),
|
FRG("format", 2, pl_format, METAP),
|
||||||
|
|
||||||
FRG("write", 2, pl_write2, ISO),
|
FRG("write", 2, pl_write2, ISO),
|
||||||
FRG("writeq", 2, pl_writeq2, ISO),
|
FRG("writeq", 2, pl_writeq2, ISO),
|
||||||
FRG("print", 2, pl_print2, 0),
|
FRG("print", 2, pl_print2, 0),
|
||||||
FRG("write_canonical", 2, pl_write_canonical2, ISO),
|
FRG("write_canonical", 2, pl_write_canonical2, ISO),
|
||||||
FRG("format", 3, pl_format3, META),
|
FRG("format", 3, pl_format3, METAP),
|
||||||
FRG("sleep", 1, pl_sleep, 0),
|
FRG("sleep", 1, pl_sleep, 0),
|
||||||
FRG("get_time", 1, pl_get_time, 0),
|
FRG("get_time", 1, pl_get_time, 0),
|
||||||
|
|
||||||
// vsc
|
// vsc
|
||||||
FRG("format_predicate", 2, pl_format_predicate, META),
|
FRG("format_predicate", 2, pl_format_predicate, METAP),
|
||||||
FRG("current_format_predicate", 2, pl_current_format_predicate,
|
FRG("current_format_predicate", 2, pl_current_format_predicate,
|
||||||
META|NDET),
|
METAP|NDET),
|
||||||
FRG("$raw_read", 1, pl_raw_read, 0),
|
FRG("$raw_read", 1, pl_raw_read, 0),
|
||||||
FRG("$raw_read", 2, pl_raw_read2, 0),
|
FRG("$raw_read", 2, pl_raw_read2, 0),
|
||||||
|
|
||||||
@ -5906,32 +5897,6 @@ static const PL_extension foreigns[] = {
|
|||||||
LFRG((char *)NULL, 0, NULL, 0)
|
LFRG((char *)NULL, 0, NULL, 0)
|
||||||
};
|
};
|
||||||
|
|
||||||
#if __ANDROID__
|
|
||||||
JNIEnv *Yap_jenv;
|
|
||||||
|
|
||||||
void Java_pt_up_fc_dcc_yap_JavaYap_load(JNIEnv *env0, jobject obj, jobject mgr);
|
|
||||||
|
|
||||||
void Java_pt_up_fc_dcc_yap_JavaYap_load
|
|
||||||
(JNIEnv *env0, jobject obj, jobject mgr0)
|
|
||||||
{
|
|
||||||
AAssetManager *mgr = AAssetManager_fromJava(env0, mgr0);
|
|
||||||
Yap_jenv = env0;
|
|
||||||
if (mgr == NULL) {
|
|
||||||
__android_log_print(ANDROID_LOG_DEBUG, "YapJava", "Need to print : we're doomed, mgr = 0; bip bip bip");
|
|
||||||
} else {
|
|
||||||
__android_log_print(ANDROID_LOG_DEBUG, "YapJava", "Need to print : we're winning, mgr = %p; yeah", mgr);
|
|
||||||
GLOBAL_assetManager = mgr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
AAssetManager *Yap_assetManager( void );
|
|
||||||
|
|
||||||
AAssetManager *Yap_assetManager( void )
|
|
||||||
{
|
|
||||||
return GLOBAL_assetManager;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
struct PL_local_data *Yap_InitThreadIO(int wid)
|
struct PL_local_data *Yap_InitThreadIO(int wid)
|
||||||
{
|
{
|
||||||
@ -6046,4 +6011,3 @@ init_yap(void)
|
|||||||
/**
|
/**
|
||||||
@}
|
@}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
146
os/pl-files.c
146
os/pl-files.c
@ -122,25 +122,12 @@ LastModifiedFile(const char *name, double *tp)
|
|||||||
char tmp[MAXPATHLEN];
|
char tmp[MAXPATHLEN];
|
||||||
statstruct buf;
|
statstruct buf;
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
if (strstr(name,"/assets")) {
|
if (Yap_isAsset(name)) {
|
||||||
AAssetManager* mgr = GLOBAL_assetManager;
|
if ( statfunc(OsPath("/", tmp), &buf) < 0 )
|
||||||
*tp = (double)0;
|
|
||||||
if (!strcmp(name,"/assets"))
|
|
||||||
return TRUE;
|
|
||||||
const char *bufp=name+strlen("/assets/");
|
|
||||||
// check if file is a directory.
|
|
||||||
AAssetDir *assetDir = AAssetManager_openDir(mgr, bufp);
|
|
||||||
if (assetDir) {
|
|
||||||
const char *ptr = AAssetDir_getNextFileName(assetDir) ;
|
|
||||||
AAssetDir_close(assetDir);
|
|
||||||
if (ptr)
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
AAsset *asset = AAssetManager_open(mgr, bufp, AASSET_MODE_UNKNOWN);
|
|
||||||
if (!asset)
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
AAsset_close(asset);
|
|
||||||
return TRUE;
|
*tp = (double)buf.st_mtime;
|
||||||
|
return Yap_AccessAsset(name, R_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -202,31 +189,19 @@ LastModifiedFile64(const char *name, int64_t *tp)
|
|||||||
char tmp[MAXPATHLEN];
|
char tmp[MAXPATHLEN];
|
||||||
statstruct buf;
|
statstruct buf;
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
if (strstr(name,"/assets")) {
|
if (Yap_isAsset(name)) {
|
||||||
AAssetManager* mgr = GLOBAL_assetManager;
|
if ( statfunc(OsPath("/", tmp), &buf) < 0 ) {
|
||||||
*tp = (int64_t)0;
|
|
||||||
if (!strcmp(name,"/assets"))
|
|
||||||
return TRUE;
|
|
||||||
const char *bufp=name+strlen("/assets/");
|
|
||||||
// check if file is a directory.
|
|
||||||
AAssetDir *assetDir = AAssetManager_openDir(mgr, bufp);
|
|
||||||
if (assetDir) {
|
|
||||||
const char *ptr = AAssetDir_getNextFileName(assetDir) ;
|
|
||||||
AAssetDir_close(assetDir);
|
|
||||||
if (ptr)
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
AAsset *asset = AAssetManager_open(mgr, bufp, AASSET_MODE_UNKNOWN);
|
|
||||||
if (!asset)
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
AAsset_close(asset);
|
}
|
||||||
return TRUE;
|
*tp = (int64_t)buf.st_mtime;
|
||||||
|
return Yap_AccessAsset(name, R_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ( statfunc(OsPath(name, tmp), &buf) < 0 )
|
if ( statfunc(OsPath(name, tmp), &buf) < 0 ){
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
*tp = (int64_t)buf.st_mtime;
|
*tp = (int64_t)buf.st_mtime;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -246,26 +221,9 @@ SizeFile(const char *path)
|
|||||||
statstruct buf;
|
statstruct buf;
|
||||||
|
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
if (strstr(path,"/assets")) {
|
if (Yap_isAsset(path)) {
|
||||||
AAssetManager* mgr = GLOBAL_assetManager;
|
return Yap_AssetSize( path );
|
||||||
if (!strcmp(path,"/assets"))
|
|
||||||
return 0;
|
|
||||||
const char *bufp=path+strlen("/assets/");
|
|
||||||
// check if file is a directory.
|
|
||||||
AAssetDir *assetDir = AAssetManager_openDir(mgr, bufp);
|
|
||||||
if (assetDir) {
|
|
||||||
const char *ptr = AAssetDir_getNextFileName(assetDir) ;
|
|
||||||
AAssetDir_close(assetDir);
|
|
||||||
if (ptr)
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
AAsset *asset = AAssetManager_open(mgr, bufp, AASSET_MODE_UNKNOWN);
|
|
||||||
if (!asset)
|
|
||||||
return -1;
|
|
||||||
AAsset_close(asset);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
if ( statfunc(OsPath(path, tmp), &buf) < 0 )
|
if ( statfunc(OsPath(path, tmp), &buf) < 0 )
|
||||||
return -1;
|
return -1;
|
||||||
@ -288,36 +246,6 @@ ACCESS_WRITE and ACCESS_EXECUTE.
|
|||||||
int
|
int
|
||||||
AccessFile(const char *path, int mode)
|
AccessFile(const char *path, int mode)
|
||||||
{ char tmp[MAXPATHLEN];
|
{ char tmp[MAXPATHLEN];
|
||||||
#ifdef __ANDROID__
|
|
||||||
if (strstr(path,"/assets")) {
|
|
||||||
AAssetManager* mgr = GLOBAL_assetManager;
|
|
||||||
if (!strcmp(path,"/assets"))
|
|
||||||
return !(mode & ACCESS_WRITE );
|
|
||||||
const char *bufp=path+strlen("/assets/");
|
|
||||||
// check if file is a directory.
|
|
||||||
AAssetDir *assetDir = AAssetManager_openDir(mgr, bufp);
|
|
||||||
if (assetDir) {
|
|
||||||
const char *ptr = AAssetDir_getNextFileName(assetDir) ;
|
|
||||||
AAssetDir_close(assetDir);
|
|
||||||
if (ptr)
|
|
||||||
return !(mode & ACCESS_WRITE );
|
|
||||||
}
|
|
||||||
AAsset *asset = AAssetManager_open(mgr, bufp, AASSET_MODE_UNKNOWN);
|
|
||||||
if (!asset)
|
|
||||||
return FALSE;
|
|
||||||
AAsset_close(asset);
|
|
||||||
if ( mode == ACCESS_EXIST )
|
|
||||||
return TRUE;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( mode & ACCESS_WRITE ) return FALSE;
|
|
||||||
#ifdef X_OK
|
|
||||||
if ( mode & ACCESS_EXECUTE ) return FALSE;
|
|
||||||
#endif
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_ACCESS
|
#ifdef HAVE_ACCESS
|
||||||
int m = 0;
|
int m = 0;
|
||||||
|
|
||||||
@ -331,6 +259,11 @@ AccessFile(const char *path, int mode)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __ANDROID__
|
||||||
|
if (Yap_isAsset(path)) {
|
||||||
|
return !(mode & ACCESS_WRITE ) && Yap_AccessAsset(path, m);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return access(OsPath(path, tmp), m) == 0 ? TRUE : FALSE;
|
return access(OsPath(path, tmp), m) == 0 ? TRUE : FALSE;
|
||||||
#else
|
#else
|
||||||
# error "No implementation for AccessFile()"
|
# error "No implementation for AccessFile()"
|
||||||
@ -348,24 +281,8 @@ ExistsFile(const char *path)
|
|||||||
statstruct buf;
|
statstruct buf;
|
||||||
|
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
if (strstr(path,"/assets")) {
|
if (Yap_isAsset(path)) {
|
||||||
AAssetManager* mgr = GLOBAL_assetManager;
|
return Yap_AssetIsFile(path);
|
||||||
if (!strcmp(path,"/assets"))
|
|
||||||
return TRUE;
|
|
||||||
const char *bufp=path+strlen("/assets/");
|
|
||||||
// check if file is a directory.
|
|
||||||
AAssetDir *assetDir = AAssetManager_openDir(mgr, bufp);
|
|
||||||
if (assetDir) {
|
|
||||||
const char *ptr = AAssetDir_getNextFileName(assetDir) ;
|
|
||||||
AAssetDir_close(assetDir);
|
|
||||||
if (ptr)
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
AAsset *asset = AAssetManager_open(mgr, bufp, AASSET_MODE_UNKNOWN);
|
|
||||||
if (!asset)
|
|
||||||
return FALSE;
|
|
||||||
AAsset_close(asset);
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if ( statfunc(OsPath(path, tmp), &buf) == -1 || !S_ISREG(buf.st_mode) )
|
if ( statfunc(OsPath(path, tmp), &buf) == -1 || !S_ISREG(buf.st_mode) )
|
||||||
@ -388,21 +305,8 @@ ExistsDirectory(const char *path)
|
|||||||
statstruct buf;
|
statstruct buf;
|
||||||
|
|
||||||
#ifdef __ANDROID__
|
#ifdef __ANDROID__
|
||||||
if (strstr(ospath,"/assets")) {
|
if (Yap_isAsset(ospath)) {
|
||||||
AAssetManager* mgr = GLOBAL_assetManager;
|
return Yap_AssetIsDir(ospath);
|
||||||
const char *ptr = NULL;
|
|
||||||
|
|
||||||
if (!strcmp(path,"/assets"))
|
|
||||||
return TRUE;
|
|
||||||
const char *bufp=path+strlen("/assets/");
|
|
||||||
// check if file is a directory.
|
|
||||||
AAssetDir *assetDir = AAssetManager_openDir(mgr, bufp);
|
|
||||||
if (assetDir)
|
|
||||||
ptr = AAssetDir_getNextFileName(assetDir);
|
|
||||||
if (assetDir) {
|
|
||||||
AAssetDir_close(assetDir);
|
|
||||||
}
|
|
||||||
return ptr != NULL;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if ( statfunc(ospath, &buf) < 0 )
|
if ( statfunc(ospath, &buf) < 0 )
|
||||||
@ -688,12 +592,10 @@ get_file_name(term_t n, char **namep, char *tmp, int flags)
|
|||||||
if ( len+1 >= MAXPATHLEN )
|
if ( len+1 >= MAXPATHLEN )
|
||||||
return PL_error(NULL, 0, NULL, ERR_REPRESENTATION,
|
return PL_error(NULL, 0, NULL, ERR_REPRESENTATION,
|
||||||
ATOM_max_path_length);
|
ATOM_max_path_length);
|
||||||
|
|
||||||
if ( truePrologFlag(PLFLAG_FILEVARS) )
|
if ( truePrologFlag(PLFLAG_FILEVARS) )
|
||||||
{ if ( !(name = expandVars(name, tmp, MAXPATHLEN)) )
|
{ if ( !(name = expandVars(name, tmp, MAXPATHLEN)) )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !(flags & PL_FILE_NOERRORS) )
|
if ( !(flags & PL_FILE_NOERRORS) )
|
||||||
{ atom_t op = 0;
|
{ atom_t op = 0;
|
||||||
|
|
||||||
@ -735,7 +637,6 @@ PL_get_file_name(term_t n, char **namep, int flags)
|
|||||||
{ if ( !(name = OsPath(name, ospath)) )
|
{ if ( !(name = OsPath(name, ospath)) )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
*namep = buffer_string(name, BUF_RING);
|
*namep = buffer_string(name, BUF_RING);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1138,7 +1039,6 @@ PRED_IMPL("$absolute_file_name", 2, absolute_file_name, 0)
|
|||||||
|
|
||||||
term_t name = A1;
|
term_t name = A1;
|
||||||
term_t expanded = A2;
|
term_t expanded = A2;
|
||||||
|
|
||||||
if ( PL_get_file_name(name, &n, 0) &&
|
if ( PL_get_file_name(name, &n, 0) &&
|
||||||
(n = AbsoluteFile(n, tmp)) )
|
(n = AbsoluteFile(n, tmp)) )
|
||||||
return PL_unify_chars(expanded, PL_ATOM|REP_FN, -1, n);
|
return PL_unify_chars(expanded, PL_ATOM|REP_FN, -1, n);
|
||||||
|
1193
os/pl-os.c
1193
os/pl-os.c
File diff suppressed because it is too large
Load Diff
@ -144,16 +144,16 @@ unifyList(term_t term, list_ctx *ctx)
|
|||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
if (!CloseList(ctx->gstore, TermNil))
|
if (!CloseList(ctx->gstore, TermNil))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
return Yap_unify(Yap_GetFromSlot(term PASS_REGS), ctx->start);
|
return Yap_unify(Yap_GetFromSlot(term), ctx->start);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
unifyDiffList(term_t head, term_t tail, list_ctx *ctx)
|
unifyDiffList(term_t head, term_t tail, list_ctx *ctx)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
if (!CloseList(ctx->gstore, Yap_GetFromSlot(tail PASS_REGS)))
|
if (!CloseList(ctx->gstore, Yap_GetFromSlot(tail)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
return Yap_unify(Yap_GetFromSlot(head PASS_REGS), ctx->start);
|
return Yap_unify(Yap_GetFromSlot(head), ctx->start);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
@ -1182,7 +1182,7 @@ read_clause(IOSTREAM *s, term_t term, term_t options ARG_LD)
|
|||||||
PL_TERM, term,
|
PL_TERM, term,
|
||||||
PL_TERM, tpos );
|
PL_TERM, tpos );
|
||||||
}
|
}
|
||||||
ap = Yap_PredFromClause( Yap_GetFromSlot(term PASS_REGS) PASS_REGS);
|
ap = Yap_PredFromClause( Yap_GetFromSlot(term) PASS_REGS);
|
||||||
if (rd.styleCheck & (DISCONTIGUOUS_STYLE|MULTIPLE_CHECK) && ap != NULL ) {
|
if (rd.styleCheck & (DISCONTIGUOUS_STYLE|MULTIPLE_CHECK) && ap != NULL ) {
|
||||||
if ( rd.styleCheck & (DISCONTIGUOUS_STYLE) && Yap_discontiguous( ap PASS_REGS) ) {
|
if ( rd.styleCheck & (DISCONTIGUOUS_STYLE) && Yap_discontiguous( ap PASS_REGS) ) {
|
||||||
printMessage(ATOM_warning,
|
printMessage(ATOM_warning,
|
||||||
@ -1541,7 +1541,7 @@ Yap_StringToTerm(const char *s, size_t len, term_t bindings)
|
|||||||
|
|
||||||
init_read_data(&rd, stream PASS_LD);
|
init_read_data(&rd, stream PASS_LD);
|
||||||
rd.varnames = bindings;
|
rd.varnames = bindings;
|
||||||
term_t tt = Yap_NewSlots(1 PASS_REGS);
|
term_t tt = Yap_NewSlots(1);
|
||||||
|
|
||||||
if ( !(rval = read_term(tt, &rd PASS_LD)) && rd.has_exception ) {
|
if ( !(rval = read_term(tt, &rd PASS_LD)) && rd.has_exception ) {
|
||||||
rval = PL_raise_exception(rd.exception);
|
rval = PL_raise_exception(rd.exception);
|
||||||
@ -1552,7 +1552,7 @@ Sclose(stream);
|
|||||||
LD->read_source = oldsrc;
|
LD->read_source = oldsrc;
|
||||||
|
|
||||||
// getchar();
|
// getchar();
|
||||||
return Yap_GetFromSlot( tt PASS_REGS);
|
return Yap_GetFromSlot( tt);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @pred atom_to_term(+ _Atom_, - _Term_, - _Bindings_)
|
/** @pred atom_to_term(+ _Atom_, - _Term_, - _Bindings_)
|
||||||
@ -1638,4 +1638,3 @@ PRED_DEF("$qq_open", 2, qq_open, 0)
|
|||||||
EndPredDefs
|
EndPredDefs
|
||||||
|
|
||||||
//! @}
|
//! @}
|
||||||
|
|
||||||
|
122
os/pl-stream.c
122
os/pl-stream.c
@ -44,11 +44,16 @@
|
|||||||
#include <android/asset_manager.h>
|
#include <android/asset_manager.h>
|
||||||
#include <android/asset_manager_jni.h>
|
#include <android/asset_manager_jni.h>
|
||||||
#include <android/log.h>
|
#include <android/log.h>
|
||||||
|
|
||||||
|
int Yap_isAsset( const char *path );
|
||||||
|
|
||||||
|
#define LOG(...) __android_log_print(ANDROID_LOG_DEBUG,"YAP Stream", __VA_ARGS__)
|
||||||
#else
|
#else
|
||||||
#define __android_log_print(i,loc,msg,...)
|
#define __android_log_print(i,loc,msg,...)
|
||||||
#define ANDROID_LOG_INFO 0
|
#define ANDROID_LOG_INFO 0
|
||||||
#define ANDROID_LOG_ERROR 0
|
#define ANDROID_LOG_ERROR 0
|
||||||
#define ANDROID_LOG_DEBUG 0
|
#define ANDROID_LOG_DEBUG 0
|
||||||
|
#define LOG(...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
@ -768,7 +773,8 @@ unget_byte(int c, IOSTREAM *s)
|
|||||||
|
|
||||||
int
|
int
|
||||||
Sungetc(int c, IOSTREAM *s)
|
Sungetc(int c, IOSTREAM *s)
|
||||||
{ if ( s->bufp > s->unbuffer )
|
{
|
||||||
|
if ( s->bufp > s->unbuffer )
|
||||||
{ unget_byte(c, s);
|
{ unget_byte(c, s);
|
||||||
|
|
||||||
return c;
|
return c;
|
||||||
@ -1153,7 +1159,6 @@ Speekcode(IOSTREAM *s)
|
|||||||
{ int c;
|
{ int c;
|
||||||
char *start;
|
char *start;
|
||||||
size_t safe = (size_t)-1;
|
size_t safe = (size_t)-1;
|
||||||
|
|
||||||
if ( !s->buffer )
|
if ( !s->buffer )
|
||||||
{ if ( (s->flags & SIO_NBUF) )
|
{ if ( (s->flags & SIO_NBUF) )
|
||||||
{ errno = EINVAL;
|
{ errno = EINVAL;
|
||||||
@ -1786,6 +1791,11 @@ object, which in turn calls the ->unlink which may wish to close the
|
|||||||
associated stream.
|
associated stream.
|
||||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||||
|
|
||||||
|
#if __ANDROID__
|
||||||
|
static int
|
||||||
|
Sclose_asset(void *handle);
|
||||||
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
Sclose(IOSTREAM *s)
|
Sclose(IOSTREAM *s)
|
||||||
{ int rval = 0;
|
{ int rval = 0;
|
||||||
@ -1825,12 +1835,19 @@ Sclose(IOSTREAM *s)
|
|||||||
rval = -1;
|
rval = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if __ANDROID__
|
||||||
|
|
||||||
|
if (s->functions->close == Sclose_asset) {
|
||||||
|
#endif
|
||||||
while(s->locks > 0) /* remove buffer-locks */
|
while(s->locks > 0) /* remove buffer-locks */
|
||||||
{ int rc = Sunlock(s);
|
{ int rc = Sunlock(s);
|
||||||
|
|
||||||
if ( rval == 0 )
|
if ( rval == 0 )
|
||||||
rval = rc;
|
rval = rc;
|
||||||
}
|
}
|
||||||
|
#if __ANDROID__
|
||||||
|
}
|
||||||
|
#endif
|
||||||
if ( rval < 0 )
|
if ( rval < 0 )
|
||||||
reportStreamError(s);
|
reportStreamError(s);
|
||||||
run_close_hooks(s); /* deletes Prolog registration */
|
run_close_hooks(s); /* deletes Prolog registration */
|
||||||
@ -2916,10 +2933,40 @@ Sopen_file(const char *path, const char *how)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __ANDROID__
|
#if __ANDROID__
|
||||||
if (strstr(path, "/assets/") == path) {
|
if (Yap_isAsset(path)) {
|
||||||
AAssetManager *Yap_assetManager( void );
|
extern IOFUNCTIONS Sassetfunctions;
|
||||||
char * p = (char *)path + strlen("/assets/");
|
extern void *Yap_openAssetFile(const char *);
|
||||||
return Sopen_asset( p, how-1, Yap_assetManager());
|
|
||||||
|
if (op != 'r')
|
||||||
|
return NULL;
|
||||||
|
for( ; *how; how++)
|
||||||
|
{ switch(*how)
|
||||||
|
{
|
||||||
|
case 'b': /* binary */
|
||||||
|
flags &= ~SIO_TEXT;
|
||||||
|
enc = ENC_OCTET;
|
||||||
|
break;
|
||||||
|
case 'r': /* no record */
|
||||||
|
flags &= ~SIO_RECORDPOS;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
errno = EINVAL;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#if O_LARGEFILES && defined(O_LARGEFILE)
|
||||||
|
oflags |= O_LARGEFILE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
lfd = (intptr_t)Yap_openAssetFile( path );
|
||||||
|
if (!lfd) {
|
||||||
|
errno = EINVAL;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
Sfilefunctions = Sassetfunctions;
|
||||||
|
lock = 0;
|
||||||
|
flags |= SIO_INPUT;
|
||||||
|
goto build_stream;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -3037,6 +3084,9 @@ Sopen_file(const char *path, const char *how)
|
|||||||
}
|
}
|
||||||
|
|
||||||
lfd = (intptr_t)fd;
|
lfd = (intptr_t)fd;
|
||||||
|
#if __ANDROID__
|
||||||
|
build_stream:
|
||||||
|
#endif
|
||||||
s = Snew((void *)lfd, flags, &Sfilefunctions);
|
s = Snew((void *)lfd, flags, &Sfilefunctions);
|
||||||
if ( enc != ENC_UNKNOWN )
|
if ( enc != ENC_UNKNOWN )
|
||||||
s->encoding = enc;
|
s->encoding = enc;
|
||||||
@ -3332,66 +3382,6 @@ Sopen_asset(char **buffer, size_t *sizep, const char* mode)
|
|||||||
Open an Android asset, essentially a read-only part of a ZIP archive.
|
Open an Android asset, essentially a read-only part of a ZIP archive.
|
||||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||||
|
|
||||||
IOSTREAM *
|
|
||||||
Sopen_asset(char *bufp, const char *how, AAssetManager* mgr)
|
|
||||||
{
|
|
||||||
AAsset* asset;
|
|
||||||
int flags = SIO_FILE|SIO_TEXT|SIO_RECORDPOS|SIO_FBUF;
|
|
||||||
int op = *how++;
|
|
||||||
IOSTREAM *s;
|
|
||||||
IOENC enc = ENC_UNKNOWN;
|
|
||||||
|
|
||||||
for( ; *how; how++)
|
|
||||||
{ switch(*how)
|
|
||||||
{ case 'b': /* binary */
|
|
||||||
flags &= ~SIO_TEXT;
|
|
||||||
enc = ENC_OCTET;
|
|
||||||
break;
|
|
||||||
case 'r': /* no record */
|
|
||||||
flags &= ~SIO_RECORDPOS;
|
|
||||||
break;
|
|
||||||
case 'L': /* lock r: read, w: write */
|
|
||||||
case 'l': /* lock r: read, w: write */
|
|
||||||
// read-only, nothing changes.
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
errno = EINVAL;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#if O_LARGEFILES && defined(O_LARGEFILE)
|
|
||||||
oflags |= O_LARGEFILE;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
switch(op)
|
|
||||||
{ case 'w':
|
|
||||||
return NULL;
|
|
||||||
case 'a':
|
|
||||||
return NULL;
|
|
||||||
case 'u':
|
|
||||||
return NULL;
|
|
||||||
case 'r':
|
|
||||||
//const char *utf8 = (*env)->GetStringUTFChars(env, bufp, NULL);
|
|
||||||
asset = AAssetManager_open(mgr, bufp, AASSET_MODE_UNKNOWN);
|
|
||||||
flags |= SIO_INPUT;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
errno = EINVAL;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !asset )
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
|
|
||||||
s = Snew((void *)asset, flags, &Sassetfunctions);
|
|
||||||
if ( enc != ENC_UNKNOWN )
|
|
||||||
s->encoding = enc;
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* __ANDROID__ */
|
#endif /* __ANDROID__ */
|
||||||
|
|
||||||
/*******************************
|
/*******************************
|
||||||
|
@ -67,6 +67,3 @@ out:
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -193,7 +193,7 @@ static int
|
|||||||
bind_varnames(term_t varnames ARG_LD)
|
bind_varnames(term_t varnames ARG_LD)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
Term t = Yap_GetFromSlot(varnames PASS_REGS);
|
Term t = Yap_GetFromSlot(varnames);
|
||||||
while(!IsVarTerm(t) && IsPairTerm(t)) {
|
while(!IsVarTerm(t) && IsPairTerm(t)) {
|
||||||
Term tl = HeadOfTerm(t);
|
Term tl = HeadOfTerm(t);
|
||||||
Functor f;
|
Functor f;
|
||||||
@ -221,7 +221,7 @@ char *
|
|||||||
varName(term_t t, char *name)
|
varName(term_t t, char *name)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
CELL *adr = (CELL *)Yap_GetFromSlot(t PASS_REGS);
|
CELL *adr = (CELL *)Yap_GetFromSlot(t);
|
||||||
|
|
||||||
if (IsAttVar(adr)) {
|
if (IsAttVar(adr)) {
|
||||||
Ssprintf(name, "_D%ld", (CELL)adr - (CELL)H0);
|
Ssprintf(name, "_D%ld", (CELL)adr - (CELL)H0);
|
||||||
@ -262,20 +262,10 @@ writeTopTerm(term_t t, int prec, write_options *options)
|
|||||||
if (flags & PL_WRT_BLOB_PORTRAY)
|
if (flags & PL_WRT_BLOB_PORTRAY)
|
||||||
yap_flag |= Blob_Portray_f;
|
yap_flag |= Blob_Portray_f;
|
||||||
old_module = CurrentModule;
|
old_module = CurrentModule;
|
||||||
char * buf[1024];
|
|
||||||
size_t length;
|
|
||||||
int encode; Term tn;
|
|
||||||
|
|
||||||
__android_log_print(ANDROID_LOG_ERROR, __FUNCTION__, "Yap_REGS=%p\n", Yap_REGS);
|
|
||||||
CurrentModule = Yap_GetModuleFromEntry(options->module);
|
CurrentModule = Yap_GetModuleFromEntry(options->module);
|
||||||
|
|
||||||
__android_log_print(ANDROID_LOG_ERROR, __FUNCTION__, "t=%d\n", t) ;
|
Yap_plwrite(Yap_GetFromSlot(t), options->out, options->max_depth, yap_flag, prec);
|
||||||
|
|
||||||
__android_log_print(ANDROID_LOG_ERROR, __FUNCTION__, "LOCAl_SlotBase[t]=%ld\n", LOCAL_SlotBase[t]);
|
|
||||||
__android_log_print(ANDROID_LOG_ERROR, __FUNCTION__, "LOCAl_SlotBase=%ld\n", Deref(LOCAL_SlotBase[t]));
|
|
||||||
|
|
||||||
|
|
||||||
Yap_plwrite(Yap_GetFromSlot(t PASS_REGS), options->out, options->max_depth, yap_flag, prec);
|
|
||||||
CurrentModule = old_module;
|
CurrentModule = old_module;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ all: $(SOBJS) $(MYDDAS_YAP)
|
|||||||
$(CC) -c $(CFLAGS) $< -o $@
|
$(CC) -c $(CFLAGS) $< -o $@
|
||||||
|
|
||||||
%.yap: $(srcdir)/pl/%.ypp
|
%.yap: $(srcdir)/pl/%.ypp
|
||||||
$(ECPP) $(YAP_EXTRAS) -P -w $< -o $@
|
$(ECPP) $(YAP_EXTRAS) -P -w $< > $@
|
||||||
|
|
||||||
@DO_SECOND_LD@%.@SO@: $(OBJS)
|
@DO_SECOND_LD@%.@SO@: $(OBJS)
|
||||||
@DO_SECOND_LD@ @SHLIB_LD@ $(LDFLAGS) -o $@ $(OBJS) @EXTRA_LIBS_FOR_DLLS@ @MYDDAS_LIBS@
|
@DO_SECOND_LD@ @SHLIB_LD@ $(LDFLAGS) -o $@ $(OBJS) @EXTRA_LIBS_FOR_DLLS@ @MYDDAS_LIBS@
|
||||||
|
@ -195,14 +195,14 @@ else
|
|||||||
ENABLE_MYDDAS=""
|
ENABLE_MYDDAS=""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
INCLUDE_MYDDAS="#"
|
OBJECTS_MYDDAS="#"
|
||||||
if test x"$ENABLE_MYDDAS" = x -a x"$STARTUP_ANDROID" = x
|
if test x"$ENABLE_MYDDAS" = x -a x"$STARTUP_ANDROID" = x
|
||||||
then
|
then
|
||||||
#in Android we have to actually include myddas in the binary
|
#in Android we have to actually include myddas in the binary
|
||||||
INCLUDE_MYDDAS=""
|
OBJECTS_MYDDAS="$(ALL_MYDDAS_OBJECTS)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_SUBST(PKG_MYDDAS)
|
AC_SUBST(PKG_MYDDAS)
|
||||||
AC_SUBST(INCLUDE_MYDDAS)
|
AC_SUBST(OBJECTS_MYDDAS)
|
||||||
AC_SUBST(MYDDAS_CPPFLAGS)
|
AC_SUBST(MYDDAS_CPPFLAGS)
|
||||||
AC_SUBST(MYDDAS_LIBS)
|
AC_SUBST(MYDDAS_LIBS)
|
||||||
|
@ -26,9 +26,8 @@ LOCAL_MODULE := example
|
|||||||
LOCAL_SHARED_LIBRARIES := yap0 yap1 sqliteX yap2
|
LOCAL_SHARED_LIBRARIES := yap0 yap1 sqliteX yap2
|
||||||
LOCAL_STATIC_LIBRARIES := @abs_top_builddir@/libYap.ar
|
LOCAL_STATIC_LIBRARIES := @abs_top_builddir@/libYap.ar
|
||||||
LOCAL_SRC_FILES += @abs_top_builddir@/packages/swig/android/jni/yap_wrap.cpp
|
LOCAL_SRC_FILES += @abs_top_builddir@/packages/swig/android/jni/yap_wrap.cpp
|
||||||
LOCAL_SRC_FILES += @srcdir@/../prosqlite/c/prosqlite.c
|
|
||||||
LOCAL_C_INCLUDES := @abs_top_builddir@ @GMPDIR@/include @srcdir@/../../H @srcdir@/../../include @srcdir@/../../os @srcdir@/../../OPTYap @srcdir@/../../BEAM @srcdir@/../../CXX sqlite
|
LOCAL_C_INCLUDES := @abs_top_builddir@ @GMPDIR@/include @srcdir@/../../H @srcdir@/../../include @srcdir@/../../os @srcdir@/../../OPTYap @srcdir@/../../BEAM @srcdir@/../../CXX sqlite
|
||||||
LOCAL_CFLAGS := @YAP_EXTRAS@ @DEFS@ -D_YAP_NOT_INSTALLED_=1 -DDESTDIR=\"\"
|
LOCAL_CFLAGS := @YAP_EXTRAS@ @DEFS@ -D_YAP_NOT_INSTALLED_=1 -DDESTDIR=\"\"
|
||||||
LOCAL_CPP_FEATURES := rtti
|
LOCAL_CPP_FEATURES := rtti
|
||||||
# LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
|
LOCAL_ALLOW_UNDEFINED_SYMBOLS := false
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
include $(BUILD_SHARED_LIBRARY)
|
||||||
|
@ -26,11 +26,9 @@ JAVA_SQLITE="$(srcdir)/android/src/org"
|
|||||||
|
|
||||||
SQLITE=$(JNI_SQLITE) $(JAVA_SQLITE)
|
SQLITE=$(JNI_SQLITE) $(JAVA_SQLITE)
|
||||||
|
|
||||||
PROSQLITE=$(srcdir)/../prosqlite/prolog/prosqlite.pl
|
|
||||||
|
|
||||||
PYTHON_PROGRAMS = $(srcdir)/python/demo.py
|
PYTHON_PROGRAMS = $(srcdir)/python/demo.py
|
||||||
|
|
||||||
ANDROID_PROGRAMS=$(srcdir)/android/JavaYap.java $(PROSQLITE) $(SQLITE)
|
ANDROID_PROGRAMS=$(srcdir)/android/JavaYap.java $(SQLITE)
|
||||||
|
|
||||||
PROGRAMS= $(PYTHON_PROGRAMS) $(JAVA_PROGRAMS) $(ANDROID_PROGRAMS)
|
PROGRAMS= $(PYTHON_PROGRAMS) $(JAVA_PROGRAMS) $(ANDROID_PROGRAMS)
|
||||||
|
|
||||||
@ -42,7 +40,7 @@ YAP_EXPORT_SAVED_STATE="../../startup.yss"
|
|||||||
|
|
||||||
PYTHON_PROGRAMS = $(srcdir)/python/demo.py
|
PYTHON_PROGRAMS = $(srcdir)/python/demo.py
|
||||||
|
|
||||||
ANDROID_PROGRAMS=$(srcdir)/android/JavaYap.java $(PROSQLITE) $(SQLITE)
|
ANDROID_PROGRAMS=$(srcdir)/android/JavaYap.java $(SQLITE)
|
||||||
|
|
||||||
SWIG_FILES= \
|
SWIG_FILES= \
|
||||||
$(srcdir)/yap.i
|
$(srcdir)/yap.i
|
||||||
@ -89,9 +87,6 @@ JavaYap-debug.apk: android/libs/armeabi/libexample.so
|
|||||||
|
|
||||||
android/libs/armeabi/libexample.so: android/jni/Android.mk android/jni/Application.mk android/jni/yap_wrap.cpp
|
android/libs/armeabi/libexample.so: android/jni/Android.mk android/jni/Application.mk android/jni/yap_wrap.cpp
|
||||||
( cd android/jni && NDK_DEBUG=1 ndk-build )
|
( cd android/jni && NDK_DEBUG=1 ndk-build )
|
||||||
cp -r $(YAP_EXPORT_PLS)/* android/assets/share/Yap
|
|
||||||
cp -r $(YAP_EXPORT_DLLS)/*.so android/jni
|
|
||||||
cp -r $(YAP_EXPORT_SAVED_STATE) android/assets/lib/Yap
|
|
||||||
|
|
||||||
android/jni/Application.mk: android/jni/Android.mk
|
android/jni/Application.mk: android/jni/Android.mk
|
||||||
cp $(srcdir)/android/jni/Application.mk android/jni
|
cp $(srcdir)/android/jni/Application.mk android/jni
|
||||||
@ -124,11 +119,13 @@ R:
|
|||||||
|
|
||||||
yap.i: $(srcdir)/../../../../include/YapInterface.h
|
yap.i: $(srcdir)/../../../../include/YapInterface.h
|
||||||
|
|
||||||
install:
|
install: all
|
||||||
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -fr android/* jni/* java/* python/*
|
rm -fr android/libs/armeabi/libexample.so JavaYap-debug.apk android/jni/Application.mk \
|
||||||
|
android/jni/Android.mk android/jni/yap_wrap.cpp python/_yap.so jni/yap_wrap.o \
|
||||||
|
python/yap_wrap.cpp python/yap.py jni/yap_wrap.cpp java/yap.java
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
rm -f *def Makefile
|
rm -f *def Makefile
|
||||||
|
@ -60,9 +60,10 @@ public class JavaYap extends Activity
|
|||||||
String str;
|
String str;
|
||||||
String buf;
|
String buf;
|
||||||
YAPQuery q;
|
YAPQuery q;
|
||||||
Boolean running = false;
|
Boolean running = false, compute = true;
|
||||||
int i=1;
|
int i=1;
|
||||||
YAPListTerm vs0;
|
YAPListTerm vs0;
|
||||||
|
private AssetManager mgr;
|
||||||
|
|
||||||
void runQuery(String str, Boolean more)
|
void runQuery(String str, Boolean more)
|
||||||
{
|
{
|
||||||
@ -70,13 +71,18 @@ public class JavaYap extends Activity
|
|||||||
{
|
{
|
||||||
// check if at initial query
|
// check if at initial query
|
||||||
if (!running) {
|
if (!running) {
|
||||||
|
|
||||||
|
if (BuildConfig.DEBUG) {
|
||||||
|
Log.i(TAG, "query "+str);
|
||||||
|
}
|
||||||
|
|
||||||
q = eng.query( str );
|
q = eng.query( str );
|
||||||
// get the uninstantiated query variables.
|
// get the uninstantiated query variables.
|
||||||
vs0 = q.namedVars();
|
vs0 = q.namedVars();
|
||||||
running = true;
|
running = true;
|
||||||
}
|
}
|
||||||
// start computing
|
// start computing
|
||||||
Boolean compute = true;
|
compute = true;
|
||||||
|
|
||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
Log.i(TAG, "onQueryButtonClick called");
|
Log.i(TAG, "onQueryButtonClick called");
|
||||||
@ -89,7 +95,7 @@ public class JavaYap extends Activity
|
|||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
Log.i(TAG, "q0=\n");
|
Log.i(TAG, "q0=\n");
|
||||||
}
|
}
|
||||||
if (compute && q.next()) {
|
if (compute && (rc = q.next())) {
|
||||||
outputText.append( "yes\n" );
|
outputText.append( "yes\n" );
|
||||||
running = compute = more;
|
running = compute = more;
|
||||||
} else {
|
} else {
|
||||||
@ -102,7 +108,7 @@ public class JavaYap extends Activity
|
|||||||
Log.i(TAG, "q1= "+vs0.text()+"\n");
|
Log.i(TAG, "q1= "+vs0.text()+"\n");
|
||||||
}
|
}
|
||||||
while (compute && (rc = q.next()) ) {
|
while (compute && (rc = q.next()) ) {
|
||||||
YAPListTerm vs = vs0;
|
YAPListTerm vs = q.namedVars();
|
||||||
while(!vs.nil()){
|
while(!vs.nil()){
|
||||||
if (BuildConfig.DEBUG) {
|
if (BuildConfig.DEBUG) {
|
||||||
Log.i(TAG, "q= "+vs0.text()+"\n");
|
Log.i(TAG, "q= "+vs0.text()+"\n");
|
||||||
@ -118,11 +124,14 @@ public class JavaYap extends Activity
|
|||||||
}
|
}
|
||||||
if ( !rc) {
|
if ( !rc) {
|
||||||
q.close();
|
q.close();
|
||||||
running = compute = false;
|
compute = true;
|
||||||
|
running = false;
|
||||||
}
|
}
|
||||||
} catch(Exception e){
|
} catch(Exception e){
|
||||||
outputText.append("Exception thrown :" + e);
|
outputText.append("Exception thrown :" + e);
|
||||||
return;
|
q.close();
|
||||||
|
compute = true;
|
||||||
|
running = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,8 +148,8 @@ public class JavaYap extends Activity
|
|||||||
s = getPackageName();
|
s = getPackageName();
|
||||||
PackageInfo p = m.getPackageInfo(s, 0);
|
PackageInfo p = m.getPackageInfo(s, 0);
|
||||||
//s = p.applicationInfo.dataDir;
|
//s = p.applicationInfo.dataDir;
|
||||||
AssetManager mgr = getResources().getAssets();
|
mgr = getResources().getAssets();
|
||||||
Log.i(TAG, "mgr=" +mgr + " " + s);
|
Log.i(TAG, "mgr0=" +mgr + " " + s);
|
||||||
load(mgr);
|
load(mgr);
|
||||||
} catch(NameNotFoundException e) {
|
} catch(NameNotFoundException e) {
|
||||||
Log.e(TAG, "Couldn't find package information in PackageManager", e);
|
Log.e(TAG, "Couldn't find package information in PackageManager", e);
|
||||||
@ -239,8 +248,6 @@ public class JavaYap extends Activity
|
|||||||
|
|
||||||
private static native void load(AssetManager mgr);
|
private static native void load(AssetManager mgr);
|
||||||
|
|
||||||
private AssetManager mgr;
|
|
||||||
|
|
||||||
private static final String TAG = "JavaYap";
|
private static final String TAG = "JavaYap";
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -256,13 +263,6 @@ class JavaCallback extends YAPCallback
|
|||||||
Log.i(TAG, "java callback init");
|
Log.i(TAG, "java callback init");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
Log.i(TAG, "java callback ");
|
|
||||||
System.out.println("JavaCallback.run() ");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void run(String s)
|
public void run(String s)
|
||||||
{
|
{
|
||||||
Log.i(TAG, "java callback ");
|
Log.i(TAG, "java callback ");
|
||||||
|
@ -3567,7 +3567,7 @@ SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt*, int N);
|
|||||||
** UTF-16 encoded strings and the other functions return UTF-8.
|
** UTF-16 encoded strings and the other functions return UTF-8.
|
||||||
**
|
**
|
||||||
** ^These APIs are only available if the library was compiled with the
|
** ^These APIs are only available if the library was compiled with the
|
||||||
** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol.
|
** [SQLITE_ENABLE_COLUMN_METAPDATA] C-preprocessor symbol.
|
||||||
**
|
**
|
||||||
** If two or more threads call one or more of these routines against the same
|
** If two or more threads call one or more of these routines against the same
|
||||||
** prepared statement and column at the same time then the results are
|
** prepared statement and column at the same time then the results are
|
||||||
@ -5130,7 +5130,7 @@ SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N);
|
|||||||
** in the [database connection] (to be retrieved using sqlite3_errmsg()).)^
|
** in the [database connection] (to be retrieved using sqlite3_errmsg()).)^
|
||||||
**
|
**
|
||||||
** ^This API is only available if the library was compiled with the
|
** ^This API is only available if the library was compiled with the
|
||||||
** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol defined.
|
** [SQLITE_ENABLE_COLUMN_METAPDATA] C-preprocessor symbol defined.
|
||||||
*/
|
*/
|
||||||
SQLITE_API int sqlite3_table_column_metadata(
|
SQLITE_API int sqlite3_table_column_metadata(
|
||||||
sqlite3 *db, /* Connection handle */
|
sqlite3 *db, /* Connection handle */
|
||||||
@ -8674,7 +8674,7 @@ typedef struct WhereInfo WhereInfo;
|
|||||||
/* TODO: This definition is just included so other modules compile. It
|
/* TODO: This definition is just included so other modules compile. It
|
||||||
** needs to be revisited.
|
** needs to be revisited.
|
||||||
*/
|
*/
|
||||||
#define SQLITE_N_BTREE_META 10
|
#define SQLITE_N_BTREE_METAP 10
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** If defined as non-zero, auto-vacuum is enabled by default. Otherwise
|
** If defined as non-zero, auto-vacuum is enabled by default. Otherwise
|
||||||
@ -9045,7 +9045,7 @@ typedef struct VdbeOpList VdbeOpList;
|
|||||||
#define COLNAME_DATABASE 2
|
#define COLNAME_DATABASE 2
|
||||||
#define COLNAME_TABLE 3
|
#define COLNAME_TABLE 3
|
||||||
#define COLNAME_COLUMN 4
|
#define COLNAME_COLUMN 4
|
||||||
#ifdef SQLITE_ENABLE_COLUMN_METADATA
|
#ifdef SQLITE_ENABLE_COLUMN_METAPDATA
|
||||||
# define COLNAME_N 5 /* Number of COLNAME_xxx symbols */
|
# define COLNAME_N 5 /* Number of COLNAME_xxx symbols */
|
||||||
#else
|
#else
|
||||||
# ifdef SQLITE_OMIT_DECLTYPE
|
# ifdef SQLITE_OMIT_DECLTYPE
|
||||||
@ -13104,8 +13104,8 @@ static const char * const azCompileOpt[] = {
|
|||||||
#ifdef SQLITE_ENABLE_CEROD
|
#ifdef SQLITE_ENABLE_CEROD
|
||||||
"ENABLE_CEROD",
|
"ENABLE_CEROD",
|
||||||
#endif
|
#endif
|
||||||
#ifdef SQLITE_ENABLE_COLUMN_METADATA
|
#ifdef SQLITE_ENABLE_COLUMN_METAPDATA
|
||||||
"ENABLE_COLUMN_METADATA",
|
"ENABLE_COLUMN_METAPDATA",
|
||||||
#endif
|
#endif
|
||||||
#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
|
#ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
|
||||||
"ENABLE_EXPENSIVE_ASSERT",
|
"ENABLE_EXPENSIVE_ASSERT",
|
||||||
@ -65428,12 +65428,12 @@ SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Constraint: If you have ENABLE_COLUMN_METADATA then you must
|
** Constraint: If you have ENABLE_COLUMN_METAPDATA then you must
|
||||||
** not define OMIT_DECLTYPE.
|
** not define OMIT_DECLTYPE.
|
||||||
*/
|
*/
|
||||||
#if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA)
|
#if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METAPDATA)
|
||||||
# error "Must not define both SQLITE_OMIT_DECLTYPE \
|
# error "Must not define both SQLITE_OMIT_DECLTYPE \
|
||||||
and SQLITE_ENABLE_COLUMN_METADATA"
|
and SQLITE_ENABLE_COLUMN_METAPDATA"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef SQLITE_OMIT_DECLTYPE
|
#ifndef SQLITE_OMIT_DECLTYPE
|
||||||
@ -65453,7 +65453,7 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
|
|||||||
#endif /* SQLITE_OMIT_UTF16 */
|
#endif /* SQLITE_OMIT_UTF16 */
|
||||||
#endif /* SQLITE_OMIT_DECLTYPE */
|
#endif /* SQLITE_OMIT_DECLTYPE */
|
||||||
|
|
||||||
#ifdef SQLITE_ENABLE_COLUMN_METADATA
|
#ifdef SQLITE_ENABLE_COLUMN_METAPDATA
|
||||||
/*
|
/*
|
||||||
** Return the name of the database from which a result column derives.
|
** Return the name of the database from which a result column derives.
|
||||||
** NULL is returned if the result column is an expression or constant or
|
** NULL is returned if the result column is an expression or constant or
|
||||||
@ -65501,7 +65501,7 @@ SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
|
|||||||
pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN);
|
pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN);
|
||||||
}
|
}
|
||||||
#endif /* SQLITE_OMIT_UTF16 */
|
#endif /* SQLITE_OMIT_UTF16 */
|
||||||
#endif /* SQLITE_ENABLE_COLUMN_METADATA */
|
#endif /* SQLITE_ENABLE_COLUMN_METAPDATA */
|
||||||
|
|
||||||
|
|
||||||
/******************************* sqlite3_bind_ ***************************
|
/******************************* sqlite3_bind_ ***************************
|
||||||
@ -69285,7 +69285,7 @@ case OP_ReadCookie: { /* out2-prerelease */
|
|||||||
assert( p->bIsReader );
|
assert( p->bIsReader );
|
||||||
iDb = pOp->p1;
|
iDb = pOp->p1;
|
||||||
iCookie = pOp->p3;
|
iCookie = pOp->p3;
|
||||||
assert( pOp->p3<SQLITE_N_BTREE_META );
|
assert( pOp->p3<SQLITE_N_BTREE_METAP );
|
||||||
assert( iDb>=0 && iDb<db->nDb );
|
assert( iDb>=0 && iDb<db->nDb );
|
||||||
assert( db->aDb[iDb].pBt!=0 );
|
assert( db->aDb[iDb].pBt!=0 );
|
||||||
assert( (p->btreeMask & (((yDbMask)1)<<iDb))!=0 );
|
assert( (p->btreeMask & (((yDbMask)1)<<iDb))!=0 );
|
||||||
@ -69307,7 +69307,7 @@ case OP_ReadCookie: { /* out2-prerelease */
|
|||||||
*/
|
*/
|
||||||
case OP_SetCookie: { /* in3 */
|
case OP_SetCookie: { /* in3 */
|
||||||
Db *pDb;
|
Db *pDb;
|
||||||
assert( pOp->p2<SQLITE_N_BTREE_META );
|
assert( pOp->p2<SQLITE_N_BTREE_METAP );
|
||||||
assert( pOp->p1>=0 && pOp->p1<db->nDb );
|
assert( pOp->p1>=0 && pOp->p1<db->nDb );
|
||||||
assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
|
assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
|
||||||
assert( p->readOnly==0 );
|
assert( p->readOnly==0 );
|
||||||
@ -95154,7 +95154,7 @@ struct sqlite3_api_routines {
|
|||||||
** excluded from a build of SQLite. Substitute a NULL pointer
|
** excluded from a build of SQLite. Substitute a NULL pointer
|
||||||
** for any missing APIs.
|
** for any missing APIs.
|
||||||
*/
|
*/
|
||||||
#ifndef SQLITE_ENABLE_COLUMN_METADATA
|
#ifndef SQLITE_ENABLE_COLUMN_METAPDATA
|
||||||
# define sqlite3_column_database_name 0
|
# define sqlite3_column_database_name 0
|
||||||
# define sqlite3_column_database_name16 0
|
# define sqlite3_column_database_name16 0
|
||||||
# define sqlite3_column_table_name 0
|
# define sqlite3_column_table_name 0
|
||||||
@ -100186,9 +100186,9 @@ static void generateSortTail(
|
|||||||
** The declaration type for any expression other than a column is NULL.
|
** The declaration type for any expression other than a column is NULL.
|
||||||
**
|
**
|
||||||
** This routine has either 3 or 6 parameters depending on whether or not
|
** This routine has either 3 or 6 parameters depending on whether or not
|
||||||
** the SQLITE_ENABLE_COLUMN_METADATA compile-time option is used.
|
** the SQLITE_ENABLE_COLUMN_METAPDATA compile-time option is used.
|
||||||
*/
|
*/
|
||||||
#ifdef SQLITE_ENABLE_COLUMN_METADATA
|
#ifdef SQLITE_ENABLE_COLUMN_METAPDATA
|
||||||
# define columnType(A,B,C,D,E,F) columnTypeImpl(A,B,C,D,E,F)
|
# define columnType(A,B,C,D,E,F) columnTypeImpl(A,B,C,D,E,F)
|
||||||
static const char *columnTypeImpl(
|
static const char *columnTypeImpl(
|
||||||
NameContext *pNC,
|
NameContext *pNC,
|
||||||
@ -100201,14 +100201,14 @@ static const char *columnTypeImpl(
|
|||||||
char const *zOrigDb = 0;
|
char const *zOrigDb = 0;
|
||||||
char const *zOrigTab = 0;
|
char const *zOrigTab = 0;
|
||||||
char const *zOrigCol = 0;
|
char const *zOrigCol = 0;
|
||||||
#else /* if !defined(SQLITE_ENABLE_COLUMN_METADATA) */
|
#else /* if !defined(SQLITE_ENABLE_COLUMN_METAPDATA) */
|
||||||
# define columnType(A,B,C,D,E,F) columnTypeImpl(A,B,F)
|
# define columnType(A,B,C,D,E,F) columnTypeImpl(A,B,F)
|
||||||
static const char *columnTypeImpl(
|
static const char *columnTypeImpl(
|
||||||
NameContext *pNC,
|
NameContext *pNC,
|
||||||
Expr *pExpr,
|
Expr *pExpr,
|
||||||
u8 *pEstWidth
|
u8 *pEstWidth
|
||||||
){
|
){
|
||||||
#endif /* !defined(SQLITE_ENABLE_COLUMN_METADATA) */
|
#endif /* !defined(SQLITE_ENABLE_COLUMN_METAPDATA) */
|
||||||
char const *zType = 0;
|
char const *zType = 0;
|
||||||
int j;
|
int j;
|
||||||
u8 estWidth = 1;
|
u8 estWidth = 1;
|
||||||
@ -100281,7 +100281,7 @@ static const char *columnTypeImpl(
|
|||||||
assert( !pS );
|
assert( !pS );
|
||||||
if( iCol<0 ) iCol = pTab->iPKey;
|
if( iCol<0 ) iCol = pTab->iPKey;
|
||||||
assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
|
assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
|
||||||
#ifdef SQLITE_ENABLE_COLUMN_METADATA
|
#ifdef SQLITE_ENABLE_COLUMN_METAPDATA
|
||||||
if( iCol<0 ){
|
if( iCol<0 ){
|
||||||
zType = "INTEGER";
|
zType = "INTEGER";
|
||||||
zOrigCol = "rowid";
|
zOrigCol = "rowid";
|
||||||
@ -100325,7 +100325,7 @@ static const char *columnTypeImpl(
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SQLITE_ENABLE_COLUMN_METADATA
|
#ifdef SQLITE_ENABLE_COLUMN_METAPDATA
|
||||||
if( pzOrigDb ){
|
if( pzOrigDb ){
|
||||||
assert( pzOrigTab && pzOrigCol );
|
assert( pzOrigTab && pzOrigCol );
|
||||||
*pzOrigDb = zOrigDb;
|
*pzOrigDb = zOrigDb;
|
||||||
@ -100355,7 +100355,7 @@ static void generateColumnTypes(
|
|||||||
for(i=0; i<pEList->nExpr; i++){
|
for(i=0; i<pEList->nExpr; i++){
|
||||||
Expr *p = pEList->a[i].pExpr;
|
Expr *p = pEList->a[i].pExpr;
|
||||||
const char *zType;
|
const char *zType;
|
||||||
#ifdef SQLITE_ENABLE_COLUMN_METADATA
|
#ifdef SQLITE_ENABLE_COLUMN_METAPDATA
|
||||||
const char *zOrigDb = 0;
|
const char *zOrigDb = 0;
|
||||||
const char *zOrigTab = 0;
|
const char *zOrigTab = 0;
|
||||||
const char *zOrigCol = 0;
|
const char *zOrigCol = 0;
|
||||||
@ -121509,7 +121509,7 @@ SQLITE_API void sqlite3_thread_cleanup(void){
|
|||||||
** Return meta information about a specific column of a database table.
|
** Return meta information about a specific column of a database table.
|
||||||
** See comment in sqlite3.h (sqlite.h.in) for details.
|
** See comment in sqlite3.h (sqlite.h.in) for details.
|
||||||
*/
|
*/
|
||||||
#ifdef SQLITE_ENABLE_COLUMN_METADATA
|
#ifdef SQLITE_ENABLE_COLUMN_METAPDATA
|
||||||
SQLITE_API int sqlite3_table_column_metadata(
|
SQLITE_API int sqlite3_table_column_metadata(
|
||||||
sqlite3 *db, /* Connection handle */
|
sqlite3 *db, /* Connection handle */
|
||||||
const char *zDbName, /* Database name or NULL */
|
const char *zDbName, /* Database name or NULL */
|
||||||
|
@ -7379,4 +7379,3 @@ struct sqlite3_rtree_geometry {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* ifndef _SQLITE3RTREE_H_ */
|
#endif /* ifndef _SQLITE3RTREE_H_ */
|
||||||
|
|
||||||
|
@ -21,10 +21,11 @@ fi
|
|||||||
|
|
||||||
if test "$PKG_SWIG" != ""; then
|
if test "$PKG_SWIG" != ""; then
|
||||||
|
|
||||||
|
mkdir -p packages/swig/android
|
||||||
|
mkdir -p packages/swig/android/usr
|
||||||
mkdir -p packages/swig/python
|
mkdir -p packages/swig/python
|
||||||
mkdir -p packages/swig/R
|
mkdir -p packages/swig/R
|
||||||
mkdir -p packages/swig/java
|
mkdir -p packages/swig/java
|
||||||
mkdir -p packages/swig/fli
|
|
||||||
mkdir -p packages/swig/jni
|
mkdir -p packages/swig/jni
|
||||||
|
|
||||||
AC_SUBST(SWIG)
|
AC_SUBST(SWIG)
|
||||||
|
@ -3,20 +3,31 @@
|
|||||||
import sys
|
import sys
|
||||||
import yap
|
import yap
|
||||||
|
|
||||||
|
#
|
||||||
|
# initialize engine
|
||||||
engine = yap.YAPEngine();
|
engine = yap.YAPEngine();
|
||||||
# engine = yap.YAPEngine(yap.YAPParams());
|
# engine = yap.YAPEngine(yap.YAPParams());
|
||||||
|
|
||||||
def go():
|
def query( s ):
|
||||||
while True:
|
|
||||||
s = raw_input("Prolog Query: ")
|
|
||||||
q = engine.query(s)
|
q = engine.query(s)
|
||||||
while q.next():
|
while q.next():
|
||||||
vs = q.namedVars();
|
vs = q.namedVars()
|
||||||
if vs.length() == 0:
|
if vs.length() == 0:
|
||||||
print "yes"
|
print( "yes" )
|
||||||
|
return
|
||||||
else:
|
else:
|
||||||
while vs.length() > 0:
|
while vs.length() > 0:
|
||||||
eq = vs.car()
|
eq = vs.car()
|
||||||
print eq.getArg(1).text() + " = " + eq.getArg(2).text()
|
print( eq.getArg(1).text() + " = " + eq.getArg(2).text() )
|
||||||
vs = vs.cdr()
|
vs = vs.cdr()
|
||||||
print "no more answers"
|
s = raw_input("next: ?")
|
||||||
|
if s.find(';') != 0 :
|
||||||
|
return
|
||||||
|
print( "no more answers" )
|
||||||
|
return
|
||||||
|
|
||||||
|
def live():
|
||||||
|
loop = True
|
||||||
|
while loop:
|
||||||
|
s = raw_input("?- ")
|
||||||
|
query( s )
|
||||||
|
@ -50,8 +50,6 @@
|
|||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
extern Term Yap_StringToTerm(const char *s, size_t len, term_t bindings);
|
|
||||||
|
|
||||||
#if THREADS
|
#if THREADS
|
||||||
#define Yap_regp regcache
|
#define Yap_regp regcache
|
||||||
#endif
|
#endif
|
||||||
@ -89,4 +87,3 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
:- system_module( '$_consult', [compile/1,
|
:- system_module( '$_consult', [compile/1,
|
||||||
consult/1,
|
consult/1,
|
||||||
db_files/1,-
|
db_files/1,
|
||||||
ensure_loaded/1,
|
ensure_loaded/1,
|
||||||
exists_source/1,
|
exists_source/1,
|
||||||
exo_files/1,
|
exo_files/1,
|
||||||
@ -879,6 +879,7 @@ db_files(Fs) :-
|
|||||||
'$do_startup_reconsult'(_).
|
'$do_startup_reconsult'(_).
|
||||||
|
|
||||||
'$skip_unix_header'(Stream) :-
|
'$skip_unix_header'(Stream) :-
|
||||||
|
writeln(Stream),
|
||||||
peek_code(Stream, 0'#), !, % 35 is ASCII for '#
|
peek_code(Stream, 0'#), !, % 35 is ASCII for '#
|
||||||
skip(Stream, 10),
|
skip(Stream, 10),
|
||||||
'$skip_unix_header'(Stream).
|
'$skip_unix_header'(Stream).
|
||||||
|
@ -823,7 +823,10 @@ expand_goal(G, G).
|
|||||||
% be careful here not to generate an undefined exception.
|
% be careful here not to generate an undefined exception.
|
||||||
'$imported_pred'(G, ImportingMod, G0, ExportingMod) :-
|
'$imported_pred'(G, ImportingMod, G0, ExportingMod) :-
|
||||||
'$enter_undefp',
|
'$enter_undefp',
|
||||||
'$undefined'(G, ImportingMod),
|
( var(G) -> true ;
|
||||||
|
var(ImportingMod) -> true ;
|
||||||
|
'$undefined'(G, ImportingMod)
|
||||||
|
),
|
||||||
'$get_undefined_pred'(G, ImportingMod, G0, ExportingMod),
|
'$get_undefined_pred'(G, ImportingMod, G0, ExportingMod),
|
||||||
ExportingMod \= ImportingMod, !,
|
ExportingMod \= ImportingMod, !,
|
||||||
'$exit_undefp'.
|
'$exit_undefp'.
|
||||||
@ -833,8 +836,8 @@ expand_goal(G, G).
|
|||||||
|
|
||||||
% This predicate should be bidirectional: both
|
% This predicate should be bidirectional: both
|
||||||
% a consumer and a generator.
|
% a consumer and a generator.
|
||||||
'$get_undefined_pred'(G, ImportingMod, call(G), ImportingMod) :-
|
%'$get_undefined_pred'(G, ImportingMod, call(G), ImportingMod) :-
|
||||||
var(G), !.
|
% var(G), !.
|
||||||
'$get_undefined_pred'(G, ImportingMod, G0, ExportingMod) :-
|
'$get_undefined_pred'(G, ImportingMod, G0, ExportingMod) :-
|
||||||
recorded('$import','$import'(ExportingModI,ImportingMod,G0I,G,_,_),_),
|
recorded('$import','$import'(ExportingModI,ImportingMod,G0I,G,_,_),_),
|
||||||
'$continue_imported'(ExportingMod, ExportingModI, G0, G0I).
|
'$continue_imported'(ExportingMod, ExportingModI, G0, G0I).
|
||||||
@ -1404,10 +1407,14 @@ export_list(Module, List) :-
|
|||||||
G0=..[_N0|Args],
|
G0=..[_N0|Args],
|
||||||
G1=..[N1|Args],
|
G1=..[N1|Args],
|
||||||
( '$check_import'(M0,ContextMod,N1,K) ->
|
( '$check_import'(M0,ContextMod,N1,K) ->
|
||||||
( ContextMod = user ->
|
( ContextMod == prolog ->
|
||||||
( recordzifnot('$import','$import'(M0,user,G0,G1,N1,K),_) -> true ; true)
|
recordzifnot('$import','$import'(M0,user,G0,G1,N1,K),_),
|
||||||
|
fail
|
||||||
;
|
;
|
||||||
( recordaifnot('$import','$import'(M0,ContextMod,G0,G1,N1,K),_) -> true ; true )
|
recordaifnot('$import','$import'(M0,ContextMod,G0,G1,N1,K),_),
|
||||||
|
fail
|
||||||
|
;
|
||||||
|
true
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
true
|
true
|
||||||
|
@ -251,4 +251,3 @@ discontiguous(F) :-
|
|||||||
'$start_line'(LN), write(user_error,LN),
|
'$start_line'(LN), write(user_error,LN),
|
||||||
write(user_error,')'),
|
write(user_error,')'),
|
||||||
nl(user_error).
|
nl(user_error).
|
||||||
|
|
||||||
|
64
pl/preds.yap
64
pl/preds.yap
@ -15,9 +15,10 @@
|
|||||||
* *
|
* *
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
/** @defgroup Database Using the Clausal Data Base
|
/**
|
||||||
@ingroup builtins
|
* @defgroup Database Using the Clausal Data Base
|
||||||
@{
|
* @ingroup builtins
|
||||||
|
* @{
|
||||||
|
|
||||||
Predicates in YAP may be dynamic or static. By default, when
|
Predicates in YAP may be dynamic or static. By default, when
|
||||||
consulting or reconsulting, predicates are assumed to be static:
|
consulting or reconsulting, predicates are assumed to be static:
|
||||||
@ -33,9 +34,6 @@ semantics will be the same as for C-Prolog. But the programmer should be
|
|||||||
aware of the fact that asserting or retracting are still expensive operations,
|
aware of the fact that asserting or retracting are still expensive operations,
|
||||||
and therefore he should try to avoid them whenever possible.
|
and therefore he should try to avoid them whenever possible.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
:- system_module( '$_preds', [abolish/1,
|
:- system_module( '$_preds', [abolish/1,
|
||||||
@ -1003,7 +1001,7 @@ hide_predicate(P) :-
|
|||||||
|
|
||||||
|
|
||||||
For the predicates obeying the specification _P_ unify _Prop_
|
For the predicates obeying the specification _P_ unify _Prop_
|
||||||
with a property of _P_. These properties may be:
|
with a property of _P_. These properties may be:
|
||||||
|
|
||||||
+ `built_in `
|
+ `built_in `
|
||||||
true for built-in predicates,
|
true for built-in predicates,
|
||||||
@ -1044,20 +1042,19 @@ or built-in.
|
|||||||
|
|
||||||
|
|
||||||
*/
|
*/
|
||||||
predicate_property(Pred,Prop) :- var(Pred), !,
|
|
||||||
'$current_module'(Mod),
|
|
||||||
'$predicate_property2'(Pred,Prop,Mod).
|
|
||||||
predicate_property(Mod:Pred,Prop) :- !,
|
|
||||||
'$predicate_property2'(Pred,Prop,Mod).
|
|
||||||
predicate_property(Pred,Prop) :-
|
predicate_property(Pred,Prop) :-
|
||||||
'$current_module'(Mod),
|
strip_module(Pred, Mod, TruePred),
|
||||||
'$predicate_property2'(Pred,Prop,Mod).
|
'$predicate_property2'(TruePred,Prop,Mod).
|
||||||
|
|
||||||
'$predicate_property2'(Pred,Prop,M) :- var(M), !,
|
'$predicate_property2'(Pred, Prop, Mod) :-
|
||||||
'$all_current_modules'(M),
|
var(Mod), !,
|
||||||
'$predicate_property2'(Pred,Prop,M).
|
'$all_current_modules'(Mod),
|
||||||
'$predicate_property2'(Pred,Prop,M0) :- var(Pred), !,
|
'$predicate_property2'(Pred, Prop, Mod).
|
||||||
(M = M0 ; M = prolog), % prolog mode is automatically incorporate in every other module
|
'$predicate_property2'(Pred,Prop,M0) :-
|
||||||
|
var(Pred), !,
|
||||||
|
(M = M0 ;
|
||||||
|
M = prolog ;
|
||||||
|
M = user), % prolog and user modules are automatically incorporate in every other module
|
||||||
'$generate_all_preds_from_mod'(Pred, SourceMod, M),
|
'$generate_all_preds_from_mod'(Pred, SourceMod, M),
|
||||||
'$predicate_property'(Pred,SourceMod,M,Prop).
|
'$predicate_property'(Pred,SourceMod,M,Prop).
|
||||||
'$predicate_property2'(M:Pred,Prop,_) :- !,
|
'$predicate_property2'(M:Pred,Prop,_) :- !,
|
||||||
@ -1168,21 +1165,21 @@ Defines the relation: _P_ is a currently defined predicate whose name is the at
|
|||||||
*/
|
*/
|
||||||
current_predicate(A,T) :-
|
current_predicate(A,T) :-
|
||||||
'$ground_module'(T, M, T0),
|
'$ground_module'(T, M, T0),
|
||||||
format('`0 ~w~n', [M:T0]),
|
|
||||||
(
|
(
|
||||||
'$current_predicate'(A, M, T0, Flags),
|
'$current_predicate'(A, M, T0, _),
|
||||||
%TFlags is Flags /\ 0x00004000,
|
%TFlags is Flags /\ 0x00004000,
|
||||||
% format('1 ~w ~16r~n', [M:T0,Flags, TFlags]),
|
% format('1 ~w ~16r~n', [M:T0,Flags, TFlags]),
|
||||||
Flags /\ 0x00004000 =:= 0x0
|
\+ '$system_predicate'(T0, M)
|
||||||
;
|
;
|
||||||
'$imported_predicate'(A, M, A/_Arity, T0, Flags),
|
'$imported_pred'(T0, M, SourceT, SourceMod),
|
||||||
|
functor(T0, A, _),
|
||||||
% format('2 ~w ~16r~n', [M:T0,Flags]),
|
% format('2 ~w ~16r~n', [M:T0,Flags]),
|
||||||
Flags /\ 0x00004000 =:= 0x0
|
\+ '$system_predicate'(SourceT, SourceMod)
|
||||||
).
|
).
|
||||||
|
|
||||||
/** @pred system_predicate( _A_, _P_)
|
/** @pred system_predicate( _A_, _P_)
|
||||||
|
|
||||||
Defines the relation: _P_ is a built-in predicate whose name
|
Defines the relation: _P_ is a built-in predicate whose name
|
||||||
is the atom _A_.
|
is the atom _A_.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
@ -1211,15 +1208,17 @@ system_predicate(P) :-
|
|||||||
_Na_ is the name of the predicate, and _Ar_ its arity.
|
_Na_ is the name of the predicate, and _Ar_ its arity.
|
||||||
*/
|
*/
|
||||||
current_predicate(F0) :-
|
current_predicate(F0) :-
|
||||||
'$ground_module'(F0, M, F),
|
strip_module(F0, M, F),
|
||||||
(
|
(
|
||||||
'$current_predicate'(N, M, S, _),
|
var(F)
|
||||||
functor( S, N, Ar),
|
->
|
||||||
F = N/Ar
|
current_predicate(M:A, S),
|
||||||
|
functor( S, A, Ar)
|
||||||
;
|
;
|
||||||
'$imported_predicate'(_Name, M, F, S, _)
|
F = A/Ar,
|
||||||
),
|
current_predicate(M:A, S),
|
||||||
\+ system_predicate(_, S).
|
functor( S, A, Ar)
|
||||||
|
).
|
||||||
|
|
||||||
'$imported_predicate'(A, ImportingMod, A/Arity, G, Flags) :-
|
'$imported_predicate'(A, ImportingMod, A/Arity, G, Flags) :-
|
||||||
'$get_undefined_pred'(G, ImportingMod, G0, ExportingMod),
|
'$get_undefined_pred'(G, ImportingMod, G0, ExportingMod),
|
||||||
@ -1319,4 +1318,3 @@ clause_property(ClauseRef, predicate(PredicateIndicator)) :-
|
|||||||
/**
|
/**
|
||||||
@}
|
@}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -327,4 +327,3 @@ all(T,G,S) :-
|
|||||||
/**
|
/**
|
||||||
@}
|
@}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -205,4 +205,3 @@ predmerge(<, P, H1, H2, T1, T2, [H1|R]) :-
|
|||||||
predmerge(P, T1, [H2|T2], R).
|
predmerge(P, T1, [H2|T2], R).
|
||||||
|
|
||||||
%%! @}
|
%%! @}
|
||||||
|
|
||||||
|
@ -737,5 +737,3 @@ bind_actions()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user