#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdlib.h>
#include <jni.h>
#include "de_frankbuss_jni_WinAccess.h"

JNIEXPORT void JNICALL Java_de_frankbuss_jni_WinAccess_initWindowsPlatformId
  (JNIEnv* env, jclass clazz)
{
	// get os version info
	OSVERSIONINFO osv;
	memset(&osv, 0, sizeof(OSVERSIONINFO));
	osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	GetVersionEx(&osv);

	// init platform id
	jfieldID fieldID = env->GetStaticFieldID(clazz, "windowsPlatformId", "I");
	if (fieldID) env->SetStaticIntField(clazz, fieldID, osv.dwPlatformId);
}

JNIEXPORT jstring JNICALL Java_de_frankbuss_jni_WinAccess_getenv
  (JNIEnv* env, jclass clazz, jstring name)
{
	// precondition
	if (env == NULL) return NULL;
	if (clazz == NULL) return NULL;
	if (name == NULL) return NULL;

	// get environment value
	const char* pKey = env->GetStringUTFChars(name, 0);
	if (pKey == NULL) return NULL;
	char* pValue = getenv(pKey);
	env->ReleaseStringUTFChars(name, pKey);
	if (pValue == NULL) return NULL;

	// return result string
	return env->NewStringUTF(pValue);
}

JNIEXPORT void JNICALL Java_de_frankbuss_jni_WinAccess_clrscr
  (JNIEnv *, jclass)
{
	system("cls");
}

BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
	return TRUE;
}

