fix absolute_file_name
put intermediate data structures for system in TR git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@249 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
2b72b6f71b
commit
441ad190ff
17
C/iopreds.c
17
C/iopreds.c
@ -1658,6 +1658,22 @@ p_open (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static Int
|
||||||
|
p_file_expansion (void)
|
||||||
|
{ /* '$file_expansion'(+File,-Name) */
|
||||||
|
Term file_name = Deref(ARG1);
|
||||||
|
|
||||||
|
/* we know file_name is bound */
|
||||||
|
if (!IsAtomTerm (file_name)) {
|
||||||
|
PlIOError(TYPE_ERROR_ATOM, file_name, "absolute_file_name/3");
|
||||||
|
return(FALSE);
|
||||||
|
}
|
||||||
|
if (!TrueFileName (RepAtom (AtomOfTerm (file_name))->StrOfAE, FileNameBuf, FALSE))
|
||||||
|
return (PlIOError (EXISTENCE_ERROR_SOURCE_SINK,file_name,"absolute_file_name/3"));
|
||||||
|
return(unify(ARG2,MkAtomTerm(LookupAtom(FileNameBuf))));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static Int p_add_alias_to_stream (void)
|
static Int p_add_alias_to_stream (void)
|
||||||
{
|
{
|
||||||
Term tname = Deref(ARG1);
|
Term tname = Deref(ARG1);
|
||||||
@ -4782,6 +4798,7 @@ InitIOPreds(void)
|
|||||||
InitCPred ("$get0_line_codes", 2, p_get0_line_codes, SafePredFlag|SyncPredFlag);
|
InitCPred ("$get0_line_codes", 2, p_get0_line_codes, SafePredFlag|SyncPredFlag);
|
||||||
InitCPred ("$get_byte", 2, p_get_byte, SafePredFlag|SyncPredFlag);
|
InitCPred ("$get_byte", 2, p_get_byte, SafePredFlag|SyncPredFlag);
|
||||||
InitCPred ("$open", 4, p_open, SafePredFlag|SyncPredFlag);
|
InitCPred ("$open", 4, p_open, SafePredFlag|SyncPredFlag);
|
||||||
|
InitCPred ("$file_expansion", 2, p_file_expansion, SafePredFlag|SyncPredFlag);
|
||||||
InitCPred ("$open_null_stream", 1, p_open_null_stream, SafePredFlag|SyncPredFlag);
|
InitCPred ("$open_null_stream", 1, p_open_null_stream, SafePredFlag|SyncPredFlag);
|
||||||
InitCPred ("$open_pipe_stream", 2, p_open_pipe_stream, SafePredFlag|SyncPredFlag);
|
InitCPred ("$open_pipe_stream", 2, p_open_pipe_stream, SafePredFlag|SyncPredFlag);
|
||||||
InitCPred ("open_mem_read_stream", 2, p_open_mem_read_stream, SyncPredFlag);
|
InitCPred ("open_mem_read_stream", 2, p_open_mem_read_stream, SyncPredFlag);
|
||||||
|
@ -1611,7 +1611,7 @@ p_shell (void)
|
|||||||
#else
|
#else
|
||||||
#if HAVE_SYSTEM
|
#if HAVE_SYSTEM
|
||||||
char *shell;
|
char *shell;
|
||||||
char *command = AllocTmpSpaceFromGlobal();
|
#define command ((char *)TR)
|
||||||
register int bourne = FALSE;
|
register int bourne = FALSE;
|
||||||
Term t1 = Deref (ARG1);
|
Term t1 = Deref (ARG1);
|
||||||
|
|
||||||
@ -1651,6 +1651,7 @@ p_shell (void)
|
|||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#undef command
|
||||||
#else /* HAVE_SYSTEM */
|
#else /* HAVE_SYSTEM */
|
||||||
#ifdef MSH
|
#ifdef MSH
|
||||||
register char *shell;
|
register char *shell;
|
||||||
@ -1670,7 +1671,7 @@ static Int
|
|||||||
p_system (void)
|
p_system (void)
|
||||||
{ /* '$system'(+SystCommand) */
|
{ /* '$system'(+SystCommand) */
|
||||||
#ifdef HAVE_SYSTEM
|
#ifdef HAVE_SYSTEM
|
||||||
char *command = AllocTmpSpaceFromGlobal();
|
#define command ((char *)TR)
|
||||||
Term t1 = Deref (ARG1);
|
Term t1 = Deref (ARG1);
|
||||||
if (!GetName (command, t1)) {
|
if (!GetName (command, t1)) {
|
||||||
Error(SYSTEM_ERROR,t1,"argument to system/1 is not valid");
|
Error(SYSTEM_ERROR,t1,"argument to system/1 is not valid");
|
||||||
@ -1688,6 +1689,7 @@ p_system (void)
|
|||||||
/* CloseStreams(); */
|
/* CloseStreams(); */
|
||||||
system (shell);
|
system (shell);
|
||||||
return (TRUE);
|
return (TRUE);
|
||||||
|
#undef command
|
||||||
#else
|
#else
|
||||||
Error(SYSTEM_ERROR,TermNil,"sh not available in this machine");
|
Error(SYSTEM_ERROR,TermNil,"sh not available in this machine");
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
|
5
H/Regs.h
5
H/Regs.h
@ -10,7 +10,7 @@
|
|||||||
* File: Regs.h *
|
* File: Regs.h *
|
||||||
* mods: *
|
* mods: *
|
||||||
* comments: YAP abstract machine registers *
|
* comments: YAP abstract machine registers *
|
||||||
* version: $Id: Regs.h,v 1.8 2001-12-07 20:27:03 vsc Exp $ *
|
* version: $Id: Regs.h,v 1.9 2002-01-02 05:35:20 vsc Exp $ *
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
@ -678,9 +678,6 @@ EXTERN inline void restore_B(void) {
|
|||||||
#define BBREG BB
|
#define BBREG BB
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* use global stack for intermediate data-structures */
|
|
||||||
#define AllocTmpSpaceFromGlobal() ((char *)H)
|
|
||||||
|
|
||||||
#if !THREADS
|
#if !THREADS
|
||||||
/* use actual addresses for regs */
|
/* use actual addresses for regs */
|
||||||
#define PRECOMPUTE_REGADDRESS 1
|
#define PRECOMPUTE_REGADDRESS 1
|
||||||
|
@ -3329,6 +3329,14 @@ Closes the stream @var{S}, following options @var{O}.
|
|||||||
The only valid options are @code{force(true)} and @code{force(false)}.
|
The only valid options are @code{force(true)} and @code{force(false)}.
|
||||||
YAP currently ignores these options.
|
YAP currently ignores these options.
|
||||||
|
|
||||||
|
@item absolute_file_name(+@var{Name},-@var{FullPath})
|
||||||
|
@findex absolute_file_name/2
|
||||||
|
@syindex absolute_file_name/2
|
||||||
|
@cnindex absolute_file_name/2
|
||||||
|
Give the path a full path @var{FullPath} Yap would use to consule a file
|
||||||
|
named @var{Name}. Unify @var{FullPath} with @code{user} if the file
|
||||||
|
name is @code{user}.
|
||||||
|
|
||||||
@item current_stream(@var{F},@var{M},@var{S})
|
@item current_stream(@var{F},@var{M},@var{S})
|
||||||
@findex current_stream/3
|
@findex current_stream/3
|
||||||
@syindex current_stream/3
|
@syindex current_stream/3
|
||||||
|
@ -871,10 +871,14 @@ at_end_of_stream(S) :-
|
|||||||
|
|
||||||
consult_depth(LV) :- '$show_consult_level'(LV).
|
consult_depth(LV) :- '$show_consult_level'(LV).
|
||||||
|
|
||||||
|
absolute_file_name(V,Out) :-
|
||||||
|
throw(error(instantiation_error, absolute_file_name(V, Out))).
|
||||||
|
absolute_file_name(user,user) :- !.
|
||||||
absolute_file_name(RelFile,AbsFile) :-
|
absolute_file_name(RelFile,AbsFile) :-
|
||||||
'$find_in_path'(RelFile,PathFile),
|
'$find_in_path'(RelFile,PathFile),
|
||||||
'$exists'(PathFile,'$csult', AbsFile).
|
'$exists'(PathFile,'$csult', AbsFile), !.
|
||||||
|
absolute_file_name(RelFile, AbsFile) :-
|
||||||
|
'$file_expansion'(RelFile, AbsFile).
|
||||||
|
|
||||||
'$exists'(F,Mode,AbsFile) :-
|
'$exists'(F,Mode,AbsFile) :-
|
||||||
'$get_value'(fileerrors,V),
|
'$get_value'(fileerrors,V),
|
||||||
|
Reference in New Issue
Block a user