This reminds me that I had modified MPEX's LISTF,ACCESS so that it displays
on one line due to the high availability of 132 column screens. (It easier
to use the FILTER command that way, no more CONTEXT parameters.)
I called it ACCESSL (L for LONG) code below:
VAR NUMOPENERS: SHORTINT;
VAR OPENERPINS: ARRAY [1024] OF SHORTINT;
VAR OPENERFNUMS: ARRAY [1024] 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----"+
"----- ACCESS RECORD -LOCK-"+
"----- SESSION NAME -----";
MPEXHEADER2:="";
MPEXHEADER3:="";
MAXOPENPIN:=1024;
FOR RFILE IN MPEXFILESETGENERAL (1, TRUE)
SELECT SEG (OPENED OR STORED OR RESTORED OR LOADED OR READING
OR STORESTAT<>0)
DO
BEGIN
F:=SCOPYFILE;
IFVERSION5 THEN
DOLOADED;
IF RESTORED OR RESTORING THEN
WRITELN (CLEARF:10, "BEING RESTORED")
ELSE IF STORED OR STORING THEN
WRITELN (CLEARF:10, "BEING STORED")
ELSE IF CBU THEN
WRITELN (CLEARF:10, "OPEN BY CONCURRENT-BACKUP");
NUMOPENERS:=0;
IF OPENED THEN
BEGIN
IFVERSION5 THEN
ROPENFILEREAD (RFILE, UFID, ROPENFILE);
TRY
CALL FOPENERS (@RFILE, (@RFILEUSER.GUFDPTR-@RFILEUSER)/2,
CALLDPARM(0), CALLDPARM(0),
@NUMOPENERS, @OPENERPINS, @OPENERFNUMS);
RECOVER;
IF NUMOPENERS=0 THEN
SEG (WRITELN (CLEARF:10, "OPENED":10,
"(accessor information unavailable)"));
(* Kludge: Would be better as a FOR loop, but then WRITELNs
within it wouldn't do the outer FOR loop's PAGEHEADs.
Too bad. EV 92/12/26. *)
I:=0;
WHILE I<MIN(NUMOPENERS,MAXOPENPIN) 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]);
WRITELN (CLEARF:10, "OPENED":10, GETFMTJOBNUM,
OPENERPINS[I]:4:"LEFT",
" ",
PINPROGNAME(OPENERPINS[I]):26,
GETFMTACCESSMODE:8,
GETCURRENTRECORD:6, " ",
IF LOCKSTATE=-1 THEN " "
ELSE IF LOCKSTATE=0 THEN "LOCKER "
ELSE STRWRITE ("WAIT:", LOCKSTATE),
GETFMTLOGON);
END;
I:=I+1;
END;
END
ELSE IF READING AND VALIDCOLDLOADID THEN
WRITELN (CLEARF:10, "SYSTEM PROTECTED");
IF NUMOPENERS > MAXOPENPIN THEN
SEG( WRITELN ( CLEARF:10,
"(Output truncated: Can't recover more than ",
MAXOPENPIN," accessors)"));
END;
Tracy M. Johnson
TRW Automotive Electronics
Sensors & Components
|