______ Yes I rely on this undocumented "feature" of LISTF
But, if it exists in another format, I'm happy. Also I can use MPEX's
%listf,access or my modified %listf,acc which gives percentage read and
ETA. (see below)
Neil Harvey
acc.listf.vesoft
VAR NUMOPENERS: SHORTINT;
VAR OPENERPINS: ARRAY [256] OF SHORTINT;
VAR OPENERFNUMS: ARRAY [256] OF SHORTINT;
VAR I: INTEGER;
VAR RFILEUSER: TFILEUSER;
VAR ROPENFILE: TOPENFILE;
VAR LOCKSTATE: INTEGER;
VAR F: STRING[8];
VAR JOBTYPE: STRING[1];
VAR JOBNUM: INTEGER;
VAR MAXOPENPIN: INTEGER;
SUBROUTINE CLEARF;
VAR FF: STRING[8];
BEGIN
FF:=F;
F:='';
SCOPY(FF)
END;
SUBROUTINE GETFMTACCESSMODE; RFILEUSER.FMTACCESSMODE;
SUBROUTINE GETCURRENTRECORD; RFILEUSER.CURRENTRECORD(RFILE);
SUBROUTINE GETFMTJOBNUM;
BEGIN
IF JOBNUM=0 THEN 7*' '
ELSE STRWRITE('#',JOBTYPE:1,JOBNUM:5:'LEFT')
END;
SUBROUTINE GETFMTLOGON;
BEGIN
TRY
STRWRITE(VEJOBINFO(JOBTYPE,JOBNUM).FMTLOGON:'DOWNSHIFT') +
(IF JOBTYPE='S' THEN ' (ldev '+VEJOBINFO(JOBTYPE,JOBNUM).LDEVIN+')'
ELSE '')
RECOVER
SEG (STRWRITE('(original opener inaccesssible)'))
END;
SUBROUTINE DOLOADED;
VAR WROTELOADED: BOOLEAN;
VAR LOADINFO: TLOADINFO;
BEGIN
IFVERSION5 THEN
IF LOADED THEN
SEG (BEGIN
WROTELOADED:=TRUE;
LOADINFO.TYPE:=255;
WHILE ISBOOLEAN (CALL LSTD'NEXT (@LOADINFO)) DO
IF (LOADINFO.UFID)[0]=(ISDOUBLEPTR(UFID))[0] THEN
IF LOADINFO.ISPROGRAM AND LOADINFO.PROGALLOCATED THEN
WRITELN (CLEARF:10,
IF LOADINFO.PROGAUTOALLOCATED THEN "AUTOALLOCATED"
ELSE "ALLOCATED")
ELSE IF LOADINFO.ISPROCESS THEN
BEGIN
JOBTYPE:=PINJOBTYPE(LOADINFO.PROCESSPIN);
JOBNUM:=PINJOBNUMBER(LOADINFO.PROCESSPIN);
WRITELN (CLEARF:10, "LOADED":10, GETFMTJOBNUM,
LOADINFO.PROCESSPIN:4:'LEFT',
IF JOBNUM=0 OR JOBTYPE='' THEN ''
ELSE GETFMTLOGON);
END
ELSE IF LOADINFO.ISSL THEN
WRITELN (CLEARF:10, "SL LOADED");
IF F<>'' THEN
WRITELN (CLEARF:10, "LOADED":10,"SYSTEM");
END);
END;
MPEXHEADER1:="Filename ---Type--- Jobnum Pin ---------Program----"+
"----- Where? Record Eof";
MPEXHEADER2:="";
MAXOPENPIN:=1024;
FOR RFILE IN MPEXFILESETTOTAL
SELECT SEG (OPENED OR STORED OR RESTORED OR LOADED OR READING)
DO
BEGIN
F:=FILE;
IFVERSION5 THEN
DOLOADED;
IF RESTORED THEN
WRITELN (CLEARF:10, "BEING RESTORED")
ELSE IF STORED THEN
WRITELN (CLEARF:10, "BEING STORED");
NUMOPENERS:=0;
IF OPENED THEN
BEGIN
ROPENFILEREAD (RFILE, UFID, ROPENFILE);
CALL FOPENERS (@RFILE, (@RFILEUSER.GUFDPTR-@RFILEUSER)/2,
CALLDPARM(0), CALLDPARM(0),
@NUMOPENERS, @OPENERPINS, @OPENERFNUMS);
IF NUMOPENERS=0 THEN
SEG (WRITELN (CLEARF:10, "OPENED":10,
"accessor information
unavailable)"));
FOR I IN RANGE(0,MIN(NUMOPENERS,MAXOPENPIN)-1,1) DO
BEGIN
RFILEUSERREAD (OPENERPINS[I], OPENERFNUMS[I], RFILEUSER);
IF OPENERPINS[I]=0 THEN
SEG (WRITELN (CLEARF:10,
"OPENED":10, "":7, "":4, "GLOBALLY":26,
GETFMTACCESSMODE:8,
GETCURRENTRECORD:6))
ELSE
BEGIN
IFVERSIONXL THEN
LOCKSTATE:=-1
ELSE
LOCKSTATE:=SIGNEXTEND (CALL RIN'PIN'STATUS (ROPENFILE.RIN,
OPENERPINS[I]));
JOBTYPE:=PINJOBTYPE(OPENERPINS[I]);
JOBNUM:=PINJOBNUMBER(OPENERPINS[I]);
IF EOF <> 0 AND GETCURRENTRECORD <> 0 THEN
WRITELN (CLEARF:10, "OPENED":10, GETFMTJOBNUM,
OPENERPINS[I]:4:"LEFT",
PINPROGNAME(OPENERPINS[I]):25,
GETCURRENTRECORD//EOF*100:6,
"%",
GETCURRENTRECORD:8,
EOF:8)
ELSE
WRITELN (CLEARF:10, "OPENED":10, GETFMTJOBNUM,
OPENERPINS[I]:4:"LEFT",
PINPROGNAME(OPENERPINS[I]):25,
" ",
GETCURRENTRECORD:8,
EOF:8);
IF JOBNUM<>0 AND JOBTYPE<>'' AND EOF <> 0 AND GETCURRENTRECORD <> 0
THEN
WRITELN ("":04, GETFMTLOGON, " ETA : ", CLOCK+
INTEGER(((CLOCK-(VEJOBINFO(JOBTYPE,JOBNUM).INTROTIME))//
(GETCURRENTRECORD//EOF)*(1-(GETCURRENTRECORD//EOF))/1)))
ELSE
WRITELN ("":04, GETFMTLOGON, " ETA : N/A");
END;
END;
END
ELSE IF READING AND VALIDCOLDLOADID THEN
WRITELN (CLEARF:10, "SYSTEM PROTECTED");
END;
|