Prolog "paths"

Admin User, created Apr 11. 2025
         
/**
* Warranty & Liability
* To the extent permitted by applicable law and unless explicitly
* otherwise agreed upon, XLOG Technologies AG makes no warranties
* regarding the provided information. XLOG Technologies AG assumes
* no liability that any problems might be solved with the information
* provided by XLOG Technologies AG.
*
* Rights & License
* All industrial property rights regarding the information - copyright
* and patent rights in particular - are the sole property of XLOG
* Technologies AG. If the company was not the originator of some
* excerpts, XLOG Technologies AG has at least obtained the right to
* reproduce, change and translate the information.
*
* Reproduction is restricted to the whole unaltered document. Reproduction
* of the information is only allowed for non-commercial uses. Selling,
* giving away or letting of the execution of the library is prohibited.
* The library can be distributed as part of your applications and libraries
* for execution provided this comment remains unchanged.
*
* Restrictions
* Only to be distributed with programs that add significant and primary
* functionality to the library. Not to be distributed with additional
* software intended to replace any components of the library.
*
* Trademarks
* Jekejeke is a registered trademark of XLOG Technologies AG.
*/
runner_file(extra, paths, 'XLOG 3.3 paths').
/****************************************************************/
/* File Property */
/****************************************************************/
/* file_property(X, Y) */
runner_pred(file_property, 2, extra, paths, 'XLOG 3.3.1').
runner_case(file_property, 2, extra, paths, 'XLOG 3.3.1, XLOG 1') :-
file_property('extra/intnum.p', last_modified(T)),
T == 1744031239207.
runner_case(file_property, 2, extra, paths, 'XLOG 3.3.1, XLOG 2') :-
file_property('extra/intnum.p', absolute_path(A)),
A \== 'extra/intnum.p'.
runner_case(file_property, 2, extra, paths, 'XLOG 3.3.1, XLOG 3') :-
file_property('extra/intnum.p', type(T)),
T == regular.
runner_case(file_property, 2, extra, paths, 'XLOG 3.3.1, XLOG 4') :-
catch(file_property('extra/foo.p', _), error(E,_), true),
E == existence_error(source_sink, 'extra/foo.p').
runner_case(file_property, 2, extra, paths, 'XLOG 3.3.1, XLOG 5') :-
catch(file_property('.', bar(_)), error(E,_), true),
E == domain_error(prolog_flag, bar).
/* open(P, M, S, L), ISO 8.11.5.5 */
runner_pred(open_results,4, extra, paths, 'XLOG 3.3.2').
runner_case(open_results,4, extra, paths, 'XLOG 3.3.2, XLOG 1') :-
open('extra/intnum.p', read, Stream, [type(binary)]),
get_code(Stream, Code),
close(Stream),
Code == 47.
/****************************************************************/
/* File Paths */
/****************************************************************/
/* absolute_file_name(X, Y) */
runner_pred(absolute_file_name, 2, extra, paths, 'XLOG 3.3.3').
runner_case(absolute_file_name, 2, extra, paths, 'XLOG 3.3.3, XLOG 1') :-
absolute_file_name('mailto:info@xlog.ch', X),
X == 'mailto:info@xlog.ch'.
runner_case(absolute_file_name, 2, extra, paths, 'XLOG 3.3.3, XLOG 2') :-
absolute_file_name('extra/foo.p', X),
X \== 'extra/foo.p'.
runner_case(absolute_file_name, 2, extra, paths, 'XLOG 3.3.3, XLOG 3') :-
absolute_file_name('C:\\Prolog\\samples\\paths.p', X),
X == 'C:\\Prolog\\samples\\paths.p'.
/* absolute_file_name(X, Y, Z) */
runner_pred(absolute_file_name, 3, extra, paths, 'XLOG 3.3.4').
runner_case(absolute_file_name, 3, extra, paths, 'XLOG 3.3.4, XLOG 1') :-
absolute_file_name('text.p', X, [relative_to('/Prolog/samples/paths.p')]),
X == '/Prolog/samples/text.p'.
runner_case(absolute_file_name, 3, extra, paths, 'XLOG 3.3.4, XLOG 2') :-
absolute_file_name('../web/text.p', X, [relative_to('C:\\Prolog\\samples\\paths.p')]),
X == 'C:\\Prolog\\web/text.p'.
/* is_absolute_file_name(X) */
runner_pred(is_absolute_file_name, 1, extra, paths, 'XLOG 3.3.5').
runner_case(is_absolute_file_name, 1, extra, paths, 'XLOG 3.3.5, XLOG 1') :-
is_absolute_file_name('mailto:info@xlog.ch').
runner_case(is_absolute_file_name, 1, extra, paths, 'XLOG 3.3.5, XLOG 2') :-
\+ is_absolute_file_name('extra/foo.p').
runner_case(is_absolute_file_name, 1, extra, paths, 'XLOG 3.3.5, XLOG 3') :-
is_absolute_file_name('C:\\Prolog\\samples\\paths.p').
/* file_directory_name(X, Y) */
runner_pred(file_directory_name, 2, extra, paths, 'XLOG 3.3.6').
runner_case(file_directory_name, 2, extra, paths, 'XLOG 3.3.6, XLOG 1') :-
file_directory_name('extra/foo.p', X),
X == 'extra/'.
runner_case(file_directory_name, 2, extra, paths, 'XLOG 3.3.6, XLOG 2') :-
file_directory_name('/Prolog/samples/paths.p', X),
X == '/Prolog/samples/'.
/* file_base_name(X, Y) */
runner_pred(file_base_name, 2, extra, paths, 'XLOG 3.3.7').
runner_case(file_base_name, 2, extra, paths, 'XLOG 3.3.7, XLOG 1') :-
file_base_name('extra/foo.p', X),
X == 'foo.p'.
runner_case(file_base_name, 2, extra, paths, 'XLOG 3.3.7, XLOG 2') :-
file_base_name('C:\\Prolog\\samples\\paths.p', X),
X == 'paths.p'.