---+ The SWI-Prolog operating-system and basic operation layer
This directory contains parts of SWI-Prolog that deal with operating
system and file access as well as core functionality to support this.
---++ Deploying this code
Although this code is repacked to make deployment outside SWI-Prolog
possible, this is not a trivial process. You need to do the following:
* Provide a SWI-Prolog compatible implementation of the required bits
of the foreign language interface. These functions are called PL_*
and described in the SWI-Prolog manual.
* Provide an emulation for pl-codelist.[ch], pl-privitf.[ch] and
pl-builtin.h. These files provide macros and functions that access
(SWI-)Prolog internals directly. Hopefully your Prolog system can do
something similar.
* Provide an emulation for pl-incl.h.
TBD: We must move those parts of pl-incl.h that are really neaded into
pl-builtin.h, so the dependencies on pl-incl.h disappear.
* The constants ATOM_* are SWI-Prolog macros that define objects of
type atom_t refering to a specific string. The script atoms.sh in
this directory can be used to extract the atoms that are used in this
directory. This only works if the atom-definition file ATOMS of
SWI-Prolog is available as ../ATOMS.
---++ Content
* atoms.sh
Extract used ATOM_ constants
* dtoa.c and pl-dtoa.[ch]
Lossless conversion of doubles to strings.
* pl-buffer.[ch]
Buffer data in a dynamically resizing array.
* pl-ctype.[ch]
Character classification primitives. Predicates:
- char_type/2, code_type/2, setlocale/3, downcase_atom/2,
upcase_atom/2, normalize_space/2.
* pl-error.[ch]
Throw exceptions from C. Provides PL_error()
* pl-file.c
Binding IOSTREAM to Prolog. Open files, Prolog I/O, etc. Many
predicates.
* pl-files.[ch]
Operations on files as a whole. Many predicates.
* pl-fmt.c
Definition for format/3 and friends.
* pl-glob.c
File-pattern expansion. Predicates:
- expand_file_name/2, wildcard_match/2, directory_files/2.
* pl-mswchar.cpp, pl-mswchar.h
Hack around Microsoft runtime bugs.
* pl-os.[ch]
Misc operating system access.
* pl-stream.c, SWI-Stream.h
Low-level access to I/O streams. Public stream access from C.
* pl-string.[ch]
Char* operations. Mostly dealing with platforms that do not define
all of them.
* pl-table.[ch]
Hash-tables.
* pl-text.[ch]
Higher level string manipulation. Deals with hybrid ISO-Latin-1,
wide-character representation, pointer+size representation, character
conversions, etc.
* pl-utf8.[ch]
Our local UTF-8 encoding/decoding macros
* popen.c
popen() for Windows.
* windows
More Windows portability stuff
---++ License
This code is licenced under the LGPL.
@tbd Move all Windows hacks to os/windows. At the moment, there are
definitions in pl-nt.c pl-main.c pl-ntconsole.c, pl-init.c