glob fixes (how to handle non-existing files)
This commit is contained in:
parent
9f55c13c34
commit
95f770f747
33
pl/absf.yap
33
pl/absf.yap
@ -175,6 +175,7 @@ file_search_path(path, C) :-
|
|||||||
:- multifile user:file_search_path/2.
|
:- multifile user:file_search_path/2.
|
||||||
|
|
||||||
:- dynamic user:file_search_path/2.
|
:- dynamic user:file_search_path/2.
|
||||||
|
|
||||||
user:file_search_path(library, Dir) :-
|
user:file_search_path(library, Dir) :-
|
||||||
user:library_directory(Dir).
|
user:library_directory(Dir).
|
||||||
user:file_search_path(commons, Dir) :-
|
user:file_search_path(commons, Dir) :-
|
||||||
@ -182,7 +183,7 @@ user:file_search_path(commons, Dir) :-
|
|||||||
user:file_search_path(swi, Home) :-
|
user:file_search_path(swi, Home) :-
|
||||||
current_prolog_flag(home, Home).
|
current_prolog_flag(home, Home).
|
||||||
user:file_search_path(yap, Home) :-
|
user:file_search_path(yap, Home) :-
|
||||||
current_prolog_flag(home, Home).
|
current_prolog_flag(home, Home).
|
||||||
user:file_search_path(system, Dir) :-
|
user:file_search_path(system, Dir) :-
|
||||||
prolog_flag(host_type, Dir).
|
prolog_flag(host_type, Dir).
|
||||||
user:file_search_path(foreign, Dir) :-
|
user:file_search_path(foreign, Dir) :-
|
||||||
@ -216,11 +217,15 @@ absolute_file_name(File,Opts,TrueFileName) :-
|
|||||||
absolute_file_name(V,Out) :- var(V), !, % absolute_file_name needs commenting.
|
absolute_file_name(V,Out) :- var(V), !, % absolute_file_name needs commenting.
|
||||||
'$do_error'(instantiation_error, absolute_file_name(V, Out)).
|
'$do_error'(instantiation_error, absolute_file_name(V, Out)).
|
||||||
absolute_file_name(user,user) :- !.
|
absolute_file_name(user,user) :- !.
|
||||||
absolute_file_name(File0,File) :-
|
absolute_file_name(File0,File) :-
|
||||||
'$absolute_file_name'(File0,[access(none),file_type(txt),file_errors(fail),solutions(first)],File,absolute_file_name(File0,File)).
|
'$absolute_file_name'(File0,[access(none),file_type(txt),file_errors(fail),solutions(first)],File,absolute_file_name(File0,File)).
|
||||||
|
|
||||||
'$full_filename'(F0, F, G) :-
|
'$full_filename'(F0, F, G) :-
|
||||||
'$absolute_file_name'(F0,[access(read),file_type(prolog),file_errors(fail),solutions(first),expand(true)],F,G).
|
'$absolute_file_name'(F0,[access(read),
|
||||||
|
file_type(prolog),
|
||||||
|
file_errors(fail),
|
||||||
|
solutions(first),
|
||||||
|
expand(true)],F,G).
|
||||||
|
|
||||||
'$absolute_file_name'(File, _Opts, _TrueFileName, G) :- var(File), !,
|
'$absolute_file_name'(File, _Opts, _TrueFileName, G) :- var(File), !,
|
||||||
'$do_error'(instantiation_error, G).
|
'$do_error'(instantiation_error, G).
|
||||||
@ -292,6 +297,7 @@ absolute_file_name(File0,File) :-
|
|||||||
'$cat_file_name'(File0,File), !,
|
'$cat_file_name'(File0,File), !,
|
||||||
'$add_path'(File, PFile),
|
'$add_path'(File, PFile),
|
||||||
'$get_abs_file'(PFile,Opts,AbsFile),
|
'$get_abs_file'(PFile,Opts,AbsFile),
|
||||||
|
'$absf_trace'('~w to ~w', [PFile, NewFile] ),
|
||||||
'$search_in_path'(AbsFile,Opts,NewFile).
|
'$search_in_path'(AbsFile,Opts,NewFile).
|
||||||
'$find_in_path'(File,_,_,Call) :-
|
'$find_in_path'(File,_,_,Call) :-
|
||||||
'$do_error'(domain_error(source_sink,File),Call).
|
'$do_error'(domain_error(source_sink,File),Call).
|
||||||
@ -354,21 +360,27 @@ absolute_file_name(File0,File) :-
|
|||||||
atom_codes(DA,[D]),
|
atom_codes(DA,[D]),
|
||||||
atom_concat( [File1, DA, Glob], File2 ),
|
atom_concat( [File1, DA, Glob], File2 ),
|
||||||
expand_file_name(File2, ExpFiles),
|
expand_file_name(File2, ExpFiles),
|
||||||
lists:member(ExpFile, ExpFiles),
|
'$enumerate_glob'(File1, ExpFiles, ExpFile)
|
||||||
\+ sub_atom( ExpFile, _, _, 1, '.'),
|
|
||||||
\+ sub_atom( ExpFile, _, _, 2, '..')
|
|
||||||
;
|
;
|
||||||
Expand == true
|
Expand == true
|
||||||
->
|
->
|
||||||
expand_file_name(File1, ExpFiles),
|
expand_file_name(File1, ExpFiles),
|
||||||
lists:member(ExpFile, ExpFiles),
|
'$enumerate_glob'(File1, ExpFiles, ExpFile)
|
||||||
\+ sub_atom( ExpFile, _, _, 1, '.'),
|
|
||||||
\+ sub_atom( ExpFile, _, _, 2, '..')
|
|
||||||
;
|
;
|
||||||
File1 = ExpFile
|
File1 = ExpFile
|
||||||
),
|
),
|
||||||
'$absf_trace'(' With globbing (glob=~q;expand=~a): ~w', [Glob,Expand,ExpFile] ).
|
'$absf_trace'(' With globbing (glob=~q;expand=~a): ~w', [Glob,Expand,ExpFile] ).
|
||||||
|
|
||||||
|
|
||||||
|
'$enumerate_glob'(File1, [ExpFile], ExpFile) :-
|
||||||
|
!.
|
||||||
|
'$enumerate_glob'(File1, ExpFiles, ExpFile) :-
|
||||||
|
lists:member(ExpFile, ExpFiles),
|
||||||
|
file_base_name( ExpFile, Base ),
|
||||||
|
Base \= '.',
|
||||||
|
Base \='..'.
|
||||||
|
|
||||||
|
|
||||||
% always verify if a directory
|
% always verify if a directory
|
||||||
'$check_file'(F, directory, _, F) :-
|
'$check_file'(F, directory, _, F) :-
|
||||||
!,
|
!,
|
||||||
@ -479,7 +491,7 @@ absolute_file_name(File0,File) :-
|
|||||||
Name =.. [N,P0],
|
Name =.. [N,P0],
|
||||||
'$add_file_to_dir'(P0,A,File,NFile),
|
'$add_file_to_dir'(P0,A,File,NFile),
|
||||||
NewName =.. [N,NFile],
|
NewName =.. [N,NFile],
|
||||||
'$absf_trace'(' try ~a', [NewName] ),
|
'$absf_trace'(' try ~q', [NewName] ),
|
||||||
'$find_in_path'(NewName, Opts, OFile, Goal).
|
'$find_in_path'(NewName, Opts, OFile, Goal).
|
||||||
|
|
||||||
'$add_file_to_dir'(P0,A,Atoms,NFile) :-
|
'$add_file_to_dir'(P0,A,Atoms,NFile) :-
|
||||||
@ -566,4 +578,3 @@ remove_from_path(New) :- '$check_path'(New,Path),
|
|||||||
'$check_path'([Ch],[Ch]) :- '$dir_separator'(Ch), !.
|
'$check_path'([Ch],[Ch]) :- '$dir_separator'(Ch), !.
|
||||||
'$check_path'([Ch],[Ch,A]) :- !, integer(Ch), '$dir_separator'(A).
|
'$check_path'([Ch],[Ch,A]) :- !, integer(Ch), '$dir_separator'(A).
|
||||||
'$check_path'([N|S],[N|SN]) :- integer(N), '$check_path'(S,SN).
|
'$check_path'([N|S],[N|SN]) :- integer(N), '$check_path'(S,SN).
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user