I don't really know the answer to your question but it's probably lurking in 
the following section of perl.h.  It appears to be converting VMS condition 
codes to some other (POSIX?) exit statuses.  In pp_sys.c there is a call to 
STATUS_NATIVE_SET with the return value of Perl_do_spawn().  What I find 
particulary puzzling here is that after extracting the severity bits (0-2) 
the result is shifted left by 8.  How can the VMS severity bits have any 
meaning when shoved up one byte?

#ifdef VMS
#   define STATUS_NATIVE        PL_statusvalue_vms
#   define STATUS_NATIVE_EXPORT \
        (((I32)PL_statusvalue_vms == -1 ? 44 : PL_statusvalue_vms) | (VMSISH_HUSHED ? 
0x10000000 : 0))
#   define STATUS_NATIVE_SET(n)                                         \
        STMT_START {                                                    \
            PL_statusvalue_vms = (n);                                   \
            if ((I32)PL_statusvalue_vms == -1)                          \
                PL_statusvalue = -1;                                    \
            else if (PL_statusvalue_vms & STS$M_SUCCESS)                \
                PL_statusvalue = 0;                                     \
            else if ((PL_statusvalue_vms & STS$M_SEVERITY) == 0)        \
                PL_statusvalue = 1 << 8;                                \
            else                                                        \
                PL_statusvalue = (PL_statusvalue_vms & STS$M_SEVERITY) << 8;    \
        } STMT_END
#   define STATUS_POSIX PL_statusvalue
#   ifdef VMSISH_STATUS
#       define STATUS_CURRENT   (VMSISH_STATUS ? STATUS_NATIVE : STATUS_POSIX)
#   else
#       define STATUS_CURRENT   STATUS_POSIX
#   endif
_______________________________________________
Craig A. Berry                                   
mailto:[EMAIL PROTECTED]

Reply via email to