I have had this same need myself. So I wrote the following command files to do this using DISCFREE. To do the large number computation it requires MPEX, which has that capability. The main command file is DISCMB which in turn calls DISCVARS for the MPEX computations. It converts sectors into MB. It also uses a general purpose command file which I find quite useful called READFILE. READFILE will turn the contents of a (limited size) flatfile into an "array" of variables for further processing using MPE functions, etc.. (Some lines in the listing below are wrapped. I have tried to indicate this by placing the characters "/\", which must be removed, after each wrap that I noticed.) I hope you find this useful. John Wolff USER DEFINED COMMAND FILE: DISCMB.COMMANDS.SYS OPTION NOLIST,BREAK,HELP ERASE DISCUSEC.MANAGER.SYS ECHO COMMENT: Collect the Report Data into a File: DISCUSEC FILE DISCUSEC=DISCUSEC.MANAGER.SYS,OLD;SHR;ACC=INOUT XEQ DISCFREE.PUB.SYS "C" > *DISCUSEC RESET DISCUSEC COMMENT: Extract the 4th Record From the End of the File FILE DISCUSED=DISCUSED.MANAGER.SYS,OLD;EXC;ACC=OUT PRINT FILE=DISCUSEC.MANAGER.SYS;OUT=*DISCUSED;START=-4;END=-4;UNN;NONUM RESET DISCUSED COMMENT: Read the Record into a Variable: RECORD1 XEQ READFILE.COMMANDS.SYS 80,1,1,0 < DISCUSED.MANAGER.SYS SETVAR MBTOTAL;WORD(RECORD1,' ',3,,1) SETVAR MBUSED;WORD(RECORD1,' ',5,,1) SETVAR MBAVAIL;WORD(RECORD1,' ',9,,1) COMMENT: Compute Totals with Real Arithmetic MPEX "XEQ DISCVARS.MANAGER.SYS",1 > $NULL SETVAR MBTOTAL;LTRIM(MBTOTAL) SETVAR MBUSED;LTRIM(MBUSED) SETVAR MBAVAIL;LTRIM(MBAVAIL) SETVAR PCTUSED;LTRIM(PCTUSED) ECHO Percent of Total Disc Space Used: !PCTUSED% ECHO Total MegaBytes of Disc Space: !MBTOTAL Mb ECHO Total MegaBytes of Disc Space Used: !MBUSED Mb ECHO Total MegaBytes of Disc Space Available: !MBAVAIL Mb!BELL DELETEVAR RECORD@,MBTOTAL,MBUSED,MBAVAIL,PCTUSED ECHO RETURN USER DEFINED COMMAND FILE: DISCVARS.MANAGER.SYS OPTION NOLIST,BREAK,HELP COMMENT: This Command File is Intended to be Called from DISCMB.COMMANDS COMMENT: But, If it is XEQuted Directly, Then it will XEQ DISCMB First. IF BOUND(MBTOTAL)=TRUE AND BOUND(MBUSED)=TRUE AND BOUND(MBAVAIL)=TRUE THEN SETVAR MBTOTAL;REALPARSE(LTRIM(RTRIM(MBTOTAL)))*256//1048576 SETVAR MBUSED;REALPARSE(LTRIM(RTRIM(MBUSED)))*256//1048576 SETVAR MBAVAIL;REALPARSE(LTRIM(RTRIM(MBAVAIL)))*256//1048576 SETVAR PCTUSED;REALPARSE(LTRIM(MBUSED))//REALPARSE(LTRIM(MBTOTAL))*100 ELSE XEQ DISCMB.COMMANDS.SYS ENDIF RETURN USER DEFINED COMMAND FILE: READFILE.COMMANDS.SYS PARM COUNT=1024,LIMIT=9999,TRUNCATE=0,SKIP=0 OPTION NOLIST,BREAK,HELP # {XEQ READFILE.COMMANDS.SYS | READFILE} [count][,limit[,{0|1}[,{0|1}]]] < filename /\ COMMENT: where, COUNT is the Number of Characters to be Read/Record COMMENT: LIMIT is the Number of Records to Read from the File COMMENT: TRUNCATE = 1 to Truncate Trailing Blanks from Each Record COMMENT: SKIP = 1 to Skip 0 Length Records at the Beginning of the File /\ COMMENT: NOTE: "filename" Must Be An MPE File Name; Not POSIX "filename" /\ COMMENT: Back-Reference a File Equate for MSG Files as: /\ COMMENT: FILE filename=file.group.account,OLD;EXC;ACC=IN;COPY /\ COMMENT: The Record Count Read Will Be in the Integer Variable: RECORDS COMMENT: The File Contents Will Be in String Variables: RECORD1 ... RECORD### /\ IF BOUND(RECORDS)=TRUE OR BOUND(RECORD1)=TRUE THEN DELETEVAR RECORD@ ENDIF SETVAR RECORDS;0 IF NUMERIC('!COUNT')=FALSE OR !COUNT<0 OR NUMERIC('!LIMIT')=FALSE OR ! LIMIT<0 OR NUMERIC('!TRUNCATE')=FALSE OR NUMERIC('!SKIP')=FALSE THEN /\ ECHO ECHO [READFILE] ERROR: Parameter(s) Not Numeric or Out of Range: !BELL ECHO COUNT: !COUNT; LIMIT: !LIMIT; TRUNCATE: !TRUNCATE; SKIP: ! SKIP /\ ECHO RETURN ENDIF IF !COUNT=0 OR !COUNT>1024 THEN SETVAR READCNT;1024 ELSE SETVAR READCNT;!COUNT ENDIF IF "LFT(HPSTDIN,1)"="$" AND "!HPSTDIN"<>"$OLDPASS" THEN RETURN ELSEIF "LFT(HPSTDIN,1)"<>"$" AND (FINFO(HPSTDIN,"EXISTS")=FALSE OR WORD (FINFO(HPSTDIN,"FMTFOPT")," ,",1,,1)<>"ASCII" OR FINFO(HPSTDIN,"EOF")=0) THEN /\ RETURN ENDIF SETVAR EOF;MIN(FINFO(HPSTDIN,"EOF"),!LIMIT)+1 WHILE SETVAR(EOF,EOF-1)>0 DO SETVAR RECORDS;RECORDS+1 IF !TRUNCATE=0 THEN SETVAR RECORD!RECORDS;INPUT(,,!READCNT) ELSE SETVAR RECORD!RECORDS;RTRIM(INPUT(,,!READCNT),' ') ENDIF IF !RECORDS=1 AND !SKIP=1 AND TYPEOF(RECORD1)=2 AND LEN(RECORD1)=0 THEN DELETEVAR RECORD1 SETVAR RECORDS;0 ENDIF ENDWHILE DELETEVAR EOF,READCNT RETURN * To join/leave the list, search archives, change list settings, * * etc., please visit http://raven.utc.edu/archives/hp3000-l.html *