コード例 #1
0
ファイル: matlab.c プロジェクト: gokhansolak/yap-6.3
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;
}
コード例 #2
0
ファイル: sys.c プロジェクト: vscosta/yap-6.3
/** md5( +Text, -Key, -Remaining keyq
 * encode text using OpenSSL
 *
 * arg Text is a List of ASCII codes
 * arg2 and 3: difference list with the character codes for the
 * digest.
 *
 * @return whether ARG1's md5 unifies with the difference liat.
 */
static YAP_Bool md5(void) {
  unsigned char buf[64];
  md5_state_t pms;
  const char *s;
  size_t len = -1;

  if (!(s = YAP_StringToBuffer(YAP_ARG1, NULL, len)) || s[0] == 0)
    return false;

  md5_init(&pms);
  md5_append(&pms, (const unsigned char *)s, strlen(s));
  md5_finish(&pms, buf);
  // free((void *)s);
  YAP_Term t = YAP_ARG3;
  int i = 16;
  while (i > 0) {
    int top, bop;
    i--;
    top = buf[i] >> 4;
    if (top > 9)
      top = (top - 10) + 'a';
    else
      top = top + '0';
    bop = buf[i] & 15;
    if (bop > 9)
      bop = (bop - 10) + 'a';
    else
      bop = bop + '0';
    t = YAP_MkPairTerm(YAP_MkIntTerm(top),
                       YAP_MkPairTerm(YAP_MkIntTerm(bop), t));
  }
  return YAP_Unify(YAP_ARG2, t);
}
コード例 #3
0
ファイル: matlab.c プロジェクト: gokhansolak/yap-6.3
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));
  }
}
コード例 #4
0
ファイル: regexp.c プロジェクト: gokhansolak/yap-6.3
static YAP_Bool check_regexp(void) 
{
  unsigned int buflen = (unsigned int)YAP_IntOfTerm(YAP_ARG2)+1;
  unsigned int sbuflen = (unsigned int)YAP_IntOfTerm(YAP_ARG4)+1;
  char *buf, *sbuf;
  regex_t reg;
  int out;
  int yap_flags = YAP_IntOfTerm(YAP_ARG5);
  int regcomp_flags = REG_NOSUB|REG_EXTENDED;
  
  if ((buf = (char *)YAP_AllocSpaceFromYap(buflen)) == NULL) {
    /* early exit */
    return(FALSE);
  }
  if (YAP_StringToBuffer(YAP_ARG1,buf,buflen) == FALSE) {
    /* something went wrong, possibly a type checking error */
    YAP_FreeSpaceFromYap(buf);
    return(FALSE);
  }
  if (yap_flags & 1)
    regcomp_flags |= REG_ICASE;
  /* cool, now I have my string in the buffer, let's have some fun */
  if (yap_regcomp(&reg,buf, regcomp_flags) != 0)
    return(FALSE);
  if ((sbuf = (char *)YAP_AllocSpaceFromYap(sbuflen)) == NULL) {
    /* early exit */
    yap_regfree(&reg);
    YAP_FreeSpaceFromYap(buf);
    return(FALSE);
  }
  if (YAP_StringToBuffer(YAP_ARG3,sbuf,sbuflen) == FALSE) {
    /* something went wrong, possibly a type checking error */
    yap_regfree(&reg);
    YAP_FreeSpaceFromYap(buf);
    YAP_FreeSpaceFromYap(sbuf); 
    return(FALSE);
  }
  out = yap_regexec(&reg,sbuf,0,NULL,0);
  yap_regfree(&reg);
  YAP_FreeSpaceFromYap(buf);
  YAP_FreeSpaceFromYap(sbuf); 
  if (out != 0 && out != REG_NOMATCH) {
    return(FALSE);
  }
  return(out == 0);
}
コード例 #5
0
ファイル: interface.c プロジェクト: jcazevedo/YapR
static int send_r_command(void)
{
    YAP_Term in = YAP_ARG1;
    char buffer[256];

    YAP_StringToBuffer(in, buffer, BUFSIZE);
    send_command(buffer);

    return 1;
}
コード例 #6
0
ファイル: interface.c プロジェクト: jcazevedo/YapR
static int list_val(void)
{
    YAP_Term in = YAP_ARG1;
    YAP_Term out = YAP_ARG2;
    char buffer[256];

    YAP_StringToBuffer(in, buffer, BUFSIZE);
    YAP_Term res = build_list(get_list(buffer), 0);

    return YAP_Unify(out, res);
}
コード例 #7
0
ファイル: interface.c プロジェクト: jcazevedo/YapR
static int float_val(void)
{
    YAP_Term in = YAP_ARG1;
    YAP_Term out = YAP_ARG2;
    char buffer[256];

    YAP_StringToBuffer(in, buffer, BUFSIZE);
    YAP_Term res = YAP_MkFloatTerm(get_double(buffer));

    return YAP_Unify(out, res);
}
コード例 #8
0
ファイル: matlab.c プロジェクト: gokhansolak/yap-6.3
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);
}
コード例 #9
0
ファイル: bddem.c プロジェクト: gokhansolak/yap-6.3
static YAP_Bool create_dot(void) {
  const char *onames[] = {"Out"};
  char **inames;
  DdNode *array[1];
  YAP_Term arg1, arg2;
  int i, b, index;
  variable v;
  char numberVar[10], numberBit[10], filename[1000];
  FILE *file;

  arg1 = YAP_ARG1;
  arg2 = YAP_ARG2;

  YAP_StringToBuffer(arg2, filename, 1000);
  inames = (char **)malloc(sizeof(char *) * (boolVars_ex[ex]));
  index = 0;
  for (i = 0; i < nVars_ex[ex]; i++) {
    v = vars_ex[ex][i];
    for (b = 0; b < v.nVal - 1; b++) {
      inames[b + index] = (char *)malloc(sizeof(char) * 20);
      strcpy(inames[b + index], "X");
      sprintf(numberVar, "%d", i);
      strcat(inames[b + index], numberVar);
      strcat(inames[b + index], "_");
      sprintf(numberBit, "%d", b);
      strcat(inames[b + index], numberBit);
    }
    index = index + v.nVal - 1;
  }
  array[0] = (DdNode *)YAP_IntOfTerm(arg1);
  file = open_file(filename, "w");
  Cudd_DumpDot(mgr_ex[ex], 1, array, (const char **)inames, onames, file);
  fclose(file);
  index = 0;
  for (i = 0; i < nVars_ex[ex]; i++) {
    v = vars_ex[ex][i];
    for (b = 0; b < v.nVal - 1; b++) {
      free(inames[b + index]);
    }
    index = index + v.nVal - 1;
  }
  free(inames);
  return 1;
}
コード例 #10
0
ファイル: matlab.c プロジェクト: gokhansolak/yap-6.3
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));
}
コード例 #11
0
ファイル: regexp.c プロジェクト: gokhansolak/yap-6.3
static YAP_Bool regexp(void) 
{
  unsigned int buflen = (unsigned int)YAP_IntOfTerm(YAP_ARG2)+1;
  unsigned int sbuflen = (unsigned int)YAP_IntOfTerm(YAP_ARG4)+1;
  char *buf, *sbuf;
  regex_t reg;
  int out;
  size_t nmatch;
  regmatch_t *pmatch;
  long int tout;
  int yap_flags = YAP_IntOfTerm(YAP_ARG5);
  int regcomp_flags = REG_EXTENDED;
  
  
  if ((buf = (char *)YAP_AllocSpaceFromYap(buflen)) == NULL) {
    /* early exit */
    return(FALSE);
  }
  if (YAP_StringToBuffer(YAP_ARG1,buf,buflen) == FALSE) {
    /* something went wrong, possibly a type checking error */
    YAP_FreeSpaceFromYap(buf);
    return(FALSE);
  }
  if (yap_flags & 1)
    regcomp_flags |= REG_ICASE;
  /* cool, now I have my string in the buffer, let's have some fun */
  if (yap_regcomp(&reg,buf, regcomp_flags) != 0) {
    YAP_FreeSpaceFromYap(buf);
    return(FALSE);
  }
  if (YAP_IsVarTerm(YAP_ARG7)) {
    nmatch = reg.re_nsub;
  } else {
    nmatch = YAP_IntOfTerm(YAP_ARG7);
  }
  if ((sbuf = (char *)YAP_AllocSpaceFromYap(sbuflen)) == NULL) {
    /* early exit */
    yap_regfree(&reg);
    YAP_FreeSpaceFromYap(buf);
    return(FALSE);
  }
  if (YAP_StringToBuffer(YAP_ARG3,sbuf,sbuflen) == FALSE) {
    /* something went wrong, possibly a type checking error */
    yap_regfree(&reg);
    YAP_FreeSpaceFromYap(buf);
    YAP_FreeSpaceFromYap(sbuf); 
    return(FALSE);
  }
  pmatch = YAP_AllocSpaceFromYap(sizeof(regmatch_t)*(nmatch));
  out = yap_regexec(&reg,sbuf,nmatch,pmatch,0);
  if (out == 0) {
    /* match succeed, let's fill the match in */
    long int i;
    YAP_Term TNil = YAP_MkAtomTerm(YAP_LookupAtom("[]"));
    YAP_Functor FDiff = YAP_MkFunctor(YAP_LookupAtom("-"),2);

    tout = TNil;
    for (i = nmatch-1; i >= 0; --i) {
      int j;
      YAP_Term t = TNil;

      if (pmatch[i].rm_so != -1) {
	if (yap_flags & 2) {
	  YAP_Term to[2];
	  to[0] = YAP_MkIntTerm(pmatch[i].rm_so);
	  to[1] = YAP_MkIntTerm(pmatch[i].rm_eo);
	  t = YAP_MkApplTerm(FDiff,2,to);
	} else {
	  for (j = pmatch[i].rm_eo-1; j >= pmatch[i].rm_so; j--) {
	    t = YAP_MkPairTerm(YAP_MkIntTerm(sbuf[j]),t);
	  }
	}
	tout = YAP_MkPairTerm(t,tout);
      }
    }
    out = !YAP_Unify(tout, YAP_ARG6);
  }
  else if (out != REG_NOMATCH) {
    out = 0;
  }
  yap_regfree(&reg);
  YAP_FreeSpaceFromYap(buf);
  YAP_FreeSpaceFromYap(sbuf); 
  YAP_FreeSpaceFromYap(pmatch); 
  return(out == 0);
}