/* * 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; } }
/* * 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; } }
/* * 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" ) ; }
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; }