HP OpenVMS Systemsask the wizard |
The Question is:
I just verified that the function of sys$cantim() also includes cleanup in the
AST queue using the following
void ProcTimer()
printf( "ProcTimer\n" );
void ProcCancel()
sleep(20);
sys$cantim( 1, 0 );
main()
int wait[2] = { -1e8, -1 );
sys$setimr( 0, wait, ProcTimer, 1 );
sys$dclast( ProcCancel, 0, 0 );
sys$hiber();
Nice. But I also discovered that the trailing arguments to sys$cantim() and
sys$dclast() are not optional as indicated by the online help.
The Answer is :
"Optional" vs "Omitted" arguments...
Note very carefully how the documentation displays the arguments:
SYS$CANTIM [reqidt] ,[acmode]
SYS$DCLAST astadr ,[astprm] ,[acmode]
Note that the comma is OUTSIDE the square brackets. This indicates the
argument is OPTIONAL, but the argument position MUST be filled with a
zero passed by immediate value.
Compare with:
LIB$SPAWN [command-string] [,input-file]
[,output-file] [,flags] [,process-name]
[,process-id] [,completion-status-address]
[,byte-integer-event-flag-num] [,AST-address]
[,varying-AST-argument] [,prompt-string] [,cli]
[,table]
Here the comma is INSIDE the square brackets. This indicates the argument
is optional and may be OMITTED altogether. That is, the argument list may
be shortened to the last agument that was not omitted.
As a general rule, OpenVMS system services (SYS$) typically require
the explicit specification of all arguments. (There are a few
exceptions, usually in cases where arguments have been added as
enhancements since the service was first defined.) OpenVMS Run-Time
Library (RTL) routines (LIB$, SMG$, etc) typically do have support
for omitted arguments.
When using system services, remember that the supporting operating
system code executes in a privileged processor mode -- a mode where
the consequences of a coding error can corrupt data or can crash the
system, and particularly where memory allocation and deallocations
occur from protected memory pools. For these and other reasons,
system services tend to verify the appropriate accessability of the
arguments, and to perform minimal argument processing work beyond
what is central to the operation. Niceties such as processing
variable length argument lists, and dynamic string operations such
as trimming, extending, upper-casing or otherwise manipulating the
strings (see the FAQ) that one can expect of an RTL routine are
typically NOT performed by system service calls.
Features of specific language constructs can also feature prominently
here. Please see your language-specific programming documentation,
and please see the OpenVMS Calling Standard documentation, for
additional details and requirements.
|