예제 #1
0
파일: sys.c 프로젝트: vscosta/yap-6.3
/* execute a command as a detached process */
static YAP_Bool 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;

  if (buf == NULL) {
    YAP_Error(0, 0L, "No Temporary Space for Shell");
    return (FALSE);
  }
#if HAVE_STRNCPY
  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(buf, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1)));
  strcpy(buf, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG2)));
  strcpy(buf, " ");
  strcpy(buf, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG3)));
#endif
  sys = system(buf);
  YAP_FreeSpaceFromYap(buf);
  if (sys < 0) {
    return YAP_Unify(YAP_ARG5, YAP_MkIntTerm(errno));
  }
  return YAP_Unify(YAP_ARG4, YAP_MkIntTerm(sys));
#else
  char *cptr[4];
  int t;
  int sys;

  cptr[0] = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
  cptr[1] = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG2));
  cptr[2] = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG3));
  cptr[3] = NULL;
  t = fork();
  if (t < 0) {
    return YAP_Unify(YAP_ARG5, YAP_MkIntTerm(errno));
  } else if (t == 0) {
    t = execvp(cptr[0], cptr);
    return t;
  } else {
    t = wait(&sys);
    if (t < 0) {
      return YAP_Unify(YAP_ARG5, YAP_MkIntTerm(errno));
    }
  }
  return YAP_Unify(YAP_ARG4, YAP_MkIntTerm(sys));
#endif
}
예제 #2
0
static YAP_Bool point_list_to_sequence (YAP_Term term,
                                          unsigned int size,
                                          sequence_t *sequence)
{
  YAP_Float x, y;
  unsigned int n;
  YAP_Term head;

  *sequence = GEOSCoordSeq_create (size, 2);
  if (*sequence == NULL)
    return (FALSE);
  for (n = 0; YAP_IsPairTerm (term) != FALSE; n ++)
    {
      assert (n < size);
      head = YAP_HeadOfTerm (term);
      if ((Yap_IsNumberTerm (YAP_ArgOfTerm (1, head), &x) == FALSE)
          || (Yap_IsNumberTerm (YAP_ArgOfTerm (2, head), &y) == FALSE)
          || (GEOSCoordSeq_setX (*sequence, n, x) == 0)
          || (GEOSCoordSeq_setY (*sequence, n, y) == 0))
        {
          GEOSCoordSeq_destroy (*sequence);
          return (FALSE);
        }
      term = YAP_TailOfTerm (term);
    }
  assert (n == size);
  assert (YAP_IsAtomTerm (term) != FALSE);
  assert (strcmp (YAP_AtomName (YAP_AtomOfTerm (term)), "[]") == 0);
  return (TRUE);
}
예제 #3
0
static int
p_startmatlab(void)
{
  char opts[BUFSIZE];
  const char *ptr;
  YAP_Term topts = YAP_ARG1;

  if (Meng)
    return TRUE;
  if (YAP_IsAtomTerm(topts))
    ptr = YAP_AtomName(YAP_AtomOfTerm(topts));
  else
    {
      if (!YAP_StringToBuffer(topts,opts, BUFSIZE))
	return YAP_Unify(YAP_ARG2, YAP_MkIntTerm(-1));
      ptr = opts;
    }
  if (!strlen(ptr)) {
    if (!(Meng = engOpen("\0"))) {
      return YAP_Unify(YAP_ARG2, YAP_MkIntTerm(-2));
    }
  } else {
    if (!(Meng = engOpen(ptr))) {
      return YAP_Unify(YAP_ARG2, YAP_MkIntTerm(-2));
    }
  }
  engOutputBuffer(Meng, NULL, 0);
  return TRUE;
}
예제 #4
0
static int
p_create_cell_matrix_and_copy1(void)
{
  int rows, cols;
  mxArray *mat;
  YAP_Term tl = YAP_ARG3;

  rows = YAP_IntOfTerm(YAP_ARG1);
  cols = YAP_IntOfTerm(YAP_ARG2);
  if (!(mat = mxCreateCellMatrix(rows, cols)))
    return FALSE;
    while (YAP_IsPairTerm(tl)) {
    YAP_Term th = YAP_HeadOfTerm(tl);
    int off = MAT_ACCESS(YAP_IntOfTerm(YAP_ArgOfTerm(1,th))-1,
			 YAP_IntOfTerm(YAP_ArgOfTerm(2,th))-1,
			 rows,cols);
    mxArray *mat2 = get_array(YAP_ArgOfTerm(3,th));
    mxSetCell(mat,off, mat2);
    tl = YAP_TailOfTerm(tl);
  }
  if (YAP_IsAtomTerm(YAP_ARG4)) {
    return !engPutVariable(Meng, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG4)), mat);
  }
  return YAP_Unify(YAP_ARG4,address2term(mat));
}
예제 #5
0
파일: sys.c 프로젝트: vscosta/yap-6.3
static YAP_Bool p_mktemp(void) {
#if HAVE_MKSTEMP || HAVE_MKTEMP || defined(__MINGW32__) || _MSC_VER
  char *s, tmp[BUF_SIZE];
  s = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
#if HAVE_STRNCPY
  strncpy(tmp, s, BUF_SIZE);
#else
  strcpy(tmp, s);
#endif
#if defined(__MINGW32__) || _MSC_VER
  if ((s = _mktemp(tmp)) == NULL) {
    /* return an error number */
    return (YAP_Unify(YAP_ARG3, YAP_MkIntTerm(errno)));
  }
  return (YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(s))));
#elif HAVE_MKSTEMP
  strcpy(tmp, "/tmp/YAP_tmpXXXXXXXX");
  if (mkstemp(tmp) == -1) {
    /* return an error number */
    return (YAP_Unify(YAP_ARG3, YAP_MkIntTerm(errno)));
  }
  return YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(tmp)));
#else
  if ((s = mktemp(tmp)) == NULL) {
    /* return an error number */
    return (YAP_Unify(YAP_ARG3, YAP_MkIntTerm(errno)));
  }
  return YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(s)));
#endif
#else
  return FALSE;
#endif
  return (TRUE);
}
예제 #6
0
파일: cuda.c 프로젝트: logicmoo/yap-6.3
static int
cuda_load_fact( void ) {

    int i = currentFact;

#if defined(DATALOG) || defined(TUFFY)
    YAP_Term th = YAP_ARG1;
    int ncols = currentPred->num_columns;
    int j;
    int *mat = currentPred->address_host_table;
    for (j = 0; j < ncols; j++) {
        YAP_Term ta = YAP_ArgOfTerm(j+1, th);
        if (YAP_IsAtomTerm(ta)) {
            mat[i*ncols+j] = YAP_AtomToInt(YAP_AtomOfTerm(ta));
        } else {
            mat[i*ncols+j] = YAP_IntOfTerm(ta);
        }
    }
#endif

    i++;
    if (i == currentPred->num_rows) {
        Cuda_NewFacts(currentPred);
        currentPred = NULL;
        currentFact = 0;
    } else {
        currentFact = i;
    }
    return TRUE;
}
예제 #7
0
static mxArray*
get_array(YAP_Term ti)
{
  if (YAP_IsIntTerm(ti)) {
    return mxCreateDoubleScalar(YAP_IntOfTerm(ti));
  } else if (YAP_IsFloatTerm(ti)) {
    return mxCreateDoubleScalar(YAP_FloatOfTerm(ti));
  } else if (YAP_IsAtomTerm(ti)) {
    return matlab_getvar(ti);    
  } else if (YAP_IsPairTerm(ti)) {
    YAP_Term tv = YAP_HeadOfTerm(ti);
    YAP_Term tf = YAP_TailOfTerm(ti);
    const mxArray *mout;

    if (!YAP_IsAtomTerm(tv)) {
      char s[BUFSIZE];
      if (!YAP_StringToBuffer(ti, s, BUFSIZE))
	return FALSE;
      return mxCreateString(s);
    }
    mout = matlab_getvar(tv);
    if (!mout)
      return FALSE;
    if (YAP_IsIntTerm(tf)) {
      return mxGetFieldByNumber(mout, 0, YAP_IntOfTerm(tf));
    } else if (YAP_IsAtomTerm(tf))  {
      const char *s=YAP_AtomName(YAP_AtomOfTerm(tf));
      return mxGetField(mout, 0, s);
    } else {
      return NULL;
    }
  } else {
    return (mxArray *)YAP_IntOfTerm(YAP_ArgOfTerm(1,ti));
  }
}
예제 #8
0
파일: tries.c 프로젝트: edechter/yap
static int p_trie_mode(void) {
  YAP_Term mode_term;
  const char *mode_str;
  YAP_Int mode;

  /* get mode */
  if (YAP_IsVarTerm(arg_mode)) {
    mode = trie_get_mode();
    if (mode == TRIE_MODE_STANDARD)
      mode_term = YAP_MkAtomTerm(YAP_LookupAtom("std"));
    else if (mode == TRIE_MODE_REVERSE)
      mode_term = YAP_MkAtomTerm(YAP_LookupAtom("rev"));
    else
      return FALSE;
    return YAP_Unify(arg_mode, mode_term);
  }

  /* set mode */
  mode_str = YAP_AtomName(YAP_AtomOfTerm(arg_mode));
  if (!strcmp(mode_str, "std"))
    mode = TRIE_MODE_STANDARD;
  else if (!strcmp(mode_str, "rev"))
    mode = TRIE_MODE_REVERSE;
  else
    return FALSE;
  trie_set_mode(mode);
  return TRUE;
}
예제 #9
0
파일: cuda.c 프로젝트: logicmoo/yap-6.3
static int cuda_init_query(void)
{
    int32_t pname = YAP_AtomToInt(YAP_AtomOfTerm(YAP_ARG1));
    query[qcont] = pname;
    qcont++;
    query[qcont] = 0;
    return TRUE;
}
예제 #10
0
static int
cp_back(YAP_Term vart, mxArray *mat)
{
  if (!YAP_IsAtomTerm(vart)) {
    return TRUE;
  }
  /* save back to matlab */
  return !engPutVariable(Meng, YAP_AtomName(YAP_AtomOfTerm(vart)), mat);
}
예제 #11
0
static int
p_call_matlab(void)
{
  YAP_Term tlength = YAP_ARG2,
    tl = YAP_ARG3,
    tname = YAP_ARG1,
    tolength = YAP_ARG4,
    tout = YAP_ARG5;
  int i = 0;
  mxArray *inps[50], *outs[50];
  const char *name;
  int olength = YAP_IntOfTerm(tolength);

  if (!YAP_IsAtomTerm(tname))
    return FALSE;
  name = YAP_AtomName(YAP_AtomOfTerm(tname));
  if (!YAP_IsIntTerm(tlength))
    return FALSE;
  while (YAP_IsPairTerm(tl)) {
    inps[i] = get_array(YAP_HeadOfTerm(tl));
    i++;
    tl = YAP_TailOfTerm(tl);
  }
  if (mexCallMATLAB(olength, outs, i, inps, name))
    return FALSE;
  /* output arguments */
  if (YAP_IsPairTerm(tout)) {
    for (i=0; i<olength; i++) {
      YAP_Term ti = YAP_HeadOfTerm(tout);
      if (YAP_IsAtomTerm(ti)) {
	return !engPutVariable(Meng, YAP_AtomName(YAP_AtomOfTerm(ti)), outs[i]);
      } else {
	return YAP_Unify(ti,address2term(outs[i]));
      }
    }    
  } else {
    YAP_Term to = YAP_MkAtomTerm(YAP_LookupAtom("[]"));
    for (i=olength; i>0; i--) {
      to = YAP_MkPairTerm(address2term(outs[i-1]),to);
    }    
  }
  return TRUE;
}
예제 #12
0
/* Check if a prolog `term' is a well formed list and optionally
   return it's size if the variable `size' is not NULL. */
static YAP_Bool is_list_get_size (YAP_Term term, unsigned int *size)
{
  unsigned int n;
  for (n = 0; YAP_IsPairTerm (term) != FALSE; n ++)
    term = YAP_TailOfTerm (term);
  if ((YAP_IsAtomTerm (term) == FALSE)
      || (strcmp (YAP_AtomName (YAP_AtomOfTerm (term)), "[]") != 0))
    return (FALSE);
  if (size != NULL)
    *size = n;
  return (TRUE);
}
예제 #13
0
파일: sys.c 프로젝트: vscosta/yap-6.3
static YAP_Bool p_unlink(void) {
  char *fd = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
#if defined(__MINGW32__) || _MSC_VER
  if (_unlink(fd) == -1)
#else
  if (unlink(fd) == -1)
#endif
  {
    /* return an error number */
    return (YAP_Unify(YAP_ARG2, YAP_MkIntTerm(errno)));
  }
  return (TRUE);
}
예제 #14
0
파일: cuda.c 프로젝트: logicmoo/yap-6.3
static int
cuda_coverage( void )
{
    int32_t *mat;

#if defined(DATALOG) || defined(TUFFY)
    int32_t *query = NULL;
    setQuery(YAP_ARG1, &query);
#endif

    int32_t n = Cuda_Eval(facts, cf, rules, cr, query, & mat, 0, 0);
    int32_t post = YAP_AtomToInt(YAP_AtomOfTerm(YAP_ARG2));
    int32_t i = n/2, min = 0, max = n-1;
    int32_t t0, t1;

    if (n < 0)
        return FALSE;
    if (n == 0) {
        return YAP_Unify(YAP_ARG4, YAP_MkIntTerm(0)) &&
               YAP_Unify(YAP_ARG3, YAP_MkIntTerm(0));
    }
    t0 = mat[0], t1 = mat[(n-1)*2];
    if (t0 == t1) { /* all sametype */
        free( mat );
        /* all pos */
        if (t0 == post)
            return YAP_Unify(YAP_ARG3, YAP_MkIntTerm(n)) &&
                   YAP_Unify(YAP_ARG4, YAP_MkIntTerm(0));
        /* all neg */
        return YAP_Unify(YAP_ARG4, YAP_MkIntTerm(n)) &&
               YAP_Unify(YAP_ARG3, YAP_MkIntTerm(0));
    }
    do {
        i = (min+max)/2;
        if (i == min) i++;
        if (mat[i*2] == t0) {
            min = i;
        } else {
            max = i;
        }
        if (min+1 == max) {
            free( mat );
            if (t0 == post)
                return YAP_Unify(YAP_ARG3, YAP_MkIntTerm(max)) &&
                       YAP_Unify(YAP_ARG4, YAP_MkIntTerm(n-max));
            /* all neg */
            return YAP_Unify(YAP_ARG4, YAP_MkIntTerm(max)) &&
                   YAP_Unify(YAP_ARG3, YAP_MkIntTerm(n-max));
        }
    } while ( TRUE );
}
예제 #15
0
파일: sys.c 프로젝트: vscosta/yap-6.3
/** @pred  system(+ _S_)

Passes command  _S_ to the Bourne shell (on UNIX environments) or the
current command interpreter in WIN32 environments.

Note that it executes them command as a detached process. It requires
`system` to be implemented by the system library.

*/
static YAP_Bool do_system(void) {
  char *command = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
#if HAVE_SYSTEM
  int sys = system(command);
  if (sys < 0) {
    return YAP_Unify(YAP_ARG3, YAP_MkIntTerm(errno));
  }
  return YAP_Unify(YAP_ARG2, YAP_MkIntTerm(sys));
#else
  YAP_Error(0, 0L, "system not available in this configuration, trying %s",
            command);
  return FALSE;
#endif
}
예제 #16
0
static int
p_create_double_vector(void)
{
  mwSize dims[1];
  mxArray *mat;

  dims[0] = YAP_IntOfTerm(YAP_ARG1);
  if (!(mat = mxCreateNumericArray(1, dims, mxDOUBLE_CLASS, mxREAL)))
    return FALSE;
  if (YAP_IsAtomTerm(YAP_ARG2)) {
    return !engPutVariable(Meng, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG2)), mat);
  }
  return YAP_Unify(YAP_ARG2,address2term(mat));
}
예제 #17
0
static int
p_create_cell_vector(void)
{
  mwSize dims[1];
  mxArray *mat;

  dims[0] = YAP_IntOfTerm(YAP_ARG1);
  if (!(mat = mxCreateCellArray(1, dims)))
    return FALSE;
  if (YAP_IsAtomTerm(YAP_ARG2)) {
    return !engPutVariable(Meng, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG2)), mat);
  }
  return YAP_Unify(YAP_ARG2,address2term(mat));
}
예제 #18
0
static YAP_Bool list_to_geometry (YAP_Term term,
                                    unsigned int minimum,
                                    procedure_to_geometry_t procedure,
                                    geometry_type_t geometry_type,
                                    geometry_t *geometry)
{
  geometry_t *p;
  unsigned int size;
  unsigned int v, n;
  YAP_Term head;

  assert (geometry != NULL);
  term = YAP_ArgOfTerm (1, term);
  if ((is_list_get_size (term, &size) == FALSE) || (size < minimum))
    return (FALSE);

  p = (geometry_t *) malloc (sizeof (geometry_t) * size);
  if (p == NULL)
    {
      warning ("%s: list_to_geometry: not enough memory", __FILE__);
      return (FALSE);
    }
  memset (p, 0, sizeof (geometry_t) * size);
  for (n = 0; YAP_IsPairTerm (term) != FALSE; n ++)
    {
      assert (n < size);
      head = YAP_HeadOfTerm (term);
      if (procedure (head, &p[n]) == FALSE)
        {
          for (v = 0; v < n; v ++)
            GEOSGeom_destroy (p[v]);
          free (p);
          return (FALSE);
        }
      term = YAP_TailOfTerm (term);
    }
  assert (n == size);
  assert (YAP_IsAtomTerm (term) != FALSE);
  assert (strcmp (YAP_AtomName (YAP_AtomOfTerm (term)), "[]") == 0);
  if (geometry_type == GEOS_POLYGON)
    *geometry = GEOSGeom_createPolygon (p[0], p + 1, size - 1);
  else
    *geometry = GEOSGeom_createCollection (geometry_type, p, size);
  memset (p, 0, sizeof (geometry_t) * size);
  free (p);

  if (*geometry == NULL)
    return (FALSE);
  return (TRUE);
}
예제 #19
0
파일: cuda.c 프로젝트: logicmoo/yap-6.3
static int
cuda_init_facts( void ) {

    int32_t nrows = YAP_IntOfTerm(YAP_ARG1);
    int32_t ncols = YAP_IntOfTerm(YAP_ARG2);
    int32_t *mat = (int32_t *)malloc(sizeof(int32_t)*nrows*ncols);
    int32_t pname = YAP_AtomToInt(YAP_AtomOfTerm(YAP_ARG3));
    predicate *pred;

    strcat(names, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG3)));
    strcat(names, " ");

    if (!mat)
        return FALSE;
    if (YAP_IsVarTerm( YAP_ARG4)) {
        // new
        pred = (predicate *)malloc(sizeof(predicate));
    } else {
        pred = (predicate *)YAP_IntOfTerm(YAP_ARG4);
        if (pred->address_host_table)
            free( pred->address_host_table );
    }
    pred->name = pname;
    pred->num_rows = nrows;
    pred->num_columns = ncols;
    pred->is_fact = TRUE;
    pred->address_host_table =  mat;
    currentPred = pred;
    currentFact = 0;

    if (YAP_IsVarTerm( YAP_ARG4)) {
        return YAP_Unify(YAP_ARG4, YAP_MkIntTerm((YAP_Int)pred));
    } else {
        return TRUE;
    }
}
예제 #20
0
파일: sys.c 프로젝트: vscosta/yap-6.3
static YAP_Bool p_rmdir(void) {
  char *fd = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
#if defined(__MINGW32__) || _MSC_VER
  if (_rmdir(fd) == -1) {
#else
  if (rmdir(fd) == -1) {
#endif
    /* return an error number */
    return (YAP_Unify(YAP_ARG2, YAP_MkIntTerm(errno)));
  }
  return (TRUE);
}

static YAP_Bool rename_file(void) {
  char *s1 = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
  char *s2 = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG2));
#if HAVE_RENAME
  if (rename(s1, s2) == -1) {
    /* return an error number */
    return (YAP_Unify(YAP_ARG3, YAP_MkIntTerm(errno)));
  }
#endif
  return (TRUE);
}
예제 #21
0
static int
p_create_double_array(void)
{
  int rows, cols;
  mxArray *mat;

  rows = YAP_IntOfTerm(YAP_ARG1);
  cols = YAP_IntOfTerm(YAP_ARG2);
  if (!(mat = mxCreateDoubleMatrix(rows, cols, mxREAL)))
    return FALSE;
  if (YAP_IsAtomTerm(YAP_ARG3)) {
    return !engPutVariable(Meng, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG3)), mat);
  }
  return YAP_Unify(YAP_ARG3,address2term(mat));
}
예제 #22
0
static int
p_evalstring2(void)
{
  char com[BUFSIZE];
  YAP_Term tcom = YAP_ARG1;
  const char *comd;

  if (YAP_IsAtomTerm(tcom))
    comd = YAP_AtomName(YAP_AtomOfTerm(tcom));
  else {
    if (!YAP_StringToBuffer(tcom, com, BUFSIZE))
      return YAP_Unify(YAP_ARG2, YAP_MkIntTerm(-1));
    comd = com;
  }
  return !engEvalString(Meng, comd);
}
예제 #23
0
파일: cuda.c 프로젝트: logicmoo/yap-6.3
static int
load_facts( void ) {

    int32_t nrows = YAP_IntOfTerm(YAP_ARG1);
    int32_t ncols = YAP_IntOfTerm(YAP_ARG2), i = 0;
    YAP_Term t3 = YAP_ARG3;
    int32_t *mat = (int32_t *)malloc(sizeof(int32_t)*nrows*ncols);
    int32_t pname = YAP_AtomToInt(YAP_NameOfFunctor(YAP_FunctorOfTerm(YAP_HeadOfTerm(t3))));
    predicate *pred;

    while(YAP_IsPairTerm(t3)) {
        int32_t j = 0;
        YAP_Term th = YAP_HeadOfTerm(t3);

        for (j = 0; j < ncols; j++) {
            YAP_Term ta = YAP_ArgOfTerm(j+1, th);
            if (YAP_IsAtomTerm(ta)) {
                mat[i*ncols+j] = YAP_AtomToInt(YAP_AtomOfTerm(ta));
            } else {
                mat[i*ncols+j] = YAP_IntOfTerm(ta);
            }
        }
        t3 = YAP_TailOfTerm( t3 );
        i++;
    }
    if (YAP_IsVarTerm( YAP_ARG4)) {
        // new
        pred = (predicate *)malloc(sizeof(predicate));
    } else {
        pred = (predicate *)YAP_IntOfTerm(YAP_ARG4);
        if (pred->address_host_table)
            free( pred->address_host_table );
    }
    pred->name = pname;
    pred->num_rows = nrows;
    pred->num_columns = ncols;
    pred->is_fact = TRUE;
    pred->address_host_table =  mat;
    Cuda_NewFacts(pred);
    if (YAP_IsVarTerm( YAP_ARG4)) {
        return YAP_Unify(YAP_ARG4, YAP_MkIntTerm((YAP_Int)pred));
    } else {
        return TRUE;
    }
}
예제 #24
0
static int optimizer_get_parameter( void ) {
  YAP_Term t1 = YAP_ARG1;
  YAP_Term t2 = YAP_ARG2;

  if (! YAP_IsAtomTerm(t1)) {
    return FALSE;
  }

  const char* name=YAP_AtomName(YAP_AtomOfTerm(t1));

  if ((strcmp(name, "m") == 0)) {
    return YAP_Unify(t2,YAP_MkIntTerm(param.m));
  } else if  ((strcmp(name, "epsilon") == 0)) {
    return YAP_Unify(t2,YAP_MkFloatTerm(param.epsilon));
  } else if  ((strcmp(name, "past") == 0)) {
    return YAP_Unify(t2,YAP_MkIntTerm(param.past));
  } else if  ((strcmp(name, "delta") == 0)) {
    return YAP_Unify(t2,YAP_MkFloatTerm(param.delta));
  } else if  ((strcmp(name, "max_iterations") == 0)) {
    return YAP_Unify(t2,YAP_MkIntTerm(param.max_iterations));
  } else if  ((strcmp(name, "linesearch") == 0)) {
    return YAP_Unify(t2,YAP_MkIntTerm(param.linesearch));
  } else if  ((strcmp(name, "max_linesearch") == 0)) {
    return YAP_Unify(t2,YAP_MkIntTerm(param.max_linesearch));
  } else if  ((strcmp(name, "min_step") == 0)) {
    return YAP_Unify(t2,YAP_MkFloatTerm(param.min_step));
  } else if  ((strcmp(name, "max_step") == 0)) {
    return YAP_Unify(t2,YAP_MkFloatTerm(param.max_step));
  } else if  ((strcmp(name, "ftol") == 0)) {
    return YAP_Unify(t2,YAP_MkFloatTerm(param.ftol));
  } else if  ((strcmp(name, "gtol") == 0)) {
    return YAP_Unify(t2,YAP_MkFloatTerm(param.gtol));
  } else if  ((strcmp(name, "xtol") == 0)) {
    return YAP_Unify(t2,YAP_MkFloatTerm(param.xtol));
  } else if  ((strcmp(name, "orthantwise_c") == 0)) {
    return YAP_Unify(t2,YAP_MkFloatTerm(param.orthantwise_c));
  } else if  ((strcmp(name, "orthantwise_start") == 0)) {
    return YAP_Unify(t2,YAP_MkIntTerm(param.orthantwise_start));
  } else if  ((strcmp(name, "orthantwise_end") == 0)) {
    return YAP_Unify(t2,YAP_MkIntTerm(param.orthantwise_end));
  }

  printf("ERROR: The parameter %s is unknown.\n",name);
  return FALSE;
}
예제 #25
0
파일: sys.c 프로젝트: vscosta/yap-6.3
static YAP_Bool read_link(void) {
  char *s1 = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
#if HAVE_READLINK
  char buf[MAXPATHLEN + 1];

  if (readlink(s1, buf, MAXPATHLEN) < 0)
    return false;

  /* return an error number */
  if (!YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(buf)))) {
    return false;
  }
#endif
#if _WIN32
  return false;
#endif
  return true;
}
예제 #26
0
파일: itries.c 프로젝트: davidvaz/yap-cmake
static int p_itrie_mode(void) {
  YAP_Term mode_term;
  const char *mode_str;
  YAP_Int mode;

  /* check arg */
  if (!YAP_IsIntTerm(arg_itrie)) 
    return FALSE;

  /* get mode */
  if (YAP_IsVarTerm(arg_mode)) {
    mode = itrie_get_mode((TrEntry) YAP_IntOfTerm(arg_itrie));
    if (mode == ITRIES_MODE_INC_POS)
      mode_term = YAP_MkAtomTerm(YAP_LookupAtom("inc_pos"));
    else if (mode == ITRIES_MODE_DEC_POS)
      mode_term = YAP_MkAtomTerm(YAP_LookupAtom("dec_pos"));
    else if (mode == ITRIES_MODE_INC_NEG)
      mode_term = YAP_MkAtomTerm(YAP_LookupAtom("inc_neg"));
    else if (mode == ITRIES_MODE_DEC_NEG)
      mode_term = YAP_MkAtomTerm(YAP_LookupAtom("dec_neg"));
    else if (mode == ITRIES_MODE_NONE)
      mode_term = YAP_MkAtomTerm(YAP_LookupAtom("none"));
    else
      return FALSE;
    return YAP_Unify(arg_mode, mode_term);
  }

  /* set mode */
  mode_str = YAP_AtomName(YAP_AtomOfTerm(arg_mode));
  if (!strcmp(mode_str, "inc_pos"))
    mode = ITRIES_MODE_INC_POS;
  else if (!strcmp(mode_str, "dec_pos"))
    mode = ITRIES_MODE_DEC_POS;
  else if (!strcmp(mode_str, "inc_neg"))
    mode = ITRIES_MODE_INC_NEG;
  else if (!strcmp(mode_str, "dec_neg"))
    mode = ITRIES_MODE_DEC_NEG;
  else if (!strcmp(mode_str, "none"))
    mode = ITRIES_MODE_NONE;
  else
    return FALSE;
  itrie_set_mode((TrEntry) YAP_IntOfTerm(arg_itrie), mode);
  return TRUE;
}
예제 #27
0
파일: itries.c 프로젝트: davidvaz/yap-cmake
static int p_itrie_save_as_trie(void) {
  const char *file_str;
  FILE *file;

  /* check args */
  if (!YAP_IsIntTerm(arg_itrie))
    return FALSE;
  if (!YAP_IsAtomTerm(arg_file))
    return FALSE;

  /* open file */
  file_str = YAP_AtomName(YAP_AtomOfTerm(arg_file));
  if (!(file = fopen(file_str, "w")))
    return FALSE;

  /* save itrie as trie and close file */
  itrie_save_as_trie((TrEntry) YAP_IntOfTerm(arg_itrie), file);
  if (fclose(file))
    return FALSE;
  return TRUE;
}
예제 #28
0
static int
p_evalstring3(void)
{
  int out;
  YAP_Term tcom = YAP_ARG1;
  const char *comd;
  char com[BUFSIZE];
  char buf[OBUFSIZE];

  buf[0] = '\0';
  if (YAP_IsAtomTerm(tcom))
    comd = YAP_AtomName(YAP_AtomOfTerm(tcom));
  else {
    if (!YAP_StringToBuffer(tcom, com, BUFSIZE))
      return YAP_Unify(YAP_ARG2, YAP_MkIntTerm(-1));
    comd = com;
  }
  engOutputBuffer(Meng, buf, OBUFSIZE);
  out = !engEvalString(Meng, comd);
  engOutputBuffer(Meng, NULL, 0);
  return YAP_Unify(YAP_ARG2, YAP_BufferToString(buf));
}
예제 #29
0
static int
p_set_float_array(void)
{
  int rows, cols, i = 0, j = 0;
  double *input;
  mxArray *mat;
  YAP_Term tl = YAP_ARG3;

  rows = YAP_IntOfTerm(YAP_ARG1);
  cols = YAP_IntOfTerm(YAP_ARG2);
  if (!(mat = mxCreateDoubleMatrix(rows, cols, mxREAL)))
    return FALSE;
  input = mxGetPr(mat);
  /* copy ints to matrix. */
  for (i = 0; i < rows; i++) {
    for (j = 0; j < cols; j++) {
      YAP_Term th;

      if (!YAP_IsPairTerm(tl)) {
	return FALSE;
      }
      th = YAP_HeadOfTerm(tl);
      if (YAP_IsIntTerm(th)) {
	input[MAT_ACCESS(i,j,rows,cols)] = YAP_IntOfTerm(th);
      } else if (YAP_IsFloatTerm(th)) {
	input[MAT_ACCESS(i,j,rows,cols)] = YAP_FloatOfTerm(th);
      } else {
	/* ERROR */
	return FALSE;
      }
      tl = YAP_TailOfTerm(tl);
    }
  }
  if (YAP_IsAtomTerm(YAP_ARG4)) {
    return !engPutVariable(Meng, YAP_AtomName(YAP_AtomOfTerm(YAP_ARG4)), mat);
  }
  return YAP_Unify(YAP_ARG4,address2term(mat));
}
예제 #30
0
파일: itries.c 프로젝트: davidvaz/yap-cmake
static int p_itrie_load(void) {
  TrEntry itrie;
  const char *file_str;
  FILE *file;

  /* check args */
  if (!YAP_IsVarTerm(arg_itrie)) 
    return FALSE;
  if (!YAP_IsAtomTerm(arg_file))
    return FALSE;

  /* open file */
  file_str = YAP_AtomName(YAP_AtomOfTerm(arg_file));
  if (!(file = fopen(file_str, "r")))
    return FALSE;

  /* load itrie and close file */
  if (!(itrie = itrie_load(file)))
    return FALSE;
  if (fclose(file))
    return FALSE;
  return YAP_Unify(arg_itrie, YAP_MkIntTerm((YAP_Int) itrie));
}