XBRSRCH4	; IHS/ADC/GTH - SEARCH XREFS FOR ROUTINES ; [ 02/07/97   3:02 PM ]
	;;4.0;XB;;Jul 20, 2009;Build 2
	;
	; Part of XBRSRCH
	;
START	;
	W !!,"This routine searches a file for XREFS that call routines.",!
	S U="^",DIC="^DIC(",DIC(0)="AEMQ"
	D ^DIC
	I Y<0 D EOJ Q
	S XBSXREF("FILE")=+Y
	KILL ^UTILITY("XBRSRCH",$J)
	S XBSXREF("MASTER")=""
EN	;EP - ENTRY POINT FOR CALLING ROUTINES
	S XBSXREF("LAST FILE")=""
	D SBTRACE
	D:$D(XBSXREF("MASTER")) LIST
	D EOJ
	Q
	;
SBTRACE	; CHECK ALL SUB-FILES
	KILL XBSXREFF
	S XBSXREF("CNT")=1,XBSXREFF(XBSXREF("CNT"))=XBSXREF("FILE")
	F XBSXREF("L")=0:0 S XBSXREF("LCTL")=$O(XBSXREFF("")) Q:XBSXREF("LCTL")=""  S XBSXREF("FILE")=XBSXREFF(XBSXREF("LCTL")) D SBTRACE2 S XBSXREF("LCTL")=$O(XBSXREFF("")) D FILE KILL XBSXREFF(XBSXREF("LCTL"))
	Q
	;
SBTRACE2	;
	S XBSXREF("LCTL")=0
	F XBSXREF("L")=0:0 S XBSXREF("LCTL")=$O(^DD(XBSXREF("FILE"),"SB",XBSXREF("LCTL"))) Q:XBSXREF("LCTL")=""  S XBSXREF("CNT")=XBSXREF("CNT")+1,XBSXREFF(XBSXREF("CNT"))=XBSXREF("LCTL")
	Q
	;
FILE	; CHECK ONE FILE OR SUB-FILE
	S XBSXREF("FIELD")=0
	F XBSXREF("L")=0:0 S XBSXREF("FIELD")=$O(^DD(XBSXREF("FILE"),XBSXREF("FIELD"))) Q:XBSXREF("FIELD")'=+XBSXREF("FIELD")  D FIELD
	Q
	;
FIELD	; CHECK FIELD'S XREFS
	Q:'$D(^DD(XBSXREF("FILE"),XBSXREF("FIELD"),1))
	S XBSXREF("XREF")=0
	F XBSXREF("L")=0:0 S XBSXREF("XREF")=$O(^DD(XBSXREF("FILE"),XBSXREF("FIELD"),1,XBSXREF("XREF"))) Q:XBSXREF("XREF")'=+XBSXREF("XREF")  D CHKXREF
	Q
	;
CHKXREF	; CHECK ONE XREF
	S X=^DD(XBSXREF("FILE"),XBSXREF("FIELD"),1,XBSXREF("XREF"),1)
	D CHKSK
	S X=^DD(XBSXREF("FILE"),XBSXREF("FIELD"),1,XBSXREF("XREF"),2)
	D CHKSK
	Q
	;
CHKSK	; CHECK XREF SET/KILL
	Q:X'[U
	S XBRSRCH("FOUND")=0,XBSXREF("COUNT")=$L(X,U)
	F XBSXREF("I")=XBSXREF("COUNT"):-1:2 S Y=$P(X,U,XBSXREF("I")) D ^XBRSRCH1
	D:XBRSRCH("FOUND") WRITE
	Q
	;
WRITE	;
	I $D(XBRSRCH("NO DETAIL")) W "." Q
	I XBSXREF("FILE")'=XBSXREF("LAST FILE") S XBSXREF("LAST FILE")=XBSXREF("FILE") W !
	W !,XBSXREF("FILE"),",",XBSXREF("FIELD"),?20,$E(X,1,59)
	F XBSXREF("L")=0:0 S X=$E(X,60,999) Q:X=""  W !?20,$E(X,1,59)
	Q
	;
LIST	; LIST ROUTINE NAMES
	Q:'$D(^UTILITY("XBRSRCH",$J))
	W !!,"Sorted list of routines found:",!
	S X=""
	F XBSXREF("L")=0:0 S X=$O(^UTILITY("XBRSRCH",$J,X)) Q:X=""  W !,"^",X
	KILL ^UTILITY("XBRSRCH",$J)
	W !
	Q
	;
EOJ	;
	KILL DIC,X,X0,X1,X2,Y,YY
	K:$D(XBSXREF("MASTER")) XBRSRCH
	KILL XBSXREF,XBSXREFF
	Q
	;
