Home Contents Index Summary Previous Next

3.37 Operating System Interaction

shell(+Command, -Status)
Execute Command on the operating system. Command is given to the Bourne shell (/bin/sh). Status is unified with the exit status of the command.

On Win32 systems, shell/[1,2] executes the command using the CreateProcess() API and waits for the command to terminate. If the command ends with a & sign, the command is handed to the WinExec() API, which does not wait for the new task to terminate. See also win_exec/2 and win_shell/2. Please note that the CreateProcess() API does not imply the Windows command interpreter (command.exe on Windows 95/98 and cmd.exe on Windows-NT) and therefore commands built-in to the command-interpreter can only be activated using the command interpreter. For example: 'command.exe /C copy file1.txt file2.txt'

shell(+Command)
Equivalent to `shell(Command, 0)'.

shell
Start an interactive Unix shell. Default is /bin/sh, the environment variable SHELL overrides this default. Not available for Win32 platforms.

win_exec(+Command, +Show)
Win32 systems only. Spawns a Windows task without waiting for its completion. Show is either iconic or normal and dictates the initial status of the window. The iconic option is notably handy to start (DDE) servers.

win_shell(+Operation, +File)
Win32 systems only. Opens the document File using the windows shell-rules for doing so. Operation is one of open, print or explore or another operation registered with the shell for the given document-type. On modern systems it is also possible to pass a URL as File, opening the URL in Windows default browser. This call interfaces to the Win32 API ShellExecute().

win_registry_get_value(+Key, +Name, -Value)
Win32 systems only. Fetches the value of a Win32 registry key. Key is an atom formed as a path-name describing the desired registry key. Name is the desired attribute name of the key. Value is unified with the value. If the value is of type DWORD, the value is returned as an integer. If the value is a string it is returned as a Prolog atom. Other types are currently not supported. The default `root' is HKEY_CURRENT_USER. Other roots can be specified explicitely as HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE or HKEY_USERS. The example below fetches the extension to use for Prolog files (see README.TXT on the Windows version):


?- win_registry_get_value('HKEY_LOCAL_MACHINE/Software/SWI/Prolog',
                          fileExtension,
                          Ext).

Ext = pl

getenv(+Name, -Value)
Get environment variable. Fails silently if the variable does not exist. Please note that environment variable names are case-sensitive on Unix systems and case-insensitive on Windows.

setenv(+Name, +Value)
Set environment variable. Name and Value should be instantiated to atoms or integers. The environment variable will be passed to shell/[0-2] and can be requested using getenv/2. They also influence expand_file_name/2.

unsetenv(+Name)
Remove environment variable from the environment.

unix(+Command)
This predicate comes from the Quintus compatibility library and provides a partial implementation thereof. It provides access to some operating system features and unlike the name suggests, is not operating system specific. Currently it is the only way to fetch the Prolog command-line arguments. Defined Command's are below.

system(+Command)
Equivalent to calling shell/1. Use for compatibility only.

shell(+Command)
Equivalent to calling shell/1. Use for compatibility only.

shell
Equivalent to calling shell/0. Use for compatibility only.

cd
Equivalent to calling chdir/1 as chdir(~). Use for compatibility only.

cd(+Directory)
Equivalent to calling chdir/1. Use for compatibility only.

argv(-Argv)
Unify Argv with the list of commandline arguments provides to this Prolog run. Please note that Prolog system-arguments and application arguments are separated by --. Integer arguments are passed as Prolog integers, float arguments and Prolog floating point numbers and all other arguments as Prolog atoms. New applications should use the prolog-flag argv.

A stand-alone program could use the following skeleton to handle command-line arguments. See also section 2.10.2.4.


main :-
        unix(argv(Argv)),
        append(_PrologArgs, [--|AppArgs], Argv), !,
        main(AppArgs).

get_time(-Time)
Return the number of seconds that elapsed since the epoch of the POSIX, tim representation: January 1970, 0 hours. Time is a floating point number. The granularity is system dependent.

convert_time(+Time, -Year, -Month, -Day, -Hour, -Minute, -Second, -MilliSeconds)
Convert a time stamp, provided by get_time/1, time_file/2, etc. Year is unified with the year, Month with the month number (January is 1), Day with the day of the month (starting with 1), Hour with the hour of the day (0--23), Minute with the minute (0--59). Second with the second (0--59) and MilliSecond with the milliseconds (0--999). Note that the latter might not be accurate or might always be 0, depending on the timing capabilities of the system. See also convert_time/2.

convert_time(+Time, -String)
Convert a time-stamp as obtained though get_time/1 into a textual representation using the C-library function ctime(). The value is returned as a SWI-Prolog string object (see section 3.23). See also convert_time/8.