LEXXFI3 ;ISL/KER - File Info - Record Count ;04/21/2014
 ;;2.0;LEXICON UTILITY;**32,80**;Sep 23, 1996;Build 1
 ;               
 ; Global Variables
 ;    ^TMP("LEXCNT")      SACC 2.3.2.5.1
 ;               
 ; External References
 ;    None
 ;               
 Q
ONE(X) ; Record Count for a File
 N LEXFI K ^TMP("LEXCNT",$J) S LEXFI=+($G(X)) Q:+X'>0  K LEXMD D CNT(LEXFI),DSP^LEXXFI4
 Q
ALL ; Record Count for a File(s)
 N LEXCTR,LEXEX,LEXFI,LEXLINE,LEXRTN,LEXTAG K ^TMP("LEXCNT",$J)
 S LEXFI="",LEXTAG="FILES",LEXRTN="LEXXFI",LEXCTR=0
 F  D  Q:LEXFI=""
 . S LEXCTR=LEXCTR+1,LEXEX="S LEXLINE=$T("_LEXTAG_"+"_LEXCTR_"^"_LEXRTN_")" X LEXEX
 . S LEXFI=$P(LEXLINE,";;",3) I '$L(LEXFI) K LEXMD D DSP^LEXXFI4 Q
 . Q:'$L(LEXFI)  D CNT(LEXFI)
 Q
CNT(X) ; Count Entries for file X
 N DIC,LEX,LEXCFI,LEXCNT,LEXCRT,LEXEXIT,LEXFF,LEXFI,LEXI,LEXIEN
 N LEXIENS,LEXIND,LEXLS,LEXNCT,LEXOF,LEXOND,LEXPCD,LEXPCE,LEXPCI
 N LEXPCO,LEXPCT,LEXREC,LEXSL
 S LEXFF=$G(X) Q:'$L(LEXFF)  Q:+LEXFF'>0
 D DDI^LEXXFI6(LEXFF,.LEX) Q:'$D(LEX("DD",+LEXFF))
 S LEXFI=$$PAR(+LEXFF) Q:+LEXFI'>0  K LEX
 I '$D(LEX("DD",LEXFI)) D DDI^LEXXFI6(LEXFI,.LEX)
 Q:'$D(LEX("DD",+LEXFI))  Q:'$D(LEX("DIC",+LEXFI,0,"GL"))
 Q:$D(^TMP("LEXCNT",$J,"B",+LEXFI))  S ^TMP("LEXCNT",$J,"B",+LEXFI)=""
 S ^TMP("LEXCNT",$J,"CNT")=+($G(^TMP("LEXCNT",$J,"CNT")))+1
 S (LEXEXIT,LEXNCT,LEXIENS,LEXREC,LEXPCO)=0,DIC=$G(LEX("DIC",+LEXFI,0,"GL"))
 Q:'$L(DIC)  S LEXOND=DIC_"0)",LEXCRT=DIC,LEXOF=$P(@LEXOND,"^",4)
 S:$E(DIC,$L(DIC))="(" LEXCRT=$E(DIC,1,($L(DIC)-1))
 S:$E(DIC,$L(DIC))="," LEXCRT=$E(DIC,1,($L(DIC)-1))_")"
 F  S LEXOND=$Q(@LEXOND) Q:LEXOND=""!(LEXOND'[DIC)  D NODE Q:LEXEXIT
 D:+($O(LEXCNT(0)))>0 SAV
 S:+LEXIENS>0 ^TMP("LEXCNT",$J,"IENS",+LEXFI)=(LEXIENS+1)
 I $D(^TMP("LEXCNT","EXIT")) S LEXEXIT=1 K ^TMP("LEXCNT","EXIT")
 Q
NODE ; Count a Node as a Record?
 ;   Do not Count Non-Zero Nodes
 Q:$E(LEXOND,($L(LEXOND)-2),$L(LEXOND))'[",0)"
 ;   Do not Count Header Nodes
 I DIC'[",",LEXOND[",0)",$L(LEXOND,",")#2>0 Q
 I DIC[",",LEXOND[",0)",$L(LEXOND,",")#2'>0 Q
 S LEXIND=$P(LEXOND,DIC,2),LEXIEN=$P(LEXIND,",0)",1) S:+LEXIEN=LEXIEN LEXIENS=LEXIENS+1
 ;   Do not Count Cross-References (Exit Loop)
 I +($P(LEXIND,",",1))'=$P(LEXIND,",",1) S LEXEXIT=1 Q
 ;   Quit if no Sub-Script List
 S LEXSL=$P(LEXIND,")",1) I '$L(LEXSL) S LEXEXIT=1 Q
 ; Percent Complete
 S (LEXPCT,LEXPCE)="",LEXPCI=LEXPCO I LEXIENS>0,LEXOF>0 D
 . S LEXPCT=(LEXIENS/LEXOF)*100,LEXPCI=+($P(LEXPCT,".",1)),LEXPCD=+($E($P(LEXPCT,".",2),1,2))
 . S:$L(LEXPCD)=1 LEXPCD=LEXPCD_"0" S:$L(LEXPCD)=1 LEXPCD=LEXPCD_"0" S LEXPCE=LEXPCI_"%"
 S LEXPCO=LEXPCI
 ;   List Subscripts
 S LEXNCT=LEXNCT+1 K LEXLS D LS(LEXSL,LEXFI) Q:'$D(LEXLS)
 S LEXCFI=$G(LEXLS("FIL")) Q:+LEXCFI'>0  Q:'$D(LEX("DD",+LEXCFI,0))
 S LEXCNT(+LEXCFI)=+($G(LEXCNT(+LEXCFI)))+1,LEXREC=LEXREC+1
 I LEXREC#10000'>0 S:$D(^TMP("LEXCNT","EXIT")) LEXEXIT=1
 Q
LS(X,Y) ; List Subscripts    X = Subscripts Y = File
 N LEXFI,LEXFLD,LEXI,LEXND,LEXNDI,LEXSB,LEXSF,LEXSFI,LEXSFN,LEXSL
 S LEXSL=X Q:'$L(LEXSL)  S LEXFI=+($G(Y)) Q:+LEXFI'>0  Q:'$D(LEX("DIC",+LEXFI,0,"GL"))
 K LEXLS S LEXLS("CNT")=1 F LEXI=1:1 Q:'$L($P(LEXSL,",",LEXI))  D
 . S LEXSB=$P(LEXSL,",",LEXI) I LEXI#2 D
 . . S LEXLS("DA",0)=+($G(LEXLS("DA",0)))+1,LEXLS("DA",+($G(LEXLS("DA",0))))=LEXSB
 . . S:+LEXSB'=LEXSB LEXLS("CNT")=0 S:LEXSB="0" LEXLS("CNT")=0
 . I '(LEXI#2) D
 . . S LEXLS("ND",0)=+($G(LEXLS("ND",0)))+1,LEXLS("ND",+($G(LEXLS("ND",0))))=LEXSB
 S LEXSF=LEXFI,LEXSFN=0,LEXNDI=0 F  S LEXNDI=$O(LEXLS("ND",LEXNDI)) Q:+LEXNDI=0  D
 . S LEXND=$G(LEXLS("ND",LEXNDI)) Q:'$L(LEXND)
 . S LEXND=$TR(LEXND,"""","") I '$L(LEXND) S LEXSF="ERR" Q
 . I '$O(LEX("DD",+LEXSF,"GL",LEXND,0))>0 S LEXSFN=LEXND
 . Q:'$D(LEX("DD",+LEXSF,"GL",LEXND,0))
 . S LEXFLD=$O(LEX("DD",+LEXSF,"GL",LEXND,0,0)) I +LEXFLD'>0 S LEXSF="ERR" Q
 . S LEXSFI=$G(LEX("DD",+LEXSF,+LEXFLD,0))
 . S LEXSFI=+($P(LEXSFI,"^",2)) I +LEXSFI'>0 S LEXSF="ERR" Q
 . S:$D(LEX("DD",+LEXSFI,0)) LEXSF=+LEXSFI
 S LEXLS("FIL")=LEXSF
 S LEXLS("ND")=LEXSFN
 K:LEXSF="ERR" LEXLS("FIL")
 K:+($G(LEXLS("CNT")))'>0 LEXLS
 I $O(LEXLS("ND"," "),-1)>0,$G(LEXLS("ND",$O(LEXLS("ND"," "),-1)))'="0" K LEXLS
 Q
SAV ; Save Counts in ^TMP("LEXCNT",$J)
 N LEXGRND,LEXID,LEXFI,LEXLVL,LEXNAM,LEXPAR,LECTITL,LEXTOT,LEXTYP
 S LEXFI=0 F  S LEXFI=$O(LEXCNT(LEXFI)) Q:+LEXFI=0  D
 . N LEXNAM,LEXTITL,LEXTOT,LEXTYP
 . S LEXNAM=$O(LEX("DD",LEXFI,0,"NM","")) Q:'$L(LEXNAM)
 . S LEXPAR=$$PAR(+LEXFI) Q:+LEXPAR=0  Q:'$D(LEX("DIC",+LEXPAR,0,"GL"))
 . S LEXTOT=+($G(LEXCNT(LEXFI))),LEXGRND=+($G(LEXGRND))+LEXTOT
 . S LEXTYP=$S($D(LEX("DD",+LEXFI))&('$D(LEX("DIC",+LEXFI))):"Sub-File",1:"File")
 . S LEXTITL=LEXTYP_" #"_LEXFI,^TMP("LEXCNT",$J,LEXPAR,0)=LEXGRND
 . S ^TMP("LEXCNT",$J,LEXPAR,LEXFI)=LEXTOT_"^"_LEXNAM_"^"_LEXTITL
 . S LEXID=$$ID(LEXFI),LEXLVL=$$LVL(LEXFI)
 . S:$L(LEXID) ^TMP("LEXCNT",$J,"ORDER",+LEXPAR,(LEXID_";"))=LEXPAR_"^"_LEXFI_"^"_LEXLVL
 . S:'$D(^TMP("LEXCNT",$J,"LVL")) ^TMP("LEXCNT",$J,"LVL")=1
 . S:'$D(^TMP("LEXCNT",$J,"HSF")) ^TMP("LEXCNT",$J,"HSF")=0
 . S:'$D(^TMP("LEXCNT",$J,"SUB")) ^TMP("LEXCNT",$J,"SUB")=0
 . S:+LEXLVL>+($G(^TMP("LEXCNT",$J,"LVL"))) ^TMP("LEXCNT",$J,"LVL")=+LEXLVL
 . S:$L((LEXID_";"),";")>2 ^TMP("LEXCNT",$J,"HSF")=1
 . S:$L((LEXID_";"),";")>2 ^TMP("LEXCNT",$J,"SUB")=+($G(^TMP("LEXCNT",$J,"SUB")))+1
 . S LEXID=$P(LEXID,";",1) S:$L(LEXID) LEXID=LEXID_";~;"
 . S:$L(LEXID) ^TMP("LEXCNT",$J,"ORDER",+LEXPAR,(LEXID_";"))=LEXPAR_"^0^0"
 Q
PAR(X) ; Parent File        X = File/Sub-File Number
 N LEXPAR,LEXSUB S LEXSUB=$G(X)  Q:+LEXSUB'>0 ""
 I '$D(LEX("DD",+LEXSUB)) D DDI^LEXXFI6(+LEXSUB,.LEX)
 Q:'$D(LEX("DD",+LEXSUB,0)) ""  I '$D(LEX("DD",+LEXSUB,0,"UP")) S X=LEXSUB Q X
 S LEXPAR=LEXSUB F  Q:('$D(LEX("DD",+LEXSUB,0,"UP")))  D
 . S (LEXSUB,LEXPAR)=$G(LEX("DD",+LEXSUB,0,"UP"))
 S X=LEXPAR
 Q X
LVL(X) ; Level of File      X = File/Sub-File Number
 N LEXLVL,LEXPAR,LEXSUB S LEXSUB=$G(X)  Q:+LEXSUB'>0 0
 I '$D(LEX("DD",+LEXSUB)) D DDI^LEXXFI6(+LEXSUB,.LEX)
 Q:'$D(LEX("DD",+LEXSUB,0)) 0  Q:'$D(LEX("DD",+LEXSUB,0,"UP")) 1
 S LEXLVL=1,LEXPAR=LEXSUB F  Q:('$D(LEX("DD",+LEXSUB,0,"UP")))  D
 . S (LEXSUB,LEXPAR)=$G(LEX("DD",+LEXSUB,0,"UP")),LEXLVL=LEXLVL+1
 S X=LEXLVL Q X
ID(X) ; Unique Identifier  X = File/Sub-File Number
 N LEXID,LEXPAR,LEXSUB S LEXID="",LEXSUB=$G(X)  Q:+LEXSUB'>0 ""
 I '$D(LEX("DD",+LEXSUB)) D DDI^LEXXFI6(+LEXSUB,.LEX)
 Q:'$D(LEX("DD",+LEXSUB,0)) ""  Q:'$D(LEX("DD",+LEXSUB,0,"UP")) +LEXSUB
 S LEXID=+LEXSUB,LEXPAR=LEXSUB F  Q:('$D(LEX("DD",+LEXSUB,0,"UP")))  D
 . S (LEXSUB,LEXPAR)=$G(LEX("DD",+LEXSUB,0,"UP"))
 . S:$L(LEXSUB) LEXID=LEXSUB_";"_LEXID
 S X=LEXID
 Q X
 
--- Routine Detail   --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HLEXXFI3   6629     printed  Sep 23, 2025@19:45:58                                                                                                                                                                                                     Page 2
LEXXFI3   ;ISL/KER - File Info - Record Count ;04/21/2014
 +1       ;;2.0;LEXICON UTILITY;**32,80**;Sep 23, 1996;Build 1
 +2       ;               
 +3       ; Global Variables
 +4       ;    ^TMP("LEXCNT")      SACC 2.3.2.5.1
 +5       ;               
 +6       ; External References
 +7       ;    None
 +8       ;               
 +9        QUIT 
ONE(X)    ; Record Count for a File
 +1        NEW LEXFI
           KILL ^TMP("LEXCNT",$JOB)
           SET LEXFI=+($GET(X))
           if +X'>0
               QUIT 
           KILL LEXMD
           DO CNT(LEXFI)
           DO DSP^LEXXFI4
 +2        QUIT 
ALL       ; Record Count for a File(s)
 +1        NEW LEXCTR,LEXEX,LEXFI,LEXLINE,LEXRTN,LEXTAG
           KILL ^TMP("LEXCNT",$JOB)
 +2        SET LEXFI=""
           SET LEXTAG="FILES"
           SET LEXRTN="LEXXFI"
           SET LEXCTR=0
 +3        FOR 
               Begin DoDot:1
 +4                SET LEXCTR=LEXCTR+1
                   SET LEXEX="S LEXLINE=$T("_LEXTAG_"+"_LEXCTR_"^"_LEXRTN_")"
                   XECUTE LEXEX
 +5                SET LEXFI=$PIECE(LEXLINE,";;",3)
                   IF '$LENGTH(LEXFI)
                       KILL LEXMD
                       DO DSP^LEXXFI4
                       QUIT 
 +6                if '$LENGTH(LEXFI)
                       QUIT 
                   DO CNT(LEXFI)
               End DoDot:1
               if LEXFI=""
                   QUIT 
 +7        QUIT 
CNT(X)    ; Count Entries for file X
 +1        NEW DIC,LEX,LEXCFI,LEXCNT,LEXCRT,LEXEXIT,LEXFF,LEXFI,LEXI,LEXIEN
 +2        NEW LEXIENS,LEXIND,LEXLS,LEXNCT,LEXOF,LEXOND,LEXPCD,LEXPCE,LEXPCI
 +3        NEW LEXPCO,LEXPCT,LEXREC,LEXSL
 +4        SET LEXFF=$GET(X)
           if '$LENGTH(LEXFF)
               QUIT 
           if +LEXFF'>0
               QUIT 
 +5        DO DDI^LEXXFI6(LEXFF,.LEX)
           if '$DATA(LEX("DD",+LEXFF))
               QUIT 
 +6        SET LEXFI=$$PAR(+LEXFF)
           if +LEXFI'>0
               QUIT 
           KILL LEX
 +7        IF '$DATA(LEX("DD",LEXFI))
               DO DDI^LEXXFI6(LEXFI,.LEX)
 +8        if '$DATA(LEX("DD",+LEXFI))
               QUIT 
           if '$DATA(LEX("DIC",+LEXFI,0,"GL"))
               QUIT 
 +9        if $DATA(^TMP("LEXCNT",$JOB,"B",+LEXFI))
               QUIT 
           SET ^TMP("LEXCNT",$JOB,"B",+LEXFI)=""
 +10       SET ^TMP("LEXCNT",$JOB,"CNT")=+($GET(^TMP("LEXCNT",$JOB,"CNT")))+1
 +11       SET (LEXEXIT,LEXNCT,LEXIENS,LEXREC,LEXPCO)=0
           SET DIC=$GET(LEX("DIC",+LEXFI,0,"GL"))
 +12       if '$LENGTH(DIC)
               QUIT 
           SET LEXOND=DIC_"0)"
           SET LEXCRT=DIC
           SET LEXOF=$PIECE(@LEXOND,"^",4)
 +13       if $EXTRACT(DIC,$LENGTH(DIC))="("
               SET LEXCRT=$EXTRACT(DIC,1,($LENGTH(DIC)-1))
 +14       if $EXTRACT(DIC,$LENGTH(DIC))=","
               SET LEXCRT=$EXTRACT(DIC,1,($LENGTH(DIC)-1))_")"
 +15       FOR 
               SET LEXOND=$QUERY(@LEXOND)
               if LEXOND=""!(LEXOND'[DIC)
                   QUIT 
               DO NODE
               if LEXEXIT
                   QUIT 
 +16       if +($ORDER(LEXCNT(0)))>0
               DO SAV
 +17       if +LEXIENS>0
               SET ^TMP("LEXCNT",$JOB,"IENS",+LEXFI)=(LEXIENS+1)
 +18       IF $DATA(^TMP("LEXCNT","EXIT"))
               SET LEXEXIT=1
               KILL ^TMP("LEXCNT","EXIT")
 +19       QUIT 
NODE      ; Count a Node as a Record?
 +1       ;   Do not Count Non-Zero Nodes
 +2        if $EXTRACT(LEXOND,($LENGTH(LEXOND)-2),$LENGTH(LEXOND))'[",0)"
               QUIT 
 +3       ;   Do not Count Header Nodes
 +4        IF DIC'[","
               IF LEXOND[",0)"
                   IF $LENGTH(LEXOND,",")#2>0
                       QUIT 
 +5        IF DIC[","
               IF LEXOND[",0)"
                   IF $LENGTH(LEXOND,",")#2'>0
                       QUIT 
 +6        SET LEXIND=$PIECE(LEXOND,DIC,2)
           SET LEXIEN=$PIECE(LEXIND,",0)",1)
           if +LEXIEN=LEXIEN
               SET LEXIENS=LEXIENS+1
 +7       ;   Do not Count Cross-References (Exit Loop)
 +8        IF +($PIECE(LEXIND,",",1))'=$PIECE(LEXIND,",",1)
               SET LEXEXIT=1
               QUIT 
 +9       ;   Quit if no Sub-Script List
 +10       SET LEXSL=$PIECE(LEXIND,")",1)
           IF '$LENGTH(LEXSL)
               SET LEXEXIT=1
               QUIT 
 +11      ; Percent Complete
 +12       SET (LEXPCT,LEXPCE)=""
           SET LEXPCI=LEXPCO
           IF LEXIENS>0
               IF LEXOF>0
                   Begin DoDot:1
 +13                   SET LEXPCT=(LEXIENS/LEXOF)*100
                       SET LEXPCI=+($PIECE(LEXPCT,".",1))
                       SET LEXPCD=+($EXTRACT($PIECE(LEXPCT,".",2),1,2))
 +14                   if $LENGTH(LEXPCD)=1
                           SET LEXPCD=LEXPCD_"0"
                       if $LENGTH(LEXPCD)=1
                           SET LEXPCD=LEXPCD_"0"
                       SET LEXPCE=LEXPCI_"%"
                   End DoDot:1
 +15       SET LEXPCO=LEXPCI
 +16      ;   List Subscripts
 +17       SET LEXNCT=LEXNCT+1
           KILL LEXLS
           DO LS(LEXSL,LEXFI)
           if '$DATA(LEXLS)
               QUIT 
 +18       SET LEXCFI=$GET(LEXLS("FIL"))
           if +LEXCFI'>0
               QUIT 
           if '$DATA(LEX("DD",+LEXCFI,0))
               QUIT 
 +19       SET LEXCNT(+LEXCFI)=+($GET(LEXCNT(+LEXCFI)))+1
           SET LEXREC=LEXREC+1
 +20       IF LEXREC#10000'>0
               if $DATA(^TMP("LEXCNT","EXIT"))
                   SET LEXEXIT=1
 +21       QUIT 
LS(X,Y)   ; List Subscripts    X = Subscripts Y = File
 +1        NEW LEXFI,LEXFLD,LEXI,LEXND,LEXNDI,LEXSB,LEXSF,LEXSFI,LEXSFN,LEXSL
 +2        SET LEXSL=X
           if '$LENGTH(LEXSL)
               QUIT 
           SET LEXFI=+($GET(Y))
           if +LEXFI'>0
               QUIT 
           if '$DATA(LEX("DIC",+LEXFI,0,"GL"))
               QUIT 
 +3        KILL LEXLS
           SET LEXLS("CNT")=1
           FOR LEXI=1:1
               if '$LENGTH($PIECE(LEXSL,",",LEXI))
                   QUIT 
               Begin DoDot:1
 +4                SET LEXSB=$PIECE(LEXSL,",",LEXI)
                   IF LEXI#2
                       Begin DoDot:2
 +5                        SET LEXLS("DA",0)=+($GET(LEXLS("DA",0)))+1
                           SET LEXLS("DA",+($GET(LEXLS("DA",0))))=LEXSB
 +6                        if +LEXSB'=LEXSB
                               SET LEXLS("CNT")=0
                           if LEXSB="0"
                               SET LEXLS("CNT")=0
                       End DoDot:2
 +7                IF '(LEXI#2)
                       Begin DoDot:2
 +8                        SET LEXLS("ND",0)=+($GET(LEXLS("ND",0)))+1
                           SET LEXLS("ND",+($GET(LEXLS("ND",0))))=LEXSB
                       End DoDot:2
               End DoDot:1
 +9        SET LEXSF=LEXFI
           SET LEXSFN=0
           SET LEXNDI=0
           FOR 
               SET LEXNDI=$ORDER(LEXLS("ND",LEXNDI))
               if +LEXNDI=0
                   QUIT 
               Begin DoDot:1
 +10               SET LEXND=$GET(LEXLS("ND",LEXNDI))
                   if '$LENGTH(LEXND)
                       QUIT 
 +11               SET LEXND=$TRANSLATE(LEXND,"""","")
                   IF '$LENGTH(LEXND)
                       SET LEXSF="ERR"
                       QUIT 
 +12               IF '$ORDER(LEX("DD",+LEXSF,"GL",LEXND,0))>0
                       SET LEXSFN=LEXND
 +13               if '$DATA(LEX("DD",+LEXSF,"GL",LEXND,0))
                       QUIT 
 +14               SET LEXFLD=$ORDER(LEX("DD",+LEXSF,"GL",LEXND,0,0))
                   IF +LEXFLD'>0
                       SET LEXSF="ERR"
                       QUIT 
 +15               SET LEXSFI=$GET(LEX("DD",+LEXSF,+LEXFLD,0))
 +16               SET LEXSFI=+($PIECE(LEXSFI,"^",2))
                   IF +LEXSFI'>0
                       SET LEXSF="ERR"
                       QUIT 
 +17               if $DATA(LEX("DD",+LEXSFI,0))
                       SET LEXSF=+LEXSFI
               End DoDot:1
 +18       SET LEXLS("FIL")=LEXSF
 +19       SET LEXLS("ND")=LEXSFN
 +20       if LEXSF="ERR"
               KILL LEXLS("FIL")
 +21       if +($GET(LEXLS("CNT")))'>0
               KILL LEXLS
 +22       IF $ORDER(LEXLS("ND"," "),-1)>0
               IF $GET(LEXLS("ND",$ORDER(LEXLS("ND"," "),-1)))'="0"
                   KILL LEXLS
 +23       QUIT 
SAV       ; Save Counts in ^TMP("LEXCNT",$J)
 +1        NEW LEXGRND,LEXID,LEXFI,LEXLVL,LEXNAM,LEXPAR,LECTITL,LEXTOT,LEXTYP
 +2        SET LEXFI=0
           FOR 
               SET LEXFI=$ORDER(LEXCNT(LEXFI))
               if +LEXFI=0
                   QUIT 
               Begin DoDot:1
 +3                NEW LEXNAM,LEXTITL,LEXTOT,LEXTYP
 +4                SET LEXNAM=$ORDER(LEX("DD",LEXFI,0,"NM",""))
                   if '$LENGTH(LEXNAM)
                       QUIT 
 +5                SET LEXPAR=$$PAR(+LEXFI)
                   if +LEXPAR=0
                       QUIT 
                   if '$DATA(LEX("DIC",+LEXPAR,0,"GL"))
                       QUIT 
 +6                SET LEXTOT=+($GET(LEXCNT(LEXFI)))
                   SET LEXGRND=+($GET(LEXGRND))+LEXTOT
 +7                SET LEXTYP=$SELECT($DATA(LEX("DD",+LEXFI))&('$DATA(LEX("DIC",+LEXFI))):"Sub-File",1:"File")
 +8                SET LEXTITL=LEXTYP_" #"_LEXFI
                   SET ^TMP("LEXCNT",$JOB,LEXPAR,0)=LEXGRND
 +9                SET ^TMP("LEXCNT",$JOB,LEXPAR,LEXFI)=LEXTOT_"^"_LEXNAM_"^"_LEXTITL
 +10               SET LEXID=$$ID(LEXFI)
                   SET LEXLVL=$$LVL(LEXFI)
 +11               if $LENGTH(LEXID)
                       SET ^TMP("LEXCNT",$JOB,"ORDER",+LEXPAR,(LEXID_";"))=LEXPAR_"^"_LEXFI_"^"_LEXLVL
 +12               if '$DATA(^TMP("LEXCNT",$JOB,"LVL"))
                       SET ^TMP("LEXCNT",$JOB,"LVL")=1
 +13               if '$DATA(^TMP("LEXCNT",$JOB,"HSF"))
                       SET ^TMP("LEXCNT",$JOB,"HSF")=0
 +14               if '$DATA(^TMP("LEXCNT",$JOB,"SUB"))
                       SET ^TMP("LEXCNT",$JOB,"SUB")=0
 +15               if +LEXLVL>+($GET(^TMP("LEXCNT",$JOB,"LVL")))
                       SET ^TMP("LEXCNT",$JOB,"LVL")=+LEXLVL
 +16               if $LENGTH((LEXID_";"),";")>2
                       SET ^TMP("LEXCNT",$JOB,"HSF")=1
 +17               if $LENGTH((LEXID_";"),";")>2
                       SET ^TMP("LEXCNT",$JOB,"SUB")=+($GET(^TMP("LEXCNT",$JOB,"SUB")))+1
 +18               SET LEXID=$PIECE(LEXID,";",1)
                   if $LENGTH(LEXID)
                       SET LEXID=LEXID_";~;"
 +19               if $LENGTH(LEXID)
                       SET ^TMP("LEXCNT",$JOB,"ORDER",+LEXPAR,(LEXID_";"))=LEXPAR_"^0^0"
               End DoDot:1
 +20       QUIT 
PAR(X)    ; Parent File        X = File/Sub-File Number
 +1        NEW LEXPAR,LEXSUB
           SET LEXSUB=$GET(X)
           if +LEXSUB'>0
               QUIT ""
 +2        IF '$DATA(LEX("DD",+LEXSUB))
               DO DDI^LEXXFI6(+LEXSUB,.LEX)
 +3        if '$DATA(LEX("DD",+LEXSUB,0))
               QUIT ""
           IF '$DATA(LEX("DD",+LEXSUB,0,"UP"))
               SET X=LEXSUB
               QUIT X
 +4        SET LEXPAR=LEXSUB
           FOR 
               if ('$DATA(LEX("DD",+LEXSUB,0,"UP")))
                   QUIT 
               Begin DoDot:1
 +5                SET (LEXSUB,LEXPAR)=$GET(LEX("DD",+LEXSUB,0,"UP"))
               End DoDot:1
 +6        SET X=LEXPAR
 +7        QUIT X
LVL(X)    ; Level of File      X = File/Sub-File Number
 +1        NEW LEXLVL,LEXPAR,LEXSUB
           SET LEXSUB=$GET(X)
           if +LEXSUB'>0
               QUIT 0
 +2        IF '$DATA(LEX("DD",+LEXSUB))
               DO DDI^LEXXFI6(+LEXSUB,.LEX)
 +3        if '$DATA(LEX("DD",+LEXSUB,0))
               QUIT 0
           if '$DATA(LEX("DD",+LEXSUB,0,"UP"))
               QUIT 1
 +4        SET LEXLVL=1
           SET LEXPAR=LEXSUB
           FOR 
               if ('$DATA(LEX("DD",+LEXSUB,0,"UP")))
                   QUIT 
               Begin DoDot:1
 +5                SET (LEXSUB,LEXPAR)=$GET(LEX("DD",+LEXSUB,0,"UP"))
                   SET LEXLVL=LEXLVL+1
               End DoDot:1
 +6        SET X=LEXLVL
           QUIT X
ID(X)     ; Unique Identifier  X = File/Sub-File Number
 +1        NEW LEXID,LEXPAR,LEXSUB
           SET LEXID=""
           SET LEXSUB=$GET(X)
           if +LEXSUB'>0
               QUIT ""
 +2        IF '$DATA(LEX("DD",+LEXSUB))
               DO DDI^LEXXFI6(+LEXSUB,.LEX)
 +3        if '$DATA(LEX("DD",+LEXSUB,0))
               QUIT ""
           if '$DATA(LEX("DD",+LEXSUB,0,"UP"))
               QUIT +LEXSUB
 +4        SET LEXID=+LEXSUB
           SET LEXPAR=LEXSUB
           FOR 
               if ('$DATA(LEX("DD",+LEXSUB,0,"UP")))
                   QUIT 
               Begin DoDot:1
 +5                SET (LEXSUB,LEXPAR)=$GET(LEX("DD",+LEXSUB,0,"UP"))
 +6                if $LENGTH(LEXSUB)
                       SET LEXID=LEXSUB_";"_LEXID
               End DoDot:1
 +7        SET X=LEXID
 +8        QUIT X