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.