support ExportFl and ImportFl extensions

This commit is contained in:
Jesús A. Álvarez 2016-06-04 15:05:05 +02:00
parent 8c3434740f
commit e220494dc5
2 changed files with 67 additions and 16 deletions

View File

@ -88,8 +88,8 @@ typedef uint64_t ui6b;
#define IncludeHostTextClipExchange 1 #define IncludeHostTextClipExchange 1
#define IncludeSonyRawMode 1 #define IncludeSonyRawMode 1
#define IncludeSonyGetName 1 #define IncludeSonyGetName 1
#define IncludeSonyNew 0 #define IncludeSonyNew 1
#define IncludeSonyNameNew 0 #define IncludeSonyNameNew 1
#define EmLocalTalk 0 #define EmLocalTalk 0

View File

@ -39,6 +39,7 @@ EXPORTVAR(ui3p, RAM)
@interface Emulator : NSObject <Emulator> @interface Emulator : NSObject <Emulator>
- (void)makeNewDisk:(NSString*)name size:(NSInteger)size;
- (void)updateScreen:(CGImageRef)screenImage; - (void)updateScreen:(CGImageRef)screenImage;
@end @end
@ -266,15 +267,13 @@ LOCALFUNC NSString *NSStringCreateFromSubstCStr(char *s,
} }
#if IncludeSonyNameNew #if IncludeSonyNameNew
LOCALFUNC blnr MacRomanFileNameToNSString(tPbuf i, LOCALFUNC NSString * MacRomanFileNameToNSString(tPbuf i) {
NSString **r) {
ui3p p; ui3p p;
void *Buffer = PbufDat[i]; void *Buffer = PbufDat[i];
ui5b L = PbufSize[i]; ui5b L = PbufSize[i];
p = (ui3p)malloc(L /* + 1 */); p = (ui3p)malloc(L /* + 1 */);
if (p != NULL) { if (p != NULL) {
NSData *d;
ui3b *p0 = (ui3b *)Buffer; ui3b *p0 = (ui3b *)Buffer;
ui3b *p1 = (ui3b *)p; ui3b *p1 = (ui3b *)p;
@ -306,19 +305,10 @@ LOCALFUNC blnr MacRomanFileNameToNSString(tPbuf i,
} }
} }
d = [[NSData alloc] initWithBytesNoCopy:p length:L]; return [[NSString alloc] initWithBytes:p length:L encoding:NSMacOSRomanStringEncoding];
*r = [[[NSString alloc]
initWithData:d
encoding:NSMacOSRomanStringEncoding]
autorelease];
[d release];
return trueblnr;
} }
return falseblnr; return nil;
} }
#endif #endif
@ -1643,6 +1633,29 @@ LOCALPROC CheckForSavedTasks(void) {
if ((nullpr != SavedBriefMsg)) { if ((nullpr != SavedBriefMsg)) {
MacMsgDisplayOn(); MacMsgDisplayOn();
} }
#if IncludeSonyNew
if (vSonyNewDiskWanted && !SpeedStopped) {
SpeedStopped = trueblnr;
#if IncludeSonyNameNew
if (vSonyNewDiskName != NotAPbuf) {
NSString *sNewDiskName = MacRomanFileNameToNSString(vSonyNewDiskName);
if (sNewDiskName) {
[sharedEmulator makeNewDisk:sNewDiskName size:vSonyNewDiskSize];
} else {
PbufDispose(vSonyNewDiskName);
vSonyNewDiskName = NotAPbuf;
vSonyNewDiskWanted = falseblnr;
SpeedStopped = falseblnr;
}
} else
#endif
{
[sharedEmulator makeNewDisk:NSLocalizedString(@"untitled", nil) size:vSonyNewDiskSize];
}
}
#endif
} }
GLOBALFUNC blnr ExtraTimeNotOver(void) { GLOBALFUNC blnr ExtraTimeNotOver(void) {
@ -1696,6 +1709,9 @@ GLOBALPROC WaitForNextTick(void) {
static dispatch_once_t onceToken; static dispatch_once_t onceToken;
@implementation Emulator @implementation Emulator
{
__block __weak UITextField *nameTextField;
}
@synthesize dataPath; @synthesize dataPath;
@ -1806,6 +1822,41 @@ static dispatch_once_t onceToken;
return @"didEjectDisk"; return @"didEjectDisk";
} }
- (void)makeNewDisk:(NSString*)name size:(NSInteger)size {
if ([UIAlertController class]) {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Export File", nil) message:NSLocalizedString(@"Enter new name", nil) preferredStyle:UIAlertControllerStyleAlert];
[alertController addTextFieldWithConfigurationHandler:^(UITextField * _Nonnull textField) {
nameTextField = textField;
nameTextField.placeholder = name;
nameTextField.text = name;
}];
[alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Cancel", nil) style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
[self didMakeNewDisk:nil size:0];
}]];
[alertController addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Save", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[self didMakeNewDisk:nameTextField.text size:size];
}]];
[[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alertController animated:YES completion:nil];
} else {
}
}
- (void)didMakeNewDisk:(NSString*)fileName size:(NSInteger)size {
if (fileName) {
NSString *filePath = [self.dataPath stringByAppendingPathComponent:fileName];
MakeNewDisk0(size, filePath);
}
#if IncludeSonyNameNew
if (vSonyNewDiskName != NotAPbuf) {
PbufDispose(vSonyNewDiskName);
vSonyNewDiskName = NotAPbuf;
}
#endif
vSonyNewDiskWanted = falseblnr;
SpeedStopped = falseblnr;
}
#pragma mark - Keyboard #pragma mark - Keyboard
- (int)translateScanCode:(int)scancode { - (int)translateScanCode:(int)scancode {