![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: I would like to use the $GETDVI system service, using the DVI$_STS item code to return a device unit status as a 4-byte bit vector. Each bit in the vector supposedly corresponds to a symbolic name defined by the $UCBDEF macro. However, the $UCBDEF state ment in my Macro-32 program is an "unrecognized statement". Do you know what my problem is? Are the symbolic names, like UCB$V_POWER defined somewhere else? Thank you. The Answer is : By default MACRO-32 programs will search SYS$SHARE:STARLET.MLB for macro definitions. The $UCBDEF macro however, is defined in SYS$SHARE:LIB.MLB which is not searched by default. You can specify libraries to be searched on the command line with the /LIBRARY qualifier, for example: $ MACRO myprog +SYS$SHARE:LIB/LIBRARY or in the code itself with the .LIBRARY directive: .TITLE MyProgram .LIBRARY /SYS$SHARE:LIB/ $UCBDEF The decision as to which macros are stored in which library is somewhat arbitrary. The general principle is that STARLET.MLB will contain the most frequently accessed macros used by user mode programmers. LIB.MLB contains macros related to operating system internals, device drivers, inner mode, machine dependent and privileged code. Use the LIBRARY/LIST command to search for macros. For example: $ LIBRARY/LIST=*UCB* SYS$SHARE:LIB/MACRO Directory of MACRO library SYS$COMMON:[SYSLIB]LIB.MLB;2 on 1-APR-2000 21:37:51 Creation date: 23-NOV-1999 13:04:15 Creator: Librarian A09-22 Revision date: 23-NOV-1999 13:04:17 Library format: 3.0 Number of modules: 1011 Max. key length: 31 Other entries: 0 Preallocated index blocks: 173 Recoverable deleted blocks: 0 Total index blocks used: 55 Max. Number history records: 20 Library history records: 0 $DRIVER_CLONEDUCB_ENTRY $FTUCBDEF $TTYUCBDEF $UCBDEF CALL_CLONE_UCB CALL_COPY_UCB CALL_CREDIT_UCB CALL_DELETE_UCB CALL_LINK_UCB CALL_SEVER_UCB
|