|  | /******************************************************************************* | 
|  | * Copyright (c) 2000, 2005 IBM Corporation and others. | 
|  | * All rights reserved. This program and the accompanying materials | 
|  | * are made available under the terms of the Eclipse Public License v1.0 | 
|  | * which accompanies this distribution, and is available at | 
|  | * http://www.eclipse.org/legal/epl-v10.html | 
|  | * | 
|  | * Contributors: | 
|  | *     IBM Corporation - initial API and implementation | 
|  | *******************************************************************************/ | 
|  | // Modified by Google | 
|  | package org.eclipse.swt.internal; | 
|  |  | 
|  | public class Library { | 
|  |  | 
|  | /* SWT Version - Mmmm (M=major, mmm=minor) */ | 
|  |  | 
|  | /** | 
|  | * SWT Major version number (must be >= 0) | 
|  | */ | 
|  | static int MAJOR_VERSION = 3; | 
|  |  | 
|  | /** | 
|  | * SWT Minor version number (must be in the range 0..999) | 
|  | */ | 
|  | static int MINOR_VERSION = 235; | 
|  |  | 
|  | /** | 
|  | * SWT revision number (must be >= 0) | 
|  | */ | 
|  | static int REVISION = 0; | 
|  |  | 
|  | /** | 
|  | * The JAVA and SWT versions | 
|  | */ | 
|  | public static final int JAVA_VERSION, SWT_VERSION; | 
|  |  | 
|  | static { | 
|  | JAVA_VERSION = parseVersion(System.getProperty("java.version")); | 
|  | SWT_VERSION = SWT_VERSION(MAJOR_VERSION, MINOR_VERSION); | 
|  | } | 
|  |  | 
|  | static int parseVersion(String version) { | 
|  | if (version == null) return 0; | 
|  | int major = 0, minor = 0, micro = 0; | 
|  | int length = version.length(), index = 0, start = 0; | 
|  | while (index < length && Character.isDigit(version.charAt(index))) index++; | 
|  | try { | 
|  | if (start < length) major = Integer.parseInt(version.substring(start, index)); | 
|  | } catch (NumberFormatException e) {} | 
|  | start = ++index; | 
|  | while (index < length && Character.isDigit(version.charAt(index))) index++; | 
|  | try { | 
|  | if (start < length) minor = Integer.parseInt(version.substring(start, index)); | 
|  | } catch (NumberFormatException e) {} | 
|  | start = ++index; | 
|  | while (index < length && Character.isDigit(version.charAt(index))) index++; | 
|  | try { | 
|  | if (start < length) micro = Integer.parseInt(version.substring(start, index)); | 
|  | } catch (NumberFormatException e) {} | 
|  | return JAVA_VERSION(major, minor, micro); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Returns the Java version number as an integer. | 
|  | * | 
|  | * @param major | 
|  | * @param minor | 
|  | * @param micro | 
|  | * @return the version | 
|  | */ | 
|  | public static int JAVA_VERSION (int major, int minor, int micro) { | 
|  | return (major << 16) + (minor << 8) + micro; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Returns the SWT version number as an integer. | 
|  | * | 
|  | * @param major | 
|  | * @param minor | 
|  | * @return the version | 
|  | */ | 
|  | public static int SWT_VERSION (int major, int minor) { | 
|  | return major * 1000 + minor; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Loads the shared library that matches the version of the | 
|  | * Java code which is currently running.  SWT shared libraries | 
|  | * follow an encoding scheme where the major, minor and revision | 
|  | * numbers are embedded in the library name and this along with | 
|  | * <code>name</code> is used to load the library.  If this fails, | 
|  | * <code>name</code> is used in another attempt to load the library, | 
|  | * this time ignoring the SWT version encoding scheme. | 
|  | * | 
|  | * @param name the name of the library to load | 
|  | */ | 
|  | public static void loadLibrary (String name) { | 
|  | /* | 
|  | * Include platform name to support different windowing systems | 
|  | * on same operating system. | 
|  | */ | 
|  | String platform = Platform.PLATFORM; | 
|  |  | 
|  | /* | 
|  | * Get version qualifier. | 
|  | */ | 
|  | String version = System.getProperty ("swt.version"); //$NON-NLS-1$ | 
|  | if (version == null) { | 
|  | version = "" + MAJOR_VERSION; //$NON-NLS-1$ | 
|  | /* Force 3 digits in minor version number */ | 
|  | if (MINOR_VERSION < 10) { | 
|  | version += "00"; //$NON-NLS-1$ | 
|  | } else { | 
|  | if (MINOR_VERSION < 100) version += "0"; //$NON-NLS-1$ | 
|  | } | 
|  | version += MINOR_VERSION; | 
|  | /* No "r" until first revision */ | 
|  | if (REVISION > 0) version += "r" + REVISION; //$NON-NLS-1$ | 
|  | } | 
|  |  | 
|  | /* | 
|  | * GOOGLE: Since we're bundling our own version of SWT, we need to be | 
|  | * able to tell SWT where its dynamic libraries live.  Otherwise we'd | 
|  | * have to force our users to always specify a -Djava.library.path | 
|  | * on the command line. | 
|  | */ | 
|  | String swtLibraryPath = System.getProperty ("swt.library.path"); | 
|  | try { | 
|  | String newName = name + "-" + platform + "-" + version; //$NON-NLS-1$ //$NON-NLS-2$ | 
|  | if (swtLibraryPath != null) | 
|  | System.load(swtLibraryPath + System.mapLibraryName(newName)); | 
|  | else | 
|  | System.loadLibrary (newName); | 
|  | return; | 
|  | } catch (UnsatisfiedLinkError e1) { | 
|  | try { | 
|  | String newName = name + "-" + platform; //$NON-NLS-1$ | 
|  | if (swtLibraryPath != null) | 
|  | System.load(swtLibraryPath + System.mapLibraryName(newName)); | 
|  | else | 
|  | System.loadLibrary (newName); | 
|  | return; | 
|  | } catch (UnsatisfiedLinkError e2) { | 
|  | throw e1; | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | } |