void ring_vm_odbc_columns ( void *pPointer ) { ring_odbc *pODBC ; SQLRETURN ret ; if ( RING_API_PARACOUNT != 2 ) { RING_API_ERROR(RING_API_MISS2PARA); return ; } if ( RING_API_ISPOINTER(1) && RING_API_ISSTRING(2) ) { pODBC = (ring_odbc *) RING_API_GETCPOINTER(1,RING_VM_POINTER_ODBC) ; if ( pODBC == NULL ) { return ; } if ( ! (pODBC->nFlag & RING_ODBC_FLAG_STMT) ) { SQLAllocHandle(SQL_HANDLE_STMT, pODBC->dbc , &pODBC->stmt); pODBC->nFlag = pODBC->nFlag | RING_ODBC_FLAG_STMT ; } ret = SQLColumns(pODBC->stmt, NULL, 0, NULL, 0, (SQLCHAR *) RING_API_GETSTRING(2), SQL_NTS, NULL, 0); if ( SQL_SUCCEEDED(ret) ) { RING_API_RETNUMBER(1); } else { RING_API_RETNUMBER(0); } } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_refmeta_iscfunction ( void *pPointer ) { VM *pVM ; int x ; List *pList, *pList2 ; const char *cStr ; if ( RING_API_PARACOUNT != 1 ) { RING_API_ERROR(RING_API_BADPARACOUNT); return ; } if ( RING_API_GETSTRING(1) ) { pVM = (VM *) pPointer ; cStr = RING_API_GETSTRING(1) ; pList = pVM->pCFunctionsList ; for ( x = 1 ; x <= ring_list_getsize(pList) ; x++ ) { pList2 = ring_list_getlist(pList,x); if ( strcmp(ring_list_getstring(pList2,RING_FUNCMAP_NAME),cStr) == 0 ) { RING_API_RETNUMBER(1); return ; } } RING_API_RETNUMBER(0); } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_refmeta_islocal ( void *pPointer ) { VM *pVM ; int x ; List *pList, *pList2 ; const char *cStr ; if ( RING_API_PARACOUNT != 1 ) { RING_API_ERROR(RING_API_BADPARACOUNT); return ; } if ( RING_API_GETSTRING(1) ) { pVM = (VM *) pPointer ; cStr = RING_API_GETSTRING(1) ; /* We use -1 to skip the current scope of the locals() function */ pList = ring_list_getlist(pVM->pMem,ring_list_getsize(pVM->pMem)-1) ; for ( x = 1 ; x <= ring_list_getsize(pList) ; x++ ) { pList2 = ring_list_getlist(pList,x); if ( strcmp(ring_list_getstring(pList2,RING_VAR_NAME),cStr) == 0 ) { RING_API_RETNUMBER(1); return ; } } RING_API_RETNUMBER(0); } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_odbc_execute ( void *pPointer ) { ring_odbc *pODBC ; SQLRETURN ret ; if ( RING_API_PARACOUNT != 2 ) { RING_API_ERROR(RING_API_MISS2PARA); return ; } if ( RING_API_ISPOINTER(1) && RING_API_ISSTRING(2) ) { pODBC = (ring_odbc *) RING_API_GETCPOINTER(1,RING_VM_POINTER_ODBC) ; if ( pODBC == NULL ) { return ; } if ( pODBC->nFlag & RING_ODBC_FLAG_STMT ) { SQLFreeHandle(SQL_HANDLE_STMT,pODBC->stmt); } SQLAllocHandle(SQL_HANDLE_STMT, pODBC->dbc , &pODBC->stmt); ret = SQLExecDirect(pODBC->stmt, (SQLCHAR *) RING_API_GETSTRING(2) , (SQLINTEGER) RING_API_GETSTRINGSIZE(2)); pODBC->nFlag = pODBC->nFlag | RING_ODBC_FLAG_STMT ; if ( SQL_SUCCEEDED(ret) ) { RING_API_RETNUMBER(1); } else { RING_API_RETNUMBER(0); } } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_refmeta_isclass ( void *pPointer ) { VM *pVM ; int x ; List *pList, *pList2 ; char *cStr ; if ( RING_API_PARACOUNT != 1 ) { RING_API_ERROR(RING_API_BADPARACOUNT); return ; } if ( RING_API_GETSTRING(1) ) { pVM = (VM *) pPointer ; cStr = RING_API_GETSTRING(1) ; ring_string_lower(cStr); pList = pVM->pClassesMap ; for ( x = 1 ; x <= ring_list_getsize(pList) ; x++ ) { pList2 = ring_list_getlist(pList,x); if ( strcmp(ring_list_getstring(pList2,RING_CLASSMAP_CLASSNAME),cStr) == 0 ) { RING_API_RETNUMBER(1); return ; } } RING_API_RETNUMBER(0); } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_odbc_disconnect ( void *pPointer ) { ring_odbc *pODBC ; if ( RING_API_PARACOUNT != 1 ) { RING_API_ERROR(RING_API_MISS1PARA); return ; } if ( RING_API_ISPOINTER(1) ) { pODBC = (ring_odbc *) RING_API_GETCPOINTER(1,RING_VM_POINTER_ODBC) ; if ( pODBC == NULL ) { return ; } if ( pODBC->nFlag & RING_ODBC_FLAG_STMT ) { SQLFreeHandle(SQL_HANDLE_STMT,pODBC->stmt); pODBC->nFlag = pODBC->nFlag & ( ~ RING_ODBC_FLAG_STMT ) ; } if ( pODBC->nFlag & RING_ODBC_FLAG_DBC ) { pODBC->nFlag = pODBC->nFlag & ( ~ RING_ODBC_FLAG_DBC ) ; SQLDisconnect(pODBC->dbc); SQLFreeHandle(SQL_HANDLE_DBC,pODBC->dbc); RING_API_RETNUMBER(1); } else { RING_API_RETNUMBER(0); } } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_odbc_connect ( void *pPointer ) { ring_odbc *pODBC ; SQLCHAR outstr[1024] ; SQLSMALLINT outstrlen ; SQLRETURN ret ; if ( RING_API_PARACOUNT != 2 ) { RING_API_ERROR(RING_API_MISS2PARA); return ; } if ( RING_API_ISPOINTER(1) && RING_API_ISSTRING(2) ) { pODBC = (ring_odbc *) RING_API_GETCPOINTER(1,RING_VM_POINTER_ODBC) ; if ( pODBC == NULL ) { return ; } if ( pODBC->nFlag & RING_ODBC_FLAG_DBC ) { SQLFreeHandle(SQL_HANDLE_DBC,pODBC->dbc); } SQLAllocHandle(SQL_HANDLE_DBC, pODBC->env , &pODBC->dbc); pODBC->nFlag = pODBC->nFlag | RING_ODBC_FLAG_DBC ; ret = SQLDriverConnect(pODBC->dbc,NULL,(SQLCHAR *) RING_API_GETSTRING(2),SQL_NTS,outstr, sizeof(outstr), &outstrlen,SQL_DRIVER_COMPLETE); if ( SQL_SUCCEEDED(ret) ) { RING_API_RETNUMBER(1); } else { RING_API_RETNUMBER(0); } } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_refmeta_isprivateattribute ( void *pPointer ) { List *pList ; int x ; char *cStr ; if ( RING_API_PARACOUNT != 2 ) { RING_API_ERROR(RING_API_BADPARACOUNT); return ; } if ( RING_API_ISLIST(1) && RING_API_ISSTRING(2) ) { pList = RING_API_GETLIST(1) ; if ( ring_vm_oop_isobject(pList) ) { cStr = RING_API_GETSTRING(2) ; ring_string_lower(cStr); pList = ring_list_getlist(pList,RING_OBJECT_OBJECTDATA); for ( x = 3 ; x <= ring_list_getsize(pList) ; x++ ) { if ( strcmp(cStr,ring_list_getstring(ring_list_getlist(pList,x),RING_VAR_NAME))==0 ) { if ( ring_list_getint(ring_list_getlist(pList,x),RING_VAR_PRIVATEFLAG) == 1 ) { RING_API_RETNUMBER(1); } else { RING_API_RETNUMBER(0); } return ; } } RING_API_RETNUMBER(0); } else { RING_API_ERROR(RING_API_BADPARATYPE); } } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_odbc_autocommit ( void *pPointer ) { ring_odbc *pODBC ; SQLRETURN ret ; if ( RING_API_PARACOUNT != 2 ) { RING_API_ERROR(RING_API_MISS2PARA); return ; } if ( RING_API_ISPOINTER(1) && RING_API_ISNUMBER(2) ) { pODBC = (ring_odbc *) RING_API_GETCPOINTER(1,RING_VM_POINTER_ODBC) ; if ( pODBC == NULL ) { return ; } if ( RING_API_GETNUMBER(2) == 1 ) { ret = SQLSetConnectAttr(pODBC->dbc,SQL_ATTR_AUTOCOMMIT, ( SQLPOINTER ) SQL_AUTOCOMMIT_ON,0); } else { ret = SQLSetConnectAttr(pODBC->dbc,SQL_ATTR_AUTOCOMMIT, ( SQLPOINTER ) SQL_AUTOCOMMIT_OFF,0); } if ( SQL_SUCCEEDED(ret) ) { RING_API_RETNUMBER(1); } else { RING_API_RETNUMBER(0); } } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_refmeta_isprivatemethod ( void *pPointer ) { List *pList ; int x ; char *cStr ; if ( RING_API_PARACOUNT != 2 ) { RING_API_ERROR(RING_API_MISS2PARA); return ; } if ( RING_API_ISLIST(1) ) { pList = RING_API_GETLIST(1) ; if ( ring_vm_oop_isobject(pList) == 0 ) { RING_API_ERROR(RING_API_BADPARATYPE); return ; } if ( RING_API_ISSTRING(2) ) { cStr = RING_API_GETSTRING(2) ; ring_string_lower(cStr); x = ring_vm_oop_ismethod((VM *) pPointer,pList,cStr) ; if ( x==2 ) { RING_API_RETNUMBER(1); } else { RING_API_RETNUMBER(0); } } } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_os_ismsdos ( void *pPointer ) { #if defined(MSDOS) || defined(__MSDOS__) || defined(_MSDOS) || defined(__DOS__) RING_API_RETNUMBER(1); #else RING_API_RETNUMBER(0); #endif }
void ring_vm_os_isfreebsd ( void *pPointer ) { #ifdef __FreeBSD__ RING_API_RETNUMBER(1); #else RING_API_RETNUMBER(0); #endif }
void ring_vm_os_iswindows64 ( void *pPointer ) { #ifdef _WIN64 RING_API_RETNUMBER(1); #else RING_API_RETNUMBER(0); #endif }
void ring_vm_os_isandroid ( void *pPointer ) { #ifdef __ANDROID__ RING_API_RETNUMBER(1); #else RING_API_RETNUMBER(0); #endif }
void ring_vm_os_ismacosx ( void *pPointer ) { #if defined(__APPLE__) || defined(__MACH__) RING_API_RETNUMBER(1); #else RING_API_RETNUMBER(0); #endif }
void ring_vm_os_islinux ( void *pPointer ) { #ifdef __linux__ RING_API_RETNUMBER(1); #else RING_API_RETNUMBER(0); #endif }
void ring_vm_os_isunix ( void *pPointer ) { #if defined(unix) || defined(__unix__) || defined(__unix) RING_API_RETNUMBER(1); #else RING_API_RETNUMBER(0); #endif }
void ring_vm_odbc_close ( void *pPointer ) { ring_odbc *pODBC ; if ( RING_API_PARACOUNT != 1 ) { RING_API_ERROR(RING_API_MISS1PARA); return ; } if ( RING_API_ISPOINTER(1) ) { pODBC = (ring_odbc *) RING_API_GETCPOINTER(1,RING_VM_POINTER_ODBC) ; if ( pODBC == NULL ) { return ; } if ( pODBC->nFlag & RING_ODBC_FLAG_STMT ) { SQLFreeHandle(SQL_HANDLE_STMT,pODBC->stmt); } if ( pODBC->nFlag & RING_ODBC_FLAG_DBC ) { SQLFreeHandle(SQL_HANDLE_DBC,pODBC->dbc); } SQLFreeHandle(SQL_HANDLE_ENV,pODBC->env); free( pODBC ) ; RING_API_SETNULLPOINTER(1); RING_API_RETNUMBER(1); } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_refmeta_packageclasses ( void *pPointer ) { VM *pVM ; int x ; List *pList, *pList2, *pList3 ; char *cStr ; if ( RING_API_PARACOUNT != 1 ) { RING_API_ERROR(RING_API_BADPARACOUNT); return ; } if ( RING_API_GETSTRING(1) ) { pVM = (VM *) pPointer ; cStr = RING_API_GETSTRING(1) ; ring_string_lower(cStr); pList = pVM->pPackagesMap ; for ( x = 1 ; x <= ring_list_getsize(pList) ; x++ ) { pList2 = ring_list_getlist(pList,x); if ( strcmp(ring_list_getstring(pList2,RING_PACKAGENAME),cStr) == 0 ) { pList3 = RING_API_NEWLIST ; pList2 = ring_list_getlist(pList2,RING_CLASSESLIST) ; /* We can use the variable x for the loop again because we have return */ for ( x = 1 ; x <= ring_list_getsize(pList2) ; x++ ) { ring_list_addstring(pList3,ring_list_getstring(ring_list_getlist(pList2,x),RING_CLASSMAP_CLASSNAME)); } RING_API_RETLIST(pList3); return ; } } RING_API_RETNUMBER(0); } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_refmeta_addmethod ( void *pPointer ) { List *pList, *pList2, *pList3 ; char *cStr ; int x ; VM *pVM ; /* Parameters : Object, MethodName, Anonymous Function */ pVM = (VM *) pPointer ; if ( RING_API_PARACOUNT != 3 ) { RING_API_ERROR(RING_API_BADPARACOUNT); return ; } if ( RING_API_ISLIST(1) && RING_API_ISSTRING(2) && RING_API_ISSTRING(3) ) { pList = RING_API_GETLIST(1) ; if ( ring_vm_oop_isobject(pList) ) { pList = (List *) ring_list_getlist(pList,RING_OBJECT_CLASSPOINTER); pList = (List *) ring_list_getlist(pList,RING_CLASSMAP_METHODSLIST); cStr = RING_API_GETSTRING(3); ring_string_lower(cStr); for ( x = 1 ; x <= ring_list_getsize(pVM->pFunctionsMap) ; x++ ) { pList2 = ring_list_getlist(pVM->pFunctionsMap,x); if ( strcmp(ring_list_getstring(pList2,RING_FUNCMAP_NAME),cStr) == 0 ) { /* Add new list to the class methods list */ pList3 = ring_list_newlist(pList); /* Copy function to class methods */ ring_list_copy(pList3,pList2); /* Set the Function Name */ ring_list_setstring(pList3,RING_FUNCMAP_NAME,ring_string_lower(RING_API_GETSTRING(2))); /* Refresh the HashTable */ ring_list_genhashtable2(pList); RING_API_RETNUMBER(1); return ; } } } else { RING_API_ERROR(RING_API_BADPARATYPE); } } else { RING_API_ERROR(RING_API_BADPARATYPE); } RING_API_RETNUMBER(0); }
void ring_vm_odbc_getdata ( void *pPointer ) { ring_odbc *pODBC ; SQLINTEGER indicator ; SQLUSMALLINT i ; SQLRETURN ret ; char *buf, *buf2 ; int nSize ; if ( RING_API_PARACOUNT != 2 ) { RING_API_ERROR(RING_API_MISS2PARA); return ; } if ( RING_API_ISPOINTER(1) && RING_API_ISNUMBER(2) ) { pODBC = (ring_odbc *) RING_API_GETCPOINTER(1,RING_VM_POINTER_ODBC) ; if ( pODBC == NULL ) { return ; } i = (SQLUSMALLINT) RING_API_GETNUMBER(2) ; nSize = 512 ; buf = (char *) malloc(nSize) ; if ( buf == NULL ) { RING_API_ERROR(RING_OOM); return ; } ret = SQLGetData(pODBC->stmt, i, SQL_C_CHAR,buf, nSize, &indicator); if ( SQL_SUCCEEDED(ret) ) { if ( indicator == SQL_NULL_DATA ) { strcpy(buf,"NULL"); nSize = 4 ; } else if ( (ret == SQL_SUCCESS_WITH_INFO) && (indicator > 512) ) { nSize = 512+indicator ; buf2 = (char *) realloc(buf , nSize); if ( buf2 == NULL ) { RING_API_ERROR(RING_OOM); return ; } buf = buf2 ; SQLGetData(pODBC->stmt, i, SQL_C_CHAR,buf+511, indicator+1, &indicator); nSize = 511+indicator ; } else { nSize = indicator ; } RING_API_RETSTRING2(buf,nSize); } else { RING_API_RETNUMBER(0); } free( buf ) ; } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_odbc_rollback ( void *pPointer ) { ring_odbc *pODBC ; SQLRETURN ret ; if ( RING_API_PARACOUNT != 1 ) { RING_API_ERROR(RING_API_MISS1PARA); return ; } if ( RING_API_ISPOINTER(1) ) { pODBC = (ring_odbc *) RING_API_GETCPOINTER(1,RING_VM_POINTER_ODBC) ; if ( pODBC == NULL ) { return ; } ret = SQLEndTran(SQL_HANDLE_DBC,pODBC->dbc,SQL_ROLLBACK); if ( SQL_SUCCEEDED(ret) ) { RING_API_RETNUMBER(1); } else { RING_API_RETNUMBER(0); } } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_odbc_fetch ( void *pPointer ) { ring_odbc *pODBC ; if ( RING_API_PARACOUNT != 1 ) { RING_API_ERROR(RING_API_MISS1PARA); return ; } if ( RING_API_ISPOINTER(1) ) { pODBC = (ring_odbc *) RING_API_GETCPOINTER(1,RING_VM_POINTER_ODBC) ; if ( pODBC == NULL ) { return ; } RING_API_RETNUMBER(SQL_SUCCEEDED(SQLFetch(pODBC->stmt))); } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_odbc_colcount ( void *pPointer ) { ring_odbc *pODBC ; SQLSMALLINT columns ; if ( RING_API_PARACOUNT != 1 ) { RING_API_ERROR(RING_API_MISS1PARA); return ; } if ( RING_API_ISPOINTER(1) ) { pODBC = (ring_odbc *) RING_API_GETCPOINTER(1,RING_VM_POINTER_ODBC) ; if ( pODBC == NULL ) { return ; } SQLNumResultCols(pODBC->stmt, &columns); RING_API_RETNUMBER(columns); } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_sqlite_open ( void *pPointer ) { ring_sqlite *psqlite ; int rc ; if ( RING_API_PARACOUNT != 2 ) { RING_API_ERROR(RING_API_MISS2PARA); return ; } if ( RING_API_ISPOINTER(1) && RING_API_ISSTRING(2) ) { psqlite = (ring_sqlite *) RING_API_GETCPOINTER(1,RING_VM_POINTER_SQLITE) ; if ( psqlite == NULL ) { return ; } rc = sqlite3_open(RING_API_GETSTRING(2),&psqlite->db); RING_API_RETNUMBER((double) rc); } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_odbc_init ( void *pPointer ) { SQLRETURN ret ; ring_odbc *pODBC ; pODBC = (ring_odbc *) malloc(sizeof(ring_odbc)) ; if ( pODBC == NULL ) { RING_API_ERROR(RING_OOM); return ; } SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &pODBC->env); pODBC->nFlag = RING_ODBC_FLAG_ENV ; ret = SQLSetEnvAttr(pODBC->env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0); if ( SQL_SUCCEEDED(ret) ) { RING_API_RETCPOINTER(pODBC,RING_VM_POINTER_ODBC); } else { free( pODBC ) ; RING_API_RETNUMBER(0); } }
void ring_vm_sqlite_close ( void *pPointer ) { ring_sqlite *psqlite ; if ( RING_API_PARACOUNT != 1 ) { RING_API_ERROR(RING_API_MISS1PARA); return ; } if ( RING_API_ISPOINTER(1) ) { psqlite = (ring_sqlite *) RING_API_GETCPOINTER(1,RING_VM_POINTER_SQLITE) ; if ( psqlite == NULL ) { return ; } if ( psqlite->db ) { sqlite3_close(psqlite->db); } free( psqlite ) ; RING_API_SETNULLPOINTER(1); RING_API_RETNUMBER(1); } else { RING_API_ERROR(RING_API_BADPARATYPE); } }
void ring_vm_refmeta_getattribute ( void *pPointer ) { List *pList ; char *cStr ; int x ; if ( RING_API_PARACOUNT != 2 ) { RING_API_ERROR(RING_API_BADPARACOUNT); return ; } if ( RING_API_ISLIST(1) && RING_API_ISSTRING(2) ) { pList = RING_API_GETLIST(1) ; if ( ring_vm_oop_isobject(pList) ) { pList = ring_list_getlist(pList,RING_OBJECT_OBJECTDATA); cStr = RING_API_GETSTRING(2) ; ring_string_lower(cStr); for ( x = 1 ; x <= ring_list_getsize(pList) ; x++ ) { if ( strcmp(ring_list_getstring(ring_list_getlist(pList,x),RING_VAR_NAME),cStr) == 0 ) { pList = ring_list_getlist(pList,x) ; if ( ring_list_isnumber(pList,RING_VAR_VALUE) ) { RING_API_RETNUMBER(ring_list_getdouble(pList,RING_VAR_VALUE)); } else if ( ring_list_isstring(pList,RING_VAR_VALUE) ) { RING_API_RETSTRING2(ring_list_getstring(pList,RING_VAR_VALUE),ring_list_getstringsize(pList,RING_VAR_VALUE)); } else if ( ring_list_islist(pList,RING_VAR_VALUE) ) { RING_API_RETLIST(ring_list_getlist(pList,RING_VAR_VALUE)); } return ; } } RING_API_ERROR("Error : Property is not found!"); } else { RING_API_ERROR(RING_API_BADPARATYPE); } } else { RING_API_ERROR(RING_API_BADPARATYPE); } }