It's been a number of years since doing this but back in my days at Lund we
attempted to implement HPVOLINFO and found the overhead to be significantly
higher than just parsing the DISCFREE output. I elected to go with DISCFREE.
Bill
At 04:04 PM 12/16/98 -0800, Stan Sieler wrote:
>Mark writes:
>
>> I must be missing something obvious here. I'm trying to call HPVOLINFO
from
>> gcc. It's always returning status=(-151,163) which means unpaired
itemnum or
>> itemptr.
>
>You're missing two things, neither are obvious!
>
>> HPVOLINFO doesn't appear to be an OPTION EXTENSIBLE function, so there
shouldn't
> ^^^^^^
>
><plug> with CSEQ, there's no doubt ...see sample output at end </plug>
>
>>
HPVOLINFO(&status,2,&volspecifier,14,&lcapacity,40,&lfreespace,0,NULL,0,NULL,0
>> ,NULL,0,NULL);
>
>
>Just a guess...what if HPVOLINFO is different (@#!@$$) from all the rest of
>the "extendable" intrinsics in yet another way? (It already doesn't have
>an "extensible" count :(
>
>For most intrinsics like this, you use 0 to specify "omitted item number".
>
>But...wait...what's that CSEQ is telling us? (You *do have* CSEQ don't you?)
>
>Did I mention that I'd never try to call an intrinsic from gcc without
>using CSEQ first? :)
>
>CSEQ tells us the "proper" default values for omitted item numbers is
>$b70f (0xb70f) ... *NOT* 0.
>
>Sheesh. Chalk another annoying needless quirk for HPVOLINFO.
>
>So...I changed your program to use 0xb70f. Close, but no cigar (the
>error changed from -151 to -157 (?), which was "no such volume set").
>
>Hmmm...ok, let's use a non-blank, as shown in the CSEQ comments....
>I changed your sprintf to use "-" instead of " " to surround the
>volume set name. (I'd have used "%", but that's a pain in C)
>
>...and...it worked.
>
>SS
>
>
>:cseq hpvolinfo
>
>CSEQ [2.4] - LPS Toolbox [A.03c] (c) 1995 Lund Performance
Solutions
>
>
>Procedure HPVOLINFO (
> status : anyvar int32 ; {R26} := nil
> volspecifiernum: int16 ; {R25} := 0
> volspecifier : anyvar record ; {R24} := nil
> itemnum_1 : int16 ; {R23} := $b70f
> item_1 : anyvar record ; {SP-$0034} := nil
> itemnum_2 : int16 ; {SP-$0036} := $b70f
> item_2 : anyvar record ; {SP-$003c} := nil
> itemnum_3 : int16 ; {SP-$003e} := $b70f
> item_3 : anyvar record ; {SP-$0044} := nil
> itemnum_4 : int16 ; {SP-$0046} := $b70f
> item_4 : anyvar record ; {SP-$004c} := nil
> itemnum_5 : int16 ; {SP-$004e} := $b70f
> item_5 : anyvar record ; {SP-$0054} := nil
> itemnum_6 : int16 ; {SP-$0056} := $b70f
> item_6 : anyvar record ) {SP-$005c} := nil
> {volspecifiernum defines format of volspecifier: }
> { 0 = volspecifier is ignored (i.e: }
> { use all volumes on system) }
> { 1 = ldev of volume (in 16 bit integer!) }
> { 2 = %volume_set_name% }
> { 3 = %volume_set_name:volume_class_name% }
> { 4 = %volume_set_name:volume_name% }
> { 5 = %device_class_name% }
> {volspecifier }
> { either a 16-bit integer (#1 above), or }
> { a character array delimited by "%" characters. }
> {Item#s (and returned data type) }
> { 2 i32 # volume sets configured (specifiernum=0!) }
> { 3 ca list of volume set names }
> { (first 32-bits of itemval MUST be the }
> { max # of 32-byte names that can fit.) }
> { On output, first 32-bits reports # names. }
> { Rest of output is array of 32-char names. }
> { 4 i32 # volume classes for specifier. }
> { 5 ca list of volume classes }
> { (first 32-bits of itemval MUST be the }
> { max # of 32-byte names that can fit.) }
> { On output, first 32-bits reports # names. }
> { Rest of output is array of 32-char names. }
> { 6 i32 # volumes MOUNTED }
> { 7 ca list of volumes }
> { (first 32-bits of itemval MUST be the }
> { max # of 32-byte names that can fit.) }
> { On output, first 32-bits reports # names. }
> { Rest of output is array of 32-char names. }
> { 8 ca13 Drive type (for specifier) (e.g., "HP7935") }
> { 9 i32 Sector size, in bytes (usually 256) }
> { 10 i32 Volume type (1=system, 2=nonsystem) }
> { 11 ca32 Volume name }
> { 12 ca32 Volume set name }
> { 13 i16 Ldev (note: 16-bit result) }
> { }
> { NOTE: items 14..43 are in pairs: }
> { *** values are for specified volume (if }
> { specifiernum = 1 or 4) or for all volumes }
> { in set or class (for specifiernum = 2 or 3) }
> { *** The even numbers return values in }
> { 64-bit integers, the odd numbers }
> { return values as 64-bit reals. }
> { *** Most values are in units of sectors. }
> { }
> { 14 i64 Volume Capacity }
> { 15 f64 Volume Capacity }
> { 16 i64 Total MPE overhead (items 18..28) }
> { 17 f64 Total MPE overhead (items 18..28) }
> { 18 i64 Transient Space overhead }
> { 19 f64 Transient Space overhead }
> { 20 i64 Transient Space max configured }
> { 21 f64 Transient Space max configured }
> { 22 i64 MPE V Virtual Memory overhead }
> { 23 f64 MPE V Virtual Memory overhead }
> { 24 i64 Directory Space overhead }
> { 25 f64 Directory Space overhead }
> { 26 i64 MPE/iX File label overhead }
> { 27 f64 MPE/iX File label overhead }
> { 28 i64 MPE/iX Transaction Mgmt overhead }
> { 29 f64 MPE/iX Transaction Mgmt overhead }
> { 30 i64 Spoolfile disk space usage }
> { 31 f64 Spoolfile disk space usage }
> { 32 i64 Perm File disk space usage }
> { 33 f64 Perm File disk space usage }
> { 34 i64 Temp File disk space usage (future?) }
> { 35 f64 Temp File disk space usage (future?) }
> { 36 i64 Free Space distribution *array* }
> { 37 f64 Free Space distribution *array* }
> { (see manual for items 36, 37) }
> { 38 i64 Free Space distribution sectors/range }
> { 39 f64 Free Space distribution sectors/range }
> { (see manual for items 38, 39) }
> { 40 i64 Total Free space }
> { 41 f64 Total Free space }
> { 42 i64 Largest Contiguous free space }
> { 43 f64 Largest Contiguous free space }
> uncheckable_anyvar
>--
>Stan Sieler [log in to unmask]
> http://www.allegro.com/sieler.html
>
>
|