Пример #1
0
/*
 * Class:     amzi_ls_ARulesLogicServer
 * Method:    UnifyIntArg
 * Signature: (JII)J
 */
extern "C" JNIEXPORT jlong JNICALL Java_amzi_ls_ARulesLogicServer_UnifyIntArg
  (JNIEnv * jenv, jobject jobj, jlong jt, jint jarg, jint ji)
{
   TF     tf;
   TERM   t;
   int    i;

   GET_EID(e);
   t = (TERM)(ajptr)jt;
   i = (int)ji;
   tf = lsUnifyArg(e, &t, (int)jarg, cINT, &i); 

   switch(tf)
   {
   case TRUE: return (jlong)(ajptr)t;
   case FALSE: return 0;
   default: amzi_error(jenv, e, "UnifyIntArg"); return 0;
   }
}
Пример #2
0
/*
 * Class:     amzi_ls_ARulesLogicServer
 * Method:    UnifyFloatArg
 * Signature: (JID)J
 */
extern "C" JNIEXPORT jlong JNICALL Java_amzi_ls_ARulesLogicServer_UnifyFloatArg
  (JNIEnv * jenv, jobject jobj, jlong jt, jint jarg, jdouble jd)
{
   TF     tf;
   TERM   t;
   double d;

   GET_EID(e);
   t = (TERM)(ajptr)jt;
   d = (double)jd;
   tf = lsUnifyArg(e, &t, (int)jarg, cDOUBLE, &d); 

   switch(tf)
   {
   case TRUE: return (jlong)(ajptr)t;
   case FALSE: return 0;
   default: amzi_error(jenv, e, "UnifyFloatArg"); return 0;
   }
}
Пример #3
0
/*
 * Class:     amzi_ls_ARulesLogicServer
 * Method:    UnifyStrArg
 * Signature: (JILjava/lang/String;)J
 */
extern "C" JNIEXPORT jlong JNICALL Java_amzi_ls_ARulesLogicServer_UnifyStrArg
  (JNIEnv * jenv, jobject jobj, jlong jt, jint ji, jstring jstr)
{
   TF     tf;
   TERM   t;
   aCHAR* str;

   GET_EID(e);
   t = (TERM)(ajptr)jt;
   str = JtoC(jenv, jstr);
   tf = lsUnifyArg(e, &t, (int)ji, cWSTR, str); 
   delete[] str;

   switch(tf)
   {
   case TRUE: return (jlong)(ajptr)t;
   case FALSE: return 0;
   default: amzi_error(jenv, e, "UnifyStrArg"); return 0;
   }
}
void	prolog_printf ( ENGid		Engine,
		        char *		format, 
		        ... ) 
   {
	char		buffer [4096] ;
	va_list		list ;
	TERM		Write ;


	va_start ( list, format ) ;
	vsprintf( buffer, format, list ) ;
	va_end ( list ) ;

	// Don't call ExecStr directly because we would have problems with quoted
	// strings ; call lsMakeFA and lsUnifyArg instead before calling lsExec
	lsMakeFA ( Engine, & Write, "write", 1 ) ;
	lsUnifyArg ( Engine, & Write, 1, cATOM, buffer ) ;
	lsExec ( Engine, & Write ) ;

	//lsExecStr ( Engine, & Cmd, "nl" ) ;
     }
Пример #5
0
TF EXPFUNC p_db_fetch(ENGid eid)
{
   QUERY* pq;
   HSTMT  hstmt;
   TERM   tcols;
   TERM   t;
   COL*   pCol;

#ifdef _DEBUG
TERM xt1, xt2;
char xbuf1[512], xbuf2[512];
#endif

   if (pVAR != lsGetParmType(eid, 2))
   {
      lsErrRaise(eid, "db_fetch instantiation error: arg 2 must be var");
      return FALSE;
   }

   g_lsRC = lsGetParm(eid, 1, cADDR, &pq);
   if (g_lsRC != OK) goto LS_ERROR;
   hstmt = pq->hstmt;
   
   /* set up error handler */
   g_hSTMT = hstmt;
   g_eid = eid;


   if ( SQL_NO_DATA_FOUND == (g_RC = SQLFetch(hstmt)) )
   {
      DUMPLOG("no data found");
      query_del(pq);
      return FALSE;
   }
   ERROR_CHK("SQLFetch");
   DUMPLOG("found data");

   g_lsRC = lsMakeList(eid, &tcols);
   if (g_lsRC != OK) goto LS_ERROR;

   for (pCol = pq->clist; pCol != NULL; pCol = pCol->next)
   {
      switch(pCol->pdtype)
      {
      case pdATOM:
         g_lsRC = lsMakeAtom(eid, &t, pCol->s);
         if (g_lsRC != OK) goto LS_ERROR;
         break;
      case pdSTR:
         g_lsRC = lsMakeStr(eid, &t, pCol->s);
         if (g_lsRC != OK) goto LS_ERROR;
         break;
      case pdINT:
         g_lsRC = lsMakeInt(eid, &t, pCol->i);
         if (g_lsRC != OK) goto LS_ERROR;
         break;
      case pdFLOAT:
         g_lsRC = lsMakeFloat(eid, &t, pCol->f);
         if (g_lsRC != OK) goto LS_ERROR;
         break;
      case pdDOUBLE:
         g_lsRC = lsMakeFloat(eid, &t, pCol->g);
         if (g_lsRC != OK) goto LS_ERROR;
         break;
      case pdDATE:
         g_lsRC = lsMakeFA(eid, &t, "date", 3);
         if (g_lsRC != OK) goto LS_ERROR;
         lsUnifyArg(eid, &t, 1, cSHORT, &(pCol->d->year));
         lsUnifyArg(eid, &t, 2, cSHORT, &(pCol->d->month));
         lsUnifyArg(eid, &t, 3, cSHORT, &(pCol->d->day));
         break;
      case pdTIME:
         g_lsRC = lsMakeFA(eid, &t, "time", 3);
         if (g_lsRC != OK) goto LS_ERROR;
         lsUnifyArg(eid, &t, 1, cSHORT, &(pCol->t->hour));
         lsUnifyArg(eid, &t, 2, cSHORT, &(pCol->t->minute));
         lsUnifyArg(eid, &t, 3, cSHORT, &(pCol->t->second));
         break;
      default:
         messout("Unsupported Prolog type for ODBC fetch");
      }
      g_lsRC = lsPushList(eid, &tcols, t);
      if (g_lsRC != OK) return(lserror());
   }

/* #ifdef _DEBUG
lsGetParm(eid, 2, cTERM, &xt1);
lsTermToStrQ(eid, xt1, xbuf1, 500);
lsTermToStrQ(eid, xt2, xbuf2, 500);
#endif */

   lsUnifyParm(eid, 2, cTERM, &tcols);

   return TRUE;
LS_ERROR:
   return(lserror());
ODBC_ERROR:
   return FALSE;
}