[Vm-dev] [commit][3718]
JMM add logic to support headless as a null windowview object to reduce
drawing overhead , fix headless VM support
commits at squeakvm.org
commits at squeakvm.org
Sat May 14 22:43:37 UTC 2016
Revision: 3718
Author: johnmci
Date: 2016-05-14 15:43:36 -0700 (Sat, 14 May 2016)
Log Message:
-----------
JMM add logic to support headless as a null windowview object to reduce drawing overhead, fix headless VM support
Modified Paths:
--------------
branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakEventsAPI.m
branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAPI.m
branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.h
branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.m
branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.h
branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m
branches/Cog/platforms/iOS/vm/OSX/SqueakOSXApplication.m
branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXApplication.m
branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXDropAPI.m
branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXOpenGLView.m
branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.h
branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.m
Added Paths:
-----------
branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.h
branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.m
Modified: branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakEventsAPI.m
===================================================================
--- branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakEventsAPI.m 2016-05-14 21:02:58 UTC (rev 3717)
+++ branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakEventsAPI.m 2016-05-14 22:43:36 UTC (rev 3718)
@@ -40,13 +40,13 @@
#import "sqSqueakAppDelegate.h"
#import "sqSqueakEventsAPI.h"
#import "sqSqueakMainApplication+events.h"
-#import "sqSqueakScreenAndWindow.h"
+#import "sqSqueakNullScreenAndWindow.h"
#import "sqaio.h"
extern sqSqueakAppDelegate *gDelegateApp;
extern struct VirtualMachine* interpreterProxy;
extern BOOL gQuitNowRightNow;
-extern sqSqueakScreenAndWindow *getMainWindowDelegate();
+extern sqSqueakNullScreenAndWindow *getMainWindowDelegate();
void nativeIoProcessEvents(void) {
Modified: branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAPI.m
===================================================================
--- branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAPI.m 2016-05-14 21:02:58 UTC (rev 3717)
+++ branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAPI.m 2016-05-14 22:43:36 UTC (rev 3718)
@@ -51,7 +51,7 @@
#endif
-sqSqueakScreenAndWindow *getMainWindowDelegate() {
+sqSqueakNullScreenAndWindow *getMainWindowDelegate() {
#ifdef BUILD_FOR_OSX
return ((__bridge NSWindow *) windowHandleFromIndex(1)).delegate;
#else
Modified: branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.h
===================================================================
--- branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.h 2016-05-14 21:02:58 UTC (rev 3717)
+++ branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.h 2016-05-14 22:43:36 UTC (rev 3718)
@@ -38,38 +38,12 @@
//
#import <Foundation/Foundation.h>
-#import "sq.h"
+#import "sqSqueakNullScreenAndWindow.h"
- at interface sqSqueakScreenAndWindow : NSObject {
- sqInt windowIndex;
+ at interface sqSqueakScreenAndWindow : sqSqueakNullScreenAndWindow {
NSTimeInterval squeakUIFlushPrimaryDeferNMilliseconds;
NSTimeInterval lastFlushTime;
NSTimer *blip;
- BOOL forceUpdateFlush;
BOOL displayIsDirty;
}
-
-- (sqInt) ioScreenSize;
-- (sqInt) ioScreenDepth;
-- (sqInt) ioHasDisplayDepth: (sqInt) depth;
-- (void) ioForceDisplayUpdate;
-- (void) ioSetFullScreen: (sqInt) fullScreen;
-- (int) ioShowDisplayOnWindow: (unsigned char*) dispBitsIndex
- width: (int) width
- height: (int) height
- depth: (int) depth
- affectedL: (int) affectedL
- affectedR: (int) affectedR
- affectedT: (int) affectedT
- affectedB: (int) affectedB
- windowIndex: (int) windowIndex;
-- (id) getMainView;
-- (void) ioForceDisplayUpdateFlush: (NSTimer*)theTimer;
- at property (nonatomic,assign) sqInt windowIndex;
- at property (nonatomic,strong) NSTimer *blip;
- at property (nonatomic,assign) NSTimeInterval squeakUIFlushPrimaryDeferNMilliseconds;
- at property (nonatomic,assign) NSTimeInterval lastFlushTime;
- at property (nonatomic,assign) BOOL forceUpdateFlush;
- at property (nonatomic,assign) BOOL displayIsDirty;
-
@end
Modified: branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.m
===================================================================
--- branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.m 2016-05-14 21:02:58 UTC (rev 3717)
+++ branches/Cog/platforms/iOS/vm/Common/Classes/sqSqueakScreenAndWindow.m 2016-05-14 22:43:36 UTC (rev 3718)
@@ -61,9 +61,15 @@
) {
}
+ at interface sqSqueakScreenAndWindow()
+ at property (nonatomic,strong) NSTimer *blip;
+ at property (nonatomic,assign) NSTimeInterval squeakUIFlushPrimaryDeferNMilliseconds;
+ at property (nonatomic,assign) NSTimeInterval lastFlushTime;
+ at property (nonatomic,assign) BOOL displayIsDirty;
+ at end
+
@implementation sqSqueakScreenAndWindow
- at synthesize windowIndex;
- at synthesize blip,squeakUIFlushPrimaryDeferNMilliseconds,forceUpdateFlush,lastFlushTime,displayIsDirty;
+ at synthesize blip,squeakUIFlushPrimaryDeferNMilliseconds,lastFlushTime,displayIsDirty;
- (instancetype)init {
self = [super init];
@@ -77,13 +83,6 @@
return self;
}
-- (id) getMainView {
- return NULL;
-}
-
-- (void) ioSetFullScreen: (sqInt) fullScreen {
-}
-
- (sqInt) ioScreenSize {
sqInt w, h;
@@ -100,25 +99,12 @@
}
-- (sqInt) ioScreenDepth {
- return 32;
-}
-
-- (sqInt) ioHasDisplayDepth: (sqInt) depth {
- if (depth == 2 || depth == 4 || depth == 8 || depth == 16 || depth == 32 ||
- depth == -2 || depth == -4 || depth == -8 || depth == -16 || depth == -32) {
- return true;
- } else {
- return false;
- }
-}
-
-- (void) ioForceDisplayUpdateActual {
- lastFlushTime = [NSDate timeIntervalSinceReferenceDate];
- self.displayIsDirty = NO;
- self.forceUpdateFlush = NO;
+- (void) ioForceDisplayUpdate {
+ lastFlushTime = [NSDate timeIntervalSinceReferenceDate];
+ self.displayIsDirty = NO;
+ self.forceUpdateFlush = NO;
- [[self getMainView] preDrawThelayers];
+ [[self getMainView] preDrawThelayers];
//SQK-24
//javier_diaz_r at mac.com iOS VM problems with dragging a morph and PasteUpMorph>>flashRects:color:
@@ -131,10 +117,6 @@
}
}
-- (void) ioForceDisplayUpdate {
- [self ioForceDisplayUpdateActual];
-}
-
- (int) ioShowDisplayOnWindowActual: (unsigned char*) dispBitsIndex
width: (int) width
height: (int) height
Modified: branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.h
===================================================================
--- branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.h 2016-05-14 21:02:58 UTC (rev 3717)
+++ branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.h 2016-05-14 22:43:36 UTC (rev 3718)
@@ -42,7 +42,7 @@
#import "sqSqueakOSXOpenGLView.h"
@class sqSqueakMainApplication;
- at class sqSqueakOSXScreenAndWindow;
+ at class sqSqueakNullScreenAndWindow;
@interface SqueakOSXAppDelegate : sqSqueakAppDelegate <NSApplicationDelegate> {
NSWindow *__weak window;
@@ -56,6 +56,6 @@
@property (nonatomic,weak) IBOutlet sqSqueakOSXOpenGLView *mainView;
@property (nonatomic,strong) NSString *possibleImageNameAtLaunchTime;
@property (nonatomic,assign) BOOL checkForFileNameOnFirstParm;
- at property (nonatomic, strong) sqSqueakOSXScreenAndWindow *windowHandler;
+ at property (nonatomic, strong) sqSqueakNullScreenAndWindow *windowHandler;
@end
Modified: branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m
===================================================================
--- branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m 2016-05-14 21:02:58 UTC (rev 3717)
+++ branches/Cog/platforms/iOS/vm/OSX/SqueakOSXAppDelegate.m 2016-05-14 22:43:36 UTC (rev 3718)
@@ -81,13 +81,6 @@
@autoreleasepool {
gDelegateApp = self;
self.squeakApplication = [self makeApplicationInstance];
- self.windowHandler = AUTORELEASEOBJ([[sqSqueakOSXScreenAndWindow alloc] init]);
- windowHandler.mainViewOnWindow = self.mainView;
- self.mainView.windowLogic = windowHandler;
- windowHandler.windowIndex = 1;
- [windowHandler.mainViewOnWindow initializeVariables];
- self.window.delegate = windowHandler;
- self.window.contentResizeIncrements = NSMakeSize(8.0f,8.0f);
[self.squeakApplication setupEventQueue];
[self singleThreadStart];
// [self workerThreadStart];
@@ -105,7 +98,29 @@
return NSTerminateCancel;
}
+- (void) initializeTheWindowHandler {
+ [windowHandler mainViewOnWindow: self.mainView];
+ self.mainView.windowLogic = windowHandler;
+ windowHandler.windowIndex = 1;
+ [windowHandler.getMainViewOnWindow initializeVariables];
+ self.window.delegate = windowHandler;
+ self.window.contentView = self.mainView;
+}
+
-(void) setupWindow {
+ extern BOOL gSqueakHeadless;
+ if (gSqueakHeadless) {
+ self.windowHandler = AUTORELEASEOBJ([[sqSqueakNullScreenAndWindow alloc] init]);
+ [self initializeTheWindowHandler];
+ return;
+ } else {
+ self.windowHandler = AUTORELEASEOBJ([[sqSqueakOSXScreenAndWindow alloc] init]);
+ }
+
+
+ [self initializeTheWindowHandler];
+ self.window.contentResizeIncrements = NSMakeSize(8.0f,8.0f);
+
//I setup the window with all the right properties. Some of them are depending on image information.
sqInt width,height;
@@ -129,59 +144,17 @@
[self.window setRepresentedURL: [[self squeakApplication] imageNameURL]];
[self.window setInitialFirstResponder: [self mainView]];
[self.window setShowsResizeIndicator: NO];
-
- extern sqInt getFullScreenFlag(void);
-#if (SQ_VI_BYTES_PER_WORD == 4)
- NSPanel *panel;
- if (sizeof(void*) == 8) {
- panel= NSGetAlertPanel(@"About this Alpha Version of Cocoa Squeak 64/32 bits 5.7b3 (21)",
- @"Only use this VM for testing, it lacks mac menu integration.",
- @"Dismiss",
- nil,
- nil);
- } else {
- return;
- }
-#else
- NSPanel *panel;
- if (sizeof(long) == 8) {
- panel= NSGetAlertPanel(@"About this Alpha Version of Cocoa Squeak 64/64 bits 5.7b3 (21)",
- @"Only use this VM for testing, it lacks mac menu integration.",
- @"Dismiss",
- nil,
- nil);
- } else {
- panel= NSGetAlertPanel(@"About this Alpha Version of Cocoa Squeak 32/64 bits 5.7b3 (21)",
- @"Only use this VM for testing, it lacks mac menu integration.",
- @"Dismiss",
- nil,
- nil);
- }
-#endif
-
-/* NSRect frame= [panel frame];
- frame.size.width *= 1.5f;
- [panel setFrame: frame display: NO];
- [NSApp runModalForWindow: panel];
- [panel close];
-*/
}
-(void) setupMainView {
- //Creates and sets the contentView for our window.
+ extern BOOL gSqueakHeadless;
+ if (gSqueakHeadless) {
+ return;
+ }
+ //Creates and sets the contentView for our window.
//It can right now, I have two implementations to pick (CoreGraphics or OpenGL), muy more/different could be added
//in the future.
- NSView *view = AUTORELEASEOBJ([[ContentViewClass alloc] initWithFrame:[[self window] frame]]);
- self.mainView = (id) view;
- [[self window] setContentView: view];
-
- [windowHandler setMainViewOnWindow: (sqSqueakOSXOpenGLView *) view];
- [(sqSqueakOSXOpenGLView *) view setWindowLogic: windowHandler];
- [windowHandler setWindowIndex: 1];
- [[windowHandler mainViewOnWindow] initializeVariables];
- [[self window] setDelegate:windowHandler];
- [[self window] setContentResizeIncrements:NSMakeSize(8.0f,8.0f)];
}
- (id) createPossibleWindow {
Modified: branches/Cog/platforms/iOS/vm/OSX/SqueakOSXApplication.m
===================================================================
--- branches/Cog/platforms/iOS/vm/OSX/SqueakOSXApplication.m 2016-05-14 21:02:58 UTC (rev 3717)
+++ branches/Cog/platforms/iOS/vm/OSX/SqueakOSXApplication.m 2016-05-14 22:43:36 UTC (rev 3718)
@@ -50,7 +50,7 @@
sqSqueakOSXScreenAndWindow *squeakScreenWindow = (sqSqueakOSXScreenAndWindow *) who.delegate;
sqSqueakOSXOpenGLView *view;
if (squeakScreenWindow)
- view = squeakScreenWindow.mainViewOnWindow;
+ view = [squeakScreenWindow getMainViewOnWindow];
else
view = [who contentView];
[view fakeKeyDownUp: anEvent];
Added: branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.h
===================================================================
--- branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.h (rev 0)
+++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.h 2016-05-14 22:43:36 UTC (rev 3718)
@@ -0,0 +1,69 @@
+//
+// sqSqueakNullScreenAndWindow.h
+// SqueakPureObjc
+//
+// Created by John M McIntosh on 2016-05-14.
+/*
+ Copyright (c) 2016 Corporate Smalltalk Consulting Ltd. All rights reserved.
+ MIT License
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+
+ The end-user documentation included with the redistribution, if any, must include the following acknowledgment:
+ "This product includes software developed by Corporate Smalltalk Consulting Ltd (http://www.smalltalkconsulting.com)
+ and its contributors", in the same place and form as other third-party acknowledgments.
+ Alternately, this acknowledgment may appear in the software itself, in the same form and location as other
+ such third-party acknowledgments.
+
+ */
+//
+//
+
+#import <Foundation/Foundation.h>
+#import "sq.h"
+
+ at interface sqSqueakNullScreenAndWindow : NSObject {
+ sqInt windowIndex;
+ BOOL forceUpdateFlush;
+}
+
+- (sqInt) ioScreenSize;
+- (sqInt) ioScreenDepth;
+- (sqInt) ioHasDisplayDepth: (sqInt) depth;
+- (void) ioForceDisplayUpdate;
+- (void) ioSetFullScreen: (sqInt) fullScreen;
+- (int) ioShowDisplayOnWindow: (unsigned char*) dispBitsIndex
+ width: (int) width
+ height: (int) height
+ depth: (int) depth
+ affectedL: (int) affectedL
+ affectedR: (int) affectedR
+ affectedT: (int) affectedT
+ affectedB: (int) affectedB
+ windowIndex: (int) windowIndex;
+- (id) getMainView;
+- (void) ioForceDisplayUpdateFlush: (NSTimer*)theTimer;
+- (id) getMainViewOnWindow;
+- (void) mainViewOnWindow: (id) aView;
+
+ at property (nonatomic,assign) sqInt windowIndex;
+ at property (nonatomic,assign) BOOL forceUpdateFlush;
+ at end
Added: branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.m
===================================================================
--- branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.m (rev 0)
+++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakNullScreenAndWindow.m 2016-05-14 22:43:36 UTC (rev 3718)
@@ -0,0 +1,103 @@
+//
+// sqSqueakNullScreenAndWindow.m
+// SqueakPureObjc
+//
+// Created by John M McIntosh on 2016-05-14.
+/*
+ Copyright (c) 2016 Corporate Smalltalk Consulting Ltd. All rights reserved.
+ MIT License
+ Permission is hereby granted, free of charge, to any person
+ obtaining a copy of this software and associated documentation
+ files (the "Software"), to deal in the Software without
+ restriction, including without limitation the rights to use,
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following
+ conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+
+ The end-user documentation included with the redistribution, if any, must include the following acknowledgment:
+ "This product includes software developed by Corporate Smalltalk Consulting Ltd (http://www.smalltalkconsulting.com)
+ and its contributors", in the same place and form as other third-party acknowledgments.
+ Alternately, this acknowledgment may appear in the software itself, in the same form and location as other
+ such third-party acknowledgments.
+
+ */
+
+//
+//
+
+#import "sqSqueakNullScreenAndWindow.h"
+
+ at implementation sqSqueakNullScreenAndWindow
+ at synthesize windowIndex,forceUpdateFlush;
+
+- (instancetype)init {
+ self = [super init];
+ if (self) {
+ }
+ return self;
+}
+
+- (id) getMainViewOnWindow {
+ return NULL;
+}
+
+- (void) mainViewOnWindow: (id) aView {
+}
+
+- (id) getMainView {
+ return NULL;
+}
+
+- (void) ioSetFullScreen: (sqInt) fullScreen {
+}
+
+- (sqInt) ioScreenSize {
+ return (10 << 16) | (10 & 0xFFFF); /* w is high 16 bits; h is low 16 bits */
+}
+
+- (sqInt) ioScreenDepth {
+ return 32;
+}
+
+- (sqInt) ioHasDisplayDepth: (sqInt) depth {
+ if (depth == 2 || depth == 4 || depth == 8 || depth == 16 || depth == 32 ||
+ depth == -2 || depth == -4 || depth == -8 || depth == -16 || depth == -32) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+- (void) ioForceDisplayUpdate {
+}
+
+- (void) ioForceDisplayUpdateFlush: (NSTimer*)theTimer {
+
+}
+
+- (int) ioShowDisplayOnWindow: (unsigned char*) dispBitsIndex
+ width: (int) width
+ height: (int) height
+ depth: (int) depth
+ affectedL: (int) affectedL
+ affectedR: (int) affectedR
+ affectedT: (int) affectedT
+ affectedB: (int) affectedB
+ windowIndex: (int) passedWindowIndex {
+ return 0;
+}
+
+ at end
Modified: branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXApplication.m
===================================================================
--- branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXApplication.m 2016-05-14 21:02:58 UTC (rev 3717)
+++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXApplication.m 2016-05-14 22:43:36 UTC (rev 3718)
@@ -104,7 +104,7 @@
}
- (void) doHeadlessSetup {
- [super doHeadlessSetup];
+ //No super call here as we've already set headless from command line or info.plist
extern BOOL gSqueakHeadless;
// Notice that setActivationPolicy: is available in OSX 10.6 and later
if ([NSApp respondsToSelector:@selector(setActivationPolicy:)]) {
@@ -147,7 +147,6 @@
- (int) parseArgument: (NSString *) argData peek: (char *) peek
{
-
if ([argData isEqualToString: @"--"]) {
return 1;
}
@@ -344,41 +343,54 @@
- (void) parseArgs: (NSArray *) args {
- commandLineArguments = [args copyWithZone:null];
- argsArguments = [[NSMutableArray alloc] initWithCapacity: [args count]];
-
- if ([args count] < 2)
- return;
- //NSLog(@"%@",args);
- int i;
- BOOL optionsCompleted = NO;
- for (i = 1; i < [args count]; i++) {
- NSString *argData = args[i];
- char *peek = i + 1 >= [args count] ? 0 : (char *)[args[i+1] UTF8String];
- //printf("argData %s peek %s\n", [argData UTF8String], peek ? peek : "NULL");
- if ([argData isEqualToString: @"--"]) {
- optionsCompleted = YES;
- continue;
- }
- if (!optionsCompleted && ![[argData substringToIndex: 1] isEqualToString: @"-"]) {
- optionsCompleted = YES;
- //guessing first parameter as image name
- if ([argData compare: @"--"] != NSOrderedSame)
+ commandLineArguments = [args copyWithZone:null];
+ argsArguments = [[NSMutableArray alloc] initWithCapacity: [args count]];
+
+ if ([args count] < 2)
+ return;
+ NSMutableArray *revisedArgs = AUTORELEASEOBJ([args mutableCopyWithZone: NULL]);
+ [revisedArgs removeObjectAtIndex:0];
+
+ NSUInteger i,result;
+ BOOL optionsCompleted = NO;
+ for (i=0; i<[revisedArgs count]; i++) {
+ NSString *argData = revisedArgs[i];
+
+ NSString *peek = (i == ([revisedArgs count] - 1)) ? @"" : revisedArgs[i+1];
+
+ if ([argData isEqualToString: @"-NSDocumentRevisionsDebugMode"]) {
+ //This is an Xcode debug option, skip it for us
+ i++;
+ continue;
+ }
+ if ([argData compare: @"--"] == NSOrderedSame) {
+ optionsCompleted = YES;
+ continue;
+ }
+ if (!optionsCompleted && ![[argData substringToIndex: 1] isEqualToString: @"-"]) {
+ optionsCompleted = YES;
+
+ //guessing first parameter as image name
+ if ([argData compare: @"--"] != NSOrderedSame) {
[self setImageNamePathIfItWasReadable:argData];
- continue;
- }
- if (optionsCompleted)
- [self.argsArguments addObject: argData];
- else {
- int result = [self parseArgument: argData peek: peek];
- if (result <= 0) { /* option not recognised */
- fprintf(stderr, "unknown option: %s\n", [argData UTF8String]);
- [self usage];
- exit(1);
- }
- i += result - 1;
- }
- }
+ } else {
+ continue;
+ }
+ }
+ if (optionsCompleted) {
+ [self.argsArguments addObject: argData];
+ } else {
+ result = [self parseArgument: argData peek: peek.UTF8String];
+ if (result == 0) /* option not recognised */ {
+ fprintf(stderr, "unknown option: %s\n", [argData UTF8String]);
+ [self usage];
+ exit(1);
+ }
+ if (result == 2)
+ i++;
+ }
+
+ }
}
- (long long) strtobkm: (const char *) str {
Modified: branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXDropAPI.m
===================================================================
--- branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXDropAPI.m 2016-05-14 21:02:58 UTC (rev 3717)
+++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXDropAPI.m 2016-05-14 22:43:36 UTC (rev 3718)
@@ -53,7 +53,7 @@
char* dropRequestFileName(sqInt dropIndex) {
/* return name of file or NULL if error */
- sqSqueakOSXOpenGLView *view = ((sqSqueakOSXScreenAndWindow*)((__bridge NSWindow *)windowHandleFromIndex(1)).delegate).mainViewOnWindow;
+ sqSqueakOSXOpenGLView *view = [((sqSqueakOSXScreenAndWindow*)((__bridge NSWindow *)windowHandleFromIndex(1)).delegate) getMainViewOnWindow];
NSString *fileNameString = [view dragFileNameStringAtIndex: dropIndex];
return (char *) [fileNameString UTF8String];
}
Modified: branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXOpenGLView.m
===================================================================
--- branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXOpenGLView.m 2016-05-14 21:02:58 UTC (rev 3717)
+++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXOpenGLView.m 2016-05-14 22:43:36 UTC (rev 3718)
@@ -175,12 +175,6 @@
}
- (void) drawThelayers {
- extern BOOL gSqueakHeadless;
- if (gSqueakHeadless) {
- firstDrawCompleted = YES;
- return;
- }
-
if (syncNeeded) {
[self drawRect: NSRectFromCGRect(clippy)];
syncNeeded = NO;
Modified: branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.h
===================================================================
--- branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.h 2016-05-14 21:02:58 UTC (rev 3717)
+++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.h 2016-05-14 22:43:36 UTC (rev 3718)
@@ -43,6 +43,8 @@
@interface sqSqueakOSXScreenAndWindow : sqSqueakScreenAndWindow <NSWindowDelegate>{
sqSqueakOSXOpenGLView *mainViewOnWindow;
}
- at property (nonatomic,strong) sqSqueakOSXOpenGLView *mainViewOnWindow;
+- (sqSqueakOSXOpenGLView *) getMainViewOnWindow;
+- (void) mainViewOnWindow: (sqSqueakOSXOpenGLView *) aView;
+
@end
Modified: branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.m
===================================================================
--- branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.m 2016-05-14 21:02:58 UTC (rev 3717)
+++ branches/Cog/platforms/iOS/vm/OSX/sqSqueakOSXScreenAndWindow.m 2016-05-14 22:43:36 UTC (rev 3718)
@@ -45,6 +45,10 @@
extern SqueakOSXAppDelegate *gDelegateApp;
+ at interface sqSqueakOSXScreenAndWindow()
+ @property (nonatomic,strong) sqSqueakOSXOpenGLView *mainViewOnWindow;
+ at end
+
@implementation sqSqueakOSXScreenAndWindow
@synthesize mainViewOnWindow;
@@ -52,6 +56,14 @@
return self.mainViewOnWindow;
}
+- (void) mainViewOnWindow: (id) aView {
+ self.mainViewOnWindow = aView;
+}
+
+- (sqSqueakOSXOpenGLView *) getMainViewOnWindow {
+ return self.mainViewOnWindow;
+}
+
- (void) dealloc {
RELEASEOBJ(mainViewOnWindow);
SUPERDEALLOC
More information about the Vm-dev
mailing list