[Info-vax] completion status from LIB$SPAWN
David Froble
davef at tsoft-inc.com
Fri Apr 27 10:34:33 EDT 2012
StGallen wrote:
> 1. For the benefit of anyone reading this thread, the above is described in the C manual.
>
> 2. The value 268435457 (in decimal) is same as %X10000001 in HEXA and 1 in decimal is same as 1 in HEXA.
>
> $ say F$message(%X00000001)
> %SYSTEM-S-NORMAL, normal successful completion
>
> $ say F$message(%X10000001)
> %SYSTEM-S-NORMAL, normal successful completion
>
> So both 268435457 & 1 are status codes for normal completion. However, the constant SS$_NORMAL is defined to be 1.
>
> So the question remains: why would VMS return 2 values for Normal Completion?
> How are programmers expected to handle it without going the route of the procedure posted by Briggs above.
>
> P.S: In case anyone wants to know :
> 268435457 in DECIMAL is 10000000000000000000000000001 in BINARY.
> assuming the right most position is position 0, the left most position is 28. Bit 27 is clear so it is a message from HP. Bits 15 to 3 are clear. Severity 2-0 is 1 which implies SUCCESS.
As others have explained, your insistence on doing value comparisons is inappropriate.
The standard in VMS is that the least significant bit in a completion status mask
specifies success or failure. Don't test the value, do a mask comparison, ie;
If (Stat% And SS$_NORMAL)
Then Print "Success"
Else Print "Failure"
End If
The other bits in a completion status can indicate additional information, but have no
bearing on success or failure.
You're making this a lot harder than it actually is.
Now, if there is a failure, then perhaps sometimes you might want to test for specific
reasons for the failure, which is appropriate, but if all you want to know is success or
failure, you have only one bit to check.
More information about the Info-vax
mailing list