- DICM3 ;SFISC/XAK,TKW-PROCESS INDIVIDUAL FILE FOR VAR PTR ;12/7/99 14:59 [ 04/02/2003 8:25 AM ]
- ;;22.0;VA FileMan;**1001**;APR 1, 2003
- ;;22.0;VA FileMan;**16,4,20**;Mar 30, 1999
- ;Per VHA Directive 10-93-142, this routine should not be modified.
- DIC ; Does recursive ^DIC call to single pointed-to file.
- Q:$D(DIVP(+DIVPDIC))
- I $D(DIV("V")) N % D X % I '$T K Y S Y=-1 D DQ Q
- . S Y=DIVP,Y(0)=DIVPDIC
- . S %=$S($G(DIV("V"))]"":DIV("V"),1:$G(DIV("V",1))) Q
- I '$D(^DIC(+DIVPDIC,0,"GL")) S Y=-1 D DQ Q
- S (Y,DIC)=^("GL"),%="DIC"_DICR
- N:'$D(DIVPSEL) DIVPSEL S DIVPSEL(DICR)=0
- S D=$G(DICR(DICR,4)) S:D="" D="B"
- I DIC["""" S Y="" F A1=1:1:$L(DIC,",")-1 S A0=$P(DIC,",",A1) S:A0["""" A0=$P(A0,"""")_""""""_$P(A0,"""",2)_""""""_$P(A0,"""",3) S Y=Y_A0_","
- ;
- ; Build screen to select only pointed-to entries.
- K DIC("S") N DICODE S DICODE=""
- I DIC(0)'["L"!'$D(DICR(DICR,"V")) D
- . N DIX S DIX=""""_D_"""" D
- . . I $G(DINDEX("#"))>1 D BLDC^DICM0("("_DIVDIC,DIX,DINDEX("#"),DIFILEI,Y,.DICODE,.DICR) Q
- . . S DICODE="X ""I 0"" N "_%_$S($D(DICR(DICR,"S")):",%Y"_DICR,1:"")_" "
- . . S DICODE=DICODE_"F "_%_"=0:0 S "_%_"=$O("_DIVDIC_DIX_",(+Y_"";"_$E(Y,2,99)_"""),"_%_")) Q:"_%_"'>0 I $D("_DIVDIC_%_",0))"
- . . I DIC(0)["T",DICR=1 S DICODE=DICODE_$$CHKTMP^DICM0(.DIC,DICR,DIFILEI,%)
- . . I $D(DICR(DICR,"S")) S DICODE=DICODE_" S %Y"_DICR_"=Y,Y="_%_" X DICR("_DICR_",""S"") S Y=%Y"_DICR_" I "
- . . S DICODE=DICODE_" Q" Q
- . S:DICODE]"" DIC("S")=DICODE Q
- ;
- ; Set DIC(0)
- S %=DIC(0),DIC(0)="D"_$E("M",%'["B") D
- . N I F I="E","O","B","T","V" I %[I S DIC(0)=DIC(0)_I
- . Q
- I %["L",$D(DICR(DICR,"V")),$$OKTOADD^DICM0(DIVDO,.DINDEX,.DIFINDER) D
- . I $P(DIVPDIC,U,6)="y" S DIC(0)=DIC(0)_"L"
- . ; Execute screen code for screened pointer (should set DIC("S")).
- . K D Q:$P(DIVPDIC,U,5)'="y"
- . N DICODE S DICODE=$G(^DD(DIVDO,DIVY,"V",DIVP,1)) Q:DICODE=""
- . N DICSSAV S DICSSAV=$G(DIC("S"))
- . X DICODE
- . S DIC("S")=$G(DIC("S"))_$S(DICSSAV]"":" "_DICSSAV,1:"")
- . Q
- E K D
- ; If user passed list of indexes to use on pointed-to file, setup.
- S %=$G(DIC("PTRIX",DIFILEI,DINDEX(1,"FIELD"),+DIVPDIC))
- I %]"" N DF,DID S D=% D SETIX^DICM0(.D,.DIC,.DID,.DF)
- S:$G(D)="" D="B" N DISAVED S DISAVED=D
- ;
- ; Write prompt
- I DIC(0)["E" D
- . I $G(DICODE)="" D H1^DIE3 W:'$D(DDS) ! Q
- . D H1 Q
- ;
- ; Set up rest of variables needed for DQ^DICQ or ^DIC call.
- D DO^DIC1
- N DS,DINDEX,DIFILEI
- S D=DISAVED K DISAVED
- ; Handle ? help
- I X?."?" D D DQ Q
- . S DZ=X_$E("?",'$D(DICR(DICR,"V")))
- . D DQ^DICQ S X=$S($D(DZ):DZ,1:"?"),Y=-1 Q
- ; Do ^DIC call.
- D X^DIC I $D(DUOUT) D DQ Q
- ;
- ; Process output from ^DIC call.
- S X=+Y_";"_$E(DIC,2,99),%=1 K:Y<0 X
- I Y<0,DIC(0)["E",$D(DIVP1),$D(DICR(DICR,"V")) W !
- I '$D(DICR(DICR,"V"))!(DICR>1) K DICR("^",+DIVPDIC) S DIVP(+DIVPDIC)=0
- I Y>0,'DIVPSEL(DICR),DIC(0)["E",'$P(Y,U,3),$P(@(DIC_"0)"),U,2)'["O" D
- . N I F I=(DICR-1):-1 Q:'$D(DIVPSEL(I)) S DIVPSEL(I)=1
- . D S1^DIE3 I $G(%Y)?1"^^".E S (DIROUT,DUOUT)=1
- . Q
- DQ I $D(DIC("PTRIX")) M DIV("PTRIX")=DIC("PTRIX")
- K A0,A1,DIC,DO S DIC=DIVDIC,D=$S($D(DICR(DICR,4)):DICR(DICR,4),1:"B")
- S DIC(0)=DICR(DICR,0)
- F %="V","PTRIX" I $D(DIV(%)) M DIC(%)=DIV(%)
- Q
- ;
- H1 W:'$D(DDS) !
- N A1,DST,DIPAR S A1="T"
- S DIPAR(1)=$P(DIVPDIC,U,2),DIPAR(2)=$P($G(^DD(DIVDO,DIVY,0)),U)
- S DST=$$EZBLD^DIALOG(8097,.DIPAR)
- D S^DIE3 W:'$D(DDS) ! Q
- ;
- ;8070 Searching for a |1|
- ;8097 Searching for a |1|, (pointed-to by |2|)
- ;
- DICM3 ;SFISC/XAK,TKW-PROCESS INDIVIDUAL FILE FOR VAR PTR ;12/7/99 14:59 [ 04/02/2003 8:25 AM ]
- +1 ;;22.0;VA FileMan;**1001**;APR 1, 2003
- +2 ;;22.0;VA FileMan;**16,4,20**;Mar 30, 1999
- +3 ;Per VHA Directive 10-93-142, this routine should not be modified.
- DIC ; Does recursive ^DIC call to single pointed-to file.
- +1 IF $DATA(DIVP(+DIVPDIC))
- QUIT
- +2 IF $DATA(DIV("V"))
- NEW %
- Begin DoDot:1
- +3 SET Y=DIVP
- SET Y(0)=DIVPDIC
- +4 SET %=$SELECT($GET(DIV("V"))]"":DIV("V"),1:$GET(DIV("V",1)))
- QUIT
- End DoDot:1
- XECUTE %
- IF '$TEST
- KILL Y
- SET Y=-1
- DO DQ
- QUIT
- +5 IF '$DATA(^DIC(+DIVPDIC,0,"GL"))
- SET Y=-1
- DO DQ
- QUIT
- +6 SET (Y,DIC)=^("GL")
- SET %="DIC"_DICR
- +7 IF '$DATA(DIVPSEL)
- NEW DIVPSEL
- SET DIVPSEL(DICR)=0
- +8 SET D=$GET(DICR(DICR,4))
- IF D=""
- SET D="B"
- +9 IF DIC[""""
- SET Y=""
- FOR A1=1:1:$LENGTH(DIC,",")-1
- SET A0=$PIECE(DIC,",",A1)
- IF A0[""""
- SET A0=$PIECE(A0,"""")_""""""_$PIECE(A0,"""",2)_""""""_$PIECE(A0,"""",3)
- SET Y=Y_A0_","
- +10 ;
- +11 ; Build screen to select only pointed-to entries.
- +12 KILL DIC("S")
- NEW DICODE
- SET DICODE=""
- +13 IF DIC(0)'["L"!'$DATA(DICR(DICR,"V"))
- Begin DoDot:1
- +14 NEW DIX
- SET DIX=""""_D_""""
- Begin DoDot:2
- +15 IF $GET(DINDEX("#"))>1
- DO BLDC^DICM0("("_DIVDIC,DIX,DINDEX("#"),DIFILEI,Y,.DICODE,.DICR)
- QUIT
- +16 SET DICODE="X ""I 0"" N "_%_$SELECT($DATA(DICR(DICR,"S")):",%Y"_DICR,1:"")_" "
- +17 SET DICODE=DICODE_"F "_%_"=0:0 S "_%_"=$O("_DIVDIC_DIX_",(+Y_"";"_$EXTRACT(Y,2,99)_"""),"_%_")) Q:"_%_"'>0 I $D("_DIVDIC_%_",0))"
- +18 IF DIC(0)["T"
- IF DICR=1
- SET DICODE=DICODE_$$CHKTMP^DICM0(.DIC,DICR,DIFILEI,%)
- +19 IF $DATA(DICR(DICR,"S"))
- SET DICODE=DICODE_" S %Y"_DICR_"=Y,Y="_%_" X DICR("_DICR_",""S"") S Y=%Y"_DICR_" I "
- +20 SET DICODE=DICODE_" Q"
- QUIT
- End DoDot:2
- +21 IF DICODE]""
- SET DIC("S")=DICODE
- QUIT
- End DoDot:1
- +22 ;
- +23 ; Set DIC(0)
- +24 SET %=DIC(0)
- SET DIC(0)="D"_$EXTRACT("M",%'["B")
- Begin DoDot:1
- +25 NEW I
- FOR I="E","O","B","T","V"
- IF %[I
- SET DIC(0)=DIC(0)_I
- +26 QUIT
- End DoDot:1
- +27 IF %["L"
- IF $DATA(DICR(DICR,"V"))
- IF $$OKTOADD^DICM0(DIVDO,.DINDEX,.DIFINDER)
- Begin DoDot:1
- +28 IF $PIECE(DIVPDIC,U,6)="y"
- SET DIC(0)=DIC(0)_"L"
- +29 ; Execute screen code for screened pointer (should set DIC("S")).
- +30 KILL D
- IF $PIECE(DIVPDIC,U,5)'="y"
- QUIT
- +31 NEW DICODE
- SET DICODE=$GET(^DD(DIVDO,DIVY,"V",DIVP,1))
- IF DICODE=""
- QUIT
- +32 NEW DICSSAV
- SET DICSSAV=$GET(DIC("S"))
- +33 XECUTE DICODE
- +34 SET DIC("S")=$GET(DIC("S"))_$SELECT(DICSSAV]"":" "_DICSSAV,1:"")
- +35 QUIT
- End DoDot:1
- +36 IF '$TEST
- KILL D
- +37 ; If user passed list of indexes to use on pointed-to file, setup.
- +38 SET %=$GET(DIC("PTRIX",DIFILEI,DINDEX(1,"FIELD"),+DIVPDIC))
- +39 IF %]""
- NEW DF,DID
- SET D=%
- DO SETIX^DICM0(.D,.DIC,.DID,.DF)
- +40 IF $GET(D)=""
- SET D="B"
- NEW DISAVED
- SET DISAVED=D
- +41 ;
- +42 ; Write prompt
- +43 IF DIC(0)["E"
- Begin DoDot:1
- +44 IF $GET(DICODE)=""
- DO H1^DIE3
- IF '$DATA(DDS)
- WRITE !
- QUIT
- +45 DO H1
- QUIT
- End DoDot:1
- +46 ;
- +47 ; Set up rest of variables needed for DQ^DICQ or ^DIC call.
- +48 DO DO^DIC1
- +49 NEW DS,DINDEX,DIFILEI
- +50 SET D=DISAVED
- KILL DISAVED
- +51 ; Handle ? help
- +52 IF X?."?"
- Begin DoDot:1
- +53 SET DZ=X_$EXTRACT("?",'$DATA(DICR(DICR,"V")))
- +54 DO DQ^DICQ
- SET X=$SELECT($DATA(DZ):DZ,1:"?")
- SET Y=-1
- QUIT
- End DoDot:1
- DO DQ
- QUIT
- +55 ; Do ^DIC call.
- +56 DO X^DIC
- IF $DATA(DUOUT)
- DO DQ
- QUIT
- +57 ;
- +58 ; Process output from ^DIC call.
- +59 SET X=+Y_";"_$EXTRACT(DIC,2,99)
- SET %=1
- IF Y<0
- KILL X
- +60 IF Y<0
- IF DIC(0)["E"
- IF $DATA(DIVP1)
- IF $DATA(DICR(DICR,"V"))
- WRITE !
- +61 IF '$DATA(DICR(DICR,"V"))!(DICR>1)
- KILL DICR("^",+DIVPDIC)
- SET DIVP(+DIVPDIC)=0
- +62 IF Y>0
- IF 'DIVPSEL(DICR)
- IF DIC(0)["E"
- IF '$PIECE(Y,U,3)
- IF $PIECE(@(DIC_"0)"),U,2)'["O"
- Begin DoDot:1
- +63 NEW I
- FOR I=(DICR-1):-1
- IF '$DATA(DIVPSEL(I))
- QUIT
- SET DIVPSEL(I)=1
- +64 DO S1^DIE3
- IF $GET(%Y)?1"^^".E
- SET (DIROUT,DUOUT)=1
- +65 QUIT
- End DoDot:1
- DQ IF $DATA(DIC("PTRIX"))
- MERGE DIV("PTRIX")=DIC("PTRIX")
- +1 KILL A0,A1,DIC,DO
- SET DIC=DIVDIC
- SET D=$SELECT($DATA(DICR(DICR,4)):DICR(DICR,4),1:"B")
- +2 SET DIC(0)=DICR(DICR,0)
- +3 FOR %="V","PTRIX"
- IF $DATA(DIV(%))
- MERGE DIC(%)=DIV(%)
- +4 QUIT
- +5 ;
- H1 IF '$DATA(DDS)
- WRITE !
- +1 NEW A1,DST,DIPAR
- SET A1="T"
- +2 SET DIPAR(1)=$PIECE(DIVPDIC,U,2)
- SET DIPAR(2)=$PIECE($GET(^DD(DIVDO,DIVY,0)),U)
- +3 SET DST=$$EZBLD^DIALOG(8097,.DIPAR)
- +4 DO S^DIE3
- IF '$DATA(DDS)
- WRITE !
- QUIT
- +5 ;
- +6 ;8070 Searching for a |1|
- +7 ;8097 Searching for a |1|, (pointed-to by |2|)
- +8 ;