diff --git a/C/amasm.c b/C/amasm.c index 308bbcb4e..1e5126d82 100755 --- a/C/amasm.c +++ b/C/amasm.c @@ -327,16 +327,6 @@ Var_Ref(Ventry *ve, int is_y_var) #define no_ref_var() (((Ventry *) (cip->cpc->rnd1))->NoOfVE == 1) #define no_ref(X) (((Ventry *) (X))->NoOfVE == 1) -inline static yamop * -fill_small(CELL w, yamop *code_p, int pass_no) -{ - SMALLUNSGN *ptr = ((SMALLUNSGN *) (code_p)); - - if (pass_no) - *ptr = (SMALLUNSGN) w; - return (yamop *) (++ptr); -} - inline static yamop * fill_a(CELL a, yamop *code_p, int pass_no) { @@ -589,78 +579,6 @@ a_v(op_numbers opcodex, op_numbers opcodey, yamop *code_p, int pass_no, struct P return code_p; } -inline static yamop * -a_fi(op_numbers opcodex, op_numbers opcodey, yamop *code_p, int pass_no, struct PSEUDO *cpc, UInt lab, struct intermediates *cip) -{ - Ventry *ve = (Ventry *) cpc->rnd1; - OPREG var_offset; - int is_y_var = (ve->KindOfVE == PermVar); - - var_offset = Var_Ref(ve, is_y_var); - if (is_y_var) { - if (pass_no) { - code_p->opc = emit_op(opcodey); - code_p->u.syl.y = emit_yreg(var_offset); - code_p->u.syl.l = emit_a(Unsigned(cip->code_addr) + cip->label_offset[lab]); - code_p->u.syl.s = cpc->rnd2; - } - GONEXT(syl); - } - else { - if (pass_no) { - code_p->opc = emit_op(opcodex); - code_p->u.sxl.x = emit_xreg(var_offset); - code_p->u.sxl.l = emit_a(Unsigned(cip->code_addr) + cip->label_offset[lab]); - code_p->u.sxl.s = cpc->rnd2; - } - GONEXT(sxl); - } - return code_p; -} - -inline static yamop * -a_fil(op_numbers opcodex, op_numbers opcodey, yamop *code_p, int pass_no, struct PSEUDO *cpc, UInt lab1, UInt lab2, struct intermediates *cip) -{ - Ventry *ve = (Ventry *) cpc->rnd1; - OPREG var_offset; - int is_y_var = (ve->KindOfVE == PermVar); - - var_offset = Var_Ref(ve, is_y_var); - if (is_y_var) { - if (pass_no) { - code_p->opc = emit_op(opcodey); - code_p->u.syll.s = cpc->rnd2; - code_p->u.syll.y = emit_yreg(var_offset); - if (lab1) - code_p->u.syll.T = emit_a(Unsigned(cip->code_addr) + cip->label_offset[lab1]); - else - code_p->u.syll.T = emit_a(Unsigned(NEXTOP(code_p,syll))); - if (lab2) - code_p->u.syll.F = emit_a(Unsigned(cip->code_addr) + cip->label_offset[lab2]); - else - code_p->u.syll.F = FAILCODE; - } - GONEXT(syll); - } - else { - if (pass_no) { - code_p->opc = emit_op(opcodex); - code_p->u.sxll.s = cpc->rnd2; - code_p->u.sxll.x = emit_xreg(var_offset); - if (lab1) - code_p->u.sxll.T = emit_a(Unsigned(cip->code_addr) + cip->label_offset[lab1]); - else - code_p->u.sxll.T = emit_a(Unsigned(NEXTOP(code_p,sxll))); - if (lab2) - code_p->u.sxll.F = emit_a(Unsigned(cip->code_addr) + cip->label_offset[lab2]); - else - code_p->u.sxll.F = FAILCODE; - } - GONEXT(sxll); - } - return code_p; -} - inline static yamop * a_vp(op_numbers opcodex, op_numbers opcodey, yamop *code_p, int pass_no, struct PSEUDO *cpc, clause_info *clinfo) { @@ -1424,18 +1342,6 @@ a_dbt(op_numbers opcode, int *clause_has_dbtermp, yamop *code_p, int pass_no, st return code_p; } -inline static yamop * -a_rli(op_numbers opcode, int *clause_has_blobsp, yamop *code_p, int pass_no, struct intermediates *cip) -{ - if (pass_no) { - code_p->opc = emit_op(opcode); - code_p->u.xc.x = emit_x(cip->cpc->rnd2); - code_p->u.xc.c = AbsAppl((CELL *)(Unsigned(cip->code_addr) + cip->label_offset[cip->cpc->rnd1])); - } - GONEXT(xc); - return code_p; -} - inline static yamop * a_r(CELL arnd2, op_numbers opcode, yamop *code_p, int pass_no) { diff --git a/C/cmppreds.c b/C/cmppreds.c index 0ead85144..a2265c2f0 100644 --- a/C/cmppreds.c +++ b/C/cmppreds.c @@ -683,6 +683,7 @@ p_acomp( USES_REGS1 ) } /** + @[ @class arith_eq_2 @brief =:=/2: Equality of arithmetic expressions @@ -726,6 +727,8 @@ a_eq(Term t1, Term t2) } /** + @} + @class arith_dif_2 @brief =\\=/2: Difference of arithmetic expressions diff --git a/C/eval.c b/C/eval.c index 25b5b24a1..a36cf0082 100644 --- a/C/eval.c +++ b/C/eval.c @@ -191,11 +191,7 @@ BEAM_is(void) #endif /** - @class is_2 - @anchor is_2 - @brief evaluation of arithmetic expressions - - ? _X_:number is + _Y_:ground is det + @pred is( X:number, + Y:ground) is det This predicate succeeds iff the result of evaluating the expression _Y_ unifies with _X_. This is the predicate normally used to @@ -228,11 +224,7 @@ p_is( USES_REGS1 ) } /** - @class isnan_1 - @anchor isnan_1 - @brief True if _X_ is not a number - - isnan(? _X_:float) is det + @pred isnan(? X:float) is det Interface to the IEE754 `isnan` test. */ @@ -266,11 +258,7 @@ p_isnan( USES_REGS1 ) } /** - @class isinf_1 - @anchor isinf_1 - @brief True if _X_ is infinity - - isnan(? _X_:float) is det + @pred isinf(? X:float) is det Interface to the IEE754 `isinf` test. */ @@ -305,11 +293,7 @@ p_isinf( USES_REGS1 ) } /** - @class logsum_3 - @anchor logsum_3 - @brief sum of two logarithms - - logsum(+ _Log1_, + _Log2_, - _Out_ ) is det + @pred logsum(+ Log1:float, + Log2:float, - Out:float ) is det True if _Log1_ is the logarithm of the positive number _A1_, _Log2_ is the logarithm of the positive number _A2_, and @@ -413,6 +397,22 @@ Yap_ArithError(yap_error_number type, Term where, char *format,...) return 0L; } +/** + + @{ + + @pred between(+ Low:int, + High:int, ? Value:int) is nondet + + _Low_ and _High_ are integers, _High_ \>= _Low_. If + _Value_ is an integer, _Low_ =\< _Value_ + =\< _High_. When _Value_ is a variable it is successively + bound to all integers between _Low_ and _High_. If + _High_ is inf or infinite between/3 is true iff + _Value_ \>= _Low_, a feature that is particularly interesting + for generating integers from a certain value. + +*/ + static Int cont_between( USES_REGS1 ) { Term t1 = EXTRA_CBACK_ARG(3,1); @@ -447,25 +447,6 @@ static Int cont_between( USES_REGS1 ) } } -/** - @class between_3 - @anchor between_3 - @brief sequence of numbers - - between(+ _Low_:int, + _High_:int, ? _Value_:int) is nondet - - _Low_ and _High_ are integers, _High_ \>= _Low_. If - _Value_ is an integer, _Low_ =\< _Value_ - =\< _High_. When _Value_ is a variable it is successively - bound to all integers between _Low_ and _High_. If - _High_ is inf or infinite [between/3](@ref between_3) is true iff - _Value_ \>= _Low_, a feature that is particularly interesting - for generating integers from a certain value. - - @} - -*/ - static Int init_between( USES_REGS1 ) { @@ -561,6 +542,12 @@ init_between( USES_REGS1 ) return cont_between( PASS_REGS1 ); } +/** + * + * @} + * + * @} +*/ void Yap_InitEval(void) { diff --git a/C/iopreds.c b/C/iopreds.c index fdd148fe7..c03156e5a 100755 --- a/C/iopreds.c +++ b/C/iopreds.c @@ -913,7 +913,10 @@ p_style_checker( USES_REGS1 ) Term h = HeadOfTerm( t ); t = TailOfTerm( t ); - if (IsAtomTerm(h)) { + if (IsVarTerm(h)) { + Yap_Error(INSTANTIATION_ERROR, t, "style_check/1"); + return (FALSE); + } if (IsAtomTerm(h)) { Atom at = AtomOfTerm( h ); if (at == AtomAtom) debugstatus.styleCheck |= LONGATOM_CHECK; else if (at == AtomSingleton) debugstatus.styleCheck |= SINGLETON_CHECK; diff --git a/C/write.c b/C/write.c index 6f9832351..96a5c5b5f 100644 --- a/C/write.c +++ b/C/write.c @@ -1,19 +1,19 @@ /************************************************************************* -* * -* YAP Prolog * -* * -* Yap Prolog was developed at NCCUP - Universidade do Porto * -* * -* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * -* * -************************************************************************** -* * -* File: write.c * -* Last rev: * -* mods: * -* comments: Writing a Prolog Term * -* * -*************************************************************************/ + * * + * YAP Prolog * + * * + * Yap Prolog was developed at NCCUP - Universidade do Porto * + * * + * Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 * + * * + ************************************************************************** + * * + * File: write.c * + * Last rev: * + * mods: * + * comments: Writing a Prolog Term * + * * + *************************************************************************/ #ifdef SCCS static char SccsId[] = "%W% %G%"; #endif @@ -43,41 +43,41 @@ static char SccsId[] = "%W% %G%"; /* describe the type of the previous term to have been written */ typedef enum { - separator, /* the previous term was a separator like ',', ')', ... */ - alphanum, /* the previous term was an atom or number */ - symbol /* the previous term was a symbol like +, -, *, .... */ + separator, /* the previous term was a separator like ',', ')', ... */ + alphanum, /* the previous term was an atom or number */ + symbol /* the previous term was a symbol like +, -, *, .... */ } wtype; typedef void *wrf; typedef struct union_slots { - Int old; - Int ptr; + Int old; + Int ptr; } uslots; typedef struct union_direct { - Term old; - CELL *ptr; + Term old; + CELL *ptr; } udirect; typedef struct rewind_term { - struct rewind_term *parent; - union { - struct union_slots s; - struct union_direct d; - } u_sd; + struct rewind_term *parent; + union { + struct union_slots s; + struct union_direct d; + } u_sd; } rwts; typedef struct write_globs { - IOSTREAM*stream; - int Quote_illegal, Ignore_ops, Handle_vars, Use_portray, Portray_delays; - int Keep_terms; - int Write_Loops; - int Write_strings; - int last_atom_minus; - UInt MaxDepth, MaxArgs; - wtype lw; + IOSTREAM*stream; + int Quote_illegal, Ignore_ops, Handle_vars, Use_portray, Portray_delays; + int Keep_terms; + int Write_Loops; + int Write_strings; + int last_atom_minus; + UInt MaxDepth, MaxArgs; + wtype lw; } wglbs; #define lastw wglb->lw @@ -98,71 +98,71 @@ static void writeTerm(Term, int, int, int, struct write_globs *, struct rewind_t /* protect bracket from merging with previoous character. avoid stuff like not (2,3) -> not(2,3) or -*/ + */ static void wropen_bracket(struct write_globs *wglb, int protect) { - wrf stream = wglb->stream; + wrf stream = wglb->stream; - if (lastw != separator && protect) - wrputc(' ', stream); - wrputc('(', stream); - lastw = separator; + if (lastw != separator && protect) + wrputc(' ', stream); + wrputc('(', stream); + lastw = separator; } static void wrclose_bracket(struct write_globs *wglb, int protect) { - wrf stream = wglb->stream; + wrf stream = wglb->stream; - wrputc(')', stream); - lastw = separator; + wrputc(')', stream); + lastw = separator; } static int protect_open_number(struct write_globs *wglb, int lm, int minus_required) { - wrf stream = wglb->stream; + wrf stream = wglb->stream; - if (lastw == symbol && lm && !minus_required) { - wropen_bracket(wglb, TRUE); - return TRUE; - } else if (lastw == alphanum || - (lastw == symbol && minus_required)) { - wrputc(' ', stream); - } - return FALSE; + if (lastw == symbol && lm && !minus_required) { + wropen_bracket(wglb, TRUE); + return TRUE; + } else if (lastw == alphanum || + (lastw == symbol && minus_required)) { + wrputc(' ', stream); + } + return FALSE; } static void protect_close_number(struct write_globs *wglb, int used_bracket) { - if (used_bracket) { - wrclose_bracket(wglb, TRUE); - } else { - lastw = alphanum; - } - last_minus = FALSE; + if (used_bracket) { + wrclose_bracket(wglb, TRUE); + } else { + lastw = alphanum; + } + last_minus = FALSE; } static void wrputn(Int n, struct write_globs *wglb) /* writes an integer */ - -{ - wrf stream = wglb->stream; - char s[256], *s1=s; /* that should be enough for most integers */ - int has_minus = (n < 0); - int ob; - ob = protect_open_number(wglb, last_minus, has_minus); +{ + wrf stream = wglb->stream; + char s[256], *s1=s; /* that should be enough for most integers */ + int has_minus = (n < 0); + int ob; + + ob = protect_open_number(wglb, last_minus, has_minus); #if HAVE_SNPRINTF - snprintf(s, 256, Int_FORMAT, n); + snprintf(s, 256, Int_FORMAT, n); #else - sprintf(s, Int_FORMAT, n); + sprintf(s, Int_FORMAT, n); #endif - while (*s1) - wrputc(*s1++, stream); - protect_close_number(wglb, ob); + while (*s1) + wrputc(*s1++, stream); + protect_close_number(wglb, ob); } #define wrputs(s, stream) Sfputs(s, stream) @@ -171,214 +171,214 @@ wrputn(Int n, struct write_globs *wglb) /* writes an integer */ static void wrputws(wchar_t *s, wrf stream) /* writes a string */ { - while (*s) - wrputc(*s++, stream); + while (*s) + wrputc(*s++, stream); } #ifdef USE_GMP static char * ensure_space(size_t sz) { - CACHE_REGS - char *s; + CACHE_REGS + char *s; - s = (char *) Yap_PreAllocCodeSpace(); - while (s+sz >= (char *)AuxSp) { + s = (char *) Yap_PreAllocCodeSpace(); + while (s+sz >= (char *)AuxSp) { #if USE_SYSTEM_MALLOC - /* may require stack expansion */ - if (!Yap_ExpandPreAllocCodeSpace(sz, NULL, TRUE)) { - s = NULL; - break; - } - s = (char *) Yap_PreAllocCodeSpace(); + /* may require stack expansion */ + if (!Yap_ExpandPreAllocCodeSpace(sz, NULL, TRUE)) { + s = NULL; + break; + } + s = (char *) Yap_PreAllocCodeSpace(); #else - s = NULL; + s = NULL; #endif - } - if (!s) { - s = (char *)TR; - while (s+sz >= LOCAL_TrailTop) { - if (!Yap_growtrail(sz/sizeof(CELL), FALSE)) { - s = NULL; - break; - } - s = (char *)TR; - } - } - if (!s) { - s = (char *)HR; - if (s+sz >= (char *)ASP) { - Yap_Error(OUT_OF_STACK_ERROR,TermNil,"not enough space to write bignum: it requires %d bytes", sz); - s = NULL; - } - } - return s; + } + if (!s) { + s = (char *)TR; + while (s+sz >= LOCAL_TrailTop) { + if (!Yap_growtrail(sz/sizeof(CELL), FALSE)) { + s = NULL; + break; + } + s = (char *)TR; + } + } + if (!s) { + s = (char *)HR; + if (s+sz >= (char *)ASP) { + Yap_Error(OUT_OF_STACK_ERROR,TermNil,"not enough space to write bignum: it requires %d bytes", sz); + s = NULL; + } + } + return s; } static void write_mpint(MP_INT *big, struct write_globs *wglb) { - char *s; - int has_minus = mpz_sgn(big); - int ob; + char *s; + int has_minus = mpz_sgn(big); + int ob; - s = ensure_space(3+mpz_sizeinbase(big, 10)); - ob = protect_open_number(wglb, last_minus, has_minus); - if (!s) { - s = mpz_get_str(NULL, 10, big); - if (!s) - return; - wrputs(s,wglb->stream); - free(s); - } else { - mpz_get_str(s, 10, big); - wrputs(s,wglb->stream); - } - protect_close_number(wglb, ob); + s = ensure_space(3+mpz_sizeinbase(big, 10)); + ob = protect_open_number(wglb, last_minus, has_minus); + if (!s) { + s = mpz_get_str(NULL, 10, big); + if (!s) + return; + wrputs(s,wglb->stream); + free(s); + } else { + mpz_get_str(s, 10, big); + wrputs(s,wglb->stream); + } + protect_close_number(wglb, ob); } #endif - /* writes a bignum */ +/* writes a bignum */ static void writebig(Term t, int p, int depth, int rinfixarg, struct write_globs *wglb, struct rewind_term *rwt) { - CELL *pt = RepAppl(t)+1; - CELL big_tag = pt[0]; + CELL *pt = RepAppl(t)+1; + CELL big_tag = pt[0]; - if (big_tag == ARRAY_INT || big_tag == ARRAY_FLOAT) { - wrputc('{', wglb->stream); - wrputs("...", wglb->stream); - wrputc('}', wglb->stream); - lastw = separator; - return; + if (big_tag == ARRAY_INT || big_tag == ARRAY_FLOAT) { + wrputc('{', wglb->stream); + wrputs("...", wglb->stream); + wrputc('}', wglb->stream); + lastw = separator; + return; #ifdef USE_GMP - } else if (big_tag == BIG_INT) - { - MP_INT *big = Yap_BigIntOfTerm(t); - write_mpint(big, wglb); - return; - } else if (big_tag == BIG_RATIONAL) { - Term trat = Yap_RatTermToApplTerm(t); - writeTerm(trat, p, depth, rinfixarg, wglb, rwt); - return; + } else if (big_tag == BIG_INT) + { + MP_INT *big = Yap_BigIntOfTerm(t); + write_mpint(big, wglb); + return; + } else if (big_tag == BIG_RATIONAL) { + Term trat = Yap_RatTermToApplTerm(t); + writeTerm(trat, p, depth, rinfixarg, wglb, rwt); + return; #endif - } else if (big_tag >= USER_BLOB_START && big_tag < USER_BLOB_END) { - Opaque_CallOnWrite f; - CELL blob_info; + } else if (big_tag >= USER_BLOB_START && big_tag < USER_BLOB_END) { + Opaque_CallOnWrite f; + CELL blob_info; - blob_info = big_tag - USER_BLOB_START; - if (GLOBAL_OpaqueHandlers && - (f= GLOBAL_OpaqueHandlers[blob_info].write_handler)) { - (f)(wglb->stream, big_tag, ExternalBlobFromTerm(t), 0); - return; - } - } - wrputs("0",wglb->stream); + blob_info = big_tag - USER_BLOB_START; + if (GLOBAL_OpaqueHandlers && + (f= GLOBAL_OpaqueHandlers[blob_info].write_handler)) { + (f)(wglb->stream, big_tag, ExternalBlobFromTerm(t), 0); + return; + } + } + wrputs("0",wglb->stream); } static void wrputf(Float f, struct write_globs *wglb) /* writes a float */ - + { - char s[256]; - wrf stream = wglb->stream; - int sgn; - int ob; + char s[256]; + wrf stream = wglb->stream; + int sgn; + int ob; #if HAVE_ISNAN || defined(__WIN32) - if (isnan(f)) { - wrputs("(nan)", stream); - lastw = separator; - return; - } + if (isnan(f)) { + wrputs("(nan)", stream); + lastw = separator; + return; + } #endif - sgn = (f < 0.0); + sgn = (f < 0.0); #if HAVE_ISINF || defined(_WIN32) - if (isinf(f)) { - if (sgn) { - wrputs("(-inf)", stream); - } else { - wrputs("(+inf)", stream); - } - lastw = separator; - return; - } + if (isinf(f)) { + if (sgn) { + wrputs("(-inf)", stream); + } else { + wrputs("(+inf)", stream); + } + lastw = separator; + return; + } #endif - ob = protect_open_number(wglb, last_minus, sgn); + ob = protect_open_number(wglb, last_minus, sgn); #if THREADS - /* old style writing */ - int found_dot = FALSE; - char *pt = s; - int ch; - /* always use C locale for writing numbers */ + /* old style writing */ + int found_dot = FALSE; + char *pt = s; + int ch; + /* always use C locale for writing numbers */ #if O_LOCALE - const unsigned char *decimalpoint = (unsigned char*) - localeconv()->decimal_point; - size_t l1 = strlen((const char *)decimalpoint+1); + const unsigned char *decimalpoint = (unsigned char*) + localeconv()->decimal_point; + size_t l1 = strlen((const char *)decimalpoint+1); #else - const unsigned char *decimalpoint = "."; - l1 = 0; + const unsigned char *decimalpoint = "."; + l1 = 0; #endif - if (lastw == symbol || lastw == alphanum) { - wrputc(' ', stream); - } - lastw = alphanum; - // sprintf(s, "%.15g", f); - sprintf(s, RepAtom(AtomFloatFormat)->StrOfAE, f); - while (*pt == ' ') - pt++; - if (*pt == '-') { - wrputc('-', stream); - pt++; - } - while ((ch = *pt) != '\0') { - // skip locale - if (ch == decimalpoint[0] && !strncmp(pt+1, (char *)decimalpoint+1, l1)) { - found_dot = TRUE; - pt += l1; - ch = '.'; - } - if (ch == 'e' || ch == 'E') { - if (!found_dot) { - found_dot = TRUE; - wrputs(".0" , stream); - } - found_dot = TRUE; - } - wrputc(ch, stream); - pt++; - } - if (!found_dot) { - wrputs(".0", stream); - } + if (lastw == symbol || lastw == alphanum) { + wrputc(' ', stream); + } + lastw = alphanum; + // sprintf(s, "%.15g", f); + sprintf(s, RepAtom(AtomFloatFormat)->StrOfAE, f); + while (*pt == ' ') + pt++; + if (*pt == '-') { + wrputc('-', stream); + pt++; + } + while ((ch = *pt) != '\0') { + // skip locale + if (ch == decimalpoint[0] && !strncmp(pt+1, (char *)decimalpoint+1, l1)) { + found_dot = TRUE; + pt += l1; + ch = '.'; + } + if (ch == 'e' || ch == 'E') { + if (!found_dot) { + found_dot = TRUE; + wrputs(".0" , stream); + } + found_dot = TRUE; + } + wrputc(ch, stream); + pt++; + } + if (!found_dot) { + wrputs(".0", stream); + } #else - char *format_float(double f, char *buf); - char *buf; + char *format_float(double f, char *buf); + char *buf; - if (lastw == symbol || lastw == alphanum) { - wrputc(' ', stream); - } - /* use SWI's format_float */ - buf = format_float(f, s); - if (!buf) return; - wrputs(buf, stream); + if (lastw == symbol || lastw == alphanum) { + wrputc(' ', stream); + } + /* use SWI's format_float */ + buf = format_float(f, s); + if (!buf) return; + wrputs(buf, stream); #endif - protect_close_number(wglb, ob); + protect_close_number(wglb, ob); } int Yap_FormatFloat( Float f, const char *s, size_t sz ) { - struct write_globs wglb; - char *ws = (char *)s; - IOSTREAM *smem = Sopenmem(&ws, &sz, "w"); - wglb.stream = smem; - wglb.lw = separator; - wglb.last_atom_minus = FALSE; - wrputf(f, &wglb); - Sclose(smem); - return TRUE; + struct write_globs wglb; + char *ws = (char *)s; + IOSTREAM *smem = Sopenmem(&ws, &sz, "w"); + wglb.stream = smem; + wglb.lw = separator; + wglb.last_atom_minus = FALSE; + wrputf(f, &wglb); + Sclose(smem); + return TRUE; } @@ -386,183 +386,183 @@ Yap_FormatFloat( Float f, const char *s, size_t sz ) static void wrputref(CODEADDR ref, int Quote_illegal, struct write_globs *wglb) { - char s[256]; - wrf stream = wglb->stream; + char s[256]; + wrf stream = wglb->stream; - putAtom(AtomDBref, Quote_illegal, wglb); + putAtom(AtomDBref, Quote_illegal, wglb); #if defined(__linux__) || defined(__APPLE__) - sprintf(s, "(%p," UInt_FORMAT ")", ref, ((LogUpdClause*)ref)->ClRefCount); + sprintf(s, "(%p," UInt_FORMAT ")", ref, ((LogUpdClause*)ref)->ClRefCount); #else - sprintf(s, "(0x%p," UInt_FORMAT ")", ref, ((LogUpdClause*)ref)->ClRefCount); + sprintf(s, "(0x%p," UInt_FORMAT ")", ref, ((LogUpdClause*)ref)->ClRefCount); #endif - wrputs(s, stream); - lastw = alphanum; + wrputs(s, stream); + lastw = alphanum; } /* writes a blob (default) */ static int wrputblob(AtomEntry * ref, int Quote_illegal, struct write_globs *wglb) { - char s[256]; - wrf stream = wglb->stream; - PL_blob_t *type = RepBlobProp(ref->PropsOfAE)->blob_t; + char s[256]; + wrf stream = wglb->stream; + PL_blob_t *type = RepBlobProp(ref->PropsOfAE)->blob_t; - if (type->write) { - atom_t at = YAP_SWIAtomFromAtom(AbsAtom(ref)); - return type->write(stream, at, 0); - } else { - putAtom(AtomSWIStream, Quote_illegal, wglb); + if (type->write) { + atom_t at = YAP_SWIAtomFromAtom(AbsAtom(ref)); + return type->write(stream, at, 0); + } else { + putAtom(AtomSWIStream, Quote_illegal, wglb); #if defined(__linux__) || defined(__APPLE__) - sprintf(s, "(%p)", ref); + sprintf(s, "(%p)", ref); #else - sprintf(s, "(0x%p)", ref); + sprintf(s, "(0x%p)", ref); #endif - wrputs(s, stream); - } - lastw = alphanum; - return 1; + wrputs(s, stream); + } + lastw = alphanum; + return 1; } static int legalAtom(unsigned char *s) /* Is this a legal atom ? */ { - wchar_t ch = *s; + wchar_t ch = *s; - if (ch == '\0') - return FALSE; - if (Yap_chtype[ch] != LC) { - if (ch == '[') { - return (s[1] == ']' && !s[2]); - } else if (ch == '{') { - return (s[1] == '}' && !s[2]); - } else if (Yap_chtype[ch] == SL) { - return (!s[1]); - } else if ((ch == ',' || ch == '.') && !s[1]) { - return FALSE; - } else { - if (ch == '/') { - if (s[1] == '*') return FALSE; - } - while (ch) { - if (Yap_chtype[ch] != SY) { - return FALSE; - } - ch = *++s; - } - } - return TRUE; - } else - while ((ch = *++s) != 0) - if (Yap_chtype[ch] > NU) - return FALSE; - return (TRUE); + if (ch == '\0') + return FALSE; + if (Yap_chtype[ch] != LC) { + if (ch == '[') { + return (s[1] == ']' && !s[2]); + } else if (ch == '{') { + return (s[1] == '}' && !s[2]); + } else if (Yap_chtype[ch] == SL) { + return (!s[1]); + } else if ((ch == ',' || ch == '.') && !s[1]) { + return FALSE; + } else { + if (ch == '/') { + if (s[1] == '*') return FALSE; + } + while (ch) { + if (Yap_chtype[ch] != SY) { + return FALSE; + } + ch = *++s; + } + } + return TRUE; + } else + while ((ch = *++s) != 0) + if (Yap_chtype[ch] > NU) + return FALSE; + return (TRUE); } static wtype AtomIsSymbols(unsigned char *s) /* Is this atom just formed by symbols ? */ { - int ch; - if (Yap_chtype[(int)s[0]] == SL && s[1] == '\0') - return(separator); - while ((ch = *s++) != '\0') { - if (Yap_chtype[ch] != SY) - return alphanum; - } - return symbol; + int ch; + if (Yap_chtype[(int)s[0]] == SL && s[1] == '\0') + return(separator); + while ((ch = *s++) != '\0') { + if (Yap_chtype[ch] != SY) + return alphanum; + } + return symbol; } static void write_quoted(wchar_t ch, wchar_t quote, wrf stream) { - CACHE_REGS - if (!(Yap_GetModuleEntry(CurrentModule)->flags & M_CHARESCAPE)) { - wrputc(ch, stream); - if (ch == '\'') - wrputc('\'', stream); /* be careful about quotes */ - return; - } - if (!(ch < 0xff && chtype(ch) == BS) && ch != '\'' && ch != '\\') { - wrputc(ch, stream); - } else { - switch (ch) { - case '\\': - wrputc('\\', stream); - wrputc('\\', stream); - break; - case '\'': - if (ch == quote) - wrputc('\\', stream); - wrputc(ch, stream); - break; - case '"': - if (ch == quote) - wrputc('\\', stream); - wrputc(ch, stream); - break; - case 7: - wrputc('\\', stream); - wrputc('a', stream); - break; - case '\b': - wrputc('\\', stream); - wrputc('b', stream); - break; - case '\t': - wrputc('\\', stream); - wrputc('t', stream); - break; - case ' ': - case 160: - wrputc(' ', stream); - break; - case '\n': - wrputc('\\', stream); - wrputc('n', stream); - break; - case 11: - wrputc('\\', stream); - wrputc('v', stream); - break; - case '\r': - wrputc('\\', stream); - wrputc('r', stream); - break; - case '\f': - wrputc('\\', stream); - wrputc('f', stream); - break; - default: - if ( ch <= 0xff ) { - char esc[8]; - - /* last backslash in ISO mode */ - sprintf(esc, "\\%03o\\", ch); - wrputs(esc, stream); - } - } - } + CACHE_REGS + if (!(Yap_GetModuleEntry(CurrentModule)->flags & M_CHARESCAPE)) { + wrputc(ch, stream); + if (ch == '\'') + wrputc('\'', stream); /* be careful about quotes */ + return; + } + if (!(ch < 0xff && chtype(ch) == BS) && ch != '\'' && ch != '\\') { + wrputc(ch, stream); + } else { + switch (ch) { + case '\\': + wrputc('\\', stream); + wrputc('\\', stream); + break; + case '\'': + if (ch == quote) + wrputc('\\', stream); + wrputc(ch, stream); + break; + case '"': + if (ch == quote) + wrputc('\\', stream); + wrputc(ch, stream); + break; + case 7: + wrputc('\\', stream); + wrputc('a', stream); + break; + case '\b': + wrputc('\\', stream); + wrputc('b', stream); + break; + case '\t': + wrputc('\\', stream); + wrputc('t', stream); + break; + case ' ': + case 160: + wrputc(' ', stream); + break; + case '\n': + wrputc('\\', stream); + wrputc('n', stream); + break; + case 11: + wrputc('\\', stream); + wrputc('v', stream); + break; + case '\r': + wrputc('\\', stream); + wrputc('r', stream); + break; + case '\f': + wrputc('\\', stream); + wrputc('f', stream); + break; + default: + if ( ch <= 0xff ) { + char esc[8]; + + /* last backslash in ISO mode */ + sprintf(esc, "\\%03o\\", ch); + wrputs(esc, stream); + } + } + } } static void write_string(const char *s, struct write_globs *wglb) /* writes an integer */ { - IOSTREAM *stream = wglb->stream; - int chr; - char *ptr = (char *)s; - - if (wglb->Write_strings) - wrputc('`', stream); - else - wrputc('"', stream); - do { - ptr = utf8_get_char(ptr, &chr); - if (chr == '\0') break; - write_quoted(chr, '"', stream); - } while (TRUE); - if (wglb->Write_strings) - wrputc('`', stream); - else - wrputc('"', stream); + IOSTREAM *stream = wglb->stream; + int chr; + char *ptr = (char *)s; + + if (wglb->Write_strings) + wrputc('`', stream); + else + wrputc('"', stream); + do { + ptr = utf8_get_char(ptr, &chr); + if (chr == '\0') break; + write_quoted(chr, '"', stream); + } while (TRUE); + if (wglb->Write_strings) + wrputc('`', stream); + else + wrputc('"', stream); } @@ -570,55 +570,55 @@ write_string(const char *s, struct write_globs *wglb) /* writes an integer */ static void putAtom(Atom atom, int Quote_illegal, struct write_globs *wglb) { - unsigned char *s; - wtype atom_or_symbol; - wrf stream = wglb->stream; + unsigned char *s; + wtype atom_or_symbol; + wrf stream = wglb->stream; - if (IsBlob(atom)) { - wrputblob(RepAtom(atom),Quote_illegal,wglb); - return; - } - if (IsWideAtom(atom)) { - wchar_t *ws = RepAtom(atom)->WStrOfAE; + if (IsBlob(atom)) { + wrputblob(RepAtom(atom),Quote_illegal,wglb); + return; + } + if (IsWideAtom(atom)) { + wchar_t *ws = RepAtom(atom)->WStrOfAE; - if (Quote_illegal) { - wrputc('\'', stream); - while (*ws) { - wchar_t ch = *ws++; - write_quoted(ch, '\'', stream); - } - wrputc('\'', stream); - } else { - wrputws(ws, stream); - } - return; - } - s = (unsigned char *)RepAtom(atom)->StrOfAE; - /* #define CRYPT_FOR_STEVE 1*/ + if (Quote_illegal) { + wrputc('\'', stream); + while (*ws) { + wchar_t ch = *ws++; + write_quoted(ch, '\'', stream); + } + wrputc('\'', stream); + } else { + wrputws(ws, stream); + } + return; + } + s = (unsigned char *)RepAtom(atom)->StrOfAE; + /* #define CRYPT_FOR_STEVE 1*/ #ifdef CRYPT_FOR_STEVE - if (Yap_GetValue(AtomCryptAtoms) != TermNil && Yap_GetAProp(atom, OpProperty) == NIL) { - char s[16]; - sprintf(s,"x%x", (CELL)s); - wrputs(s, stream); - return; - } + if (Yap_GetValue(AtomCryptAtoms) != TermNil && Yap_GetAProp(atom, OpProperty) == NIL) { + char s[16]; + sprintf(s,"x%x", (CELL)s); + wrputs(s, stream); + return; + } #endif - /* if symbol then last_minus is important */ - last_minus = FALSE; - atom_or_symbol = AtomIsSymbols(s); - if (lastw == atom_or_symbol && atom_or_symbol != separator /* solo */) - wrputc(' ', stream); - lastw = atom_or_symbol; - if (Quote_illegal && !legalAtom(s)) { - wrputc('\'', stream); - while (*s) { - wchar_t ch = *s++; - write_quoted(ch, '\'', stream); - } - wrputc('\'', stream); - } else { - wrputs((char *)s, stream); - } + /* if symbol then last_minus is important */ + last_minus = FALSE; + atom_or_symbol = AtomIsSymbols(s); + if (lastw == atom_or_symbol && atom_or_symbol != separator /* solo */) + wrputc(' ', stream); + lastw = atom_or_symbol; + if (Quote_illegal && !legalAtom(s)) { + wrputc('\'', stream); + while (*s) { + wchar_t ch = *s++; + write_quoted(ch, '\'', stream); + } + wrputc('\'', stream); + } else { + wrputs((char *)s, stream); + } } void @@ -633,92 +633,92 @@ Yap_WriteAtom(IOSTREAM *s, Atom atom) static int IsCodesTerm(Term string) /* checks whether this is a string */ { - if (IsVarTerm(string)) - return FALSE; - do { - Term hd; - int ch; + if (IsVarTerm(string)) + return FALSE; + do { + Term hd; + int ch; - if (!IsPairTerm(string)) return(FALSE); - hd = HeadOfTerm(string); - if (IsVarTerm(hd)) return(FALSE); - if (!IsIntTerm(hd)) return(FALSE); - ch = IntOfTerm(HeadOfTerm(string)); - if ((ch < ' ' || ch > MAX_ISO_LATIN1) && ch != '\n' && ch != '\t') - return(FALSE); - string = TailOfTerm(string); - if (IsVarTerm(string)) return(FALSE); - } while (string != TermNil); - return(TRUE); + if (!IsPairTerm(string)) return(FALSE); + hd = HeadOfTerm(string); + if (IsVarTerm(hd)) return(FALSE); + if (!IsIntTerm(hd)) return(FALSE); + ch = IntOfTerm(HeadOfTerm(string)); + if ((ch < ' ' || ch > MAX_ISO_LATIN1) && ch != '\n' && ch != '\t') + return(FALSE); + string = TailOfTerm(string); + if (IsVarTerm(string)) return(FALSE); + } while (string != TermNil); + return(TRUE); } /* writes a string */ static void putString(Term string, struct write_globs *wglb) - + { - wrf stream = wglb->stream; - wrputc('"', stream); - while (string != TermNil) { - wchar_t ch = IntOfTerm(HeadOfTerm(string)); - write_quoted(ch, '"', stream); - string = TailOfTerm(string); - } - wrputc('"', stream); - lastw = alphanum; + wrf stream = wglb->stream; + wrputc('"', stream); + while (string != TermNil) { + wchar_t ch = IntOfTerm(HeadOfTerm(string)); + write_quoted(ch, '"', stream); + string = TailOfTerm(string); + } + wrputc('"', stream); + lastw = alphanum; } /* writes a string */ static void putUnquotedString(Term string, struct write_globs *wglb) - + { - wrf stream = wglb->stream; - while (string != TermNil) { - int ch = IntOfTerm(HeadOfTerm(string)); - wrputc(ch, stream); - string = TailOfTerm(string); - } - lastw = alphanum; + wrf stream = wglb->stream; + while (string != TermNil) { + int ch = IntOfTerm(HeadOfTerm(string)); + wrputc(ch, stream); + string = TailOfTerm(string); + } + lastw = alphanum; } static Term from_pointer(CELL *ptr0, struct rewind_term *rwt, struct write_globs *wglb) { - CACHE_REGS - Term t; - CELL *ptr = ptr0; + CACHE_REGS + Term t; + CELL *ptr = ptr0; - while (IsVarTerm(*ptr) && !IsUnboundVar(ptr)) - ptr = (CELL *)*ptr; - t = *ptr; - if (wglb->Keep_terms) { - struct rewind_term *x = rwt->parent; + while (IsVarTerm(*ptr) && !IsUnboundVar(ptr)) + ptr = (CELL *)*ptr; + t = *ptr; + if (wglb->Keep_terms) { + struct rewind_term *x = rwt->parent; - rwt->u_sd.s.old = Yap_InitSlot(t PASS_REGS); - rwt->u_sd.s.ptr = Yap_InitSlot((CELL)ptr0 PASS_REGS); - if (!IsAtomicTerm(t) && !IsVarTerm(t)) { - while (x) { - if (Yap_GetDerefedFromSlot(x->u_sd.s.old PASS_REGS) == t) - return TermFoundVar; - x = x->parent; - } - } - } else { - rwt->u_sd.d.old = t; - rwt->u_sd.d.ptr = ptr0; - if ( !IsVarTerm(t) && !IsAtomicTerm(t)) { - struct rewind_term *x = rwt->parent; - - while (x) { - if (x->u_sd.d.old == t) - return TermFoundVar; - x = x->parent; - } - } - } - return t; + rwt->u_sd.s.old = Yap_InitSlot(t PASS_REGS); + rwt->u_sd.s.ptr = Yap_InitSlot((CELL)ptr0 PASS_REGS); + if (!IsAtomicTerm(t) && !IsVarTerm(t)) { + while (x) { + if (Yap_GetDerefedFromSlot(x->u_sd.s.old PASS_REGS) == t) + return TermFoundVar; + x = x->parent; + } + } + } else { + rwt->u_sd.d.old = t; + rwt->u_sd.d.ptr = ptr0; + if ( !IsVarTerm(t) && !IsAtomicTerm(t)) { + struct rewind_term *x = rwt->parent; + + while (x) { + if (x->u_sd.d.old == t) + return TermFoundVar; + x = x->parent; + } + } + } + return t; } static CELL * @@ -741,139 +741,140 @@ restore_from_write(struct rewind_term *rwt, struct write_globs *wglb) static void write_var(CELL *t, struct write_globs *wglb, struct rewind_term *rwt) { - CACHE_REGS - if (lastw == alphanum) { - wrputc(' ', wglb->stream); - } - wrputc('_', wglb->stream); - /* make sure we don't get no creepy spaces where they shouldn't be */ - lastw = separator; - if (IsAttVar(t)) { - Int vcount = (t-H0); - if (wglb->Portray_delays) { - exts ext = ExtFromCell(t); - struct rewind_term nrwt; - nrwt.parent = rwt; - nrwt.u_sd.s.ptr = 0; + CACHE_REGS + if (lastw == alphanum) { + wrputc(' ', wglb->stream); + } + wrputc('_', wglb->stream); + /* make sure we don't get no creepy spaces where they shouldn't be */ + lastw = separator; + if (IsAttVar(t)) { + Int vcount = (t-H0); + if (wglb->Portray_delays) { + exts ext = ExtFromCell(t); + struct rewind_term nrwt; + nrwt.parent = rwt; + nrwt.u_sd.s.ptr = 0; - wglb->Portray_delays = FALSE; - if (ext == attvars_ext) { - attvar_record *attv = RepAttVar(t); - CELL *l = &attv->Value; /* dirty low-level hack, check atts.h */ + wglb->Portray_delays = FALSE; + if (ext == attvars_ext) { + attvar_record *attv = RepAttVar(t); + CELL *l = &attv->Value; /* dirty low-level hack, check atts.h */ - wrputs("$AT(",wglb->stream); - write_var(t, wglb, rwt); - wrputc(',', wglb->stream); - writeTerm(from_pointer(l, &nrwt, wglb), 999, 1, FALSE, wglb, &nrwt); - l = restore_from_write(&nrwt, wglb); - wrputc(',', wglb->stream); - l ++; - writeTerm(from_pointer(l, &nrwt, wglb), 999, 1, FALSE, wglb, &nrwt); - restore_from_write(&nrwt, wglb); - wrclose_bracket(wglb, TRUE); - } - wglb->Portray_delays = TRUE; - return; - } - wrputc('D', wglb->stream); - wrputn(vcount,wglb); - } else { - wrputn(((Int) (t- H0)),wglb); - } + wrputs("$AT(",wglb->stream); + write_var(t, wglb, rwt); + wrputc(',', wglb->stream); + writeTerm(from_pointer(l, &nrwt, wglb), 999, 1, FALSE, wglb, &nrwt); + l = restore_from_write(&nrwt, wglb); + wrputc(',', wglb->stream); + l ++; + writeTerm(from_pointer(l, &nrwt, wglb), 999, 1, FALSE, wglb, &nrwt); + restore_from_write(&nrwt, wglb); + wrclose_bracket(wglb, TRUE); + } + wglb->Portray_delays = TRUE; + return; + } + wrputc('D', wglb->stream); + wrputn(vcount,wglb); + } else { + wrputn(((Int) (t- H0)),wglb); + } } static Term check_infinite_loop(Term t, struct rewind_term *x, struct write_globs *wglb) { - CACHE_REGS - if (wglb->Keep_terms) { - while (x) { - if (Yap_GetFromSlot(x->u_sd.s.old PASS_REGS) == t) - return TermFoundVar; - x = x->parent; - } - } else { - while (x) { - if (x->u_sd.d.old == t) - return TermFoundVar; - x = x->parent; - } - } - return t; + CACHE_REGS + if (wglb->Keep_terms) { + while (x) { + if (Yap_GetFromSlot(x->u_sd.s.old PASS_REGS) == t) + return TermFoundVar; + x = x->parent; + } + } else { + while (x) { + if (x->u_sd.d.old == t) + return TermFoundVar; + x = x->parent; + } + } + return t; } static void write_list(Term t, int direction, int depth, struct write_globs *wglb, struct rewind_term *rwt) { - Term ti; - struct rewind_term nrwt; - nrwt.parent = rwt; - nrwt.u_sd.s.ptr = 0; + Term ti; + struct rewind_term nrwt; + nrwt.parent = rwt; + nrwt.u_sd.s.ptr = 0; - while (1) { - int ndirection; - int do_jump; + while (1) { + int ndirection; + int do_jump; - writeTerm(from_pointer(RepPair(t), &nrwt, wglb), 999, depth+1, FALSE, wglb, &nrwt); - t = AbsPair(restore_from_write(&nrwt, wglb)); - ti = TailOfTerm(t); - if (IsVarTerm(ti)) - break; - if (!IsPairTerm(ti) || - !IsPairTerm((ti = check_infinite_loop(ti, rwt, wglb)))) - break; - ndirection = RepPair(ti)-RepPair(t); - /* make sure we're not trapped in loops */ - if (ndirection > 0) { - do_jump = (direction <= 0); - } else if (ndirection == 0) { - wrputc(',', wglb->stream); - putAtom(AtomFoundVar, wglb->Quote_illegal, wglb); - lastw = separator; - return; - } else { - do_jump = (direction >= 0); - } - if (wglb->MaxDepth != 0 && depth > wglb->MaxDepth) { - wrputc('|', wglb->stream); - putAtom(Atom3Dots, wglb->Quote_illegal, wglb); - return; - } - lastw = separator; - direction = ndirection; - depth++; - if (do_jump) - break; - wrputc(',', wglb->stream); - t = ti; - } - if (IsPairTerm(ti)) { - Term nt = from_pointer(RepPair(t)+1, &nrwt, wglb); - /* we found an infinite loop */ - if (IsAtomTerm(nt)) { - wrputc('|', wglb->stream); - writeTerm(nt, 999, depth, FALSE, wglb, rwt); - } else { - /* keep going on the list */ - wrputc(',', wglb->stream); - write_list(nt, direction, depth, wglb, &nrwt); - } - restore_from_write(&nrwt, wglb); - } else if (ti != MkAtomTerm(AtomNil)) { - wrputc('|', wglb->stream); - lastw = separator; - writeTerm(from_pointer(RepPair(t)+1, &nrwt, wglb), 999, depth, FALSE, wglb, &nrwt); - restore_from_write(&nrwt, wglb); - } - } + writeTerm(from_pointer(RepPair(t), &nrwt, wglb), 999, depth+1, FALSE, wglb, &nrwt); + t = AbsPair(restore_from_write(&nrwt, wglb)); + ti = TailOfTerm(t); + if (IsVarTerm(ti)) + break; + if (!IsPairTerm(ti) || + !IsPairTerm((ti = check_infinite_loop(ti, rwt, wglb)))) + break; + ndirection = RepPair(ti)-RepPair(t); + /* make sure we're not trapped in loops */ + if (ndirection > 0) { + do_jump = (direction <= 0); + } else if (ndirection == 0) { + wrputc(',', wglb->stream); + putAtom(AtomFoundVar, wglb->Quote_illegal, wglb); + lastw = separator; + return; + } else { + do_jump = (direction >= 0); + } + if (wglb->MaxDepth != 0 && depth > wglb->MaxDepth) { + wrputc('|', wglb->stream); + putAtom(Atom3Dots, wglb->Quote_illegal, wglb); + return; + } + lastw = separator; + direction = ndirection; + depth++; + if (do_jump) + break; + wrputc(',', wglb->stream); + t = ti; + } + if (IsPairTerm(ti)) { + Term nt = from_pointer(RepPair(t)+1, &nrwt, wglb); + /* we found an infinite loop */ + if (IsAtomTerm(nt)) { + wrputc('|', wglb->stream); + writeTerm(nt, 999, depth, FALSE, wglb, rwt); + } else { + /* keep going on the list */ + wrputc(',', wglb->stream); + write_list(nt, direction, depth, wglb, &nrwt); + } + restore_from_write(&nrwt, wglb); + } else if (ti != MkAtomTerm(AtomNil)) { + wrputc('|', wglb->stream); + lastw = separator; + writeTerm(from_pointer(RepPair(t)+1, &nrwt, wglb), 999, depth, FALSE, wglb, &nrwt); + restore_from_write(&nrwt, wglb); + } +} static void writeTerm(Term t, int p, int depth, int rinfixarg, struct write_globs *wglb, struct rewind_term *rwt) /* term to write */ /* context priority */ - + { +<<<<<<< HEAD CACHE_REGS struct rewind_term nrwt; nrwt.parent = rwt; @@ -974,20 +975,123 @@ writeTerm(Term t, int p, int depth, int rinfixarg, struct write_globs *wglb, str while (argno < *p) { wrputc('_', wglb->stream), wrputc(',', wglb->stream); ++argno; +======= + CACHE_REGS + struct rewind_term nrwt; + nrwt.parent = rwt; + nrwt.u_sd.s.ptr = 0; + + if (wglb->MaxDepth != 0 && depth > wglb->MaxDepth) { + putAtom(Atom3Dots, wglb->Quote_illegal, wglb); + return; +>>>>>>> 596768a56b69ad4170d5ca0f18dcc7a0f55316e9 } - *p++; - lastw = separator; - /* cannot use the term directly with the SBA */ - writeTerm(from_pointer(p, &nrwt, wglb), 999, depth + 1, FALSE, wglb, &nrwt); - p = restore_from_write(&nrwt, wglb)+1; - if (*p) - wrputc(',', wglb->stream); - argno++; - } - wrclose_bracket(wglb, TRUE); - return; - } + if (EX) + return; + t = Deref(t); + if (IsVarTerm(t)) { + write_var((CELL *)t, wglb, &nrwt); + } else if (IsIntTerm(t)) { + wrputn((Int) IntOfTerm(t),wglb); + } else if (IsAtomTerm(t)) { + putAtom(AtomOfTerm(t), wglb->Quote_illegal, wglb); + } else if (IsPairTerm(t)) { + if (wglb->Ignore_ops) { + wrputs("'.'(",wglb->stream); + lastw = separator; + writeTerm(from_pointer(RepPair(t), &nrwt, wglb), 999, depth + 1, FALSE, wglb, &nrwt); + t = AbsPair(restore_from_write(&nrwt, wglb)); + wrputs(",",wglb->stream); + writeTerm(from_pointer(RepPair(t)+1, &nrwt, wglb), 999, depth + 1, FALSE, wglb, &nrwt); + restore_from_write(&nrwt, wglb); + wrclose_bracket(wglb, TRUE); + return; + } + if (wglb->Use_portray) { + Term targs[1]; + struct DB_TERM *old_EX = NULL; + Int sl = 0; + + targs[0] = t; + Yap_PutValue(AtomPortray, MkAtomTerm(AtomNil)); + if (EX) old_EX = EX; + sl = Yap_InitSlot(t PASS_REGS); + Yap_execute_goal(Yap_MkApplTerm(FunctorPortray, 1, targs), 0, 1); + t = Yap_GetFromSlot(sl PASS_REGS); + Yap_RecoverSlots(1 PASS_REGS); + if (old_EX != NULL) EX = old_EX; + if (Yap_GetValue(AtomPortray) == MkAtomTerm(AtomTrue)) + return; + } + if (yap_flags[WRITE_QUOTED_STRING_FLAG] && IsCodesTerm(t)) { + putString(t, wglb); + } else { + wrputc('[', wglb->stream); + lastw = separator; + /* we assume t was already saved in the stack */ + write_list(t, 0, depth, wglb, rwt); + wrputc(']', wglb->stream); + lastw = separator; + } + } else { /* compound term */ + Functor functor = FunctorOfTerm(t); + int Arity; + Atom atom; + int op, lp, rp; + + if (IsExtensionFunctor(functor)) { + switch((CELL)functor) { + case (CELL)FunctorDouble: + wrputf(FloatOfTerm(t),wglb); + return; + case (CELL)FunctorString: + write_string(StringOfTerm(t),wglb); + return; + case (CELL)FunctorAttVar: + write_var(RepAppl(t)+1, wglb, &nrwt); + return; + case (CELL)FunctorDBRef: + wrputref(RefOfTerm(t), wglb->Quote_illegal, wglb); + return; + case (CELL)FunctorLongInt: + wrputn(LongIntOfTerm(t),wglb); + return; + /* case (CELL)FunctorBigInt: */ + default: + writebig(t, p, depth, rinfixarg, wglb, rwt); + return; + } + } + Arity = ArityOfFunctor(functor); + atom = NameOfFunctor(functor); +#ifdef SFUNC + if (Arity == SFArity) { + int argno = 1; + CELL *p = ArgsOfSFTerm(t); + putAtom(atom, wglb->Quote_illegal, wglb); + wropen_bracket(wglb, FALSE); + lastw = separator; + while (*p) { + Int sl = 0; + + while (argno < *p) { + wrputc('_', wglb->stream), wrputc(',', wglb->stream); + ++argno; + } + *p++; + lastw = separator; + /* cannot use the term directly with the SBA */ + writeTerm(from_pointer(p, &nrwt, wglb), 999, depth + 1, FALSE, wglb, &nrwt); + p = restore_from_write(&nrwt, wglb)+1; + if (*p) + wrputc(',', wglb->stream); + argno++; + } + wrclose_bracket(wglb, TRUE); + return; + } #endif +<<<<<<< HEAD if (wglb->Use_portray) { Term targs[1]; struct DB_TERM *old_EX = NULL; @@ -1176,70 +1280,260 @@ writeTerm(Term t, int p, int depth, int rinfixarg, struct write_globs *wglb, str if (op == wglb->MaxArgs) { wrputs("...", wglb->stream); break; +======= + if (wglb->Use_portray) { + Term targs[1]; + struct DB_TERM *old_EX = NULL; + Int sl = 0; + + targs[0] = t; + Yap_PutValue(AtomPortray, MkAtomTerm(AtomNil)); + if (EX) old_EX = EX; + sl = Yap_InitSlot(t PASS_REGS); + Yap_execute_goal(Yap_MkApplTerm(FunctorPortray, 1, targs),0, 1); + t = Yap_GetFromSlot(sl PASS_REGS); + Yap_RecoverSlots(1 PASS_REGS); + if (old_EX) EX = old_EX; + if (Yap_GetValue(AtomPortray) == MkAtomTerm(AtomTrue) || EX) + return; + } + if (!wglb->Ignore_ops && + Arity == 1 && + Yap_IsPrefixOp(atom, &op, &rp) + ) { + Term tright = ArgOfTerm(1, t); + int bracket_right = + !IsVarTerm(tright) && IsAtomTerm(tright) && + Yap_IsOp(AtomOfTerm(tright)); + if (op > p) { + wropen_bracket(wglb, TRUE); + } + putAtom(atom, wglb->Quote_illegal, wglb); + if (bracket_right) { + /* avoid stuff such as \+ (a,b) being written as \+(a,b) */ + wropen_bracket(wglb, TRUE); + } else if (atom == AtomMinus) { + last_minus = TRUE; + } + writeTerm(from_pointer(RepAppl(t)+1, &nrwt, wglb), rp, depth + 1, TRUE, wglb, &nrwt); + restore_from_write(&nrwt, wglb); + if (bracket_right) { + wrclose_bracket(wglb, TRUE); + } + if (op > p) { + wrclose_bracket(wglb, TRUE); + } + } else if (!wglb->Ignore_ops && + ( Arity == 1 || ((atom == AtomEmptyBrackets || atom == AtomEmptyCurlyBrackets || atom == AtomEmptySquareBrackets) && !IsVarTerm(ArgOfTerm(1, t)))) && + Yap_IsPosfixOp(atom, &op, &lp)) { + Term tleft = ArgOfTerm(1, t); + + int bracket_left, offset; + + if (Arity != 1) { + tleft = ArgOfTerm(1, t); + offset = 2; + } else { + tleft = ArgOfTerm(1, t); + offset = 1; + } + bracket_left = + !IsVarTerm(tleft) && + IsAtomTerm(tleft) && + Yap_IsOp(AtomOfTerm(tleft)); + if (op > p) { + /* avoid stuff such as \+ (a,b) being written as \+(a,b) */ + wropen_bracket(wglb, TRUE); + } + if (bracket_left) { + wropen_bracket(wglb, TRUE); + } + writeTerm(from_pointer(RepAppl(t)+offset, &nrwt, wglb), lp, depth + 1, rinfixarg, wglb, &nrwt); + restore_from_write(&nrwt, wglb); + if (bracket_left) { + wrclose_bracket(wglb, TRUE); + } + if (Arity > 1) { + if (atom == AtomEmptyBrackets) { + wrputc('(', wglb->stream); + } else if (atom == AtomEmptySquareBrackets) { + wrputc('[', wglb->stream); + } else if (atom == AtomEmptyCurlyBrackets) { + wrputc('{', wglb->stream); + } + lastw = separator; + write_list(ArgOfTerm(1,t), 0, depth, wglb, rwt); + if (atom == AtomEmptyBrackets) { + wrputc(')', wglb->stream); + } else if (atom == AtomEmptySquareBrackets) { + wrputc(']', wglb->stream); + } else if (atom == AtomEmptyCurlyBrackets) { + wrputc('}', wglb->stream); + } + lastw = separator; + } else { + putAtom(atom, wglb->Quote_illegal, wglb); + } + if (op > p) { + wrclose_bracket(wglb, TRUE); + } + } else if (!wglb->Ignore_ops && + Arity == 2 && Yap_IsInfixOp(atom, &op, &lp, + &rp) ) { + Term tleft = ArgOfTerm(1, t); + Term tright = ArgOfTerm(2, t); + int bracket_left = + !IsVarTerm(tleft) && IsAtomTerm(tleft) && + Yap_IsOp(AtomOfTerm(tleft)); + int bracket_right = + !IsVarTerm(tright) && IsAtomTerm(tright) && + Yap_IsOp(AtomOfTerm(tright)); + + if (op > p) { + /* avoid stuff such as \+ (a,b) being written as \+(a,b) */ + wropen_bracket(wglb, TRUE); + lastw = separator; + } + if (bracket_left) { + wropen_bracket(wglb, TRUE); + } + writeTerm(from_pointer(RepAppl(t)+1, &nrwt, wglb), lp, depth + 1, rinfixarg, wglb, &nrwt); + t = AbsAppl(restore_from_write(&nrwt, wglb)-1); + if (bracket_left) { + wrclose_bracket(wglb, TRUE); + } + /* avoid quoting commas and bars */ + if (!strcmp(RepAtom(atom)->StrOfAE,",")) { + wrputc(',', wglb->stream); + lastw = separator; + } else if (!strcmp(RepAtom(atom)->StrOfAE,"|")) { + wrputc('|', wglb->stream); + lastw = separator; + } else + putAtom(atom, wglb->Quote_illegal, wglb); + if (bracket_right) { + wropen_bracket(wglb, TRUE); + } + writeTerm(from_pointer(RepAppl(t)+2, &nrwt, wglb), rp, depth + 1, TRUE, wglb, &nrwt); + restore_from_write(&nrwt, wglb); + if (bracket_right) { + wrclose_bracket(wglb, TRUE); + } + if (op > p) { + wrclose_bracket(wglb, TRUE); + } + } else if (wglb->Handle_vars && functor == LOCAL_FunctorVar) { + Term ti = ArgOfTerm(1, t); + if (lastw == alphanum) { + wrputc(' ', wglb->stream); + } + if (!IsVarTerm(ti) && (IsIntTerm(ti) || IsCodesTerm(ti) || IsAtomTerm(ti))) { + if (IsIntTerm(ti)) { + Int k = IntOfTerm(ti); + if (k == -1) { + wrputc('_', wglb->stream); + lastw = alphanum; + return; + } else { + wrputc((k % 26) + 'A', wglb->stream); + if (k >= 26) { + /* make sure we don't get confused about our context */ + lastw = separator; + wrputn( k / 26 ,wglb); + } else + lastw = alphanum; + } + } else if (IsAtomTerm(ti)) { + putAtom(AtomOfTerm(ti), FALSE, wglb); + } else { + putUnquotedString(ti, wglb); + } + } else { + wrputs("'$VAR'(",wglb->stream); + lastw = separator; + writeTerm(from_pointer(RepAppl(t)+1, &nrwt, wglb), 999, depth + 1, FALSE, wglb, &nrwt); + restore_from_write(&nrwt, wglb); + wrclose_bracket(wglb, TRUE); + } + } else if (!wglb->Ignore_ops && functor == FunctorBraces) { + wrputc('{', wglb->stream); + lastw = separator; + writeTerm(from_pointer(RepAppl(t)+1, &nrwt, wglb), 1200, depth + 1, FALSE, wglb, &nrwt); + restore_from_write(&nrwt, wglb); + wrputc('}', wglb->stream); + lastw = separator; + } else if (atom == AtomArray) { + wrputc('{', wglb->stream); + lastw = separator; + for (op = 1; op <= Arity; ++op) { + if (op == wglb->MaxArgs) { + wrputs("...", wglb->stream); + break; + } + writeTerm(from_pointer(RepAppl(t)+op, &nrwt, wglb), 999, depth + 1, FALSE, wglb, &nrwt); + t = AbsAppl(restore_from_write(&nrwt, wglb)-op); + if (op != Arity) { + wrputc(',', wglb->stream); + lastw = separator; + } + } + wrputc('}', wglb->stream); + lastw = separator; + } else { + putAtom(atom, wglb->Quote_illegal, wglb); + lastw = separator; + wropen_bracket(wglb, FALSE); + for (op = 1; op <= Arity; ++op) { + if (op == wglb->MaxArgs) { + wrputc('.', wglb->stream); + wrputc('.', wglb->stream); + wrputc('.', wglb->stream); + break; + } + writeTerm(from_pointer(RepAppl(t)+op, &nrwt, wglb), 999, depth + 1, FALSE, wglb, &nrwt); + restore_from_write(&nrwt, wglb); + if (op != Arity) { + wrputc(',', wglb->stream); + lastw = separator; + } + } + wrclose_bracket(wglb, TRUE); + } +>>>>>>> 596768a56b69ad4170d5ca0f18dcc7a0f55316e9 } - writeTerm(from_pointer(RepAppl(t)+op, &nrwt, wglb), 999, depth + 1, FALSE, wglb, &nrwt); - t = AbsAppl(restore_from_write(&nrwt, wglb)-op); - if (op != Arity) { - wrputc(',', wglb->stream); - lastw = separator; - } - } - wrputc('}', wglb->stream); - lastw = separator; - } else { - putAtom(atom, wglb->Quote_illegal, wglb); - lastw = separator; - wropen_bracket(wglb, FALSE); - for (op = 1; op <= Arity; ++op) { - if (op == wglb->MaxArgs) { - wrputc('.', wglb->stream); - wrputc('.', wglb->stream); - wrputc('.', wglb->stream); - break; - } - writeTerm(from_pointer(RepAppl(t)+op, &nrwt, wglb), 999, depth + 1, FALSE, wglb, &nrwt); - restore_from_write(&nrwt, wglb); - if (op != Arity) { - wrputc(',', wglb->stream); - lastw = separator; - } - } - wrclose_bracket(wglb, TRUE); - } - } } void Yap_plwrite(Term t, void *mywrite, int max_depth, int flags, int priority) - /* term to be written */ - /* consumer */ - /* write options */ +/* term to be written */ +/* consumer */ +/* write options */ { - struct write_globs wglb; - struct rewind_term rwt; + struct write_globs wglb; + struct rewind_term rwt; - if (!mywrite) - wglb.stream = Serror; - else - wglb.stream = mywrite; + if (!mywrite) + wglb.stream = Serror; + else + wglb.stream = mywrite; - wglb.lw = separator; - wglb.last_atom_minus = FALSE; - wglb.Quote_illegal = flags & Quote_illegal_f; - wglb.Handle_vars = flags & Handle_vars_f; - wglb.Use_portray = flags & Use_portray_f; - wglb.Portray_delays = flags & AttVar_Portray_f; - wglb.MaxDepth = max_depth; - wglb.MaxArgs = max_depth; - /* notice: we must have ASP well set when using portray, otherwise + wglb.lw = separator; + wglb.last_atom_minus = FALSE; + wglb.Quote_illegal = flags & Quote_illegal_f; + wglb.Handle_vars = flags & Handle_vars_f; + wglb.Use_portray = flags & Use_portray_f; + wglb.Portray_delays = flags & AttVar_Portray_f; + wglb.MaxDepth = max_depth; + wglb.MaxArgs = max_depth; + /* notice: we must have ASP well set when using portray, otherwise we cannot make recursive Prolog calls */ - wglb.Keep_terms = (flags & (Use_portray_f|To_heap_f)); - /* initialise wglb */ - rwt.parent = NULL; - wglb.Ignore_ops = flags & Ignore_ops_f; - wglb.Write_strings = flags & BackQuote_String_f; - /* protect slots for portray */ - writeTerm(from_pointer(&t, &rwt, &wglb), priority, 1, FALSE, &wglb, &rwt); - restore_from_write(&rwt, &wglb); + wglb.Keep_terms = (flags & (Use_portray_f|To_heap_f)); + /* initialise wglb */ + rwt.parent = NULL; + wglb.Ignore_ops = flags & Ignore_ops_f; + wglb.Write_strings = flags & BackQuote_String_f; + /* protect slots for portray */ + writeTerm(from_pointer(&t, &rwt, &wglb), priority, 1, FALSE, &wglb, &rwt); + restore_from_write(&rwt, &wglb); } diff --git a/CXX/yapi.hh b/CXX/yapi.hh index df6e9ae0e..35545bdce 100644 --- a/CXX/yapi.hh +++ b/CXX/yapi.hh @@ -367,7 +367,8 @@ class YAPParams; */ class YAPEngine { public: - YAPEngine(YAPParams const& params); + YAPEngine(YAPParams const& params); /// construct a new engine + YAPQuery *query( char *s ) { return new YAPQuery( s ); } /// build a query on the engine }; /** diff --git a/H/eval.h b/H/eval.h index 7a41e37d0..d60458709 100644 --- a/H/eval.h +++ b/H/eval.h @@ -235,7 +235,7 @@ typedef enum { * 0 == 2.22e-16 * 0 == 0 * false. - * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ op_log10, op_sqrt, diff --git a/configure b/configure index e8dc0d576..82d3f4808 100755 --- a/configure +++ b/configure @@ -15419,7 +15419,7 @@ if test "$yap_cv_swig" = "no"; then PKG_SWIG="" elif test -e "$srcdir"/packages/swig/Makefile.in ; then SWIG_TARGET="all" - PKG_SWIG="swig" + PKG_SWIG="packages/swig" fi if test "$PKG_SWIG" != ""; then diff --git a/docs/doxygen.rc b/docs/doxygen.rc index 4162a4efe..198860f4f 100644 --- a/docs/doxygen.rc +++ b/docs/doxygen.rc @@ -1,4 +1,4 @@ -# Doxyfile 1.8.6 +# Doxyfile 1.8.7 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -24,7 +24,7 @@ # for the list of possible encodings. # The default value is: UTF-8. -DOXYFILE_ENCODING = UTF-8 +DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by # double-quotes, unless you are using Doxywizard) that should identify the @@ -32,33 +32,33 @@ DOXYFILE_ENCODING = UTF-8 # title of most generated pages and in a few other places. # The default value is: My Project. -PROJECT_NAME = yap-6 +PROJECT_NAME = yap-6 # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = +PROJECT_NUMBER = # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. -PROJECT_BRIEF = +PROJECT_BRIEF = # With the PROJECT_LOGO tag one can specify an logo or icon that is included in # the documentation. The maximum height of the logo should not exceed 55 pixels # and the maximum width should not exceed 200 pixels. Doxygen will copy the logo # to the output directory. -PROJECT_LOGO = misc/icons/yap_96x96x32.png +PROJECT_LOGO = misc/icons/yap_96x96x32.png # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = doxout +OUTPUT_DIRECTORY = doxout # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- # directories (in 2 levels) under the output directory of each output format and @@ -68,7 +68,15 @@ OUTPUT_DIRECTORY = doxout # performance problems for the file system. # The default value is: NO. -CREATE_SUBDIRS = YES +CREATE_SUBDIRS = YES + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this @@ -83,14 +91,14 @@ CREATE_SUBDIRS = YES # Ukrainian and Vietnamese. # The default value is: English. -OUTPUT_LANGUAGE = English +OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. # The default value is: YES. -BRIEF_MEMBER_DESC = YES +BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief # description of a member or function before the detailed description @@ -99,7 +107,7 @@ BRIEF_MEMBER_DESC = YES # brief descriptions will be completely suppressed. # The default value is: YES. -REPEAT_BRIEF = YES +REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator that is # used to form the text in various listings. Each string in this list, if found @@ -110,14 +118,24 @@ REPEAT_BRIEF = YES # the entity):The $name class, The $name widget, The $name file, is, provides, # specifies, contains, represents, a, an and the. -ABBREVIATE_BRIEF = "The $name class" "The $name widget" "The $name file" is provides specifies contains represents a an the +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # doxygen will generate a detailed section even if there is only a brief # description. # The default value is: NO. -ALWAYS_DETAILED_SEC = NO +ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those @@ -125,14 +143,14 @@ ALWAYS_DETAILED_SEC = NO # operators of the base classes will not be shown. # The default value is: NO. -INLINE_INHERITED_MEMB = NO +INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path # before files name in the file list and in the header files. If set to NO the # shortest path that makes the file name unique will be used # The default value is: YES. -FULL_PATH_NAMES = YES +FULL_PATH_NAMES = YES # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. # Stripping is only done if one of the specified strings matches the left-hand @@ -144,7 +162,7 @@ FULL_PATH_NAMES = YES # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. -STRIP_FROM_PATH = +STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which @@ -153,14 +171,14 @@ STRIP_FROM_PATH = # specify the list of include paths that are normally passed to the compiler # using the -I flag. -STRIP_FROM_INC_PATH = +STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't # support long names like on DOS, Mac, or CD-ROM. # The default value is: NO. -SHORT_NAMES = NO +SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the # first line (until the first dot) of a Javadoc-style comment as the brief @@ -169,7 +187,7 @@ SHORT_NAMES = NO # description.) # The default value is: NO. -JAVADOC_AUTOBRIEF = NO +JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first # line (until the first dot) of a Qt-style comment as the brief description. If @@ -177,7 +195,7 @@ JAVADOC_AUTOBRIEF = NO # requiring an explicit \brief command for a brief description.) # The default value is: NO. -QT_AUTOBRIEF = NO +QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a # multi-line C++ special comment block (i.e. a block of //! or /// comments) as @@ -195,20 +213,20 @@ MULTILINE_CPP_IS_BRIEF = NO # documentation from any documented member that it re-implements. # The default value is: YES. -INHERIT_DOCS = YES +INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a # new page for each member. If set to NO, the documentation of a member will be # part of the file/class/namespace that contains it. # The default value is: NO. -SEPARATE_MEMBER_PAGES = NO +SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen # uses this value to replace tabs by spaces in code fragments. # Minimum value: 1, maximum value: 16, default value: 4. -TAB_SIZE = 4 +TAB_SIZE = 4 # This tag can be used to specify a number of aliases that act as commands in # the documentation. An alias has the form: @@ -220,14 +238,17 @@ TAB_SIZE = 4 # "Side Effects:". You can put \n's in the value part of an alias to insert # newlines. -ALIASES = "predicate=@brief" "doxygen=\if english" "endenglish=\endif" "dutch=\if dutch" "enddutch=\endif" - +ALIASES = "predicate=@brief" \ + "doxygen=\if english" \ + "endenglish=\endif" \ + "dutch=\if dutch" \ + "enddutch=\endif" # This tag can be used to specify a number of word-keyword mappings (TCL only). # A mapping has the form "name=value". For example adding "class=itcl::class" # will allow you to use the command class in the itcl::class meaning. -TCL_SUBST = +TCL_SUBST = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources # only. Doxygen will then generate output that is more tailored for C. For @@ -235,9 +256,7 @@ TCL_SUBST = # members will be omitted, etc. # The default value is: NO. -OPTIMIZE_OUTPUT_FOR_C = NO - -OPTIMIZE_OUTPUT_FOR_PROLOG = YES +OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or # Python sources only. Doxygen will then generate output that is more tailored @@ -245,35 +264,45 @@ OPTIMIZE_OUTPUT_FOR_PROLOG = YES # qualified scopes will look different, etc. # The default value is: NO. -OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources. Doxygen will then generate output that is tailored for Fortran. # The default value is: NO. -OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for VHDL. # The default value is: NO. -OPTIMIZE_OUTPUT_VHDL = NO +OPTIMIZE_OUTPUT_VHDL = NO + +# Set the OPTIMIZE_OUTPUT_PROLOG tag to YES if your project consists of Prolog +# sources. Doxygen will then generate output that is tailored for Prolog. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_PROLOG = YES # Doxygen selects the parser to use depending on the extension of the files it # parses. With this tag you can assign which parser to use for a given # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. # # Note For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. -EXTENSION_MAPPING = md pl=Prolog +EXTENSION_MAPPING = md \ + pl=Prolog # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable @@ -283,7 +312,7 @@ EXTENSION_MAPPING = md pl=Prolog # case of backward compatibilities issues. # The default value is: YES. -MARKDOWN_SUPPORT = YES +MARKDOWN_SUPPORT = YES # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can @@ -291,7 +320,7 @@ MARKDOWN_SUPPORT = YES # or globally by setting AUTOLINK_SUPPORT to NO. # The default value is: YES. -AUTOLINK_SUPPORT = YES +AUTOLINK_SUPPORT = YES # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should set this @@ -301,13 +330,13 @@ AUTOLINK_SUPPORT = YES # diagrams that involve STL classes more complete and accurate. # The default value is: NO. -BUILTIN_STL_SUPPORT = NO +BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. # The default value is: NO. -CPP_CLI_SUPPORT = NO +CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen @@ -315,7 +344,7 @@ CPP_CLI_SUPPORT = NO # of private inheritance when no explicit protection keyword is present. # The default value is: NO. -SIP_SUPPORT = NO +SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate # getter and setter methods for a property. Setting this option to YES will make @@ -325,7 +354,7 @@ SIP_SUPPORT = NO # should set this option to NO. # The default value is: YES. -IDL_PROPERTY_SUPPORT = YES +IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first @@ -333,7 +362,7 @@ IDL_PROPERTY_SUPPORT = YES # all members of a group must be documented explicitly. # The default value is: NO. -DISTRIBUTE_GROUP_DOC = NO +DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that @@ -342,7 +371,7 @@ DISTRIBUTE_GROUP_DOC = NO # \nosubgrouping command. # The default value is: YES. -SUBGROUPING = YES +SUBGROUPING = YES # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions # are shown inside the group in which they are included (e.g. using \ingroup) @@ -363,7 +392,7 @@ INLINE_GROUPED_CLASSES = NO # Man pages) or section (for LaTeX and RTF). # The default value is: NO. -INLINE_SIMPLE_STRUCTS = NO +INLINE_SIMPLE_STRUCTS = NO # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or # enum is documented as struct, union, or enum with the name of the typedef. So @@ -374,7 +403,7 @@ INLINE_SIMPLE_STRUCTS = NO # types are typedef'ed and only the typedef is referenced, never the tag name. # The default value is: NO. -TYPEDEF_HIDES_STRUCT = NO +TYPEDEF_HIDES_STRUCT = NO # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This # cache is used to resolve symbols given their name and scope. Since this can be @@ -387,7 +416,7 @@ TYPEDEF_HIDES_STRUCT = NO # the optimal cache size from a speed point of view. # Minimum value: 0, maximum value: 9, default value: 0. -LOOKUP_CACHE_SIZE = 0 +LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options @@ -401,25 +430,25 @@ LOOKUP_CACHE_SIZE = 0 # normally produced when WARNINGS is set to YES. # The default value is: NO. -EXTRACT_ALL = YES +EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class will # be included in the documentation. # The default value is: NO. -EXTRACT_PRIVATE = NO +EXTRACT_PRIVATE = NO # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal # scope will be included in the documentation. # The default value is: NO. -EXTRACT_PACKAGE = NO +EXTRACT_PACKAGE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file will be # included in the documentation. # The default value is: NO. -EXTRACT_STATIC = NO +EXTRACT_STATIC = NO # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined # locally in source files will be included in the documentation. If set to NO @@ -427,7 +456,7 @@ EXTRACT_STATIC = NO # for Java sources. # The default value is: YES. -EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local methods, # which are defined in the implementation section but not in the interface are @@ -435,7 +464,7 @@ EXTRACT_LOCAL_CLASSES = YES # included. # The default value is: NO. -EXTRACT_LOCAL_METHODS = NO +EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called @@ -444,7 +473,7 @@ EXTRACT_LOCAL_METHODS = NO # are hidden. # The default value is: NO. -EXTRACT_ANON_NSPACES = NO +EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these @@ -452,7 +481,7 @@ EXTRACT_ANON_NSPACES = NO # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. -HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set @@ -460,28 +489,28 @@ HIDE_UNDOC_MEMBERS = NO # no effect if EXTRACT_ALL is enabled. # The default value is: NO. -HIDE_UNDOC_CLASSES = NO +HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # (class|struct|union) declarations. If set to NO these declarations will be # included in the documentation. # The default value is: NO. -HIDE_FRIEND_COMPOUNDS = NO +HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any # documentation blocks found inside the body of a function. If set to NO these # blocks will be appended to the function's detailed documentation block. # The default value is: NO. -HIDE_IN_BODY_DOCS = NO +HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation that is typed after a # \internal command is included. If the tag is set to NO then the documentation # will be excluded. Set it to YES to include the internal documentation. # The default value is: NO. -INTERNAL_DOCS = NO +INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file # names in lower-case letters. If set to YES upper-case letters are also @@ -490,46 +519,46 @@ INTERNAL_DOCS = NO # and Mac users are advised to set this option to NO. # The default value is: system dependent. -CASE_SENSE_NAMES = NO +CASE_SENSE_NAMES = NO # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES the # scope will be hidden. # The default value is: NO. -HIDE_SCOPE_NAMES = YES +HIDE_SCOPE_NAMES = YES # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. -SHOW_INCLUDE_FILES = YES +SHOW_INCLUDE_FILES = YES # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each # grouped member an include statement to the documentation, telling the reader # which file to include in order to use the member. # The default value is: NO. -SHOW_GROUPED_MEMB_INC = NO +SHOW_GROUPED_MEMB_INC = NO # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. # The default value is: NO. -FORCE_LOCAL_INCLUDES = NO +FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the # documentation for inline members. # The default value is: YES. -INLINE_INFO = YES +INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the # (detailed) documentation of file and class members alphabetically by member # name. If set to NO the members will appear in declaration order. # The default value is: YES. -SORT_MEMBER_DOCS = YES +SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief # descriptions of file, namespace and class members alphabetically by member @@ -537,7 +566,7 @@ SORT_MEMBER_DOCS = YES # this will also influence the order of the classes in the class list. # The default value is: NO. -SORT_BRIEF_DOCS = NO +SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and @@ -556,7 +585,7 @@ SORT_MEMBERS_CTORS_1ST = NO # appear in their defined order. # The default value is: NO. -SORT_GROUP_NAMES = NO +SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will @@ -566,7 +595,7 @@ SORT_GROUP_NAMES = NO # list. # The default value is: NO. -SORT_BY_SCOPE_NAME = NO +SORT_BY_SCOPE_NAME = NO # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between @@ -576,40 +605,40 @@ SORT_BY_SCOPE_NAME = NO # accept a match between prototype and implementation in such cases. # The default value is: NO. -STRICT_PROTO_MATCHING = NO +STRICT_PROTO_MATCHING = NO # The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the # todo list. This list is created by putting \todo commands in the # documentation. # The default value is: YES. -GENERATE_TODOLIST = YES +GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the # test list. This list is created by putting \test commands in the # documentation. # The default value is: YES. -GENERATE_TESTLIST = YES +GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug # list. This list is created by putting \bug commands in the documentation. # The default value is: YES. -GENERATE_BUGLIST = YES +GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) # the deprecated list. This list is created by putting \deprecated commands in # the documentation. # The default value is: YES. -GENERATE_DEPRECATEDLIST = YES +GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond # ... \endcond blocks. -ENABLED_SECTIONS = +ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the # initial value of a variable or macro / define can have for it to appear in the @@ -620,28 +649,28 @@ ENABLED_SECTIONS = # documentation regardless of this setting. # Minimum value: 0, maximum value: 10000, default value: 30. -MAX_INITIALIZER_LINES = 30 +MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at # the bottom of the documentation of classes and structs. If set to YES the list # will mention the files that were used to generate the documentation. # The default value is: YES. -SHOW_USED_FILES = YES +SHOW_USED_FILES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This # will remove the Files entry from the Quick Index and from the Folder Tree View # (if specified). # The default value is: YES. -SHOW_FILES = YES +SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces # page. This will remove the Namespaces entry from the Quick Index and from the # Folder Tree View (if specified). # The default value is: YES. -SHOW_NAMESPACES = YES +SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from @@ -651,7 +680,7 @@ SHOW_NAMESPACES = YES # by doxygen. Whatever the program writes to standard output is used as the file # version. For an example see the documentation. -FILE_VERSION_FILTER = +FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated @@ -664,7 +693,7 @@ FILE_VERSION_FILTER = # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. -LAYOUT_FILE = +LAYOUT_FILE = # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib @@ -675,7 +704,7 @@ LAYOUT_FILE = # search path. Do not use file names with spaces, bibtex cannot handle them. See # also \cite for info how to create references. -CITE_BIB_FILES = docs/yap.bib +CITE_BIB_FILES = docs/yap.bib #--------------------------------------------------------------------------- # Configuration options related to warning and progress messages @@ -686,7 +715,7 @@ CITE_BIB_FILES = docs/yap.bib # messages are off. # The default value is: NO. -QUIET = NO +QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES @@ -695,14 +724,14 @@ QUIET = NO # Tip: Turn warnings on while writing the documentation. # The default value is: YES. -WARNINGS = YES +WARNINGS = YES # If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag # will automatically be disabled. # The default value is: YES. -WARN_IF_UNDOCUMENTED = YES +WARN_IF_UNDOCUMENTED = YES # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some parameters @@ -710,7 +739,7 @@ WARN_IF_UNDOCUMENTED = YES # markup commands wrongly. # The default value is: YES. -WARN_IF_DOC_ERROR = YES +WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return @@ -718,7 +747,7 @@ WARN_IF_DOC_ERROR = YES # documentation, but not about the absence of documentation. # The default value is: NO. -WARN_NO_PARAMDOC = NO +WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that doxygen # can produce. The string should contain the $file, $line, and $text tags, which @@ -728,13 +757,13 @@ WARN_NO_PARAMDOC = NO # FILE_VERSION_FILTER) # The default value is: $file:$line: $text. -WARN_FORMAT = "$file:$line: $text" +WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). -WARN_LOGFILE = +WARN_LOGFILE = #--------------------------------------------------------------------------- # Configuration options related to the input files @@ -746,7 +775,15 @@ WARN_LOGFILE = # spaces. # Note: If this tag is empty the current directory is searched. -INPUT = docs/yap.md pl/absf.yap C/cmppreds.c C/eval.c H/eval.h C/arith0.c C/arith1.c C/arith2.c pl/arithpreds.yap CXX +INPUT = docs/yap.md \ + pl \ + C \ + H \ + include \ + os \ + packages \ + library \ + CXX # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses @@ -755,7 +792,7 @@ INPUT = docs/yap.md pl/absf.yap C/cmppreds.c C/eval.c H/eval.h # possible encodings. # The default value is: UTF-8. -INPUT_ENCODING = UTF-8 +INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and @@ -766,13 +803,57 @@ INPUT_ENCODING = UTF-8 # *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, # *.qsf, *.as and *.js. -FILE_PATTERNS = *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.idl *.ddl *.odl *.h *.h.in *.hh *.hxx *.hpp *.h++ *.cs *.d *.php *.php4 *.php5 *.phtml *.inc *.m *.markdown *.md *.mm *.dox *.py *.f90 *.f *.for *.tcl *.vhd *.vhdl *.ucf *.qsf *.as *.js *.pl *.yap +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.h.in \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.f90 \ + *.f \ + *.for \ + *.tcl \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf \ + *.as \ + *.js \ + *.pl \ + *.yap # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. # The default value is: NO. -RECURSIVE = YES +RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a @@ -781,14 +862,14 @@ RECURSIVE = YES # Note that relative paths are relative to the directory from which doxygen is # run. -EXCLUDE = +EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or # directories that are symbolic links (a Unix file system feature) are excluded # from the input. # The default value is: NO. -EXCLUDE_SYMLINKS = NO +EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude @@ -797,7 +878,7 @@ EXCLUDE_SYMLINKS = NO # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories for example use the pattern */test/* -EXCLUDE_PATTERNS = +EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the @@ -808,33 +889,33 @@ EXCLUDE_PATTERNS = # Note that the wildcards are matched against the file with absolute path, so to # exclude all test directories use the pattern */test/* -EXCLUDE_SYMBOLS = +EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include # command). -EXAMPLE_PATH = +EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and # *.h) to filter out the source-files in the directories. If left blank all # files are included. -EXAMPLE_PATTERNS = * +EXAMPLE_PATTERNS = * # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands # irrespective of the value of the RECURSIVE tag. # The default value is: NO. -EXAMPLE_RECURSIVE = NO +EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or directories # that contain images that are to be included in the documentation (see the # \image command). -IMAGE_PATH = +IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program @@ -851,7 +932,7 @@ IMAGE_PATH = # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. -INPUT_FILTER = +INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the @@ -860,14 +941,14 @@ INPUT_FILTER = # filters are used. If the FILTER_PATTERNS tag is empty or if none of the # patterns match the file name, INPUT_FILTER is applied. -FILTER_PATTERNS = +FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER ) will also be used to filter the input files that are used for # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). # The default value is: NO. -FILTER_SOURCE_FILES = NO +FILTER_SOURCE_FILES = NO # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and @@ -875,7 +956,7 @@ FILTER_SOURCE_FILES = NO # *.ext= (so without naming a filter). # This tag requires that the tag FILTER_SOURCE_FILES is set to YES. -FILTER_SOURCE_PATTERNS = +FILTER_SOURCE_PATTERNS = # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that # is part of the input, its contents will be placed on the main page @@ -895,20 +976,20 @@ USE_MDFILE_AS_MAINPAGE = NO # also VERBATIM_HEADERS is set to NO. # The default value is: NO. -SOURCE_BROWSER = YES +SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, # classes and enums directly into the documentation. # The default value is: NO. -INLINE_SOURCES = YES +INLINE_SOURCES = YES # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any # special comment blocks from generated source code fragments. Normal C, C++ and # Fortran comments will always remain visible. # The default value is: YES. -STRIP_CODE_COMMENTS = YES +STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES then for each documented # function all documented functions referencing it will be listed. @@ -920,7 +1001,7 @@ REFERENCED_BY_RELATION = NO # all documented entities called/used by that function will be listed. # The default value is: NO. -REFERENCES_RELATION = NO +REFERENCES_RELATION = NO # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set # to YES, then the hyperlinks from functions in REFERENCES_RELATION and @@ -938,7 +1019,7 @@ REFERENCES_LINK_SOURCE = YES # The default value is: YES. # This tag requires that the tag SOURCE_BROWSER is set to YES. -SOURCE_TOOLTIPS = YES +SOURCE_TOOLTIPS = YES # If the USE_HTAGS tag is set to YES then the references to source code will # point to the HTML generated by the htags(1) tool instead of doxygen built-in @@ -960,7 +1041,7 @@ SOURCE_TOOLTIPS = YES # The default value is: NO. # This tag requires that the tag SOURCE_BROWSER is set to YES. -USE_HTAGS = NO +USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a # verbatim copy of the header file for each class for which an include is @@ -968,26 +1049,7 @@ USE_HTAGS = NO # See also: Section \class. # The default value is: YES. -VERBATIM_HEADERS = YES - -# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more acurate parsing at the -# cost of reduced performance. This can be particularly helpful with template -# rich C++ code for which doxygen's built-in parser lacks the necessary type -# information. -# Note: The availability of this option depends on whether or not doxygen was -# compiled with the --with-libclang option. -# The default value is: NO. - -CLANG_ASSISTED_PARSING = NO - -# If clang assisted parsing is enabled you can provide the compiler with command -# line options that you would normally use when invoking the compiler. Note that -# the include paths will already be set by doxygen for the files and directories -# specified with INPUT and INCLUDE_PATH. -# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. - -CLANG_OPTIONS = +VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index @@ -998,14 +1060,14 @@ CLANG_OPTIONS = # classes, structs, unions or interfaces. # The default value is: YES. -ALPHABETICAL_INDEX = YES +ALPHABETICAL_INDEX = YES # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in # which the alphabetical index list will be split. # Minimum value: 1, maximum value: 20, default value: 5. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. -COLS_IN_ALPHA_INDEX = 5 +COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag @@ -1013,7 +1075,7 @@ COLS_IN_ALPHA_INDEX = 5 # while generating the index headers. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. -IGNORE_PREFIX = +IGNORE_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the HTML output @@ -1022,7 +1084,7 @@ IGNORE_PREFIX = # If the GENERATE_HTML tag is set to YES doxygen will generate HTML output # The default value is: YES. -GENERATE_HTML = YES +GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of @@ -1030,14 +1092,14 @@ GENERATE_HTML = YES # The default directory is: html. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_OUTPUT = html +HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each # generated HTML page (for example: .htm, .php, .asp). # The default value is: .html. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_FILE_EXTENSION = .html +HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a user-defined HTML header file for # each generated HTML page. If the tag is left blank doxygen will generate a @@ -1057,7 +1119,7 @@ HTML_FILE_EXTENSION = .html # of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_HEADER = +HTML_HEADER = # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each # generated HTML page. If the tag is left blank doxygen will generate a standard @@ -1067,7 +1129,7 @@ HTML_HEADER = # that doxygen normally uses. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_FOOTER = +HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style # sheet that is used by each HTML page. It can be used to fine-tune the look of @@ -1079,7 +1141,7 @@ HTML_FOOTER = # obsolete. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_STYLESHEET = +HTML_STYLESHEET = # The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user- # defined cascading style sheet that is included after the standard style sheets @@ -1090,7 +1152,7 @@ HTML_STYLESHEET = # see the documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_STYLESHEET = +HTML_EXTRA_STYLESHEET = # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note @@ -1100,7 +1162,7 @@ HTML_EXTRA_STYLESHEET = # files will be copied as-is; there are no commands or markers available. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_FILES = +HTML_EXTRA_FILES = # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the stylesheet and background images according to @@ -1111,7 +1173,7 @@ HTML_EXTRA_FILES = # Minimum value: 0, maximum value: 359, default value: 220. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_COLORSTYLE_HUE = 220 +HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors # in the HTML output. For a value of 0 the output will use grayscales only. A @@ -1119,7 +1181,7 @@ HTML_COLORSTYLE_HUE = 220 # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_COLORSTYLE_SAT = 100 +HTML_COLORSTYLE_SAT = 100 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the # luminance component of the colors in the HTML output. Values below 100 @@ -1130,7 +1192,7 @@ HTML_COLORSTYLE_SAT = 100 # Minimum value: 40, maximum value: 240, default value: 80. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_COLORSTYLE_GAMMA = 80 +HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting this @@ -1138,7 +1200,7 @@ HTML_COLORSTYLE_GAMMA = 80 # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_TIMESTAMP = YES +HTML_TIMESTAMP = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the @@ -1146,7 +1208,7 @@ HTML_TIMESTAMP = YES # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_DYNAMIC_SECTIONS = NO +HTML_DYNAMIC_SECTIONS = NO # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand @@ -1173,7 +1235,7 @@ HTML_INDEX_NUM_ENTRIES = 100 # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_DOCSET = NO +GENERATE_DOCSET = NO # This tag determines the name of the docset feed. A documentation feed provides # an umbrella under which multiple documentation sets from a single provider @@ -1181,7 +1243,7 @@ GENERATE_DOCSET = NO # The default value is: Doxygen generated docs. # This tag requires that the tag GENERATE_DOCSET is set to YES. -DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_FEEDNAME = "Doxygen generated docs" # This tag specifies a string that should uniquely identify the documentation # set bundle. This should be a reverse domain-name style string, e.g. @@ -1189,7 +1251,7 @@ DOCSET_FEEDNAME = "Doxygen generated docs" # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_DOCSET is set to YES. -DOCSET_BUNDLE_ID = org.doxygen.Project +DOCSET_BUNDLE_ID = org.doxygen.Project # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style @@ -1197,13 +1259,13 @@ DOCSET_BUNDLE_ID = org.doxygen.Project # The default value is: org.doxygen.Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. -DOCSET_PUBLISHER_ID = org.doxygen.Publisher +DOCSET_PUBLISHER_ID = org.doxygen.Publisher # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. # The default value is: Publisher. # This tag requires that the tag GENERATE_DOCSET is set to YES. -DOCSET_PUBLISHER_NAME = Publisher +DOCSET_PUBLISHER_NAME = Publisher # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The @@ -1221,14 +1283,14 @@ DOCSET_PUBLISHER_NAME = Publisher # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_HTMLHELP = NO +GENERATE_HTMLHELP = NO # The CHM_FILE tag can be used to specify the file name of the resulting .chm # file. You can add a path in front of the file if the result should not be # written to the html output directory. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -CHM_FILE = +CHM_FILE = # The HHC_LOCATION tag can be used to specify the location (absolute path # including file name) of the HTML help compiler ( hhc.exe). If non-empty @@ -1236,34 +1298,35 @@ CHM_FILE = # The file has to be specified with full path. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -HHC_LOCATION = +HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated ( # YES) or that it should be included in the master .chm file ( NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -GENERATE_CHI = NO +GENERATE_CHI = NO # The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) # and project file content. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -CHM_INDEX_ENCODING = +CHM_INDEX_ENCODING = # The BINARY_TOC flag controls whether a binary table of contents is generated ( -# YES) or a normal table of contents ( NO) in the .chm file. +# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -BINARY_TOC = NO +BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members to # the table of contents of the HTML help documentation and to the tree view. # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. -TOC_EXPAND = NO +TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that @@ -1272,14 +1335,14 @@ TOC_EXPAND = NO # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_QHP = NO +GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify # the file name of the resulting .qch file. The path specified is relative to # the HTML output folder. # This tag requires that the tag GENERATE_QHP is set to YES. -QCH_FILE = +QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace @@ -1287,7 +1350,7 @@ QCH_FILE = # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_NAMESPACE = org.doxygen.Project +QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual @@ -1296,7 +1359,7 @@ QHP_NAMESPACE = org.doxygen.Project # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_VIRTUAL_FOLDER = doc +QHP_VIRTUAL_FOLDER = doc # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom @@ -1304,7 +1367,7 @@ QHP_VIRTUAL_FOLDER = doc # filters). # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom @@ -1312,21 +1375,21 @@ QHP_CUST_FILTER_NAME = # filters). # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_CUST_FILTER_ATTRS = +QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this # project's filter section matches. Qt Help Project / Filter Attributes (see: # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). # This tag requires that the tag GENERATE_QHP is set to YES. -QHP_SECT_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = # The QHG_LOCATION tag can be used to specify the location of Qt's # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the # generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. -QHG_LOCATION = +QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be # generated, together with the HTML files, they form an Eclipse help plugin. To @@ -1338,7 +1401,7 @@ QHG_LOCATION = # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_ECLIPSEHELP = NO +GENERATE_ECLIPSEHELP = NO # A unique identifier for the Eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have this @@ -1346,7 +1409,7 @@ GENERATE_ECLIPSEHELP = NO # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. -ECLIPSE_DOC_ID = org.doxygen.Project +ECLIPSE_DOC_ID = org.doxygen.Project # If you want full control over the layout of the generated HTML pages it might # be necessary to disable the index and replace it with your own. The @@ -1357,7 +1420,7 @@ ECLIPSE_DOC_ID = org.doxygen.Project # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -DISABLE_INDEX = NO +DISABLE_INDEX = NO # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. If the tag @@ -1374,7 +1437,7 @@ DISABLE_INDEX = NO # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_TREEVIEW = YES +GENERATE_TREEVIEW = YES # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. @@ -1384,21 +1447,21 @@ GENERATE_TREEVIEW = YES # Minimum value: 0, maximum value: 20, default value: 4. # This tag requires that the tag GENERATE_HTML is set to YES. -ENUM_VALUES_PER_LINE = 4 +ENUM_VALUES_PER_LINE = 4 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used # to set the initial width (in pixels) of the frame in which the tree is shown. # Minimum value: 0, maximum value: 1500, default value: 250. # This tag requires that the tag GENERATE_HTML is set to YES. -TREEVIEW_WIDTH = 250 +TREEVIEW_WIDTH = 250 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to # external symbols imported via tag files in a separate window. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -EXT_LINKS_IN_WINDOW = NO +EXT_LINKS_IN_WINDOW = NO # Use this tag to change the font size of LaTeX formulas included as images in # the HTML documentation. When you change the font size after a successful @@ -1407,7 +1470,7 @@ EXT_LINKS_IN_WINDOW = NO # Minimum value: 8, maximum value: 50, default value: 10. # This tag requires that the tag GENERATE_HTML is set to YES. -FORMULA_FONTSIZE = 10 +FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images # generated for formulas are transparent PNGs. Transparent PNGs are not @@ -1418,7 +1481,7 @@ FORMULA_FONTSIZE = 10 # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. -FORMULA_TRANSPARENT = YES +FORMULA_TRANSPARENT = YES # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see # http://www.mathjax.org) which uses client side Javascript for the rendering @@ -1429,7 +1492,7 @@ FORMULA_TRANSPARENT = YES # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -USE_MATHJAX = NO +USE_MATHJAX = NO # When MathJax is enabled you can set the default output format to be used for # the MathJax output. See the MathJax site (see: @@ -1439,7 +1502,7 @@ USE_MATHJAX = NO # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_FORMAT = HTML-CSS +MATHJAX_FORMAT = HTML-CSS # When MathJax is enabled you need to specify the location relative to the HTML # output directory using the MATHJAX_RELPATH option. The destination directory @@ -1452,14 +1515,14 @@ MATHJAX_FORMAT = HTML-CSS # The default value is: http://cdn.mathjax.org/mathjax/latest. # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_EXTENSIONS = +MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site @@ -1467,7 +1530,7 @@ MATHJAX_EXTENSIONS = # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_CODEFILE = +MATHJAX_CODEFILE = # When the SEARCHENGINE tag is enabled doxygen will generate a search box for # the HTML output. The underlying search engine uses javascript and DHTML and @@ -1488,19 +1551,19 @@ MATHJAX_CODEFILE = # The default value is: YES. # This tag requires that the tag GENERATE_HTML is set to YES. -SEARCHENGINE = YES +SEARCHENGINE = YES # When the SERVER_BASED_SEARCH tag is enabled the search engine will be # implemented using a web server instead of a web client using Javascript. There -# are two flavours of web server based searching depending on the -# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for -# searching and an index file used by the script. When EXTERNAL_SEARCH is -# enabled the indexing and searching needs to be provided by external tools. See -# the section "External Indexing and Searching" for details. +# are two flavors of web server based searching depending on the EXTERNAL_SEARCH +# setting. When disabled, doxygen will generate a PHP script for searching and +# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing +# and searching needs to be provided by external tools. See the section +# "External Indexing and Searching" for details. # The default value is: NO. # This tag requires that the tag SEARCHENGINE is set to YES. -SERVER_BASED_SEARCH = NO +SERVER_BASED_SEARCH = NO # When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP # script for searching. Instead the search results are written to an XML file @@ -1516,7 +1579,7 @@ SERVER_BASED_SEARCH = NO # The default value is: NO. # This tag requires that the tag SEARCHENGINE is set to YES. -EXTERNAL_SEARCH = NO +EXTERNAL_SEARCH = NO # The SEARCHENGINE_URL should point to a search engine hosted by a web server # which will return the search results when EXTERNAL_SEARCH is enabled. @@ -1527,7 +1590,7 @@ EXTERNAL_SEARCH = NO # Searching" for details. # This tag requires that the tag SEARCHENGINE is set to YES. -SEARCHENGINE_URL = +SEARCHENGINE_URL = # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed # search data is written to a file for indexing by an external tool. With the @@ -1535,7 +1598,7 @@ SEARCHENGINE_URL = # The default file is: searchdata.xml. # This tag requires that the tag SEARCHENGINE is set to YES. -SEARCHDATA_FILE = searchdata.xml +SEARCHDATA_FILE = searchdata.xml # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the # EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is @@ -1543,7 +1606,7 @@ SEARCHDATA_FILE = searchdata.xml # projects and redirect the results back to the right project. # This tag requires that the tag SEARCHENGINE is set to YES. -EXTERNAL_SEARCH_ID = +EXTERNAL_SEARCH_ID = # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen # projects other than the one defined by this configuration file, but that are @@ -1553,7 +1616,7 @@ EXTERNAL_SEARCH_ID = # EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... # This tag requires that the tag SEARCHENGINE is set to YES. -EXTRA_SEARCH_MAPPINGS = +EXTRA_SEARCH_MAPPINGS = #--------------------------------------------------------------------------- # Configuration options related to the LaTeX output @@ -1562,7 +1625,7 @@ EXTRA_SEARCH_MAPPINGS = # If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output. # The default value is: YES. -GENERATE_LATEX = YES +GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of @@ -1570,7 +1633,7 @@ GENERATE_LATEX = YES # The default directory is: latex. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_OUTPUT = latex +LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. @@ -1581,14 +1644,14 @@ LATEX_OUTPUT = latex # The default file is: latex. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_CMD_NAME = latex +LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate # index for LaTeX. # The default file is: makeindex. # This tag requires that the tag GENERATE_LATEX is set to YES. -MAKEINDEX_CMD_NAME = makeindex +MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX # documents. This may be useful for small projects and may help to save some @@ -1596,7 +1659,7 @@ MAKEINDEX_CMD_NAME = makeindex # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. -COMPACT_LATEX = NO +COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used by the # printer. @@ -1605,7 +1668,7 @@ COMPACT_LATEX = NO # The default value is: a4. # This tag requires that the tag GENERATE_LATEX is set to YES. -PAPER_TYPE = a4 +PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names # that should be included in the LaTeX output. To get the times font for @@ -1614,7 +1677,7 @@ PAPER_TYPE = a4 # If left blank no extra packages will be included. # This tag requires that the tag GENERATE_LATEX is set to YES. -EXTRA_PACKAGES = +EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for the # generated LaTeX document. The header should contain everything until the first @@ -1624,22 +1687,24 @@ EXTRA_PACKAGES = # # Note: Only use a user-defined header if you know what you are doing! The # following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will -# replace them by respectively the title of the page, the current date and time, -# only the current date, the version number of doxygen, the project name (see -# PROJECT_NAME), or the project number (see PROJECT_NUMBER). +# $datetime, $date, $doxygenversion, $projectname, $projectnumber, +# $projectbrief, $projectlogo. Doxygen will replace $title with the empy string, +# for the replacement values of the other commands the user is refered to +# HTML_HEADER. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_HEADER = +LATEX_HEADER = # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the # generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. +# chapter. If it is left blank doxygen will generate a standard footer. See +# LATEX_HEADER for more information on how to generate a default footer and what +# special commands can be used inside the footer. # # Note: Only use a user-defined footer if you know what you are doing! # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_FOOTER = +LATEX_FOOTER = # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the LATEX_OUTPUT output @@ -1647,7 +1712,7 @@ LATEX_FOOTER = # markers available. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_EXTRA_FILES = +LATEX_EXTRA_FILES = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is # prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will @@ -1656,7 +1721,7 @@ LATEX_EXTRA_FILES = # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. -PDF_HYPERLINKS = YES +PDF_HYPERLINKS = YES # If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate # the PDF file directly from the LaTeX files. Set this option to YES to get a @@ -1664,7 +1729,7 @@ PDF_HYPERLINKS = YES # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. -USE_PDFLATEX = YES +USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode # command to the generated LaTeX files. This will instruct LaTeX to keep running @@ -1673,14 +1738,14 @@ USE_PDFLATEX = YES # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_BATCHMODE = NO +LATEX_BATCHMODE = NO # If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the # index chapters (such as File Index, Compound Index, etc.) in the output. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_HIDE_INDICES = NO +LATEX_HIDE_INDICES = NO # If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source # code with syntax highlighting in the LaTeX output. @@ -1690,7 +1755,7 @@ LATEX_HIDE_INDICES = NO # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_SOURCE_CODE = NO +LATEX_SOURCE_CODE = NO # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See @@ -1698,7 +1763,7 @@ LATEX_SOURCE_CODE = NO # The default value is: plain. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_BIB_STYLE = plain +LATEX_BIB_STYLE = plain #--------------------------------------------------------------------------- # Configuration options related to the RTF output @@ -1709,7 +1774,7 @@ LATEX_BIB_STYLE = plain # readers/editors. # The default value is: NO. -GENERATE_RTF = NO +GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of @@ -1717,7 +1782,7 @@ GENERATE_RTF = NO # The default directory is: rtf. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_OUTPUT = rtf +RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF # documents. This may be useful for small projects and may help to save some @@ -1725,7 +1790,7 @@ RTF_OUTPUT = rtf # The default value is: NO. # This tag requires that the tag GENERATE_RTF is set to YES. -COMPACT_RTF = NO +COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will # contain hyperlink fields. The RTF file will contain links (just like the HTML @@ -1737,7 +1802,7 @@ COMPACT_RTF = NO # The default value is: NO. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_HYPERLINKS = NO +RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's config # file, i.e. a series of assignments. You only have to provide replacements, @@ -1747,14 +1812,14 @@ RTF_HYPERLINKS = NO # default style sheet that doxygen normally uses. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_STYLESHEET_FILE = +RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an RTF document. Syntax is # similar to doxygen's config file. A template extensions file can be generated # using doxygen -e rtf extensionFile. # This tag requires that the tag GENERATE_RTF is set to YES. -RTF_EXTENSIONS_FILE = +RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # Configuration options related to the man page output @@ -1764,7 +1829,7 @@ RTF_EXTENSIONS_FILE = # classes and files. # The default value is: NO. -GENERATE_MAN = YES +GENERATE_MAN = YES # The MAN_OUTPUT tag is used to specify where the man pages will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of @@ -1773,7 +1838,7 @@ GENERATE_MAN = YES # The default directory is: man. # This tag requires that the tag GENERATE_MAN is set to YES. -MAN_OUTPUT = man +MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to the generated # man pages. In case the manual section does not start with a number, the number @@ -1782,7 +1847,14 @@ MAN_OUTPUT = man # The default value is: .3. # This tag requires that the tag GENERATE_MAN is set to YES. -MAN_EXTENSION = .3 +MAN_EXTENSION = .3 + +# The MAN_SUBDIR tag determines the name of the directory created within +# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by +# MAN_EXTENSION with the initial . removed. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_SUBDIR = # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it # will generate one additional man file for each entity documented in the real @@ -1791,7 +1863,7 @@ MAN_EXTENSION = .3 # The default value is: NO. # This tag requires that the tag GENERATE_MAN is set to YES. -MAN_LINKS = NO +MAN_LINKS = NO #--------------------------------------------------------------------------- # Configuration options related to the XML output @@ -1801,7 +1873,7 @@ MAN_LINKS = NO # captures the structure of the code including all documentation. # The default value is: NO. -GENERATE_XML = YES +GENERATE_XML = YES # The XML_OUTPUT tag is used to specify where the XML pages will be put. If a # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of @@ -1809,19 +1881,7 @@ GENERATE_XML = YES # The default directory is: xml. # This tag requires that the tag GENERATE_XML is set to YES. -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify a XML schema, which can be used by a -# validating XML parser to check the syntax of the XML files. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify a XML DTD, which can be used by a -# validating XML parser to check the syntax of the XML files. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_DTD = +XML_OUTPUT = xml # If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program # listings (including syntax highlighting and cross-referencing information) to @@ -1830,7 +1890,7 @@ XML_DTD = # The default value is: YES. # This tag requires that the tag GENERATE_XML is set to YES. -XML_PROGRAMLISTING = YES +XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # Configuration options related to the DOCBOOK output @@ -1840,7 +1900,7 @@ XML_PROGRAMLISTING = YES # that can be used to generate PDF. # The default value is: NO. -GENERATE_DOCBOOK = NO +GENERATE_DOCBOOK = NO # The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be put in @@ -1848,7 +1908,7 @@ GENERATE_DOCBOOK = NO # The default directory is: docbook. # This tag requires that the tag GENERATE_DOCBOOK is set to YES. -DOCBOOK_OUTPUT = docbook +DOCBOOK_OUTPUT = docbook #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output @@ -1860,7 +1920,7 @@ DOCBOOK_OUTPUT = docbook # experimental and incomplete at the moment. # The default value is: NO. -GENERATE_AUTOGEN_DEF = NO +GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # Configuration options related to the Perl module output @@ -1872,7 +1932,7 @@ GENERATE_AUTOGEN_DEF = NO # Note that this feature is still experimental and incomplete at the moment. # The default value is: NO. -GENERATE_PERLMOD = NO +GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI @@ -1880,7 +1940,7 @@ GENERATE_PERLMOD = NO # The default value is: NO. # This tag requires that the tag GENERATE_PERLMOD is set to YES. -PERLMOD_LATEX = NO +PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely # formatted so it can be parsed by a human reader. This is useful if you want to @@ -1890,7 +1950,7 @@ PERLMOD_LATEX = NO # The default value is: YES. # This tag requires that the tag GENERATE_PERLMOD is set to YES. -PERLMOD_PRETTY = YES +PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file are # prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful @@ -1898,7 +1958,7 @@ PERLMOD_PRETTY = YES # overwrite each other's variables. # This tag requires that the tag GENERATE_PERLMOD is set to YES. -PERLMOD_MAKEVAR_PREFIX = +PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor @@ -1908,7 +1968,7 @@ PERLMOD_MAKEVAR_PREFIX = # C-preprocessor directives found in the sources and include files. # The default value is: YES. -ENABLE_PREPROCESSING = YES +ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names # in the source code. If set to NO only conditional compilation will be @@ -1917,7 +1977,7 @@ ENABLE_PREPROCESSING = YES # The default value is: NO. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -MACRO_EXPANSION = NO +MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then # the macro expansion is limited to the macros specified with the PREDEFINED and @@ -1925,21 +1985,21 @@ MACRO_EXPANSION = NO # The default value is: NO. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -EXPAND_ONLY_PREDEF = NO +EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES the includes files in the # INCLUDE_PATH will be searched if a #include is found. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -SEARCH_INCLUDES = YES +SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by the # preprocessor. # This tag requires that the tag SEARCH_INCLUDES is set to YES. -INCLUDE_PATH = +INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the @@ -1947,7 +2007,7 @@ INCLUDE_PATH = # used. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -INCLUDE_FILE_PATTERNS = +INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that are # defined before the preprocessor is started (similar to the -D option of e.g. @@ -1957,7 +2017,7 @@ INCLUDE_FILE_PATTERNS = # recursively expanded use the := operator instead of the = operator. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -PREDEFINED = +PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The @@ -1966,17 +2026,17 @@ PREDEFINED = # definition found in the source code. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -EXPAND_AS_DEFINED = +EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will -# remove all refrences to function-like macros that are alone on a line, have an -# all uppercase name, and do not end with a semicolon. Such function macros are -# typically used for boiler-plate code, and will confuse the parser if not +# remove all references to function-like macros that are alone on a line, have +# an all uppercase name, and do not end with a semicolon. Such function macros +# are typically used for boiler-plate code, and will confuse the parser if not # removed. # The default value is: YES. # This tag requires that the tag ENABLE_PREPROCESSING is set to YES. -SKIP_FUNCTION_MACROS = YES +SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration options related to external references @@ -1991,43 +2051,43 @@ SKIP_FUNCTION_MACROS = YES # where loc1 and loc2 can be relative or absolute paths or URLs. See the # section "Linking to external documentation" for more information about the use # of tag files. -# Note: Each tag file must have an unique name (where the name does NOT include +# Note: Each tag file must have a unique name (where the name does NOT include # the path). If a tag file is not located in the directory in which doxygen is # run, you must also specify the path to the tagfile here. -TAGFILES = +TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create a # tag file that is based on the input files it reads. See section "Linking to # external documentation" for more information about the usage of tag files. -GENERATE_TAGFILE = +GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external class will be listed in the # class index. If set to NO only the inherited external classes will be listed. # The default value is: NO. -ALLEXTERNALS = NO +ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in # the modules index. If set to NO, only the current project's groups will be # listed. # The default value is: YES. -EXTERNAL_GROUPS = YES +EXTERNAL_GROUPS = YES # If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in # the related pages index. If set to NO, only the current project's pages will # be listed. # The default value is: YES. -EXTERNAL_PAGES = YES +EXTERNAL_PAGES = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of 'which perl'). # The default file (with absolute path) is: /usr/bin/perl. -PERL_PATH = /usr/bin/perl +PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool @@ -2040,7 +2100,7 @@ PERL_PATH = /usr/bin/perl # powerful graphs. # The default value is: YES. -CLASS_DIAGRAMS = NO +CLASS_DIAGRAMS = NO # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see: @@ -2049,20 +2109,20 @@ CLASS_DIAGRAMS = NO # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. -MSCGEN_PATH = +MSCGEN_PATH = # You can include diagrams made with dia in doxygen documentation. Doxygen will # then run dia to produce the diagram and insert it in the documentation. The # DIA_PATH tag allows you to specify the directory where the dia binary resides. # If left empty dia is assumed to be found in the default search path. -DIA_PATH = +DIA_PATH = # If set to YES, the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. # The default value is: YES. -HIDE_UNDOC_RELATIONS = YES +HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz (see: @@ -2071,7 +2131,7 @@ HIDE_UNDOC_RELATIONS = YES # set to NO # The default value is: NO. -HAVE_DOT = YES +HAVE_DOT = NO # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed # to run in parallel. When set to 0 doxygen will base this on the number of @@ -2081,7 +2141,7 @@ HAVE_DOT = YES # Minimum value: 0, maximum value: 32, default value: 0. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_NUM_THREADS = 0 +DOT_NUM_THREADS = 0 # When you want a differently looking font n the dot files that doxygen # generates you can specify the font name using DOT_FONTNAME. You need to make @@ -2091,21 +2151,21 @@ DOT_NUM_THREADS = 0 # The default value is: Helvetica. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTNAME = Helvetica +DOT_FONTNAME = Helvetica # The DOT_FONTSIZE tag can be used to set the size (in points) of the font of # dot graphs. # Minimum value: 4, maximum value: 24, default value: 10. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTSIZE = 10 +DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the default font as specified with # DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set # the path where dot can find it using this tag. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTPATH = +DOT_FONTPATH = # If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for # each documented class showing the direct and indirect inheritance relations. @@ -2113,7 +2173,7 @@ DOT_FONTPATH = # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. -CLASS_GRAPH = YES +CLASS_GRAPH = YES # If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a # graph for each documented class showing the direct and indirect implementation @@ -2122,14 +2182,14 @@ CLASS_GRAPH = YES # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. -COLLABORATION_GRAPH = YES +COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for # groups, showing the direct groups dependencies. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. -GROUP_GRAPHS = YES +GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling @@ -2137,7 +2197,7 @@ GROUP_GRAPHS = YES # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. -UML_LOOK = NO +UML_LOOK = NO # If the UML_LOOK tag is enabled, the fields and methods are shown inside the # class node. If there are many fields or methods and many nodes the graph may @@ -2150,7 +2210,7 @@ UML_LOOK = NO # Minimum value: 0, maximum value: 100, default value: 10. # This tag requires that the tag HAVE_DOT is set to YES. -UML_LIMIT_NUM_FIELDS = 10 +UML_LIMIT_NUM_FIELDS = 10 # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and # collaboration graphs will show the relations between templates and their @@ -2158,7 +2218,7 @@ UML_LIMIT_NUM_FIELDS = 10 # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. -TEMPLATE_RELATIONS = NO +TEMPLATE_RELATIONS = NO # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to # YES then doxygen will generate a graph for each documented file showing the @@ -2167,7 +2227,7 @@ TEMPLATE_RELATIONS = NO # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. -INCLUDE_GRAPH = YES +INCLUDE_GRAPH = YES # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are # set to YES then doxygen will generate a graph for each documented file showing @@ -2176,7 +2236,7 @@ INCLUDE_GRAPH = YES # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. -INCLUDED_BY_GRAPH = YES +INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH tag is set to YES then doxygen will generate a call # dependency graph for every global function or class method. @@ -2187,7 +2247,7 @@ INCLUDED_BY_GRAPH = YES # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. -CALL_GRAPH = YES +CALL_GRAPH = YES # If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller # dependency graph for every global function or class method. @@ -2198,14 +2258,14 @@ CALL_GRAPH = YES # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. -CALLER_GRAPH = NO +CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical # hierarchy of all classes instead of a textual one. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. -GRAPHICAL_HIERARCHY = YES +GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the # dependencies a directory has on other directories in a graphical way. The @@ -2214,7 +2274,7 @@ GRAPHICAL_HIERARCHY = YES # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. -DIRECTORY_GRAPH = YES +DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. @@ -2225,7 +2285,7 @@ DIRECTORY_GRAPH = YES # The default value is: png. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_IMAGE_FORMAT = png +DOT_IMAGE_FORMAT = png # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to # enable generation of interactive SVG images that allow zooming and panning. @@ -2237,32 +2297,32 @@ DOT_IMAGE_FORMAT = png # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. -INTERACTIVE_SVG = NO +INTERACTIVE_SVG = NO # The DOT_PATH tag can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_PATH = +DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the \dotfile # command). # This tag requires that the tag HAVE_DOT is set to YES. -DOTFILE_DIRS = +DOTFILE_DIRS = # The MSCFILE_DIRS tag can be used to specify one or more directories that # contain msc files that are included in the documentation (see the \mscfile # command). -MSCFILE_DIRS = +MSCFILE_DIRS = # The DIAFILE_DIRS tag can be used to specify one or more directories that # contain dia files that are included in the documentation (see the \diafile # command). -DIAFILE_DIRS = +DIAFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes # that will be shown in the graph. If the number of nodes in a graph becomes @@ -2274,7 +2334,7 @@ DIAFILE_DIRS = # Minimum value: 0, maximum value: 10000, default value: 50. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_GRAPH_MAX_NODES = 50 +DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs # generated by dot. A depth value of 3 means that only nodes reachable from the @@ -2286,7 +2346,7 @@ DOT_GRAPH_MAX_NODES = 50 # Minimum value: 0, maximum value: 1000, default value: 0. # This tag requires that the tag HAVE_DOT is set to YES. -MAX_DOT_GRAPH_DEPTH = 0 +MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not seem @@ -2298,7 +2358,7 @@ MAX_DOT_GRAPH_DEPTH = 0 # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_TRANSPARENT = NO +DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This @@ -2307,7 +2367,7 @@ DOT_TRANSPARENT = NO # The default value is: NO. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_MULTI_TARGETS = NO +DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page # explaining the meaning of the various boxes and arrows in the dot generated @@ -2315,11 +2375,11 @@ DOT_MULTI_TARGETS = NO # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. -GENERATE_LEGEND = YES +GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot # files that are used to generate the various graphs. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_CLEANUP = YES +DOT_CLEANUP = YES diff --git a/docs/texi2doxy b/docs/texi2doxy index 45d4c4adb..6cbc0cb9f 100644 --- a/docs/texi2doxy +++ b/docs/texi2doxy @@ -10,7 +10,7 @@ :- initialization(main). -:- dynamic val/2, item/2, last_node/2, indent/1. +:- dynamic val/2, item/2, last_node/2, indent/1, pred/4. get_arg( Inp, Out ) :- unix( argv( [Inp, Out] ) ), !. @@ -69,7 +69,8 @@ scan_file( Inp ) :- item( Item0 , ItLines ), atom_string(A2, Item0), cvt_slash( Pred, Key ), - assert_static( pred( A1, Key, A2, Inp:ItLines ) ), + \+ pred(_, Key, _, _ ), + assert( pred( A1, Key, A2, Inp:ItLines ) ), fail ; % look for predicates @@ -281,12 +282,12 @@ process("@item", Line, Rest, NewLine , FilePos) :- ( Env = "@table", atom_string( A, Line ), - pred( _Pred, Key, A, FilePos ) + pred( _Pred, _Key, A, FilePos ) -> push( list, it(Env, Item, Pos, NNumb) ), ( % sendout the comand - format(string(NewLine), '~t~s ~*+
  • ~s @anchor ~a', [Marker, Pos1, First, Key]), + format(string(NewLine), '~t~s ~*+
  • ~s @anchor ~a', [Marker, Pos1, First, _Key]), push( indent, done ) ; NewLine = force @@ -601,8 +602,8 @@ simplify( [0'q,0'Q|L]) --> "=", !, simplify(L). simplify( [0'q,0'U|L]) --> "?", !, simplify(L). -simplify( [0'_|L]) --> "/", !, - simplify(L). +simplify( [] ) --> "/", + number, !. simplify( [0's,0'S|L]) --> "<", !, simplify(L). simplify( [0'u,0'U|L]) --> "\v", !, @@ -627,6 +628,11 @@ simplify( L) --> [_], !, simplify(L). simplify( []) --> []. +number --> []. +number --> [C], + { C >= "0" , C =< "9" }, + number. + first_word(Line, Word, Rest) :- jmp_blanks( Line, Line2 ), diff --git a/docs/yap.tex b/docs/yap.tex index 3f5f1d08b..6ad193332 100644 --- a/docs/yap.tex +++ b/docs/yap.tex @@ -6830,6 +6830,7 @@ attributes from other known solvers/modules via the module prefix in * CLPR Non-linear Constraints:: @end menu + @include clpr.tex @node CHR, Logtalk, CLPR, Top @@ -6856,7 +6857,7 @@ systems or by using the @code{Logtalk - YAP} shortcut in the Logtalk program group in the Start Menu on Windows systems. For more information please see the URL @url{http://logtalk.org/}. -@node MYDDAS, Threads, Logtalk, Extensions +@node MYDDAS, Real, Logtalk, Extensions @section MYDDAS @cindex MYDDAS @@ -7608,8 +7609,18 @@ action, report an error, we could use the following SQL mode. You can see the available SQL Modes at the MySQL homepage at @url{http://www.mysql.org}. -@node Threads, Parallelism, MYDDAS, Extensions -@section Threads +@node Real, Threads, MYDDAS, Extensions + +@chapter Real:: Talking to the R language + +@ifplaintext + +@copydoc real + +@end ifplaintext + +@node Threads, Parallelism, Real, Extensions +@chapter Threads YAP implements a SWI-Prolog compatible multithreading library. Like in SWI-Prolog, Prolog threads have their own stacks and @@ -9006,9 +9017,9 @@ being designed to work with the swig (@url(www.swig.org}) interface compiler.
    • The original YAP C-interface exports the YAP engine.
    • -
    • The @subpage swi-c-interface emulates Jan Wielemaker's SWI foreign language interface. +
    • The @ref swi-c-interface emulates Jan Wielemaker's SWI foreign language interface.
    • -
    • The @subpage yap-cplus-interface is desiged to interface with Object-Oriented systems. +
    • The @ref yap-cplus-interface is desiged to interface with Object-Oriented systems.
    @end ifplaintext diff --git a/library/dialect/swi/fli/blobs.c b/library/dialect/swi/fli/blobs.c index d59393193..537c840cc 100644 --- a/library/dialect/swi/fli/blobs.c +++ b/library/dialect/swi/fli/blobs.c @@ -14,6 +14,14 @@ * * * * *************************************************************************/ +/** + * + * @file blobs.c + * + * @addtogroup swi-c-interface + * + * @{ + */ #include #include @@ -248,3 +256,7 @@ Yap_install_blobs(void) { } + +/** + * @} + */ diff --git a/library/dialect/swi/fli/swi.c b/library/dialect/swi/fli/swi.c index 3444f7c46..79ec09c0b 100755 --- a/library/dialect/swi/fli/swi.c +++ b/library/dialect/swi/fli/swi.c @@ -5,29 +5,17 @@ * Email: steve.moyle@comlab.ox.ac.uk * Date: 21 January 2002 - * Copyright (c) 2002 Steve Moyle. All rights reserved. + * Copyright (c) 2002-2014 Vitor Santos Costa from an original version by Steve Moyle. All rights reserved. */ /** * - * @defgroup swi-c-interface SWI-Prolog Foreign Language Interface. + * @file swi.c * + * @addtogroup swi-c-interface * - * @tableofcontents - * - * A reimplementation of Jan Wielemaker's SWI-Prolog C-language interface, it supports - * most of the functionality in the original implementation. It allows for: - * - * - Term Construction, Access, and Unification - * - Manipulation of Atoms, Strings, Lists of Codes and Lists of Atoms - * - Query evaluation - * - Thread and Prolog engine management - * - Data-Base Access - * - * In this interface, all Prolog data known by C is referenced through term references (term_t), hence - * Prolog has all the information necessary to perform its memory management without special precautions - * from the C programmer. + * @{ */ #define PL_KERNEL 1 @@ -3267,3 +3255,8 @@ int WINAPI win_yap2swi(HANDLE hinst, DWORD reason, LPVOID reserved) } #endif +/** + * @} + * @} + */ + diff --git a/library/dialect/swi/fli/swi.h b/library/dialect/swi/fli/swi.h index 3dcec4810..9da2d6469 100644 --- a/library/dialect/swi/fli/swi.h +++ b/library/dialect/swi/fli/swi.h @@ -1,3 +1,37 @@ +/************************************************************************* +* * +* YAP Prolog * +* * +* Yap Prolog was developed at NCCUP - Universidade do Porto * +* * +* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-2014 * +* * +*************************************************************************/ + +/** + @file swi.h + + @defgroup swi-c-interface SWI-Prolog Foreign Language Interface + + * + * @tableofcontents + * + * A reimplementation of Jan Wielemaker's SWI-Prolog C-language interface, it supports + * most of the functionality in the original implementation. It allows for: + * + * - Term Construction, Access, and Unification + * - Manipulation of Atoms, Strings, Lists of Codes and Lists of Atoms + * - Query evaluation + * - Thread and Prolog engine management + * - Data-Base Access + * + * In this interface, all Prolog data known by C is referenced through term references (term_t), hence + * Prolog has all the information necessary to perform its memory management without special precautions + * from the C programmer. + + @{ + + */ void Yap_swi_install(void); void Yap_install_blobs(void); @@ -61,3 +95,7 @@ FunctorToSWIFunctor(Functor at) } #define isDefinedProcedure(pred) TRUE // TBD + +/** + @} +*/ diff --git a/packages/real b/packages/real index 10fd754c6..ed5039a28 160000 --- a/packages/real +++ b/packages/real @@ -1 +1 @@ -Subproject commit 10fd754c6561313835d4e1ff557d654b3225365e +Subproject commit ed5039a28f03b2a8ceb4182c269fa2ca324b6ce4 diff --git a/packages/swig/Makefile.in b/packages/swig/Makefile.in index d272e7fe4..02b45fb93 100644 --- a/packages/swig/Makefile.in +++ b/packages/swig/Makefile.in @@ -28,16 +28,16 @@ python/yap_wrap.c: $(srcdir)/yap.i python/yap_wrap.o: python/yap_wrap.c $(CXX) -c $(CXXFLAGS) @PYTHON_INCLUDES@ $< -o $@ -java: java/libyap.@SO@ java/yap.java +java: jni/libyap.@SO@ java/yap.java cd java ; $(JAVAC) *.java; $(JAR) cvf yap.jar *.class -java/libyap.@SO@: jni/yap_wrap.o - $(CXX) -shared $(LDSOFLAGS) -L ../.. -lYap -o java/libyap.@SO@ ../../yapi.o java/yap_wrap.o $(LIBS) @JPLLDFLAGS@ -L ../.. -lYap -lpthread +jni/libyap.@SO@: jni/yap_wrap.o + $(CXX) -shared $(LDSOFLAGS) -L ../.. -lYap -o $@ ../../yapi.o $< $(LIBS) @JPLLDFLAGS@ -L ../.. -lYap -lpthread jni/yap_wrap.c: $(srcdir)/yap.i - $(SWIG) -c++ -java -package pt.up.fc.dcc.yap -outdir src/pt/up/fc/dcc/yap -o $@ $(DEFS) $(CPPFLAGS) -Wall $< + $(SWIG) -c++ -java -package pt.up.fc.dcc.yap -outdir java -o $@ $(DEFS) $(CPPFLAGS) -Wall $< -java/yap_wrap.o: java/yap_wrap.c +jni/yap_wrap.o: jni/yap_wrap.c $(CXX) -c $(CXXFLAGS) @JPLCFLAGS@ $< -o $@ R: diff --git a/packages/swig/configure.in b/packages/swig/configure.in index 05b844309..f3a930055 100644 --- a/packages/swig/configure.in +++ b/packages/swig/configure.in @@ -16,7 +16,7 @@ if test "$yap_cv_swig" = "no"; then PKG_SWIG="" elif test -e "$srcdir"/packages/swig/Makefile.in ; then SWIG_TARGET="all" - PKG_SWIG="swig" + PKG_SWIG="packages/swig" fi if test "$PKG_SWIG" != ""; then diff --git a/pl/checker.yap b/pl/checker.yap index 925544e1c..1b3ed2bb6 100644 --- a/pl/checker.yap +++ b/pl/checker.yap @@ -137,7 +137,6 @@ style_check_(+charset) :- style_check_(-charset) :- '$style_checker'( [ -charset ] ). style_check_('?'(Info) ) :- - '$style_checker '( [ L ] ), lists:member( Style, [ singleton, discontiguous, multiple ] ), ( lists:member(Style, L ) -> Info = +Style ; Info = -Style ). style_check_([]). diff --git a/pl/consult.yap b/pl/consult.yap index 517dea81a..3ccbc7dcf 100755 --- a/pl/consult.yap +++ b/pl/consult.yap @@ -376,19 +376,28 @@ use_module(M,F,Is) :- '$use_module'(M,F,Is). '$use_module'(M,F,Is) :- - var(Is), !, - '$use_module'(M,F,all). -'$use_module'(M,F,Is) :- nonvar(M), !, + var(Is), !, + '$use_module'(M,F,all). +'$use_module'(M,F,Is) :- + nonvar(F), !, + strip_module(F, M0, F0), + '$load_files'(M0:F0, [if(not_loaded),must_be_module(true),imports(Is)], use_module(M,F,Is)), + ( var(M) -> true + ; + absolute_file_name( F0, F1, [expand(true),file_type(prolog)] ), + recorded('$module','$module'(F1,M,_,_),_) + ). +'$use_module'(M,F,Is) :- + nonvar(M), !, + strip_module(F, M0, F0), ( recorded('$module','$module'(F1,M,_,_),_) -> - '$load_files'(F1, [if(not_loaded),must_be_module(true),imports(Is)], use_module(M,F,Is)) + '$load_files'(M0:F1, [if(not_loaded),must_be_module(true),imports(Is)], use_module(M,F,Is)) ), - strip_module(F, _, F0), - (var(F0) -> F0 = F1 ; absolute_file_name( F1, F0, [file_type(prolog)] ) ). + (var(F0) -> F0 = F1 ; absolute_file_name( F1, F2, [expand(true),file_type(prolog)] ) -> F2 = F0 ). '$use_module'(M,F,Is) :- - strip_module(F, M0, F0), - '$load_files'(F0, [if(not_loaded),'$context_module'(M0),must_be_module(true),imports(Is)], use_module(M,F,Is)). + '$do_error'(instantiation_error,use_module(M,F,Is)). '$csult'(Fs, M) :- '$extract_minus'(Fs, MFs), !, diff --git a/pl/flags.yap b/pl/flags.yap index d01a1e9d5..8106ccebf 100755 --- a/pl/flags.yap +++ b/pl/flags.yap @@ -320,10 +320,10 @@ yap_flag(discontiguous_warnings,X) :- var(X), !, style_check(?(Disc)), ( Disc = +discontiguous, - `X = on + X = on ; Disc = -discontiguous, - `X = off + X = off ), !. yap_flag(discontiguous_warnings,X) :- '$transl_to_on_off'(_,X), !, @@ -339,10 +339,10 @@ yap_flag(redefine_warnings,X) :- var(X), !, style_check(?(Disc)), ( Disc = +multiple, - `X = on + X = on ; Disc = -multiple, - `X = off + X = off ), !. yap_flag(redefine_warnings,X) :- '$transl_to_on_off'(_,X), !, @@ -382,10 +382,10 @@ yap_flag(single_var_warnings,X) :- var(X), !, style_check(?(Disc)), ( Disc = +singletons, - `X = on + X = on ; Disc = -singletons, - `X = off + X = off ), !. yap_flag(single_var_warnings,X) :- '$transl_to_on_off'(_,X), !,