Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.equinox.executable/library/carbon/eclipseCarbon.c')
-rw-r--r--bundles/org.eclipse.equinox.executable/library/carbon/eclipseCarbon.c863
1 files changed, 0 insertions, 863 deletions
diff --git a/bundles/org.eclipse.equinox.executable/library/carbon/eclipseCarbon.c b/bundles/org.eclipse.equinox.executable/library/carbon/eclipseCarbon.c
deleted file mode 100644
index 0170578b3..000000000
--- a/bundles/org.eclipse.equinox.executable/library/carbon/eclipseCarbon.c
+++ /dev/null
@@ -1,863 +0,0 @@
-/*
- * Copyright (c) 2000, 2010 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
- * Andre Weinand (OTI Labs)
- * David Green - OpenJDK bsd port integration
- */
-
-/* MacOS X Carbon specific logic for displaying the splash screen. */
-
-#include "eclipseOS.h"
-#include "eclipseCommon.h"
-#include "eclipseJNI.h"
-#include "eclipseUtil.h"
-
-#include <unistd.h>
-#include <sys/stat.h>
-#include <CoreServices/CoreServices.h>
-#ifdef COCOA
-#include <Cocoa/Cocoa.h>
-#else
-#include <Carbon/Carbon.h>
-#include "NgCommon.h"
-#include "NgImageData.h"
-#include "NgWinBMPFileFormat.h"
-#endif
-#include <mach-o/dyld.h>
-
-#define startupJarName "startup.jar"
-#define LAUNCHER "-launcher"
-#define SPLASH_LAUNCHER "/Resources/Splash.app/Contents/"
-
-#define DEBUG 0
-
-static _TCHAR* noForkingMsg = _T_ECLIPSE("Internal Error, forking the jvm is not supported on MacOS.\n");
-
-char *findCommand(char *command);
-
-/* Global Variables */
-char* defaultVM = "java";
-char* vmLibrary = "JavaVM";
-char* shippedVMDir = "../../../jre/Contents/Home/jre/bin/";
-int isSUN = 0;
-
-static void adjustLibraryPath(char * vmLibrary);
-static char * findLib(char * command);
-
-#ifdef i386
-#define JAVA_ARCH "i386"
-#define JAVA_HOME_ARCH "i386"
-#elif defined(__ppc__) || defined(__powerpc64__)
-#define JAVA_ARCH "ppc"
-#define JAVA_HOME_ARCH "ppc"
-#elif defined(__amd64__) || defined(__x86_64__)
-#define JAVA_ARCH "amd64"
-#define JAVA_HOME_ARCH "x86_64"
-#else
-#define JAVA_ARCH DEFAULT_OS_ARCH
-#define JAVA_HOME_ARCH DEFAULT_OS_ARCH
-#endif
-
-#define LIB_PATH_VAR _T_ECLIPSE("LD_LIBRARY_PATH")
-#define DYLD_FALLBACK_VAR _T_ECLIPSE("DYLD_FALLBACK_LIBRARY_PATH")
-
-#define MAX_LOCATION_LENGTH 40 /* none of the jvmLocations strings should be longer than this */
-#define MAX_JVMLIB_LENGTH 15 /* none of the jvmLibs strings should be longer than this */
-static const char* jvmLocations[] = {
- "../lib/" JAVA_ARCH "/client",
- "../lib/" JAVA_ARCH "/server",
- "../lib/client",
- "../lib/server",
- "../jre/lib/" JAVA_ARCH "/client",
- "../jre/lib/" JAVA_ARCH "/server",
- "../jre/lib/client",
- "../jre/lib/server",
- NULL
-};
-static const char* jvmLibs[] = { "libjvm.dylib", "libjvm.jnilib", "libjvm.so", NULL };
-
-/* Define the window system arguments for the various Java VMs. */
-static char* argVM_JAVA[] = { "-XstartOnFirstThread", NULL };
-
-#ifdef COCOA
-static NSWindow* window = nil;
-@interface KeyWindow : NSWindow { }
-- (BOOL)canBecomeKeyWindow;
-@end
-
-@implementation KeyWindow
-- (BOOL)canBecomeKeyWindow {
- return YES;
-}
-
-- (void)close {
- [super close];
- window = nil;
-}
-
-+ (int)show: (NSString *) featureImage {
- ProcessSerialNumber psn;
- if (GetCurrentProcess(&psn) == noErr) {
- TransformProcessType(&psn, kProcessTransformToForegroundApplication);
- SetFrontProcess(&psn);
- }
- if (window != NULL)
- return 0; /*already showing */
- if (featureImage == NULL)
- return ENOENT;
-
- int result = ENOENT;
- NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
- [NSApplication sharedApplication];
- NSImage* image = [[NSImage alloc] initByReferencingFile: featureImage];
- [featureImage release];
- if (image != NULL) {
- NSImageRep* imageRep = [image bestRepresentationForDevice: [[NSScreen mainScreen] deviceDescription]];
- NSRect rect = {{0, 0}, {[imageRep pixelsWide], [imageRep pixelsHigh]}};
- [image setSize: NSMakeSize([imageRep pixelsWide], [imageRep pixelsHigh])];
- [image autorelease];
- window = [[KeyWindow alloc] initWithContentRect: rect styleMask: NSBorderlessWindowMask backing: NSBackingStoreBuffered defer: 0];
- if (window != nil) {
- [window center];
- [window setBackgroundColor: [NSColor colorWithPatternImage: image]];
- [window makeKeyAndOrderFront: nil];
- dispatchMessages();
- result = 0;
- }
- }
- [pool release];
- return result;
-}
-
-+ (void)shutdown {
- if (window != 0) {
- NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
- [window close];
- window = nil;
- [pool release];
- }
-}
-
-+ (void)dispatch {
- NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
- NSEvent* event;
- NSApplication* application = [NSApplication sharedApplication];
- while ((event = [application nextEventMatchingMask: 0 untilDate: nil inMode: NSDefaultRunLoopMode dequeue: TRUE]) != nil) {
- [application sendEvent: event];
- }
- [pool release];
-}
-
-@end
-
-@interface AppleEventDelegate : NSObject
-- (void)handleOpenDocuments:(NSAppleEventDescriptor *)event withReplyEvent: (NSAppleEventDescriptor *)replyEvent;
-@end
-@implementation AppleEventDelegate
- NSTimer *timer;
- NSMutableArray *files;
-
-- (void)handleOpenDocuments:(NSAppleEventDescriptor *)event withReplyEvent: (NSAppleEventDescriptor *)replyEvent {
- NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
- int count = [event numberOfItems];
- int index = 1;
-
- if (!files) {
- files = [NSMutableArray arrayWithCapacity:count];
- [files retain];
- }
-
- for (index = 1; index<=count; index++) {
- CFURLRef url = NULL;
- NSAppleEventDescriptor *desc = [event descriptorAtIndex:index], *coerceDesc;
- if (!desc) continue;
- if ((coerceDesc = [desc coerceToDescriptorType: typeFSRef]) != NULL) {
- url = CFURLCreateFromFSRef(kCFAllocatorDefault, [[coerceDesc data] bytes]);
- } else if ((coerceDesc = [desc coerceToDescriptorType: typeFileURL]) != NULL) {
- NSData *data = [coerceDesc data];
- url = CFURLCreateWithBytes(kCFAllocatorDefault, [data bytes], [data length], kCFStringEncodingUTF8, NULL);
- }
- if (url) {
- NSString *pathName = (NSString *)CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle);
- [files addObject:pathName];
- [pathName release];
- CFRelease(url);
- }
- }
-
- if (!timer) {
- timer = [NSTimer scheduledTimerWithTimeInterval: 1.0
- target: self
- selector: @selector(handleTimer:)
- userInfo: nil
- repeats: YES];
- }
- [pool release];
-}
-- (void) handleTimer: (NSTimer *) timer {
- NSObject *delegate = [[NSApplication sharedApplication] delegate];
- if (delegate != NULL && [delegate respondsToSelector: @selector(application:openFiles:)]) {
- [delegate performSelector:@selector(application:openFiles:) withObject:[NSApplication sharedApplication] withObject:files];
- [files release];
- [timer invalidate];
- }
-}
-@end
-#endif
-
-#ifndef COCOA
-static CFMutableArrayRef files;
-static EventHandlerRef appHandler;
-static int SWT_CLASS = 'SWT-';
-static int SWT_OPEN_FILE_KIND = 1;
-static int SWT_OPEN_FILE_PARAM = 'odoc';
-#endif
-
-int main() {
- return -1;
-}
-
-void installAppleEventHandler();
-
-int reuseWorkbench(_TCHAR** filePath, int timeout) {
- installAppleEventHandler();
- return 0;
-}
-
-#ifdef COCOA
-
-/* Show the Splash Window
- *
- * Create the splash window, load the bitmap and display the splash window.
- */
-int showSplash( const _TCHAR* featureImage )
-{
- int result = 0;
- NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
- NSString *str = [[NSString stringWithUTF8String: featureImage] retain];
- if ([NSThread isMainThread]) {
- result = [KeyWindow show: str];
- } else {
- [KeyWindow performSelectorOnMainThread: @selector(show:) withObject: str waitUntilDone: 0];
- }
- [pool release];
- return result;
-}
-
-void takeDownSplash() {
- NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
- if ([NSThread isMainThread]) {
- [KeyWindow shutdown];
- } else {
- [KeyWindow performSelectorOnMainThread: @selector(shutdown) withObject: nil waitUntilDone: 0];
- }
- [pool release];
-}
-
-void dispatchMessages() {
- NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
- if ([NSThread isMainThread]) {
- [KeyWindow dispatch];
- } else {
- [KeyWindow performSelectorOnMainThread: @selector(dispatch) withObject: nil waitUntilDone: 0];
- }
- [pool release];
-}
-
-#else
-static WindowRef window;
-static ControlRef pane = NULL;
-static CGImageRef image = NULL;
-static CGImageRef loadBMPImage(const char *image);
-
-typedef CGImageSourceRef (*CGImageSourceCreateWithURL_FUNC) (CFURLRef, CFDictionaryRef);
-typedef CGImageRef (*CGImageSourceCreateImageAtIndex_FUNC)(CGImageSourceRef, size_t, CFDictionaryRef);
-static CGImageSourceCreateWithURL_FUNC createWithURL = NULL;
-static CGImageSourceCreateImageAtIndex_FUNC createAtIndex = NULL;
-
-static pascal OSErr openDocumentsProc(const AppleEvent *theAppleEvent, AppleEvent *reply, long handlerRefcon);
-
-static OSStatus drawProc (EventHandlerCallRef eventHandlerCallRef, EventRef eventRef, void * data) {
- int result = CallNextEventHandler(eventHandlerCallRef, eventRef);
- if (image) {
- ControlRef control;
- CGContextRef context;
-
- GetEventParameter(eventRef, kEventParamDirectObject, typeControlRef, NULL, 4, NULL, &control);
- GetEventParameter(eventRef, kEventParamCGContextRef, typeCGContextRef, NULL, 4, NULL, &context);
-
- HIRect rect;
- HIViewGetBounds(control, &rect);
- HIViewDrawCGImage(context, &rect, image);
- }
- return result;
-}
-
-static OSStatus disposeProc (EventHandlerCallRef eventHandlerCallRef, EventRef eventRef, void * data) {
- window = NULL;
- return eventNotHandledErr;
-}
-
-void loadImageFns()
-{
- static int initialized = 0;
- static CFBundleRef bundle = NULL;
-
- if (!initialized) {
- if (!bundle) bundle = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.Carbon"));
- if (bundle) createAtIndex = (CGImageSourceCreateImageAtIndex_FUNC)CFBundleGetFunctionPointerForName(bundle, CFSTR("CGImageSourceCreateImageAtIndex"));
- if (bundle) createWithURL = (CGImageSourceCreateWithURL_FUNC)CFBundleGetFunctionPointerForName(bundle, CFSTR("CGImageSourceCreateWithURL"));
- initialized = 1;
- }
-}
-
-static OSStatus appleEventProc(EventHandlerCallRef inCaller, EventRef theEvent, void* inRefcon) {
- EventRecord eventRecord;
- Boolean release = false;
- EventQueueRef queue;
-
- queue = GetCurrentEventQueue();
- if (IsEventInQueue (queue, theEvent)) {
- RetainEvent (theEvent);
- release = true;
- RemoveEventFromQueue (queue, theEvent);
- }
- ConvertEventRefToEventRecord (theEvent, &eventRecord);
- AEProcessAppleEvent (&eventRecord);
- if (release) ReleaseEvent (theEvent);
- return noErr;
-}
-
-static void timerProc(EventLoopTimerRef timer, void *userData) {
- EventTargetRef target = GetApplicationEventTarget();
- CFIndex count = CFArrayGetCount (files);
- int i;
- for (i=0; i<count; i++) {
- CFStringRef file = (CFStringRef) CFArrayGetValueAtIndex(files, i);
- EventRef event = NULL;
- CreateEvent (NULL, SWT_CLASS, SWT_OPEN_FILE_KIND, 0, kEventAttributeNone, &event);
- SetEventParameter (event, SWT_OPEN_FILE_PARAM, typeCFStringRef, sizeof(file), &file);
- OSStatus status = SendEventToEventTarget(event, target);
- ReleaseEvent(event);
- if (status == eventNotHandledErr) return;
- }
- CFRelease(files);
- RemoveEventLoopTimer(timer);
- RemoveEventHandler(appHandler);
- AERemoveEventHandler(kCoreEventClass, kAEOpenDocuments, NewAEEventHandlerUPP(openDocumentsProc), false);
-}
-
-static pascal OSErr openDocumentsProc(const AppleEvent *theAppleEvent, AppleEvent *reply, long handlerRefcon) {
- AEDescList docList;
- FSRef theFSRef;
- long index;
- long count = 0;
-
- AEGetParamDesc(theAppleEvent, keyDirectObject, typeAEList, &docList);
- AECountItems(&docList, &count);
- for(index = 1; index <= count; index++) {
- AEGetNthPtr(&docList, index, typeFSRef, NULL, NULL, &theFSRef, sizeof(FSRef), NULL);
- CFURLRef url = CFURLCreateFromFSRef(kCFAllocatorDefault, &theFSRef);
- CFStringRef pathName = CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle);
- if (!files) {
- files = CFArrayCreateMutable(kCFAllocatorDefault, count, &kCFTypeArrayCallBacks);
- InstallEventLoopTimer(GetMainEventLoop(), 1, 1, NewEventLoopTimerUPP(timerProc), NULL, NULL);
- }
- CFArrayAppendValue(files, pathName);
- CFRelease(pathName);
- CFRelease(url);
- }
- AEDisposeDesc(&docList);
- return noErr;
-}
-
-/* Show the Splash Window
- *
- * Create the splash window, load the bitmap and display the splash window.
- */
-int showSplash( const _TCHAR* featureImage )
-{
- Rect wRect;
- int w, h, deviceWidth, deviceHeight;
- int attributes;
- EventTypeSpec draw = {kEventClassControl, kEventControlDraw};
- EventTypeSpec dispose = {kEventClassWindow, kEventWindowDispose};
- ControlRef root;
-
- if(window != NULL)
- return 0; /*already showing */
- if (featureImage == NULL)
- return ENOENT;
-
- loadImageFns();
- if (createWithURL && createAtIndex) {
- CFStringRef imageString = CFStringCreateWithCString(kCFAllocatorDefault, featureImage, kCFStringEncodingUTF8);
- if(imageString != NULL) {
- CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, imageString, kCFURLPOSIXPathStyle, false);
- if(url != NULL) {
- CGImageSourceRef imageSource = createWithURL(url, NULL);
- if(imageSource != NULL) {
- image = createAtIndex(imageSource, 0, NULL);
- }
- CFRelease(url);
- }
- }
- CFRelease(imageString);
- } else {
- image = loadBMPImage(featureImage);
- }
-
- /*If the splash image data could not be loaded, return an error.*/
- if (image == NULL)
- return ENOENT;
-
- w = CGImageGetWidth(image);
- h = CGImageGetHeight(image);
-
- GetAvailableWindowPositioningBounds(GetMainDevice(), &wRect);
-
- deviceWidth= wRect.right - wRect.left;
- deviceHeight= wRect.bottom - wRect.top;
-
- wRect.left+= (deviceWidth-w)/2;
- wRect.top+= (deviceHeight-h)/3;
- wRect.right= wRect.left + w;
- wRect.bottom= wRect.top + h;
-
- attributes = kWindowStandardHandlerAttribute | kWindowCompositingAttribute;
- attributes &= GetAvailableWindowAttributes(kSheetWindowClass);
- CreateNewWindow(kSheetWindowClass, attributes, &wRect, &window);
- if (window != NULL) {
- GetRootControl(window, &root);
- wRect.left = wRect.top = 0;
- wRect.right = w;
- wRect.bottom = h;
- CreateUserPaneControl(window, &wRect, kControlSupportsEmbedding | kControlSupportsFocus | kControlGetsFocusOnClick, &pane);
- HIViewAddSubview(root, pane);
-
- InstallEventHandler(GetControlEventTarget(pane), (EventHandlerUPP)drawProc, 1, &draw, NULL, NULL);
- InstallEventHandler(GetWindowEventTarget(window), (EventHandlerUPP)disposeProc, 1, &dispose, NULL, NULL);
- ShowWindow(window);
- dispatchMessages();
- }
-
- return 0;
-}
-
-void takeDownSplash() {
- if( window != 0) {
- DisposeWindow(window);
- window = NULL;
- }
- if(image){
- CGImageRelease(image);
- image = NULL;
- }
-}
-
-void dispatchMessages() {
- EventRef event;
- EventTargetRef target;
-
- target = GetEventDispatcherTarget();
- while( ReceiveNextEvent(0, NULL, kEventDurationNoWait, true, &event) == noErr ) {
- SendEventToEventTarget(event, target);
- ReleaseEvent(event);
- }
-}
-#endif
-
-void installAppleEventHandler() {
-#ifdef COCOA
- NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
- AppleEventDelegate *appleEventDelegate = [[AppleEventDelegate alloc] init];
- [NSApplication sharedApplication];
- NSAppleEventManager *manager = [NSAppleEventManager sharedAppleEventManager];
- [manager setEventHandler:appleEventDelegate
- andSelector:@selector(handleOpenDocuments:withReplyEvent:)
- forEventClass:kCoreEventClass
- andEventID:kAEOpenDocuments];
-// [appleEventDelegate release];
- [pool release];
-#else
- EventTypeSpec kEvents[] = { {kEventClassAppleEvent, kEventAppleEvent} };
- InstallApplicationEventHandler(NewEventHandlerUPP(appleEventProc), GetEventTypeCount(kEvents), kEvents, 0, &appHandler);
- AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments, NewAEEventHandlerUPP(openDocumentsProc), 0, false);
-#endif
-}
-
-jlong getSplashHandle() {
- return (jlong)window;
-}
-
-/* Get the window system specific VM arguments */
-char** getArgVM( char* vm )
-{
- char** result;
-
- /* Use the default arguments for a standard Java VM */
- result = argVM_JAVA;
-
- return result;
-}
-
-char * getJavaVersion(char* command) {
- FILE *fp;
- char buffer[4096];
- char *version = NULL, *firstChar;
- int numChars = 0;
- sprintf(buffer,"%s -version 2>&1", command);
- fp = popen(buffer, "r");
- if (fp == NULL) {
- return NULL;
- }
- while (fgets(buffer, sizeof(buffer)-1, fp) != NULL) {
- if (!version) {
- firstChar = (char *) (strchr(buffer, '"') + 1);
- if (firstChar != NULL)
- numChars = (int) (strrchr(buffer, '"') - firstChar);
-
- /* Allocate a buffer and copy the version string into it. */
- if (numChars > 0)
- {
- version = malloc( numChars + 1 );
- strncpy(version, firstChar, numChars);
- version[numChars] = '\0';
- }
- }
- if (strstr(buffer, "Java HotSpot(TM)") || strstr(buffer, "OpenJDK")) {
- isSUN = 1;
- break;
- }
- if (strstr(buffer, "IBM") != NULL) {
- isSUN = 0;
- break;
- }
- }
- pclose(fp);
- return version;
-}
-
-char * getJavaHome() {
- FILE *fp;
- char path[4096];
- char *result, *start;
- sprintf(path, "/usr/libexec/java_home -a %s", JAVA_HOME_ARCH);
- fp = popen(path, "r");
- if (fp == NULL) {
- return NULL;
- }
- while (fgets(path, sizeof(path)-1, fp) != NULL) {
- }
- result = path;
- start = strchr(result, '\n');
- if (start) {
- start[0] = 0;
- }
- sprintf(path, "%s/bin/java", result);
- pclose(fp);
- return strdup(path);
-}
-
-char * findVMLibrary( char* command ) {
- char *start, *end;
- char *version, *result, *cmd;
- int length;
-
- /*check first to see if command already points to the library */
- if (strcmp(command, JAVA_FRAMEWORK) == 0) {
- return JAVA_FRAMEWORK;
- }
-
- /* select a version to use based on the command */
- start = strstr(command, "/Versions/");
- if (start != NULL){
- start += 10;
- end = strchr( start, dirSeparator);
- if (end != NULL && end > start) {
- length = end - start;
- version = malloc(length + 1);
- strncpy(version, start, length);
- version[length] = 0;
-
- /*only set a version if it starts with a number */
- if(strtol(version, NULL, 10) != 0 || version[0] == '0') {
- setenv("JAVA_JVM_VERSION", version, 1);
- }
-
- free(version);
- }
- }
- cmd = command;
- if (strstr(cmd, "/JavaVM.framework/") != NULL && (strstr(cmd, "/Current/") != NULL || strstr(cmd, "/A/") != NULL)) {
- cmd = getJavaHome();
- }
- // This is necessary to initialize isSUN
- getJavaVersion(cmd);
- result = JAVA_FRAMEWORK;
- if (strstr(cmd, "/JavaVM.framework/") == NULL) {
- char * lib = findLib(cmd);
- if (lib != NULL) {
- // This does not seem to be necessary to load the Mac JVM library
- if (0) adjustLibraryPath(lib);
- result = lib;
- }
- }
- if (cmd != command) free(cmd);
- return result;
-}
-
-static char * findLib(char * command) {
- int i, q;
- int pathLength;
- struct stat stats;
- char * path; /* path to resulting jvm shared library */
- char * location; /* points to begining of jvmLocations section of path */
-
- if (command != NULL) {
- /*check first to see if command already points to the library */
- if (isVMLibrary(command)) {
- if (stat(command, &stats) == 0 && (stats.st_mode & S_IFREG) != 0) { /* found it */
- return strdup(command);
- }
- return NULL;
- }
-
- location = strrchr(command, dirSeparator) + 1;
- pathLength = location - command;
- path = malloc((pathLength + MAX_LOCATION_LENGTH + 1 + MAX_JVMLIB_LENGTH + 1) * sizeof(char));
- strncpy(path, command, pathLength);
- location = &path[pathLength];
-
- /*
- * We are trying base/jvmLocations[*]/vmLibrary
- * where base is the directory containing the given java command, normally jre/bin
- */
- for (q = 0; jvmLibs[q] != NULL; ++q) {
- const char *jvmLib = jvmLibs[q];
- i = -1;
- while (jvmLocations[++i] != NULL) {
- sprintf(location, "%s%c%s", jvmLocations[i], dirSeparator, jvmLib);
- /*fprintf(stderr,"checking path: %s\n",path);*/
- if (stat(path, &stats) == 0 && (stats.st_mode & S_IFREG) != 0)
- { /* found it */
- return path;
- }
- }
- }
- }
- return NULL;
-}
-
-/* adjust the LD_LIBRARY_PATH for the vmLibrary */
-static void adjustLibraryPath(char * vmLibrary) {
- char * c;
- char * ldPath, *dylibPath;
- char * newPath;
- int i;
- int numPaths = 0;
- int length = 0;
- int needAdjust = 0, needDylibAdjust = 0;
-
- char ** paths = getVMLibrarySearchPath(vmLibrary);
-
- ldPath = (char*) getenv(LIB_PATH_VAR);
- if (!ldPath) {
- ldPath = _T_ECLIPSE("");
- needAdjust = 1;
- } else {
- needAdjust = !containsPaths(ldPath, paths);
- }
-
- dylibPath = (char*) getenv(DYLD_FALLBACK_VAR);
- if (!dylibPath) {
- dylibPath = _T_ECLIPSE("");
- needDylibAdjust = 1;
- } else {
- needDylibAdjust = !containsPaths(dylibPath, paths);
- }
-
- if (!needAdjust && !needDylibAdjust) {
- for (i = 0; paths[i] != NULL; i++)
- free(paths[i]);
- free(paths);
- return;
- }
-
- c = concatStrings(paths);
-
- /* set the value for LD_LIBRARY_PATH */
- length = strlen(ldPath);
- newPath = malloc((_tcslen(c) + length + 1) * sizeof(_TCHAR));
- _stprintf(newPath, _T_ECLIPSE("%s%s"), c, ldPath);
- setenv(LIB_PATH_VAR, newPath, 1);
- free(newPath);
-
- /* set the value for DYLD_FALLBACK_LIBRARY_PATH */
- length = strlen(dylibPath);
- newPath = malloc((_tcslen(c) + length + 1) * sizeof(_TCHAR));
- _stprintf(newPath, _T_ECLIPSE("%s%s"), c, dylibPath);
- setenv(DYLD_FALLBACK_VAR, newPath, 1);
- free(newPath);
- free(c);
-
- for (i = 0; i < numPaths; i++)
- free(paths[i]);
- free(paths);
-
- /* now we must restart for this to take affect*/
- restartLauncher(initialArgv[0], initialArgv);
-}
-
-void restartLauncher(char* program, char* args[]) {
- pid_t pid= fork();
- if (pid == 0) {
- /* Child process ... start the JVM */
- execv(program != NULL ? program : args[0], args);
-
- /* The JVM would not start ... return error code to parent process. */
- _exit(errno);
- } else {
- exit(0);
- }
-}
-
-JavaResults* launchJavaVM( _TCHAR* args[] )
-{
- /*for now always do JNI on Mac, should not come in here */
- JavaResults * results = malloc(sizeof(JavaResults));
- results->launchResult = -1;
- results->runResult = 0;
- results->errorMessage = _tcsdup(noForkingMsg);
- return results;
-}
-
-JavaResults* startJavaVM( _TCHAR* libPath, _TCHAR* vmArgs[], _TCHAR* progArgs[], _TCHAR* jarFile )
-{
- return startJavaJNI(libPath, vmArgs, progArgs, jarFile);
-}
-
-#ifndef COCOA
-void disposeData(void *info, void *data, size_t size)
-{
- DisposePtr(data);
-}
-
-/**
- * loadBMPImage
- * Create a QuickDraw PixMap representing the given BMP file.
- *
- * bmpPathname: absolute path and name to the bmp file
- *
- * returned value: the PixMapHandle newly created if successful. 0 otherwise.
- */
-static CGImageRef loadBMPImage (const char *bmpPathname) {
- ng_stream_t in;
- ng_bitmap_image_t image;
- ng_err_t err= ERR_OK;
- CGImageRef ref;
- UBYTE1* data = NULL;
-
- NgInit();
-
- if (NgStreamInit(&in, (char*) bmpPathname) != ERR_OK) {
- NgError(ERR_NG, "Error can't open BMP file");
- return 0;
- }
-
- NgBitmapImageInit(&image);
- err= NgBmpDecoderReadImage (&in, &image);
- NgStreamClose(&in);
-
- if (err != ERR_OK) {
- NgBitmapImageFree(&image);
- return 0;
- }
-
- UBYTE4 srcDepth= NgBitmapImageBitCount(&image);
- if (srcDepth != 24) { /* We only support image depth of 24 bits */
- NgBitmapImageFree(&image);
- NgError (ERR_NG, "Error unsupported depth - only support 24 bit");
- return 0;
- }
-
- int width= (int)NgBitmapImageWidth(&image);
- int height= (int)NgBitmapImageHeight(&image);
- int rowBytes= width * 4;
- int alphainfo = kCGImageAlphaNoneSkipFirst | (NgIsMSB() ? 0 : kCGBitmapByteOrder32Little);
- data = (UBYTE1*)NewPtr(rowBytes * height);
- CGDataProviderRef provider = CGDataProviderCreateWithData(0, data, rowBytes * height, (CGDataProviderReleaseDataCallback)disposeData);
-
- ref = CGImageCreate(width, height, 8, 32, width * 4, CGColorSpaceCreateDeviceRGB(), alphainfo, provider, NULL, 1, 0);
- CGDataProviderRelease(provider);
-
- /* 24 bit source to direct screen destination */
- NgBitmapImageBlitDirectToDirect(NgBitmapImageImageData(&image), NgBitmapImageBytesPerRow(&image), width, height,
- data, 32, rowBytes, NgIsMSB(), 0xff0000, 0x00ff00, 0x0000ff);
-
- NgBitmapImageFree(&image);
-
- return ref;
-}
-#endif
-
-#define DOCK_ICON_PREFIX "-Xdock:icon="
-#define DOCK_NAME_PREFIX "-Xdock:name="
-#define APP_ICON_PATTERN "APP_ICON_%d"
-#define APP_NAME_PATTERN "APP_NAME_%d"
-
-void processVMArgs(char **vmargs[] )
-{
- int i = -1;
- int pid = 0, pidLength = 1, temp = 0;
- char * name = NULL, *icon = NULL;
- char * c;
-
- if( *vmargs == NULL)
- return;
-
- while( (*vmargs)[++i] != NULL ) {
- /*-Xdock:icon -> APP_ICON_<pid>*/
- if(_tcsncmp((*vmargs)[i], DOCK_ICON_PREFIX, _tcslen(DOCK_ICON_PREFIX)) == 0) {
- icon = (*vmargs)[i] + _tcslen(DOCK_ICON_PREFIX);
- }
- /*-Xdock:name -> APP_NAME_<pid>*/
- else if(_tcsncmp((*vmargs)[i], DOCK_NAME_PREFIX, _tcslen(DOCK_NAME_PREFIX)) == 0) {
- name = (*vmargs)[i] + _tcslen(DOCK_NAME_PREFIX);
- }
- if (name != NULL && icon != NULL)
- break;
- }
-
- if (name == NULL && icon == NULL)
- return; /* don't need to do anything */
-
- temp = pid = getpid();
- /* how many digits in pid? */
- while (temp > 9) {
- pidLength++;
- temp /= 10;
- }
-
- if (name != NULL) {
- c = malloc( (_tcslen(APP_NAME_PATTERN) + pidLength + 1) * sizeof(char*));
- _stprintf( c, APP_NAME_PATTERN, pid );
- setenv(c, name, 1);
- }
-
- if (icon != NULL) {
- c = malloc( (_tcslen(icon) + _tcslen(APP_ICON_PATTERN) + pidLength + 1) * sizeof(char*));
- _stprintf( c, APP_ICON_PATTERN, pid );
- setenv(c, icon, 1);
- }
-}
-
-int isSunVM( _TCHAR * javaVM, _TCHAR * jniLib ) {
- return isSUN;
-}

Back to the top