ZIBCKPKG	; IHS/ADC/GTH - CHECK UCI FOR PACKAGE CONTENT ; [ 10/29/2002   7:42 AM ]
	;;4.0;XB;;Jul 20, 2009;Build 2
	;
	;XB*3*9 IHS/SET/GTH XB*3*9 10/29/2002 Change MSM systax to use $ROUTINE.
	D INIT
	S XBQUEST=1 D ASKIT G:XBQ=U EXIT S XBINPR=XBQ
	S XBQUEST=2 D ASKIT G:XBQ=U EXIT S XBLC=XBQ
	S XBQUEST=3 D ASKIT G:XBQ=U EXIT S XBLNPR=XBQ
	;
ZIS	; SELECT DEVICE
	KILL ZTSK,IOP,%ZIS
	S %ZIS="PQM"
	D ^%ZIS
	G:POP EXIT
	G:$D(IO("Q")) QUE
NOQUE	;
	U IO
	D EN
	D ^%ZISC
	G EXIT
	;
QUE	;
	KILL ZTSAVE
	F %="XBINPR","XBLNPR","XBLC" S ZTSAVE(%)=""
	S ZTRTN="EN^ZIBCKPKG",ZTDESC="SCAN UCI FOR PACKAGES",ZTIO=IO,ZTDTH=0
	D ^%ZTLOAD
	KILL ZTDESC,ZTDTH,ZTIO,ZTRTN,ZTSAVE,ZTSK
EXIT	;
	D KILLS
	Q
	;
EN1	; ENTRY FOR SILENT OPERATION
	D INIT
	S (XBINPR,XBLC)=1
	G EN
	;
INIT	; INITIALIZATION
	S U="^"
	S:'$D(DTIME) DTIME=300
	Q
	;
EN	; COMMON INTERNAL ENTRY
	S XBQUIT=0
	KILL ^UTILITY($J,"ZIBCKPKG")
	D SCAN
	Q:XBQUIT
	D:XBLNPR SHOWNPR
	D:XBLC SHOWLC
	I $D(IOST),$D(IOF),$E(IOST,1,2)="P-" W @IOF
	SET:$D(ZTQUEUED) ZTREQ="@"
KILLS	;
	KILL XBINPR,XBRNPR,XBLNPR,XBLC,XBQUIT,XBR,XBR2,XBPF,XBI,XBJ,XBP,XBQ,XBCNT,XBQUEST
	KILL ^UTILITY($J,"ZIBCKPKG"),ZTSK
	Q
	;
SCAN	;
	X ^%ZOSF("UCI")
	W "- - - PACKAGE SCAN OF UCI ",Y,$S($D(^DD("SITE")):" ON "_^("SITE"),1:"")," - - -",!!
	; S XBR=$O(^ ("%zzzzzzz")) ;IHS/SET/GTH XB*3*9 10/29/2002
	S XBR=$O(^$R("%zzzzzzz")) ;IHS/SET/GTH XB*3*9 10/29/2002
	F  Q:XBR=""  Q:XBR?1L.E  D CHKPKG Q:XBQUIT
	Q:XBQUIT
	F  Q:XBR=""  D GETNXT
	Q
	;
CHKPKG	; CHECK FOR PACKAGE
	S XBPF=$E(XBR,1,4)
	F XBI=$L(XBPF):-1:0 S XBPF=$E(XBPF,1,XBI) Q:XBPF=""  S XBP=$O(^DIC(9.4,"C",XBPF,0)) Q:XBP
	I XBPF=""  D NOTPKG Q
	W XBPF,?4," - ",$P(^DIC(9.4,XBP,0),U,1)
	S XBRNPR=0
	D SKIP
	W " (",XBCNT,")",!
	Q
	;
NOTPKG	;
	I XBINPR S ^UTILITY($J,"ZIBCKPKG",2,XBR)="" S XBPF="" D GETNXT Q
	F  W XBR R " -- Package prefix? ",XBPF:DTIME S:'$T XBPF=U Q:XBPF[U  D GETPKG Q:XBPF'="-"
	I XBPF[U S XBQUIT=1 Q
	W !
	I XBPF="" D GETNXT Q
	S XBI=$L(XBPF),XBRNPR=1
	D SKIP
	W " ",XBCNT," ROUTINES SKIPPED.",!
	Q
	;
GETPKG	;
	I XBPF?1."?" S XBQUEST=4 D DSPHLP W ! S XBPF="-" Q
	I XBPF?1."?"1.E D DSPLY S XBPF="-" Q
	Q:XBPF'?.E1CL.E&($L(XBPF)<5)
	W " -- Package id must be upper case, length 1-4",!
	S XBPF="-"
	Q
	;
SKIP	;
	F XBCNT=1:1 S:XBRNPR ^UTILITY($J,"ZIBCKPKG",2,XBR)="" D GETNXT Q:$E(XBR,1,XBI)'=XBPF
	Q
	;
GETNXT	;
	S:XBR?.E1L.E ^UTILITY($J,"ZIBCKPKG",1,XBR)=""
	; S XBR=$O(^ (XBR)) ;IHS/SET/GTH XB*3*9 10/29/2002
	S XBR=$O(^$R(XBR)) ;IHS/SET/GTH XB*3*9 10/29/2002
	Q
	;
DSPLY	;
	S (XBPF,XBR2)=$E(XBPF,2,$L(XBPF))
	W !
	S XBJ=0
	S X=XBR2
	X ^%ZOSF("TEST")
	I  S XBJ=1 W !,XBR2
	; F XBJ=XBJ:1 S XBR2=$O(^ (XBR2)) Q:$E(XBR2,1,$L(XBPF))'=XBPF  W:XBJ#8=0 ! W ?XBJ#8*10,XBR2 ;IHS/SET/GTH XB*3*9 10/29/2002
	F XBJ=XBJ:1 S XBR2=$O(^$R(XBR2)) Q:$E(XBR2,1,$L(XBPF))'=XBPF  W:XBJ#8=0 ! W ?XBJ#8*10,XBR2 ;IHS/SET/GTH XB*3*9 10/29/2002
	W:$X !
	W !
	Q
	;
SHOWNPR	;
	Q:'$D(^UTILITY($J,"ZIBCKPKG",2))
	W !!,"Non-package routines:",!
	S XBR2=""
	F XBJ=0:1 S XBR2=$O(^UTILITY($J,"ZIBCKPKG",2,XBR2)) Q:XBR2=""  W:XBJ#8=0 ! W ?XBJ#8*10,XBR2
	W !
	Q
	;
SHOWLC	;
	Q:'$D(^UTILITY($J,"ZIBCKPKG",1))
	W !!,"Routine names containing lower case letters:",!
	S XBR2=""
	F XBJ=0:1 S XBR2=$O(^UTILITY($J,"ZIBCKPKG",1,XBR2)) Q:XBR2=""  W:XBJ#8=0 ! W ?XBJ#8*10,XBR2
	W !
	Q
	;
ASKIT	; ASK A YES/NO QUESTION
	KILL XBQ
	S %=$T(@XBQUEST),XBQ("Q")=$P(%,";;",2),XBQ("D")=$P(%,";;",3)
ASKIT2	;
	W !,XBQ("Q")," ",XBQ("D"),"// "
	R XBQ:DTIME
	S:'$T XBQ=U
	I XBQ="" S XBQ=XBQ("D") W XBQ
	S XBQ("R")=XBQ,XBQ=""
	I XBQ("R")[U S XBQ=U
	I $P("YES",XBQ("R"))="" S XBQ=1
	I $P("yes",XBQ("R"))="" S XBQ=1
	I $P("NO",XBQ("R"))="" S XBQ=0
	I $P("no",XBQ("R"))="" S XBQ=0
	I XBQ]"" W ! Q
	W !,"-- Please answer YES or NO"
	D DSPHLP
	G ASKIT
	;
DSPHLP	;
	F XBI=1:1 S %=$T(@XBQUEST+XBI) Q:%=""  Q:$P(%," ")]""  W !,"-- ",$P(%,";;",2)
	W !
	KILL %
	Q
	;
QUEST	;
	;
1	;;Ignore non-package routines?;;YES
	;;Responding NO will cause you to be asked if a routine for which
	;;a namespace cannot be identified in the package file can be
	;;considered part of a "psuedo-package" with which a namespace can
	;;be associated.
2	;;Display routine names containing lower case letters?;;YES
	;;Responding YES will cause a tabular listing to be produced
	;;displaying all routine names which contain a lower case letter.
3	;;Display names of non-package routines?;;YES
	;;Responding YES will cause a tabular listing to be produced
	;;displaying the names of all routines which were not found
	;;to be part of a package.
4	;;
	;;If you enter a namespace, routines will be processed as though a
	;;formal package association was made.
