XBSIC ;IHS/SET/GTH - LIST ID,SP,FD NODES ON SELECTED FILES ; [ 12/05/2002 4:28 PM ] ;;4.0;XB;;Jul 20, 2009;Build 2 ;IHS/SET/GTH XB*3*9 10/29/2002 New Routine. ; This routine lists the IDENTIFIERS, SPECIFIERS, and ; CONDITIONALS from selected files. ; ; Thanks to E. Don Enos for the original routine in Sep 1997. ; START ; D INIT Q:XBQFLG D DBQUE Q ; INIT ; INITIALIZATION D EN^XBVK("XB") S (XBBT)=$H,XBJOB=$J S XBQFLG=1 I '$G(DUZ(2)) W !!,"Your DUZ(2) is not set!",!! Q I '$G(^AUTTLOC(DUZ(2),0)) W !!,"The site specified in your DUZ(2) does not exist!",!! Q KILL ^XTMP("XBSIC",XBJOB) D ^XBKVAR D ^XBDSET ; get files to check I '$O(^UTILITY("XBDSET",XBJOB,0)) Q ; quit if no files selected S XBQFLG=0 Q ; DBQUE ; call to XBDBQUE W ! S DIR(0)="S^P:PRINT Output;B:BROWSE Output on Screen",DIR("A")="Do you wish to",DIR("B")="P" KILL DA D ^DIR KILL DIR Q:$D(DIRUT) I Y="B" D BROWSE Q S XBRP="LIST^XBSIC",XBRC="FILES^XBSIC",XBRX="EOJ^XBSIC",XBNS="XB" D ^XBDBQUE Q ; BROWSE ; S XBRP="VIEWR^XBLM(""LIST^XBSIC"")" S XBRC="FILES^XBSIC",XBRX="EOJ^XBSIC",XBIOP=0 D ^XBDBQUE Q ; FILES ; PROCESS ALL FILES S XBFILE=0 F S XBFILE=$O(^UTILITY("XBDSET",XBJOB,XBFILE)) Q:'XBFILE D FILE(XBFILE) Q:XBQFLG Q ; FILE(XBFILE) ; PROCESS ONE FILE (CALLED RECURSIVELY) NEW L,V,W,X,Y I '$D(ZTQUEUED),'$D(IO("S")),$E(IOST,1,2)="C-" W "." S ^XTMP("XBSIC",XBJOB,XBFILE,"!")="" ; file marker F X="FD","ID","SP" D . I '$D(^DD(XBFILE,0,X)) Q ; quit if no node . I X="ID",'$O(^DD(XBFILE,0,X,0)) Q ; quit if no real identifier . S Y=0 . F S Y=$O(^DD(XBFILE,0,X,Y)) Q:Y="" I Y D .. S V=$G(^DD(XBFILE,0,X,Y)) ; get value & set $ZR .. I X="SP" S W=$S(V'="":"="_V,1:"") D SET Q .. I X="ID" S W="" D SET Q .. S L="" .. F S L=$O(^DD(XBFILE,0,X,Y,L)) Q:L="" D ... S V=$G(^DD(XBFILE,0,X,Y,L)) ; get value & set $ZR ... S W="="_V D SET ... Q .. Q . Q ;I $P($G(^DD(XBFILE,.01,0)),U,2)["P" S X=^(0) D RECURSE ;ptr chain I $P($G(^DD(XBFILE,.01,0)),U,2)["P" S X=^(0) I '(XBFILE=+$P($P(X,U,2),"P",2)) D FILE(+$P($P(X,U,2),"P",2)) Q Q:$G(RECURSE) ; quit if recursing S XBFLD=.01 F S XBFLD=$O(^DD(XBFILE,XBFLD)) Q:'XBFLD I $D(^(XBFLD,0)) S X=^(0) D . Q:$P(X,U,2)'["P" ; quit if not pointer . D RECURSE . Q Q ; SET ; SET ONE LINE S ^XTMP("XBSIC",XBJOB,XBFILE,$$LGR^%ZOSV_W)="" Q ; RECURSE ; RECURSE FOR FILES BEING POINTED TO Q:XBFILE=+$P($P(X,U,2),"P",2) ; quit if self reference NEW XBFILE,RECURSE S RECURSE=1 S XBFILE=+$P($P(X,U,2),"P",2) D FILE Q ; LIST ; LIST OUTPUT U IO D HEAD S XBFILE=0 F S XBFILE=$O(^XTMP("XBSIC",XBJOB,XBFILE)) Q:'XBFILE D Q:XBQFLG . D F Q:XBQFLG . W !,?4,XBFILE_" ("_$P($G(^DIC(XBFILE,0)),U)_")",! . S XBDEV="" . F S XBDEV=$O(^XTMP("XBSIC",XBJOB,XBFILE,XBDEV)) Q:XBDEV="" D WRITE Q:XBQFLG . Q Q ; WRITE ; WRITE ONE LINE Q:XBDEV="!" ; quit if file marker D F Q:XBQFLG W XBDEV,! Q ; F ;Form feed I ($Y+4)>IOSL D . I '$D(ZTQUEUED),'$D(IO("S")),$E(IOST,1,2)'="P-" D PAUSE S:$D(DIRUT) XBQFLG=1 . Q:XBQFLG . W @IOF . D HEAD . Q Q ; PAUSE ; PAUSE FOR USER Q:$E(IOST)'="C" Q:$D(ZTQUEUED)!'(IOT="TRM")!$D(IO("S")) S DIR(0)="E",DIR("A")="Press any key to continue" KILL DIRUT D ^DIR KILL DIR Q ; HEAD ; WRITE HEADER I '$D(ZTQUEUED),'$D(IO("S")),$E(IOST,1,2)="C-" W @IOF S XBPG=$G(XBPG)+1 W " ID/SP/FD REPORT run at ",$P(^AUTTLOC(DUZ(2),0),U,2)," on ",$$FMTE^XLFDT(DT),?75,$J(XBPG,5),! W $$REPEAT^XLFSTR("=",80),! Q ; Q Q ; EOJ ; S XBET=$H,XBTS=(86400*($P(XBET,",")-$P(XBBT,",")))+($P(XBET,",",2)-$P(XBBT,",",2)),XBH=+$P(XBTS/3600,"."),XBTS=XBTS-(XBH*3600),XBM=+$P(XBTS/60,"."),XBTS=XBTS-(XBM*60),XBS=XBTS W !!,"RUN TIME (H.M.S): "_XBH_"."_XBM_"."_XBS,! KILL ^XTMP("XBSIC",XBJOB) KILL ^UTILITY("XBDSET",XBJOB) D EN^XBVK("XB") Q ;