[613] | 1 | DICL2 ;SEA/TOAD,SF/TKW-VA FileMan: Lookup: Lister, Part 3 ;12/13/99 09:17
|
---|
| 2 | ;;22.0;VA FileMan;**20**;Mar 30, 1999
|
---|
| 3 | ;Per VHA Directive 10-93-142, this routine should not be modified.
|
---|
| 4 | SCREEN(DIFILE,DIEN,DIFLAGS,DIFIEN,DISCREEN,DINDEX,DI0NODE) ;
|
---|
| 5 | ;
|
---|
| 6 | ; return 1 if entry should be screened out
|
---|
| 7 | ;
|
---|
| 8 | S1 ; entries tagged for archiving, or missing the .01 or already on
|
---|
| 9 | ; the list should be screened out.
|
---|
| 10 | ;
|
---|
| 11 | I DIFILE'<2,'$$VMINUS9^DIEFU(DIFILE,","_DIEN_DIFIEN) Q 1
|
---|
| 12 | I $P(DI0NODE,U)="" Q 1
|
---|
| 13 | I DIFLAGS[4 N DIREC D I 'DIREC Q 1
|
---|
| 14 | . S DIREC=DIEN I DIFLAGS["v" S DIREC=DIREC_";"_$P(DIFILE(DIFILE,"O"),U,2)
|
---|
| 15 | . I $D(@DILIST@("B",($E($P(DI0NODE,U),1,DINDEX("MAXSUB"))_"^"_DIREC))) S DIREC=0
|
---|
| 16 | . Q
|
---|
| 17 | ;
|
---|
| 18 | S2 ; execute any screen on transformed lookup values
|
---|
| 19 | ;
|
---|
| 20 | N DISKIP S DISKIP=0
|
---|
| 21 | I DIFLAGS[4 N DISUB F DISUB=1:1:DINDEX("#") D Q:DISKIP
|
---|
| 22 | . N DISCR2 S DISCR2=+$G(DINDEX(DISUB,"FOUND"))
|
---|
| 23 | . Q:'$D(DISCREEN(DISUB,DISCR2))
|
---|
| 24 | . N DIVAL,D S @DINDEX(DISUB,"GET"),D=DINDEX
|
---|
| 25 | . X DISCREEN(DISUB,DISCR2) S DISKIP='$T
|
---|
| 26 | . Q
|
---|
| 27 | I DISKIP Q DISKIP
|
---|
| 28 | N DISCR
|
---|
| 29 | S3 ; Additional screening for using an alternate index for loop through file.
|
---|
| 30 | I $D(DISCREEN("X")) F DISCR=0:0 S DISCR=$O(DISCREEN("X",DISCR)) Q:'DISCR D Q:DISKIP
|
---|
| 31 | . N D,DIPART,DISUB,DIVAL,X
|
---|
| 32 | . X DISCREEN("X",DISCR,"GET") I DIVAL="" S DISKIP=1 Q
|
---|
| 33 | . F DISUB=0:0 S DISUB=$O(DISCREEN("VAL",DISCR,DISUB)) Q:'DISUB D Q:'DISKIP
|
---|
| 34 | . . S D="",DISKIP=1
|
---|
| 35 | . . S DIPART=DISCREEN("VAL",DISCR,DISUB) Q:$P(DIVAL,DIPART)'=""
|
---|
| 36 | . . S X=$G(DISCREEN("X",DISCR,DISUB)) I X]"" X X Q:'$T
|
---|
| 37 | . . S DISKIP=0 Q
|
---|
| 38 | . Q
|
---|
| 39 | I DISKIP Q DISKIP
|
---|
| 40 | S4 ; Execute Screen parameter, whole file screen.
|
---|
| 41 | F DISCR="F","S" I $G(DISCREEN(DISCR))'="" D Q:DISKIP
|
---|
| 42 | . N %,D S D=$G(DINDEX)
|
---|
| 43 | . N DIC S DIC=DIFILE(DIFILE,"O")
|
---|
| 44 | . I DIFLAGS[4 S DIC(0)=$TR(DIFLAGS,"2^fqlpqtuv4PQU")
|
---|
| 45 | . E S DIC(0)=$TR(DIFLAGS,"2^fpq3BIMPQ")
|
---|
| 46 | . N Y M Y=DIEN
|
---|
| 47 | . N Y1 S Y1=DIEN_DIFIEN
|
---|
| 48 | . N X S X=$G(@DIFILE(DIFILE)@(DIEN,0)),X=$P(X,U)
|
---|
| 49 | . I DIFLAGS[4,DIFLAGS["p" N I S I=DIEN
|
---|
| 50 | . D
|
---|
| 51 | . . N DIFILE,DIXV,DIY,DIYX
|
---|
| 52 | . . I 1 X DISCREEN(DISCR) S DISKIP='$T
|
---|
| 53 | .
|
---|
| 54 | S5 . ; if the screen returned DIERR, id the error's source with a second
|
---|
| 55 | . ; error and exit
|
---|
| 56 | .
|
---|
| 57 | . I $G(DIERR) D
|
---|
| 58 | . . S DISKIP=1
|
---|
| 59 | . . N DICONTXT
|
---|
| 60 | . . S DICONTXT=$S(DISCR["F":"Whole File Screen",1:"Screen Parameter")
|
---|
| 61 | . . D ERR^DICF4(120,DIFILE,DIEN,"",DICONTXT)
|
---|
| 62 | Q DISKIP
|
---|
| 63 | ;
|
---|
| 64 | ACCEPT(DIFILE,DIEN,DIFLAGS,DIFIEN,DINDEX,DIDENT,DILIST,DI0NODE) ;
|
---|
| 65 | ; accept an entry into the output list
|
---|
| 66 | ;
|
---|
| 67 | A1 ; if we're doing the final pass (just looking to see if there are any
|
---|
| 68 | ; more entries), we don't actually add it to the list, just note what
|
---|
| 69 | ; we found and quit
|
---|
| 70 | ;
|
---|
| 71 | I DIDENT(-1,"JUST LOOKING") D Q
|
---|
| 72 | . S DIDENT(-1,"JUST LOOKING")=0
|
---|
| 73 | . S DIDENT(-1,"MORE?")=1
|
---|
| 74 | . Q:DIFLAGS[4
|
---|
| 75 | . N DISAME,I S DISAME=0
|
---|
| 76 | . F I=1:1 Q:I>DINDEX("#") D Q:DISAME<I
|
---|
| 77 | . . I DIDENT(-1,"LAST",I,"I")'=DINDEX(I) Q
|
---|
| 78 | . . S DISAME=I Q
|
---|
| 79 | . F I=1:1:(DINDEX("#")+1) K DIDENT(-1,"LAST",I,"I")
|
---|
| 80 | . Q:DISAME=DINDEX("#")
|
---|
| 81 | . F I=(DISAME+2):1:(DINDEX("#")+1) S DIDENT(-1,"LAST",I)=""
|
---|
| 82 | . S DIDENT(-1,"LAST","IEN")="" Q
|
---|
| 83 | ;
|
---|
| 84 | A2 ; increment the number found; if it's the max, we flag to make the
|
---|
| 85 | ; next pass a final just looking pass
|
---|
| 86 | ;
|
---|
| 87 | S DIDENT(-1)=DIDENT(-1)+1
|
---|
| 88 | I DIDENT(-1)=DIDENT(-1,"MAX") D
|
---|
| 89 | . S DIDENT(-1,"JUST LOOKING")=1
|
---|
| 90 | . Q:DIFLAGS[4
|
---|
| 91 | . N I F I=1:1:(DINDEX("#")+1) D
|
---|
| 92 | . . S (DIDENT(-1,"LAST",I),DIDENT(-1,"LAST",I,"I"))=DINDEX(I)
|
---|
| 93 | . . I I=1,"VP"[DINDEX(I,"TYPE"),'$D(DINDEX("ROOTCNG",1)) S DIDENT(-1,"LAST",I)=DINDEX0(1)
|
---|
| 94 | . . Q
|
---|
| 95 | . S DIDENT(-1,"LAST")=DIDENT(-1,"LAST",1)
|
---|
| 96 | . S DIDENT(-1,"LAST","IEN")=DIEN
|
---|
| 97 | . Q
|
---|
| 98 | ;
|
---|
| 99 | A3 ; increment (or decrement) the output list subscript
|
---|
| 100 | ;
|
---|
| 101 | S DILIST("ORDER")=$S(DIFLAGS[4:DIDENT(-1),1:DILIST("ORDER")+DINDEX("WAY"))
|
---|
| 102 | N DA M DA=DIEN
|
---|
| 103 | ;
|
---|
| 104 | A4 ; output the specified values of the record
|
---|
| 105 | ;
|
---|
| 106 | I DIFLAGS'["f" D
|
---|
| 107 | . D IDS^DICU2(.DIFILE,DIEN_DIFIEN,.DIFLAGS,.DINDEX,DILIST("ORDER"),.DIDENT,DILIST,.DI0NODE)
|
---|
| 108 | . Q
|
---|
| 109 | Q:DIFLAGS'[4
|
---|
| 110 | N DIREC S DIREC=DIEN I DIFLAGS["v" S DIREC=DIREC_";"_$P(DIFILE(DIFILE,"O"),U,2)
|
---|
| 111 | I DIFLAGS["f",DIFLAGS'["p" S @DILIST@(DIDENT(-1))=DIREC
|
---|
| 112 | S @DILIST@("B",($E($P(DI0NODE,U),1,DINDEX("MAXSUB"))_U_DIREC))=""
|
---|
| 113 | Q
|
---|
| 114 | ;
|
---|
| 115 | ; Possible output messages
|
---|
| 116 | ; 202 The input parameter that identifies the |1
|
---|
| 117 | ;
|
---|