/* Generated automatically by jlpp - do not edit. */ #include static jakelib::lang::String* jakelib2_strings[] = {null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null}; // "File not found" static jchar chars_jakelib2_str_0[] = {70,105,108,101,32,110,111,116,32,102,111,117,110,100}; // "Path not found" static jchar chars_jakelib2_str_1[] = {80,97,116,104,32,110,111,116,32,102,111,117,110,100}; // "Broken pipe" static jchar chars_jakelib2_str_2[] = {66,114,111,107,101,110,32,112,105,112,101}; // "Invalid handle" static jchar chars_jakelib2_str_3[] = {73,110,118,97,108,105,100,32,104,97,110,100,108,101}; // "Connection refused" static jchar chars_jakelib2_str_4[] = {67,111,110,110,101,99,116,105,111,110,32,114,101,102,117,115,101,100}; // "Error code #" static jchar chars_jakelib2_str_5[] = {69,114,114,111,114,32,99,111,100,101,32,35}; // "file.separator" static jchar chars_jakelib2_str_6[] = {102,105,108,101,46,115,101,112,97,114,97,116,111,114}; // "path.separator" static jchar chars_jakelib2_str_7[] = {112,97,116,104,46,115,101,112,97,114,97,116,111,114}; // "line.separator" static jchar chars_jakelib2_str_8[] = {108,105,110,101,46,115,101,112,97,114,97,116,111,114}; // "os.version" static jchar chars_jakelib2_str_9[] = {111,115,46,118,101,114,115,105,111,110}; // "unknown" static jchar chars_jakelib2_str_10[] = {117,110,107,110,111,119,110}; // "os.name" static jchar chars_jakelib2_str_11[] = {111,115,46,110,97,109,101}; // "unknown" static jchar chars_jakelib2_str_12[] = {117,110,107,110,111,119,110}; // "os.arch" static jchar chars_jakelib2_str_13[] = {111,115,46,97,114,99,104}; // "unknown" static jchar chars_jakelib2_str_14[] = {117,110,107,110,111,119,110}; // "user.dir" static jchar chars_jakelib2_str_15[] = {117,115,101,114,46,100,105,114}; // "" static jchar chars_jakelib2_str_16[] = {0}; // "user.home" static jchar chars_jakelib2_str_17[] = {117,115,101,114,46,104,111,109,101}; // "" static jchar chars_jakelib2_str_18[] = {0}; // "user.name" static jchar chars_jakelib2_str_19[] = {117,115,101,114,46,110,97,109,101}; // "" static jchar chars_jakelib2_str_20[] = {0}; // "os.version" static jchar chars_jakelib2_str_21[] = {111,115,46,118,101,114,115,105,111,110}; // "" static jchar chars_jakelib2_str_22[] = {0}; // "os.name" static jchar chars_jakelib2_str_23[] = {111,115,46,110,97,109,101}; // "" static jchar chars_jakelib2_str_24[] = {0}; // "os.arch" static jchar chars_jakelib2_str_25[] = {111,115,46,97,114,99,104}; // "" static jchar chars_jakelib2_str_26[] = {0}; // "TMP" static jchar chars_jakelib2_str_27[] = {84,77,80}; // "tmp.dir" static jchar chars_jakelib2_str_28[] = {116,109,112,46,100,105,114}; // "tmp.dir" static jchar chars_jakelib2_str_29[] = {116,109,112,46,100,105,114}; // "/tmp" static jchar chars_jakelib2_str_30[] = {47,116,109,112}; // "user.dir" static jchar chars_jakelib2_str_31[] = {117,115,101,114,46,100,105,114}; // "" static jchar chars_jakelib2_str_32[] = {0}; // "user.home" static jchar chars_jakelib2_str_33[] = {117,115,101,114,46,104,111,109,101}; // "" static jchar chars_jakelib2_str_34[] = {0}; // "\\.." static jchar chars_jakelib2_str_35[] = {92,46,46}; // "user.name" static jchar chars_jakelib2_str_36[] = {117,115,101,114,46,110,97,109,101}; // "" static jchar chars_jakelib2_str_37[] = {0}; // "os.name" static jchar chars_jakelib2_str_38[] = {111,115,46,110,97,109,101}; // "Microsoft Windows NT" static jchar chars_jakelib2_str_39[] = {77,105,99,114,111,115,111,102,116,32,87,105,110,100,111,119,115,32,78,84}; // "os.name" static jchar chars_jakelib2_str_40[] = {111,115,46,110,97,109,101}; // "Microsoft Windows 2000" static jchar chars_jakelib2_str_41[] = {77,105,99,114,111,115,111,102,116,32,87,105,110,100,111,119,115,32,50,48,48,48}; // "os.name" static jchar chars_jakelib2_str_42[] = {111,115,46,110,97,109,101}; // "Microsoft Windows XP" static jchar chars_jakelib2_str_43[] = {77,105,99,114,111,115,111,102,116,32,87,105,110,100,111,119,115,32,88,80}; // "os.name" static jchar chars_jakelib2_str_44[] = {111,115,46,110,97,109,101}; // "Microsoft Windows 95" static jchar chars_jakelib2_str_45[] = {77,105,99,114,111,115,111,102,116,32,87,105,110,100,111,119,115,32,57,53}; // "os.name" static jchar chars_jakelib2_str_46[] = {111,115,46,110,97,109,101}; // "Microsoft Windows 98" static jchar chars_jakelib2_str_47[] = {77,105,99,114,111,115,111,102,116,32,87,105,110,100,111,119,115,32,57,56}; // "os.name" static jchar chars_jakelib2_str_48[] = {111,115,46,110,97,109,101}; // "Microsoft Windows Me" static jchar chars_jakelib2_str_49[] = {77,105,99,114,111,115,111,102,116,32,87,105,110,100,111,119,115,32,77,101}; // "os.name" static jchar chars_jakelib2_str_50[] = {111,115,46,110,97,109,101}; // "Microsoft Win32s" static jchar chars_jakelib2_str_51[] = {77,105,99,114,111,115,111,102,116,32,87,105,110,51,50,115}; // "os.version" static jchar chars_jakelib2_str_52[] = {111,115,46,118,101,114,115,105,111,110}; // "" static jchar chars_jakelib2_str_53[] = {0}; // "." static jchar chars_jakelib2_str_54[] = {46}; // "os.arch" static jchar chars_jakelib2_str_55[] = {111,115,46,97,114,99,104}; // "i386" static jchar chars_jakelib2_str_56[] = {105,51,56,54}; // "tmp.dir" static jchar chars_jakelib2_str_57[] = {116,109,112,46,100,105,114}; // "" static jchar chars_jakelib2_str_58[] = {0}; // "jakelib::lang::Array" static jchar chars_jakelib2_str_59[] = {106,97,107,101,108,105,98,58,58,108,97,110,103,58,58,65,114,114,97,121}; // "jakelib::lang::Array" static jchar chars_jakelib2_str_60[] = {106,97,107,101,108,105,98,58,58,108,97,110,103,58,58,65,114,114,97,121}; // "It is illegal to use Array class." static jchar chars_jakelib2_str_61[] = {73,116,32,105,115,32,105,108,108,101,103,97,108,32,116,111,32,117,115,101,32,65,114,114,97,121,32,99,108,97,115,115,46}; // "jakelib.lang.System.arraycopy" static jchar chars_jakelib2_str_62[] = {106,97,107,101,108,105,98,46,108,97,110,103,46,83,121,115,116,101,109,46,97,114,114,97,121,99,111,112,121}; // "Source array out of bounds: " static jchar chars_jakelib2_str_63[] = {83,111,117,114,99,101,32,97,114,114,97,121,32,111,117,116,32,111,102,32,98,111,117,110,100,115,58,32}; // " > " static jchar chars_jakelib2_str_64[] = {32,62,32}; // "jakelib.lang.System.arraycopy" static jchar chars_jakelib2_str_65[] = {106,97,107,101,108,105,98,46,108,97,110,103,46,83,121,115,116,101,109,46,97,114,114,97,121,99,111,112,121}; // "Destination array out of bounds: " static jchar chars_jakelib2_str_66[] = {68,101,115,116,105,110,97,116,105,111,110,32,97,114,114,97,121,32,111,117,116,32,111,102,32,98,111,117,110,100,115,58,32}; // " > " static jchar chars_jakelib2_str_67[] = {32,62,32}; // "jakelib.lang.System.arraycopy" static jchar chars_jakelib2_str_68[] = {106,97,107,101,108,105,98,46,108,97,110,103,46,83,121,115,116,101,109,46,97,114,114,97,121,99,111,112,121}; // "Negative length :" static jchar chars_jakelib2_str_69[] = {78,101,103,97,116,105,118,101,32,108,101,110,103,116,104,32,58}; // " < 0 " static jchar chars_jakelib2_str_70[] = {32,60,32,48,32}; // "jakelib.lang.System.arraycopy" static jchar chars_jakelib2_str_71[] = {106,97,107,101,108,105,98,46,108,97,110,103,46,83,121,115,116,101,109,46,97,114,114,97,121,99,111,112,121}; // "Attempt to copy arrays of incompatible types." static jchar chars_jakelib2_str_72[] = {65,116,116,101,109,112,116,32,116,111,32,99,111,112,121,32,97,114,114,97,121,115,32,111,102,32,105,110,99,111,109,112,97,116,105,98,108,101,32,116,121,112,101,115,46}; // "jakelib.lang.System.arraycopy" static jchar chars_jakelib2_str_73[] = {106,97,107,101,108,105,98,46,108,97,110,103,46,83,121,115,116,101,109,46,97,114,114,97,121,99,111,112,121}; #line 1 "lang/System.jlc" // -*- c++ -*- /* * Jakelib2 - General purpose C++ library * Copyright (C) 2001 Florian Wolff (florian@donuz.de) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * $Id: System.jlc,v 1.33 2006-01-07 09:54:43 florian Exp $ */ #include "jakelib2.h" #include "jakelib2/lang/System.h" #include "jakelib2/io/PrintWriter.h" #include "jakelib2/io/File.h" #include "jakelib2/io/StandardOutputStream.h" #include "jakelib2/util/Properties.h" #include #include #include using namespace jakelib::lang; using namespace jakelib::io; using namespace jakelib::util; JAKELIB_IMPLEMENT_CLASS("jakelib.lang.System", System, Object) #ifdef HAVE_SYS_TIME_H # include #endif #ifdef HAVE_TIME_H # include #endif #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_SYS_UTSNAME_H # include #endif #ifdef HAVE_PWD_H # include #endif #ifdef JAKELIB_WIN32API # include # include #endif String* System::eol = null; PrintWriter *System::out = null; PrintWriter *System::err = null; File *System::file = null; Properties *System::properties = null; Properties *System::defaultProperties = null; /*****************************************************************************\ * getEnv | *****************************************************************************/ String* System::getEnv(const char* name) { char* value = getenv(name); if (value == null) return null; else return new String(value); } String* System::getEnv(String* name) { return getEnv(JAKELIB_LATIN1(name)); } /*****************************************************************************\ * explainErrorCode | *****************************************************************************/ String* System::explainErrorCode(jint code) { switch (code) { #if defined(JAKELIB_WIN32API) case ERROR_FILE_NOT_FOUND: return JAKELIB_ONDEMAND(jakelib2_strings[0], new jakelib::lang::String(chars_jakelib2_str_0, 0, 14)); case ERROR_PATH_NOT_FOUND: return JAKELIB_ONDEMAND(jakelib2_strings[1], new jakelib::lang::String(chars_jakelib2_str_1, 0, 14)); case ERROR_BROKEN_PIPE: return JAKELIB_ONDEMAND(jakelib2_strings[2], new jakelib::lang::String(chars_jakelib2_str_2, 0, 11)); case ERROR_INVALID_HANDLE: return JAKELIB_ONDEMAND(jakelib2_strings[3], new jakelib::lang::String(chars_jakelib2_str_3, 0, 14)); case WSAECONNREFUSED: return JAKELIB_ONDEMAND(jakelib2_strings[4], new jakelib::lang::String(chars_jakelib2_str_4, 0, 18)); default: return JAKELIB_ONDEMAND(jakelib2_strings[5], new jakelib::lang::String(chars_jakelib2_str_5, 0, 12)) ->plus( code); #else default: return new String(strerror(code)); #endif } } /*****************************************************************************\ * currentTimeMillis | *****************************************************************************/ jlong System::currentTimeMillis() { #if defined(JAKELIB_WIN32API) SYSTEMTIME st; FILETIME ft; GetSystemTime(&st); SystemTimeToFileTime(&st, &ft); // Microsoft's millis start in the year 1601. // 11644473600000L = ((1970 - 1601) * 365 + 89) * 24 * 60 * 60 * 1000 return ((jlong)ft.dwLowDateTime | ((jlong)ft.dwHighDateTime << 32)) / LL(10000) - LL(11644473600000); #else struct timeval tv; struct timezone tz; gettimeofday(&tv, &tz); return ((jlong) tv.tv_sec) * 1000LL + tv.tv_usec / 1000LL; #endif } /*****************************************************************************\ * randomize | *****************************************************************************/ void System::randomize() { #ifdef WIN32 srand((unsigned int) currentTimeMillis()); #else srand(currentTimeMillis() + getpid()); #endif } /*****************************************************************************\ * random | *****************************************************************************/ int System::random(int max) { #ifdef BORLAND return ::random(max); #else return rand() % max; #endif } /*****************************************************************************\ * initSystem | *****************************************************************************/ void System::initSystemClass(int argc, char* argv[]) { out = new PrintWriter(new StandardOutputStream(stdout), true); err = new PrintWriter(new StandardOutputStream(stderr), true); #ifdef WIN32 eol = new String("\r\n"); #else eol = new String("\n"); #endif if (argv != null) { file = new File(argv[0]); } else { file = new File(""); } // Initialize System Properties: defaultProperties = new Properties(); properties = defaultProperties; properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[6], new jakelib::lang::String(chars_jakelib2_str_6, 0, 14)), File::separator); properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[7], new jakelib::lang::String(chars_jakelib2_str_7, 0, 14)), File::pathSeparator); properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[8], new jakelib::lang::String(chars_jakelib2_str_8, 0, 14)), eol); properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[9], new jakelib::lang::String(chars_jakelib2_str_9, 0, 10)), JAKELIB_ONDEMAND(jakelib2_strings[10], new jakelib::lang::String(chars_jakelib2_str_10, 0, 7))); properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[11], new jakelib::lang::String(chars_jakelib2_str_11, 0, 7)), JAKELIB_ONDEMAND(jakelib2_strings[12], new jakelib::lang::String(chars_jakelib2_str_12, 0, 7))); properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[13], new jakelib::lang::String(chars_jakelib2_str_13, 0, 7)), JAKELIB_ONDEMAND(jakelib2_strings[14], new jakelib::lang::String(chars_jakelib2_str_14, 0, 7))); #if defined(POSIX) char cwd[JAKELIB_MAX_PATH]; if (getcwd(cwd, JAKELIB_MAX_PATH) != null) properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[15], new jakelib::lang::String(chars_jakelib2_str_15, 0, 8)), JAKELIB_ONDEMAND(jakelib2_strings[16], new jakelib::lang::String(chars_jakelib2_str_16, 0, 0)) ->plus( cwd)); struct passwd *pw = getpwuid(getuid()); if (pw != null) { properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[17], new jakelib::lang::String(chars_jakelib2_str_17, 0, 9)), JAKELIB_ONDEMAND(jakelib2_strings[18], new jakelib::lang::String(chars_jakelib2_str_18, 0, 0)) ->plus( pw->pw_dir)); properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[19], new jakelib::lang::String(chars_jakelib2_str_19, 0, 9)), JAKELIB_ONDEMAND(jakelib2_strings[20], new jakelib::lang::String(chars_jakelib2_str_20, 0, 0)) ->plus( pw->pw_name)); } struct utsname un; if (uname(&un) >= 0) { properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[21], new jakelib::lang::String(chars_jakelib2_str_21, 0, 10)), JAKELIB_ONDEMAND(jakelib2_strings[22], new jakelib::lang::String(chars_jakelib2_str_22, 0, 0)) ->plus( un.release)); properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[23], new jakelib::lang::String(chars_jakelib2_str_23, 0, 7)), JAKELIB_ONDEMAND(jakelib2_strings[24], new jakelib::lang::String(chars_jakelib2_str_24, 0, 0)) ->plus( un.sysname)); properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[25], new jakelib::lang::String(chars_jakelib2_str_25, 0, 7)), JAKELIB_ONDEMAND(jakelib2_strings[26], new jakelib::lang::String(chars_jakelib2_str_26, 0, 0)) ->plus( un.machine)); } String *tmpDir = getEnv(JAKELIB_ONDEMAND(jakelib2_strings[27], new jakelib::lang::String(chars_jakelib2_str_27, 0, 3))); if (tmpDir != null) properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[28], new jakelib::lang::String(chars_jakelib2_str_28, 0, 7)), tmpDir); else properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[29], new jakelib::lang::String(chars_jakelib2_str_29, 0, 7)), JAKELIB_ONDEMAND(jakelib2_strings[30], new jakelib::lang::String(chars_jakelib2_str_30, 0, 4))); #elif defined(JAKELIB_WIN32API) char tmpbuf[MAX_PATH]; DWORD size; if (GetCurrentDirectory(JAKELIB_MAX_PATH, tmpbuf) != 0) properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[31], new jakelib::lang::String(chars_jakelib2_str_31, 0, 8)), JAKELIB_ONDEMAND(jakelib2_strings[32], new jakelib::lang::String(chars_jakelib2_str_32, 0, 0)) ->plus( tmpbuf)); size = JAKELIB_MAX_PATH; if (SHGetSpecialFolderPath(NULL, tmpbuf, CSIDL_PERSONAL, false)) properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[33], new jakelib::lang::String(chars_jakelib2_str_33, 0, 9)), File(JAKELIB_ONDEMAND(jakelib2_strings[34], new jakelib::lang::String(chars_jakelib2_str_34, 0, 0)) ->plus( tmpbuf )->plus( JAKELIB_ONDEMAND(jakelib2_strings[35], new jakelib::lang::String(chars_jakelib2_str_35, 0, 3)))).getCanonicalPath()); DWORD bufLen = JAKELIB_MAX_PATH /2; if (GetUserName(tmpbuf, &bufLen)) properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[36], new jakelib::lang::String(chars_jakelib2_str_36, 0, 9)), JAKELIB_ONDEMAND(jakelib2_strings[37], new jakelib::lang::String(chars_jakelib2_str_37, 0, 0)) ->plus( tmpbuf)); OSVERSIONINFOEX osvi; osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if (GetVersionEx((OSVERSIONINFO *) &osvi)) { switch(osvi.dwPlatformId) { case VER_PLATFORM_WIN32_NT: if (osvi.dwMajorVersion <= 4) properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[38], new jakelib::lang::String(chars_jakelib2_str_38, 0, 7)), JAKELIB_ONDEMAND(jakelib2_strings[39], new jakelib::lang::String(chars_jakelib2_str_39, 0, 20))); else if (osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0) properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[40], new jakelib::lang::String(chars_jakelib2_str_40, 0, 7)), JAKELIB_ONDEMAND(jakelib2_strings[41], new jakelib::lang::String(chars_jakelib2_str_41, 0, 22))); else if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 ) properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[42], new jakelib::lang::String(chars_jakelib2_str_42, 0, 7)), JAKELIB_ONDEMAND(jakelib2_strings[43], new jakelib::lang::String(chars_jakelib2_str_43, 0, 20))); break; case VER_PLATFORM_WIN32_WINDOWS: if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[44], new jakelib::lang::String(chars_jakelib2_str_44, 0, 7)), JAKELIB_ONDEMAND(jakelib2_strings[45], new jakelib::lang::String(chars_jakelib2_str_45, 0, 20))); else if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[46], new jakelib::lang::String(chars_jakelib2_str_46, 0, 7)), JAKELIB_ONDEMAND(jakelib2_strings[47], new jakelib::lang::String(chars_jakelib2_str_47, 0, 20))); else if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[48], new jakelib::lang::String(chars_jakelib2_str_48, 0, 7)), JAKELIB_ONDEMAND(jakelib2_strings[49], new jakelib::lang::String(chars_jakelib2_str_49, 0, 20))); break; case VER_PLATFORM_WIN32s: properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[50], new jakelib::lang::String(chars_jakelib2_str_50, 0, 7)), JAKELIB_ONDEMAND(jakelib2_strings[51], new jakelib::lang::String(chars_jakelib2_str_51, 0, 16))); break; } properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[52], new jakelib::lang::String(chars_jakelib2_str_52, 0, 10)), JAKELIB_ONDEMAND(jakelib2_strings[53], new jakelib::lang::String(chars_jakelib2_str_53, 0, 0)) ->plus( (jlong)osvi.dwMajorVersion )->plus( JAKELIB_ONDEMAND(jakelib2_strings[54], new jakelib::lang::String(chars_jakelib2_str_54, 0, 1)) )->plus( (jlong)osvi.dwMinorVersion)); } properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[55], new jakelib::lang::String(chars_jakelib2_str_55, 0, 7)), JAKELIB_ONDEMAND(jakelib2_strings[56], new jakelib::lang::String(chars_jakelib2_str_56, 0, 4))); if (GetTempPath(JAKELIB_MAX_PATH, tmpbuf) != 0) properties->setProperty(JAKELIB_ONDEMAND(jakelib2_strings[57], new jakelib::lang::String(chars_jakelib2_str_57, 0, 7)), JAKELIB_ONDEMAND(jakelib2_strings[58], new jakelib::lang::String(chars_jakelib2_str_58, 0, 0)) ->plus( tmpbuf)); #else #endif } /*****************************************************************************\ * getProperty | *****************************************************************************/ String* System::getProperty(String *key, String *def) { return properties->getProperty(key, def); } /*****************************************************************************\ * setProperties | *****************************************************************************/ void System::setProperties(Properties *props) { if (props != null) { properties = props; } else { properties = defaultProperties; } } /*****************************************************************************\ * getProperties | *****************************************************************************/ Properties* System::getProperties() { return properties; } /*****************************************************************************\ * arraycopy | *****************************************************************************/ //FIXME: check for compatible types void System::arraycopy(Array* src, jint srcStart, Array* dest, jint destStart, jint len) { if ((src == null) || (dest == null)) throw new NullPointerException(); /*should never happen, but just in case ...*/ /* Can never happen since Array has no Class object. */ if (src->getClass()->getName()->equals(JAKELIB_ONDEMAND(jakelib2_strings[59], new jakelib::lang::String(chars_jakelib2_str_59, 0, 20))) || dest->getClass()->getName()->equals(JAKELIB_ONDEMAND(jakelib2_strings[60], new jakelib::lang::String(chars_jakelib2_str_60, 0, 20)))) throw new IllegalArgumentException(JAKELIB_ONDEMAND(jakelib2_strings[61], new jakelib::lang::String(chars_jakelib2_str_61, 0, 33)) ->plus( JAKELIB_AT2(JAKELIB_ONDEMAND(jakelib2_strings[62], new jakelib::lang::String(chars_jakelib2_str_62, 0, 29))))); Array& srcArr = *src; Array& destArr = *dest; if ((srcStart + len) > (srcArr.length())) throw new ArrayIndexOutOfBoundsException(JAKELIB_ONDEMAND(jakelib2_strings[63], new jakelib::lang::String(chars_jakelib2_str_63, 0, 28)) ->plus( (srcStart + len) )->plus( JAKELIB_ONDEMAND(jakelib2_strings[64], new jakelib::lang::String(chars_jakelib2_str_64, 0, 3)) )->plus( (srcArr.length() - 1) )->plus( JAKELIB_AT2(JAKELIB_ONDEMAND(jakelib2_strings[65], new jakelib::lang::String(chars_jakelib2_str_65, 0, 29))))); else { if ((destStart + len) > (destArr.length())) throw new ArrayIndexOutOfBoundsException(JAKELIB_ONDEMAND(jakelib2_strings[66], new jakelib::lang::String(chars_jakelib2_str_66, 0, 33)) ->plus( (destStart + len) )->plus( JAKELIB_ONDEMAND(jakelib2_strings[67], new jakelib::lang::String(chars_jakelib2_str_67, 0, 3)) )->plus( (destArr.length() - 1) )->plus( JAKELIB_AT2(JAKELIB_ONDEMAND(jakelib2_strings[68], new jakelib::lang::String(chars_jakelib2_str_68, 0, 29))))); else if (len < 0) throw new ArrayIndexOutOfBoundsException(JAKELIB_ONDEMAND(jakelib2_strings[69], new jakelib::lang::String(chars_jakelib2_str_69, 0, 17)) ->plus( len )->plus( JAKELIB_ONDEMAND(jakelib2_strings[70], new jakelib::lang::String(chars_jakelib2_str_70, 0, 5)) )->plus( JAKELIB_AT2(JAKELIB_ONDEMAND(jakelib2_strings[71], new jakelib::lang::String(chars_jakelib2_str_71, 0, 29))))); } if (srcArr.getClass()->getName() != destArr.getClass()->getName()) throw new IllegalArgumentException(JAKELIB_ONDEMAND(jakelib2_strings[72], new jakelib::lang::String(chars_jakelib2_str_72, 0, 45)) ->plus( JAKELIB_AT2(JAKELIB_ONDEMAND(jakelib2_strings[73], new jakelib::lang::String(chars_jakelib2_str_73, 0, 29))))); // florian: Won't work! // "ANSI C++ forbids using pointer of type `void *' in arithmetic" // jint elemSize = src->sizeOfElement(); // memmove(dest->getRawData() + destStart * elemSize, // src->getRawData() + srcStart * elemSize, // elemSize * len); // jint idxSrc = srcStart; // jint idxDest = destStart; // for (; idxSrc < (srcStart + len); idxSrc++, idxDest++) { // if (src == dest && //copying inside the same array // ((idxSrc == destStart) || (idxDest == srcStart)))//and overlapping, give it up now // break; // destArr.set(idxDest, srcArr.get(idxSrc)); // } return; }