| 1 | DICL1 ;SEA/TOAD,SF/TKW-VA FileMan: Lookup: Lister, Part 2 ;10/15/98  14:19
 | 
|---|
| 2 |  ;;22.0;VA FileMan;;Mar 30, 1999
 | 
|---|
| 3 |  ;Per VHA Directive 10-93-142, this routine should not be modified.
 | 
|---|
| 4 |  ;
 | 
|---|
| 5 | PREP ; set up subfile's DA array under DIEN, init how many found,
 | 
|---|
| 6 |  ; set max, and init array of last entries returned.
 | 
|---|
| 7 |  ;
 | 
|---|
| 8 |  N DIEN D DA^DILF(DIFIEN,.DIEN)
 | 
|---|
| 9 |  N DISUB,DIVAL,X,Y
 | 
|---|
| 10 |  S DIDENT(-1)=0
 | 
|---|
| 11 |  S DIDENT(-1,"MAX")=DINUMBER
 | 
|---|
| 12 |  S DIDENT(-1,"JUST LOOKING")=0
 | 
|---|
| 13 |  F DISUB=1:1:DINDEX("#")+1 S DIDENT(-1,"LAST",DISUB)=""
 | 
|---|
| 14 |  S (DIDENT(-1,"LAST"),DIDENT(-1,"LAST","IEN"))=""
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 | PTR ; if 1st indexed field is a pointer or var.ptr., and we're not doing
 | 
|---|
| 17 |  ; a quick list, we build info for the
 | 
|---|
| 18 |  ; pointer chain(s) to the end file(s) and do the search.
 | 
|---|
| 19 |  ;
 | 
|---|
| 20 |  I "VP"[DINDEX(1,"TYPE"),DIFLAGS'["Q",'$D(DINDEX("ROOTCNG",1)) D
 | 
|---|
| 21 |  . D POINT^DICL10(.DIFILE,.DIFLAGS,.DINDEX,.DIDENT,.DIEN,DIFIEN,.DISCREEN,.DILIST)
 | 
|---|
| 22 |  . Q
 | 
|---|
| 23 |  ;
 | 
|---|
| 24 | GETLIST ; build the output list when first subscript not a ptr. or var.ptr.
 | 
|---|
| 25 |  ;
 | 
|---|
| 26 |  E  D
 | 
|---|
| 27 |  . I $D(DINDEX("ROOTCNG",1)) D BLDTMP^DICLIX1(.DINDEX,.DISCREEN,DIFLAGS,.DIDENT)
 | 
|---|
| 28 |  . D WALK^DICLIX(DIFLAGS,.DINDEX,.DIDENT,.DIFILE,.DIEN,.DIFIEN,.DISCREEN,.DILIST,"","",.DIC)
 | 
|---|
| 29 |  ;
 | 
|---|
| 30 | DSPHLP ; If we're displaying entries for online ^DIC help, display the rest
 | 
|---|
| 31 |  ;
 | 
|---|
| 32 |  I DIFLAGS["h",$O(DICQ(0)) D
 | 
|---|
| 33 |  . K DTOUT,DUOUT S DICQ(0,"MAP")=DIDENT(-3)
 | 
|---|
| 34 |  . D DSP^DICQ1(.DINDEX,.DICQ,.DIC,.DIFILE)
 | 
|---|
| 35 |  . I $G(DTOUT)!($G(DUOUT)) S (DINDEX("DONE"),DIDONE)=1 Q
 | 
|---|
| 36 |  . S DIDENT(-1)=0
 | 
|---|
| 37 |  . Q
 | 
|---|
| 38 |  ;
 | 
|---|
| 39 | KTMPIX ; if we've built temporary indexes, we delete them:
 | 
|---|
| 40 |  D KILLB(.DIFILE)
 | 
|---|
| 41 |  N DISUB S DISUB=$O(DINDEX("ROOTCNG","")) I DISUB K @DINDEX(DISUB,"ROOT")
 | 
|---|
| 42 |  ;
 | 
|---|
| 43 | FINAL ; cleanup after search.
 | 
|---|
| 44 |  ;
 | 
|---|
| 45 |  I $G(DIERR) K @DILIST D OUT^DICL Q
 | 
|---|
| 46 |  ;
 | 
|---|
| 47 |  ; set the output list header node and map node, output FROM values
 | 
|---|
| 48 |  ; for last entries returned.
 | 
|---|
| 49 |  ;
 | 
|---|
| 50 |  I '$D(DIDENT(-1)) S DIDENT(-1)=0,DIDENT(-1,"MAX")=DINUMBER
 | 
|---|
| 51 |  N DIHEADER S DIHEADER=DIDENT(-1)_U_DIDENT(-1,"MAX")_U_+$G(DIDENT(-1,"MORE?"))
 | 
|---|
| 52 |  S @DILIST@(0)=DIHEADER_U_$S(DIFLAGS[2:"H",1:"")
 | 
|---|
| 53 |  I DIFLAGS["P",$G(DIDENT(-3))]"" S @DILIST@(0,"MAP")=DIDENT(-3)
 | 
|---|
| 54 |  E  D SETMAP(.DIDENT,DILIST)
 | 
|---|
| 55 |  N I S I=0 F  S I=$O(DIDENT(-1,"LAST",I)) Q:'I  D
 | 
|---|
| 56 |  . K DIDENT(-1,"LAST",I,"I")
 | 
|---|
| 57 |  . Q:$G(DIDENT(-1,"MORE?"))
 | 
|---|
| 58 |  . I I=1 S (DIDENT(-1,"LAST"),DIDENT(-1,"LAST","IEN"))=""
 | 
|---|
| 59 |  . S DIDENT(-1,"LAST",I)=""
 | 
|---|
| 60 |  . Q
 | 
|---|
| 61 |  K DIFROM M DIFROM=DIDENT(-1,"LAST")
 | 
|---|
| 62 |  ;
 | 
|---|
| 63 |  ; Move arrays to output and QUIT.
 | 
|---|
| 64 |  D OUT^DICL
 | 
|---|
| 65 |  Q
 | 
|---|
| 66 |  ;
 | 
|---|
| 67 | KILLB(DIFILE) ; Kill temporary "B" index on current file DIFILE or pointed-to files.
 | 
|---|
| 68 |  N DIROOT I $D(DIFILE(DIFILE,"NO B")) S DIROOT=DIFILE(DIFILE,"NO B")_")" K @DIROOT
 | 
|---|
| 69 |  Q:'$O(DIFILE("STACK",0))
 | 
|---|
| 70 |  N I,J,K
 | 
|---|
| 71 |  F I=0:0 S I=$O(DIFILE("STACK",I)) Q:'I  F J=0:0 S J=$O(DIFILE("STACK",I,J)) Q:'J  F K=0:0 S K=$O(DIFILE("STACK",I,J,K)) Q:'K  I $D(DIFILE(K,"NO B")) D
 | 
|---|
| 72 |  . S DIROOT=DIFILE(K,"NO B")_")"
 | 
|---|
| 73 |  . K @DIROOT Q
 | 
|---|
| 74 |  Q
 | 
|---|
| 75 |  ;
 | 
|---|
| 76 | SETMAP(DIDENT,DILIST) ; Set map node for unpacked format
 | 
|---|
| 77 |  N I,J,K,DIMAP,DITMP S (DIMAP,I)=""
 | 
|---|
| 78 |  F  S I=$O(DIDENT(-3,I)) Q:I=""  S DITMP="" D  D SETM2
 | 
|---|
| 79 |  . I I S J="" F  S J=$O(DIDENT(-3,I,J)) Q:J=""  D
 | 
|---|
| 80 |  . . I J?1.N.1"I" D
 | 
|---|
| 81 |  . . . N K S K="FID("_I_")"_$P("I^",U,J["I")
 | 
|---|
| 82 |  . . . K:$D(DIDENT(-3,I,K)) DIDENT(-3,I,K) Q
 | 
|---|
| 83 |  . . S DITMP=DITMP_J_"^" Q
 | 
|---|
| 84 |  . Q:I'=0
 | 
|---|
| 85 |  . F J=0:0 S J=$O(DIDENT(-3,0,J)) Q:'J  S K="" F  D  Q:K=""
 | 
|---|
| 86 |  . . S K=$O(DIDENT(-3,0,J,K)) S:K]"" DITMP=DITMP_K_"^" Q
 | 
|---|
| 87 |  Q:DIMAP=""  S $E(DIMAP,$L(DIMAP))=""
 | 
|---|
| 88 |  S @DILIST@(0,"MAP")=DIMAP
 | 
|---|
| 89 |  Q
 | 
|---|
| 90 |  ;
 | 
|---|
| 91 | SETM2 N DILENGTH S DILENGTH=$L(DIMAP) Q:$E(DIMAP,DILENGTH-3,DILENGTH)="..."
 | 
|---|
| 92 |  I $L(DITMP)+($L(DIMAP))>252 S DIMAP=DIMAP_"..." Q
 | 
|---|
| 93 |  S DIMAP=DIMAP_DITMP Q
 | 
|---|
| 94 |  ;
 | 
|---|
| 95 |  ;
 | 
|---|