Change 13614: Return DoAppleScript errors in $@

[email protected] (Chris Nandor) Tue, 11 Dec 2001 01:24:36 -0500
Newsgroups perl.perl5.changes.mac
Message-ID <p0510030cb83b570dd792@[10.0.1.177]>
Change 13614 by pudge@pudge-mobile on 2001/12/11 05:08:51

	Return DoAppleScript errors in $@

Affected files ...

.... //depot/maint-5.6/macperl/macos/ext/MacPerl/OSA.xs#2 edit

Differences ...

==== //depot/maint-5.6/macperl/macos/ext/MacPerl/OSA.xs#2 (text) ====
Index: perl/macos/ext/MacPerl/OSA.xs
--- perl/macos/ext/MacPerl/OSA.xs.~1~	Mon Dec 10 22:15:06 2001
+++ perl/macos/ext/MacPerl/OSA.xs	Mon Dec 10 22:15:06 2001
@@ -101,24 +101,32 @@
 	SV *	script
 	CODE:
 	{
-		AEDesc	source;
-		AEDesc	result;
-		char *	scriptText;
-		STRLEN	len;
+		AEDesc		source;
+		AEDesc		result;
+		char *		scriptText;
+		STRLEN		len;
+		OSAError	myOSAErr;
+		AEDesc		source_errs;
+		AEDesc		result_errs;
+		char *		errorText;
+		STRLEN		errorLen;
 	/**/		
 		if (!gScriptingComponent && InitAppleScript())
 			croak("MacPerl::DoAppleScript couldn't initialize AppleScript");
 	/**/		
+		sv_setpvn(ERRSV, "", 0);
 		scriptText = (char*) SvPV(ST(0), len);
 		AECreateDesc(typeChar, scriptText, len, &source);
 	/**/		
-		if (!OSADoScript(
-				gScriptingComponent, 
-				&source, 
-				kOSANullScript, 
-				typeChar, 
-				kOSAModeCanInteract,
-				&result))
+		myOSAErr = OSADoScript(
+			gScriptingComponent, 
+			&source, 
+			kOSANullScript, 
+			typeChar, 
+			kOSAModeCanInteract,
+			&result
+		);
+		if (!myOSAErr)
 		{
 			AEDisposeDesc(&source);
 	/**/		
@@ -132,6 +140,30 @@
 			AEDisposeDesc(&result);
 		} else {
 			AEDisposeDesc(&source);
+
+			if (myOSAErr == errOSAScriptError) {
+				OSAScriptError(
+					gScriptingComponent,
+					kOSAErrorMessage,
+					typeChar,
+					&result_errs
+				);
+
+				AEDisposeDesc(&source_errs);
+				if (!AECoerceDesc(&result_errs, typeChar, &source_errs)) {
+					errorText = "";
+					HLock(source_errs.dataHandle);
+					/* set $@ */
+					errorLen = GetHandleSize(source_errs.dataHandle);
+					strcpy(errorText, *source_errs.dataHandle);
+					if (strchr(errorText+errorLen-1, '.')) {
+						errorLen--;
+					}
+					sv_setpvn(ERRSV, errorText, errorLen);
+					AEDisposeDesc(&source_errs);
+				}
+				AEDisposeDesc(&result_errs);
+			}
 	/**/		
 			ST(0) = &PL_sv_undef;
 		}
End of Patch.