OpenVMS Source Code Demos
GETRMI_DEMO.BAS
1000 %title "getrmi_demo_xxx.bas" !
%ident "version 101.1" ! <<<---+--- these must match
declare string constant k_version = "101.1" , ! <<<---+ &
k_program = "getrmi_demo" !
!=======================================================================
! title : getrmi_demo_xxx.bas
! author : Neil Rieck (n.rieck@bell.net)
! created: 2000.05.30
! ver who when what
! --- --- -------- -----------------------------------------------------
! 100 NSR 20120322 1. original work
! 101 NSR 20120323 1. experiments with RMI$_DISKS
! 2. also added
!
! remember to update k_version above
!=======================================================================
option type=explicit ! no kid stuff
!
declare long rc% , &
i%
!
! pull in some stuff from STARTLET (the compiler is our friend)
!
%include "starlet" %from %library "sys$library:basic$starlet" ! system services
%include "$ssdef" %from %library "sys$library:basic$starlet" ! ss$
%include "$rmidef" %from %library "sys$library:basic$starlet" ! rmi$
!
! create a new record called ItemRec
! (I did this just to show how it could be done,
! it would be better if you used a predefined structure in starlet)
!
%if %declared (%ITEMREC) = 0 %then
record ItemRec ! structure of item record
variant
case
group one
word BuffLen
word ItemCode
long BuffAddr
long RtnLenAdr
end group one
case
group two
long List_Terminator
long Junk1
long Junk2
end group two
end variant
end record ItemRec
%let %ITEMREC = 1
%end %if
!
! create a new datatype called RmiRec
!
record RmiRec ! structure of Rmi Record
ItemRec ItemVar(39) ! 0 -> 39 items (increase as necessary)
long list_term ! for end-of-list marker
end record RmiRec !
!
! now use the new datatype in a declaration statement
!
declare RmiRec RmiBuf ! Now declare a variable using it
!
! Storage for info returned by GETRMI
!
MAP(rmi)long v_RMI$_BLKAST ,&
long v_RMI$_BUFIO ,&
v_RMI$_DEQ ,&
v_RMI$_DIRIO ,&
v_RMI$_DLCKSRCH ,&
v_RMI$_DLCKFND ,&
v_RMI$_DZROFLTS ,&
v_RMI$_ENQCVT ,&
v_RMI$_ENQNEW ,&
v_RMI$_ENQNOTQD ,&
v_RMI$_ENQWAIT ,&
v_RMI$_FAULTS ,&
v_RMI$_FCPCALLS ,&
v_RMI$_FCPCACHE ,&
v_RMI$_FCPCPU ,&
v_RMI$_FCPFAULT ,&
v_RMI$_FCPHIT ,&
v_RMI$_FCPREAD ,&
v_RMI$_FCPSPLIT ,&
v_RMI$_FCPWRITE ,&
v_RMI$_FREFLTS ,&
v_RMI$_FRLIST ,&
v_RMI$_GVALFLTS ,&
v_RMI$_ISWPCNT ,&
v_RMI$_LOGNAM ,&
v_RMI$_MBREADS ,&
v_RMI$_MBWRITES ,&
v_RMI$_MODLIST ,&
v_RMI$_MFYFLTS ,&
v_RMI$_NUMLOCKS ,&
v_RMI$_NUMRES ,&
v_RMI$_PREADIO ,&
v_RMI$_PREADS ,&
v_RMI$_PWRITES ,&
v_RMI$_PWRITIO ,&
v_RMI$_SYSFAULTS ,&
v_RMI$_WRTINPROG ,&
v_RMI$_DISKS ,&
l_RMI$_DISKS ,&
v_RMI$_SCS ,&
l_RMI$_SCS ,&
v_RMI$_PROCS ,&
l_RMI$_PROCS !
!
!=======================================================================
! Main
!=======================================================================
main:
print k_program +"_"+ k_version
print string$(len(k_program +"_"+ k_version), asc("=")) ! what will the optimizer do with this?
!
! now data-fill the request list
! note: we'll do the first one this way just to show how
!
RmiBuf::ItemVar(0)::BuffLen = 4 ! byte-size of data buffer (v_RMI$_BLKAST is LONG)
RmiBuf::ItemVar(0)::ItemCode = RMI$_BLKAST ! requested data or operation
RmiBuf::ItemVar(0)::BuffAddr = LOC( v_RMI$_BLKAST) ! address of our storage location
RmiBuf::ItemVar(0)::RtnLenAdr = 0 ! address of bytes written (0=don't care)
!
! we'll fill the other 39 this way
!
for i% = 1 to 39 !
RmiBuf::ItemVar(i%)::BuffLen = 4 ! appears to always be long
RmiBuf::ItemVar(i%)::RtnLenAdr = 0 ! set to don't care
next i% !
!
RmiBuf::ItemVar( 1)::ItemCode = RMI$_BUFIO !
RmiBuf::ItemVar( 1)::BuffAddr = LOC(v_RMI$_BUFIO) ! address of our storage location
!
RmiBuf::ItemVar( 2)::ItemCode = RMI$_DEQ !
RmiBuf::ItemVar( 2)::BuffAddr = LOC(v_RMI$_DEQ) ! address of our storage location
!
RmiBuf::ItemVar( 3)::ItemCode = RMI$_DIRIO !
RmiBuf::ItemVar( 3)::BuffAddr = LOC(v_RMI$_DIRIO) ! address of our storage location
!
RmiBuf::ItemVar( 4)::ItemCode = RMI$_DLCKSRCH !
RmiBuf::ItemVar( 4)::BuffAddr = LOC(v_RMI$_DLCKSRCH) ! address of our storage location
!
RmiBuf::ItemVar( 5)::ItemCode = RMI$_DLCKFND !
RmiBuf::ItemVar( 5)::BuffAddr = LOC(v_RMI$_DLCKFND) ! address of our storage location
!
RmiBuf::ItemVar( 6)::ItemCode = RMI$_DZROFLTS !
RmiBuf::ItemVar( 6)::BuffAddr = LOC(v_RMI$_DZROFLTS) ! address of our storage location
!
RmiBuf::ItemVar( 7)::ItemCode = RMI$_ENQCVT !
RmiBuf::ItemVar( 7)::BuffAddr = LOC(v_RMI$_ENQCVT) ! address of our storage location
!
RmiBuf::ItemVar( 8)::ItemCode = RMI$_ENQNEW !
RmiBuf::ItemVar( 8)::BuffAddr = LOC(v_RMI$_ENQNEW) ! address of our storage location
!
RmiBuf::ItemVar( 9)::ItemCode = RMI$_ENQNOTQD !
RmiBuf::ItemVar( 9)::BuffAddr = LOC(v_RMI$_ENQNOTQD) ! address of our storage location
!
RmiBuf::ItemVar(10)::ItemCode = RMI$_ENQWAIT !
RmiBuf::ItemVar(10)::BuffAddr = LOC(v_RMI$_ENQWAIT) ! address of our storage location
!
RmiBuf::ItemVar(11)::ItemCode = RMI$_FAULTS !
RmiBuf::ItemVar(11)::BuffAddr = LOC(v_RMI$_FAULTS) ! address of our storage location
!
RmiBuf::ItemVar(12)::ItemCode = RMI$_FCPCALLS !
RmiBuf::ItemVar(12)::BuffAddr = LOC(v_RMI$_FCPCALLS) ! address of our storage location
!
RmiBuf::ItemVar(13)::ItemCode = RMI$_FCPCACHE !
RmiBuf::ItemVar(13)::BuffAddr = LOC(v_RMI$_FCPCACHE) ! address of our storage location
!
RmiBuf::ItemVar(14)::ItemCode = RMI$_FCPCPU !
RmiBuf::ItemVar(14)::BuffAddr = LOC(v_RMI$_FCPCPU) ! address of our storage location
!
RmiBuf::ItemVar(15)::ItemCode = RMI$_FCPFAULT !
RmiBuf::ItemVar(15)::BuffAddr = LOC(v_RMI$_FCPFAULT) ! address of our storage location
!
RmiBuf::ItemVar(16)::ItemCode = RMI$_FCPHIT !
RmiBuf::ItemVar(16)::BuffAddr = LOC(v_RMI$_FCPHIT) ! address of our storage location
!
RmiBuf::ItemVar(17)::ItemCode = RMI$_FCPREAD !
RmiBuf::ItemVar(17)::BuffAddr = LOC(v_RMI$_FCPREAD) ! address of our storage location
!
RmiBuf::ItemVar(18)::ItemCode = RMI$_FCPSPLIT !
RmiBuf::ItemVar(18)::BuffAddr = LOC(v_RMI$_FCPSPLIT) ! address of our storage location
!
RmiBuf::ItemVar(19)::ItemCode = RMI$_FCPWRITE !
RmiBuf::ItemVar(19)::BuffAddr = LOC(v_RMI$_FCPWRITE) ! address of our storage location
!
RmiBuf::ItemVar(20)::ItemCode = RMI$_FREFLTS !
RmiBuf::ItemVar(20)::BuffAddr = LOC(v_RMI$_FREFLTS) ! address of our storage location
!
RmiBuf::ItemVar(21)::ItemCode = RMI$_FRLIST !
RmiBuf::ItemVar(21)::BuffAddr = LOC(v_RMI$_FRLIST) ! address of our storage location
!
RmiBuf::ItemVar(22)::ItemCode = RMI$_GVALFLTS !
RmiBuf::ItemVar(22)::BuffAddr = LOC(v_RMI$_GVALFLTS) ! address of our storage location
!
RmiBuf::ItemVar(23)::ItemCode = RMI$_ISWPCNT !
RmiBuf::ItemVar(23)::BuffAddr = LOC(v_RMI$_ISWPCNT) ! address of our storage location
!
RmiBuf::ItemVar(24)::ItemCode = RMI$_LOGNAM !
RmiBuf::ItemVar(24)::BuffAddr = LOC(v_RMI$_LOGNAM) ! address of our storage location
!
RmiBuf::ItemVar(25)::ItemCode = RMI$_MBREADS !
RmiBuf::ItemVar(25)::BuffAddr = LOC(v_RMI$_MBREADS) ! address of our storage location
!
RmiBuf::ItemVar(26)::ItemCode = RMI$_MBWRITES !
RmiBuf::ItemVar(26)::BuffAddr = LOC(v_RMI$_MBWRITES) ! address of our storage location
!
RmiBuf::ItemVar(27)::ItemCode = RMI$_MODLIST !
RmiBuf::ItemVar(27)::BuffAddr = LOC(v_RMI$_MODLIST) ! address of our storage location
!
RmiBuf::ItemVar(28)::ItemCode = RMI$_MFYFLTS !
RmiBuf::ItemVar(28)::BuffAddr = LOC(v_RMI$_MFYFLTS) ! address of our storage location
!
RmiBuf::ItemVar(29)::ItemCode = RMI$_NUMLOCKS !
RmiBuf::ItemVar(29)::BuffAddr = LOC(v_RMI$_NUMLOCKS) ! address of our storage location
!
RmiBuf::ItemVar(30)::ItemCode = RMI$_NUMRES !
RmiBuf::ItemVar(30)::BuffAddr = LOC(v_RMI$_NUMRES) ! address of our storage location
!
RmiBuf::ItemVar(31)::ItemCode = RMI$_PREADIO !
RmiBuf::ItemVar(31)::BuffAddr = LOC(v_RMI$_PREADIO) ! address of our storage location
!
RmiBuf::ItemVar(32)::ItemCode = RMI$_PREADS !
RmiBuf::ItemVar(32)::BuffAddr = LOC(v_RMI$_PREADS) ! address of our storage location
!
RmiBuf::ItemVar(33)::ItemCode = RMI$_PWRITES !
RmiBuf::ItemVar(33)::BuffAddr = LOC(v_RMI$_PWRITES) ! address of our storage location
!
RmiBuf::ItemVar(34)::ItemCode = RMI$_PWRITIO !
RmiBuf::ItemVar(34)::BuffAddr = LOC(v_RMI$_PWRITIO) ! address of our storage location
!
RmiBuf::ItemVar(35)::ItemCode = RMI$_SYSFAULTS !
RmiBuf::ItemVar(35)::BuffAddr = LOC(v_RMI$_SYSFAULTS) ! address of our storage location
!
RmiBuf::ItemVar(36)::ItemCode = RMI$_WRTINPROG !
RmiBuf::ItemVar(36)::BuffAddr = LOC(v_RMI$_WRTINPROG) ! address of our storage location
!
! although these item codes can be found in STARLET,
! they appear to be no longer supported (at least not on OpenVMS-8.4)
!
RmiBuf::ItemVar(37)::BuffLen = 4 ! byte-size of our data buffer
RmiBuf::ItemVar(37)::ItemCode = RMI$_DISKS ! requested data or operation
RmiBuf::ItemVar(37)::BuffAddr = LOC( v_RMI$_DISKS) ! address of our storage location
RmiBuf::ItemVar(37)::RtnLenAdr = loc( L_RMI$_DISKS) ! address of actual returned data
!
RmiBuf::ItemVar(38)::BuffLen = 4 ! byte-size of our data buffer
RmiBuf::ItemVar(38)::ItemCode = RMI$_SCS ! requested data or operation
RmiBuf::ItemVar(38)::BuffAddr = LOC( v_RMI$_SCS) ! address of our storage location
RmiBuf::ItemVar(38)::RtnLenAdr = loc( L_RMI$_SCS) ! address of actual returned data
!
RmiBuf::ItemVar(39)::BuffLen = 4 ! byte-size of our data buffer
RmiBuf::ItemVar(39)::ItemCode = RMI$_PROCS ! requested data or operation
RmiBuf::ItemVar(39)::BuffAddr = LOC( v_RMI$_PROCS) ! address of our storage location
RmiBuf::ItemVar(39)::RtnLenAdr = loc( L_RMI$_PROCS) ! address of actual returned data
!
RmiBuf::LIST_TERM = Rmi$C_ListEnd ! end of list
!
! Okay, now make the call
!
! SYS$GETRMI [efn] [,nullarg] [,nullarg] ,itmlst [,iosb] [,astadr] [,astprm]
!
rc% = sys$GetRmi(,,,RmiBuf,,,) !
!
! Okay, now display the results
!
print " getRmi-rc: "+ str$(rc%) !
print " RMI$_BLKAST "; v_RMI$_BLKAST
print " RMI$_BUFIO "; v_RMI$_BUFIO
print " RMI$_DEQ "; v_RMI$_DEQ
print " RMI$_DIRIO "; v_RMI$_DIRIO
print " RMI$_DLCKSRCH "; v_RMI$_DLCKSRCH
print " RMI$_DLCKFND "; v_RMI$_DLCKFND
print " RMI$_DZROFLTS "; v_RMI$_DZROFLTS
print " RMI$_ENQCVT "; v_RMI$_ENQCVT
print " RMI$_ENQNEW "; v_RMI$_ENQNEW
print " RMI$_ENQNOTQD "; v_RMI$_ENQNOTQD
print " RMI$_ENQWAIT "; v_RMI$_ENQWAIT
print " RMI$_FAULTS "; v_RMI$_FAULTS
print " RMI$_FCPCALLS "; v_RMI$_FCPCALLS
print " RMI$_FCPCACHE "; v_RMI$_FCPCACHE
print " RMI$_FCPCPU "; v_RMI$_FCPCPU
print " RMI$_FCPFAULT "; v_RMI$_FCPFAULT
print " RMI$_FCPHIT "; v_RMI$_FCPHIT
print " RMI$_FCPREAD "; v_RMI$_FCPREAD
print " RMI$_FCPSPLIT "; v_RMI$_FCPSPLIT
print " RMI$_FCPWRITE "; v_RMI$_FCPWRITE
print " RMI$_FREFLTS "; v_RMI$_FREFLTS
print " RMI$_FRLIST "; v_RMI$_FRLIST
print " RMI$_GVALFLTS "; v_RMI$_GVALFLTS
print " RMI$_ISWPCNT "; v_RMI$_ISWPCNT
print " RMI$_LOGNAM "; v_RMI$_LOGNAM
print " RMI$_MBREADS "; v_RMI$_MBREADS
print " RMI$_MBWRITES "; v_RMI$_MBWRITES
print " RMI$_MODLIST "; v_RMI$_MODLIST
print " RMI$_MFYFLTS "; v_RMI$_MFYFLTS
print " RMI$_NUMLOCKS "; v_RMI$_NUMLOCKS
print " RMI$_NUMRES "; v_RMI$_NUMRES
print " RMI$_PREADIO "; v_RMI$_PREADIO
print " RMI$_PREADS "; v_RMI$_PREADS
print " RMI$_PWRITES "; v_RMI$_PWRITES
print " RMI$_PWRITIO "; v_RMI$_PWRITIO
print " RMI$_SYSFAULTS "; v_RMI$_SYSFAULTS
print " RMI$_WRTINPROG "; v_RMI$_WRTINPROG
print " RMI$_DISKS "; v_RMI$_DISKS; " length: "; L_RMI$_DISKS
print " RMI$_SCS "; v_RMI$_SCS; " length: "; L_RMI$_SCS
print " RMI$_PROCS "; v_RMI$_PROCS; " length: "; L_RMI$_PROCS
!
end