^VAL
Pass an argument by value or declare a value type function
WTSupported in traditional Synergy on Windows
|
WNSupported in Synergy .NET on Windows
|
USupported on UNIX
|
VSupported on OpenVMS
|
^VAL(expression)
or
^VAL(argument) ,i
or
external function funcname ,^VAL . . . function funcname ,^VAL[(i)]
Arguments
expression
An argument to pass by value. (n)
argument
An argument of type i passed by value. (i)
funcname
The name of the function being declared. (a)
Discussion
^VAL is used to pass an argument by value, to declare an argument as type value, or to declare a function as returning an int by value.
^VAL can be used to pass arguments to C routines. If you use ^VAL to pass arguments to Synergy DBL routines, the corresponding parameters in the Synergy routines must be declared as type ^VAL, with an integer data type. When an argument is passed by value, the binary representation of the result of expression is passed.
Functions declared as type ^VAL are “true” functions with integer return values. If the value specified in the function’s FRETURN statement is not integer data type, it is converted to integer.
On OpenVMS, any routine that passes floating-point arguments by value will not work on either Alpha or I64. This type of routine requires a C wrapper routine.
See also
- Compiler options for information about the -X compiler option
- ^VAL functions
- Defining a parameter
- Data types
- Return values
Examples
This example shows a call to a ^VAL function in which some arguments are passed by value.
.include "$DVIDEF" library "DBLSTARLET" external function sys$getdviw ,^val record stat ,i4 group itmlst ,[4]i len ,i2 code ,i2 bufaddr ,i4 retlen ,i4 endgroup mbx_syschan ,i2 mbx_name ,a16 proc open(1, o, "tt:") xcall crembx(2, "message_mbx", 0, 132, 1320,,, 1) ;Create mailbox itmlst[1].len = ^size(mbx_name) ;Set up item list itmlst[1].code = DVI$_DEVNAM itmlst[1].bufaddr = ^addr(mbx_name) itmlst[1].retlen = 0 clear itmlst[2].len, itmlst[2].code xcall getfa(2, "SCH", mbx_syschan) ;Get mailbox channel stat = %sys$getdviw(, ^val(mbx_syschan),, ^ref(itmlst),,,,) ;Pass args by value and ref if (.not. (stat .band. 1)) xcall lib$stop(^val(stat)) writes(1, "Mailbox name: " + mbx_name) ;Get device name of mailbox ; directly into the send msg end