
OpenVMS documentation is some of the best I've ever seen but no one produces 100% accurate documentation which is why you need other options. If you write programs requiring OpenVMS system calls, then doing a simple hack of the Starlet library is one such option. The whole purpose of the next example is to produce a searchable text file of the BASIC definition for the Starlet system library (known as BASIC$STARLET.TLB) in order to "double check" passing mechanisms, variable types and variable sizes described in the OpenVMS documentation.
BTW, the following procedure requires ~ 6700 blocks so be careful.
Legend : <ur> = user response
<sr> = system response
<sr> $
<ur> set def sys$library
<sr> $
<ur> dir *.tlb
<sr> Directory SYS$COMMON:[SYSLIB]
BASIC$STARLET.TLB;1 DECC$RTLDEF.TLB;1 EPC$FACILITY.TLB;1 ERFLIB.TLB;1
LIB_ADA_SUBSET.TLB;1 NTA.TLB;1 STARLETSD.TLB;1
STARLET_RECENT_ADA_SUBSET.TLB;1 SYS$LIB_C.TLB;1 SYS$STARLET_C.TLB;1
TCPIP$TEMPLATES.TLB;1
Total of 11 files.
<sr> $
<ur> lib BASIC$STARLET.TLB/text/extract=*
<sr> $
<ur> dir BASIC$STARLET.TXT
<sr> Directory SYS$COMMON:[SYSLIB]
BASIC$STARLET.TXT;1
Total of 1 file.
<sr> $
<ur> edit/read BASIC$STARLET.TXT
Notes:
Now search for "sys$qio" and you'll see the following:
$QIO
Queue I/O Request
$QIO [efn] ,chan ,func ,[iosb] ,[astadr] ,[astprm]
($QIOW) ,[p1] ,[p2] ,[p3] ,[p4] ,[p5] ,[p6]
efn = number of event flag to set on completion
chan = number of channel on which I/O is directed
func = function code specifying action to be performed
iosb = address of quadword I/O status block to receive final
completion status
astadr = address of entry mask of AST routine
astprm = value to be passed to AST routine as argument
p1... = optional device- and function-specific parameters
EXTERNAL LONG FUNCTION SYS$QIO &
( &
LONG BY VALUE, &
WORD BY VALUE, &
WORD BY VALUE, &
BASIC$QUADWORD BY REF, &
LONG BY REF, &
LONG BY VALUE, &
ANY BY REF, &
LONG BY VALUE, &
LONG BY VALUE, &
LONG BY VALUE, &
LONG BY VALUE, &
LONG BY VALUE &
)
Note: this info is required when chasing strange compile-time bugs but only the OpenVMS CD-ROM documentation can be used to write and support a program requiring system calls.
Some Documentation Anomalies:
| System Call | Starlet Definition |
OpenVMS 7.2-1 CD-ROM (1999) |
OpenVMS 7.3-1 CD-ROM (2002) |
|---|---|---|---|
| lib$bbcci | long by ref, long by value always correct |
long by ref, address by ref incorrect |
long by ref, address by value correct |
| lib$bbssi | long by ref, long by value always correct |
long by ref, address by ref incorrect |
long by ref, address by value correct |
To reference BASIC$STARLET text library declarations from within a Compaq-BASIC (soon to be HP-BASIC?) program you'll need to have something that looks similar to this code fragment:
!
! <<< system declarations >>>
!
%include "starlet" %from %library "sys$library:basic$starlet" ! system services (sys$qio)
%include "$ssdef" %from %library "sys$library:basic$starlet" ! ss$
%include "$libroutines" %from %library "sys$library:basic$starlet" ! lib$
%include "$uaidef" %from %library "sys$library:basic$starlet" ! uai$
Note: Make sure to include every module that your program requires. For more information just click here to check out a list of my fully-functional free demo programs.
Back
to Home
Neil Rieck
Kitchener - Waterloo - Cambridge, Ontario, Canada.
