fix ! in debugger (execute_clause)

improve system/1 and execute/1


git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1610 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc
2006-04-25 03:23:40 +00:00
parent 1265946374
commit b9e5416355
5 changed files with 55 additions and 47 deletions

View File

@@ -8,8 +8,13 @@
* *
**************************************************************************
* *
* $Id: sys.c,v 1.25 2006-01-17 14:10:42 vsc Exp $ *
* $Id: sys.c,v 1.26 2006-04-25 03:23:40 vsc Exp $ *
* mods: $Log: not supported by cvs2svn $
* mods: Revision 1.25 2006/01/17 14:10:42 vsc
* mods: YENV may be an HW register (breaks some tabling code)
* mods: All YAAM instructions are now brackedted, so Op introduced an { and EndOp introduces an }. This is because Ricardo assumes that.
* mods: Fix attvars when COROUTING is undefined.
* mods:
* mods: Revision 1.24 2006/01/08 23:01:48 vsc
* mods: *** empty log message ***
* mods:
@@ -52,9 +57,7 @@
#include "config.h"
#include "YapInterface.h"
#if STDC_HEADERS
#include <stdlib.h>
#endif
#if HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -687,12 +690,12 @@ do_system(void)
#if HAVE_SYSTEM
int sys = system(command);
if (sys < 0) {
return(YAP_Unify(YAP_ARG3,YAP_MkIntTerm(errno)));
return YAP_Unify(YAP_ARG3,YAP_MkIntTerm(errno));
}
return(YAP_Unify(YAP_ARG2, YAP_MkIntTerm(sys)));
return YAP_Unify(YAP_ARG2, YAP_MkIntTerm(sys));
#else
YAP_Error(0,0L,"system not available in this configuration");
return(FALSE);
return FALSE;
#endif
}
@@ -703,6 +706,9 @@ static int
do_shell(void)
{
#if defined(__MINGW32__) || _MSC_VER
YAP_Error(0,0L,"system not available in this configuration");
return(FALSE);
#elif HAVE_SYSTEM
char *buf = YAP_AllocSpaceFromYap(BUF_SIZE);
int sys;
@@ -711,29 +717,23 @@ do_shell(void)
return(FALSE);
}
#if HAVE_STRNCPY
strncpy(YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1)), buf, BUF_SIZE);
strncpy(" ", buf, BUF_SIZE);
strncpy(YAP_AtomName(YAP_AtomOfTerm(YAP_ARG2)), buf, BUF_SIZE);
strncpy(" ", buf, BUF_SIZE);
strncpy(YAP_AtomName(YAP_AtomOfTerm(YAP_ARG3)), buf, BUF_SIZE);
strncpy(buf, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1)), BUF_SIZE);
strncpy(buf, " ", BUF_SIZE);
strncpy(buf, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG2)), BUF_SIZE);
strncpy(buf, " ", BUF_SIZE);
strncpy(buf, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG3)), BUF_SIZE);
#else
strcpy(YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1)), buf);
strcpy(" ", buf);
strcpy(YAP_AtomName(YAP_AtomOfTerm(YAP_ARG2)), buf);
strcpy(" ", buf);
strcpy(YAP_AtomName(YAP_AtomOfTerm(YAP_ARG3)), buf);
strcpy(buf, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1)));
strcpy(buf, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG2)));
strcpy(buf, " ");
strcpy(bug, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG3)));
#endif
#if HAVE_SYSTEM
sys = system(buf);
YAP_FreeSpaceFromYap(buf);
if (sys < 0) {
return(YAP_Unify(YAP_ARG5,YAP_MkIntTerm(errno)));
return YAP_Unify(YAP_ARG5,YAP_MkIntTerm(errno));
}
return(YAP_Unify(YAP_ARG4, YAP_MkIntTerm(sys)));
#else
YAP_Error(0,0L,"system not available in this configuration");
return(FALSE);
#endif
return YAP_Unify(YAP_ARG4, YAP_MkIntTerm(sys));
#else
char *cptr[4];
int t;
@@ -745,17 +745,19 @@ do_shell(void)
cptr[3]= NULL;
t = fork();
if (t < 0) {
return(YAP_Unify(YAP_ARG5,YAP_MkIntTerm(errno)));
return YAP_Unify(YAP_ARG5,YAP_MkIntTerm(errno));
} else if (t == 0) {
t = execvp(YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1)),cptr);
return(t);
t = execvp(cptr[0],cptr);
return t;
} else {
t = wait(&sys);
fprintf(stderr,"after wait %x:%x\n",t,sys);
if (t < 0) {
return(YAP_Unify(YAP_ARG5,YAP_MkIntTerm(errno)));
return YAP_Unify(YAP_ARG5,YAP_MkIntTerm(errno));
}
}
return(YAP_Unify(YAP_ARG4, YAP_MkIntTerm(sys)));
fprintf(stderr,"after wait %x\n", sys);
return YAP_Unify(YAP_ARG4, YAP_MkIntTerm(sys));
#endif
}