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.