Annotation of freem_fileman/DICL3.m, revision 1.1

1.1     ! snw         1: DICL3  ;SEA/TOAD-VA FileMan: Lookup: Lister, Part 4 ;7/29/94  10:01 ;
        !             2:        ;;21.0;VA FileMan;;Dec 28, 1994
        !             3:        ;Per VHA Directive 10-93-142, this routine should not be modified.
        !             4:        ;
        !             5: POINT  ;
        !             6:        ;BRANCH^DICL--perform recursive list for pointer index
        !             7:        N DICODE,DIFIENP,DILVL,DIPLVL,DISCREEN
        !             8:        S DIPLVL=+$G(DIFILE("LVL"))
        !             9:        N DIFILE
        !            10:        S DIFILE=+$P($P(DINDEX("NODE"),U,2),"P",2)
        !            11:        S DILVL=DIPLVL+1
        !            12:        S DIFILE("LVL")=DILVL
        !            13:        S DISCREEN="X "_$NA(^TMP("DILVL",$J,DILVL))
        !            14:        S DICODE="N DIPLVL,DIROOT S DIPLVL="_DIPLVL_",DIROOT=$NA("_$NA(@DIROOT@(DINDEX))_"),DIFIENP=$O(@DIROOT@(Y,"""")) I DIFIENP'="""""
        !            15:        I DIPLVL S DICODE=DICODE_" X "_$NA(^TMP("DILVL",$J,DIPLVL))
        !            16:        S ^TMP("DILVL",$J,DILVL)=DICODE
        !            17: RECUR  ;
        !            18:        ;perform recursive call
        !            19:        D LIST^DICL(.DIFILE,"","",DIFLAGS_"f",DINUMBER,DIFROM,DIPART,"B",DICALSCR,"",DILIST)
        !            20:        K ^TMP("DILVL",$J,DILVL)
        !            21:        I $D(DIERR) D CALLOUT^DIEFU($G(DIMSGA)):$G(DIMSGA)'="" Q
        !            22:        Q
        !            23:        ;
        !            24:        
        !            25: FOLLOW(DIFILE,DIROOT,DIPOINT,DIDEF)    ;
        !            26:        ; follow pointer to end, building stack along the way
        !            27:        N DILVL S DILVL=0
        !            28:        F  D  Q:DIPOINT=""
        !            29:        . S DILVL=DILVL+1
        !            30:        . S DIFILE("STACK",DILVL)=DIFILE_DIROOT_U_DIFILE("INDEX")
        !            31:        . I 'DIPOINT S DIPOINT="" Q
        !            32:        . S (DIFILE,DIFILE("INDEX"))=DIPOINT
        !            33:        . S DIROOT=$$CREF^DIQGU(U_$P(DIDEF,U,3))
        !            34:        . S DIDEF=$G(^DD(DIFILE,.01,0))
        !            35:        . S DIPOINT=+$P($P(DIDEF,U,2),"P",2)
        !            36:        S DIFILE("STACK")=DILVL
        !            37:        Q
        !            38:        
        !            39: BACKTRAK(DIFILE,DIEN,DILVL)    ;
        !            40:        ; follow pointer chain to root, considering all pointing records
        !            41:        ; formal parameter list includes only those needed for recursion
        !            42:        ; for rest of list, see $$SCREEN and ACCEPT calls within loop
        !            43:        S DILVL=DILVL-1
        !            44:        S DIFILE=$P(DIFILE("STACK",DILVL),U)
        !            45:        N DIROOT1 S DIROOT1=U_$P(DIFILE("STACK",DILVL),U,2)
        !            46:        S DIFILE("INDEX")=$P(DIFILE("STACK",DILVL),U,3)
        !            47:        N DIVALUE S DIVALUE=DIEN
        !            48: B1     S DIEN="" F  D  Q:DIEN=""!(DIFLAGS["q")
        !            49:        . N DINDEX1 S DINDEX1=$S(DILVL>1:"B",1:DINDEX("MAIN"))
        !            50:        . S DIEN=$O(@DIROOT1@(DINDEX1,DIVALUE,DIEN),DINDEX("WAY"))
        !            51:        . Q:DIEN=""
        !            52:        . I DILVL>1 D
        !            53:        . . D BACKTRAK(.DIFILE,DIEN,DILVL) Q:DIFLAGS["q"
        !            54:        . E  D
        !            55:        . . I DITOIN'="",DITO=DIENTRY,DIEN=DITOIN D  Q
        !            56:        . . . S DIFLAGS=DIFLAGS_"q",DIEN="",DIENTRY="",DIOUT1=1,DIOUT2=1 Q
        !            57:        . . I DIFROM("LOOKING FOR START") N DISKIP S DISKIP=0 D  Q:DISKIP
        !            58:        . . . I DIFROM=DIENTRY,DIFROM("IEN")'=DIEN S DISKIP=1 Q
        !            59:        . . . S DIFROM("LOOKING FOR START")=0 Q:DIFROM'=DIENTRY  S DISKIP=1
        !            60: B2     . . N DIROOT2
        !            61:        . . S DIROOT2=DIROOT("MAIN")
        !            62:        . . S DIROOT2("O")=DIROOT("MAIN O")
        !            63:        . . N DINDEX2 D
        !            64:        . . . M DINDEX2=DINDEX("MAIN")
        !            65:        . . . M DINDEX2("END")=DINDEX
        !            66:        . . . K DINDEX2("END","MAIN"),DINDEX2("MAIN")
        !            67:        . . Q:$$SCREEN^DICL2(DIFILE,.DIEN,DIFLAGS,.DIROOT2,DIFIEN,DISCREEN,DICALSCR,DIFILSCR,DINDEX2)
        !            68:        . . I 'DICOUNT("JUST LOOKING") S DICOUNT("LAST IEN")=DIEN
        !            69:        . . D ACCEPT^DICL2(.DIFILE,.DIEN,DIFLAGS,.DIROOT2,DIFIEN,.DIENTRY,.DICOUNT,.DINDEX2,.DIDENT,.DILIST)
        !            70:        . . I DIOUT2 S DIFLAGS=DIFLAGS_"q"
        !            71:        K DIFILE("INDEX")
        !            72:        Q
        !            73:        

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>