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.

Reply via email to