From 77a50902761a8bfd56bcc4a700d2cb1342b99b3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Wed, 20 Jan 2016 22:18:17 +0000 Subject: [PATCH] Add missing documentation --- C/cmppreds.c | 7 +++-- C/mavar.c | 18 ++++++----- docs/yap.md | 28 ++++++++++++++++- os/alias.c | 4 +-- os/charsio.c | 2 +- os/chartypes.c | 4 +++ os/console.c | 28 +++++++++++++++-- os/edio.yap | 81 +++++++++++++++++++++++++++++++++++++++++++++++++- os/iopreds.h | 1 + 9 files changed, 156 insertions(+), 17 deletions(-) diff --git a/C/cmppreds.c b/C/cmppreds.c index 31278c5fd..6ef967f01 100644 --- a/C/cmppreds.c +++ b/C/cmppreds.c @@ -15,11 +15,13 @@ * comments: comparing two prolog terms * * * *************************************************************************/ + /// @file cmppreds.c -/** @defgroup Comparing_Terms Comparing Terms +/** + @defgroup Comparing_Terms Comparing Terms @ingroup builtins The following predicates are used to compare and order terms, using the @@ -29,8 +31,7 @@ standard ordering: variables come before numbers, numbers come before atoms which in turn come before compound terms, i.e.: variables @< numbers @< atoms @< compound terms. -+ -Variables are roughly ordered by "age" (the "oldest" variable is put ++ Variables are roughly ordered by "age" (the "oldest" variable is put first); + Floating point numbers are sorted in increasing order; diff --git a/C/mavar.c b/C/mavar.c index 899f19b4b..3ce613ba8 100644 --- a/C/mavar.c +++ b/C/mavar.c @@ -16,9 +16,13 @@ *************************************************************************/ -/** @defgroup Term_Modification Term Modification +/** + +@file mavar.c + +@defgroup Term_Modification Term Modification @ingroup builtins -@{ + It is sometimes useful to change the value of instantiated variables. Although, this is against the spirit of logic programming, it @@ -26,14 +30,14 @@ is sometimes useful. As in other Prolog systems, YAP has several primitives that allow updating Prolog terms. Note that these primitives are also backtrackable. -The `setarg/3` primitive allows updating any argument of a Prolog -compound terms. The `mutable` family of predicates provides -mutable variables. They should be used instead of `setarg/3`, +The setarg/3 primitive allows updating any argument of a Prolog +compound terms. The _mutable_ family of predicates provides +mutable variables. They should be used instead of setarg/3, as they allow the encapsulation of accesses to updatable variables. Their implementation can also be more efficient for long deterministic computations. - +@{ */ @@ -315,7 +319,6 @@ p_update_mutable( USES_REGS1 ) return(TRUE); } -static Int /** @pred is_mutable(? _D_) @@ -323,6 +326,7 @@ Holds if _D_ is a mutable term. */ +static Int p_is_mutable( USES_REGS1 ) { Term t = Deref(ARG1); diff --git a/docs/yap.md b/docs/yap.md index 02a8eb8f0..e40bf33ea 100644 --- a/docs/yap.md +++ b/docs/yap.md @@ -774,6 +774,8 @@ YAP Built-ins {#builtins} + @ref YAP_Terms + @ref InputOutput + + + @ref AbsoluteFileName + @ref YAPOS @@ -806,6 +808,9 @@ language. Next, we discuss how to use the most important ones. The YAP Library {#library} =============== +@defgroup library YAP library files +@{ + Library files reside in the library_directory path (set by the `LIBDIR` variable in the Makefile for YAP). Several files in the library are originally from the public-domain Edinburgh Prolog library. @@ -861,10 +866,14 @@ The YAP Library {#library} - @ref wgraphs - @ref wundgraphs - @ref ypp +@} The YAP Packages {#packages} ================ +@defgroup packages YAP packages files +@{ + + @ref real + @ref BDDs @@ -891,10 +900,16 @@ Leuven packages ported from SWI-Prolog: + @subpage clpqr +@} Compatibility {#swi} ============= + +@defgroup swi Compatibility +@{ + + YAP has been designed to be as compatible as possible with other Prolog systems, originally with C-Prolog\cite x and SICStus Prolog~\cite x . More recent work on YAP has striven at making YAP @@ -1075,9 +1090,15 @@ architectures. Otherwise, YAP follows IEEE arithmetic. Please inform the authors on other incompatibilities that may still exist. +@} + Foreign Language interface for YAP {#fli} ================================== +@defgroup fli Foreigd Code Interfacing + +@{ + YAP provides the user with three facilities for writing predicates in a language other than Prolog. Under Unix systems, most language implementations were linkable to `C`, and the first interface exported the YAP machinery to the C language. YAP also implements most of the SWI-Prolog foreign language interface. @@ -1088,4 +1109,9 @@ being designed to work with the swig (www.swig.orgv) interface compiler. + The @ref swi-c-interface emulates Jan Wielemaker's SWI foreign language interface. -+ The @ref yap-cplus-interface is desiged to interface with the SWI ackage \cite x Object-Oriented systems. ++ The @ref yap-cplus-interface is desiged to interface with the SWIG package by using Object-Oriented concepts + ++ The @ref LoadInterface handles the setup of foreign files + +@} + diff --git a/os/alias.c b/os/alias.c index a528e91e7..d4b403cb4 100644 --- a/os/alias.c +++ b/os/alias.c @@ -30,8 +30,8 @@ static char SccsId[] = "%W% %G%"; /** - * @group - * + * @defgroup Aliases + * @ingroup InputOutput * * Aliases: * This file defines the main operations on aliases, a second name for a file. Aliases are always diff --git a/os/charsio.c b/os/charsio.c index 4761e2e64..1218019cf 100644 --- a/os/charsio.c +++ b/os/charsio.c @@ -601,7 +601,7 @@ static Int put_char(USES_REGS1) { /* '$put'(Stream,N) */ return (TRUE); } -/** @pred tab(+ _N_) +/** @pred tab_1(+ _N_) Outputs _N_ spaces to the current output stream. diff --git a/os/chartypes.c b/os/chartypes.c index f8a9bdaa6..a2f047704 100644 --- a/os/chartypes.c +++ b/os/chartypes.c @@ -31,6 +31,10 @@ static char SccsId[] = "%W% %G%"; /// @addtogroup CharProps +/** + * @defgroup CharIO Character-Based Input/Output + * @ingroup InputOutput + */ /* * This file includes the definition of a character properties. diff --git a/os/console.c b/os/console.c index 02c05a344..6aca3ab2b 100644 --- a/os/console.c +++ b/os/console.c @@ -18,9 +18,20 @@ static char SccsId[] = "%W% %G%"; #endif +/** + * @file console.c + * @author VITOR SANTOS COSTA + * @date Wed Jan 20 00:56:23 2016 + * + * @brief + * + * + */ /* * This file includes the interface to the console IO, tty style. Refer also to the readline library. - * + * @defgroup console Support for console-based interaction. + * @ingroup InputOutput + */ #include "Yap.h" @@ -181,6 +192,13 @@ ConsoleGetc(int sno) return console_post_process_read_char(ch, s); } +/** @pred prompt1(+ _A__) + + +Changes YAP input prompt for the . + + +*/ static Int prompt1 ( USES_REGS1 ) @@ -198,7 +216,13 @@ prompt1 ( USES_REGS1 ) return (TRUE); } +/** @pred prompt(- _A_,+ _B_) + +Changes YAP input prompt from _A_ to _B_, active on *next* standard input interaction. + + +*/ static Int prompt ( USES_REGS1 ) { /* prompt(Old,New) */ @@ -211,7 +235,7 @@ prompt ( USES_REGS1 ) a = AtomOfTerm (t); if (strlen(RepAtom (a)->StrOfAE) > MAX_PROMPT) { Yap_Error(SYSTEM_ERROR_INTERNAL,t,"prompt %s is too long", RepAtom (a)->StrOfAE); - return(FALSE); + return false; } strncpy(LOCAL_Prompt, (char *)RepAtom (LOCAL_AtPrompt)->StrOfAE, MAX_PROMPT); LOCAL_AtPrompt = a; diff --git a/os/edio.yap b/os/edio.yap index 1b5c52d11..cba6e023c 100644 --- a/os/edio.yap +++ b/os/edio.yap @@ -1,7 +1,37 @@ % % Edinburgh IO. +/** + * @file edio.yap + * @author VITOR SANTOS COSTA + * @date Wed Jan 20 01:07:02 2016 + * + * @brief Input/Output according to the DEC-10 Prolog. PLease consider using the ISO + * standard predicates for new code. + * + * +*/ + + % +/** @pred see(+ _S_) + + +If _S_ is a currently opened input stream then it is assumed to be +the current input stream. If _S_ is an atom it is taken as a +filename. If there is no input stream currently associated with it, then +it is opened for input, and the new input stream thus created becomes +the current input stream. If it is not possible to open the file, an +error occurs. If there is a single opened input stream currently +associated with the file, it becomes the current input stream; if there +are more than one in that condition, then one of them is chosen. + +When _S_ is a stream not currently opened for input, an error may be +reported, depending on the state of the `file_errors` flag. If + _S_ is neither a stream nor an atom the predicates just fails. + + +*/ see(user) :- !, set_input(user_input). see(F) :- var(F), !, '$do_error'(instantiation_error,see(F)). @@ -13,6 +43,13 @@ see(Stream) :- '$stream'(Stream), current_stream(_,read,Stream), !, set_input(Stream). see(F) :- open(F,read,Stream), set_input(Stream). +/** @pred seeing(- _S_) + + +The current input stream is unified with _S_. + + +*/ seeing(File) :- current_input(Stream), stream_property(Stream,file_name(NFile)), ( @@ -23,8 +60,33 @@ seeing(File) :- current_input(Stream), NFile = File ). +/** @pred seen + + +Closes the current input stream, as opened by see/1. Standard input +stream goes to the original ùser_input`. + + */ seen :- current_input(Stream), close(Stream), set_input(user). +/** @pred tell(+ _S_) + + +If _S_ is a currently opened stream for output, it becomes the +current output stream. If _S_ is an atom it is taken to be a +filename. If there is no output stream currently associated with it, +then it is opened for output, and the new output stream created becomes +the current output stream. If it is not possible to open the file, an +error occurs. If there is a single opened output stream currently +associated with the file, then it becomes the current output stream; if +there are more than one in that condition, one of them is chosen. + +Whenever _S_ is a stream not currently opened for output, an error +may be reported, depending on the state of the file_errors flag. The +predicate just fails, if _S_ is neither a stream nor an atom. + + +*/ tell(user) :- !, set_output(user_output). tell(F) :- var(F), !, '$do_error'(instantiation_error,tell(F)). @@ -43,12 +105,29 @@ tell(Stream) :- tell(F) :- open(F,append,Stream), set_output(Stream). - + +/** @pred telling(- _S_) + + +The current output stream is unified with _S_. + + +*/ telling(File) :- current_output(Stream), stream_property(Stream,file_name(NFile)), ( stream_property(user_output,file_name(NFile)) -> File = user ; File = NFile ). +/** @pred told + + +Closes the current output stream, and the user's terminal becomes again +the current output stream. It is important to remember to close streams +after having finished using them, as the maximum number of +simultaneously opened streams is 17. + + +*/ told :- current_output(Stream), !, set_output(user), diff --git a/os/iopreds.h b/os/iopreds.h index 5f9e7bf31..499723efd 100644 --- a/os/iopreds.h +++ b/os/iopreds.h @@ -239,6 +239,7 @@ Yap_GetStreamHandle(Term t) #define YAP_ERROR NIL +/// maximum number of open streams #define MaxStreams 64 #define EXPAND_FILENAME 0x000080