emscripten/tests/nbody-java/native_java_lang_System.c

117 строки
2.8 KiB
C

#include "xmlvm.h"
#include "java_lang_System.h"
//XMLVM_BEGIN_NATIVE_IMPLEMENTATION
#include <locale.h>
#include <sys/time.h>
#include "java_lang_String.h"
//From HARMONY/classlib/modules/luni/src/main/native/luni/shared/luniglob.c
#define CHARSETBUFF 64
//From HARMONY/classlib/modules/luni/src/main/native/luni/unix/helpers.c
void getOSCharset(char *locale, const size_t size) {
char * codec = NULL;
size_t cur = 0;
short flag = 0;
setlocale(LC_CTYPE, "");
codec = setlocale(LC_CTYPE, NULL);
// get codeset from language[_territory][.codeset][@modifier]
while (*codec) {
if (!flag) {
if (*codec != '.') {
codec++;
continue;
} else {
flag = 1;
codec++;
}
} else {
if (*codec == '@') {
break;
} else {
locale[cur++] = (*codec);
codec++;
if (cur >= size) {
// Not enough size
cur = 0;
break;
}
}
}
}
locale[cur] = '\0';
if (!strlen(locale)) {
strcpy(locale, "8859_1");
}
return;
}
//XMLVM_END_NATIVE_IMPLEMENTATION
void java_lang_System_initNativeLayer__()
{
//XMLVM_BEGIN_NATIVE[java_lang_System_initNativeLayer__]
// Nothing to be done
//XMLVM_END_NATIVE
}
JAVA_LONG java_lang_System_currentTimeMillis__()
{
//XMLVM_BEGIN_NATIVE[java_lang_System_currentTimeMillis__]
struct timeval now;
gettimeofday(&now, NULL);
JAVA_LONG msec = ((JAVA_LONG) now.tv_sec) * 1000;
msec += now.tv_usec / 1000;
return msec;
//XMLVM_END_NATIVE
}
JAVA_LONG java_lang_System_nanoTime__()
{
//XMLVM_BEGIN_NATIVE[java_lang_System_nanoTime__]
//TODO implement
return java_lang_System_nanoTime__() * 1000000L;
//XMLVM_END_NATIVE
}
void java_lang_System_nativeExit___int(JAVA_INT n1)
{
//XMLVM_BEGIN_NATIVE[java_lang_System_nativeExit___int]
exit(n1);
//XMLVM_END_NATIVE
}
JAVA_OBJECT java_lang_System_getPropertyList__()
{
//XMLVM_BEGIN_NATIVE[java_lang_System_getPropertyList__]
return XMLVMArray_createSingleDimension(__CLASS_java_lang_String, 0);
//XMLVM_END_NATIVE
}
JAVA_OBJECT java_lang_System_getEncoding___int(JAVA_INT n1)
{
//XMLVM_BEGIN_NATIVE[java_lang_System_getEncoding___int]
//Get charset from the OS
#ifdef EMSCRIPTEN
return xmlvm_create_java_string("UTF-8");
#else
char charset[CHARSETBUFF];
getOSCharset(charset, CHARSETBUFF);
return xmlvm_create_java_string(charset);
#endif
//XMLVM_END_NATIVE
}
JAVA_INT java_lang_System_identityHashCode___java_lang_Object(JAVA_OBJECT n1)
{
//XMLVM_BEGIN_NATIVE[java_lang_System_identityHashCode___java_lang_Object]
return (JAVA_INT) n1;
//XMLVM_END_NATIVE
}