Source of PD ANAL
%SYSTEM %STRING %FN %SPEC FAILURE MESSAGE(%INTEGER FAULT)
%EXTERNAL %ROUTINE %SPEC DEFINE(%STRING(255) NUMBER NAME)
%EXTERNAL %ROUTINE %SPEC CLEAR(%STRING(255) NUMBER)
%SYSTEM %INTEGER %FN %SPEC pdaddr(%STRING(255) pdfile)
%SYSTEM %ROUTINE %SPEC pd list(%INTEGER CONNECT ADDRESS, %C
TYPES FLAG)
(PD ANAL
PDANAL PDFILE, * / OUTPUT
PDFILE MAY BE TOP LEVEL FILE, OR A MEMBER OF ANOTHER PDFILE
TO ANY DEPTH.
OUTPUT MAY BE A FILE, OR ONE OF ".OUT" OR ".TT"
- ".OUT" MEANS THE CURRENTLY SELECTED OUTPUT STREAM,
- ".TT" MEANS THE INTERACTIVE TERMINAL.
* MEANS EXTRA DATA IS WANTED (FILE-TYPES OF MEMBERS)
%EXTERNAL %ROUTINE PD ANAL(%STRING(255) PARM)
)
%STRING(255) PD, OUT, TYPES, MESS
%INTEGER CAD, FAIL, LEN, SPFLAG, TFLAG
%CONST %STRING(1) SNL="
"
CAD = -202 %AND -> FAIL %IF PARM=""
OUT = "" %UNLESS PARM->PARM.("/").OUT
PD = PARM %AND TYPES = "" %UNLESS PARM->PD.(",").TYPES
OUT=".TT" %IF OUT=""
%IF TYPES="*" %THEN TFLAG = 1 %ELSE TFLAG = 0
CAD = pdaddr(PD)
FAIL:
%IF CAD=0 %THEN MESS="MEMBER ".PD." DOES NOT EXIST"
%IF CAD<0 %THEN MESS=FAILURE MESSAGE(-CAD)
%IF CAD<=0 %THEN PRINTSTRING("PD ANAL FAILS - ".MESS.SNL) %AND %RETURN
%IF INTEGER(CAD+12)#6 %THEN %START
PRINTSTRING("PD ANAL FAILS - FILE ". %C
PARM." IS NOT A PARTITIONED FILE".SNL)
%RETURN
%FINISH
%IF INTEGER(CAD+20)=0 %THEN PRINTSTRING("** EMPTY **".SNL) %AND %RETURN
SPFLAG = 0
%IF OUT#".OUT" %AND OUT#".TT" %START
DEFINE("80,".OUT)
SELECT OUTPUT(80)
pd list(CAD,TFLAG)
SELECT OUTPUT(0)
CLOSE STREAM(80)
CLEAR("80")
%FINISH %ELSE %START
%IF OUT=".TT" %THEN SELECT OUTPUT(0)
pd list(CAD,TFLAG)
%FINISH
%END
%END %OF %FILE