Merge branch 'master' of ssh://yap.git.sourceforge.net/gitroot/yap/yap-6.3
This commit is contained in:
commit
5614d05a03
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -34,3 +34,6 @@
|
|||||||
[submodule "packages/YapR"]
|
[submodule "packages/YapR"]
|
||||||
path = packages/YapR
|
path = packages/YapR
|
||||||
url = git://yap.git.sourceforge.net/gitroot/yap/YapR
|
url = git://yap.git.sourceforge.net/gitroot/yap/YapR
|
||||||
|
[submodule "packages/pldoc"]
|
||||||
|
path = packages/pldoc
|
||||||
|
url = git://yap.git.sourceforge.net/gitroot/yap/pldoc
|
||||||
|
24
C/absmi.c
24
C/absmi.c
@ -9222,7 +9222,7 @@ Yap_absmi(int inp)
|
|||||||
BEGP(pt0);
|
BEGP(pt0);
|
||||||
deref_body(d0, pt0, plus_vc_unk, plus_vc_nvar);
|
deref_body(d0, pt0, plus_vc_unk, plus_vc_nvar);
|
||||||
saveregs();
|
saveregs();
|
||||||
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A+B");
|
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A+ " Int_FORMAT, PREG->u.xxn.c);
|
||||||
setregs();
|
setregs();
|
||||||
FAIL();
|
FAIL();
|
||||||
ENDP(pt0);
|
ENDP(pt0);
|
||||||
@ -9322,7 +9322,7 @@ Yap_absmi(int inp)
|
|||||||
BEGP(pt0);
|
BEGP(pt0);
|
||||||
deref_body(d0, pt0, plus_y_vc_unk, plus_y_vc_nvar);
|
deref_body(d0, pt0, plus_y_vc_unk, plus_y_vc_nvar);
|
||||||
saveregs();
|
saveregs();
|
||||||
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A+B");
|
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A+ " Int_FORMAT, PREG->u.yxn.c);
|
||||||
setregs();
|
setregs();
|
||||||
FAIL();
|
FAIL();
|
||||||
ENDP(pt0);
|
ENDP(pt0);
|
||||||
@ -9408,7 +9408,7 @@ Yap_absmi(int inp)
|
|||||||
BEGP(pt0);
|
BEGP(pt0);
|
||||||
deref_body(d0, pt0, minus_cv_unk, minus_cv_nvar);
|
deref_body(d0, pt0, minus_cv_unk, minus_cv_nvar);
|
||||||
saveregs();
|
saveregs();
|
||||||
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A-B");
|
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is " Int_FORMAT "-A", PREG->u.xxn.c);
|
||||||
setregs();
|
setregs();
|
||||||
FAIL();
|
FAIL();
|
||||||
ENDP(pt0);
|
ENDP(pt0);
|
||||||
@ -9508,7 +9508,7 @@ Yap_absmi(int inp)
|
|||||||
BEGP(pt0);
|
BEGP(pt0);
|
||||||
deref_body(d0, pt0, minus_y_cv_unk, minus_y_cv_nvar);
|
deref_body(d0, pt0, minus_y_cv_unk, minus_y_cv_nvar);
|
||||||
saveregs();
|
saveregs();
|
||||||
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A-B");
|
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is " Int_FORMAT "-A", PREG->u.yxn.c);
|
||||||
setregs();
|
setregs();
|
||||||
FAIL();
|
FAIL();
|
||||||
ENDP(pt0);
|
ENDP(pt0);
|
||||||
@ -9594,7 +9594,7 @@ Yap_absmi(int inp)
|
|||||||
BEGP(pt0);
|
BEGP(pt0);
|
||||||
deref_body(d0, pt0, times_vc_unk, times_vc_nvar);
|
deref_body(d0, pt0, times_vc_unk, times_vc_nvar);
|
||||||
saveregs();
|
saveregs();
|
||||||
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A*B");
|
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A* " Int_FORMAT, PREG->u.xxn.c);
|
||||||
setregs();
|
setregs();
|
||||||
FAIL();
|
FAIL();
|
||||||
ENDP(pt0);
|
ENDP(pt0);
|
||||||
@ -9694,7 +9694,7 @@ Yap_absmi(int inp)
|
|||||||
BEGP(pt0);
|
BEGP(pt0);
|
||||||
deref_body(d0, pt0, times_y_vc_unk, times_y_vc_nvar);
|
deref_body(d0, pt0, times_y_vc_unk, times_y_vc_nvar);
|
||||||
saveregs();
|
saveregs();
|
||||||
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A*B");
|
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A* " Int_FORMAT, PREG->u.yxn.c);
|
||||||
setregs();
|
setregs();
|
||||||
FAIL();
|
FAIL();
|
||||||
ENDP(pt0);
|
ENDP(pt0);
|
||||||
@ -9830,7 +9830,7 @@ Yap_absmi(int inp)
|
|||||||
BEGP(pt0);
|
BEGP(pt0);
|
||||||
deref_body(d0, pt0, div_cv_unk, div_cv_nvar);
|
deref_body(d0, pt0, div_cv_unk, div_cv_nvar);
|
||||||
saveregs();
|
saveregs();
|
||||||
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A//B");
|
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is " Int_FORMAT "// A", PREG->u.xxn.c);
|
||||||
setregs();
|
setregs();
|
||||||
FAIL();
|
FAIL();
|
||||||
ENDP(pt0);
|
ENDP(pt0);
|
||||||
@ -9988,7 +9988,7 @@ Yap_absmi(int inp)
|
|||||||
BEGP(pt0);
|
BEGP(pt0);
|
||||||
deref_body(d0, pt0, div_y_cv_unk, div_y_cv_nvar);
|
deref_body(d0, pt0, div_y_cv_unk, div_y_cv_nvar);
|
||||||
saveregs();
|
saveregs();
|
||||||
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A//B");
|
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is " Int_FORMAT "// A", PREG->u.yxn.c);
|
||||||
setregs();
|
setregs();
|
||||||
FAIL();
|
FAIL();
|
||||||
ENDP(pt0);
|
ENDP(pt0);
|
||||||
@ -10075,7 +10075,7 @@ Yap_absmi(int inp)
|
|||||||
BEGP(pt0);
|
BEGP(pt0);
|
||||||
deref_body(d0, pt0, and_vc_unk, and_vc_nvar);
|
deref_body(d0, pt0, and_vc_unk, and_vc_nvar);
|
||||||
saveregs();
|
saveregs();
|
||||||
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A/\\B");
|
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A /\\ " Int_FORMAT , PREG->u.xxn.c);
|
||||||
setregs();
|
setregs();
|
||||||
FAIL();
|
FAIL();
|
||||||
ENDP(pt0);
|
ENDP(pt0);
|
||||||
@ -10175,7 +10175,7 @@ Yap_absmi(int inp)
|
|||||||
BEGP(pt0);
|
BEGP(pt0);
|
||||||
deref_body(d0, pt0, and_y_vc_unk, and_y_vc_nvar);
|
deref_body(d0, pt0, and_y_vc_unk, and_y_vc_nvar);
|
||||||
saveregs();
|
saveregs();
|
||||||
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A/\\B");
|
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A /\\ " Int_FORMAT , PREG->u.yxn.c);
|
||||||
setregs();
|
setregs();
|
||||||
FAIL();
|
FAIL();
|
||||||
ENDP(pt0);
|
ENDP(pt0);
|
||||||
@ -10261,7 +10261,7 @@ Yap_absmi(int inp)
|
|||||||
BEGP(pt0);
|
BEGP(pt0);
|
||||||
deref_body(d0, pt0, or_vc_unk, or_vc_nvar);
|
deref_body(d0, pt0, or_vc_unk, or_vc_nvar);
|
||||||
saveregs();
|
saveregs();
|
||||||
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A\\/B");
|
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A \\/ " Int_FORMAT , PREG->u.xxn.c);
|
||||||
setregs();
|
setregs();
|
||||||
FAIL();
|
FAIL();
|
||||||
ENDP(pt0);
|
ENDP(pt0);
|
||||||
@ -10361,7 +10361,7 @@ Yap_absmi(int inp)
|
|||||||
BEGP(pt0);
|
BEGP(pt0);
|
||||||
deref_body(d0, pt0, or_y_vc_unk, or_y_vc_nvar);
|
deref_body(d0, pt0, or_y_vc_unk, or_y_vc_nvar);
|
||||||
saveregs();
|
saveregs();
|
||||||
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A\\/B");
|
Yap_Error(INSTANTIATION_ERROR, TermNil, "X is A \\/ " Int_FORMAT , PREG->u.yxn.c);
|
||||||
setregs();
|
setregs();
|
||||||
FAIL();
|
FAIL();
|
||||||
ENDP(pt0);
|
ENDP(pt0);
|
||||||
|
54
C/adtdefs.c
54
C/adtdefs.c
@ -493,41 +493,43 @@ Yap_GetOpProp(Atom a, op_type type USES_REGS)
|
|||||||
{ /* look property list of atom a for kind */
|
{ /* look property list of atom a for kind */
|
||||||
AtomEntry *ae = RepAtom(a);
|
AtomEntry *ae = RepAtom(a);
|
||||||
PropEntry *pp;
|
PropEntry *pp;
|
||||||
OpEntry *info = NULL;
|
|
||||||
|
|
||||||
READ_LOCK(ae->ARWLock);
|
READ_LOCK(ae->ARWLock);
|
||||||
pp = RepProp(ae->PropsOfAE);
|
pp = RepProp(ae->PropsOfAE);
|
||||||
while (!EndOfPAEntr(pp) &&
|
while (!EndOfPAEntr(pp)) {
|
||||||
( pp->KindOfPE != OpProperty ||
|
OpEntry *info = NULL;
|
||||||
((OpEntry *)pp)->OpModule != CurrentModule))
|
if ( pp->KindOfPE != OpProperty) {
|
||||||
pp = RepProp(pp->NextOfPE);
|
|
||||||
if ((info = (OpEntry *)pp)) {
|
|
||||||
if ((type == INFIX_OP && !info->Infix) ||
|
|
||||||
(type == POSFIX_OP && !info->Posfix) ||
|
|
||||||
(type == PREFIX_OP && !info->Prefix))
|
|
||||||
pp = RepProp(NIL);
|
|
||||||
}
|
|
||||||
if (EndOfPAEntr(pp)) {
|
|
||||||
pp = RepProp(ae->PropsOfAE);
|
|
||||||
while (!EndOfPAEntr(pp) &&
|
|
||||||
( pp->KindOfPE != OpProperty ||
|
|
||||||
((OpEntry *)pp)->OpModule != PROLOG_MODULE))
|
|
||||||
pp = RepProp(pp->NextOfPE);
|
pp = RepProp(pp->NextOfPE);
|
||||||
if ((info = (OpEntry *)pp)) {
|
continue;
|
||||||
if ((type == INFIX_OP && !info->Infix) ||
|
}
|
||||||
(type == POSFIX_OP && !info->Posfix) ||
|
info = (OpEntry *)pp;
|
||||||
(type == PREFIX_OP && !info->Prefix))
|
if (info->OpModule != CurrentModule &&
|
||||||
pp = RepProp(NIL);
|
info->OpModule != PROLOG_MODULE) {
|
||||||
|
pp = RepProp(pp->NextOfPE);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (type == INFIX_OP) {
|
||||||
|
if (!info->Infix) {
|
||||||
|
pp = RepProp(pp->NextOfPE);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else if (type == POSFIX_OP) {
|
||||||
|
if (!info->Posfix) {
|
||||||
|
pp = RepProp(pp->NextOfPE);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!info->Prefix) {
|
||||||
|
pp = RepProp(pp->NextOfPE);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (!info) {
|
|
||||||
READ_UNLOCK(ae->ARWLock);
|
|
||||||
return NULL;
|
|
||||||
} else {
|
|
||||||
READ_LOCK(info->OpRWLock);
|
READ_LOCK(info->OpRWLock);
|
||||||
READ_UNLOCK(ae->ARWLock);
|
READ_UNLOCK(ae->ARWLock);
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
READ_UNLOCK(ae->ARWLock);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2429,13 +2429,13 @@ a_fetch_vv(cmp_op_info *cmp_info, int pass_no, struct intermediates *cip)
|
|||||||
PInstr *p = cip->cpc->nextInst;
|
PInstr *p = cip->cpc->nextInst;
|
||||||
Ventry *ve;
|
Ventry *ve;
|
||||||
ve = (Ventry *) p->rnd1;
|
ve = (Ventry *) p->rnd1;
|
||||||
if (ve->KindOfVE != PermVar && p->op != nop_op) {
|
if (ve->KindOfVE != PermVar && p->op != nop_op && p->op != put_var_op) {
|
||||||
p->rnd2 = ve->NoOfVE & MaskVarAdrs;
|
p->rnd2 = ve->NoOfVE & MaskVarAdrs;
|
||||||
p->op = nop_op;
|
p->op = nop_op;
|
||||||
}
|
}
|
||||||
p = p->nextInst;
|
p = p->nextInst;
|
||||||
ve = (Ventry *) p->rnd1;
|
ve = (Ventry *) p->rnd1;
|
||||||
if (ve->KindOfVE != PermVar && p->op != nop_op) {
|
if (ve->KindOfVE != PermVar && p->op != nop_op && p->op != put_var_op) {
|
||||||
p->rnd2 = ve->NoOfVE & MaskVarAdrs;
|
p->rnd2 = ve->NoOfVE & MaskVarAdrs;
|
||||||
p->op = nop_op;
|
p->op = nop_op;
|
||||||
}
|
}
|
||||||
@ -2458,7 +2458,7 @@ a_fetch_vc(cmp_op_info *cmp_info, int pass_no, struct intermediates *cip)
|
|||||||
PInstr *p = cip->cpc->nextInst;
|
PInstr *p = cip->cpc->nextInst;
|
||||||
Ventry *ve;
|
Ventry *ve;
|
||||||
ve = (Ventry *) p->rnd1;
|
ve = (Ventry *) p->rnd1;
|
||||||
if (ve->KindOfVE != PermVar && p->op != nop_op) {
|
if (ve->KindOfVE != PermVar && p->op != nop_op && p->op != put_var_op) {
|
||||||
p->rnd2 = ve->NoOfVE & MaskVarAdrs;
|
p->rnd2 = ve->NoOfVE & MaskVarAdrs;
|
||||||
p->op = nop_op;
|
p->op = nop_op;
|
||||||
}
|
}
|
||||||
@ -2479,7 +2479,7 @@ a_fetch_cv(cmp_op_info *cmp_info, int pass_no, struct intermediates *cip)
|
|||||||
PInstr *p = cip->cpc->nextInst;
|
PInstr *p = cip->cpc->nextInst;
|
||||||
Ventry *ve;
|
Ventry *ve;
|
||||||
ve = (Ventry *) p->rnd1;
|
ve = (Ventry *) p->rnd1;
|
||||||
if (ve->KindOfVE != PermVar && p->op != nop_op) {
|
if (ve->KindOfVE != PermVar && p->op != nop_op && p->op != put_var_op) {
|
||||||
p->rnd2 = ve->NoOfVE & MaskVarAdrs;
|
p->rnd2 = ve->NoOfVE & MaskVarAdrs;
|
||||||
p->op = nop_op;
|
p->op = nop_op;
|
||||||
}
|
}
|
||||||
|
41
C/bignum.c
41
C/bignum.c
@ -294,8 +294,8 @@ Yap_MkBlobStringTerm(const char *s, size_t len)
|
|||||||
H[1] = BLOB_STRING;
|
H[1] = BLOB_STRING;
|
||||||
|
|
||||||
siz = (sizeof(size_t)+len+sizeof(CELL))/sizeof(CELL);
|
siz = (sizeof(size_t)+len+sizeof(CELL))/sizeof(CELL);
|
||||||
dst->_mp_size = siz;
|
dst->_mp_size = 0L;
|
||||||
dst->_mp_alloc = 0L;
|
dst->_mp_alloc = siz;
|
||||||
sp = (blob_string_t *)(dst+1);
|
sp = (blob_string_t *)(dst+1);
|
||||||
H = (CELL *)sp;
|
H = (CELL *)sp;
|
||||||
sp->len = sz;
|
sp->len = sz;
|
||||||
@ -314,10 +314,39 @@ Yap_MkBlobWideStringTerm(const wchar_t *s, size_t len)
|
|||||||
size_t sz;
|
size_t sz;
|
||||||
MP_INT *dst = (MP_INT *)(H+2);
|
MP_INT *dst = (MP_INT *)(H+2);
|
||||||
blob_string_t *sp;
|
blob_string_t *sp;
|
||||||
size_t siz;
|
size_t siz, i = 0;
|
||||||
|
|
||||||
sz = wcslen(s);
|
sz = wcslen(s);
|
||||||
if (len > 0 && sz > len) sz = len;
|
if (len > 0 && sz > len) sz = len;
|
||||||
|
while (i < sz) {
|
||||||
|
if (s[i++] >= 255) break;
|
||||||
|
}
|
||||||
|
if (i == sz) {
|
||||||
|
char *target;
|
||||||
|
size_t i = 0;
|
||||||
|
|
||||||
|
if (len/sizeof(CELL) > (ASP-ret)-1024) {
|
||||||
|
return TermNil;
|
||||||
|
}
|
||||||
|
H[0] = (CELL)FunctorBigInt;
|
||||||
|
H[1] = BLOB_STRING;
|
||||||
|
|
||||||
|
siz = (sizeof(size_t)+len+sizeof(CELL))/sizeof(CELL);
|
||||||
|
dst->_mp_size = 0L;
|
||||||
|
dst->_mp_alloc = siz;
|
||||||
|
sp = (blob_string_t *)(dst+1);
|
||||||
|
H = (CELL *)sp;
|
||||||
|
sp->len = sz;
|
||||||
|
target = (char *)(sp+1);
|
||||||
|
while (i < sz+1) {
|
||||||
|
target[i] = s[i];
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
H += siz;
|
||||||
|
H[0] = EndSpecials;
|
||||||
|
H++;
|
||||||
|
return AbsAppl(ret);
|
||||||
|
}
|
||||||
if (len/sizeof(CELL) > (ASP-ret)-1024) {
|
if (len/sizeof(CELL) > (ASP-ret)-1024) {
|
||||||
return TermNil;
|
return TermNil;
|
||||||
}
|
}
|
||||||
@ -325,12 +354,12 @@ Yap_MkBlobWideStringTerm(const wchar_t *s, size_t len)
|
|||||||
H[1] = BLOB_WIDE_STRING;
|
H[1] = BLOB_WIDE_STRING;
|
||||||
|
|
||||||
siz = (sizeof(size_t)+(len+2)*sizeof(wchar_t))/sizeof(CELL);
|
siz = (sizeof(size_t)+(len+2)*sizeof(wchar_t))/sizeof(CELL);
|
||||||
dst->_mp_size = siz;
|
dst->_mp_size = 0L;
|
||||||
dst->_mp_alloc = 0L;
|
dst->_mp_alloc = siz;
|
||||||
sp = (blob_string_t *)(dst+1);
|
sp = (blob_string_t *)(dst+1);
|
||||||
H = (CELL *)sp;
|
H = (CELL *)sp;
|
||||||
sp->len = sz;
|
sp->len = sz;
|
||||||
wcsncpy((wchar_t *)(sp+1), s, sz);
|
wcsncpy((wchar_t *)(sp+1), s, sz+1);
|
||||||
H += siz;
|
H += siz;
|
||||||
H[0] = EndSpecials;
|
H[0] = EndSpecials;
|
||||||
H++;
|
H++;
|
||||||
|
@ -2528,20 +2528,20 @@ YAP_Read(IOSTREAM *inp)
|
|||||||
BACKUP_MACHINE_REGS();
|
BACKUP_MACHINE_REGS();
|
||||||
|
|
||||||
|
|
||||||
tokstart = LOCAL_tokptr = LOCAL_toktide = Yap_tokenizer(inp, &tpos);
|
tokstart = LOCAL_tokptr = LOCAL_toktide = Yap_tokenizer(inp, FALSE, &tpos);
|
||||||
if (LOCAL_ErrorMessage)
|
if (LOCAL_ErrorMessage)
|
||||||
{
|
{
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (inp->flags & (SIO_FEOF|SIO_FEOF2)) {
|
if (inp->flags & (SIO_FEOF|SIO_FEOF2)) {
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
return MkAtomTerm (AtomEof);
|
return MkAtomTerm (AtomEof);
|
||||||
}
|
}
|
||||||
t = Yap_Parse();
|
t = Yap_Parse();
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
|
|
||||||
RECOVER_MACHINE_REGS();
|
RECOVER_MACHINE_REGS();
|
||||||
return t;
|
return t;
|
||||||
|
15
C/errors.c
15
C/errors.c
@ -1771,6 +1771,21 @@ Yap_Error(yap_error_number type, Term where, char *format,...)
|
|||||||
serious = TRUE;
|
serious = TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case TYPE_ERROR_STRING:
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
Term ti[2];
|
||||||
|
|
||||||
|
i = strlen(tmpbuf);
|
||||||
|
ti[0] = MkAtomTerm(AtomString);
|
||||||
|
ti[1] = where;
|
||||||
|
nt[0] = Yap_MkApplTerm(FunctorTypeError, 2, ti);
|
||||||
|
tp = tmpbuf+i;
|
||||||
|
psize -= i;
|
||||||
|
fun = FunctorError;
|
||||||
|
serious = TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case TYPE_ERROR_UBYTE:
|
case TYPE_ERROR_UBYTE:
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
64
C/iopreds.c
64
C/iopreds.c
@ -402,19 +402,19 @@ Yap_StringToTerm(char *s,Term *tp)
|
|||||||
if (sno == NULL)
|
if (sno == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
TR_before_parse = TR;
|
TR_before_parse = TR;
|
||||||
tokstart = LOCAL_tokptr = LOCAL_toktide = Yap_tokenizer(sno, &tpos);
|
tokstart = LOCAL_tokptr = LOCAL_toktide = Yap_tokenizer(sno, FALSE, &tpos);
|
||||||
if (tokstart == NIL || tokstart->Tok == Ord (eot_tok)) {
|
if (tokstart == NIL || tokstart->Tok == Ord (eot_tok)) {
|
||||||
if (tp) {
|
if (tp) {
|
||||||
*tp = MkAtomTerm(AtomEOFBeforeEOT);
|
*tp = MkAtomTerm(AtomEOFBeforeEOT);
|
||||||
}
|
}
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
Sclose(sno);
|
Sclose(sno);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} else if (LOCAL_ErrorMessage) {
|
} else if (LOCAL_ErrorMessage) {
|
||||||
if (tp) {
|
if (tp) {
|
||||||
*tp = MkAtomTerm(Yap_LookupAtom(LOCAL_ErrorMessage));
|
*tp = MkAtomTerm(Yap_LookupAtom(LOCAL_ErrorMessage));
|
||||||
}
|
}
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
Sclose(sno);
|
Sclose(sno);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -422,11 +422,11 @@ Yap_StringToTerm(char *s,Term *tp)
|
|||||||
TR = TR_before_parse;
|
TR = TR_before_parse;
|
||||||
if (!t || LOCAL_ErrorMessage) {
|
if (!t || LOCAL_ErrorMessage) {
|
||||||
GenerateSyntaxError(tp, tokstart, sno PASS_REGS);
|
GenerateSyntaxError(tp, tokstart, sno PASS_REGS);
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
Sclose(sno);
|
Sclose(sno);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
Sclose(sno);
|
Sclose(sno);
|
||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
@ -512,25 +512,25 @@ Yap_readTerm(void *st0, Term *tp, Term *varnames, Term *terror, Term *tpos)
|
|||||||
if (st == NULL) {
|
if (st == NULL) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
tokstart = LOCAL_tokptr = LOCAL_toktide = Yap_tokenizer(st, tpos);
|
tokstart = LOCAL_tokptr = LOCAL_toktide = Yap_tokenizer(st, FALSE, tpos);
|
||||||
if (LOCAL_ErrorMessage)
|
if (LOCAL_ErrorMessage)
|
||||||
{
|
{
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
if (terror)
|
if (terror)
|
||||||
*terror = MkAtomTerm(Yap_LookupAtom(LOCAL_ErrorMessage));
|
*terror = MkAtomTerm(Yap_LookupAtom(LOCAL_ErrorMessage));
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
pt = Yap_Parse();
|
pt = Yap_Parse();
|
||||||
if (LOCAL_ErrorMessage || pt == (CELL)0) {
|
if (LOCAL_ErrorMessage || pt == (CELL)0) {
|
||||||
GenerateSyntaxError(terror, tokstart, st PASS_REGS);
|
GenerateSyntaxError(terror, tokstart, st PASS_REGS);
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (varnames) {
|
if (varnames) {
|
||||||
*varnames = Yap_VarNames(LOCAL_VarTable, TermNil);
|
*varnames = Yap_VarNames(LOCAL_VarTable, TermNil);
|
||||||
if (!*varnames) {
|
if (!*varnames) {
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -548,6 +548,7 @@ Yap_readTerm(void *st0, Term *tp, Term *varnames, Term *terror, Term *tpos)
|
|||||||
Vars: ARG4
|
Vars: ARG4
|
||||||
Pos: ARG5
|
Pos: ARG5
|
||||||
Err: ARG6
|
Err: ARG6
|
||||||
|
Comments: ARG7
|
||||||
*/
|
*/
|
||||||
static Int
|
static Int
|
||||||
do_read(IOSTREAM *inp_stream, int nargs USES_REGS)
|
do_read(IOSTREAM *inp_stream, int nargs USES_REGS)
|
||||||
@ -556,6 +557,8 @@ static Int
|
|||||||
TokEntry *tokstart;
|
TokEntry *tokstart;
|
||||||
Term tmod = Deref(ARG3), OCurrentModule = CurrentModule, tpos;
|
Term tmod = Deref(ARG3), OCurrentModule = CurrentModule, tpos;
|
||||||
extern void Yap_setCurrentSourceLocation(IOSTREAM **s);
|
extern void Yap_setCurrentSourceLocation(IOSTREAM **s);
|
||||||
|
Term tcomms = Deref(ARG7);
|
||||||
|
int store_comments = IsVarTerm(tcomms);
|
||||||
|
|
||||||
Yap_setCurrentSourceLocation(&inp_stream);
|
Yap_setCurrentSourceLocation(&inp_stream);
|
||||||
if (IsVarTerm(tmod)) {
|
if (IsVarTerm(tmod)) {
|
||||||
@ -565,11 +568,6 @@ static Int
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
LOCAL_Error_TYPE = YAP_NO_ERROR;
|
LOCAL_Error_TYPE = YAP_NO_ERROR;
|
||||||
tpos = Yap_StreamPosition(inp_stream);
|
|
||||||
if (!Yap_unify(tpos,ARG5)) {
|
|
||||||
/* do this early so that we do not have to protect it in case of stack expansion */
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
CELL *old_H;
|
CELL *old_H;
|
||||||
int64_t cpos = 0;
|
int64_t cpos = 0;
|
||||||
@ -583,10 +581,12 @@ static Int
|
|||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
old_H = H;
|
old_H = H;
|
||||||
tpos = Yap_StreamPosition(inp_stream);
|
tpos = Yap_StreamPosition(inp_stream);
|
||||||
tokstart = LOCAL_tokptr = LOCAL_toktide = Yap_tokenizer(inp_stream, &tpos);
|
LOCAL_Comments = TermNil;
|
||||||
|
LOCAL_CommentsNextChar = LOCAL_CommentsTail = NULL;
|
||||||
|
tokstart = LOCAL_tokptr = LOCAL_toktide = Yap_tokenizer(inp_stream, store_comments, &tpos);
|
||||||
if (LOCAL_Error_TYPE != YAP_NO_ERROR && seekable) {
|
if (LOCAL_Error_TYPE != YAP_NO_ERROR && seekable) {
|
||||||
H = old_H;
|
H = old_H;
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
if (seekable) {
|
if (seekable) {
|
||||||
Sseek64(inp_stream, cpos, SIO_SEEK_SET);
|
Sseek64(inp_stream, cpos, SIO_SEEK_SET);
|
||||||
}
|
}
|
||||||
@ -616,6 +616,10 @@ static Int
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!Yap_unify(tpos,ARG5)) {
|
||||||
|
/* do this early so that we do not have to protect it in case of stack expansion */
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
LOCAL_Error_TYPE = YAP_NO_ERROR;
|
LOCAL_Error_TYPE = YAP_NO_ERROR;
|
||||||
/* preserve value of H after scanning: otherwise we may lose strings
|
/* preserve value of H after scanning: otherwise we may lose strings
|
||||||
and floats */
|
and floats */
|
||||||
@ -624,10 +628,10 @@ static Int
|
|||||||
/* did we get the end of file from an abort? */
|
/* did we get the end of file from an abort? */
|
||||||
if (LOCAL_ErrorMessage &&
|
if (LOCAL_ErrorMessage &&
|
||||||
!strcmp(LOCAL_ErrorMessage,"Abort")) {
|
!strcmp(LOCAL_ErrorMessage,"Abort")) {
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} else {
|
} else {
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
|
|
||||||
return Yap_unify_constant(ARG2, MkAtomTerm (AtomEof))
|
return Yap_unify_constant(ARG2, MkAtomTerm (AtomEof))
|
||||||
&& Yap_unify_constant(ARG4, TermNil);
|
&& Yap_unify_constant(ARG4, TermNil);
|
||||||
@ -670,7 +674,7 @@ static Int
|
|||||||
}
|
}
|
||||||
if (ParserErrorStyle == QUIET_ON_PARSER_ERROR) {
|
if (ParserErrorStyle == QUIET_ON_PARSER_ERROR) {
|
||||||
/* just fail */
|
/* just fail */
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} else if (ParserErrorStyle == CONTINUE_ON_PARSER_ERROR) {
|
} else if (ParserErrorStyle == CONTINUE_ON_PARSER_ERROR) {
|
||||||
LOCAL_ErrorMessage = NULL;
|
LOCAL_ErrorMessage = NULL;
|
||||||
@ -682,14 +686,14 @@ static Int
|
|||||||
LOCAL_ErrorMessage = "SYNTAX ERROR";
|
LOCAL_ErrorMessage = "SYNTAX ERROR";
|
||||||
|
|
||||||
if (ParserErrorStyle == EXCEPTION_ON_PARSER_ERROR) {
|
if (ParserErrorStyle == EXCEPTION_ON_PARSER_ERROR) {
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
Yap_Error(SYNTAX_ERROR,terr,LOCAL_ErrorMessage);
|
Yap_Error(SYNTAX_ERROR,terr,LOCAL_ErrorMessage);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
} else /* FAIL ON PARSER ERROR */ {
|
} else /* FAIL ON PARSER ERROR */ {
|
||||||
Term t[2];
|
Term t[2];
|
||||||
t[0] = terr;
|
t[0] = terr;
|
||||||
t[1] = MkAtomTerm(Yap_LookupAtom(LOCAL_ErrorMessage));
|
t[1] = MkAtomTerm(Yap_LookupAtom(LOCAL_ErrorMessage));
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
return Yap_unify(ARG6,Yap_MkApplTerm(Yap_MkFunctor(AtomError,2),2,t));
|
return Yap_unify(ARG6,Yap_MkApplTerm(Yap_MkFunctor(AtomError,2),2,t));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -701,6 +705,8 @@ static Int
|
|||||||
}
|
}
|
||||||
if (!Yap_unify(t, ARG2))
|
if (!Yap_unify(t, ARG2))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
if (store_comments && !Yap_unify(LOCAL_Comments, ARG7))
|
||||||
|
return FALSE;
|
||||||
if (AtomOfTerm (Deref (ARG1)) == AtomTrue) {
|
if (AtomOfTerm (Deref (ARG1)) == AtomTrue) {
|
||||||
while (TRUE) {
|
while (TRUE) {
|
||||||
CELL *old_H = H;
|
CELL *old_H = H;
|
||||||
@ -721,10 +727,10 @@ static Int
|
|||||||
TR = old_TR;
|
TR = old_TR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
return Yap_unify (v, ARG4);
|
return Yap_unify (v, ARG4);
|
||||||
} else {
|
} else {
|
||||||
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable);
|
Yap_clean_tokenizer(tokstart, LOCAL_VarTable, LOCAL_AnonVarTable, LOCAL_Comments);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -732,7 +738,7 @@ static Int
|
|||||||
static Int
|
static Int
|
||||||
p_read ( USES_REGS1 )
|
p_read ( USES_REGS1 )
|
||||||
{ /* '$read'(+Flag,?Term,?Module,?Vars,-Pos,-Err) */
|
{ /* '$read'(+Flag,?Term,?Module,?Vars,-Pos,-Err) */
|
||||||
return do_read(NULL, 6 PASS_REGS);
|
return do_read(NULL, 7 PASS_REGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int Yap_getInputStream(Int, IOSTREAM **);
|
extern int Yap_getInputStream(Int, IOSTREAM **);
|
||||||
@ -743,10 +749,10 @@ p_read2 ( USES_REGS1 )
|
|||||||
IOSTREAM *inp_stream;
|
IOSTREAM *inp_stream;
|
||||||
Int out;
|
Int out;
|
||||||
|
|
||||||
if (!Yap_getInputStream(Yap_InitSlot(Deref(ARG7) PASS_REGS), &inp_stream)) {
|
if (!Yap_getInputStream(Yap_InitSlot(Deref(ARG8) PASS_REGS), &inp_stream)) {
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
out = do_read(inp_stream, 7 PASS_REGS);
|
out = do_read(inp_stream, 8 PASS_REGS);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1108,8 +1114,8 @@ Yap_InitIOPreds(void)
|
|||||||
/* here the Input/Output predicates */
|
/* here the Input/Output predicates */
|
||||||
Yap_InitCPred ("$set_read_error_handler", 1, p_set_read_error_handler, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred ("$set_read_error_handler", 1, p_set_read_error_handler, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred ("$get_read_error_handler", 1, p_get_read_error_handler, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred ("$get_read_error_handler", 1, p_get_read_error_handler, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred ("$read", 6, p_read, SyncPredFlag|HiddenPredFlag|UserCPredFlag);
|
Yap_InitCPred ("$read", 7, p_read, SyncPredFlag|HiddenPredFlag|UserCPredFlag);
|
||||||
Yap_InitCPred ("$read", 7, p_read2, SyncPredFlag|HiddenPredFlag|UserCPredFlag);
|
Yap_InitCPred ("$read", 8, p_read2, SyncPredFlag|HiddenPredFlag|UserCPredFlag);
|
||||||
Yap_InitCPred ("$start_line", 1, p_startline, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred ("$start_line", 1, p_startline, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred ("$change_type_of_char", 2, p_change_type_of_char, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred ("$change_type_of_char", 2, p_change_type_of_char, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred ("$type_of_char", 2, p_type_of_char, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred ("$type_of_char", 2, p_type_of_char, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
|
@ -267,7 +267,7 @@ IsPosfixOp(Atom op, int *pptr, int *lpptr USES_REGS)
|
|||||||
{
|
{
|
||||||
int p;
|
int p;
|
||||||
|
|
||||||
OpEntry *opp = Yap_GetOpProp(op, INFIX_OP PASS_REGS);
|
OpEntry *opp = Yap_GetOpProp(op, POSFIX_OP PASS_REGS);
|
||||||
if (!opp)
|
if (!opp)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (opp->OpModule &&
|
if (opp->OpModule &&
|
||||||
|
160
C/scanner.c
160
C/scanner.c
@ -8,7 +8,7 @@
|
|||||||
* *
|
* *
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
* *
|
* *
|
||||||
* File: %W% %G% *
|
* File: %W% %G% *
|
||||||
* Last rev: 22-1-03 *
|
* Last rev: 22-1-03 *
|
||||||
* mods: *
|
* mods: *
|
||||||
* comments: Prolog's scanner *
|
* comments: Prolog's scanner *
|
||||||
@ -746,7 +746,7 @@ Yap_scan_num(IOSTREAM *inp)
|
|||||||
ch = getchr(inp);
|
ch = getchr(inp);
|
||||||
}
|
}
|
||||||
if (chtype(ch) != NU) {
|
if (chtype(ch) != NU) {
|
||||||
Yap_clean_tokenizer(NULL, NULL, NULL);
|
Yap_clean_tokenizer(NULL, NULL, NULL, 0L);
|
||||||
return TermNil;
|
return TermNil;
|
||||||
}
|
}
|
||||||
cherr = '\0';
|
cherr = '\0';
|
||||||
@ -754,13 +754,68 @@ Yap_scan_num(IOSTREAM *inp)
|
|||||||
return TermNil;
|
return TermNil;
|
||||||
out = get_num(&ch, &cherr, inp, ptr, 4096, sign); /* */
|
out = get_num(&ch, &cherr, inp, ptr, 4096, sign); /* */
|
||||||
PopScannerMemory(ptr, 4096);
|
PopScannerMemory(ptr, 4096);
|
||||||
Yap_clean_tokenizer(NULL, NULL, NULL);
|
Yap_clean_tokenizer(NULL, NULL, NULL, 0L);
|
||||||
if (LOCAL_ErrorMessage != NULL || ch != -1 || cherr)
|
if (LOCAL_ErrorMessage != NULL || ch != -1 || cherr)
|
||||||
return TermNil;
|
return TermNil;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#define CHECK_SPACE() \
|
||||||
|
if (ASP-H < 1024) { \
|
||||||
|
LOCAL_ErrorMessage = "Stack Overflow"; \
|
||||||
|
LOCAL_Error_TYPE = OUT_OF_STACK_ERROR; \
|
||||||
|
LOCAL_Error_Size = 0L; \
|
||||||
|
if (p) \
|
||||||
|
p->Tok = Ord(kind = eot_tok); \
|
||||||
|
/* serious error now */ \
|
||||||
|
return l; \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
open_comment(int ch, IOSTREAM *inp_stream) {
|
||||||
|
CELL *h0 = H;
|
||||||
|
H += 5;
|
||||||
|
h0[0] = AbsAppl(h0+2);
|
||||||
|
h0[1] = TermNil;
|
||||||
|
if (!LOCAL_CommentsTail) {
|
||||||
|
/* first comment */
|
||||||
|
LOCAL_Comments = AbsPair(h0);
|
||||||
|
} else {
|
||||||
|
/* extra comment */
|
||||||
|
*LOCAL_CommentsTail = AbsPair(h0);
|
||||||
|
}
|
||||||
|
LOCAL_CommentsTail = h0+1;
|
||||||
|
h0 += 2;
|
||||||
|
h0[0] = (CELL)FunctorMinus;
|
||||||
|
h0[1] = Yap_StreamPosition(inp_stream);
|
||||||
|
h0[2] = TermNil;
|
||||||
|
LOCAL_CommentsNextChar = h0+2;
|
||||||
|
LOCAL_CommentsBuff = (wchar_t *)malloc(1024*sizeof(wchar_t));
|
||||||
|
LOCAL_CommentsBuffLim = 1024;
|
||||||
|
LOCAL_CommentsBuff[0] = ch;
|
||||||
|
LOCAL_CommentsBuffPos = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
extend_comment(int ch) {
|
||||||
|
LOCAL_CommentsBuff[LOCAL_CommentsBuffPos] = ch;
|
||||||
|
LOCAL_CommentsBuffPos++;
|
||||||
|
if (LOCAL_CommentsBuffPos == LOCAL_CommentsBuffLim-1) {
|
||||||
|
LOCAL_CommentsBuff = (wchar_t *)realloc(LOCAL_CommentsBuff,sizeof(wchar_t)*(LOCAL_CommentsBuffLim+4096));
|
||||||
|
LOCAL_CommentsBuffLim += 4096;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
close_comment(void) {
|
||||||
|
LOCAL_CommentsBuff[LOCAL_CommentsBuffPos] = '\0';
|
||||||
|
*LOCAL_CommentsNextChar = Yap_MkBlobWideStringTerm(LOCAL_CommentsBuff, LOCAL_CommentsBuffPos);
|
||||||
|
free(LOCAL_CommentsBuff);
|
||||||
|
LOCAL_CommentsBuffLim = 0;
|
||||||
|
}
|
||||||
|
|
||||||
static wchar_t *
|
static wchar_t *
|
||||||
ch_to_wide(char *base, char *charp)
|
ch_to_wide(char *base, char *charp)
|
||||||
{
|
{
|
||||||
@ -791,7 +846,7 @@ ch_to_wide(char *base, char *charp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
TokEntry *
|
TokEntry *
|
||||||
Yap_tokenizer(IOSTREAM *inp_stream, Term *tposp)
|
Yap_tokenizer(IOSTREAM *inp_stream, int store_comments, Term *tposp)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
TokEntry *t, *l, *p;
|
TokEntry *t, *l, *p;
|
||||||
@ -846,7 +901,27 @@ Yap_tokenizer(IOSTREAM *inp_stream, Term *tposp)
|
|||||||
switch (chtype(ch)) {
|
switch (chtype(ch)) {
|
||||||
|
|
||||||
case CC:
|
case CC:
|
||||||
while ((ch = getchr(inp_stream)) != 10 && chtype(ch) != EF);
|
if (store_comments) {
|
||||||
|
CHECK_SPACE();
|
||||||
|
open_comment(ch, inp_stream);
|
||||||
|
continue_comment:
|
||||||
|
while ((ch = getchr(inp_stream)) != 10 && chtype(ch) != EF) {
|
||||||
|
CHECK_SPACE();
|
||||||
|
extend_comment(ch);
|
||||||
|
}
|
||||||
|
CHECK_SPACE();
|
||||||
|
extend_comment(ch);
|
||||||
|
if (chtype(ch) != EF) {
|
||||||
|
ch = getchr(inp_stream);
|
||||||
|
if (chtype(ch) == CC) {
|
||||||
|
extend_comment(ch);
|
||||||
|
goto continue_comment;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close_comment();
|
||||||
|
} else {
|
||||||
|
while ((ch = getchr(inp_stream)) != 10 && chtype(ch) != EF);
|
||||||
|
}
|
||||||
if (chtype(ch) != EF) {
|
if (chtype(ch) != EF) {
|
||||||
/* blank space */
|
/* blank space */
|
||||||
if (t == l) {
|
if (t == l) {
|
||||||
@ -854,15 +929,7 @@ Yap_tokenizer(IOSTREAM *inp_stream, Term *tposp)
|
|||||||
while (chtype(ch) == BS) {
|
while (chtype(ch) == BS) {
|
||||||
ch = getchr(inp_stream);
|
ch = getchr(inp_stream);
|
||||||
}
|
}
|
||||||
if (ASP-H < 1024) {
|
CHECK_SPACE();
|
||||||
LOCAL_ErrorMessage = "Stack Overflow";
|
|
||||||
LOCAL_Error_TYPE = OUT_OF_STACK_ERROR;
|
|
||||||
LOCAL_Error_Size = 0L;
|
|
||||||
if (p)
|
|
||||||
p->Tok = Ord(kind = eot_tok);
|
|
||||||
/* serious error now */
|
|
||||||
return l;
|
|
||||||
}
|
|
||||||
*tposp = Yap_StreamPosition(inp_stream);
|
*tposp = Yap_StreamPosition(inp_stream);
|
||||||
}
|
}
|
||||||
goto restart;
|
goto restart;
|
||||||
@ -947,15 +1014,7 @@ Yap_tokenizer(IOSTREAM *inp_stream, Term *tposp)
|
|||||||
/* serious error now */
|
/* serious error now */
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
if (ASP-H < 1024) {
|
CHECK_SPACE();
|
||||||
LOCAL_ErrorMessage = "Stack Overflow";
|
|
||||||
LOCAL_Error_TYPE = OUT_OF_STACK_ERROR;
|
|
||||||
LOCAL_Error_Size = 0L;
|
|
||||||
if (p)
|
|
||||||
p->Tok = Ord(kind = eot_tok);
|
|
||||||
/* serious error now */
|
|
||||||
return l;
|
|
||||||
}
|
|
||||||
if ((t->TokInfo = get_num(&cha,&cherr,inp_stream,ptr,4096,1)) == 0L) {
|
if ((t->TokInfo = get_num(&cha,&cherr,inp_stream,ptr,4096,1)) == 0L) {
|
||||||
if (p)
|
if (p)
|
||||||
p->Tok = Ord(kind = eot_tok);
|
p->Tok = Ord(kind = eot_tok);
|
||||||
@ -1157,29 +1216,39 @@ Yap_tokenizer(IOSTREAM *inp_stream, Term *tposp)
|
|||||||
och = ch;
|
och = ch;
|
||||||
ch = getchr(inp_stream);
|
ch = getchr(inp_stream);
|
||||||
if (och == '/' && ch == '*') {
|
if (och == '/' && ch == '*') {
|
||||||
while ((och != '*' || ch != '/') && chtype(ch) != EF) {
|
if (store_comments) {
|
||||||
och = ch;
|
CHECK_SPACE();
|
||||||
ch = getchr(inp_stream);
|
open_comment('/', inp_stream);
|
||||||
|
while ((och != '*' || ch != '/') && chtype(ch) != EF) {
|
||||||
|
och = ch;
|
||||||
|
CHECK_SPACE();
|
||||||
|
extend_comment(ch);
|
||||||
|
ch = getchr(inp_stream);
|
||||||
|
}
|
||||||
|
if (chtype(ch) != EF) {
|
||||||
|
CHECK_SPACE();
|
||||||
|
extend_comment(ch);
|
||||||
|
}
|
||||||
|
close_comment();
|
||||||
|
} else {
|
||||||
|
while ((och != '*' || ch != '/') && chtype(ch) != EF) {
|
||||||
|
och = ch;
|
||||||
|
ch = getchr(inp_stream);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (chtype(ch) == EF) {
|
if (chtype(ch) == EF) {
|
||||||
t->Tok = Ord(kind = eot_tok);
|
t->Tok = Ord(kind = eot_tok);
|
||||||
}
|
} else {
|
||||||
ch = getchr(inp_stream);
|
/* leave comments */
|
||||||
if (t == l) {
|
ch = getchr(inp_stream);
|
||||||
/* we found a comment before reading characters */
|
if (t == l) {
|
||||||
while (chtype(ch) == BS) {
|
/* we found a comment before reading characters */
|
||||||
ch = getchr(inp_stream);
|
while (chtype(ch) == BS) {
|
||||||
|
ch = getchr(inp_stream);
|
||||||
|
}
|
||||||
|
CHECK_SPACE();
|
||||||
|
*tposp = Yap_StreamPosition(inp_stream);
|
||||||
}
|
}
|
||||||
if (ASP-H < 1024) {
|
|
||||||
LOCAL_ErrorMessage = "Stack Overflow";
|
|
||||||
LOCAL_Error_TYPE = OUT_OF_STACK_ERROR;
|
|
||||||
LOCAL_Error_Size = 0L;
|
|
||||||
if (p)
|
|
||||||
p->Tok = Ord(kind = eot_tok);
|
|
||||||
/* serious error now */
|
|
||||||
return l;
|
|
||||||
}
|
|
||||||
*tposp = Yap_StreamPosition(inp_stream);
|
|
||||||
}
|
}
|
||||||
goto restart;
|
goto restart;
|
||||||
}
|
}
|
||||||
@ -1189,8 +1258,7 @@ Yap_tokenizer(IOSTREAM *inp_stream, Term *tposp)
|
|||||||
if (chtype(ch) == CC)
|
if (chtype(ch) == CC)
|
||||||
while ((ch = getchr(inp_stream)) != 10 && chtype(ch) != EF);
|
while ((ch = getchr(inp_stream)) != 10 && chtype(ch) != EF);
|
||||||
t->Tok = Ord(kind = eot_tok);
|
t->Tok = Ord(kind = eot_tok);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
TokImage = ((AtomEntry *) ( Yap_PreAllocCodeSpace()))->StrOfAE;
|
TokImage = ((AtomEntry *) ( Yap_PreAllocCodeSpace()))->StrOfAE;
|
||||||
charp = TokImage;
|
charp = TokImage;
|
||||||
*charp++ = och;
|
*charp++ = och;
|
||||||
@ -1293,7 +1361,7 @@ Yap_tokenizer(IOSTREAM *inp_stream, Term *tposp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Yap_clean_tokenizer(TokEntry *tokstart, VarEntry *vartable, VarEntry *anonvartable)
|
Yap_clean_tokenizer(TokEntry *tokstart, VarEntry *vartable, VarEntry *anonvartable, Term commentable)
|
||||||
{
|
{
|
||||||
CACHE_REGS
|
CACHE_REGS
|
||||||
struct scanner_extra_alloc *ptr = LOCAL_ScannerExtraBlocks;
|
struct scanner_extra_alloc *ptr = LOCAL_ScannerExtraBlocks;
|
||||||
@ -1302,5 +1370,7 @@ Yap_clean_tokenizer(TokEntry *tokstart, VarEntry *vartable, VarEntry *anonvartab
|
|||||||
free(ptr);
|
free(ptr);
|
||||||
ptr = next;
|
ptr = next;
|
||||||
}
|
}
|
||||||
|
LOCAL_Comments = TermNil;
|
||||||
|
LOCAL_CommentsNextChar = LOCAL_CommentsTail = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
261
C/stdpreds.c
261
C/stdpreds.c
@ -1065,6 +1065,263 @@ p_name( USES_REGS1 )
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Int
|
||||||
|
p_string_to_atom( USES_REGS1 )
|
||||||
|
{ /* name(?Atomic,?String) */
|
||||||
|
char *String; /* alloc temp space on trail */
|
||||||
|
Term t = Deref(ARG1), NewT, AtomNameT = Deref(ARG2);
|
||||||
|
|
||||||
|
restart_aux:
|
||||||
|
if (!IsVarTerm(t)) {
|
||||||
|
Atom at;
|
||||||
|
do {
|
||||||
|
if (Yap_IsWideStringTerm(t)) {
|
||||||
|
at = Yap_LookupWideAtom(Yap_BlobWideStringOfTerm(t));
|
||||||
|
} else if (Yap_IsStringTerm(t)) {
|
||||||
|
at = Yap_LookupAtom(Yap_BlobStringOfTerm(t));
|
||||||
|
} else if (IsAtomTerm(t)) {
|
||||||
|
return Yap_unify(t, ARG2);
|
||||||
|
} else if (IsIntTerm(t)) {
|
||||||
|
char *String = Yap_PreAllocCodeSpace();
|
||||||
|
if (String + 1024 > (char *)AuxSp)
|
||||||
|
goto expand_auxsp;
|
||||||
|
sprintf(String, Int_FORMAT, IntOfTerm(t));
|
||||||
|
at = Yap_LookupAtom(String);
|
||||||
|
} else if (IsFloatTerm(t)) {
|
||||||
|
char *String = Yap_PreAllocCodeSpace();
|
||||||
|
if (String + 1024 > (char *)AuxSp)
|
||||||
|
goto expand_auxsp;
|
||||||
|
|
||||||
|
sprintf(String, "%f", FloatOfTerm(t));
|
||||||
|
at = Yap_LookupAtom(String);
|
||||||
|
} else if (IsLongIntTerm(t)) {
|
||||||
|
char *String = Yap_PreAllocCodeSpace();
|
||||||
|
if (String + 1024 > (char *)AuxSp)
|
||||||
|
goto expand_auxsp;
|
||||||
|
|
||||||
|
sprintf(String, Int_FORMAT, LongIntOfTerm(t));
|
||||||
|
at = Yap_LookupAtom(String);
|
||||||
|
#if USE_GMP
|
||||||
|
} else if (IsBigIntTerm(t)) {
|
||||||
|
String = Yap_PreAllocCodeSpace();
|
||||||
|
if (!Yap_gmp_to_string(t, String, ((char *)AuxSp-String)-1024, 10 ))
|
||||||
|
goto expand_auxsp;
|
||||||
|
at = Yap_LookupAtom(String);
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
Yap_Error(TYPE_ERROR_ATOMIC,AtomNameT,"name/2");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (at != NIL)
|
||||||
|
break;
|
||||||
|
if (!Yap_growheap(FALSE, 0, NULL)) {
|
||||||
|
Yap_Error(OUT_OF_HEAP_ERROR, ARG2, "generating atom from string in string_to_atom/2");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
t = Deref(ARG1);
|
||||||
|
} while(TRUE);
|
||||||
|
return Yap_unify_constant(ARG2, MkAtomTerm(at));
|
||||||
|
}
|
||||||
|
if (IsVarTerm(AtomNameT)) {
|
||||||
|
Yap_Error(INSTANTIATION_ERROR, ARG1, "string_to_atom/2");
|
||||||
|
return(FALSE);
|
||||||
|
}
|
||||||
|
else if (IsAtomTerm(AtomNameT)) {
|
||||||
|
Atom at = AtomOfTerm(AtomNameT);
|
||||||
|
if (IsWideAtom(at)) {
|
||||||
|
wchar_t *s = RepAtom(at)->WStrOfAE;
|
||||||
|
NewT = Yap_MkBlobWideStringTerm(s, wcslen(s));
|
||||||
|
return Yap_unify(NewT, ARG1);
|
||||||
|
} else
|
||||||
|
String = RepAtom(at)->StrOfAE;
|
||||||
|
} else if (IsIntTerm(AtomNameT)) {
|
||||||
|
String = Yap_PreAllocCodeSpace();
|
||||||
|
if (String + 1024 > (char *)AuxSp)
|
||||||
|
goto expand_auxsp;
|
||||||
|
sprintf(String, Int_FORMAT, IntOfTerm(AtomNameT));
|
||||||
|
} else if (IsFloatTerm(AtomNameT)) {
|
||||||
|
String = Yap_PreAllocCodeSpace();
|
||||||
|
if (String + 1024 > (char *)AuxSp)
|
||||||
|
goto expand_auxsp;
|
||||||
|
|
||||||
|
sprintf(String, "%f", FloatOfTerm(AtomNameT));
|
||||||
|
} else if (IsLongIntTerm(AtomNameT)) {
|
||||||
|
String = Yap_PreAllocCodeSpace();
|
||||||
|
if (String + 1024 > (char *)AuxSp)
|
||||||
|
goto expand_auxsp;
|
||||||
|
|
||||||
|
sprintf(String, Int_FORMAT, LongIntOfTerm(AtomNameT));
|
||||||
|
#if USE_GMP
|
||||||
|
} else if (IsBigIntTerm(AtomNameT)) {
|
||||||
|
String = Yap_PreAllocCodeSpace();
|
||||||
|
if (!Yap_gmp_to_string(AtomNameT, String, ((char *)AuxSp-String)-1024, 10 ))
|
||||||
|
goto expand_auxsp;
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
Yap_Error(TYPE_ERROR_ATOMIC,AtomNameT,"name/2");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
NewT = Yap_MkBlobStringTerm(String, strlen(String));
|
||||||
|
return Yap_unify(NewT, ARG1);
|
||||||
|
|
||||||
|
/* error handling */
|
||||||
|
expand_auxsp:
|
||||||
|
String = Yap_ExpandPreAllocCodeSpace(0,NULL, TRUE);
|
||||||
|
if (String + 1024 > (char *)AuxSp) {
|
||||||
|
/* crash in flames */
|
||||||
|
Yap_Error(OUT_OF_AUXSPACE_ERROR, ARG1, "allocating temp space in string_to_atom/2");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
AtomNameT = Deref(ARG1);
|
||||||
|
t = Deref(ARG2);
|
||||||
|
goto restart_aux;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static Int
|
||||||
|
p_string_to_list( USES_REGS1 )
|
||||||
|
{ /* name(?Atomic,?String) */
|
||||||
|
char *String; /* alloc temp space on trail */
|
||||||
|
Term t = Deref(ARG1), NewT, NameT = Deref(ARG2);
|
||||||
|
|
||||||
|
restart_aux:
|
||||||
|
if (!IsVarTerm(t)) {
|
||||||
|
Term StringT;
|
||||||
|
|
||||||
|
if (Yap_IsWideStringTerm(t)) {
|
||||||
|
StringT = Yap_WideStringToList(Yap_BlobWideStringOfTerm(t));
|
||||||
|
} else if (Yap_IsStringTerm(t)) {
|
||||||
|
StringT = Yap_StringToList(Yap_BlobStringOfTerm(t));
|
||||||
|
} else if (IsAtomTerm(t)) {
|
||||||
|
Atom at = AtomOfTerm(t);
|
||||||
|
if (IsWideAtom(at))
|
||||||
|
StringT = Yap_WideStringToList(RepAtom(at)->WStrOfAE);
|
||||||
|
else
|
||||||
|
StringT = Yap_StringToList(RepAtom(at)->StrOfAE);
|
||||||
|
} else if (IsIntTerm(t)) {
|
||||||
|
char *String = Yap_PreAllocCodeSpace();
|
||||||
|
if (String + 1024 > (char *)AuxSp)
|
||||||
|
goto expand_auxsp;
|
||||||
|
sprintf(String, Int_FORMAT, IntOfTerm(t));
|
||||||
|
StringT = Yap_StringToList(String);
|
||||||
|
} else if (IsFloatTerm(t)) {
|
||||||
|
char *String = Yap_PreAllocCodeSpace();
|
||||||
|
if (String + 1024 > (char *)AuxSp)
|
||||||
|
goto expand_auxsp;
|
||||||
|
|
||||||
|
sprintf(String, "%f", FloatOfTerm(t));
|
||||||
|
StringT = Yap_StringToList(String);
|
||||||
|
} else if (IsLongIntTerm(t)) {
|
||||||
|
char *String = Yap_PreAllocCodeSpace();
|
||||||
|
if (String + 1024 > (char *)AuxSp)
|
||||||
|
goto expand_auxsp;
|
||||||
|
|
||||||
|
sprintf(String, Int_FORMAT, LongIntOfTerm(t));
|
||||||
|
StringT = Yap_StringToList(String);
|
||||||
|
#if USE_GMP
|
||||||
|
} else if (IsBigIntTerm(t)) {
|
||||||
|
String = Yap_PreAllocCodeSpace();
|
||||||
|
if (!Yap_gmp_to_string(t, String, ((char *)AuxSp-String)-1024, 10 ))
|
||||||
|
goto expand_auxsp;
|
||||||
|
StringT = Yap_StringToList(String);
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
Yap_Error(TYPE_ERROR_ATOMIC,NameT,"string_to_list/2");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return Yap_unify_constant(ARG2, StringT);
|
||||||
|
}
|
||||||
|
if (!IsVarTerm(NameT)) {
|
||||||
|
if (IsAtomTerm(NameT)) {
|
||||||
|
Atom at = AtomOfTerm(NameT);
|
||||||
|
if (IsWideAtom(at)) {
|
||||||
|
wchar_t *s = RepAtom(at)->WStrOfAE;
|
||||||
|
NewT = Yap_MkBlobWideStringTerm(s, wcslen(s));
|
||||||
|
return Yap_unify(NewT, ARG1);
|
||||||
|
} else
|
||||||
|
String = RepAtom(at)->StrOfAE;
|
||||||
|
} else if (IsIntTerm(NameT)) {
|
||||||
|
String = Yap_PreAllocCodeSpace();
|
||||||
|
if (String + 1024 > (char *)AuxSp)
|
||||||
|
goto expand_auxsp;
|
||||||
|
sprintf(String, Int_FORMAT, IntOfTerm(NameT));
|
||||||
|
} else if (IsFloatTerm(NameT)) {
|
||||||
|
String = Yap_PreAllocCodeSpace();
|
||||||
|
if (String + 1024 > (char *)AuxSp)
|
||||||
|
goto expand_auxsp;
|
||||||
|
|
||||||
|
sprintf(String, "%f", FloatOfTerm(NameT));
|
||||||
|
} else if (IsLongIntTerm(NameT)) {
|
||||||
|
String = Yap_PreAllocCodeSpace();
|
||||||
|
if (String + 1024 > (char *)AuxSp)
|
||||||
|
goto expand_auxsp;
|
||||||
|
|
||||||
|
sprintf(String, Int_FORMAT, LongIntOfTerm(NameT));
|
||||||
|
#if USE_GMP
|
||||||
|
} else if (IsBigIntTerm(NameT)) {
|
||||||
|
String = Yap_PreAllocCodeSpace();
|
||||||
|
if (!Yap_gmp_to_string(NameT, String, ((char *)AuxSp-String)-1024, 10 ))
|
||||||
|
goto expand_auxsp;
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
wchar_t *WString = (wchar_t *)Yap_PreAllocCodeSpace();
|
||||||
|
wchar_t *ws = WString;
|
||||||
|
while (IsPairTerm(NameT)) {
|
||||||
|
Term Head = HeadOfTerm(NameT);
|
||||||
|
Int i;
|
||||||
|
|
||||||
|
if (IsVarTerm(Head)) {
|
||||||
|
Yap_Error(INSTANTIATION_ERROR,Head,"string_codes/2");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (!IsIntegerTerm(Head)) {
|
||||||
|
Yap_Error(TYPE_ERROR_INTEGER,Head,"string_codes/2");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
i = IntegerOfTerm(Head);
|
||||||
|
if (i < 0) {
|
||||||
|
Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,Head,"string_codes/2");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (ws > (wchar_t *)AuxSp-1024) {
|
||||||
|
goto expand_auxsp;
|
||||||
|
}
|
||||||
|
*ws++ = i;
|
||||||
|
NameT = TailOfTerm(NameT);
|
||||||
|
}
|
||||||
|
if (IsVarTerm(NameT)) {
|
||||||
|
Yap_Error(INSTANTIATION_ERROR,ARG2,"string_codes/2");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (NameT != TermNil) {
|
||||||
|
Yap_Error(TYPE_ERROR_LIST,ARG2,"string_codes/2");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
*ws++ = '\0';
|
||||||
|
NewT = Yap_MkBlobWideStringTerm(WString, wcslen(WString));
|
||||||
|
return Yap_unify(NewT, ARG1);
|
||||||
|
/* **** */
|
||||||
|
}
|
||||||
|
NewT = Yap_MkBlobStringTerm(String, sizeof(String));
|
||||||
|
return Yap_unify(NewT, ARG1);
|
||||||
|
}
|
||||||
|
Yap_Error(INSTANTIATION_ERROR, ARG1, "string_to_list/2");
|
||||||
|
return(FALSE);
|
||||||
|
|
||||||
|
/* error handling */
|
||||||
|
expand_auxsp:
|
||||||
|
String = Yap_ExpandPreAllocCodeSpace(0,NULL, TRUE);
|
||||||
|
if (String + 1024 > (char *)AuxSp) {
|
||||||
|
/* crash in flames */
|
||||||
|
Yap_Error(OUT_OF_AUXSPACE_ERROR, ARG1, "allocating temp space in string_to_list/2");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
NameT = Deref(ARG1);
|
||||||
|
t = Deref(ARG2);
|
||||||
|
goto restart_aux;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static Int
|
static Int
|
||||||
p_atom_chars( USES_REGS1 )
|
p_atom_chars( USES_REGS1 )
|
||||||
{
|
{
|
||||||
@ -4126,6 +4383,8 @@ Yap_InitCPreds(void)
|
|||||||
/* general purpose */
|
/* general purpose */
|
||||||
Yap_InitCPred("$opdec", 4, p_opdec, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
Yap_InitCPred("$opdec", 4, p_opdec, SafePredFlag|SyncPredFlag|HiddenPredFlag);
|
||||||
Yap_InitCPred("name", 2, p_name, 0);
|
Yap_InitCPred("name", 2, p_name, 0);
|
||||||
|
Yap_InitCPred("string_to_atom", 2, p_string_to_atom, 0);
|
||||||
|
Yap_InitCPred("string_to_list", 2, p_string_to_list, 0);
|
||||||
Yap_InitCPred("char_code", 2, p_char_code, SafePredFlag);
|
Yap_InitCPred("char_code", 2, p_char_code, SafePredFlag);
|
||||||
Yap_InitCPred("atom_chars", 2, p_atom_chars, 0);
|
Yap_InitCPred("atom_chars", 2, p_atom_chars, 0);
|
||||||
Yap_InitCPred("atom_codes", 2, p_atom_codes, 0);
|
Yap_InitCPred("atom_codes", 2, p_atom_codes, 0);
|
||||||
@ -4294,5 +4553,3 @@ Yap_InitCPreds(void)
|
|||||||
CurrentModule = cm;
|
CurrentModule = cm;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,3 +26,4 @@ typedef struct VARSTRUCT {
|
|||||||
struct VARSTRUCT *VarLeft, *VarRight;
|
struct VARSTRUCT *VarLeft, *VarRight;
|
||||||
char VarRep[1];
|
char VarRep[1];
|
||||||
} VarEntry;
|
} VarEntry;
|
||||||
|
|
||||||
|
1
H/Yap.h
1
H/Yap.h
@ -547,6 +547,7 @@ typedef enum
|
|||||||
TYPE_ERROR_NUMBER,
|
TYPE_ERROR_NUMBER,
|
||||||
TYPE_ERROR_PREDICATE_INDICATOR,
|
TYPE_ERROR_PREDICATE_INDICATOR,
|
||||||
TYPE_ERROR_PTR,
|
TYPE_ERROR_PTR,
|
||||||
|
TYPE_ERROR_STRING,
|
||||||
TYPE_ERROR_UBYTE,
|
TYPE_ERROR_UBYTE,
|
||||||
TYPE_ERROR_UCHAR,
|
TYPE_ERROR_UCHAR,
|
||||||
TYPE_ERROR_VARIABLE,
|
TYPE_ERROR_VARIABLE,
|
||||||
|
12
H/dlocals.h
12
H/dlocals.h
@ -260,6 +260,18 @@
|
|||||||
#define REMOTE_VarTable(wid) REMOTE(wid)->VarTable_
|
#define REMOTE_VarTable(wid) REMOTE(wid)->VarTable_
|
||||||
#define LOCAL_AnonVarTable LOCAL->AnonVarTable_
|
#define LOCAL_AnonVarTable LOCAL->AnonVarTable_
|
||||||
#define REMOTE_AnonVarTable(wid) REMOTE(wid)->AnonVarTable_
|
#define REMOTE_AnonVarTable(wid) REMOTE(wid)->AnonVarTable_
|
||||||
|
#define LOCAL_Comments LOCAL->Comments_
|
||||||
|
#define REMOTE_Comments(wid) REMOTE(wid)->Comments_
|
||||||
|
#define LOCAL_CommentsTail LOCAL->CommentsTail_
|
||||||
|
#define REMOTE_CommentsTail(wid) REMOTE(wid)->CommentsTail_
|
||||||
|
#define LOCAL_CommentsNextChar LOCAL->CommentsNextChar_
|
||||||
|
#define REMOTE_CommentsNextChar(wid) REMOTE(wid)->CommentsNextChar_
|
||||||
|
#define LOCAL_CommentsBuff LOCAL->CommentsBuff_
|
||||||
|
#define REMOTE_CommentsBuff(wid) REMOTE(wid)->CommentsBuff_
|
||||||
|
#define LOCAL_CommentsBuffPos LOCAL->CommentsBuffPos_
|
||||||
|
#define REMOTE_CommentsBuffPos(wid) REMOTE(wid)->CommentsBuffPos_
|
||||||
|
#define LOCAL_CommentsBuffLim LOCAL->CommentsBuffLim_
|
||||||
|
#define REMOTE_CommentsBuffLim(wid) REMOTE(wid)->CommentsBuffLim_
|
||||||
#define LOCAL_RestartEnv LOCAL->RestartEnv_
|
#define LOCAL_RestartEnv LOCAL->RestartEnv_
|
||||||
#define REMOTE_RestartEnv(wid) REMOTE(wid)->RestartEnv_
|
#define REMOTE_RestartEnv(wid) REMOTE(wid)->RestartEnv_
|
||||||
#define LOCAL_FileNameBuf LOCAL->FileNameBuf_
|
#define LOCAL_FileNameBuf LOCAL->FileNameBuf_
|
||||||
|
@ -147,6 +147,12 @@ typedef struct worker_local {
|
|||||||
TokEntry* toktide_;
|
TokEntry* toktide_;
|
||||||
VarEntry* VarTable_;
|
VarEntry* VarTable_;
|
||||||
VarEntry* AnonVarTable_;
|
VarEntry* AnonVarTable_;
|
||||||
|
Term Comments_;
|
||||||
|
CELL* CommentsTail_;
|
||||||
|
CELL* CommentsNextChar_;
|
||||||
|
wchar_t* CommentsBuff_;
|
||||||
|
size_t CommentsBuffPos_;
|
||||||
|
size_t CommentsBuffLim_;
|
||||||
sigjmp_buf RestartEnv_;
|
sigjmp_buf RestartEnv_;
|
||||||
char FileNameBuf_[YAP_FILENAME_MAX];
|
char FileNameBuf_[YAP_FILENAME_MAX];
|
||||||
char FileNameBuf2_[YAP_FILENAME_MAX];
|
char FileNameBuf2_[YAP_FILENAME_MAX];
|
||||||
|
@ -151,6 +151,12 @@ static void InitWorker(int wid) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
REMOTE_PrologMode(wid) = BootMode;
|
REMOTE_PrologMode(wid) = BootMode;
|
||||||
REMOTE_CritLocks(wid) = 0;
|
REMOTE_CritLocks(wid) = 0;
|
||||||
|
|
||||||
|
@ -154,6 +154,12 @@ static void RestoreWorker(int wid USES_REGS) {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef ANALYST
|
#ifdef ANALYST
|
||||||
|
|
||||||
|
@ -271,8 +271,8 @@ VarEntry STD_PROTO(*Yap_LookupVar,(char *));
|
|||||||
Term STD_PROTO(Yap_VarNames,(VarEntry *,Term));
|
Term STD_PROTO(Yap_VarNames,(VarEntry *,Term));
|
||||||
|
|
||||||
/* routines in scanner.c */
|
/* routines in scanner.c */
|
||||||
TokEntry STD_PROTO(*Yap_tokenizer,(struct io_stream *, Term *));
|
TokEntry STD_PROTO(*Yap_tokenizer,(struct io_stream *, int, Term *));
|
||||||
void STD_PROTO(Yap_clean_tokenizer,(TokEntry *, VarEntry *, VarEntry *));
|
void STD_PROTO(Yap_clean_tokenizer,(TokEntry *, VarEntry *, VarEntry *,Term));
|
||||||
Term STD_PROTO(Yap_scan_num,(struct io_stream *));
|
Term STD_PROTO(Yap_scan_num,(struct io_stream *));
|
||||||
char STD_PROTO(*Yap_AllocScannerMemory,(unsigned int));
|
char STD_PROTO(*Yap_AllocScannerMemory,(unsigned int));
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@ PROGRAMS= $(srcdir)/base64.pl \
|
|||||||
$(srcdir)/broadcast.pl \
|
$(srcdir)/broadcast.pl \
|
||||||
$(srcdir)/date.pl \
|
$(srcdir)/date.pl \
|
||||||
$(srcdir)/debug.pl \
|
$(srcdir)/debug.pl \
|
||||||
|
$(srcdir)/main.pl \
|
||||||
$(srcdir)/maplist.pl \
|
$(srcdir)/maplist.pl \
|
||||||
$(srcdir)/nb_set.pl \
|
$(srcdir)/nb_set.pl \
|
||||||
$(srcdir)/operators.pl \
|
$(srcdir)/operators.pl \
|
||||||
@ -41,7 +42,8 @@ PROGRAMS= $(srcdir)/base64.pl \
|
|||||||
$(srcdir)/shlib.pl \
|
$(srcdir)/shlib.pl \
|
||||||
$(srcdir)/thread_pool.pl \
|
$(srcdir)/thread_pool.pl \
|
||||||
$(srcdir)/url.pl \
|
$(srcdir)/url.pl \
|
||||||
$(srcdir)/utf8.pl
|
$(srcdir)/utf8.pl \
|
||||||
|
$(srcdir)/www_browser.pl
|
||||||
|
|
||||||
|
|
||||||
install: $(PROGRAMS)
|
install: $(PROGRAMS)
|
||||||
|
114
LGPL/main.pl
Normal file
114
LGPL/main.pl
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
/* $Id$
|
||||||
|
|
||||||
|
Part of SWI-Prolog
|
||||||
|
|
||||||
|
Author: Jan Wielemaker
|
||||||
|
E-mail: J.Wielemaker@cs.vu.nl
|
||||||
|
WWW: http://www.swi-prolog.org
|
||||||
|
Copyright (C): 1985-2011, University of Amsterdam
|
||||||
|
VU University Amsterdam
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2
|
||||||
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files,
|
||||||
|
compiled with a Free Software compiler, to produce an executable, this
|
||||||
|
library does not by itself cause the resulting executable to be covered
|
||||||
|
by the GNU General Public License. This exception does not however
|
||||||
|
invalidate any other reasons why the executable file might be covered by
|
||||||
|
the GNU General Public License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
:- module(prolog_main,
|
||||||
|
[ main/0
|
||||||
|
]).
|
||||||
|
:- use_module(library(lists)).
|
||||||
|
|
||||||
|
/** <module> Provide entry point for scripts
|
||||||
|
|
||||||
|
This library is intended for supporting PrologScript on Unix using the
|
||||||
|
=|#!|= magic sequence for scripts using commandline options. The entry
|
||||||
|
point main/0 calls the user-supplied predicate main/1 passing a list of
|
||||||
|
commandline options. Below is `echo' in Prolog (adjust /usr/bin/pl to
|
||||||
|
where SWI-Prolog is installed)
|
||||||
|
|
||||||
|
==
|
||||||
|
#!/usr/bin/pl -q -g main -s
|
||||||
|
|
||||||
|
main(Argv) :-
|
||||||
|
echo(Argv).
|
||||||
|
|
||||||
|
echo([]) :- nl.
|
||||||
|
echo([Last]) :- !,
|
||||||
|
write(Last), nl.
|
||||||
|
echo([H|T]) :-
|
||||||
|
write(H), write(' '),
|
||||||
|
echo(T).
|
||||||
|
==
|
||||||
|
|
||||||
|
@see XPCE users should have a look at library(pce_main), which
|
||||||
|
starts the GUI and processes events until all windows have gone.
|
||||||
|
*/
|
||||||
|
|
||||||
|
:- module_transparent
|
||||||
|
main/0.
|
||||||
|
|
||||||
|
%% main
|
||||||
|
%
|
||||||
|
% Call main/1 using the passed command-line arguments.
|
||||||
|
|
||||||
|
main :-
|
||||||
|
context_module(M),
|
||||||
|
set_signals,
|
||||||
|
argv(Av),
|
||||||
|
run_main(M, Av).
|
||||||
|
|
||||||
|
%% run_main(+Module, +Args)
|
||||||
|
%
|
||||||
|
% Run the main routine, guarding for exceptions and failure of the
|
||||||
|
% main/1 routine
|
||||||
|
|
||||||
|
run_main(Module, Av) :-
|
||||||
|
( catch(call(Module:main, Av), E, true)
|
||||||
|
-> ( var(E)
|
||||||
|
-> halt(0)
|
||||||
|
; print_message(error, E),
|
||||||
|
halt(1)
|
||||||
|
)
|
||||||
|
; print_message(error, goal_failed(main(Av))),
|
||||||
|
halt(1)
|
||||||
|
).
|
||||||
|
|
||||||
|
argv(Av) :-
|
||||||
|
current_prolog_flag(argv, Argv),
|
||||||
|
( append(_, [--|Av], Argv)
|
||||||
|
-> true
|
||||||
|
; current_prolog_flag(dialect, yap)
|
||||||
|
-> Argv = Av
|
||||||
|
; current_prolog_flag(windows, true)
|
||||||
|
-> Argv = [_Prog|Av]
|
||||||
|
; Av = []
|
||||||
|
).
|
||||||
|
|
||||||
|
set_signals :-
|
||||||
|
on_signal(int, _, interrupt).
|
||||||
|
|
||||||
|
%% interrupt(+Signal)
|
||||||
|
%
|
||||||
|
% We received an interrupt. This handler is installed using
|
||||||
|
% on_signal/3.
|
||||||
|
|
||||||
|
interrupt(_Sig) :-
|
||||||
|
halt(1).
|
||||||
|
|
@ -12,7 +12,7 @@ EROOTDIR = @exec_prefix@
|
|||||||
LIBDIR=@libdir@/Yap
|
LIBDIR=@libdir@/Yap
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
CC=@CC@
|
CC=@CC@ -municode -DUNICODE -D_UNICODE
|
||||||
CPPFLAGS=@CPPFLAGS@
|
CPPFLAGS=@CPPFLAGS@
|
||||||
CFLAGS= @CFLAGS@ $(DEFS) $(CPPFLAGS) -I$(srcdir) -DRLC_VENDOR="\"YAP\""
|
CFLAGS= @CFLAGS@ $(DEFS) $(CPPFLAGS) -I$(srcdir) -DRLC_VENDOR="\"YAP\""
|
||||||
#
|
#
|
||||||
|
@ -3239,7 +3239,7 @@ rlc_write(rlc_console c, TCHAR *buf, size_t count)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
for(s=buf, e=&buf[count]; s<e; s++)
|
for(s=buf, e=&buf[count]; s<e; s++)
|
||||||
{ if ( *s == '\n' )
|
{ if ( *s == '\n' )
|
||||||
b->promptlen = 0;
|
b->promptlen = 0;
|
||||||
else if ( b->promptlen < MAXPROMPT-1 )
|
else if ( b->promptlen < MAXPROMPT-1 )
|
||||||
b->promptbuf[b->promptlen++] = *s;
|
b->promptbuf[b->promptlen++] = *s;
|
||||||
|
0
LGPL/swi_console/edit.c
Normal file → Executable file
0
LGPL/swi_console/edit.c
Normal file → Executable file
216
LGPL/www_browser.pl
Normal file
216
LGPL/www_browser.pl
Normal file
@ -0,0 +1,216 @@
|
|||||||
|
/* $Id$
|
||||||
|
|
||||||
|
Part of SWI-Prolog
|
||||||
|
|
||||||
|
Author: Jan Wielemaker
|
||||||
|
E-mail: J.Wielemaker@cs.vu.nl
|
||||||
|
WWW: http://www.swi-prolog.org
|
||||||
|
Copyright (C): 1985-2011, University of Amsterdam
|
||||||
|
VU University Amsterdam
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2
|
||||||
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public
|
||||||
|
License along with this library; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
As a special exception, if you link this library with other files,
|
||||||
|
compiled with a Free Software compiler, to produce an executable, this
|
||||||
|
library does not by itself cause the resulting executable to be covered
|
||||||
|
by the GNU General Public License. This exception does not however
|
||||||
|
invalidate any other reasons why the executable file might be covered by
|
||||||
|
the GNU General Public License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
:- module(www_browser,
|
||||||
|
[ www_open_url/1, % +UrlOrSpec
|
||||||
|
expand_url_path/2 % +Spec, -URL
|
||||||
|
]).
|
||||||
|
:- use_module(library(lists)).
|
||||||
|
:- use_module(library(readutil)).
|
||||||
|
|
||||||
|
:- multifile
|
||||||
|
known_browser/2.
|
||||||
|
|
||||||
|
%% www_open_url(+Url)
|
||||||
|
%
|
||||||
|
% Open URL in running version of the users' browser or start a new
|
||||||
|
% browser. This predicate tries the following steps:
|
||||||
|
%
|
||||||
|
% 1. If a prolog flag (see set_prolog_flag/2) =browser= is set
|
||||||
|
% or the environment =BROWSER= and this is the name of a known
|
||||||
|
% executable, use this. This uses www_open_url/2.
|
||||||
|
%
|
||||||
|
% 2. On Windows, use win_shell(open, URL)
|
||||||
|
%
|
||||||
|
% 3. Find a generic `open' comment. Candidates are =open=,
|
||||||
|
% =|gnome-open|=, =kfmclient=.
|
||||||
|
%
|
||||||
|
% 4. Try to find a known browser.
|
||||||
|
%
|
||||||
|
% @tbd Figure out the right tool in step 3 as it is not
|
||||||
|
% uncommon that multiple are installed.
|
||||||
|
|
||||||
|
www_open_url(Spec) :- % user configured
|
||||||
|
( current_prolog_flag(browser, Browser)
|
||||||
|
; getenv('BROWSER', Browser)
|
||||||
|
),
|
||||||
|
has_command(Browser), !,
|
||||||
|
expand_url_path(Spec, URL),
|
||||||
|
www_open_url(Browser, URL).
|
||||||
|
:- if(current_predicate(win_shell/2)).
|
||||||
|
www_open_url(Spec) :- % Windows shell
|
||||||
|
expand_url_path(Spec, URL),
|
||||||
|
win_shell(open, URL).
|
||||||
|
:- endif.
|
||||||
|
www_open_url(Spec) :- % Unix `open document'
|
||||||
|
open_command(Open),
|
||||||
|
has_command(Open), !,
|
||||||
|
expand_url_path(Spec, URL),
|
||||||
|
format(string(Cmd), '~w "~w"', [Open, URL]),
|
||||||
|
shell(Cmd).
|
||||||
|
www_open_url(Spec) :- % KDE client
|
||||||
|
has_command(kfmclient), !,
|
||||||
|
expand_url_path(Spec, URL),
|
||||||
|
format(string(Cmd), 'kfmclient openURL "~w"', [URL]),
|
||||||
|
shell(Cmd).
|
||||||
|
www_open_url(Spec) :- % something we know
|
||||||
|
known_browser(Browser, _),
|
||||||
|
has_command(Browser), !,
|
||||||
|
expand_url_path(Spec, URL),
|
||||||
|
www_open_url(Browser, URL).
|
||||||
|
|
||||||
|
open_command('gnome-open').
|
||||||
|
open_command(open).
|
||||||
|
|
||||||
|
%% www_open_url(+Browser, +URL) is det.
|
||||||
|
%
|
||||||
|
% Open a page using a browser. Preferably we use an existing
|
||||||
|
% browser to to the job. Currently only supports browsers with a
|
||||||
|
% netscape compatible remote interface.
|
||||||
|
%
|
||||||
|
% @see http://www.mozilla.org/unix/remote.html
|
||||||
|
|
||||||
|
www_open_url(Browser, URL) :-
|
||||||
|
compatible(Browser, netscape),
|
||||||
|
netscape_remote(Browser, 'ping()', []), !,
|
||||||
|
netscape_remote(Browser, 'openURL(~w,new-window)', [URL]).
|
||||||
|
www_open_url(Browser, URL) :-
|
||||||
|
format(string(Cmd), '"~w" "~w" &', [Browser, URL]),
|
||||||
|
shell(Cmd).
|
||||||
|
|
||||||
|
%% netscape_remote(+Browser, +Format, +Args) is semidet.
|
||||||
|
%
|
||||||
|
% Execute netscape remote command using =|-remote|=. Create the
|
||||||
|
% remote command using format/3 from Format and Args.
|
||||||
|
%
|
||||||
|
% @bug At least firefox gives always 0 exit code on -remote,
|
||||||
|
% so we must check the error message. Grrrr.
|
||||||
|
|
||||||
|
netscape_remote(Browser, Fmt, Args) :-
|
||||||
|
format(string(RCmd), Fmt, Args),
|
||||||
|
format(string(Cmd), '"~w" -remote "~w" 2>&1', [Browser, RCmd]),
|
||||||
|
open(pipe(Cmd), read, In),
|
||||||
|
call_cleanup(read_stream_to_codes(In, Codes),
|
||||||
|
close(In)),
|
||||||
|
( append("Error:", _, Codes)
|
||||||
|
-> !, fail
|
||||||
|
; true
|
||||||
|
).
|
||||||
|
|
||||||
|
|
||||||
|
compatible(Browser, With) :-
|
||||||
|
file_base_name(Browser, Base),
|
||||||
|
known_browser(Base, With).
|
||||||
|
|
||||||
|
%% known_browser(+FileBaseName, -Compatible)
|
||||||
|
%
|
||||||
|
% True if browser FileBaseName has a remote protocol compatible to
|
||||||
|
% Compatible.
|
||||||
|
|
||||||
|
known_browser(firefox, netscape).
|
||||||
|
known_browser(mozilla, netscape).
|
||||||
|
known_browser(netscape, netscape).
|
||||||
|
known_browser(konqueror, -).
|
||||||
|
known_browser(opera, -).
|
||||||
|
|
||||||
|
|
||||||
|
%% has_command(+Command)
|
||||||
|
%
|
||||||
|
% Succeeds if Command is in $PATH. Works for Unix systems. For
|
||||||
|
% Windows we have to test for executable extensions.
|
||||||
|
|
||||||
|
:- dynamic
|
||||||
|
command_cache/2.
|
||||||
|
:- volatile
|
||||||
|
command_cache/2.
|
||||||
|
|
||||||
|
has_command(Command) :-
|
||||||
|
command_cache(Command, Path), !,
|
||||||
|
Path \== (-).
|
||||||
|
has_command(Command) :-
|
||||||
|
( getenv('PATH', Path),
|
||||||
|
( current_prolog_flag(windows, true)
|
||||||
|
-> Sep = (;)
|
||||||
|
; Sep = (:)
|
||||||
|
),
|
||||||
|
atomic_list_concat(Parts, Sep, Path),
|
||||||
|
member(Part, Parts),
|
||||||
|
prolog_to_os_filename(PlPart, Part),
|
||||||
|
atomic_list_concat([PlPart, Command], /, Exe),
|
||||||
|
access_file(Exe, execute)
|
||||||
|
-> assert(command_cache(Command, Exe))
|
||||||
|
; assert(command_cache(Command, -)),
|
||||||
|
fail
|
||||||
|
).
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************
|
||||||
|
* NET PATHS *
|
||||||
|
*******************************/
|
||||||
|
|
||||||
|
%% url_path(+Alias, -Expansion) is nondet.
|
||||||
|
%
|
||||||
|
% Define URL path aliases. This multifile predicate is defined in
|
||||||
|
% module =user=. Expansion is either a URL, or a term Alias(Sub).
|
||||||
|
|
||||||
|
:- multifile
|
||||||
|
user:url_path/2.
|
||||||
|
|
||||||
|
user:url_path(swipl, 'http://www.swi-prolog.org').
|
||||||
|
|
||||||
|
user:url_path(swipl_faq, swipl('FAQ')).
|
||||||
|
user:url_path(swipl_man, swipl('pldoc/index.html')).
|
||||||
|
user:url_path(swipl_mail, swipl('Mailinglist.html')).
|
||||||
|
user:url_path(swipl_download, swipl('Download.html')).
|
||||||
|
user:url_path(swipl_bugs, swipl('bugzilla')).
|
||||||
|
user:url_path(swipl_quick, swipl('man/quickstart.html')).
|
||||||
|
|
||||||
|
%% expand_url_path(+Spec, -URL)
|
||||||
|
%
|
||||||
|
% Expand URL specifications similar to absolute_file_name/3. The
|
||||||
|
% predicate url_path/2 plays the role of file_search_path/2.
|
||||||
|
|
||||||
|
expand_url_path(URL, URL) :-
|
||||||
|
atomic(URL), !. % Allow atom and string
|
||||||
|
expand_url_path(Spec, URL) :-
|
||||||
|
Spec =.. [Path, Local],
|
||||||
|
( user:url_path(Path, Spec2)
|
||||||
|
-> expand_url_path(Spec2, URL0),
|
||||||
|
( Local == '.'
|
||||||
|
-> URL = URL0
|
||||||
|
; sub_atom(Local, 0, _, _, #)
|
||||||
|
-> atom_concat(URL0, Local, URL)
|
||||||
|
; atomic_list_concat([URL0, Local], /, URL)
|
||||||
|
)
|
||||||
|
; throw(error(existence_error(url_path, Path), expand_url_path/2))
|
||||||
|
).
|
||||||
|
|
25
Makefile.in
25
Makefile.in
@ -325,6 +325,7 @@ PL_SOURCES= \
|
|||||||
$(srcdir)/pl/udi.yap \
|
$(srcdir)/pl/udi.yap \
|
||||||
$(srcdir)/pl/utils.yap \
|
$(srcdir)/pl/utils.yap \
|
||||||
$(srcdir)/pl/history.pl \
|
$(srcdir)/pl/history.pl \
|
||||||
|
$(srcdir)/pl/swi.yap \
|
||||||
$(srcdir)/pl/yapor.yap $(srcdir)/pl/yio.yap
|
$(srcdir)/pl/yapor.yap $(srcdir)/pl/yio.yap
|
||||||
|
|
||||||
YAPDOCS=$(srcdir)/docs/yap.tex $(srcdir)/docs/chr.tex \
|
YAPDOCS=$(srcdir)/docs/yap.tex $(srcdir)/docs/chr.tex \
|
||||||
@ -565,13 +566,13 @@ pl-nt.o: $(srcdir)/packages/PLStream/pl-nt.c config.h
|
|||||||
$(CC) -c $(CFLAGS) -I$(srcdir)/include -I$(srcdir)/packages/PLStream @EXTRA_INCLUDES_FOR_WIN32@ $(srcdir)/packages/PLStream/pl-nt.c -o $@
|
$(CC) -c $(CFLAGS) -I$(srcdir)/include -I$(srcdir)/packages/PLStream @EXTRA_INCLUDES_FOR_WIN32@ $(srcdir)/packages/PLStream/pl-nt.c -o $@
|
||||||
|
|
||||||
pl-ntcon.o: $(srcdir)/console/LGPL/pl-ntcon.c config.h
|
pl-ntcon.o: $(srcdir)/console/LGPL/pl-ntcon.c config.h
|
||||||
$(CC) -c $(CFLAGS) -I$(srcdir)/include $(srcdir)/console/LGPL/pl-ntcon.c -o $@
|
$(CC) -municode -DUNICODE -D_UNICODE -c $(CFLAGS) -DPL_CONSOLE=1 -I$(srcdir)/include $(srcdir)/console/LGPL/pl-ntcon.c -o $@
|
||||||
|
|
||||||
pl-ntconsole.o: $(srcdir)/console/LGPL/pl-ntconsole.c config.h
|
pl-ntconsole.o: $(srcdir)/console/LGPL/pl-ntconsole.c config.h
|
||||||
$(CC) -c $(CFLAGS) -I$(srcdir) -I$(srcdir)/include -I$(srcdir)/packages/PLStream @EXTRA_INCLUDES_FOR_WIN32@ $(srcdir)/console/LGPL/pl-ntconsole.c -o $@
|
$(CC) -municode -DUNICODE -D_UNICODE -c $(CFLAGS) -DPL_CONSOLE=1 -I$(srcdir) -I$(srcdir)/include -I$(srcdir)/packages/PLStream @EXTRA_INCLUDES_FOR_WIN32@ $(srcdir)/console/LGPL/pl-ntconsole.c -o $@
|
||||||
|
|
||||||
pl-ntmain.o: $(srcdir)/console/LGPL/pl-ntmain.c config.h
|
pl-ntmain.o: $(srcdir)/console/LGPL/pl-ntmain.c config.h
|
||||||
$(CC) -c $(CFLAGS) -I$(srcdir)/include -I$(srcdir) -I$(srcdir)/packages/PLStream @EXTRA_INCLUDES_FOR_WIN32@ $(srcdir)/console/LGPL/pl-ntmain.c -o $@
|
$(CC) -municode -DUNICODE -D_UNICODE -c $(CFLAGS) -DPL_CONSOLE=1 -I$(srcdir)/include -I$(srcdir) -I$(srcdir)/packages/PLStream @EXTRA_INCLUDES_FOR_WIN32@ $(srcdir)/console/LGPL/pl-ntmain.c -o $@
|
||||||
|
|
||||||
pl-buffer.o: $(srcdir)/packages/PLStream/pl-buffer.c config.h
|
pl-buffer.o: $(srcdir)/packages/PLStream/pl-buffer.c config.h
|
||||||
$(CC) -c $(CFLAGS) -I$(srcdir)/include -I$(srcdir) -I$(srcdir)/packages/PLStream @EXTRA_INCLUDES_FOR_WIN32@ $(srcdir)/packages/PLStream/pl-buffer.c -o $@
|
$(CC) -c $(CFLAGS) -I$(srcdir)/include -I$(srcdir) -I$(srcdir)/packages/PLStream @EXTRA_INCLUDES_FOR_WIN32@ $(srcdir)/packages/PLStream/pl-buffer.c -o $@
|
||||||
@ -682,13 +683,14 @@ all: startup.yss
|
|||||||
@INSTALL_DLLS@ (cd library/tries; $(MAKE))
|
@INSTALL_DLLS@ (cd library/tries; $(MAKE))
|
||||||
@INSTALL_DLLS@ (cd packages/clib; $(MAKE))
|
@INSTALL_DLLS@ (cd packages/clib; $(MAKE))
|
||||||
@INSTALL_DLLS@ (cd packages/http; $(MAKE))
|
@INSTALL_DLLS@ (cd packages/http; $(MAKE))
|
||||||
|
# @INSTALL_DLLS@ (cd packages/pldoc; $(MAKE))
|
||||||
@INSTALL_DLLS@ (cd packages/plunit; $(MAKE))
|
@INSTALL_DLLS@ (cd packages/plunit; $(MAKE))
|
||||||
@INSTALL_DLLS@ (cd packages/R; $(MAKE))
|
@INSTALL_DLLS@ (cd packages/R; $(MAKE))
|
||||||
@INSTALL_DLLS@ (cd packages/RDF; $(MAKE))
|
@INSTALL_DLLS@ (cd packages/RDF; $(MAKE))
|
||||||
@INSTALL_DLLS@ (cd packages/semweb; $(MAKE))
|
@INSTALL_DLLS@ (cd packages/semweb; $(MAKE))
|
||||||
@INSTALL_DLLS@ (cd packages/sgml; $(MAKE))
|
@INSTALL_DLLS@ (cd packages/sgml; $(MAKE))
|
||||||
@INSTALL_YAPR@ (cd packages/YapR; $(MAKE))
|
@INSTALL_YAPR@ (cd packages/YapR; $(MAKE))
|
||||||
@USE_MINISAT@ (cd packages/CLPBN/clpbn/bp ; $(MAKE))
|
# @USE_MINISAT@ (cd packages/CLPBN/clpbn/bp ; $(MAKE))
|
||||||
@USE_MINISAT@ (cd packages/swi-minisat2/C; $(MAKE))
|
@USE_MINISAT@ (cd packages/swi-minisat2/C; $(MAKE))
|
||||||
@INSTALL_DLLS@ (cd packages/zlib; $(MAKE))
|
@INSTALL_DLLS@ (cd packages/zlib; $(MAKE))
|
||||||
@ENABLE_CPLINT@ (cd packages/cplint/approx/simplecuddLPADs; $(MAKE))
|
@ENABLE_CPLINT@ (cd packages/cplint/approx/simplecuddLPADs; $(MAKE))
|
||||||
@ -703,9 +705,11 @@ startup.yss: yap@EXEC_SUFFIX@ $(PL_SOURCES)
|
|||||||
yap@EXEC_SUFFIX@: $(HEADERS) yap.o @YAPLIB@
|
yap@EXEC_SUFFIX@: $(HEADERS) yap.o @YAPLIB@
|
||||||
$(MPI_CC) $(EXECUTABLE_CFLAGS) $(LDFLAGS) -o yap yap.o @YAPLIB@ $(LIBS) @MPI_LIBS@
|
$(MPI_CC) $(EXECUTABLE_CFLAGS) $(LDFLAGS) -o yap yap.o @YAPLIB@ $(LIBS) @MPI_LIBS@
|
||||||
|
|
||||||
plyap@EXEC_SUFFIX@: $(PLCONS_OBJECTS) $(HEADERS) @YAPLIB@ LGPL/swi_console/plterm.dll
|
plyap: pl-yap@EXEC_SUFFIX@
|
||||||
|
|
||||||
|
pl-yap@EXEC_SUFFIX@: $(PLCONS_OBJECTS) $(HEADERS) @YAPLIB@ LGPL/swi_console/plterm.dll
|
||||||
(cd LGPL/swi_console; $(MAKE))
|
(cd LGPL/swi_console; $(MAKE))
|
||||||
$(MPI_CC) $(EXECUTABLE_CFLAGS) $(LDFLAGS) -o pl-yap $(PLCONS_OBJECTS) LGPL/swi_console/plterm.dll @YAPLIB@ $(LIBS) @MPI_LIBS@
|
$(MPI_CC) -municode -DUNICODE -D_UNICODE $(EXECUTABLE_CFLAGS) $(LDFLAGS) -Wl,-subsystem,windows -o pl-yap $(PLCONS_OBJECTS) LGPL/swi_console/plterm.dll @YAPLIB@ $(LIBS) @MPI_LIBS@
|
||||||
|
|
||||||
libYap.a: $(LIB_OBJECTS)
|
libYap.a: $(LIB_OBJECTS)
|
||||||
-rm -f libYap.a
|
-rm -f libYap.a
|
||||||
@ -741,13 +745,14 @@ install_unix: startup.yss libYap.a
|
|||||||
@INSTALL_DLLS@ (cd library/tries; $(MAKE) install)
|
@INSTALL_DLLS@ (cd library/tries; $(MAKE) install)
|
||||||
@INSTALL_DLLS@ (cd packages/clib; $(MAKE) install)
|
@INSTALL_DLLS@ (cd packages/clib; $(MAKE) install)
|
||||||
@INSTALL_DLLS@ (cd packages/http; $(MAKE) install)
|
@INSTALL_DLLS@ (cd packages/http; $(MAKE) install)
|
||||||
|
@INSTALL_DLLS@ (cd packages/pldoc; $(MAKE) install)
|
||||||
@INSTALL_DLLS@ (cd packages/plunit; $(MAKE) install)
|
@INSTALL_DLLS@ (cd packages/plunit; $(MAKE) install)
|
||||||
@INSTALL_DLLS@ (cd packages/sgml; $(MAKE) install)
|
@INSTALL_DLLS@ (cd packages/sgml; $(MAKE) install)
|
||||||
@INSTALL_DLLS@ (cd packages/R; $(MAKE) install)
|
@INSTALL_DLLS@ (cd packages/R; $(MAKE) install)
|
||||||
@INSTALL_DLLS@ (cd packages/RDF; $(MAKE) install)
|
@INSTALL_DLLS@ (cd packages/RDF; $(MAKE) install)
|
||||||
@INSTALL_DLLS@ (cd packages/semweb; $(MAKE) install)
|
@INSTALL_DLLS@ (cd packages/semweb; $(MAKE) install)
|
||||||
@INSTALL_DLLS@ (cd packages/zlib; $(MAKE) @ZLIB_INSTALL@)
|
@INSTALL_DLLS@ (cd packages/zlib; $(MAKE) @ZLIB_INSTALL@)
|
||||||
@INSTALL_DLLS@ (cd packages/CLPBN/clpbn/bp ; $(MAKE) install)
|
# @INSTALL_DLLS@ (cd packages/CLPBN/clpbn/bp ; $(MAKE) install)
|
||||||
@USE_MINISAT@ (cd packages/swi-minisat2/C; $(MAKE) install)
|
@USE_MINISAT@ (cd packages/swi-minisat2/C; $(MAKE) install)
|
||||||
@INSTALL_MATLAB@ (cd library/matlab; $(MAKE) install)
|
@INSTALL_MATLAB@ (cd library/matlab; $(MAKE) install)
|
||||||
@INSTALL_YAPR@ (cd packages/YapR; $(MAKE) install)
|
@INSTALL_YAPR@ (cd packages/YapR; $(MAKE) install)
|
||||||
@ -794,6 +799,7 @@ install_win32: startup.yss
|
|||||||
@INSTALL_YAPR@ (cd packages/YapR; $(MAKE) install)
|
@INSTALL_YAPR@ (cd packages/YapR; $(MAKE) install)
|
||||||
(cd library/tries; $(MAKE) install)
|
(cd library/tries; $(MAKE) install)
|
||||||
(cd packages/clib; $(MAKE) install)
|
(cd packages/clib; $(MAKE) install)
|
||||||
|
(cd packages/pldoc; $(MAKE) install)
|
||||||
(cd packages/plunit; $(MAKE) install)
|
(cd packages/plunit; $(MAKE) install)
|
||||||
(cd packages/http; $(MAKE) install)
|
(cd packages/http; $(MAKE) install)
|
||||||
(cd packages/R; $(MAKE) install)
|
(cd packages/R; $(MAKE) install)
|
||||||
@ -802,7 +808,7 @@ install_win32: startup.yss
|
|||||||
(cd packages/semweb; $(MAKE) install)
|
(cd packages/semweb; $(MAKE) install)
|
||||||
(cd packages/zlib; $(MAKE) @ZLIB_INSTALL@)
|
(cd packages/zlib; $(MAKE) @ZLIB_INSTALL@)
|
||||||
(cd packages/CLPBN ; $(MAKE) install)
|
(cd packages/CLPBN ; $(MAKE) install)
|
||||||
(cd packages/CLPBN/clpbn/bp ; $(MAKE) install)
|
# (cd packages/CLPBN/clpbn/bp ; $(MAKE) install)
|
||||||
@ENABLE_JPL@ (cd packages/jpl ; $(MAKE) install)
|
@ENABLE_JPL@ (cd packages/jpl ; $(MAKE) install)
|
||||||
@USE_MINISAT@ (cd packages/swi-minisat2/C; $(MAKE) install)
|
@USE_MINISAT@ (cd packages/swi-minisat2/C; $(MAKE) install)
|
||||||
@ENABLE_CPLINT@ (cd packages/cplint; $(MAKE) install)
|
@ENABLE_CPLINT@ (cd packages/cplint; $(MAKE) install)
|
||||||
@ -853,6 +859,7 @@ clean: clean_docs
|
|||||||
@INSTALL_DLLS@ (cd library/tries; $(MAKE) clean)
|
@INSTALL_DLLS@ (cd library/tries; $(MAKE) clean)
|
||||||
@INSTALL_DLLS@ (cd packages/clib; $(MAKE) clean)
|
@INSTALL_DLLS@ (cd packages/clib; $(MAKE) clean)
|
||||||
@INSTALL_DLLS@ (cd packages/http; $(MAKE) clean)
|
@INSTALL_DLLS@ (cd packages/http; $(MAKE) clean)
|
||||||
|
@INSTALL_DLLS@ (cd packages/pldoc; $(MAKE) clean)
|
||||||
@INSTALL_DLLS@ (cd packages/plunit; $(MAKE) clean)
|
@INSTALL_DLLS@ (cd packages/plunit; $(MAKE) clean)
|
||||||
@INSTALL_DLLS@ (cd packages/R; $(MAKE) clean)
|
@INSTALL_DLLS@ (cd packages/R; $(MAKE) clean)
|
||||||
@INSTALL_DLLS@ (cd packages/RDF; $(MAKE) clean)
|
@INSTALL_DLLS@ (cd packages/RDF; $(MAKE) clean)
|
||||||
@ -860,7 +867,7 @@ clean: clean_docs
|
|||||||
@INSTALL_DLLS@ (cd packages/sgml; $(MAKE) clean)
|
@INSTALL_DLLS@ (cd packages/sgml; $(MAKE) clean)
|
||||||
@INSTALL_YAPR@ (cd packages/YapR; $(MAKE) clean)
|
@INSTALL_YAPR@ (cd packages/YapR; $(MAKE) clean)
|
||||||
@USE_MINISAT@ (cd packages/swi-minisat2; $(MAKE) clean)
|
@USE_MINISAT@ (cd packages/swi-minisat2; $(MAKE) clean)
|
||||||
@USE_MINISAT@ (cd packages/CLPBN/clpbn/bp; $(MAKE) clean)
|
# @USE_MINISAT@ (cd packages/CLPBN/clpbn/bp; $(MAKE) clean)
|
||||||
@INSTALL_DLLS@ (cd packages/zlib; $(MAKE) clean)
|
@INSTALL_DLLS@ (cd packages/zlib; $(MAKE) clean)
|
||||||
@ENABLE_CPLINT@ (cd packages/cplint/approx/simplecuddLPADs; $(MAKE) clean)
|
@ENABLE_CPLINT@ (cd packages/cplint/approx/simplecuddLPADs; $(MAKE) clean)
|
||||||
@ENABLE_CPLINT@ (cd packages/cplint; $(MAKE) clean)
|
@ENABLE_CPLINT@ (cd packages/cplint; $(MAKE) clean)
|
||||||
|
@ -2042,6 +2042,7 @@ mkdir -p packages/jpl/examples/java
|
|||||||
mkdir -p packages/meld
|
mkdir -p packages/meld
|
||||||
mkdir -p packages/PLStream
|
mkdir -p packages/PLStream
|
||||||
mkdir -p packages/PLStream/libtai
|
mkdir -p packages/PLStream/libtai
|
||||||
|
mkdir -p packages/pldoc
|
||||||
mkdir -p packages/plunit
|
mkdir -p packages/plunit
|
||||||
mkdir -p packages/ProbLog
|
mkdir -p packages/ProbLog
|
||||||
mkdir -p packages/ProbLog/simplecudd
|
mkdir -p packages/ProbLog/simplecudd
|
||||||
@ -2080,6 +2081,7 @@ AC_CONFIG_FILES([packages/cplint/approx/simplecuddLPADs/Makefile])
|
|||||||
AC_CONFIG_FILES([packages/http/Makefile])
|
AC_CONFIG_FILES([packages/http/Makefile])
|
||||||
AC_CONFIG_FILES([packages/meld/Makefile])
|
AC_CONFIG_FILES([packages/meld/Makefile])
|
||||||
AC_CONFIG_FILES([packages/PLStream/libtai/Makefile])
|
AC_CONFIG_FILES([packages/PLStream/libtai/Makefile])
|
||||||
|
AC_CONFIG_FILES([packages/pldoc/Makefile])
|
||||||
AC_CONFIG_FILES([packages/plunit/Makefile])
|
AC_CONFIG_FILES([packages/plunit/Makefile])
|
||||||
AC_CONFIG_FILES([packages/ProbLog/Makefile ])
|
AC_CONFIG_FILES([packages/ProbLog/Makefile ])
|
||||||
AC_CONFIG_FILES([packages/R/Makefile])
|
AC_CONFIG_FILES([packages/R/Makefile])
|
||||||
|
@ -69,7 +69,7 @@ consoleHandlerRoutine(DWORD id)
|
|||||||
*******************************/
|
*******************************/
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
APP_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
#if O_CTRLC
|
#if O_CTRLC
|
||||||
main_thread_id = GetCurrentThreadId();
|
main_thread_id = GetCurrentThreadId();
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $Id$
|
/* $Id$
|
||||||
|
|
||||||
Part of SWI-Prolog
|
Part of SWI-Prolog
|
||||||
|
|
||||||
|
@ -22,9 +22,6 @@
|
|||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define _UNICODE 1
|
|
||||||
#define UNICODE 1
|
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <tchar.h>
|
#include <tchar.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
@ -997,6 +994,9 @@ win32main(rlc_console c, int argc, TCHAR **argv)
|
|||||||
set_window_title(c);
|
set_window_title(c);
|
||||||
rlc_bind_terminal(c);
|
rlc_bind_terminal(c);
|
||||||
|
|
||||||
|
if ( !PL_initialise(argc, av) )
|
||||||
|
PL_halt(1);
|
||||||
|
|
||||||
PL_register_extensions_in_module("system", extensions);
|
PL_register_extensions_in_module("system", extensions);
|
||||||
install_readline(c);
|
install_readline(c);
|
||||||
PL_action(PL_ACTION_GUIAPP, TRUE);
|
PL_action(PL_ACTION_GUIAPP, TRUE);
|
||||||
@ -1032,9 +1032,6 @@ win32main(rlc_console c, int argc, TCHAR **argv)
|
|||||||
}
|
}
|
||||||
av[i] = NULL;
|
av[i] = NULL;
|
||||||
|
|
||||||
if ( !PL_initialise(argc, av) )
|
|
||||||
PL_halt(1);
|
|
||||||
|
|
||||||
rlc_bind_terminal(c);
|
rlc_bind_terminal(c);
|
||||||
PL_halt(PL_toplevel() ? 0 : 1);
|
PL_halt(PL_toplevel() ? 0 : 1);
|
||||||
|
|
||||||
@ -1047,10 +1044,10 @@ And this is the real application's main as Windows sees it. See
|
|||||||
console.c for further details.
|
console.c for further details.
|
||||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||||
|
|
||||||
int PASCAL
|
int WINAPI
|
||||||
WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
|
wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
|
||||||
LPSTR lpszCmdLine, int nCmdShow)
|
LPWSTR lpszCmdLine, int nCmdShow)
|
||||||
{ LPTSTR cmdline;
|
{ LPWSTR cmdline;
|
||||||
|
|
||||||
InitializeCriticalSection(&mutex);
|
InitializeCriticalSection(&mutex);
|
||||||
|
|
||||||
|
@ -100,3 +100,14 @@ with_stream(Stream, Goal) :-
|
|||||||
current_output(Stream),
|
current_output(Stream),
|
||||||
call(Goal).
|
call(Goal).
|
||||||
|
|
||||||
|
%% read_from_chars(+Codes, -Term) is det.
|
||||||
|
%
|
||||||
|
% Read Codes into Term.
|
||||||
|
%
|
||||||
|
% @compat The SWI-Prolog version does not require Codes to end
|
||||||
|
% in a full-stop.
|
||||||
|
|
||||||
|
read_from_chars("", end_of_file) :- !.
|
||||||
|
read_from_chars(List, Term) :-
|
||||||
|
atom_to_term(List, Term, _).
|
||||||
|
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
chdir/1,
|
chdir/1,
|
||||||
compile_aux_clauses/1,
|
compile_aux_clauses/1,
|
||||||
convert_time/2,
|
convert_time/2,
|
||||||
'$set_source_module'/2,
|
|
||||||
'$declare_module'/5,
|
'$declare_module'/5,
|
||||||
'$set_predicate_attribute'/3,
|
'$set_predicate_attribute'/3,
|
||||||
stamp_date_time/3,
|
stamp_date_time/3,
|
||||||
@ -183,25 +182,6 @@ compile_aux_clauses([Cl|Cls]) :-
|
|||||||
assert_static(M:Cl),
|
assert_static(M:Cl),
|
||||||
compile_aux_clauses(Cls).
|
compile_aux_clauses(Cls).
|
||||||
|
|
||||||
'$set_source_module'(Source0, SourceF) :-
|
|
||||||
prolog_load_context(module, Source0), !,
|
|
||||||
module(SourceF).
|
|
||||||
'$set_source_module'(Source0, SourceF) :-
|
|
||||||
current_module(Source0, SourceF).
|
|
||||||
|
|
||||||
/** '$declare_module'(+Module, +Super, +File, +Line, +Redefine) is det.
|
|
||||||
|
|
||||||
Start a new (source-)module
|
|
||||||
|
|
||||||
@param Module is the name of the module to declare
|
|
||||||
@param File is the canonical name of the file from which the module
|
|
||||||
is loaded
|
|
||||||
@param Line is the line-number of the :- module/2 directive.
|
|
||||||
@param Redefine If =true=, allow associating the module to a new file
|
|
||||||
*/
|
|
||||||
'$declare_module'(Name, Context, _, _, _) :-
|
|
||||||
add_import_module(Name, Context, start).
|
|
||||||
|
|
||||||
'$set_predicate_attribute'(_, _, _).
|
'$set_predicate_attribute'(_, _, _).
|
||||||
|
|
||||||
flag(Key, Old, New) :-
|
flag(Key, Old, New) :-
|
||||||
|
@ -1176,7 +1176,7 @@ X_API int PL_unify_int64(term_t t, int64_t n)
|
|||||||
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 PASS_REGS),iterm);
|
||||||
#else
|
#else
|
||||||
fprintf(stderr,"Error: please install GM\n");
|
fprintf(stderr,"Error in PL_unify_int64: please install GMP\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
last/2,
|
last/2,
|
||||||
list_concat/2,
|
list_concat/2,
|
||||||
max_list/2,
|
max_list/2,
|
||||||
|
list_to_set/2,
|
||||||
member/2,
|
member/2,
|
||||||
memberchk/2,
|
memberchk/2,
|
||||||
min_list/2,
|
min_list/2,
|
||||||
@ -415,3 +416,27 @@ subtract([E|T], D, R) :-
|
|||||||
subtract(T, D, R).
|
subtract(T, D, R).
|
||||||
subtract([H|T], D, [H|R]) :-
|
subtract([H|T], D, [H|R]) :-
|
||||||
subtract(T, D, R).
|
subtract(T, D, R).
|
||||||
|
|
||||||
|
%% list_to_set(+List, ?Set) is det.
|
||||||
|
%
|
||||||
|
% True when Set has the same element as List in the same order.
|
||||||
|
% The left-most copy of the duplicate is retained. The complexity
|
||||||
|
% of this operation is |List|^2.
|
||||||
|
%
|
||||||
|
% @see sort/2.
|
||||||
|
|
||||||
|
list_to_set(List, Set) :-
|
||||||
|
list_to_set_(List, Set0),
|
||||||
|
Set = Set0.
|
||||||
|
|
||||||
|
list_to_set_([], R) :-
|
||||||
|
close_list(R).
|
||||||
|
list_to_set_([H|T], R) :-
|
||||||
|
memberchk(H, R), !,
|
||||||
|
list_to_set_(T, R).
|
||||||
|
|
||||||
|
close_list([]) :- !.
|
||||||
|
close_list([_|T]) :-
|
||||||
|
close_list(T).
|
||||||
|
|
||||||
|
|
||||||
|
179
man/doc2tex
Executable file
179
man/doc2tex
Executable file
@ -0,0 +1,179 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
|
||||||
|
sub printTeX
|
||||||
|
{ s/`([@\w]+)\s*<->([a-z]\w*)/\\index{\l\1,\\both{\2}}`\\classboth{\1}{\2}/g;
|
||||||
|
s/`([@\w]+)\s*<-([a-z]\w*)/\\index{\l\1,\\get{\2}}`\\classget{\1}{\2}/g;
|
||||||
|
s/`([@\w]+)\s*->([a-z]\w*)/\\index{\l\1,\\send{\2}}`\\classsend{\1}{\2}/g;
|
||||||
|
s/<->([a-z]\w*)/\\both{\1}/g;
|
||||||
|
s/<-([a-z]\w*)/\\get{\1}/g;
|
||||||
|
s/->([a-z]\w*)/\\send{\1}/g;
|
||||||
|
s/(^|\s|\()([a-z]\w+)\/((\d+|\[\d+(-|,)\d+\]))/\1\\index{\2\/\3}\\predref{\2}{\3}/g;
|
||||||
|
s/(\s+|^)([a-z]\w+)\/\/((\d+|\[\d+(-|,)\d+\]))/\1\\index{\2\/\/\3}\\dcgref{\2}{\3}/g;
|
||||||
|
s/(\w\.\w)\.(\s+[a-z])/\1.\\\2/g;
|
||||||
|
s/(^|[^\w}\\])@([a-z]\w*)/\1\\index{@\2}\\objectname{\2}/g;
|
||||||
|
s/(^|[^'])<(\w[-~\w]*)>/\1\\bnfmeta{\2}/g;
|
||||||
|
s/\\class{([<\\=>]*)}/\\verb!\1!/g;
|
||||||
|
s/==>/\$\\longrightarrow\$/g;
|
||||||
|
s/^((\\index{[^}]+})+) *$/\1%/;
|
||||||
|
s/(\\index{[^}]*)\\index{[^}]*}([^}]*})/\1\2/g;
|
||||||
|
s/(\\class(get|send|both){)\\index{[^}]*}/\1/g;
|
||||||
|
s/(PL_[a-z_]*)\(([^\)]*)\)/\\funcref{\1}{\2}/g;
|
||||||
|
|
||||||
|
# Prolog special arguments ...
|
||||||
|
# TBD: pick these up automatically from pl.sty
|
||||||
|
|
||||||
|
s/\\file{([^}]*\\bnfmeta[^}]*)}/\\metafile{\1}/g;
|
||||||
|
s/\\file{([^}]*\\arg[^}]*)}/\\metafile{\1}/g;
|
||||||
|
s/\\file{([^}]+)}/\\file@\1@/g;
|
||||||
|
s/\\htmloutput{([^}]+)}/\\htmloutput@\1@/g;
|
||||||
|
|
||||||
|
s/{#!}/{\\Sexe}/g;
|
||||||
|
s/{#>}/{\\Scgt}/g;
|
||||||
|
s/{#>=}/{\\Scge}/g;
|
||||||
|
s/{#<}/{\\Sclt}/g;
|
||||||
|
s/{#=<}/{\\Scle}/g;
|
||||||
|
s/{#=}/{\\Sceq}/g;
|
||||||
|
s/{#\\=}/{\\Scne}/g;
|
||||||
|
s/{#\\}/{\\Snot}/g;
|
||||||
|
s/{#\\\/}/{\\Sor}/g;
|
||||||
|
s/{#\/\\}/{\\Sand}/g;
|
||||||
|
s/{#<=>}/{\\Sequiv}/g;
|
||||||
|
s/{#<=}/{\\Slimpl}/g;
|
||||||
|
s/{#=>}/{\\Srimpl}/g;
|
||||||
|
s/{#<==}/{\\Slimplies}/g;
|
||||||
|
s/{#==>}/{\\Srimplies}/g;
|
||||||
|
s/{#<==>}/{\\Scequal}/g;
|
||||||
|
s/{#=\\=}/{\\Scine}/g;
|
||||||
|
s/{#=:=}/{\\Scieq}/g;
|
||||||
|
s/{!}/{\\Scut}/g;
|
||||||
|
s/{,}/{\\Scomma}/g;
|
||||||
|
s/{->}/{\\Sifthen}/g;
|
||||||
|
s/{\*->}/{\\Ssoftcut}/g;
|
||||||
|
s/{\.}/{\\Sdot}/g;
|
||||||
|
s/{;}/{\\Ssemicolon}/g;
|
||||||
|
s/{<}/{\\Slt}/g;
|
||||||
|
s/{><}/{\\Sxor}/g;
|
||||||
|
s/{=}/{\\Seq}/g;
|
||||||
|
s/{=\.\.}/{\\Suniv}/g;
|
||||||
|
s/{=:=}/{\\Saeq}/g;
|
||||||
|
s/{=<}/{\\Sle}/g;
|
||||||
|
s/{<=}/{\\Sel}/g;
|
||||||
|
s/{==}/{\\Sequal}/g;
|
||||||
|
s/{=@=}/{\\Sstructeq}/g;
|
||||||
|
s/{\\=@=}/{\\Sstructneq}/g;
|
||||||
|
s/{=\\=}/{\\Sane}/g;
|
||||||
|
s/{>}/{\\Sgt}/g;
|
||||||
|
s/{>=}/{\\Sge}/g;
|
||||||
|
s/{@<}/{\\Stlt}/g;
|
||||||
|
s/{@=<}/{\\Stle}/g;
|
||||||
|
s/{@>}/{\\Stgt}/g;
|
||||||
|
s/{@>=}/{\\Stge}/g;
|
||||||
|
s/{\\\+}/{\\Snot}/g;
|
||||||
|
s/{\\=}/{\\Sne}/g;
|
||||||
|
s/{\\==}/{\\Snequal}/g;
|
||||||
|
s/{\^}/{\\Shat}/g;
|
||||||
|
s/{\|}/{\\Sbar}/g;
|
||||||
|
s/{\*}/{\\Stimes}/g;
|
||||||
|
s/{\*\*}/{\\Spow}/g;
|
||||||
|
s/{\+}/{\\Splus}/g;
|
||||||
|
s/{-}/{\\Sminus}/g;
|
||||||
|
s/{\/}/{\\Sdiv}/g;
|
||||||
|
s/{\/\/}/{\\Sidiv}/g;
|
||||||
|
s/{\/\\}/{\\Sand}/g;
|
||||||
|
s/{<<}/{\\Slshift}/g;
|
||||||
|
s/{>>}/{\\Srshift}/g;
|
||||||
|
s/{\\}/{\\Sneg}/g;
|
||||||
|
s/{\\\/}/{\\Sor}/g;
|
||||||
|
s/{\$}/{\\Sdollar}/g;
|
||||||
|
s/{\?}/{\\Squest}/g;
|
||||||
|
s/{:}/{\\Smodule}/g;
|
||||||
|
s/{:-}/{\\Sneck}/g;
|
||||||
|
s/{\?-}/{\\Sdirective}/g;
|
||||||
|
s/{-->}/{\\Sdcg}/g;
|
||||||
|
s/{~}/{\\Stilde}/g;
|
||||||
|
s/{%}/{\\Spercent}/g;
|
||||||
|
s/{{}}/{\\Scurl}/g;
|
||||||
|
s/{xXX..\\}/{\\SxXX}/g;
|
||||||
|
|
||||||
|
s/\\file@([^@]+)@/\\file{\1}/g;
|
||||||
|
s/\\htmloutput@([^@]+)@/\\htmloutput{\1}/g;
|
||||||
|
|
||||||
|
print;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub expandTabs
|
||||||
|
{ while ( ($i = index($_, "\t")) != $[-1 )
|
||||||
|
{ $nspaces = 8 - $i % 8;
|
||||||
|
for( $spaces="", $i=0; $i<$nspaces; $i++ )
|
||||||
|
{ $spaces .= " ";
|
||||||
|
}
|
||||||
|
s/\t/$spaces/;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub
|
||||||
|
expandSpecials
|
||||||
|
{ s/\^/\\verb!^!/g;
|
||||||
|
s/\|/\\verb!|!/g;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub printCode
|
||||||
|
{ print;
|
||||||
|
while (<ARGV> )
|
||||||
|
{ &expandTabs;
|
||||||
|
print;
|
||||||
|
if ( /\\end{(code|verbatim)}/ )
|
||||||
|
{ return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub printPceCode
|
||||||
|
{ $line = 0;
|
||||||
|
print;
|
||||||
|
while (<ARGV> )
|
||||||
|
{ $line++;
|
||||||
|
&expandTabs;
|
||||||
|
if ( /\\end{pcecode}/ )
|
||||||
|
{ print;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
chomp;
|
||||||
|
print "\\lineno{$line}\\verb`$_`\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub skiptonext
|
||||||
|
{ while (<ARGV>)
|
||||||
|
{ if ( ! /^\s*$/ )
|
||||||
|
{ return;
|
||||||
|
}
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
while (<ARGV>)
|
||||||
|
{ if ( ! /^\s*$/ )
|
||||||
|
{ return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# MAIN PROGRAM
|
||||||
|
|
||||||
|
while (<>)
|
||||||
|
{ while ( /\\begin{pcecode}/ )
|
||||||
|
{ &printPceCode;
|
||||||
|
print "\n\\noindent\n";
|
||||||
|
&skiptonext;
|
||||||
|
}
|
||||||
|
while ( /\\begin{(code|verbatim)}/ )
|
||||||
|
{ &printCode;
|
||||||
|
print "\n\\noindent\n";
|
||||||
|
&skiptonext;
|
||||||
|
}
|
||||||
|
&printTeX;
|
||||||
|
}
|
43
man/fancychap.sty
Normal file
43
man/fancychap.sty
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
\font\chapnum = cminch
|
||||||
|
\font\chaptitle = cmssbx10 scaled \magstep5
|
||||||
|
\def\booktitle{\mbox{}}
|
||||||
|
\newdimen\titlewidth
|
||||||
|
\newdimen\titlenumwidth
|
||||||
|
\titlewidth\textwidth
|
||||||
|
\titlenumwidth 3cm
|
||||||
|
\addtolength{\titlewidth}{-\titlenumwidth}
|
||||||
|
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
% Chapters
|
||||||
|
%----------------------------------------------------------------------
|
||||||
|
\def\breakit{\ } % allow linebreak in chapter title
|
||||||
|
|
||||||
|
\def\@makechapterhead#1{ % Heading for \chapter command
|
||||||
|
\vspace*{0pt} % Space at top of text page.
|
||||||
|
{ \parindent 0pt \raggedright
|
||||||
|
\ifnum \c@secnumdepth >\m@ne % IF secnumdepth > -1 THEN
|
||||||
|
\begin{minipage}{\headwidth}
|
||||||
|
\parbox[b]{\titlewidth}{%
|
||||||
|
\def\breakit{\par}\raggedright
|
||||||
|
\baselineskip .33in {\chaptitle #1}}\nobreak
|
||||||
|
\parbox[b]{\titlenumwidth}{\raggedleft {\chapnum \thechapter}}
|
||||||
|
\par\vskip 3pt
|
||||||
|
\rule[0pt]{\headwidth}{4pt}
|
||||||
|
\end{minipage}
|
||||||
|
\fi
|
||||||
|
\vskip 20pt
|
||||||
|
\nobreak % TeX penalty to prevent pagebreak.
|
||||||
|
} }
|
||||||
|
|
||||||
|
\def\@makeschapterhead#1{ % Heading for \chapter* command
|
||||||
|
\vspace*{0pt} % Space at top of page.
|
||||||
|
\markboth{\booktitle}{#1}
|
||||||
|
{ \parindent 0pt \raggedright
|
||||||
|
\begin{minipage}{\headwidth}
|
||||||
|
\parbox[b]{\titlewidth}{\raggedright {\chaptitle #1}}
|
||||||
|
\par\vskip 5pt
|
||||||
|
\rule[0pt]{\headwidth}{4pt}
|
||||||
|
\end{minipage}
|
||||||
|
\nobreak % TeX penalty to prevent page break.
|
||||||
|
\vskip 30pt % Space between title and text.
|
||||||
|
}}
|
174
man/html.sty
Normal file
174
man/html.sty
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
% HTML.sty
|
||||||
|
%
|
||||||
|
% Provide LaTeX definitions for the latex2html translator.
|
||||||
|
% Requires LaTeX2e or later
|
||||||
|
%
|
||||||
|
% Author: Jan Wielemaker, SWI, University of Amsterdam
|
||||||
|
|
||||||
|
% \onefile
|
||||||
|
%
|
||||||
|
% Do not section the output (i.e. put all output in the same HTML file).
|
||||||
|
|
||||||
|
\newcommand{\onefile}{}
|
||||||
|
|
||||||
|
% \bodycolor{Color}
|
||||||
|
%
|
||||||
|
% Define colour for running text body (<BODY BGCOLOR=Color>).
|
||||||
|
|
||||||
|
\newcommand{\bodycolor}[1]{}
|
||||||
|
|
||||||
|
% \linkimage{Id}{ImagePath}
|
||||||
|
%
|
||||||
|
% Define image to use for specified link id
|
||||||
|
|
||||||
|
\newcommand{\linkimage}[2]{}
|
||||||
|
|
||||||
|
% \htmlmainfile{File}
|
||||||
|
% \htmloutput{Directory}
|
||||||
|
%
|
||||||
|
% Define the main output file and directory
|
||||||
|
|
||||||
|
\newcommand{\htmlmainfile}[1]{}
|
||||||
|
\newcommand{\htmloutput}[1]{}
|
||||||
|
|
||||||
|
% htmlfiledepth{Depth}
|
||||||
|
%
|
||||||
|
% Defines the depth at which sections are split into separate files
|
||||||
|
% Default is 2 (each subsection produces a file). See also \onefile
|
||||||
|
|
||||||
|
\newcommand{\htmlfiledepth}[1]{}
|
||||||
|
|
||||||
|
% \email[TextToShow]{URL}
|
||||||
|
% \url[TextToShow]{URL}
|
||||||
|
%
|
||||||
|
% References to E-mail addresses and general URL's. If the optional
|
||||||
|
% argument is provided, this is the text printed for the label. Otherwise
|
||||||
|
% the address itself is printed.
|
||||||
|
|
||||||
|
\def\url{\@ifnextchar[{\@url}{\@plainurl}}
|
||||||
|
\def\@url[#1]#2{#1}
|
||||||
|
\def\@plainurl#1{{\tt #1}}
|
||||||
|
\let\email=\url
|
||||||
|
|
||||||
|
% \begin{shortlist} ... \end{shortlist}
|
||||||
|
%
|
||||||
|
% As itemize environment, but do not include extra space between the
|
||||||
|
% items.
|
||||||
|
|
||||||
|
\newenvironment{shortlist}{%
|
||||||
|
\begin{itemize}\setlength{\itemsep}{0pt}}{%
|
||||||
|
\end{itemize}}
|
||||||
|
|
||||||
|
% \begin{dlist} ... \end{dlist}
|
||||||
|
%
|
||||||
|
% As description environment, but start a newline after the item
|
||||||
|
|
||||||
|
\let\latexitem=\item
|
||||||
|
|
||||||
|
\newenvironment{dlist}{%
|
||||||
|
\begin{description}%
|
||||||
|
\def\item[##1]{\latexitem[##1]\hfill\\}}{%
|
||||||
|
\end{description}}
|
||||||
|
|
||||||
|
\newenvironment{itemlist}
|
||||||
|
{\itemize
|
||||||
|
\renewcommand\makelabel[1]{%
|
||||||
|
\hspace\labelwidth
|
||||||
|
\llap{\@itemlabel}%
|
||||||
|
\hspace\labelsep
|
||||||
|
\makebox[\linewidth][l]{\it ##1}%
|
||||||
|
\hspace{-\labelsep}}%
|
||||||
|
}%
|
||||||
|
{\enditemize}
|
||||||
|
|
||||||
|
% \var{Var}
|
||||||
|
%
|
||||||
|
% Indicate Var is a variable or argument.
|
||||||
|
|
||||||
|
\def\var#1{{\it #1}}
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
% Comment.sty version 2.0, 19 June 1992
|
||||||
|
% selectively in/exclude pieces of text: the user can define new
|
||||||
|
% comment versions, and each is controlled separately.
|
||||||
|
% This style can be used with plain TeX or LaTeX, and probably
|
||||||
|
% most other packages too.
|
||||||
|
%
|
||||||
|
% Examples of use in LaTeX and TeX follow \endinput
|
||||||
|
%
|
||||||
|
% Author
|
||||||
|
% Victor Eijkhout
|
||||||
|
% Department of Computer Science
|
||||||
|
% University Tennessee at Knoxville
|
||||||
|
% 104 Ayres Hall
|
||||||
|
% Knoxville, TN 37996
|
||||||
|
% USA
|
||||||
|
%
|
||||||
|
% eijkhout@cs.utk.edu
|
||||||
|
%
|
||||||
|
% Usage: all text included in between
|
||||||
|
% \comment ... \endcomment
|
||||||
|
% or \begin{comment} ... \end{comment}
|
||||||
|
% is discarded. The closing command should appear on a line
|
||||||
|
% of its own. No starting spaces, nothing after it.
|
||||||
|
% This environment should work with arbitrary amounts
|
||||||
|
% of comment.
|
||||||
|
%
|
||||||
|
% Other 'comment' environments are defined by
|
||||||
|
% and are selected/deselected with
|
||||||
|
% \includecomment{versiona}
|
||||||
|
% \excludecoment{versionb}
|
||||||
|
%
|
||||||
|
% These environments are used as
|
||||||
|
% \versiona ... \endversiona
|
||||||
|
% or \begin{versiona} ... \end{versiona}
|
||||||
|
% with the closing command again on a line of its own.
|
||||||
|
%
|
||||||
|
% Basic approach:
|
||||||
|
% to comment something out, scoop up every line in verbatim mode
|
||||||
|
% as macro argument, then throw it away.
|
||||||
|
% For inclusions, both the opening and closing comands
|
||||||
|
% are defined as noop
|
||||||
|
%
|
||||||
|
% Changed \next to \html@next to prevent clashes with other sty files
|
||||||
|
% (mike@emn.fr)
|
||||||
|
% Changed \html@next to \htmlnext so the \makeatletter and
|
||||||
|
% \makeatother commands could be removed (they were causing other
|
||||||
|
% style files - changebar.sty - to crash) (nikos@cbl.leeds.ac.uk)
|
||||||
|
% Changed \htmlnext back to \html@next...
|
||||||
|
|
||||||
|
\makeatletter
|
||||||
|
\def\makeinnocent#1{\catcode`#1=12 }
|
||||||
|
\def\csarg#1#2{\expandafter#1\csname#2\endcsname}
|
||||||
|
|
||||||
|
\def\ThrowAwayComment#1{\begingroup
|
||||||
|
\def\CurrentComment{#1}%
|
||||||
|
\let\do\makeinnocent \dospecials
|
||||||
|
\makeinnocent\^^L% and whatever other special cases
|
||||||
|
\endlinechar`\^^M \catcode`\^^M=12 \xComment}
|
||||||
|
{\catcode`\^^M=12 \endlinechar=-1 %
|
||||||
|
\gdef\xComment#1^^M{\def\test{#1}
|
||||||
|
\csarg\ifx{PlainEnd\CurrentComment Test}\test
|
||||||
|
\let\html@next\endgroup
|
||||||
|
\else \csarg\ifx{LaLaEnd\CurrentComment Test}\test
|
||||||
|
\edef\html@next{\endgroup\noexpand\end{\CurrentComment}}
|
||||||
|
\else \let\html@next\xComment
|
||||||
|
\fi \fi \html@next}
|
||||||
|
}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
|
\def\includecomment
|
||||||
|
#1{\expandafter\def\csname#1\endcsname{}%
|
||||||
|
\expandafter\def\csname end#1\endcsname{}}
|
||||||
|
\def\excludecomment
|
||||||
|
#1{\expandafter\def\csname#1\endcsname{\ThrowAwayComment{#1}}%
|
||||||
|
{\escapechar=-1\relax
|
||||||
|
\csarg\xdef{PlainEnd#1Test}{\string\\end#1}%
|
||||||
|
\csarg\xdef{LaLaEnd#1Test}{\string\\end\string\{#1\string\}}%
|
||||||
|
}}
|
||||||
|
|
||||||
|
\excludecomment{comment}
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
\excludecomment{htmlonly}
|
||||||
|
\newenvironment{latexonly}{}{}
|
1254
man/name.bst
Normal file
1254
man/name.bst
Normal file
File diff suppressed because it is too large
Load Diff
1102
man/pl.bib
Normal file
1102
man/pl.bib
Normal file
File diff suppressed because it is too large
Load Diff
508
man/pl.sty
Normal file
508
man/pl.sty
Normal file
@ -0,0 +1,508 @@
|
|||||||
|
% SWI-Prolog document-style
|
||||||
|
|
||||||
|
% Test for PDF generation using pdflatex
|
||||||
|
|
||||||
|
\usepackage{ifpdf}
|
||||||
|
%Old tex versions
|
||||||
|
%\newif\ifpdf
|
||||||
|
%\ifx\pdfoutput\undefined
|
||||||
|
% \pdffalse
|
||||||
|
%\else
|
||||||
|
% \pdfoutput=1
|
||||||
|
% \pdftrue
|
||||||
|
%\fi
|
||||||
|
|
||||||
|
% Get hyperrefs to work
|
||||||
|
|
||||||
|
\usepackage{makeidx}
|
||||||
|
\usepackage{url}
|
||||||
|
|
||||||
|
\ifpdf
|
||||||
|
\usepackage[pdftex,colorlinks=true,urlcolor=blue]{hyperref}
|
||||||
|
\pdfcompresslevel=9
|
||||||
|
% \pdfcatalog{
|
||||||
|
% /PageMode /UseOutLines
|
||||||
|
% }
|
||||||
|
\usepackage[pdftex]{graphicx}
|
||||||
|
\DeclareGraphicsExtensions{.pdf,.jpg,.png}
|
||||||
|
\else
|
||||||
|
\usepackage[dvips]{graphicx}
|
||||||
|
\DeclareGraphicsExtensions{.eps,.ps}
|
||||||
|
\fi
|
||||||
|
\graphicspath{{figs/}{./}}
|
||||||
|
|
||||||
|
% Other styles
|
||||||
|
|
||||||
|
\usepackage{a4wide}
|
||||||
|
\usepackage{longtable}
|
||||||
|
\usepackage{ifthen}
|
||||||
|
\usepackage{dcolumn}
|
||||||
|
\usepackage{calc}
|
||||||
|
\setlongtables
|
||||||
|
|
||||||
|
\catcode`\^^A=8% downarrow are for subscripts
|
||||||
|
\catcode`\_=\active
|
||||||
|
\def_{\ifmmode\else\_\fi}
|
||||||
|
\def\vobeyspaces{\@vobeyspaces}
|
||||||
|
|
||||||
|
\newcommand{\onlinebreak}{}
|
||||||
|
|
||||||
|
% References
|
||||||
|
|
||||||
|
\newcommand{\secref}[1]{section~\ref{sec:#1}}
|
||||||
|
\newcommand{\appref}[1]{appendix~\ref{sec:#1}}
|
||||||
|
\newcommand{\chapref}[1]{chapter~\ref{sec:#1}}
|
||||||
|
\newcommand{\figref}[1]{figure~\ref{fig:#1}}
|
||||||
|
\newcommand{\tabref}[1]{table~\ref{tab:#1}}
|
||||||
|
|
||||||
|
\newcommand{\Secref}[1]{Section~\ref{sec:#1}}
|
||||||
|
\newcommand{\Appref}[1]{Appendix~\ref{sec:#1}}
|
||||||
|
\newcommand{\Chapref}[1]{Chapter~\ref{sec:#1}}
|
||||||
|
\newcommand{\Figref}[1]{Figure~\ref{fig:#1}}
|
||||||
|
\newcommand{\Tabref}[1]{Table~\ref{tab:#1}}
|
||||||
|
|
||||||
|
\newcommand{\tm}{$^{tm}$}
|
||||||
|
|
||||||
|
\newcommand{\reffont}{\tt}
|
||||||
|
\newcommand{\predref}[2]{% % functor/arity
|
||||||
|
\mbox{\reffont #1/#2}}
|
||||||
|
\newcommand{\dcgref}[2]{% % functor//arity
|
||||||
|
\mbox{\reffont #1//#2}}
|
||||||
|
\newcommand{\qpredref}[3]{% % module:functor/arity
|
||||||
|
\mbox{\reffont #1:#2/#3}}
|
||||||
|
\newcommand{\qdcgref}[3]{% % module:functor//arity
|
||||||
|
\mbox{\reffont #1:#2//#3}}
|
||||||
|
\newcommand{\nopredref}[2]{% % functor/arity (external)
|
||||||
|
\mbox{\reffont #1/#2}}
|
||||||
|
\newcommand{\functor}[2]{% % functor/arity (no predicate)
|
||||||
|
\mbox{\reffont #1/#2}}
|
||||||
|
\newcommand{\manref}[2]{% % page(n)
|
||||||
|
\mbox{{\reffont #1(}{\rm #2}{\tt )}}}
|
||||||
|
\newcommand{\funcref}[2]{% % function(Args...)
|
||||||
|
\mbox{{\reffont #1(}{\it #2}{\tt )}}}
|
||||||
|
\newcommand{\prologflag}[1]{%
|
||||||
|
\mbox{\reffont #1}}
|
||||||
|
|
||||||
|
% Descriptions (definitions) of various things
|
||||||
|
% Note: I do not know where the 1ex comes from. This should fit
|
||||||
|
% exactly, but appearently some dimension is missing. I suspect
|
||||||
|
% a space creaping in somewhere.
|
||||||
|
|
||||||
|
\def\@nodescription{false}
|
||||||
|
|
||||||
|
\newcommand{\defentry}[1]{\definition{#1}}
|
||||||
|
\newcommand{\definition}[1]{%
|
||||||
|
\onlinebreak%
|
||||||
|
\ifthenelse{\equal{\@nodescription}{true}}{%
|
||||||
|
\def\@nodescription{false}%
|
||||||
|
\makebox[-\leftmargin]{\mbox{}}\makebox[\linewidth+\leftmargin-1ex][l]{\bf #1}\\}{%
|
||||||
|
\item[{\makebox[\linewidth+\leftmargin-1ex][l]{#1}}]}}
|
||||||
|
\newcommand{\nodescription}{\def\@nodescription{true}}
|
||||||
|
|
||||||
|
\makeatletter
|
||||||
|
\def\cmdlineoptionitem{\@ifstar{\@gluedcmdoptitem}{\@cmdoptitem}}
|
||||||
|
\def\@gluedcmdoptitem#1#2{\definition{\texttt{#1}\var{#2}}}
|
||||||
|
\def\@cmdoptitem#1#2{\definition{\texttt{#1} \var{#2}}}
|
||||||
|
\makeatother
|
||||||
|
\newcommand{\longoptionitem}[2]{%
|
||||||
|
\ifthenelse{\equal{}{#2}}{%
|
||||||
|
\definition{-{}-#1}}{%
|
||||||
|
\definition{-{}-#1={\it #2}}}\ignorespaces}
|
||||||
|
\newcommand{\longoption}[2]{%
|
||||||
|
\ifthenelse{\equal{}{#2}}{%
|
||||||
|
\mbox{\reffont -{}-#1}}{%
|
||||||
|
\mbox{\reffont -{}-#1={\it #2}}}}
|
||||||
|
|
||||||
|
\newcommand{\traceoption}[3]{%
|
||||||
|
\definition{{\tt #1} (#2)}#3%
|
||||||
|
\ignorespaces}
|
||||||
|
\newcommand{\pleaseoption}[3]{%
|
||||||
|
\definition{#1 {\it #2} {\rm(default: \it #3)}}%
|
||||||
|
\ignorespaces}
|
||||||
|
%\prologflagitem{Name}{Type}{Access}
|
||||||
|
\newcommand{\prologflagitem}[3]{%
|
||||||
|
\definition{#1 {\it (#2%
|
||||||
|
\ifthenelse{\equal{rw}{#3}}{, changeable}{})}}%
|
||||||
|
\index{flag:#1}\ignorespaces}
|
||||||
|
\newcommand{\escapeitem}[1]{%
|
||||||
|
\definition{\Sesc{\tt #1}}
|
||||||
|
\ignorespaces}
|
||||||
|
\newcommand{\fmtchar}[1]{%
|
||||||
|
\item[\tt #1]%
|
||||||
|
\ignorespaces}
|
||||||
|
|
||||||
|
% \directive{Name}{Arity}{Args}
|
||||||
|
% \predicate[Attibutes]{Name}{Arity}{Args}
|
||||||
|
% \infixop{Name}{Left}{Right}
|
||||||
|
% \prefixop{Name}{Right}
|
||||||
|
% \dcg[Attibutes]{Name}{Arity}{Args}
|
||||||
|
%
|
||||||
|
% Predicate descriptions. Must appear in a description
|
||||||
|
% environment.
|
||||||
|
|
||||||
|
\newcommand{\resitem}[1]{%
|
||||||
|
\defentry{#1}%
|
||||||
|
\index{#1}\ignorespaces}
|
||||||
|
\makeatletter
|
||||||
|
\def\predatt#1{\hfill{\it\footnotesize[#1]}}
|
||||||
|
\def\predicate{\@ifnextchar[{\@attpredicate}{\@predicate}}
|
||||||
|
\def\qpredicate{\@ifnextchar[{\@attqpredicate}{\@qpredicate}}
|
||||||
|
\def\@predicate#1#2#3{%
|
||||||
|
\ifthenelse{\equal{#2}{0}}{%
|
||||||
|
\defentry{#1}}{%
|
||||||
|
\defentry{#1({\it #3})}}%
|
||||||
|
\index{#1/#2}\ignorespaces}
|
||||||
|
\def\@attpredicate[#1]#2#3#4{%
|
||||||
|
\ifthenelse{\equal{#3}{0}}{%
|
||||||
|
\defentry{#2\predatt{#1}}}{%
|
||||||
|
\defentry{#2({\it #4})\predatt{#1}}}%
|
||||||
|
\index{#2/#3}\ignorespaces}
|
||||||
|
\def\@qpredicate#1#2#3#4{%
|
||||||
|
\ifthenelse{\equal{#3}{0}}{%
|
||||||
|
\defentry{#1:#2}}{%
|
||||||
|
\defentry{#1:#2({\it #4})}}%
|
||||||
|
\index{#1/#2}\ignorespaces}
|
||||||
|
\def\@attqpredicate[#1]#2#3#4#5{%
|
||||||
|
\ifthenelse{\equal{#4}{0}}{%
|
||||||
|
\defentry{#2:#3\predatt{#1}}}{%
|
||||||
|
\defentry{#2:#3({\it #5})\predatt{#1}}}%
|
||||||
|
\index{#2/#3}\ignorespaces}
|
||||||
|
\def\directive{\@ifnextchar[{\@attdirective}{\@directive}}
|
||||||
|
\def\@directive#1#2#3{%
|
||||||
|
\ifthenelse{\equal{#2}{0}}{%
|
||||||
|
\defentry{:- #1}}{%
|
||||||
|
\defentry{:- #1({\it #3})}}%
|
||||||
|
\index{#1/#2}\ignorespaces}
|
||||||
|
\def\@attdirective[#1]#2#3#4{%
|
||||||
|
\ifthenelse{\equal{#3}{0}}{%
|
||||||
|
\defentry{:- #2\predatt{#1}}}{%
|
||||||
|
\defentry{:- #2({\it #4})\predatt{#1}}}%
|
||||||
|
\index{#2/#3}\ignorespaces}
|
||||||
|
\def\dcg{\@ifnextchar[{\@attdcg}{\@dcg}}
|
||||||
|
\def\@dcg#1#2#3{%
|
||||||
|
\ifthenelse{\equal{#2}{0}}{%
|
||||||
|
\defentry{#1}}{%
|
||||||
|
\defentry{#1({\it #3}) \texttt{//}}}%
|
||||||
|
\index{#1/#2}\ignorespaces}
|
||||||
|
\def\@attdcg[#1]#2#3#4{%
|
||||||
|
\ifthenelse{\equal{#3}{0}}{%
|
||||||
|
\defentry{#2 \texttt{//}\predatt{#1}}}{%
|
||||||
|
\defentry{#2({\it #4}) \texttt{//}\predatt{#1}}}%
|
||||||
|
\index{#2//#3}\ignorespaces}
|
||||||
|
\def\infixop{\@ifnextchar[{\@attinfixop}{\@infixop}}
|
||||||
|
\def\@infixop#1#2#3{%
|
||||||
|
\defentry{{\it #2} #1 {\it #3}}%
|
||||||
|
\index{#1/2}\ignorespaces}
|
||||||
|
\def\@attinfixop[#1]#2#3#4{%
|
||||||
|
\defentry{{\it #3} #2 {\it #4}\predatt{#1}}%
|
||||||
|
\index{#2/2}\ignorespaces}
|
||||||
|
\def\prefixop{\@ifnextchar[{\@attprefixop}{\@prefixop}}
|
||||||
|
\def\@prefixop#1#2{%
|
||||||
|
\defentry{#1 {\it #2}}%
|
||||||
|
\index{#1/1}\ignorespaces}
|
||||||
|
\def\@attprefixop[#1]#2#3{%
|
||||||
|
\defentry{#2 {\it #3}\predatt{#1}}%
|
||||||
|
\index{#2/1}\ignorespaces}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
|
% \termitem{functor}{Args}
|
||||||
|
% \infixtermitem{functor}{Left}{Right}
|
||||||
|
% \prefixtermitem{functor}{Right}
|
||||||
|
% \postfixtermitem{functor}{Left}
|
||||||
|
%
|
||||||
|
% Terms in description lists. Typically used to describe various
|
||||||
|
% possible values or types for a term.
|
||||||
|
|
||||||
|
\newcommand{\termitem}[2]{%
|
||||||
|
\ifthenelse{\equal{}{#2}}{%
|
||||||
|
\definition{#1}}{%
|
||||||
|
\definition{#1({\it #2})}}\ignorespaces}
|
||||||
|
\newcommand{\infixtermitem}[3]{%
|
||||||
|
\definition{{\it #2} #1 {\it #3}}\ignorespaces}
|
||||||
|
\newcommand{\prefixtermitem}[2]{%
|
||||||
|
\definition{#1 {\it #2}}\ignorespaces}
|
||||||
|
\newcommand{\postfixtermitem}[2]{%
|
||||||
|
\definition{{\it #2} #1}\ignorespaces}
|
||||||
|
|
||||||
|
% \term{functor}{Args}
|
||||||
|
% \infixterm{functor}{Left}{Right}
|
||||||
|
% \prefixterm{functor}{Right}
|
||||||
|
% \postfixterm{functor}{Left}
|
||||||
|
%
|
||||||
|
% Terms used in running text.
|
||||||
|
|
||||||
|
\def\term{}
|
||||||
|
\renewcommand{\term}[2]{%
|
||||||
|
\ifthenelse{\equal{\protect}{\protect#2}}{%
|
||||||
|
{\reffont #1}}{%
|
||||||
|
{\reffont #1}({\it #2})}}
|
||||||
|
\newcommand{\infixterm}[3]{{\it #2} #1 {\it #3}}
|
||||||
|
\newcommand{\prefixterm}[2]{#1 {\it #2}}
|
||||||
|
\newcommand{\postfixterm}[2]{{\it #2} #1}
|
||||||
|
\newcommand{\errorterm}[2]{\mbox{\tt%
|
||||||
|
\ifthenelse{\equal{}{#2}}{%
|
||||||
|
#1}{%
|
||||||
|
#1(#2)}}}
|
||||||
|
|
||||||
|
|
||||||
|
\newcommand{\cfunction}[3]{%
|
||||||
|
\defentry{{\tt #1} #2{\rm (}{\it #3}{\rm )}}%
|
||||||
|
\index{#2()}\ignorespaces}
|
||||||
|
\newcommand{\constructor}[2]{%
|
||||||
|
\defentry{#1::#1{\rm (}{\it #2}{\rm )}}%
|
||||||
|
\index{#1::#1()}\ignorespaces}
|
||||||
|
\newcommand{\destructor}[1]{%
|
||||||
|
\defentry{#1::\Stilde{}#1{\rm ()}}%
|
||||||
|
\index{#1::\Stilde{}#1()}\ignorespaces}
|
||||||
|
\newcommand{\cppcast}[2]{%
|
||||||
|
\defentry{#1::operator #2{\rm ({\it void})}}%
|
||||||
|
\index{#1::operator #2()}\ignorespaces}
|
||||||
|
\newcommand{\cdecl}[2]{{\tt #1} {\em #2}}
|
||||||
|
\newcommand{\cmacro}[3]{%
|
||||||
|
\defentry{{\it #1} #2({\it #3})}%
|
||||||
|
\index{#2()}\ignorespaces}
|
||||||
|
\newcommand{\constitem}[1]{%
|
||||||
|
\definition{#1}%
|
||||||
|
\index{#1}\ignorespaces}
|
||||||
|
\newcommand{\cglobalvar}[1]{{\tt #1}}
|
||||||
|
\newcommand{\classitem}[1]{%
|
||||||
|
\definition{Class #1}%
|
||||||
|
\index{#1 \string\idxtype{class}}\ignorespaces}
|
||||||
|
\newcommand{\menuitem}[2]{%
|
||||||
|
\ifthenelse{\equal{\protect}{\protect#2}}{%
|
||||||
|
\definition{\textsf #1}}{%
|
||||||
|
\definition{\textsf #1 ({\it #2})}}%
|
||||||
|
\index{#1 \string\idxtype{menu}}%
|
||||||
|
\ignorespaces}
|
||||||
|
|
||||||
|
|
||||||
|
% \tag{Keyword}
|
||||||
|
%
|
||||||
|
% PlDoc @keyword expansion. \mtag{Keyword} is a multi-valued tag
|
||||||
|
|
||||||
|
\newcommand{\tag}[1]{%
|
||||||
|
\item[#1]}
|
||||||
|
\newcommand{\mtag}[1]{%
|
||||||
|
\item[#1]\mbox{}\\}
|
||||||
|
|
||||||
|
\newcommand{\bnfmeta}[1]{\ifmmode{\langle\mbox{\it #1}\rangle}\else$\langle\mbox{\it #1}\rangle$\fi}
|
||||||
|
\newcommand{\bnfor}{\ifmmode\mid\else$\mid$\fi}
|
||||||
|
\newcommand{\isa}{& ::= &}
|
||||||
|
\newcommand{\ora}{& $\mid$ &}
|
||||||
|
|
||||||
|
\renewcommand{\arg}[1]{\ifmmode\mbox{\em #1}\else{\it #1}\fi}
|
||||||
|
\newcommand{\class}[1]{{\em #1}\index{#1 \string\idxtype{class}}}
|
||||||
|
\newcommand{\classs}[1]{{\em #1s}\index{#1 \string\idxtype{class}}}
|
||||||
|
\newcommand{\demo}[1]{{\sf #1}\index{#1 \string\idxtype{demo}}}
|
||||||
|
\newcommand{\pllib}[1]{{\texttt{#1}}\index{#1 \string\idxtype{library}}}
|
||||||
|
\newcommand{\clib}[1]{{\tt #1}\index{#1 \string\idxtype{library}}}
|
||||||
|
\newcommand{\tool}[1]{{\em #1}\index{#1 \string\idxtype{tool}}}
|
||||||
|
\newcommand{\menuref}[1]{\textsf{#1}\index{#1 \string\idxtype{menu}}}
|
||||||
|
\newcommand{\constf}[1]{{\reffont #1}}
|
||||||
|
\newcommand{\const}[1]{{\tt #1}}
|
||||||
|
\newcommand{\plflag}[1]{{\tt #1}}
|
||||||
|
\newcommand{\type}[1]{{\reffont #1}}
|
||||||
|
\newcommand{\idx}[1]{#1\index{#1}}
|
||||||
|
\newcommand{\foreseen}[1]{\footnote{#1}}
|
||||||
|
\newcommand{\metafile}[1]{\mbox{\tt #1}}
|
||||||
|
\newcommand\file{\begingroup \urlstyle{tt}\Url}
|
||||||
|
\newcommand\email{\begingroup \urlstyle{tt}\Url}
|
||||||
|
\newcommand{\env}[1]{\mbox{\tt #1}}
|
||||||
|
\newcommand{\except}[1]{\mbox{\tt #1}}
|
||||||
|
\newcommand{\exam}[1]{\mbox{\tt #1}}
|
||||||
|
\newcommand{\module}[1]{\mbox{\reffont #1}}
|
||||||
|
\newcommand{\fileext}[1]{\mbox{\texttt{.#1}}}
|
||||||
|
\newcommand{\option}[1]{\mbox{\tt #1}}
|
||||||
|
\newcommand{\resource}[1]{\mbox{\reffont #1}}
|
||||||
|
\newcommand{\cmdlineoption}[1]{\mbox{\tt #1}}
|
||||||
|
\newcommand{\argoption}[2]{\mbox{\tt #1 \em #2}}
|
||||||
|
\newcommand{\ctype}[1]{{\texttt{#1}}}
|
||||||
|
\newcommand{\op}[1]{{\tt #1}}
|
||||||
|
\newcommand{\program}[1]{\texttt{#1}}
|
||||||
|
\newcommand{\manpage}[2]{{\bf #1}(#2)}
|
||||||
|
\newcommand{\chr}[1]{{\tt #1}}
|
||||||
|
\newcommand{\jargon}[1]{{\em #1}}
|
||||||
|
\newcommand{\strong}[1]{{\bf #1}}
|
||||||
|
\newcommand{\texcmd}[1]{{\Sesc}{\tt #1}}
|
||||||
|
\newcommand{\texenv}[1]{{\tt #1}}
|
||||||
|
\newcommand{\texmode}[1]{{\tt #1}}
|
||||||
|
\newcommand{\HTML}[1]{{\bf #1}}
|
||||||
|
\newcommand{\libdoc}[2]{\section{\pllib{#1}: #2}}
|
||||||
|
\newcommand{\key}[1]{{\sf #1}}
|
||||||
|
\newcommand{\menu}[2]{%
|
||||||
|
{\sf #1}%
|
||||||
|
\ifthenelse{\equal{#2}{}}{%
|
||||||
|
}{%
|
||||||
|
~(\texttt{#2})}}
|
||||||
|
|
||||||
|
\newcommand\satom{\begingroup \urlstyle{tt}\Url}
|
||||||
|
\newcommand\fmtseq{\begingroup \urlstyle{tt}\Url}
|
||||||
|
|
||||||
|
\urldef{\Sexe}\satom{#!} % #!
|
||||||
|
\urldef{\Scgt}\satom{#>} % #>
|
||||||
|
\urldef{\Scge}\satom{#>=} % #>=
|
||||||
|
\urldef{\Sclt}\satom{#<} % #<
|
||||||
|
\urldef{\Scle}\satom{#=<} % #=<
|
||||||
|
\urldef{\Sceq}\satom{#=} % #=
|
||||||
|
\urldef{\Scne}\satom{#\=} % #\=
|
||||||
|
\urldef{\Scnot}\satom{#\} % #\
|
||||||
|
\urldef{\Scor}\satom{#\/} % #\/
|
||||||
|
\urldef{\Scand}\satom{#/\} % #/\
|
||||||
|
\urldef{\Sequiv}\satom{#<=>} % #<=>
|
||||||
|
\urldef{\Slimpl}\satom{#<=} % #<=
|
||||||
|
\urldef{\Srimpl}\satom{#=>} % #=>
|
||||||
|
\urldef{\Slimplies}\satom{#<==} % #<==
|
||||||
|
\urldef{\Srimplies}\satom{#==>} % #==>
|
||||||
|
\urldef{\Scequal}\satom{#<==>} % #<==>
|
||||||
|
\urldef{\Scieq}\satom{#=:=} % #=:=
|
||||||
|
\urldef{\Scine}\satom{#=\=} % #=\=
|
||||||
|
\urldef{\Scut}\satom{!} % !
|
||||||
|
\urldef{\Scomma}\satom{,} % ,
|
||||||
|
\urldef{\Sifthen}\satom{->} % ->
|
||||||
|
\urldef{\Ssoftcut}\satom{*->} % *->
|
||||||
|
\urldef{\Sdot}\satom{.} % .
|
||||||
|
\urldef{\Ssemicolon}\satom{;} % ;
|
||||||
|
\urldef{\Slt}\satom{<} % <
|
||||||
|
\urldef{\Sxor}\satom{><} % ><
|
||||||
|
\urldef{\Seq}\satom{=} % =
|
||||||
|
\urldef{\Suniv}\satom{=..} % =..
|
||||||
|
\urldef{\Saeq}\satom{=:=} % =:=
|
||||||
|
\urldef{\Sle}\satom{=<} % =<
|
||||||
|
\urldef{\Sel}\satom{<=} % <=
|
||||||
|
\urldef{\Sequal}\satom{==} % ==
|
||||||
|
\urldef{\Sstructeq}\satom{=@=} % =@=
|
||||||
|
\urldef{\Sstructneq}\satom{\=@=} % \=@=
|
||||||
|
\urldef{\Sane}\satom{=\=} % =\=
|
||||||
|
\urldef{\Sgt}\satom{>} % >
|
||||||
|
\urldef{\Sge}\satom{>=} % >=
|
||||||
|
\urldef{\Stlt}\satom{@<} % @<
|
||||||
|
\urldef{\Stle}\satom{@=<} % @=<
|
||||||
|
\urldef{\Stgt}\satom{@>} % @>
|
||||||
|
\urldef{\Stge}\satom{@>=} % @>=
|
||||||
|
\urldef{\Snot}\satom{\+} % \+
|
||||||
|
\urldef{\Sne}\satom{\=} % \=
|
||||||
|
\urldef{\Snequal}\satom{\==} % \==
|
||||||
|
\urldef{\Shat}\satom{^} % ^
|
||||||
|
\urldef{\Sbar}\satom{|} % |
|
||||||
|
\urldef{\Stimes}\satom{*} % *
|
||||||
|
\urldef{\Spow}\satom{**} % **
|
||||||
|
\urldef{\Splus}\satom{+} % +
|
||||||
|
\urldef{\Sminus}\satom{-} % -
|
||||||
|
\urldef{\Sdiv}\satom{/} % /
|
||||||
|
\urldef{\Sidiv}\satom{//} % //
|
||||||
|
\urldef{\Sand}\satom{/\} % /\
|
||||||
|
\urldef{\Slshift}\satom{<<} % <<
|
||||||
|
\urldef{\Srshift}\satom{>>} % >>
|
||||||
|
\urldef{\Sneg}\satom{\} % \
|
||||||
|
\urldef{\Sesc}\satom{\} % \
|
||||||
|
\urldef{\Sor}\satom{\/} % \/
|
||||||
|
\urldef{\Sdollar}\satom{$} % $
|
||||||
|
\urldef{\Squest}\satom{?} % ?
|
||||||
|
\urldef{\Smodule}\satom{:} % :
|
||||||
|
\urldef{\Sneck}\satom{:-} % :-
|
||||||
|
\urldef{\Sdirective}\satom{?-} % ?-
|
||||||
|
\urldef{\Sdcg}\satom{-->} % -->
|
||||||
|
\urldef{\Bc}\satom{\c} % \c
|
||||||
|
\urldef{\Bn}\satom{\n} % \n
|
||||||
|
\urldef{\Br}\satom{\r} % \r
|
||||||
|
\urldef{\Bl}\satom{\l} % \l
|
||||||
|
\urldef{\BB}\satom{\\} % \\
|
||||||
|
\urldef{\Stilde}\satom{~} % ~
|
||||||
|
\urldef{\Spercent}\satom{%} % %
|
||||||
|
\urldef{\Shash}\satom{#} % #
|
||||||
|
\urldef{\Scurl}\satom{{}} % {}
|
||||||
|
\urldef{\SxXX}\satom{xXX..\} % xXX..\
|
||||||
|
|
||||||
|
\newcommand{\bug}[1]{\footnote{BUG: #1}}
|
||||||
|
|
||||||
|
\newcommand{\mod}[2]{#1 \mbox{\rm mod} #2}
|
||||||
|
\newcommand{\rem}[2]{#1 \mbox{\rm rem} #2}
|
||||||
|
\newcommand{\pow}[2]{{#1}^{#2}}
|
||||||
|
\newcommand{\bsl}[0]{\Sesc}
|
||||||
|
|
||||||
|
% Index handling
|
||||||
|
|
||||||
|
\newcommand{\idxtype}[1]{{\small\em #1}}
|
||||||
|
|
||||||
|
% Prolog predicate summary
|
||||||
|
|
||||||
|
\newenvironment{summarylist}[1]{\begin{longtable}[l]{#1}}{\end{longtable}}
|
||||||
|
\newcommand{\predicatesummary}[3]{#1/#2 & #3 \\}
|
||||||
|
\newcommand{\oppredsummary}[5]{#1/#2 & #5 \\}
|
||||||
|
\newcommand{\functionsummary}[3]{#1/#2 & #3 \\}
|
||||||
|
\newcommand{\opfuncsummary}[5]{#1/#2 & #5 \\}
|
||||||
|
\newcommand{\opsummary}[4]{#3 & #1 & #2 & #4 \\}
|
||||||
|
\newcommand{\hook}[1]{(hook)}
|
||||||
|
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
% CODE environment %
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
\usepackage{fancyvrb}
|
||||||
|
\usepackage{color}
|
||||||
|
|
||||||
|
%\definecolor{codeboxcolor}{rgb}{0.7,0.7,0.7}
|
||||||
|
\definecolor{codeboxcolor}{rgb}{0.4,0.4,0.4}
|
||||||
|
\DefineVerbatimEnvironment%
|
||||||
|
{code}{Verbatim}
|
||||||
|
{frame=single,
|
||||||
|
framerule=0.2pt,
|
||||||
|
rulecolor=\color{codeboxcolor},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
% INCLUDE FIGURES %
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
% PostScript figures
|
||||||
|
% \postscriptfig[width=5in]{label}{Title}
|
||||||
|
|
||||||
|
\makeatletter
|
||||||
|
\def\postscriptfig{\@ifnextchar[{\@scaledpostscriptfig}{\@postscriptfig}}
|
||||||
|
\def\@scaledpostscriptfig[#1]#2#3{%
|
||||||
|
\begin{figure}%
|
||||||
|
\centerline{\includegraphics[#1]{#2}}
|
||||||
|
\caption{#3}
|
||||||
|
\label{fig:#2}
|
||||||
|
\end{figure}}
|
||||||
|
\def\@postscriptfig#1#2{%
|
||||||
|
\begin{figure}%
|
||||||
|
\centerline{\includegraphics{#1}}
|
||||||
|
\caption{#2}
|
||||||
|
\label{fig:#1}
|
||||||
|
\end{figure}}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
|
% \begin{tabularlp}{longest-text}
|
||||||
|
|
||||||
|
\newlength{\tabDright}
|
||||||
|
\newlength{\tabDleft}
|
||||||
|
\newcommand{\PreserveBackslash}[1]{\let\temp=\\#1\let\\=\temp}
|
||||||
|
\newcommand{\raggedrightcolumn}{\PreserveBackslash\raggedright\hspace{0pt}}
|
||||||
|
\newenvironment{tabularlp}[1]%
|
||||||
|
{\settowidth{\tabDleft}{#1}%
|
||||||
|
\setlength{\tabDright}{\linewidth-\columnsep*3-\tabDleft}%
|
||||||
|
\begin{tabular}{|p{\tabDleft}|>{\raggedrightcolumn}p{\tabDright}|}}%
|
||||||
|
{\end{tabular}}
|
||||||
|
|
||||||
|
% \begin{tags} ... \end{tags}
|
||||||
|
|
||||||
|
\newenvironment{tags}%
|
||||||
|
{\begin{quote}\begin{description}%
|
||||||
|
\setlength{\itemsep}{0pt}%
|
||||||
|
\footnotesize}%
|
||||||
|
{\end{description}\end{quote}}
|
||||||
|
|
||||||
|
|
||||||
|
% \begin{parameters} ... \end{parameters}
|
||||||
|
|
||||||
|
\newenvironment{parameters}%
|
||||||
|
{\par%
|
||||||
|
\makebox[\linewidth]{\hfill\footnotesize Parameters}
|
||||||
|
\begin{tabular*}{\linewidth}{lp{0.7\linewidth}}
|
||||||
|
\hline}%
|
||||||
|
{\end{tabular*}}
|
||||||
|
|
||||||
|
|
32
man/plpage.sty
Normal file
32
man/plpage.sty
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
%% Define Prolog manual page and header layout
|
||||||
|
|
||||||
|
\usepackage{fancyheadings}
|
||||||
|
\usepackage{fancychap}
|
||||||
|
|
||||||
|
% PAGESTYLE
|
||||||
|
%
|
||||||
|
% Chapter date
|
||||||
|
% ---------------------------------------
|
||||||
|
%
|
||||||
|
% bla, bla, bla, ...
|
||||||
|
%
|
||||||
|
% \bottomleft - page - \bottomright
|
||||||
|
|
||||||
|
\def\arabicday{\number\year-\number\month-\number\day}
|
||||||
|
|
||||||
|
\providecommand{\runningtitle}{none}
|
||||||
|
|
||||||
|
\ifthenelse{\equal{\runningtitle}{none}}{%
|
||||||
|
\relax}{%
|
||||||
|
\pagestyle{fancyplain}
|
||||||
|
\headheight 14pt
|
||||||
|
\def\chaptermark{\mbox{}}
|
||||||
|
\renewcommand{\chaptermark}[1]{\markboth{#1}{#1}} % remember chapter title
|
||||||
|
\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
|
||||||
|
|
||||||
|
\lhead[\fancyplain{}{\bf\thepage}]{\fancyplain{}{\bf\rightmark}}
|
||||||
|
\rhead[\fancyplain{}{\bf\leftmark}]{\fancyplain{}{\bf\thepage}}
|
||||||
|
\footrulewidth 0.2pt
|
||||||
|
\lfoot[\tiny \runningtitle]{}
|
||||||
|
\rfoot[]{\tiny \runningtitle}
|
||||||
|
\cfoot{}}
|
221
man/runtex
Executable file
221
man/runtex
Executable file
@ -0,0 +1,221 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Automate running LaTeX
|
||||||
|
|
||||||
|
program=`basename $0`
|
||||||
|
tex=latex
|
||||||
|
format=dvi
|
||||||
|
rerun='Rerun to get cross-references right'
|
||||||
|
maxruns=4
|
||||||
|
quiet=false
|
||||||
|
|
||||||
|
function texclean
|
||||||
|
{ rm -f *.idx *.ind *.ilg *.aux *.log *.lof *.out *.toc *.blg
|
||||||
|
}
|
||||||
|
|
||||||
|
# make runtex --clean work without GNU getopt
|
||||||
|
case "$1" in
|
||||||
|
--clean)
|
||||||
|
texclean
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
appbase=`dirname $0`
|
||||||
|
case "$appbase" in
|
||||||
|
/*)
|
||||||
|
;;
|
||||||
|
.) appbase=`pwd`
|
||||||
|
;;
|
||||||
|
./*|../*)
|
||||||
|
appbase="`pwd`/$appbase"
|
||||||
|
clean=false
|
||||||
|
while [ $clean = false ]; do
|
||||||
|
b=`echo $appbase | sed -e 's@/\./@/@g' -e 's@/[a-z]*/\.\./@/@g'`
|
||||||
|
if [ "x$b" = "x$appbase" ]; then
|
||||||
|
clean=true
|
||||||
|
else
|
||||||
|
appbase="$b"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
*) echo "ERROR: runtex must be called with relative or absolute path"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "runtex application base = $appbase"
|
||||||
|
|
||||||
|
function addinput
|
||||||
|
{ if [ -z "$TEXINPUTS" ]; then
|
||||||
|
export TEXINPUTS="$1::"
|
||||||
|
else
|
||||||
|
export TEXINPUTS=$TEXINPUTS:$1::
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function addbstinput
|
||||||
|
{ if [ -z "$BSTINPUTS" ]; then
|
||||||
|
export BSTINPUTS="$1::"
|
||||||
|
else
|
||||||
|
export BSTINPUTS=$BSTINPUTS:$1::
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function addbibinput
|
||||||
|
{ if [ -z "$BIBINPUTS" ]; then
|
||||||
|
export BIBINPUTS="$1::"
|
||||||
|
else
|
||||||
|
export BIBINPUTS=$BIBINPUTS:$1::
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function usage
|
||||||
|
{ echo "Usage:"
|
||||||
|
echo ""
|
||||||
|
echo " $program [options] file"
|
||||||
|
echo ""
|
||||||
|
echo "Options:"
|
||||||
|
echo ""
|
||||||
|
echo " --pdf Use pdflatex and make .pdf images"
|
||||||
|
echo " --dvi Use latex"
|
||||||
|
echo " --help Print this message"
|
||||||
|
echo " --maxruns=# Specify maximum # runs"
|
||||||
|
echo " --clean Just remove TeX temporary files"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if [ -d $appbase ]; then
|
||||||
|
addinput $appbase
|
||||||
|
addbstinput $appbase
|
||||||
|
addbibinput $appbase
|
||||||
|
fi
|
||||||
|
|
||||||
|
argp=true
|
||||||
|
while [ $argp = true ] ; do
|
||||||
|
case "$1" in
|
||||||
|
--pdf)
|
||||||
|
tex=pdflatex
|
||||||
|
format=pdf
|
||||||
|
shift ;;
|
||||||
|
--dvi)
|
||||||
|
tex=latex
|
||||||
|
format=dvi
|
||||||
|
shift ;;
|
||||||
|
--quiet)
|
||||||
|
quiet=true;
|
||||||
|
shift ;;
|
||||||
|
--maxruns=*)
|
||||||
|
maxruns="`echo $1 | sed 's/--maxruns=//'`"
|
||||||
|
shift ;;
|
||||||
|
--inputs=*)
|
||||||
|
addinput "`echo $1 | sed 's/--inputs=//'`"
|
||||||
|
shift ;;
|
||||||
|
--help)
|
||||||
|
usage
|
||||||
|
exit 0 ;;
|
||||||
|
--clean)
|
||||||
|
texclean
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
--*)
|
||||||
|
usage
|
||||||
|
exit 1 ;;
|
||||||
|
*)
|
||||||
|
argp=false;
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
file="$1"
|
||||||
|
|
||||||
|
# ensure .tex suffix
|
||||||
|
|
||||||
|
if [ ${file%.tex} = $file ]; then
|
||||||
|
file=$file.tex
|
||||||
|
fi
|
||||||
|
|
||||||
|
doc=${file%.tex}
|
||||||
|
|
||||||
|
if [ -r Makefile ] && grep -q '^tex:' Makefile; then
|
||||||
|
make tex
|
||||||
|
fi
|
||||||
|
|
||||||
|
cont=yes
|
||||||
|
done=0
|
||||||
|
while [ $cont != "no" ]; do
|
||||||
|
cont=maybe
|
||||||
|
|
||||||
|
# fix index problems
|
||||||
|
if [ -r $doc.idx ]; then
|
||||||
|
cp $doc.idx $doc.idx.$$
|
||||||
|
if [ -x $appbase/correctindex ]; then
|
||||||
|
$appbase/correctindex $doc.idx
|
||||||
|
fi
|
||||||
|
if [ -r $appbase/makeindex.ist ]; then
|
||||||
|
makeindex -s $appbase/makeindex.ist $doc
|
||||||
|
else
|
||||||
|
makeindex $doc
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test -r $doc.aux && grep -qw bibdata $doc.aux; then
|
||||||
|
if [ -f $doc.bbl ]; then cp $doc.bbl $doc.bbl$$; fi
|
||||||
|
echo "%%% Running Bibtex"
|
||||||
|
bibtex $doc
|
||||||
|
if [ -r $doc.bbl -a -r $doc.bbl.$$ ]; then
|
||||||
|
if cmp -s $doc.bbl $doc.bbl.$$; then
|
||||||
|
true
|
||||||
|
else
|
||||||
|
cont=yes
|
||||||
|
echo "*** Bibtex output changed. Rerunning $tex ***"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
rm -f $doc.bbl$$
|
||||||
|
fi
|
||||||
|
if [ `basename $tex` = pdflatex -a -r $appbase/Makefile.pdf ]; then
|
||||||
|
make -f $appbase/Makefile.pdf
|
||||||
|
fi
|
||||||
|
rm -f $doc.log
|
||||||
|
if [ $quiet == true ]; then
|
||||||
|
$tex $doc -file-line-error -halt-on-error >/dev/null
|
||||||
|
else
|
||||||
|
$tex $doc
|
||||||
|
fi
|
||||||
|
if [ $? != 0 ]; then
|
||||||
|
rm -f $doc.idx.$$
|
||||||
|
exit $?;
|
||||||
|
fi
|
||||||
|
if grep -q "$rerun" $doc.log; then
|
||||||
|
echo "*** Cross-references changed. Rerunning $tex ***"
|
||||||
|
cont=yes
|
||||||
|
else
|
||||||
|
if [ -r $doc.idx -a -r $doc.idx.$$ ]; then
|
||||||
|
if cmp -s $doc.idx $doc.idx.$$; then
|
||||||
|
true
|
||||||
|
else
|
||||||
|
ls -l $doc.idx $doc.idx.$$
|
||||||
|
cont=yes
|
||||||
|
echo "*** Index changed. Rerunning $tex ***"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
rm -f $doc.idx.$$
|
||||||
|
done=$(($done+1))
|
||||||
|
if [ $done = $maxruns ]; then cont=no; fi
|
||||||
|
if [ $cont = maybe ]; then cont=no; fi
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
if grep -q Warning $doc.log; then
|
||||||
|
echo ""
|
||||||
|
echo "*****************************"
|
||||||
|
echo "The following warnings remain"
|
||||||
|
echo "*****************************"
|
||||||
|
grep Warning $doc.log
|
||||||
|
fi
|
@ -164,6 +164,12 @@ TokEntry* tokptr void
|
|||||||
TokEntry* toktide void
|
TokEntry* toktide void
|
||||||
VarEntry* VarTable void
|
VarEntry* VarTable void
|
||||||
VarEntry* AnonVarTable void
|
VarEntry* AnonVarTable void
|
||||||
|
Term Comments void
|
||||||
|
CELL* CommentsTail void
|
||||||
|
CELL* CommentsNextChar void
|
||||||
|
wchar_t* CommentsBuff void
|
||||||
|
size_t CommentsBuffPos void
|
||||||
|
size_t CommentsBuffLim void
|
||||||
sigjmp_buf RestartEnv void
|
sigjmp_buf RestartEnv void
|
||||||
char FileNameBuf[YAP_FILENAME_MAX] void
|
char FileNameBuf[YAP_FILENAME_MAX] void
|
||||||
char FileNameBuf2[YAP_FILENAME_MAX] void
|
char FileNameBuf2[YAP_FILENAME_MAX] void
|
||||||
|
@ -23,7 +23,7 @@ CC=@CC@
|
|||||||
CXX=@CXX@
|
CXX=@CXX@
|
||||||
|
|
||||||
# normal
|
# normal
|
||||||
CXXFLAGS= -std=c++0x @SHLIB_CXXFLAGS@ $(YAP_EXTRAS) $(DEFS) -D_YAP_NOT_INSTALLED_=1 -I$(srcdir) -I../../../.. -I$(srcdir)/../../../../include @CPPFLAGS@ -DNDEBUG
|
CXXFLAGS= @SHLIB_CXXFLAGS@ $(YAP_EXTRAS) $(DEFS) -D_YAP_NOT_INSTALLED_=1 -I$(srcdir) -I../../../.. -I$(srcdir)/../../../../include @CPPFLAGS@ -DNDEBUG
|
||||||
|
|
||||||
# debug
|
# debug
|
||||||
#CXXFLAGS= -std=c++0x @SHLIB_CXXFLAGS@ $(YAP_EXTRAS) $(DEFS) -D_YAP_NOT_INSTALLED_=1 -I$(srcdir) -I../../../.. -I$(srcdir)/../../../../include @CPPFLAGS@ -g -O0
|
#CXXFLAGS= -std=c++0x @SHLIB_CXXFLAGS@ $(YAP_EXTRAS) $(DEFS) -D_YAP_NOT_INSTALLED_=1 -I$(srcdir) -I../../../.. -I$(srcdir)/../../../../include @CPPFLAGS@ -g -O0
|
||||||
@ -84,23 +84,13 @@ OBJS = \
|
|||||||
BPSolver.o \
|
BPSolver.o \
|
||||||
BpNode.o \
|
BpNode.o \
|
||||||
SPSolver.o \
|
SPSolver.o \
|
||||||
HorusYap.o
|
HorusYap.o \
|
||||||
|
|
||||||
HCLI_OBJS = \
|
|
||||||
BayesNet.o \
|
|
||||||
BayesNode.o \
|
|
||||||
FactorGraph.o \
|
|
||||||
Factor.o \
|
|
||||||
BPSolver.o \
|
|
||||||
BpNode.o \
|
|
||||||
SPSolver.o \
|
|
||||||
HorusCli.o \
|
|
||||||
xmlParser.o
|
xmlParser.o
|
||||||
|
|
||||||
SOBJS=horus.@SO@
|
SOBJS=horus.@SO@
|
||||||
|
|
||||||
|
|
||||||
all: $(SOBJS) hcli
|
all: $(SOBJS)
|
||||||
|
|
||||||
# default rule
|
# default rule
|
||||||
%.o : $(srcdir)/%.cpp
|
%.o : $(srcdir)/%.cpp
|
||||||
@ -115,7 +105,7 @@ xmlParser.o : $(srcdir)/xmlParser/xmlParser.cpp
|
|||||||
@DO_SECOND_LD@ @SHLIB_CXX_LD@ -o horus.@SO@ $(OBJS) @EXTRA_LIBS_FOR_SWIDLLS@
|
@DO_SECOND_LD@ @SHLIB_CXX_LD@ -o horus.@SO@ $(OBJS) @EXTRA_LIBS_FOR_SWIDLLS@
|
||||||
|
|
||||||
|
|
||||||
hcli: $(HCLI_OBJS)
|
hcli: $(OBJS)
|
||||||
$(CXX) -o hcli $(HCLI_OBJS)
|
$(CXX) -o hcli $(HCLI_OBJS)
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,15 +47,17 @@ CMFLAGS=@SHLIB_CFLAGS@
|
|||||||
CIFLAGS=
|
CIFLAGS=
|
||||||
CFLAGS=$(COFLAGS) $(CWFLAGS) $(CMFLAGS) $(CIFLAGS) $(PKGCFLAGS) @DEFS@
|
CFLAGS=$(COFLAGS) $(CWFLAGS) $(CMFLAGS) $(CIFLAGS) $(PKGCFLAGS) @DEFS@
|
||||||
|
|
||||||
RUNTEX = true
|
|
||||||
|
|
||||||
LDSOFLAGS=@LDFLAGS@ @EXTRA_LIBS_FOR_SWIDLLS@
|
LDSOFLAGS=@LDFLAGS@ @EXTRA_LIBS_FOR_SWIDLLS@
|
||||||
LDFLAGS=$(PKGLDFLAGS)
|
LDFLAGS=$(PKGLDFLAGS)
|
||||||
|
|
||||||
MKINDEX=$(PL) -f none -g make -t halt
|
MKINDEX=$(PL) -f none -g make -t halt
|
||||||
|
|
||||||
PUBLICPL=swipl
|
.txt.tex:
|
||||||
PLTOTEX=$(PUBLICPL) -q -s pltotex.pl -g pltotex --
|
swipl -f script.pl -g "doc_latex('$*.txt','$*.tex',[stand_alone(false)]),halt" -t "halt(1)"
|
||||||
|
|
||||||
|
|
||||||
|
PUBLICPL=$(PL)
|
||||||
|
PLTOTEX=$(PUBLICPL) -q -l $(srcdir)/pltotex.pl -g pltotex --
|
||||||
|
|
||||||
#
|
#
|
||||||
# find out how to generate .o files from $(scrdir)
|
# find out how to generate .o files from $(scrdir)
|
||||||
|
@ -27,6 +27,8 @@ INSTALL_SCRIPT=@INSTALL_SCRIPT@
|
|||||||
################################################################
|
################################################################
|
||||||
|
|
||||||
LATEX=latex
|
LATEX=latex
|
||||||
|
DOC2TEX=@abs_top_srcdir@/man/doc2tex
|
||||||
|
RUNTEX=@abs_top_srcdir@/man/runtex
|
||||||
TEX=$(DOC).tex $(SUBTEX)
|
TEX=$(DOC).tex $(SUBTEX)
|
||||||
DVI=$(DOC).dvi
|
DVI=$(DOC).dvi
|
||||||
PDF=$(DOC).pdf
|
PDF=$(DOC).pdf
|
||||||
@ -50,12 +52,16 @@ $(HTML): $(TEX)
|
|||||||
mv html/index.html $@
|
mv html/index.html $@
|
||||||
|
|
||||||
$(PDF): $(TEX)
|
$(PDF): $(TEX)
|
||||||
../../man/runtex --pdf $(DOC)
|
$(srcdir)/../../man/runtex --pdf $(DOC)
|
||||||
|
|
||||||
$(TEX): $(DOC2TEX)
|
%.tex : $(srcdir)/%.doc
|
||||||
|
$(DOC2TEX) $< > $@
|
||||||
|
|
||||||
.doc.tex:
|
%.tex : $(srcdir)/%.txt
|
||||||
$(DOC2TEX) $*.doc > $*.tex
|
$(PUBLICPL) -f none -g "doc_latex('$<','$@',[stand_alone(false)]),halt" -t "halt(1)"
|
||||||
|
|
||||||
|
%.tex : $(srcdir)/%.pl
|
||||||
|
$(PLTOTEX) $< > $@
|
||||||
|
|
||||||
# Get the Prolog dialect specific part of the Makefiles
|
# Get the Prolog dialect specific part of the Makefiles
|
||||||
|
|
||||||
|
@ -329,19 +329,22 @@ initIO()
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
#ifdef __YAP_PROLOG__
|
#ifdef __YAP_PROLOG__
|
||||||
|
IOFUNCTIONS buf;
|
||||||
|
buf = GD->os.iofunctions;
|
||||||
memset(GD, 0, sizeof(gds_t));
|
memset(GD, 0, sizeof(gds_t));
|
||||||
|
GD->os.iofunctions = buf;
|
||||||
memset(LD, 0, sizeof(PL_local_data_t));
|
memset(LD, 0, sizeof(PL_local_data_t));
|
||||||
#endif
|
#endif
|
||||||
streamAliases = newHTable(16);
|
streamAliases = newHTable(16);
|
||||||
streamContext = newHTable(16);
|
streamContext = newHTable(16);
|
||||||
PL_register_blob_type(&stream_blob);
|
PL_register_blob_type(&stream_blob);
|
||||||
#ifdef __unix__
|
#ifdef __unix__
|
||||||
{ int fd;
|
{ int fd;
|
||||||
|
|
||||||
if ( (fd=Sfileno(Sinput)) < 0 || !isatty(fd) ||
|
if ( (fd=Sfileno(Sinput)) < 0 || !isatty(fd) ||
|
||||||
(fd=Sfileno(Soutput)) < 0 || !isatty(fd) )
|
(fd=Sfileno(Soutput)) < 0 || !isatty(fd) )
|
||||||
PL_set_prolog_flag("tty_control", PL_BOOL, FALSE);
|
PL_set_prolog_flag("tty_control", PL_BOOL, FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
ResetTty();
|
ResetTty();
|
||||||
#if __YAP_PROLOG__
|
#if __YAP_PROLOG__
|
||||||
@ -1304,7 +1307,6 @@ void
|
|||||||
PL_write_prompt(int dowrite)
|
PL_write_prompt(int dowrite)
|
||||||
{ GET_LD
|
{ GET_LD
|
||||||
IOSTREAM *s = getStream(Suser_output);
|
IOSTREAM *s = getStream(Suser_output);
|
||||||
|
|
||||||
if ( s )
|
if ( s )
|
||||||
{ if ( dowrite )
|
{ if ( dowrite )
|
||||||
{ atom_t a = PrologPrompt();
|
{ atom_t a = PrologPrompt();
|
||||||
|
@ -5,7 +5,9 @@
|
|||||||
#define O_GMP 1
|
#define O_GMP 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef PL_CONSOLE
|
||||||
#define PL_KERNEL 1
|
#define PL_KERNEL 1
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __MINGW32__
|
#ifdef __MINGW32__
|
||||||
#define O_XOS 1
|
#define O_XOS 1
|
||||||
|
@ -2915,7 +2915,13 @@ Sfileno(IOSTREAM *s)
|
|||||||
#ifdef __WINDOWS__
|
#ifdef __WINDOWS__
|
||||||
#include "windows/popen.c"
|
#include "windows/popen.c"
|
||||||
|
|
||||||
|
#ifdef popen
|
||||||
|
#undef popen
|
||||||
|
#endif
|
||||||
#define popen(cmd, how) pt_popen(cmd, how)
|
#define popen(cmd, how) pt_popen(cmd, how)
|
||||||
|
#ifdef pclose
|
||||||
|
#undef pclose
|
||||||
|
#endif
|
||||||
#define pclose(fd) pt_pclose(fd)
|
#define pclose(fd) pt_pclose(fd)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit b0fde37bf3338926ed4f1fd06bbbaa78fb389569
|
Subproject commit a9c5837d21002a02a73edf2517cb900c56a8f5bc
|
@ -1 +1 @@
|
|||||||
Subproject commit 077a6e787627b03def8f58253c095f19a504245d
|
Subproject commit cee6c346ba77e046ef1873b9d8c88c52c3baae2d
|
@ -1 +1 @@
|
|||||||
Subproject commit b2eb894ce3e41925070215f800d6df3a356dc29d
|
Subproject commit 9b0d051d7c1b5a665df6c71b98fde555532aaab4
|
@ -1 +1 @@
|
|||||||
Subproject commit 4b317ca09a06beff1605e185756f08869279ff3e
|
Subproject commit f6fce313722d2f69e5ce6074f304ce05065bbf40
|
@ -1 +1 @@
|
|||||||
Subproject commit dd614178a5e334aa7f40d157d849514e99a9f48b
|
Subproject commit 09000f63832736132093b178b1edbe4b617db843
|
1
packages/pldoc
Submodule
1
packages/pldoc
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit c04ee0be3b03df2269178e008345f5fa395f40d2
|
@ -1 +1 @@
|
|||||||
Subproject commit dcdc7f12929bf921ee49f85983c7cd9a9171a32e
|
Subproject commit aa90b8f8a67e605e82566b719a8f20d125598bd2
|
@ -1 +1 @@
|
|||||||
Subproject commit 652ce8786dfd16f852ef3a30d0365f11375e160f
|
Subproject commit babcbfe9cc5ab269cd5fd4f024e9d57bd3d0a8db
|
38
pl/boot.yap
38
pl/boot.yap
@ -15,8 +15,8 @@
|
|||||||
* *
|
* *
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
% This one should come first so that disjunctions and long distance
|
%
|
||||||
% cuts are compiled right with co-routining.
|
%
|
||||||
%
|
%
|
||||||
|
|
||||||
true :- true.
|
true :- true.
|
||||||
@ -144,7 +144,7 @@ true :- true.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* main execution loop */
|
/* main execution loop */
|
||||||
'$read_vars'(user_input, Goal, Mod, Pos, Bindings, Prompt) :-
|
'$read_vars'(user_input, Goal, Mod, Pos, Bindings, Prompt, ReadComments) :-
|
||||||
'$swi_current_prolog_flag'(readline, true),
|
'$swi_current_prolog_flag'(readline, true),
|
||||||
read_history(h, '!h',
|
read_history(h, '!h',
|
||||||
[trace, end_of_file],
|
[trace, end_of_file],
|
||||||
@ -154,8 +154,8 @@ true :- true.
|
|||||||
;
|
;
|
||||||
true
|
true
|
||||||
).
|
).
|
||||||
'$read_vars'(Stream, T, Mod, Pos, V, _Prompt) :-
|
'$read_vars'(Stream, T, Mod, Pos, V, _Prompt, ReadComments) :-
|
||||||
'$read'(true, T, Mod, V, Pos, Err, Stream),
|
'$read'(true, T, Mod, V, Pos, Err, ReadComments, Stream),
|
||||||
(nonvar(Err) ->
|
(nonvar(Err) ->
|
||||||
print_message(error,Err), fail
|
print_message(error,Err), fail
|
||||||
;
|
;
|
||||||
@ -195,7 +195,7 @@ true :- true.
|
|||||||
prompt(_,'| '),
|
prompt(_,'| '),
|
||||||
'$run_toplevel_hooks',
|
'$run_toplevel_hooks',
|
||||||
prompt1('|: '),
|
prompt1('|: '),
|
||||||
'$read_vars'(user_input,Command,_,Pos,Varnames, ' ?- '),
|
'$read_vars'(user_input,Command,_,Pos,Varnames, ' ?- ', no),
|
||||||
nb_setval('$spy_gn',1),
|
nb_setval('$spy_gn',1),
|
||||||
% stop at spy-points if debugging is on.
|
% stop at spy-points if debugging is on.
|
||||||
nb_setval('$debug_run',off),
|
nb_setval('$debug_run',off),
|
||||||
@ -1127,18 +1127,36 @@ bootstrap(F) :-
|
|||||||
'$init_path_extensions'.
|
'$init_path_extensions'.
|
||||||
|
|
||||||
'$loop'(Stream,Status) :-
|
'$loop'(Stream,Status) :-
|
||||||
|
(
|
||||||
|
Status = top
|
||||||
|
;
|
||||||
|
'$undefined'(comment_hook(_,_,_),prolog)
|
||||||
|
;
|
||||||
|
'$number_of_clauses'(comment_hook(_,_,_),prolog,0)
|
||||||
|
), !,
|
||||||
repeat,
|
repeat,
|
||||||
%VSC ( '$current_stream'(_,_,Stream) -> true
|
|
||||||
%VSC ; '$abort_loop'(Stream)
|
|
||||||
%VSC ),
|
|
||||||
prompt1('| '), prompt(_,'| '),
|
prompt1('| '), prompt(_,'| '),
|
||||||
'$current_module'(OldModule),
|
'$current_module'(OldModule),
|
||||||
'$system_catch'('$enter_command'(Stream,Status), OldModule, Error,
|
'$system_catch'('$enter_command'(Stream,Status), OldModule, Error,
|
||||||
user:'$LoopError'(Error, Status)),
|
user:'$LoopError'(Error, Status)),
|
||||||
!.
|
!.
|
||||||
|
% support comment hook
|
||||||
|
'$loop'(Stream,Status) :-
|
||||||
|
repeat,
|
||||||
|
prompt1('| '), prompt(_,'| '),
|
||||||
|
'$current_module'(OldModule),
|
||||||
|
'$system_catch'('$enter_command_with_hook'(Stream,Status), OldModule, Error,
|
||||||
|
user:'$LoopError'(Error, Status)),
|
||||||
|
!.
|
||||||
|
|
||||||
'$enter_command'(Stream,Status) :-
|
'$enter_command'(Stream,Status) :-
|
||||||
'$read_vars'(Stream,Command,_,Pos,Vars, '|: '),
|
'$read_vars'(Stream,Command,_,Pos,Vars, '|: ', no),
|
||||||
|
'$command'(Command,Vars,Pos,Status).
|
||||||
|
|
||||||
|
% support SWI hook in a separate predicate, to avoid slow down standard consult.
|
||||||
|
'$enter_command_with_hook'(Stream,Status) :-
|
||||||
|
'$read_vars'(Stream,Command,_,Pos,Vars, '|: ', Comments),
|
||||||
|
('$notrace'(prolog:comment_hook(Comments,Pos,Command)) -> true ; true ),
|
||||||
'$command'(Command,Vars,Pos,Status).
|
'$command'(Command,Vars,Pos,Status).
|
||||||
|
|
||||||
'$abort_loop'(Stream) :-
|
'$abort_loop'(Stream) :-
|
||||||
|
@ -256,6 +256,10 @@ no_style_check([H|T]) :- no_style_check(H), no_style_check(T).
|
|||||||
'$multiple_has_been_defined'(Fil,P,M) :-
|
'$multiple_has_been_defined'(Fil,P,M) :-
|
||||||
print_message(warning,defined_elsewhere(M:P,Fil)).
|
print_message(warning,defined_elsewhere(M:P,Fil)).
|
||||||
|
|
||||||
|
multifile(P) :-
|
||||||
|
'$current_module'(OM),
|
||||||
|
'$multifile'(P, M).
|
||||||
|
|
||||||
'$multifile'(V, _) :- var(V), !,
|
'$multifile'(V, _) :- var(V), !,
|
||||||
'$do_error'(instantiation_error,multifile(V)).
|
'$do_error'(instantiation_error,multifile(V)).
|
||||||
'$multifile'((X,Y), M) :- !, '$multifile'(X, M), '$multifile'(Y, M).
|
'$multifile'((X,Y), M) :- !, '$multifile'(X, M), '$multifile'(Y, M).
|
||||||
|
@ -834,8 +834,8 @@ absolute_file_name(File,Opts,TrueFileName) :-
|
|||||||
'$to_list_of_atoms'(As, L1, [A|L2]),
|
'$to_list_of_atoms'(As, L1, [A|L2]),
|
||||||
'$to_list_of_atoms'(Bs, L2, LF).
|
'$to_list_of_atoms'(Bs, L2, LF).
|
||||||
|
|
||||||
'$get_abs_file'(File,opts(_,D0,_,_,_,_,_),AbsFile) :-
|
'$get_abs_file'(File,opts(_,_D0,_,_,_,_,_),AbsFile) :-
|
||||||
operating_system_support:true_file_name(File,D0,AbsFile).
|
'$absolute_file_name'(File,AbsFile).
|
||||||
|
|
||||||
'$search_in_path'(File,opts(Extensions,_,Type,Access,_,_,_),F) :-
|
'$search_in_path'(File,opts(Extensions,_,Type,Access,_,_,_),F) :-
|
||||||
'$add_extensions'(Extensions, File, F0),
|
'$add_extensions'(Extensions, File, F0),
|
||||||
@ -870,6 +870,9 @@ absolute_file_name(File,Opts,TrueFileName) :-
|
|||||||
'$add_type_extensions'(Type,File,F) :-
|
'$add_type_extensions'(Type,File,F) :-
|
||||||
'$type_extension'(Type,Ext),
|
'$type_extension'(Type,Ext),
|
||||||
atom_concat([File,Ext],F).
|
atom_concat([File,Ext],F).
|
||||||
|
'$add_type_extensions'(Type,File,F) :-
|
||||||
|
user:prolog_file_type(Ext, Type),
|
||||||
|
atom_concat([File,'.',Ext],F).
|
||||||
|
|
||||||
'$type_extension'(txt,'').
|
'$type_extension'(txt,'').
|
||||||
'$type_extension'(prolog,'.yap').
|
'$type_extension'(prolog,'.yap').
|
||||||
@ -1048,3 +1051,8 @@ make.
|
|||||||
stream_property(OldStream, alias(Alias)), !.
|
stream_property(OldStream, alias(Alias)), !.
|
||||||
|
|
||||||
'$require'(_Ps, _M).
|
'$require'(_Ps, _M).
|
||||||
|
|
||||||
|
'$store_clause'('$source_location'(File, Line):Clause, File) :-
|
||||||
|
assert_static(Clause).
|
||||||
|
|
||||||
|
|
||||||
|
18
pl/init.yap
18
pl/init.yap
@ -115,12 +115,14 @@ system_mode(verbose,off) :- set_value('$verbose',off).
|
|||||||
:- use_module('dialect.yap').
|
:- use_module('dialect.yap').
|
||||||
:- use_module('history.pl').
|
:- use_module('history.pl').
|
||||||
:- use_module('dbload.yap').
|
:- use_module('dbload.yap').
|
||||||
|
:- use_module('swi.yap').
|
||||||
|
|
||||||
'$system_module'('$messages').
|
'$system_module'('$messages').
|
||||||
'$system_module'('$hacks').
|
'$system_module'('$hacks').
|
||||||
'$system_module'('$attributes').
|
'$system_module'('$attributes').
|
||||||
'$system_module'('$coroutining').
|
'$system_module'('$coroutining').
|
||||||
'$system_module'('$history').
|
'$system_module'('$history').
|
||||||
|
'$system_module'('$swi').
|
||||||
|
|
||||||
yap_hacks:cut_by(CP) :- '$$cut_by'(CP).
|
yap_hacks:cut_by(CP) :- '$$cut_by'(CP).
|
||||||
|
|
||||||
@ -162,12 +164,24 @@ yap_hacks:cut_by(CP) :- '$$cut_by'(CP).
|
|||||||
|
|
||||||
:- dynamic prolog:message/3.
|
:- dynamic prolog:message/3.
|
||||||
|
|
||||||
|
:- multifile
|
||||||
|
prolog:comment_hook/3.
|
||||||
|
|
||||||
:- module(user).
|
:- module(user).
|
||||||
|
|
||||||
:- multifile goal_expansion/3.
|
:- multifile goal_expansion/3.
|
||||||
|
|
||||||
:- dynamic goal_expansion/3.
|
:- dynamic goal_expansion/3.
|
||||||
|
|
||||||
|
:- multifile prolog_file_type/2.
|
||||||
|
|
||||||
|
:- dynamic prolog_file_type/2.
|
||||||
|
|
||||||
|
user:prolog_file_type(pl, prolog).
|
||||||
|
% user:prolog_file_type(Ext, prolog) :-
|
||||||
|
% current_prolog_flag(associate, Ext),
|
||||||
|
% Ext \== pl.
|
||||||
|
|
||||||
:- multifile goal_expansion/2.
|
:- multifile goal_expansion/2.
|
||||||
|
|
||||||
:- dynamic goal_expansion/2.
|
:- dynamic goal_expansion/2.
|
||||||
@ -176,6 +190,10 @@ yap_hacks:cut_by(CP) :- '$$cut_by'(CP).
|
|||||||
|
|
||||||
:- dynamic term_expansion/2.
|
:- dynamic term_expansion/2.
|
||||||
|
|
||||||
|
:- multifile system:term_expansion/2.
|
||||||
|
|
||||||
|
:- dynamic system:term_expansion/2.
|
||||||
|
|
||||||
:- multifile file_search_path/2.
|
:- multifile file_search_path/2.
|
||||||
|
|
||||||
:- dynamic file_search_path/2.
|
:- dynamic file_search_path/2.
|
||||||
|
@ -141,6 +141,12 @@ module(N) :-
|
|||||||
print_message(warning,import(N/K,Mod,M,private))
|
print_message(warning,import(N/K,Mod,M,private))
|
||||||
),
|
),
|
||||||
'$do_import'(N, K, M, Mod).
|
'$do_import'(N, K, M, Mod).
|
||||||
|
'$use_preds'(N//K0,Publics,M,Mod) :-
|
||||||
|
K is K0+2,
|
||||||
|
( lists:memberchk(N/K,Publics) -> true ;
|
||||||
|
print_message(warning,import(N/K,Mod,M,private))
|
||||||
|
),
|
||||||
|
'$do_import'(N, K, M, Mod).
|
||||||
|
|
||||||
|
|
||||||
'$do_import'(N, K, M, T) :-
|
'$do_import'(N, K, M, T) :-
|
||||||
@ -795,3 +801,28 @@ delete_import_module(Mod, ImportModule) :-
|
|||||||
'$do_error'(type_error(atom,Mod),delete_import_module(Mod, ImportModule)).
|
'$do_error'(type_error(atom,Mod),delete_import_module(Mod, ImportModule)).
|
||||||
delete_import_module(Mod, ImportModule) :-
|
delete_import_module(Mod, ImportModule) :-
|
||||||
'$do_error'(type_error(atom,ImportModule),delete_import_module(Mod, ImportModule)).
|
'$do_error'(type_error(atom,ImportModule),delete_import_module(Mod, ImportModule)).
|
||||||
|
|
||||||
|
'$set_source_module'(Source0, SourceF) :-
|
||||||
|
prolog_load_context(module, Source0), !,
|
||||||
|
module(SourceF).
|
||||||
|
'$set_source_module'(Source0, SourceF) :-
|
||||||
|
current_module(Source0, SourceF).
|
||||||
|
|
||||||
|
/** '$declare_module'(+Module, +Super, +File, +Line, +Redefine) is det.
|
||||||
|
|
||||||
|
Start a new (source-)module
|
||||||
|
|
||||||
|
@param Module is the name of the module to declare
|
||||||
|
@param File is the canonical name of the file from which the module
|
||||||
|
is loaded
|
||||||
|
@param Line is the line-number of the :- module/2 directive.
|
||||||
|
@param Redefine If =true=, allow associating the module to a new file
|
||||||
|
*/
|
||||||
|
'$declare_module'(Name, Context, _, _, _) :-
|
||||||
|
add_import_module(Name, Context, start).
|
||||||
|
|
||||||
|
module_property(Mod, file(F)) :-
|
||||||
|
recorded('$module','$module'(F,Mod,_),_).
|
||||||
|
module_property(Mod, exports(Es)) :-
|
||||||
|
recorded('$module','$module'(_,Mod,Es),_).
|
||||||
|
|
||||||
|
@ -757,7 +757,7 @@ dynamic_predicate(P,Sem) :-
|
|||||||
'$public'([H|L], M) :- !, '$public'(H, M), '$public'(L, M).
|
'$public'([H|L], M) :- !, '$public'(H, M), '$public'(L, M).
|
||||||
'$public'(A//N1, Mod) :- integer(N1), !,
|
'$public'(A//N1, Mod) :- integer(N1), !,
|
||||||
N is N1+2,
|
N is N1+2,
|
||||||
'$public'(A//N, Mod).
|
'$public'(A/N, Mod).
|
||||||
'$public'(A/N, Mod) :- integer(N), atom(A), !,
|
'$public'(A/N, Mod) :- integer(N), atom(A), !,
|
||||||
functor(T,A,N),
|
functor(T,A,N),
|
||||||
'$do_make_public'(T, Mod).
|
'$do_make_public'(T, Mod).
|
||||||
|
@ -41,5 +41,10 @@
|
|||||||
'$hide'('$hacks') :- !, fail.
|
'$hide'('$hacks') :- !, fail.
|
||||||
'$hide'('$source_location') :- !, fail.
|
'$hide'('$source_location') :- !, fail.
|
||||||
'$hide'('$messages') :- !, fail.
|
'$hide'('$messages') :- !, fail.
|
||||||
|
'$hide'('$push_input_context') :- !, fail.
|
||||||
|
'$hide'('$pop_input_context') :- !, fail.
|
||||||
|
'$hide'('$set_source_module') :- !, fail.
|
||||||
|
'$hide'('$declare_module') :- !, fail.
|
||||||
|
'$hide'('$store_clause') :- !, fail.
|
||||||
'$hide'(Name) :- hide(Name), fail.
|
'$hide'(Name) :- hide(Name), fail.
|
||||||
|
|
||||||
|
55
pl/swi.yap
Normal file
55
pl/swi.yap
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
:- module('$swi',
|
||||||
|
[]).
|
||||||
|
|
||||||
|
%% file_alias_path(-Alias, ?Dir) is nondet.
|
||||||
|
%
|
||||||
|
% True if file Alias points to Dir. Multiple solutions are
|
||||||
|
% generated with the longest directory first.
|
||||||
|
|
||||||
|
:- dynamic
|
||||||
|
alias_cache/2.
|
||||||
|
|
||||||
|
prolog:file_alias_path(Alias, Dir) :-
|
||||||
|
( alias_cache(_, _)
|
||||||
|
-> true
|
||||||
|
; build_alias_cache
|
||||||
|
),
|
||||||
|
( nonvar(Dir)
|
||||||
|
-> ensure_slash(Dir, DirSlash),
|
||||||
|
alias_cache(Alias, DirSlash)
|
||||||
|
; alias_cache(Alias, Dir)
|
||||||
|
).
|
||||||
|
|
||||||
|
build_alias_cache :-
|
||||||
|
findall(t(DirLen, AliasLen, Alias, Dir),
|
||||||
|
search_path(Alias, Dir, AliasLen, DirLen), Ts),
|
||||||
|
sort(Ts, List0),
|
||||||
|
reverse(List0, List),
|
||||||
|
forall(member(t(_, _, Alias, Dir), List),
|
||||||
|
assert(alias_cache(Alias, Dir))).
|
||||||
|
|
||||||
|
search_path('.', Here, 999, DirLen) :-
|
||||||
|
working_directory(Here0, Here0),
|
||||||
|
ensure_slash(Here0, Here),
|
||||||
|
atom_length(Here, DirLen).
|
||||||
|
search_path(Alias, Dir, AliasLen, DirLen) :-
|
||||||
|
user:file_search_path(Alias, _),
|
||||||
|
Alias \== autoload,
|
||||||
|
Spec =.. [Alias,'.'],
|
||||||
|
atom_length(Alias, AliasLen0),
|
||||||
|
AliasLen is 1000 - AliasLen0, % must do reverse sort
|
||||||
|
absolute_file_name(Spec, Dir0,
|
||||||
|
[ file_type(directory),
|
||||||
|
access(read),
|
||||||
|
solutions(all),
|
||||||
|
file_errors(fail)
|
||||||
|
]),
|
||||||
|
ensure_slash(Dir0, Dir),
|
||||||
|
atom_length(Dir, DirLen).
|
||||||
|
|
||||||
|
ensure_slash(Dir, Dir) :-
|
||||||
|
sub_atom(Dir, _, _, 0, /), !.
|
||||||
|
ensure_slash(Dir0, Dir) :-
|
||||||
|
atom_concat(Dir0, /, Dir).
|
||||||
|
|
||||||
|
|
18
pl/utils.yap
18
pl/utils.yap
@ -719,3 +719,21 @@ subsumes_term(A,B) :-
|
|||||||
\+ \+ terms:subsumes(A,B).
|
\+ \+ terms:subsumes(A,B).
|
||||||
|
|
||||||
|
|
||||||
|
%% file_name_on_path(+File:atom, -OnPath) is det.
|
||||||
|
%
|
||||||
|
% True if OnPath a description of File based on the file search
|
||||||
|
% path. This performs the inverse of absolute_file_name/3.
|
||||||
|
|
||||||
|
file_name_on_path(Path, ShortId) :-
|
||||||
|
( file_alias_path(Alias, Dir),
|
||||||
|
atom_concat(Dir, Local, Path)
|
||||||
|
-> ( Alias == '.'
|
||||||
|
-> ShortId = Local
|
||||||
|
; file_name_extension(Base, pl, Local)
|
||||||
|
-> ShortId =.. [Alias, Base]
|
||||||
|
; ShortId =.. [Alias, Local]
|
||||||
|
)
|
||||||
|
; ShortId = Path
|
||||||
|
).
|
||||||
|
|
||||||
|
|
||||||
|
31
pl/yio.yap
31
pl/yio.yap
@ -42,6 +42,8 @@
|
|||||||
'$check_opt_read'(syntax_errors(T), G) :- !,
|
'$check_opt_read'(syntax_errors(T), G) :- !,
|
||||||
'$check_read_syntax_errors_arg'(T, G).
|
'$check_read_syntax_errors_arg'(T, G).
|
||||||
'$check_opt_read'(term_position(_), _) :- !.
|
'$check_opt_read'(term_position(_), _) :- !.
|
||||||
|
'$check_opt_read'(term_position(_), _) :- !.
|
||||||
|
'$check_opt_read'(comments(_), _) :- !.
|
||||||
'$check_opt_read'(module(_), _) :- !.
|
'$check_opt_read'(module(_), _) :- !.
|
||||||
'$check_opt_read'(A, G) :-
|
'$check_opt_read'(A, G) :-
|
||||||
'$do_error'(domain_error(read_option,A),G).
|
'$do_error'(domain_error(read_option,A),G).
|
||||||
@ -97,7 +99,7 @@ exists(F) :- access_file(F,exist).
|
|||||||
/* Term IO */
|
/* Term IO */
|
||||||
|
|
||||||
read(T) :-
|
read(T) :-
|
||||||
'$read'(false,T,_,_,_,Err),
|
'$read'(false,T,_,_,_,Err,_),
|
||||||
(nonvar(Err) ->
|
(nonvar(Err) ->
|
||||||
print_message(error,Err), fail
|
print_message(error,Err), fail
|
||||||
;
|
;
|
||||||
@ -105,7 +107,7 @@ read(T) :-
|
|||||||
).
|
).
|
||||||
|
|
||||||
read(Stream,T) :-
|
read(Stream,T) :-
|
||||||
'$read'(false,T,_,_,_,Err,Stream),
|
'$read'(false,T,_,_,_,Err,_,Stream),
|
||||||
(nonvar(Err) ->
|
(nonvar(Err) ->
|
||||||
print_message(error,Err), fail
|
print_message(error,Err), fail
|
||||||
;
|
;
|
||||||
@ -115,29 +117,31 @@ read(Stream,T) :-
|
|||||||
read_term(T, Options) :-
|
read_term(T, Options) :-
|
||||||
'$check_io_opts'(Options,read_term(T, Options)),
|
'$check_io_opts'(Options,read_term(T, Options)),
|
||||||
current_input(S),
|
current_input(S),
|
||||||
'$preprocess_read_terms_options'(Options,Module),
|
'$preprocess_read_terms_options'(Options,Module,DoComments),
|
||||||
'$read_vars'(S,T,Module,Pos,VL,'|: '),
|
'$read_vars'(S,T,Module,Pos,VL,'|: ',DoComments),
|
||||||
'$postprocess_read_terms_options'(Options, T, VL, Pos).
|
'$postprocess_read_terms_options'(Options, T, VL, Pos).
|
||||||
|
|
||||||
read_term(Stream, T, Options) :-
|
read_term(Stream, T, Options) :-
|
||||||
'$check_io_opts'(Options,read_term(T, Options)),
|
'$check_io_opts'(Options,read_term(T, Options)),
|
||||||
'$preprocess_read_terms_options'(Options,Module),
|
'$preprocess_read_terms_options'(Options,Module,DoComments),
|
||||||
'$read_vars'(Stream,T,Module,Pos,VL,'|: '),
|
'$read_vars'(Stream,T,Module,Pos,VL,'|: ',DoComments),
|
||||||
'$postprocess_read_terms_options'(Options, T, VL, Pos).
|
'$postprocess_read_terms_options'(Options, T, VL, Pos).
|
||||||
|
|
||||||
%
|
%
|
||||||
% support flags to read
|
% support flags to read
|
||||||
%
|
%
|
||||||
'$preprocess_read_terms_options'([],_).
|
'$preprocess_read_terms_options'([], _, no).
|
||||||
'$preprocess_read_terms_options'([syntax_errors(NewVal)|L],Mod) :- !,
|
'$preprocess_read_terms_options'([syntax_errors(NewVal)|L], Mod, DoComments) :- !,
|
||||||
'$get_read_error_handler'(OldVal),
|
'$get_read_error_handler'(OldVal),
|
||||||
set_value('$read_term_error_handler', OldVal),
|
set_value('$read_term_error_handler', OldVal),
|
||||||
'$set_read_error_handler'(NewVal),
|
'$set_read_error_handler'(NewVal),
|
||||||
'$preprocess_read_terms_options'(L,Mod).
|
'$preprocess_read_terms_options'(L,Mod, DoComments).
|
||||||
'$preprocess_read_terms_options'([module(Mod)|L],Mod) :- !,
|
'$preprocess_read_terms_options'([module(Mod)|L], Mod, DoComments) :- !,
|
||||||
'$preprocess_read_terms_options'(L,Mod).
|
'$preprocess_read_terms_options'(L, Mod, DoComments).
|
||||||
'$preprocess_read_terms_options'([_|L],Mod) :-
|
'$preprocess_read_terms_options'([comments(Val)|L], Mod, Val) :- !,
|
||||||
'$preprocess_read_terms_options'(L,Mod).
|
'$preprocess_read_terms_options'(L, Mod, _).
|
||||||
|
'$preprocess_read_terms_options'([_|L],Mod, DoComments) :-
|
||||||
|
'$preprocess_read_terms_options'(L,Mod, DoComments).
|
||||||
|
|
||||||
'$postprocess_read_terms_options'([], _, _, _).
|
'$postprocess_read_terms_options'([], _, _, _).
|
||||||
'$postprocess_read_terms_options'([H|Tail], T, VL, Pos) :- !,
|
'$postprocess_read_terms_options'([H|Tail], T, VL, Pos) :- !,
|
||||||
@ -159,6 +163,7 @@ read_term(Stream, T, Options) :-
|
|||||||
'$fetch_singleton_names'(Val1,VL,Val).
|
'$fetch_singleton_names'(Val1,VL,Val).
|
||||||
'$postprocess_read_terms_option'(variables(Val), T, _, _) :-
|
'$postprocess_read_terms_option'(variables(Val), T, _, _) :-
|
||||||
'$variables_in_term'(T, [], Val).
|
'$variables_in_term'(T, [], Val).
|
||||||
|
'$postprocess_read_terms_option'(comments(_), _, _, _).
|
||||||
'$postprocess_read_terms_option'(term_position(Pos), _, _, Pos).
|
'$postprocess_read_terms_option'(term_position(Pos), _, _, Pos).
|
||||||
'$postprocess_read_terms_option'(module(_), _, _, _).
|
'$postprocess_read_terms_option'(module(_), _, _, _).
|
||||||
%'$postprocess_read_terms_option'(cycles(Val), _, _).
|
%'$postprocess_read_terms_option'(cycles(Val), _, _).
|
||||||
|
Reference in New Issue
Block a user