File:  [Coherent Logic Development] / freem_fileman / USER / DICL1.m
Revision 1.1: download - view: text, annotated - select for diffs
Mon Apr 28 14:13:19 2025 UTC (5 weeks, 4 days ago) by snw
Branches: MAIN
CVS tags: HEAD
Restructure repository

DICL1	;SEA/TOAD-VA FileMan: Lookup: Lister, Part 2 ;11/28/94  08:34 ;
	;;21.0;VA FileMan;;Dec 28, 1994
	;Per VHA Directive 10-93-142, this routine should not be modified.
	
PREP	
	N DIEN,DIENTRY,DIOUT1,DIOUT2,DISUB1
	S DIOUT1=0
	S DIENTRY=DIFROM
	D DA^DILF(DIFIEN,.DIEN)
	I DINDEX("WAY")=1 S DILIST("ORDER")=0
	E  S DILIST("ORDER")=DINUMBER+1
	
REVERSE	
	N DIREVERS,DITO,DITOIN
	I DINUMBER="*",DINDEX("WAY")=-1 D
	. S DIREVERS=1
	. S DITO=DIFROM
	. S DITOIN=DIFROM("IEN")
	. S DINDEX("WAY")=1
	. S DIFROM=DIPART
	. I DIFROM'="" S DIUSEFRM=1
	. S DIFROM("IEN")=""
R1	. S DIENTRY=DIPART
	. S DILIST("ORDER")=0
	. Q
	E  D
	. S DIREVERS=0
	. S DITO=""
	. S DITOIN=""
	. Q
	
PREP2	; prepare to list entries
	N DICODE,DID,DIDT,DIDVAL
	N DIMSG,DIOUT3,DISKIP,DIVAL,X,Y
	N DICOUNT D
	. S DICOUNT=0
	. S DICOUNT("MAX")=DINUMBER
	. S DICOUNT("JUST LOOKING")=0
	. S DICOUNT("LAST ENTRY")=""
	. S DICOUNT("LAST IEN")=""
	S DIENTRY("PREVIOUS")="",DIENTRY("PREVIOUS EXTERNAL")=""
P1	I +DIPART'=DIPART S DICOUNT("MORE?")=0
	E  D
	. I DINDEX("WAY")=1,+DIFROM=DIFROM S DICOUNT("MORE?")=1 Q
	. I DINDEX("WAY")=-1,+DIFROM'=DIFROM S DICOUNT("MORE?")=1 Q
	. S DICOUNT("MORE?")=0 Q
	I DINDEX("TYPE")="P",DIFLAGS'["I" D
	. S DIFLAGS=DIFLAGS_"p"
	. D POINT(.DIFILE,.DIROOT,.DINDEX,.DIFROM)
	
LONG	
	D
	. N DILENGTH S DILENGTH=+$P(DINDEX("NODE"),">",2)
	. I 'DILENGTH S DILENGTH=99999
	. S DIFROM=$E(DIFROM,1,DILENGTH)
	. S DIPART=$E(DIPART,1,DILENGTH)
	. S DITO=$E(DITO,1,DILENGTH)
	
GETLIST	
	; I $G(ZRT) S ZRT(ZRT)="BRANCH^"_$ZH,ZRT=ZRT+1
	D LIST^DICL2
	
FINAL	
	I $G(DIERR) K @DILIST D OUT^DICL Q
	I DICOUNT=0,$O(@DIROOT@(DINDEX,""))="",$O(@DIROOT@(0)) D  Q
	. S DIERN=420,DIPE(1)=DINDEX,DIPE("FILE")=DIFILE D ERROUT^DICL
	S @DILIST@(0)=DICOUNT_U_DICOUNT("MAX")_U_DICOUNT("MORE?")
	K DIFROM("LOOKING FOR START")
	I DICOUNT("MORE?") D
	. S DIFROM=DIENTRY
	. S DIFROM("IEN")=$S(DIFLAGS'["p":DIEN,1:$G(DICOUNT("LAST IEN")))
	E  S DIFROM="",DIFROM("IEN")=""
	Q
	
POINT(DIFILE,DIROOT,DINDEX,DIFROM)	;
	; prepare to list a pointer index
	S DIFILE("MAIN")=DIFILE
	S DIROOT("MAIN")=DIROOT
	S DIROOT("MAIN O")=DIROOT("O")
	D FOLLOW^DICL3(.DIFILE,.DIROOT,DINDEX("PTR"),DINDEX("NODE"))
	N TEMP M TEMP=DINDEX K DINDEX M DINDEX("MAIN")=TEMP
	S DINDEX="B",DINDEX("WAY")=DINDEX("MAIN","WAY")
	D INDEX^DICU1(.DIFILE,.DINDEX,DIROOT)
	S DIFROM("LOOKING FOR START")=DIFROM'=""&(DIFROM("IEN")'="")
	Q
	
	

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